| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- const level = require('level')
- const rootDb = level('rss-unlimited')
- const wrap = (db, prefix) => {
- const locals = {
- async get(key, ...args) {
- 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 || '<root>'}]`
- }
- }
- 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, '')
|