@derhuerst/level-tree

0.1.1 • Public • Published

level-tree

Store trees in a LevelDB.

npm version build status ISC-licensed chat on gitter support me on Patreon

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.

Package Sidebar

Install

npm i @derhuerst/level-tree

Weekly Downloads

0

Version

0.1.1

License

ISC

Unpacked Size

13.5 kB

Total Files

9

Last publish

Collaborators

  • derhuerst