Awesome
ref-db
access object with transparent reference to synchronous db operation (not async operation)
Supported Platforms
ref-db is built on top of cross-platform Storage, hence it works on:
- Browser (using window.localStorage)
- Node.js (using node-localstorage)
How it works?
The loaded data object is proxied, it saves and loads data from the storage automatically. You can just use it as if they're all in-memory.
Usage
Create Proxy Store (database)
With in-memory caching:
import { proxyStoreCollectionsByPath } from 'ref-db'
let cachedDB = proxyStoreCollectionsByPath({
path: 'data',
storeQuota: Number.MAX_SAFE_INTEGER, // optional
cacheSize: Number.MAX_SAFE_INTEGER, // optional
whitelistCollectionNames: ['users', 'posts', 'comments'], // optional
})
Without caching (still benefit from OS-level file caching):
import { proxyStoreCollections } from 'ref-db'
import { LocalStorage } from 'node-localstorage'
import { Store } from '@beenotung/tslib/store'
let localStorage = new LocalStorage('data')
let store = Store.create(localStorage)
let db = proxyStoreCollections({
store,
whitelistCollectionNames: ['users', 'posts', 'comments'], // optional
})
Whitelisted collections are auto proxied from the database object:
> console.log(db)
{
users: '[object Proxy]',
posts: '[object Proxy]',
comments: '[object Proxy]',
[Symbol(store)]: CachedObjectStore {
...
}
}
Each collection can be used as if they are ordinary javascript object. The data will be loaded from storage lazily.
> db.users
{}
> Object.keys(db.users)
[ 'user-1' ]
> Object.keys(db.users).forEach(key => delete db.users[key])
undefined
> Object.keys(db.users)
[]
> db.users["user-1"] = { id: "user-1", name: "Alice" }
{ id: 'user-1', name: 'Alice' }
> Object.keys(db.users)
[ 'user-1' ]
> db.users["user-1"]
{ id: 'user-1', name: 'Alice' }
> db.posts["post-1"] = { id: "post-1", author: { $ref: "users", id: "user-1" } }
{ id: 'post-1', author: { '$ref': 'users', id: 'user-1' } }
> db.posts["post-1"]
{ id: 'post-1', author: { '$ref': 'users', id: 'user-1' } }
> db.posts["post-1"].author
{ id: 'user-1', name: 'Alice' }
> db.posts["post-1"].author.name
'Alice'
License
BSD-2-Clause (Free Open Sourced Project)