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; |