const level = require('level') const rootDb = level('rss-unlimited') const wrap = (db, prefix) => { const locals = { async get(key, ...args) { if (!key) throw new Error(`Key cannot be empty: ${prefix}${key}`) try { return JSON.parse(await db.get(prefix + key, ...args)) } catch (err) { if (err.name === 'NotFoundError') return null throw err } }, async put(key, value, ...args) { return await db.put(prefix + key, JSON.stringify(value), ...args) }, async del(key, ...args) { return await db.del(prefix + key, ...args) }, batch(array, ...args) { if (array) { array = array.map(item => ({ ...item, key: prefix + item.key })) return db.batch(array, ...args) } else { return wrap(db.batch(), prefix) } }, toString() { return `[DB ${prefix || ''}]` } } return new Proxy(db, { get(db, key) { if (locals[key]) return locals[key] if (db[key]) return db[key] return wrap(db, `${prefix}${key}.`) } }) } module.exports = wrap(rootDb, '')