db.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. const level = require('level')
  2. const rootDb = level('rss-unlimited')
  3. const wrap = (db, prefix) => {
  4. const locals = {
  5. async get(key, ...args) {
  6. try {
  7. return JSON.parse(await db.get(prefix + key, ...args))
  8. } catch (err) {
  9. if (err.name === 'NotFoundError') return null
  10. throw err
  11. }
  12. },
  13. async put(key, value, ...args) {
  14. return await db.put(prefix + key, JSON.stringify(value), ...args)
  15. },
  16. async del(key, ...args) {
  17. return await db.del(prefix + key, ...args)
  18. },
  19. batch(array, ...args) {
  20. if (array) {
  21. array = array.map(item => ({
  22. ...item,
  23. key: prefix + item.key
  24. }))
  25. return db.batch(array, ...args)
  26. } else {
  27. return wrap(db.batch(), prefix)
  28. }
  29. },
  30. toString() {
  31. return `[DB ${prefix || '<root>'}]`
  32. }
  33. }
  34. return new Proxy(db, {
  35. get(db, key) {
  36. if (locals[key]) return locals[key]
  37. if (db[key]) return db[key]
  38. return wrap(db, `${prefix}${key}.`)
  39. }
  40. })
  41. }
  42. module.exports = wrap(rootDb, '')