let DS = require('ds') try { if (DS.toString() === '[object Object]') { DS = DS.DS } } catch {} function Cache(ttl = 0, save_file = null) { let me = this me.now = function () { return new Date().getTime() } me.ttl = ttl || 0 if (save_file) { me.data = new DS(save_file) } else { me.data = new DS() } let save = function () { if (save_file) me.data.save(save_file) return me } let nuke = function (key) { delete me.data[key] save() return me } me.get = function (key, cb) { let val = null let obj = me.data[key] if (obj) { if (obj.expires == 0 || me.now() < obj.expires) { val = obj.val } else { val = null nuke(key) } } if (cb) cb(val) return val } me.del = function (key, cb) { let oldval = me.get(key) nuke(key) if (cb) cb(oldval) return oldval } me.put = function (key, val = null, ttl = 0, cb) { if (ttl == 0) ttl = me.ttl let expires = ttl == 0 ? 0 : me.now() + ttl var oldval = me.del(key) if (val !== null) { me.data[key] = { expires, val, } save() } if (cb) cb(oldval) return oldval } } module.exports = Cache