live-data-sync
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

live-data-sync

Persist and restore the application state. Designed for web-redux

npm Package Version

Features

  • Support nested array and object
  • Only store incremental update (instead of full snapshot)
  • Backed by sqlite in sync mode (which is faster than async mode)
  • 100% test coverage
  • Using append-only log, with on-demand compaction

Usage Example

Create a better-sqlite3 DBInstance

import { newDB } from 'better-sqlite3-schema'

let db = newDB({
  path: 'state.db',
  migrate: false,
})

Create a persistent Dict

A dict can contains multiple objects. Each object is a "singleton" key-value pair.

import { Dict } from 'live-data-sync'

let dict = new Dict(db)

// init values if not exists
dict.init('config', {
  version: '1.0.0',
  JWT_SECRET: process.env.JWT_SECRET,
})

dict.data.version
// '1.0.0'

// partial update
dict.update('config', {
  version: '1.0.1',
})

dict.data.version
// '1.0.1'

dict.delete('config')
dict.data.config
// {}

For more usage example, refers to dict.spec.ts

Create a persistent Collection

A collection can contains multiple type of objects. Each object is an "instance of" key-value pair sharing similar fields of it's type.

import { Collection, Int, ObjectDict } from 'live-data-sync'

let collection = new Collection<{
  users: ObjectDict<{ name: string }>
  posts: ObjectDict<{ user_id: Int; content: string }>
}>(db)

let user_id = collection.add('users', { name: 'alice' })
// 1
let post_id = collection.add('posts', { user_id, content: 'Hello World' })
// 2

collection.data.posts[post_id as number].content
// 'Hello World'

// partial update
collection.update('posts', post_id, { content: 'Hi' })

collection.data.posts[post_id as number]
// { user_id: 1, content: 'Hi' }

collection.delete('posts', post_id)

collection.data.posts[post_id as number]
// undefined

For more usage example, refers to collection.spec.ts

License

This project is licensed with BSD-2-Clause

This is free, libre, and open-source software. It comes down to four essential freedoms [ref]:

  • The freedom to run the program as you wish, for any purpose
  • The freedom to study how the program works, and change it so it does your computing as you wish
  • The freedom to redistribute copies so you can help others
  • The freedom to distribute copies of your modified versions to others

Package Sidebar

Install

npm i live-data-sync

Weekly Downloads

1

Version

1.0.3

License

BSD-2-Clause

Unpacked Size

67.5 kB

Total Files

49

Last publish

Collaborators

  • beenotung