@derhuerst/level-tree
v0.1.1
Published
Store trees in a LevelDB.
Downloads
7
Maintainers
Readme
level-tree
Store trees in a LevelDB.
Installing
npm install @derhuerst/level-tree
Usage
const levelTree = require('@derhuerst/level-tree')
const db = levelup(memdown)
const tree = levelTree(db)
tree.put('example', {
a1: 'A1',
a2: [
'A2-0',
{
b1: 'A2-1-B1'
}
]
}, (err) => {
if (err) return console.error(err)
db.put('example.a2.0', 'a new value', (err) => {
if (err) return console.error(err)
tree.get('example', (err, example) => {
if (err) return console.error(err)
console.log(example)
})
})
})
{
a1: 'A1',
a2: [
'a new value',
{
b1: 'A2-1-B1'
}
]
}
You can also load get
, put
& del
separately:
const createGet = require('@derhuerst/level-tree/get')
const createPut = require('@derhuerst/level-tree/put')
const createDel = require('@derhuerst/level-tree/del')
const get = createGet(db)
const put = createPut(db)
const del = createDel(db)
patches
level-tree
can apply JSON Patch diffs to the tree. Using the db
from above:
const createPatch = require('@derhuerst/level-tree/patch')
const patch = createPatch(db)
patch('example', [
{op: 'move', path: '/a3', from: '/a2/1'}
], (err) => {
if (err) return console.error(err)
tree.get('example', (err, example) => {
if (err) return console.error(err)
console.log(example)
})
})
{
a1: 'A1',
a2: [
'a new value'
],
a3: {
b1: 'A2-1-B1'
}
}
API
const tree = createTree(db)
db
must be a levelup-compatible database.
tree.get(namespace, cb)
Will try to infer the tree from all keys starting with namespace
.
tree.put(namespace, [dryRun], data, cb)
If dryRun
is true
, cb
will be called with all ops to be executed. Otherwise, they will be executed.
tree.del(namespace, [dryRun], cb)
If dryRun
is true
, cb
will be called with all ops to be executed. Otherwise, they will be executed.
If it fails to find any chilren under namespace
, it will try to delete at namespace
itself (the root so to say) as well.
Contributing
If you have a question or have difficulties using level-tree
, please double-check your code and setup first. If you think you have found a bug or want to propose a feature, refer to the issues page.