Kaaya
Kaaya is a delightful javascript library which target on state management and data synchronization between Applications.
- Samples: Here
Still under development, do not use except for testing
- Support different data structure (and their usual format):
- Key Value: Often used to store configuration (
.ini
,.yaml
,.json
) - Table: Data grid like excel (
.csv
,.yaml
,.json
) - Entities: List of instantiated object
- Files: File/Folder structure (like a file explorer)
- or plain JS object to store your own data
- Key Value: Often used to store configuration (
- Watch for data modification (mutation)
- Keep an history of mutation and allow to replay them on other object
- Allow to undo/redo modification
- Keep mutation as plain JS object (serializable)
- Allow to regroup mutation as transaction (to give context about changes)
- Allow to use async hook (for animation or UI interaction)
Usage
Basic Store Creation
// create a new store with custom datastore.data.a = 5store.data.a = 10// so far everything looks normal: { a: 10, b: 2 }
History Management
// let's play with the historystore.undostore.data // { a: 5, b: 2 } store.undostore.data // { a: 1, b: 2 } store.redostore.data // { a: 5, b: 2 }
Synchronization with other store
- only the history of mutation is send (modification)
- can be done over network, file, events, ...
// create other store and sync them with our first one dataclient1.syncstore.historyclient1.data // <= { a: 5, b: 6 } client2.syncstore.historyclient2.data // <= { a: 5, b: 8 } // and now let's make a change and progate itstore.data.a += 10client1.syncstore.history client1.data // { a: 15, b: 6 } properly sync :)client2.data // { a: 5, b: 8 } not sync yet
And more ....
Development
Getting Started
If you want to take a look at the code or help, it's quite easy to get started
npm installnpm run dev
This will start a server on http://localhost:8080/ where you can test few samples with the current version
Tests
When you are done with your change, just make sure to run tests npm run test
Build
To make a build (generated in build/
)
npm run build
Known Limitation
- Some array function like
.push
or.slice
cause the whole object to be mutated and not just the value being changed - Doesnt handle advance object like
Set
orMap