https://github.com/derhuerst/level-tree
Store trees in a LevelDB.
https://github.com/derhuerst/level-tree
level leveldb tree
Last synced: about 1 month ago
JSON representation
Store trees in a LevelDB.
- Host: GitHub
- URL: https://github.com/derhuerst/level-tree
- Owner: derhuerst
- License: isc
- Created: 2017-08-20T08:21:20.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2020-05-03T15:56:46.000Z (about 5 years ago)
- Last Synced: 2025-04-15T05:36:51.261Z (3 months ago)
- Topics: level, leveldb, tree
- Language: JavaScript
- Homepage: https://github.com/derhuerst/level-tree
- Size: 43 KB
- Stars: 3
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: license.md
Awesome Lists containing this project
README
# level-tree
**Store trees in a [LevelDB](https://github.com/level/levelup).**
[](https://www.npmjs.com/package/@derhuerst/level-tree)
[](https://travis-ci.org/derhuerst/level-tree)

[](https://gitter.im/derhuerst)
[](https://patreon.com/derhuerst)## Installing
```shell
npm install @derhuerst/level-tree
```## Usage
```js
const levelTree = require('@derhuerst/level-tree')const db = level('path/to/leveldb')
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)
})
})
})
``````js
{
a1: 'A1',
a2: [
'a new value',
{
b1: 'A2-1-B1'
}
]
}
```You can also load `get`, `put` & `del` separately:
```js
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*](http://jsonpatch.com/) diffs to the tree. Using the `db` from above:
```js
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)
})
})
``````js
{
a1: 'A1',
a2: [
'a new value'
],
a3: {
b1: 'A2-1-B1'
}
}
```## API
```js
const tree = createTree(db)
````db` must be a [levelup](https://www.npmjs.com/package/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](https://www.npmjs.com/package/levelup#batch) to be executed. Otherwise, they will be executed.
## `tree.del(namespace, [dryRun], cb)`
If `dryRun` is `true`, `cb` will be called with all [ops](https://www.npmjs.com/package/levelup#batch) 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](https://github.com/derhuerst/level-tree/issues).