UNPKG

1.34 kBJavaScriptView Raw
1'use strict';
2
3var Promise = require('bluebird');
4var NodeCache = require('node-cache');
5var AuthContext = require('@leisurelink/auth-context').AuthContext;
6
7var cache = new NodeCache({
8 useClones: false,
9 checkperiod: 0 /* disable active reaping of cache, items are only reaped when the item is looked up next */
10});
11var _cache = cache;
12Promise.promisifyAll(cache);
13
14function _key(ns, key){
15 return (ns ? ns + ':' : '') + key;
16}
17
18module.exports = {
19 get: function(ns, key, ttl, getter) {
20 var k = _key(ns, key);
21 return cache.getAsync(k).then(function(result){
22 if (result !== undefined) {
23 if (!(result instanceof AuthContext) || !result.isExpired) {
24 return result;
25 }
26 }
27 return Promise.resolve(getter())
28 .then(function(result){
29 if (result !== undefined) {
30 return cache.setAsync(k, result, ttl / 1000).then(function(){
31 return result;
32 });
33 }
34 return result;
35 });
36 });
37 },
38 enable: function(){
39 cache = _cache;
40 },
41 disable: function(){
42 cache = {
43 getAsync: function(){ return Promise.resolve(undefined); },
44 setAsync: function(){ return Promise.resolve(); },
45 flushAll: function(){ }
46 };
47 },
48 clear: function(){
49 cache.flushAll();
50 },
51 key: _key,
52 _cache: cache
53};