UNPKG

@orbitdb/core

Version:

Distributed p2p database on IPFS

121 lines (109 loc) 2.81 kB
/** * @namespace Storage-Level * @memberof module:Storage * @description * LevelStorage stores data to a Level-compatible database. * * To learn more about Level, see {@link https://github.com/Level/level}. */ import { Level } from 'level' const defaultPath = './level' const defaultValueEncoding = 'view' /** * Creates an instance of LevelStorage. * @function * @param {Object} [params={}] One or more parameters for configuring * LevelStorage. * @param {string} [params.path=defaultPath] The Level path. * @param {string} [params.valueEncoding=defaultValueEncoding] Value encoding. * @return {module:Storage.Storage-Level} An instance of LevelStorage. * @memberof module:Storage * @instance */ const LevelStorage = async ({ path, valueEncoding } = {}) => { path = path || defaultPath valueEncoding = valueEncoding || defaultValueEncoding const db = new Level(path, { valueEncoding, passive: true }) await db.open() /** * Puts data to Level. * @function * @param {string} hash The hash of the data to put. * @param {*} data The data to store. * @memberof module:Storage.Storage-Level * @instance */ const put = async (hash, value) => { await db.put(hash, value) } /** * Deletes data from Level. * @function * @param {string} hash The hash of the data to delete. * @param {*} data The data to store. * @memberof module:Storage.Storage-Level * @instance */ const del = async (hash) => { await db.del(hash) } /** * Gets data from Level. * @function * @param {string} hash The hash of the data to get. * @memberof module:Storage.Storage-Level * @instance */ const get = async (hash) => { try { const value = await db.get(hash) if (value) { return value } } catch (e) { // LEVEL_NOT_FOUND (ie. key not found) } } /** * Iterates over records stored in Level. * @function * @yields [string, string] The next key/value pair from Level. * @memberof module:Storage.Storage-Level * @instance */ const iterator = async function * ({ amount, reverse } = {}) { const iteratorOptions = { limit: amount || -1, reverse: reverse || false } for await (const [key, value] of db.iterator(iteratorOptions)) { yield [key, value] } } const merge = async (other) => {} /** * Clears the contents of the Level db. * @function * @memberof module:Storage.Storage-Level * @instance */ const clear = async () => { await db.clear() } /** * Closes the Level db. * @function * @memberof module:Storage.Storage-Level * @instance */ const close = async () => { await db.close() } return { put, del, get, iterator, merge, clear, close } } export default LevelStorage