live-data-sync
v1.0.3
Published
Persist and restore the application state.
Downloads
12
Maintainers
Readme
live-data-sync
Persist and restore the application state. Designed for web-redux
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