74 lines
1.5 KiB
JavaScript
74 lines
1.5 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
/*global Promise*/
|
||
|
var defer;
|
||
|
|
||
|
if ('function' === typeof setImmediate) {
|
||
|
defer = setImmediate;
|
||
|
} else {
|
||
|
defer = function (fn) { process.nextTick(fn.bind.apply(fn, arguments)); };
|
||
|
}
|
||
|
|
||
|
function create(opts) {
|
||
|
opts = opts || {};
|
||
|
// don't leak prototypes as implicitly non-null
|
||
|
var db = Object.create(null);
|
||
|
|
||
|
function log() {
|
||
|
if (!opts.debug) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
console.log.apply(console, arguments);
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
// required / recommended
|
||
|
set: function (id, data, fn) {
|
||
|
log('set(id, data)', id, data);
|
||
|
db[id] = data;
|
||
|
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null);
|
||
|
}
|
||
|
, get: function (id, fn) {
|
||
|
log('get(id)', id);
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null, 'undefined' === typeof db[id] ? null : db[id]);
|
||
|
}
|
||
|
, touch: function (id, data, fn) {
|
||
|
db[id] = data;
|
||
|
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null);
|
||
|
}
|
||
|
, destroy: function (id, fn) {
|
||
|
log('destroy(id)', id);
|
||
|
delete db[id];
|
||
|
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null);
|
||
|
}
|
||
|
// optional
|
||
|
, all: function (fn) {
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null, Object.keys(db).map(function (key) {
|
||
|
return db[key];
|
||
|
}));
|
||
|
}
|
||
|
, length: function (fn) {
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null, Object.keys(db).length);
|
||
|
}
|
||
|
, clear: function (fn) {
|
||
|
log('clear()', id);
|
||
|
db = Object.create(null);
|
||
|
|
||
|
if (!fn) { return; }
|
||
|
defer(fn, null);
|
||
|
}
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports.create = create;
|