From d5268c8d7b694ec72613527a61217e67db26d57c Mon Sep 17 00:00:00 2001 From: Andres Olave Date: Wed, 14 Oct 2015 17:10:53 +0300 Subject: [PATCH 1/2] Adds support for different replacementStrategies Implements cache reinitialization that doesnt affect LRU --- dist/cachefactory.js | 273 ++++++++++++++------ dist/cachefactory.min.js | 2 +- dist/cachefactory.min.map | 2 +- src/index.js | 235 +++++++++++------ test/unit/DSCacheFactory/index.info.test.js | 1 + 5 files changed, 362 insertions(+), 151 deletions(-) diff --git a/dist/cachefactory.js b/dist/cachefactory.js index 7e96420..b9976ef 100644 --- a/dist/cachefactory.js +++ b/dist/cachefactory.js @@ -63,7 +63,16 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { + var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; + + var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); + + function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + + function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + var BinaryHeap = __webpack_require__(1); + var _Promise = null; try { _Promise = window.Promise; @@ -130,6 +139,119 @@ return /******/ (function(modules) { // webpackBootstrap return keySet; }; + var BaseLruStrategy = (function () { + function BaseLruStrategy() { + _classCallCheck(this, BaseLruStrategy); + + this.$$lruHeap = new BinaryHeap(function (x) { + return x.accessed; + }, utils.equals); + } + + /** + * the object returned by priorityQueue() must implement + * size() - the number of items being tracked + * peek() - which returns next item to remove + * removeAll() - which resets underlying tracking mechanism + */ + + _createClass(BaseLruStrategy, [{ + key: 'priorityQueue', + value: function priorityQueue() { + return this.$$lruHeap; + } + }]); + + return BaseLruStrategy; + })(); + + var DefaultLruStrategy = (function (_BaseLruStrategy) { + _inherits(DefaultLruStrategy, _BaseLruStrategy); + + function DefaultLruStrategy() { + _classCallCheck(this, DefaultLruStrategy); + + _get(Object.getPrototypeOf(DefaultLruStrategy.prototype), 'constructor', this).call(this); + } + + _createClass(DefaultLruStrategy, [{ + key: 'onGet', + value: function onGet(key, item) { + var now = Date.now(); + this.$$lruHeap.remove(item); + item.accessed = now; + this.$$lruHeap.push(item); + return true; + } + }, { + key: 'onPut', + value: function onPut(key, item) { + this.$$lruHeap.push(item); + } + }, { + key: 'onRemove', + value: function onRemove(key, item) { + this.$$lruHeap.remove(item); + } + }]); + + return DefaultLruStrategy; + })(BaseLruStrategy); + + var StorageLruStrategy = (function (_BaseLruStrategy2) { + _inherits(StorageLruStrategy, _BaseLruStrategy2); + + function StorageLruStrategy() { + _classCallCheck(this, StorageLruStrategy); + + _get(Object.getPrototypeOf(StorageLruStrategy.prototype), 'constructor', this).call(this); + } + + _createClass(StorageLruStrategy, [{ + key: 'onGet', + value: function onGet(key, item) { + var now = Date.now(); + this.$$lruHeap.remove({ + key: key, + accessed: item.accessed + }); + item.accessed = now; + this.$$lruHeap.push({ + key: key, + accessed: now + }); + return true; + } + }, { + key: 'onPut', + value: function onPut(key, item) { + this.$$lruHeap.push({ + key: key, + accessed: item.accessed + }); + } + }, { + key: 'onRemove', + value: function onRemove(key, item) { + this.$$lruHeap.remove({ + key: key, + accessed: item.accessed + }); + } + }]); + + return StorageLruStrategy; + })(BaseLruStrategy); + + var lru = { + 'default': function _default() { + return new DefaultLruStrategy(); + }, + withStorage: function withStorage() { + return new StorageLruStrategy(); + } + }; + var defaults = { capacity: Number.MAX_VALUE, maxAge: Number.MAX_VALUE, @@ -142,7 +264,8 @@ return /******/ (function(modules) { // webpackBootstrap disabled: false, storagePrefix: 'cachefactory.caches.', storeOnResolve: false, - storeOnReject: false + storeOnReject: false, + replacementStrategy: lru }; var caches = {}; @@ -157,12 +280,10 @@ return /******/ (function(modules) { // webpackBootstrap var $$data = {}; var $$promises = {}; var $$storage = null; + var $$replacementStrategy = null; var $$expiresHeap = new BinaryHeap(function (x) { return x.expires; }, utils.equals); - var $$lruHeap = new BinaryHeap(function (x) { - return x.accessed; - }, utils.equals); var cache = caches[cacheId] = { @@ -178,7 +299,7 @@ return /******/ (function(modules) { // webpackBootstrap } $$storage = null; $$data = null; - $$lruHeap = null; + $$replacementStrategy = null; $$expiresHeap = null; this.$$prefix = null; delete caches[this.$$id]; @@ -230,48 +351,15 @@ return /******/ (function(modules) { // webpackBootstrap throw new Error('options.onExpire must be a function!'); } - var item = undefined; - - if ($$storage) { - if ($$promises[key]) { - return $$promises[key]; - } - - var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key); - - if (itemJson) { - item = utils.fromJson(itemJson); - } else { - return; - } - } else { - if (!(key in $$data)) { - return; - } - - item = $$data[key]; + var item = this.doGetItem(key); + if (!item || _isPromiseLike(item)) { + return item; } - var value = item.value; - var now = new Date().getTime(); - - if ($$storage) { - $$lruHeap.remove({ - key: key, - accessed: item.accessed - }); - item.accessed = now; - $$lruHeap.push({ - key: key, - accessed: now - }); - } else { - $$lruHeap.remove(item); - item.accessed = now; - $$lruHeap.push(item); - } + var modified = $$replacementStrategy.onGet(key, item); - if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < now) { + var value = item.value; + if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < Date.now()) { this.remove(key); if (this.$$onExpire) { @@ -280,7 +368,7 @@ return /******/ (function(modules) { // webpackBootstrap options.onExpire.call(this, key, item.value); } value = undefined; - } else if ($$storage) { + } else if ($$storage && modified) { $$storage().setItem(this.$$prefix + '.data.' + key, JSON.stringify(item)); } @@ -330,7 +418,7 @@ return /******/ (function(modules) { // webpackBootstrap storageMode: this.$$storageMode, storageImpl: $$storage ? $$storage() : undefined, disabled: !!this.$$disabled, - size: $$lruHeap && $$lruHeap.size() || 0 + size: $$replacementStrategy && $$replacementStrategy.priorityQueue().size() || 0 }; } }, @@ -440,10 +528,7 @@ return /******/ (function(modules) { // webpackBootstrap expires: item.expires }); // Add to lru heap - $$lruHeap.push({ - key: key, - accessed: item.accessed - }); + $$replacementStrategy.onPut(key, item); // Set item $$storage().setItem(this.$$prefix + '.data.' + key, JSON.stringify(item)); var exists = false; @@ -465,15 +550,16 @@ return /******/ (function(modules) { // webpackBootstrap // Add to expires heap $$expiresHeap.push(item); // Add to lru heap - $$lruHeap.push(item); + $$replacementStrategy.onPut(key, item); // Set item $$data[key] = item; delete $$promises[key]; } // Handle exceeded capacity - if ($$lruHeap.size() > this.$$capacity) { - this.remove($$lruHeap.peek().key); + var replacementQueue = $$replacementStrategy.priorityQueue(); + if (replacementQueue.size() > this.$$capacity) { + this.remove(replacementQueue.peek().key); } return value; @@ -487,10 +573,7 @@ return /******/ (function(modules) { // webpackBootstrap if (itemJson) { var item = utils.fromJson(itemJson); - $$lruHeap.remove({ - key: key, - accessed: item.accessed - }); + $$replacementStrategy.onRemove(key, item); $$expiresHeap.remove({ key: key, expires: item.expires @@ -508,7 +591,7 @@ return /******/ (function(modules) { // webpackBootstrap } } else { var value = $$data[key] ? $$data[key].value : undefined; - $$lruHeap.remove($$data[key]); + $$replacementStrategy.onRemove(key, $$data[key]); $$expiresHeap.remove($$data[key]); $$data[key] = null; delete $$data[key]; @@ -517,9 +600,11 @@ return /******/ (function(modules) { // webpackBootstrap }, removeAll: function removeAll() { + if ($$replacementStrategy) { + $$replacementStrategy.priorityQueue().removeAll(); + } + $$expiresHeap.removeAll(); if ($$storage) { - $$lruHeap.removeAll(); - $$expiresHeap.removeAll(); var keysJson = $$storage().getItem(this.$$prefix + '.keys'); if (keysJson) { @@ -531,8 +616,6 @@ return /******/ (function(modules) { // webpackBootstrap } $$storage().setItem(this.$$prefix + '.keys', JSON.stringify([])); } else { - $$lruHeap.removeAll(); - $$expiresHeap.removeAll(); for (var key in $$data) { $$data[key] = null; } @@ -604,8 +687,9 @@ return /******/ (function(modules) { // webpackBootstrap this.$$capacity = capacity; } var removed = {}; - while ($$lruHeap.size() > this.$$capacity) { - removed[$$lruHeap.peek().key] = this.remove($$lruHeap.peek().key); + var replacementQueue = $$replacementStrategy.priorityQueue(); + while (replacementQueue.size() > this.$$capacity) { + removed[replacementQueue.peek().key] = this.remove(replacementQueue.peek().key); } return removed; }, @@ -715,9 +799,9 @@ return /******/ (function(modules) { // webpackBootstrap } if ('storageMode' in cacheOptions || 'storageImpl' in cacheOptions) { - this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl); + this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl, cacheOptions.replacementStrategy || defaults.replacementStrategy); } else if (strict) { - this.setStorageMode(defaults.storageMode, defaults.storageImpl); + this.setStorageMode(defaults.storageMode, defaults.storageImpl, defaults.replacementStrategy); } if ('storeOnResolve' in cacheOptions) { @@ -791,7 +875,29 @@ return /******/ (function(modules) { // webpackBootstrap } }, - setStorageMode: function setStorageMode(storageMode, storageImpl) { + doGetItem: function doGetItem(key) { + if ($$storage) { + if ($$promises[key]) { + return $$promises[key]; + } + + var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key); + + if (itemJson) { + return utils.fromJson(itemJson); + } else { + return; + } + } else { + if (!(key in $$data)) { + return; + } + + return $$data[key]; + } + }, + + setStorageMode: function setStorageMode(storageMode, storageImpl, replacementStrategy) { if (!utils.isString(storageMode)) { throw new Error('storageMode must be a string!'); } else if (storageMode !== 'memory' && storageMode !== 'localStorage' && storageMode !== 'sessionStorage') { @@ -801,16 +907,18 @@ return /******/ (function(modules) { // webpackBootstrap var shouldReInsert = false; var items = {}; - var keys = this.keys(); + if (typeof this.$$storageMode === 'string' && this.$$storageMode !== storageMode) { + var keys = this.keys(); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - items[keys[i]] = this.get(keys[i]); - } - for (i = 0; i < keys.length; i++) { - this.remove(keys[i]); + if (keys.length) { + for (var i = 0; i < keys.length; i++) { + items[keys[i]] = this.get(keys[i]); + } + for (i = 0; i < keys.length; i++) { + this.remove(keys[i]); + } + shouldReInsert = true; } - shouldReInsert = true; } this.$$storageMode = storageMode; @@ -852,10 +960,25 @@ return /******/ (function(modules) { // webpackBootstrap } } + $$replacementStrategy = $$storage ? replacementStrategy.withStorage() : replacementStrategy['default'](); + if (shouldReInsert) { for (var key in items) { this.put(key, items[key]); } + } else if ($$storage) { + var keys = this.keys(); + if (keys.length) { + for (var j = 0; j < keys.length; j++) { + var k = keys[j]; + var item = this.doGetItem(k); + $$replacementStrategy.onPut(k, item); + $$expiresHeap.push({ + key: k, + expires: item.expires + }); + } + } } }, diff --git a/dist/cachefactory.min.js b/dist/cachefactory.min.js index 8bf7701..99cc989 100644 --- a/dist/cachefactory.min.js +++ b/dist/cachefactory.min.js @@ -8,5 +8,5 @@ * @overview cachefactory is a very useful replacement for Angular's $cacheFactory. */ -!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.CacheFactory=b():a.CacheFactory=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a,b){return o(a,b)}var e=c(1),f=null;try{f=window.Promise}catch(g){}var h={isNumber:function(a){return"number"==typeof a},isString:function(a){return"string"==typeof a},isObject:function(a){return null!==a&&"object"==typeof a},isFunction:function(a){return"function"==typeof a},fromJson:function(a){return JSON.parse(a)},equals:function(a,b){return a===b},Promise:f},i=function(a){var b=[],c=void 0;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b},j=function(a){return a&&"function"==typeof a.then},k=function(a){return h.isNumber(a)?a.toString():a},l=function(a){var b={},c=void 0;for(c in a)a.hasOwnProperty(c)&&(b[c]=c);return b},m={capacity:Number.MAX_VALUE,maxAge:Number.MAX_VALUE,deleteOnExpire:"none",onExpire:null,cacheFlushInterval:null,recycleFreq:1e3,storageMode:"memory",storageImpl:null,disabled:!1,storagePrefix:"cachefactory.caches.",storeOnResolve:!1,storeOnReject:!1},n={},o=function(a,b){if(a in n)throw new Error(a+" already exists!");if(!h.isString(a))throw new Error("cacheId must be a string!");var c={},d={},f=null,g=new e(function(a){return a.expires},h.equals),o=new e(function(a){return a.accessed},h.equals),p=n[a]={$$id:a,destroy:function(){clearInterval(this.$$cacheFlushIntervalId),clearInterval(this.$$recycleFreqId),this.removeAll(),f&&(f().removeItem(this.$$prefix+".keys"),f().removeItem(this.$$prefix)),f=null,c=null,o=null,g=null,this.$$prefix=null,delete n[this.$$id]},disable:function(){this.$$disabled=!0},enable:function(){delete this.$$disabled},get:function(a,b){var e=this;if(Array.isArray(a)){var g=function(){var c=a,d=[];return c.forEach(function(a){var c=e.get(a,b);null!==c&&void 0!==c&&d.push(c)}),{v:d}}();if("object"==typeof g)return g.v}else if(a=k(a),this.$$disabled)return;if(b=b||{},!h.isString(a))throw new Error("key must be a string!");if(b&&!h.isObject(b))throw new Error("options must be an object!");if(b.onExpire&&!h.isFunction(b.onExpire))throw new Error("options.onExpire must be a function!");var i=void 0;if(f){if(d[a])return d[a];var j=f().getItem(this.$$prefix+".data."+a);if(!j)return;i=h.fromJson(j)}else{if(!(a in c))return;i=c[a]}var l=i.value,m=(new Date).getTime();return f?(o.remove({key:a,accessed:i.accessed}),i.accessed=m,o.push({key:a,accessed:m})):(o.remove(i),i.accessed=m,o.push(i)),"passive"===this.$$deleteOnExpire&&"expires"in i&&i.expires(b.maxAge||this.$$maxAge)}):void 0}return a in c?(b=c[a],{created:b.created,accessed:b.accessed,expires:b.expires,isExpired:(new Date).getTime()-b.created>(b.maxAge||this.$$maxAge)}):void 0}return{id:this.$$id,capacity:this.$$capacity,maxAge:this.$$maxAge,deleteOnExpire:this.$$deleteOnExpire,onExpire:this.$$onExpire,cacheFlushInterval:this.$$cacheFlushInterval,recycleFreq:this.$$recycleFreq,storageMode:this.$$storageMode,storageImpl:f?f():void 0,disabled:!!this.$$disabled,size:o&&o.size()||0}},keys:function(){if(f){var a=f().getItem(this.$$prefix+".keys");return a?h.fromJson(a):[]}return i(c)},keySet:function(){if(f){var a=f().getItem(this.$$prefix+".keys"),b={};if(a)for(var d=h.fromJson(a),e=0;ethis.$$capacity&&this.remove(o.peek().key),b}},remove:function(a){if(a+="",delete d[a],!f){var b=c[a]?c[a].value:void 0;return o.remove(c[a]),g.remove(c[a]),c[a]=null,delete c[a],b}var e=f().getItem(this.$$prefix+".data."+a);if(e){var i=h.fromJson(e);o.remove({key:a,accessed:i.accessed}),g.remove({key:a,expires:i.expires}),f().removeItem(this.$$prefix+".data."+a);var j=f().getItem(this.$$prefix+".keys"),k=j?h.fromJson(j):[],l=k.indexOf(a);return l>=0&&k.splice(l,1),f().setItem(this.$$prefix+".keys",JSON.stringify(k)),i.value}},removeAll:function(){if(f){o.removeAll(),g.removeAll();var a=f().getItem(this.$$prefix+".keys");if(a)for(var b=h.fromJson(a),e=0;ea)throw new Error("cacheFlushInterval must be greater than zero!");a!==this.$$cacheFlushInterval&&(this.$$cacheFlushInterval=a,clearInterval(this.$$cacheFlushIntervalId),function(a){a.$$cacheFlushIntervalId=setInterval(function(){a.removeAll()},a.$$cacheFlushInterval)}(this))}},setCapacity:function(a){if(null===a)delete this.$$capacity;else{if(!h.isNumber(a))throw new Error("capacity must be a number!");if(0>a)throw new Error("capacity must be greater than zero!");this.$$capacity=a}for(var b={};o.size()>this.$$capacity;)b[o.peek().key]=this.remove(o.peek().key);return b},setDeleteOnExpire:function(a,b){if(null===a)delete this.$$deleteOnExpire;else{if(!h.isString(a))throw new Error("deleteOnExpire must be a string!");if("none"!==a&&"passive"!==a&&"aggressive"!==a)throw new Error('deleteOnExpire must be "none", "passive" or "aggressive"!');this.$$deleteOnExpire=a}b!==!1&&this.setRecycleFreq(this.$$recycleFreq)},setMaxAge:function(a){if(null===a)this.$$maxAge=Number.MAX_VALUE;else{if(!h.isNumber(a))throw new Error("maxAge must be a number!");if(0>a)throw new Error("maxAge must be greater than zero!");this.$$maxAge=a}var b=void 0,d=void 0,e=void 0;if(g.removeAll(),f){var j=f().getItem(this.$$prefix+".keys");for(d=j?h.fromJson(j):[],b=0;ba)throw new Error("recycleFreq must be greater than zero!");this.$$recycleFreq=a}clearInterval(this.$$recycleFreqId),"aggressive"===this.$$deleteOnExpire?!function(a){a.$$recycleFreqId=setInterval(function(){a.removeExpired()},a.$$recycleFreq)}(this):delete this.$$recycleFreqId},setStorageMode:function(a,b){if(!h.isString(a))throw new Error("storageMode must be a string!");if("memory"!==a&&"localStorage"!==a&&"sessionStorage"!==a)throw new Error('storageMode must be "memory", "localStorage" or "sessionStorage"!');var c=!1,d={},e=this.keys();if(e.length){for(var g=0;g0;){var f=Math.floor((c+1)/2)-1,g=a[f];if(e>=b(g))break;a[f]=d,a[c]=g,c=f}}function e(a,b){if(a||(a=function(a){return a}),b||(b=function(a,b){return a===b}),"function"!=typeof a)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeof b)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=a,this.compareFunc=b,this.heap=[]}var f=function(a,b,c){for(var d=a.length,e=a[c],f=b(e);;){var g=2*(c+1),h=g-1,i=null;if(d>h){var j=a[h],k=b(j);f>k&&(i=h)}if(d>g){var l=a[g],m=b(l);m<(null===i?f:b(a[h]))&&(i=g)}if(null===i)break;a[c]=a[i],a[i]=e,c=i}},g=e.prototype;g.push=function(a){this.heap.push(a),d(this.heap,this.weightFunc,this.heap.length-1)},g.peek=function(){return this.heap[0]},g.pop=function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,f(this.heap,this.weightFunc,0)),a},g.remove=function(a){for(var b=this.heap.length,c=0;b>c;c++)if(this.compareFunc(this.heap[c],a)){var e=this.heap[c],g=this.heap.pop();return c!==b-1&&(this.heap[c]=g,d(this.heap,this.weightFunc,c),f(this.heap,this.weightFunc,c)),e}return null},g.removeAll=function(){this.heap=[]},g.size=function(){return this.heap.length},a.exports=e}])})}])}); +!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.CacheFactory=b():a.CacheFactory=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){return w(a,b)}var g=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;h=j=i=void 0,d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;return void 0===i?void 0:i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return void 0;a=j,b=f,c=g,d=!0}},h=function(){function a(a,b){for(var c=0;c(b.maxAge||this.$$maxAge)}):void 0}return a in c?(b=c[a],{created:b.created,accessed:b.accessed,expires:b.expires,isExpired:(new Date).getTime()-b.created>(b.maxAge||this.$$maxAge)}):void 0}return{id:this.$$id,capacity:this.$$capacity,maxAge:this.$$maxAge,deleteOnExpire:this.$$deleteOnExpire,onExpire:this.$$onExpire,cacheFlushInterval:this.$$cacheFlushInterval,recycleFreq:this.$$recycleFreq,storageMode:this.$$storageMode,storageImpl:e?e():void 0,disabled:!!this.$$disabled,size:f&&f.priorityQueue().size()||0}},keys:function(){if(e){var a=e().getItem(this.$$prefix+".keys");return a?l.fromJson(a):[]}return m(c)},keySet:function(){if(e){var a=e().getItem(this.$$prefix+".keys"),b={};if(a)for(var d=l.fromJson(a),f=0;fthis.$$capacity&&this.remove(w.peek().key),b}},remove:function(a){if(a+="",delete d[a],!e){var b=c[a]?c[a].value:void 0;return f.onRemove(a,c[a]),g.remove(c[a]),c[a]=null,delete c[a],b}var h=e().getItem(this.$$prefix+".data."+a);if(h){var i=l.fromJson(h);f.onRemove(a,i),g.remove({key:a,expires:i.expires}),e().removeItem(this.$$prefix+".data."+a);var j=e().getItem(this.$$prefix+".keys"),k=j?l.fromJson(j):[],m=k.indexOf(a);return m>=0&&k.splice(m,1),e().setItem(this.$$prefix+".keys",JSON.stringify(k)),i.value}},removeAll:function(){if(f&&f.priorityQueue().removeAll(),g.removeAll(),e){var a=e().getItem(this.$$prefix+".keys");if(a)for(var b=l.fromJson(a),h=0;ha)throw new Error("cacheFlushInterval must be greater than zero!");a!==this.$$cacheFlushInterval&&(this.$$cacheFlushInterval=a,clearInterval(this.$$cacheFlushIntervalId),function(a){a.$$cacheFlushIntervalId=setInterval(function(){a.removeAll()},a.$$cacheFlushInterval)}(this))}},setCapacity:function(a){if(null===a)delete this.$$capacity;else{if(!l.isNumber(a))throw new Error("capacity must be a number!");if(0>a)throw new Error("capacity must be greater than zero!");this.$$capacity=a}for(var b={},c=f.priorityQueue();c.size()>this.$$capacity;)b[c.peek().key]=this.remove(c.peek().key);return b},setDeleteOnExpire:function(a,b){if(null===a)delete this.$$deleteOnExpire;else{if(!l.isString(a))throw new Error("deleteOnExpire must be a string!");if("none"!==a&&"passive"!==a&&"aggressive"!==a)throw new Error('deleteOnExpire must be "none", "passive" or "aggressive"!');this.$$deleteOnExpire=a}b!==!1&&this.setRecycleFreq(this.$$recycleFreq)},setMaxAge:function(a){if(null===a)this.$$maxAge=Number.MAX_VALUE;else{if(!l.isNumber(a))throw new Error("maxAge must be a number!");if(0>a)throw new Error("maxAge must be greater than zero!");this.$$maxAge=a}var b=void 0,d=void 0,f=void 0;if(g.removeAll(),e){var h=e().getItem(this.$$prefix+".keys");for(d=h?l.fromJson(h):[],b=0;ba)throw new Error("recycleFreq must be greater than zero!");this.$$recycleFreq=a}clearInterval(this.$$recycleFreqId),"aggressive"===this.$$deleteOnExpire?!function(a){a.$$recycleFreqId=setInterval(function(){a.removeExpired()},a.$$recycleFreq)}(this):delete this.$$recycleFreqId},doGetItem:function(a){if(e){if(d[a])return d[a];var b=e().getItem(this.$$prefix+".data."+a);return b?l.fromJson(b):void 0}if(a in c)return c[a]},setStorageMode:function(a,b,c){if(!l.isString(a))throw new Error("storageMode must be a string!");if("memory"!==a&&"localStorage"!==a&&"sessionStorage"!==a)throw new Error('storageMode must be "memory", "localStorage" or "sessionStorage"!');var d=!1,h={};if("string"==typeof this.$$storageMode&&this.$$storageMode!==a){var i=this.keys();if(i.length){for(var j=0;j0;){var f=Math.floor((c+1)/2)-1,g=a[f];if(e>=b(g))break;a[f]=d,a[c]=g,c=f}}function e(a,b){if(a||(a=function(a){return a}),b||(b=function(a,b){return a===b}),"function"!=typeof a)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeof b)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=a,this.compareFunc=b,this.heap=[]}var f=function(a,b,c){for(var d=a.length,e=a[c],f=b(e);;){var g=2*(c+1),h=g-1,i=null;if(d>h){var j=a[h],k=b(j);f>k&&(i=h)}if(d>g){var l=a[g],m=b(l);m<(null===i?f:b(a[h]))&&(i=g)}if(null===i)break;a[c]=a[i],a[i]=e,c=i}},g=e.prototype;g.push=function(a){this.heap.push(a),d(this.heap,this.weightFunc,this.heap.length-1)},g.peek=function(){return this.heap[0]},g.pop=function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,f(this.heap,this.weightFunc,0)),a},g.remove=function(a){for(var b=this.heap.length,c=0;b>c;c++)if(this.compareFunc(this.heap[c],a)){var e=this.heap[c],g=this.heap.pop();return c!==b-1&&(this.heap[c]=g,d(this.heap,this.weightFunc,c),f(this.heap,this.weightFunc,c)),e}return null},g.removeAll=function(){this.heap=[]},g.size=function(){return this.heap.length},a.exports=e}])})}])}); //# sourceMappingURL=cachefactory.min.map \ No newline at end of file diff --git a/dist/cachefactory.min.map b/dist/cachefactory.min.map index 6f76045..a598cbd 100644 --- a/dist/cachefactory.min.map +++ b/dist/cachefactory.min.map @@ -1 +1 @@ -{"version":3,"sources":["cachefactory.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","CacheFactory","cacheId","options","createCache","BinaryHeap","_Promise","window","Promise","e","utils","isNumber","val","isString","isObject","isFunction","fromJson","JSON","parse","equals","a","b","_keys","collection","keys","key","undefined","hasOwnProperty","push","_isPromiseLike","v","then","_stringifyNumber","number","toString","_keySet","keySet","defaults","capacity","Number","MAX_VALUE","maxAge","deleteOnExpire","onExpire","cacheFlushInterval","recycleFreq","storageMode","storageImpl","disabled","storagePrefix","storeOnResolve","storeOnReject","caches","Error","$$data","$$promises","$$storage","$$expiresHeap","x","expires","$$lruHeap","accessed","cache","$$id","destroy","clearInterval","$$cacheFlushIntervalId","$$recycleFreqId","removeAll","removeItem","$$prefix","disable","$$disabled","enable","get","_this","Array","isArray","_ret","values","forEach","value","item","itemJson","getItem","now","Date","getTime","remove","$$deleteOnExpire","$$onExpire","setItem","stringify","info","created","isExpired","$$maxAge","$$capacity","$$cacheFlushInterval","$$recycleFreq","$$storageMode","size","keysJson","kSet","i","length","put","_this2","$$storeOnResolve","$$storeOnReject","getHandler","store","isError","status","data","headers","statusText","reject","exists","peek","index","indexOf","splice","removeExpired","expired","expiredItem","pop","setCacheFlushInterval","self","setInterval","setCapacity","removed","setDeleteOnExpire","setRecycleFreq","setMaxAge","setOnExpire","setOptions","cacheOptions","strict","$$storagePrefix","setStorageMode","shouldReInsert","items","localStorage","sessionStorage","touch","_this3","k","opt","destroyAll","clearAll","removeExpiredFromAll","enableAll","disableAll","touchAll","bubbleUp","heap","weightFunc","n","element","weight","parentN","Math","floor","_parent","compareFunc","y","bubbleDown","node","nodeWeight","child2N","child1N","swap","child1","child1Weight","child2","child2Weight","BHProto","prototype","front","end"],"mappings":"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","file":"cachefactory.min.js"} \ No newline at end of file +{"version":3,"sources":["cachefactory.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_classCallCheck","instance","Constructor","CacheFactory","cacheId","options","createCache","_get","_x","_x2","_x3","_again","object","property","receiver","desc","parent","getter","undefined","Function","getOwnPropertyDescriptor","get","getPrototypeOf","_createClass","defineProperties","target","props","i","length","descriptor","defineProperty","key","protoProps","staticProps","BinaryHeap","_Promise","window","Promise","e","utils","isNumber","val","isString","isObject","isFunction","fromJson","JSON","parse","equals","a","b","_keys","collection","keys","hasOwnProperty","push","_isPromiseLike","v","then","_stringifyNumber","number","toString","_keySet","keySet","BaseLruStrategy","$$lruHeap","x","accessed","DefaultLruStrategy","_BaseLruStrategy","item","now","Date","remove","StorageLruStrategy","_BaseLruStrategy2","lru","default","withStorage","defaults","capacity","Number","MAX_VALUE","maxAge","deleteOnExpire","onExpire","cacheFlushInterval","recycleFreq","storageMode","storageImpl","disabled","storagePrefix","storeOnResolve","storeOnReject","replacementStrategy","caches","Error","$$data","$$promises","$$storage","$$replacementStrategy","$$expiresHeap","expires","cache","$$id","destroy","clearInterval","$$cacheFlushIntervalId","$$recycleFreqId","removeAll","removeItem","$$prefix","disable","$$disabled","enable","_this","Array","isArray","_ret","values","forEach","doGetItem","modified","onGet","$$deleteOnExpire","$$onExpire","setItem","stringify","info","itemJson","getItem","created","isExpired","getTime","$$maxAge","$$capacity","$$cacheFlushInterval","$$recycleFreq","$$storageMode","size","priorityQueue","keysJson","kSet","put","_this2","$$storeOnResolve","$$storeOnReject","getHandler","store","isError","status","data","headers","statusText","reject","onPut","exists","replacementQueue","peek","onRemove","index","indexOf","splice","removeExpired","expired","expiredItem","pop","setCacheFlushInterval","self","setInterval","setCapacity","removed","setDeleteOnExpire","setRecycleFreq","setMaxAge","setOnExpire","setOptions","cacheOptions","strict","$$storagePrefix","setStorageMode","shouldReInsert","items","localStorage","sessionStorage","j","k","touch","_this3","opt","destroyAll","clearAll","removeExpiredFromAll","enableAll","disableAll","touchAll","bubbleUp","heap","weightFunc","n","element","weight","parentN","Math","floor","_parent","compareFunc","y","bubbleDown","node","nodeWeight","child2N","child1N","swap","child1","child1Weight","child2","child2Weight","BHProto","front","end"],"mappings":"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","file":"cachefactory.min.js"} \ No newline at end of file diff --git a/src/index.js b/src/index.js index d95edf4..4afcf79 100644 --- a/src/index.js +++ b/src/index.js @@ -63,6 +63,90 @@ let _keySet = collection => { return keySet; }; +/** + * Replacement Strategies must implement onGet, onPut and onRemove callbacks and priorityQueue + * onGet -> Called after an item is retrieved from the cache by the client + * onPut -> Called after an item is added to the cache for the first time by the client. + * Also called when reinitializing a cache from localStorage. + * onRemove -> Called after an item is removed from the cache by the client + * priorityQueue -> Retrieves an object that implements the following API + * priorityQueue.size() - the number of items being tracked + * priorityQueue.peek() - which returns next item to remove + * priorityQueue.removeAll() - which resets underlying tracking mechanism + */ +class BaseLruStrategy { + constructor() { + this.$$lruHeap = new BinaryHeap(function (x) { + return x.accessed; + }, utils.equals); + } + + priorityQueue() { + return this.$$lruHeap; + } +} + +class DefaultLruStrategy extends BaseLruStrategy { + constructor() { + super(); + } + + onGet(key, item) { + let now = Date.now(); + this.$$lruHeap.remove(item); + item.accessed = now; + this.$$lruHeap.push(item); + return true; + } + onPut(key, item) { + this.$$lruHeap.push(item); + } + onRemove(key, item) { + this.$$lruHeap.remove(item); + } +} + +class StorageLruStrategy extends BaseLruStrategy { + constructor() { + super(); + } + + onGet(key, item) { + let now = Date.now(); + this.$$lruHeap.remove({ + key : key, + accessed: item.accessed + }); + item.accessed = now; + this.$$lruHeap.push({ + key : key, + accessed: now + }); + return true; + } + onPut(key, item) { + this.$$lruHeap.push({ + key : key, + accessed: item.accessed + }); + } + onRemove(key, item) { + this.$$lruHeap.remove({ + key : key, + accessed: item.accessed + }); + } +} + +let lru = { + default() { + return new DefaultLruStrategy(); + }, + withStorage() { + return new StorageLruStrategy(); + } +}; + let defaults = { capacity: Number.MAX_VALUE, maxAge: Number.MAX_VALUE, @@ -75,7 +159,8 @@ let defaults = { disabled: false, storagePrefix: 'cachefactory.caches.', storeOnResolve: false, - storeOnReject: false + storeOnReject: false, + replacementStrategy: lru }; let caches = {}; @@ -90,8 +175,8 @@ let createCache = (cacheId, options) => { let $$data = {}; let $$promises = {}; let $$storage = null; + let $$replacementStrategy = null; let $$expiresHeap = new BinaryHeap(x => x.expires, utils.equals); - let $$lruHeap = new BinaryHeap(x => x.accessed, utils.equals); let cache = caches[cacheId] = { @@ -107,7 +192,7 @@ let createCache = (cacheId, options) => { } $$storage = null; $$data = null; - $$lruHeap = null; + $$replacementStrategy = null; $$expiresHeap = null; this.$$prefix = null; delete caches[this.$$id]; @@ -151,48 +236,15 @@ let createCache = (cacheId, options) => { throw new Error('options.onExpire must be a function!'); } - let item; - - if ($$storage) { - if ($$promises[key]) { - return $$promises[key]; - } - - let itemJson = $$storage().getItem(`${this.$$prefix}.data.${key}`); - - if (itemJson) { - item = utils.fromJson(itemJson); - } else { - return; - } - } else { - if (!(key in $$data)) { - return; - } - - item = $$data[key]; + let item = this.doGetItem(key); + if (!item || _isPromiseLike(item)) { + return item; } - let value = item.value; - let now = new Date().getTime(); - - if ($$storage) { - $$lruHeap.remove({ - key: key, - accessed: item.accessed - }); - item.accessed = now; - $$lruHeap.push({ - key: key, - accessed: now - }); - } else { - $$lruHeap.remove(item); - item.accessed = now; - $$lruHeap.push(item); - } + var modified = $$replacementStrategy.onGet(key, item); - if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < now) { + let value = item.value; + if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < Date.now()) { this.remove(key); if (this.$$onExpire) { @@ -201,7 +253,7 @@ let createCache = (cacheId, options) => { options.onExpire.call(this, key, item.value); } value = undefined; - } else if ($$storage) { + } else if ($$storage && modified) { $$storage().setItem(`${this.$$prefix}.data.${key}`, JSON.stringify(item)); } @@ -251,7 +303,7 @@ let createCache = (cacheId, options) => { storageMode: this.$$storageMode, storageImpl: $$storage ? $$storage() : undefined, disabled: !!this.$$disabled, - size: $$lruHeap && $$lruHeap.size() || 0 + size: $$replacementStrategy && $$replacementStrategy.priorityQueue().size() || 0 }; } }, @@ -359,10 +411,7 @@ let createCache = (cacheId, options) => { expires: item.expires }); // Add to lru heap - $$lruHeap.push({ - key: key, - accessed: item.accessed - }); + $$replacementStrategy.onPut(key, item); // Set item $$storage().setItem(`${this.$$prefix}.data.${key}`, JSON.stringify(item)); let exists = false; @@ -384,15 +433,16 @@ let createCache = (cacheId, options) => { // Add to expires heap $$expiresHeap.push(item); // Add to lru heap - $$lruHeap.push(item); + $$replacementStrategy.onPut(key, item); // Set item $$data[key] = item; delete $$promises[key]; } // Handle exceeded capacity - if ($$lruHeap.size() > this.$$capacity) { - this.remove($$lruHeap.peek().key); + let replacementQueue = $$replacementStrategy.priorityQueue(); + if (replacementQueue.size() > this.$$capacity) { + this.remove(replacementQueue.peek().key); } return value; @@ -406,10 +456,7 @@ let createCache = (cacheId, options) => { if (itemJson) { let item = utils.fromJson(itemJson); - $$lruHeap.remove({ - key: key, - accessed: item.accessed - }); + $$replacementStrategy.onRemove(key, item); $$expiresHeap.remove({ key: key, expires: item.expires @@ -427,7 +474,7 @@ let createCache = (cacheId, options) => { } } else { let value = $$data[key] ? $$data[key].value : undefined; - $$lruHeap.remove($$data[key]); + $$replacementStrategy.onRemove(key, $$data[key]); $$expiresHeap.remove($$data[key]); $$data[key] = null; delete $$data[key]; @@ -436,9 +483,11 @@ let createCache = (cacheId, options) => { }, removeAll() { + if ($$replacementStrategy) { + $$replacementStrategy.priorityQueue().removeAll(); + } + $$expiresHeap.removeAll(); if ($$storage) { - $$lruHeap.removeAll(); - $$expiresHeap.removeAll(); let keysJson = $$storage().getItem(`${this.$$prefix}.keys`); if (keysJson) { @@ -450,8 +499,6 @@ let createCache = (cacheId, options) => { } $$storage().setItem(`${this.$$prefix}.keys`, JSON.stringify([])); } else { - $$lruHeap.removeAll(); - $$expiresHeap.removeAll(); for (var key in $$data) { $$data[key] = null; } @@ -523,8 +570,9 @@ let createCache = (cacheId, options) => { this.$$capacity = capacity; } let removed = {}; - while ($$lruHeap.size() > this.$$capacity) { - removed[$$lruHeap.peek().key] = this.remove($$lruHeap.peek().key); + let replacementQueue = $$replacementStrategy.priorityQueue(); + while (replacementQueue.size() > this.$$capacity) { + removed[replacementQueue.peek().key] = this.remove(replacementQueue.peek().key); } return removed; }, @@ -632,9 +680,9 @@ let createCache = (cacheId, options) => { } if ('storageMode' in cacheOptions || 'storageImpl' in cacheOptions) { - this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl); + this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl, cacheOptions.replacementStrategy || defaults.replacementStrategy); } else if (strict) { - this.setStorageMode(defaults.storageMode, defaults.storageImpl); + this.setStorageMode(defaults.storageMode, defaults.storageImpl, defaults.replacementStrategy); } if ('storeOnResolve' in cacheOptions) { @@ -708,7 +756,29 @@ let createCache = (cacheId, options) => { } }, - setStorageMode(storageMode, storageImpl) { + doGetItem(key) { + if ($$storage) { + if ($$promises[key]) { + return $$promises[key]; + } + + let itemJson = $$storage().getItem(this.$$prefix + '.data.' + key); + + if (itemJson) { + return utils.fromJson(itemJson); + } else { + return; + } + } else { + if (!(key in $$data)) { + return; + } + + return $$data[key]; + } + }, + + setStorageMode(storageMode, storageImpl, replacementStrategy) { if (!utils.isString(storageMode)) { throw new Error('storageMode must be a string!'); } else if (storageMode !== 'memory' && storageMode !== 'localStorage' && storageMode !== 'sessionStorage') { @@ -718,18 +788,20 @@ let createCache = (cacheId, options) => { let shouldReInsert = false; let items = {}; - let keys = this.keys(); + if (typeof this.$$storageMode === 'string' && this.$$storageMode !== storageMode) { + let keys = this.keys(); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - items[keys[i]] = this.get(keys[i]); - } - for (i = 0; i < keys.length; i++) { - this.remove(keys[i]); + if (keys.length) { + for (var i = 0; i < keys.length; i++) { + items[keys[i]] = this.get(keys[i]); + } + for (i = 0; i < keys.length; i++) { + this.remove(keys[i]); + } + shouldReInsert = true; } - shouldReInsert = true; } - + this.$$storageMode = storageMode; if (storageImpl) { @@ -763,10 +835,25 @@ let createCache = (cacheId, options) => { } } + $$replacementStrategy = $$storage ? replacementStrategy.withStorage() : replacementStrategy.default(); + if (shouldReInsert) { for (var key in items) { this.put(key, items[key]); } + } else if ($$storage) { + let keys = this.keys(); + if (keys.length) { + for (var j = 0; j < keys.length; j++) { + let k = keys[j]; + let item = this.doGetItem(k); + $$replacementStrategy.onPut(k, item); + $$expiresHeap.push({ + key: k, + expires: item.expires + }); + } + } } }, diff --git a/test/unit/DSCacheFactory/index.info.test.js b/test/unit/DSCacheFactory/index.info.test.js index 1e892a4..7a9bcb6 100644 --- a/test/unit/DSCacheFactory/index.info.test.js +++ b/test/unit/DSCacheFactory/index.info.test.js @@ -26,6 +26,7 @@ describe('CacheFactory.info()', function () { assert.equal(info.recycleFreq, CACHE_DEFAULTS.recycleFreq); assert.equal(info.storageMode, CACHE_DEFAULTS.storageMode); assert.equal(info.storageImpl, CACHE_DEFAULTS.storageImpl); + assert.isNotNull(info.replacementStrategy); assert.equal(info.caches.cache.id, caches[0].info().id); assert.equal(info.caches.cache.capacity, caches[0].info().capacity); From e8177da40b9f061bd95cd509d315cdd18208f755 Mon Sep 17 00:00:00 2001 From: Andres Olave Date: Thu, 15 Oct 2015 09:33:49 +0300 Subject: [PATCH 2/2] Revert: dist changes --- dist/cachefactory.js | 273 +++++++++++--------------------------- dist/cachefactory.min.js | 2 +- dist/cachefactory.min.map | 2 +- 3 files changed, 77 insertions(+), 200 deletions(-) diff --git a/dist/cachefactory.js b/dist/cachefactory.js index b9976ef..7e96420 100644 --- a/dist/cachefactory.js +++ b/dist/cachefactory.js @@ -63,16 +63,7 @@ return /******/ (function(modules) { // webpackBootstrap /* 0 */ /***/ function(module, exports, __webpack_require__) { - var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } }; - - var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })(); - - function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - var BinaryHeap = __webpack_require__(1); - var _Promise = null; try { _Promise = window.Promise; @@ -139,119 +130,6 @@ return /******/ (function(modules) { // webpackBootstrap return keySet; }; - var BaseLruStrategy = (function () { - function BaseLruStrategy() { - _classCallCheck(this, BaseLruStrategy); - - this.$$lruHeap = new BinaryHeap(function (x) { - return x.accessed; - }, utils.equals); - } - - /** - * the object returned by priorityQueue() must implement - * size() - the number of items being tracked - * peek() - which returns next item to remove - * removeAll() - which resets underlying tracking mechanism - */ - - _createClass(BaseLruStrategy, [{ - key: 'priorityQueue', - value: function priorityQueue() { - return this.$$lruHeap; - } - }]); - - return BaseLruStrategy; - })(); - - var DefaultLruStrategy = (function (_BaseLruStrategy) { - _inherits(DefaultLruStrategy, _BaseLruStrategy); - - function DefaultLruStrategy() { - _classCallCheck(this, DefaultLruStrategy); - - _get(Object.getPrototypeOf(DefaultLruStrategy.prototype), 'constructor', this).call(this); - } - - _createClass(DefaultLruStrategy, [{ - key: 'onGet', - value: function onGet(key, item) { - var now = Date.now(); - this.$$lruHeap.remove(item); - item.accessed = now; - this.$$lruHeap.push(item); - return true; - } - }, { - key: 'onPut', - value: function onPut(key, item) { - this.$$lruHeap.push(item); - } - }, { - key: 'onRemove', - value: function onRemove(key, item) { - this.$$lruHeap.remove(item); - } - }]); - - return DefaultLruStrategy; - })(BaseLruStrategy); - - var StorageLruStrategy = (function (_BaseLruStrategy2) { - _inherits(StorageLruStrategy, _BaseLruStrategy2); - - function StorageLruStrategy() { - _classCallCheck(this, StorageLruStrategy); - - _get(Object.getPrototypeOf(StorageLruStrategy.prototype), 'constructor', this).call(this); - } - - _createClass(StorageLruStrategy, [{ - key: 'onGet', - value: function onGet(key, item) { - var now = Date.now(); - this.$$lruHeap.remove({ - key: key, - accessed: item.accessed - }); - item.accessed = now; - this.$$lruHeap.push({ - key: key, - accessed: now - }); - return true; - } - }, { - key: 'onPut', - value: function onPut(key, item) { - this.$$lruHeap.push({ - key: key, - accessed: item.accessed - }); - } - }, { - key: 'onRemove', - value: function onRemove(key, item) { - this.$$lruHeap.remove({ - key: key, - accessed: item.accessed - }); - } - }]); - - return StorageLruStrategy; - })(BaseLruStrategy); - - var lru = { - 'default': function _default() { - return new DefaultLruStrategy(); - }, - withStorage: function withStorage() { - return new StorageLruStrategy(); - } - }; - var defaults = { capacity: Number.MAX_VALUE, maxAge: Number.MAX_VALUE, @@ -264,8 +142,7 @@ return /******/ (function(modules) { // webpackBootstrap disabled: false, storagePrefix: 'cachefactory.caches.', storeOnResolve: false, - storeOnReject: false, - replacementStrategy: lru + storeOnReject: false }; var caches = {}; @@ -280,10 +157,12 @@ return /******/ (function(modules) { // webpackBootstrap var $$data = {}; var $$promises = {}; var $$storage = null; - var $$replacementStrategy = null; var $$expiresHeap = new BinaryHeap(function (x) { return x.expires; }, utils.equals); + var $$lruHeap = new BinaryHeap(function (x) { + return x.accessed; + }, utils.equals); var cache = caches[cacheId] = { @@ -299,7 +178,7 @@ return /******/ (function(modules) { // webpackBootstrap } $$storage = null; $$data = null; - $$replacementStrategy = null; + $$lruHeap = null; $$expiresHeap = null; this.$$prefix = null; delete caches[this.$$id]; @@ -351,15 +230,48 @@ return /******/ (function(modules) { // webpackBootstrap throw new Error('options.onExpire must be a function!'); } - var item = this.doGetItem(key); - if (!item || _isPromiseLike(item)) { - return item; - } + var item = undefined; - var modified = $$replacementStrategy.onGet(key, item); + if ($$storage) { + if ($$promises[key]) { + return $$promises[key]; + } + + var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key); + + if (itemJson) { + item = utils.fromJson(itemJson); + } else { + return; + } + } else { + if (!(key in $$data)) { + return; + } + + item = $$data[key]; + } var value = item.value; - if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < Date.now()) { + var now = new Date().getTime(); + + if ($$storage) { + $$lruHeap.remove({ + key: key, + accessed: item.accessed + }); + item.accessed = now; + $$lruHeap.push({ + key: key, + accessed: now + }); + } else { + $$lruHeap.remove(item); + item.accessed = now; + $$lruHeap.push(item); + } + + if (this.$$deleteOnExpire === 'passive' && 'expires' in item && item.expires < now) { this.remove(key); if (this.$$onExpire) { @@ -368,7 +280,7 @@ return /******/ (function(modules) { // webpackBootstrap options.onExpire.call(this, key, item.value); } value = undefined; - } else if ($$storage && modified) { + } else if ($$storage) { $$storage().setItem(this.$$prefix + '.data.' + key, JSON.stringify(item)); } @@ -418,7 +330,7 @@ return /******/ (function(modules) { // webpackBootstrap storageMode: this.$$storageMode, storageImpl: $$storage ? $$storage() : undefined, disabled: !!this.$$disabled, - size: $$replacementStrategy && $$replacementStrategy.priorityQueue().size() || 0 + size: $$lruHeap && $$lruHeap.size() || 0 }; } }, @@ -528,7 +440,10 @@ return /******/ (function(modules) { // webpackBootstrap expires: item.expires }); // Add to lru heap - $$replacementStrategy.onPut(key, item); + $$lruHeap.push({ + key: key, + accessed: item.accessed + }); // Set item $$storage().setItem(this.$$prefix + '.data.' + key, JSON.stringify(item)); var exists = false; @@ -550,16 +465,15 @@ return /******/ (function(modules) { // webpackBootstrap // Add to expires heap $$expiresHeap.push(item); // Add to lru heap - $$replacementStrategy.onPut(key, item); + $$lruHeap.push(item); // Set item $$data[key] = item; delete $$promises[key]; } // Handle exceeded capacity - var replacementQueue = $$replacementStrategy.priorityQueue(); - if (replacementQueue.size() > this.$$capacity) { - this.remove(replacementQueue.peek().key); + if ($$lruHeap.size() > this.$$capacity) { + this.remove($$lruHeap.peek().key); } return value; @@ -573,7 +487,10 @@ return /******/ (function(modules) { // webpackBootstrap if (itemJson) { var item = utils.fromJson(itemJson); - $$replacementStrategy.onRemove(key, item); + $$lruHeap.remove({ + key: key, + accessed: item.accessed + }); $$expiresHeap.remove({ key: key, expires: item.expires @@ -591,7 +508,7 @@ return /******/ (function(modules) { // webpackBootstrap } } else { var value = $$data[key] ? $$data[key].value : undefined; - $$replacementStrategy.onRemove(key, $$data[key]); + $$lruHeap.remove($$data[key]); $$expiresHeap.remove($$data[key]); $$data[key] = null; delete $$data[key]; @@ -600,11 +517,9 @@ return /******/ (function(modules) { // webpackBootstrap }, removeAll: function removeAll() { - if ($$replacementStrategy) { - $$replacementStrategy.priorityQueue().removeAll(); - } - $$expiresHeap.removeAll(); if ($$storage) { + $$lruHeap.removeAll(); + $$expiresHeap.removeAll(); var keysJson = $$storage().getItem(this.$$prefix + '.keys'); if (keysJson) { @@ -616,6 +531,8 @@ return /******/ (function(modules) { // webpackBootstrap } $$storage().setItem(this.$$prefix + '.keys', JSON.stringify([])); } else { + $$lruHeap.removeAll(); + $$expiresHeap.removeAll(); for (var key in $$data) { $$data[key] = null; } @@ -687,9 +604,8 @@ return /******/ (function(modules) { // webpackBootstrap this.$$capacity = capacity; } var removed = {}; - var replacementQueue = $$replacementStrategy.priorityQueue(); - while (replacementQueue.size() > this.$$capacity) { - removed[replacementQueue.peek().key] = this.remove(replacementQueue.peek().key); + while ($$lruHeap.size() > this.$$capacity) { + removed[$$lruHeap.peek().key] = this.remove($$lruHeap.peek().key); } return removed; }, @@ -799,9 +715,9 @@ return /******/ (function(modules) { // webpackBootstrap } if ('storageMode' in cacheOptions || 'storageImpl' in cacheOptions) { - this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl, cacheOptions.replacementStrategy || defaults.replacementStrategy); + this.setStorageMode(cacheOptions.storageMode || defaults.storageMode, cacheOptions.storageImpl || defaults.storageImpl); } else if (strict) { - this.setStorageMode(defaults.storageMode, defaults.storageImpl, defaults.replacementStrategy); + this.setStorageMode(defaults.storageMode, defaults.storageImpl); } if ('storeOnResolve' in cacheOptions) { @@ -875,29 +791,7 @@ return /******/ (function(modules) { // webpackBootstrap } }, - doGetItem: function doGetItem(key) { - if ($$storage) { - if ($$promises[key]) { - return $$promises[key]; - } - - var itemJson = $$storage().getItem(this.$$prefix + '.data.' + key); - - if (itemJson) { - return utils.fromJson(itemJson); - } else { - return; - } - } else { - if (!(key in $$data)) { - return; - } - - return $$data[key]; - } - }, - - setStorageMode: function setStorageMode(storageMode, storageImpl, replacementStrategy) { + setStorageMode: function setStorageMode(storageMode, storageImpl) { if (!utils.isString(storageMode)) { throw new Error('storageMode must be a string!'); } else if (storageMode !== 'memory' && storageMode !== 'localStorage' && storageMode !== 'sessionStorage') { @@ -907,18 +801,16 @@ return /******/ (function(modules) { // webpackBootstrap var shouldReInsert = false; var items = {}; - if (typeof this.$$storageMode === 'string' && this.$$storageMode !== storageMode) { - var keys = this.keys(); + var keys = this.keys(); - if (keys.length) { - for (var i = 0; i < keys.length; i++) { - items[keys[i]] = this.get(keys[i]); - } - for (i = 0; i < keys.length; i++) { - this.remove(keys[i]); - } - shouldReInsert = true; + if (keys.length) { + for (var i = 0; i < keys.length; i++) { + items[keys[i]] = this.get(keys[i]); } + for (i = 0; i < keys.length; i++) { + this.remove(keys[i]); + } + shouldReInsert = true; } this.$$storageMode = storageMode; @@ -960,25 +852,10 @@ return /******/ (function(modules) { // webpackBootstrap } } - $$replacementStrategy = $$storage ? replacementStrategy.withStorage() : replacementStrategy['default'](); - if (shouldReInsert) { for (var key in items) { this.put(key, items[key]); } - } else if ($$storage) { - var keys = this.keys(); - if (keys.length) { - for (var j = 0; j < keys.length; j++) { - var k = keys[j]; - var item = this.doGetItem(k); - $$replacementStrategy.onPut(k, item); - $$expiresHeap.push({ - key: k, - expires: item.expires - }); - } - } } }, diff --git a/dist/cachefactory.min.js b/dist/cachefactory.min.js index 99cc989..8bf7701 100644 --- a/dist/cachefactory.min.js +++ b/dist/cachefactory.min.js @@ -8,5 +8,5 @@ * @overview cachefactory is a very useful replacement for Angular's $cacheFactory. */ -!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.CacheFactory=b():a.CacheFactory=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){return w(a,b)}var g=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;h=j=i=void 0,d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;return void 0===i?void 0:i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return void 0;a=j,b=f,c=g,d=!0}},h=function(){function a(a,b){for(var c=0;c(b.maxAge||this.$$maxAge)}):void 0}return a in c?(b=c[a],{created:b.created,accessed:b.accessed,expires:b.expires,isExpired:(new Date).getTime()-b.created>(b.maxAge||this.$$maxAge)}):void 0}return{id:this.$$id,capacity:this.$$capacity,maxAge:this.$$maxAge,deleteOnExpire:this.$$deleteOnExpire,onExpire:this.$$onExpire,cacheFlushInterval:this.$$cacheFlushInterval,recycleFreq:this.$$recycleFreq,storageMode:this.$$storageMode,storageImpl:e?e():void 0,disabled:!!this.$$disabled,size:f&&f.priorityQueue().size()||0}},keys:function(){if(e){var a=e().getItem(this.$$prefix+".keys");return a?l.fromJson(a):[]}return m(c)},keySet:function(){if(e){var a=e().getItem(this.$$prefix+".keys"),b={};if(a)for(var d=l.fromJson(a),f=0;fthis.$$capacity&&this.remove(w.peek().key),b}},remove:function(a){if(a+="",delete d[a],!e){var b=c[a]?c[a].value:void 0;return f.onRemove(a,c[a]),g.remove(c[a]),c[a]=null,delete c[a],b}var h=e().getItem(this.$$prefix+".data."+a);if(h){var i=l.fromJson(h);f.onRemove(a,i),g.remove({key:a,expires:i.expires}),e().removeItem(this.$$prefix+".data."+a);var j=e().getItem(this.$$prefix+".keys"),k=j?l.fromJson(j):[],m=k.indexOf(a);return m>=0&&k.splice(m,1),e().setItem(this.$$prefix+".keys",JSON.stringify(k)),i.value}},removeAll:function(){if(f&&f.priorityQueue().removeAll(),g.removeAll(),e){var a=e().getItem(this.$$prefix+".keys");if(a)for(var b=l.fromJson(a),h=0;ha)throw new Error("cacheFlushInterval must be greater than zero!");a!==this.$$cacheFlushInterval&&(this.$$cacheFlushInterval=a,clearInterval(this.$$cacheFlushIntervalId),function(a){a.$$cacheFlushIntervalId=setInterval(function(){a.removeAll()},a.$$cacheFlushInterval)}(this))}},setCapacity:function(a){if(null===a)delete this.$$capacity;else{if(!l.isNumber(a))throw new Error("capacity must be a number!");if(0>a)throw new Error("capacity must be greater than zero!");this.$$capacity=a}for(var b={},c=f.priorityQueue();c.size()>this.$$capacity;)b[c.peek().key]=this.remove(c.peek().key);return b},setDeleteOnExpire:function(a,b){if(null===a)delete this.$$deleteOnExpire;else{if(!l.isString(a))throw new Error("deleteOnExpire must be a string!");if("none"!==a&&"passive"!==a&&"aggressive"!==a)throw new Error('deleteOnExpire must be "none", "passive" or "aggressive"!');this.$$deleteOnExpire=a}b!==!1&&this.setRecycleFreq(this.$$recycleFreq)},setMaxAge:function(a){if(null===a)this.$$maxAge=Number.MAX_VALUE;else{if(!l.isNumber(a))throw new Error("maxAge must be a number!");if(0>a)throw new Error("maxAge must be greater than zero!");this.$$maxAge=a}var b=void 0,d=void 0,f=void 0;if(g.removeAll(),e){var h=e().getItem(this.$$prefix+".keys");for(d=h?l.fromJson(h):[],b=0;ba)throw new Error("recycleFreq must be greater than zero!");this.$$recycleFreq=a}clearInterval(this.$$recycleFreqId),"aggressive"===this.$$deleteOnExpire?!function(a){a.$$recycleFreqId=setInterval(function(){a.removeExpired()},a.$$recycleFreq)}(this):delete this.$$recycleFreqId},doGetItem:function(a){if(e){if(d[a])return d[a];var b=e().getItem(this.$$prefix+".data."+a);return b?l.fromJson(b):void 0}if(a in c)return c[a]},setStorageMode:function(a,b,c){if(!l.isString(a))throw new Error("storageMode must be a string!");if("memory"!==a&&"localStorage"!==a&&"sessionStorage"!==a)throw new Error('storageMode must be "memory", "localStorage" or "sessionStorage"!');var d=!1,h={};if("string"==typeof this.$$storageMode&&this.$$storageMode!==a){var i=this.keys();if(i.length){for(var j=0;j0;){var f=Math.floor((c+1)/2)-1,g=a[f];if(e>=b(g))break;a[f]=d,a[c]=g,c=f}}function e(a,b){if(a||(a=function(a){return a}),b||(b=function(a,b){return a===b}),"function"!=typeof a)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeof b)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=a,this.compareFunc=b,this.heap=[]}var f=function(a,b,c){for(var d=a.length,e=a[c],f=b(e);;){var g=2*(c+1),h=g-1,i=null;if(d>h){var j=a[h],k=b(j);f>k&&(i=h)}if(d>g){var l=a[g],m=b(l);m<(null===i?f:b(a[h]))&&(i=g)}if(null===i)break;a[c]=a[i],a[i]=e,c=i}},g=e.prototype;g.push=function(a){this.heap.push(a),d(this.heap,this.weightFunc,this.heap.length-1)},g.peek=function(){return this.heap[0]},g.pop=function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,f(this.heap,this.weightFunc,0)),a},g.remove=function(a){for(var b=this.heap.length,c=0;b>c;c++)if(this.compareFunc(this.heap[c],a)){var e=this.heap[c],g=this.heap.pop();return c!==b-1&&(this.heap[c]=g,d(this.heap,this.weightFunc,c),f(this.heap,this.weightFunc,c)),e}return null},g.removeAll=function(){this.heap=[]},g.size=function(){return this.heap.length},a.exports=e}])})}])}); +!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.CacheFactory=b():a.CacheFactory=b()}(this,function(){return function(a){function b(d){if(c[d])return c[d].exports;var e=c[d]={exports:{},id:d,loaded:!1};return a[d].call(e.exports,e,e.exports,b),e.loaded=!0,e.exports}var c={};return b.m=a,b.c=c,b.p="",b(0)}([function(a,b,c){function d(a,b){return o(a,b)}var e=c(1),f=null;try{f=window.Promise}catch(g){}var h={isNumber:function(a){return"number"==typeof a},isString:function(a){return"string"==typeof a},isObject:function(a){return null!==a&&"object"==typeof a},isFunction:function(a){return"function"==typeof a},fromJson:function(a){return JSON.parse(a)},equals:function(a,b){return a===b},Promise:f},i=function(a){var b=[],c=void 0;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b},j=function(a){return a&&"function"==typeof a.then},k=function(a){return h.isNumber(a)?a.toString():a},l=function(a){var b={},c=void 0;for(c in a)a.hasOwnProperty(c)&&(b[c]=c);return b},m={capacity:Number.MAX_VALUE,maxAge:Number.MAX_VALUE,deleteOnExpire:"none",onExpire:null,cacheFlushInterval:null,recycleFreq:1e3,storageMode:"memory",storageImpl:null,disabled:!1,storagePrefix:"cachefactory.caches.",storeOnResolve:!1,storeOnReject:!1},n={},o=function(a,b){if(a in n)throw new Error(a+" already exists!");if(!h.isString(a))throw new Error("cacheId must be a string!");var c={},d={},f=null,g=new e(function(a){return a.expires},h.equals),o=new e(function(a){return a.accessed},h.equals),p=n[a]={$$id:a,destroy:function(){clearInterval(this.$$cacheFlushIntervalId),clearInterval(this.$$recycleFreqId),this.removeAll(),f&&(f().removeItem(this.$$prefix+".keys"),f().removeItem(this.$$prefix)),f=null,c=null,o=null,g=null,this.$$prefix=null,delete n[this.$$id]},disable:function(){this.$$disabled=!0},enable:function(){delete this.$$disabled},get:function(a,b){var e=this;if(Array.isArray(a)){var g=function(){var c=a,d=[];return c.forEach(function(a){var c=e.get(a,b);null!==c&&void 0!==c&&d.push(c)}),{v:d}}();if("object"==typeof g)return g.v}else if(a=k(a),this.$$disabled)return;if(b=b||{},!h.isString(a))throw new Error("key must be a string!");if(b&&!h.isObject(b))throw new Error("options must be an object!");if(b.onExpire&&!h.isFunction(b.onExpire))throw new Error("options.onExpire must be a function!");var i=void 0;if(f){if(d[a])return d[a];var j=f().getItem(this.$$prefix+".data."+a);if(!j)return;i=h.fromJson(j)}else{if(!(a in c))return;i=c[a]}var l=i.value,m=(new Date).getTime();return f?(o.remove({key:a,accessed:i.accessed}),i.accessed=m,o.push({key:a,accessed:m})):(o.remove(i),i.accessed=m,o.push(i)),"passive"===this.$$deleteOnExpire&&"expires"in i&&i.expires(b.maxAge||this.$$maxAge)}):void 0}return a in c?(b=c[a],{created:b.created,accessed:b.accessed,expires:b.expires,isExpired:(new Date).getTime()-b.created>(b.maxAge||this.$$maxAge)}):void 0}return{id:this.$$id,capacity:this.$$capacity,maxAge:this.$$maxAge,deleteOnExpire:this.$$deleteOnExpire,onExpire:this.$$onExpire,cacheFlushInterval:this.$$cacheFlushInterval,recycleFreq:this.$$recycleFreq,storageMode:this.$$storageMode,storageImpl:f?f():void 0,disabled:!!this.$$disabled,size:o&&o.size()||0}},keys:function(){if(f){var a=f().getItem(this.$$prefix+".keys");return a?h.fromJson(a):[]}return i(c)},keySet:function(){if(f){var a=f().getItem(this.$$prefix+".keys"),b={};if(a)for(var d=h.fromJson(a),e=0;ethis.$$capacity&&this.remove(o.peek().key),b}},remove:function(a){if(a+="",delete d[a],!f){var b=c[a]?c[a].value:void 0;return o.remove(c[a]),g.remove(c[a]),c[a]=null,delete c[a],b}var e=f().getItem(this.$$prefix+".data."+a);if(e){var i=h.fromJson(e);o.remove({key:a,accessed:i.accessed}),g.remove({key:a,expires:i.expires}),f().removeItem(this.$$prefix+".data."+a);var j=f().getItem(this.$$prefix+".keys"),k=j?h.fromJson(j):[],l=k.indexOf(a);return l>=0&&k.splice(l,1),f().setItem(this.$$prefix+".keys",JSON.stringify(k)),i.value}},removeAll:function(){if(f){o.removeAll(),g.removeAll();var a=f().getItem(this.$$prefix+".keys");if(a)for(var b=h.fromJson(a),e=0;ea)throw new Error("cacheFlushInterval must be greater than zero!");a!==this.$$cacheFlushInterval&&(this.$$cacheFlushInterval=a,clearInterval(this.$$cacheFlushIntervalId),function(a){a.$$cacheFlushIntervalId=setInterval(function(){a.removeAll()},a.$$cacheFlushInterval)}(this))}},setCapacity:function(a){if(null===a)delete this.$$capacity;else{if(!h.isNumber(a))throw new Error("capacity must be a number!");if(0>a)throw new Error("capacity must be greater than zero!");this.$$capacity=a}for(var b={};o.size()>this.$$capacity;)b[o.peek().key]=this.remove(o.peek().key);return b},setDeleteOnExpire:function(a,b){if(null===a)delete this.$$deleteOnExpire;else{if(!h.isString(a))throw new Error("deleteOnExpire must be a string!");if("none"!==a&&"passive"!==a&&"aggressive"!==a)throw new Error('deleteOnExpire must be "none", "passive" or "aggressive"!');this.$$deleteOnExpire=a}b!==!1&&this.setRecycleFreq(this.$$recycleFreq)},setMaxAge:function(a){if(null===a)this.$$maxAge=Number.MAX_VALUE;else{if(!h.isNumber(a))throw new Error("maxAge must be a number!");if(0>a)throw new Error("maxAge must be greater than zero!");this.$$maxAge=a}var b=void 0,d=void 0,e=void 0;if(g.removeAll(),f){var j=f().getItem(this.$$prefix+".keys");for(d=j?h.fromJson(j):[],b=0;ba)throw new Error("recycleFreq must be greater than zero!");this.$$recycleFreq=a}clearInterval(this.$$recycleFreqId),"aggressive"===this.$$deleteOnExpire?!function(a){a.$$recycleFreqId=setInterval(function(){a.removeExpired()},a.$$recycleFreq)}(this):delete this.$$recycleFreqId},setStorageMode:function(a,b){if(!h.isString(a))throw new Error("storageMode must be a string!");if("memory"!==a&&"localStorage"!==a&&"sessionStorage"!==a)throw new Error('storageMode must be "memory", "localStorage" or "sessionStorage"!');var c=!1,d={},e=this.keys();if(e.length){for(var g=0;g0;){var f=Math.floor((c+1)/2)-1,g=a[f];if(e>=b(g))break;a[f]=d,a[c]=g,c=f}}function e(a,b){if(a||(a=function(a){return a}),b||(b=function(a,b){return a===b}),"function"!=typeof a)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeof b)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=a,this.compareFunc=b,this.heap=[]}var f=function(a,b,c){for(var d=a.length,e=a[c],f=b(e);;){var g=2*(c+1),h=g-1,i=null;if(d>h){var j=a[h],k=b(j);f>k&&(i=h)}if(d>g){var l=a[g],m=b(l);m<(null===i?f:b(a[h]))&&(i=g)}if(null===i)break;a[c]=a[i],a[i]=e,c=i}},g=e.prototype;g.push=function(a){this.heap.push(a),d(this.heap,this.weightFunc,this.heap.length-1)},g.peek=function(){return this.heap[0]},g.pop=function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,f(this.heap,this.weightFunc,0)),a},g.remove=function(a){for(var b=this.heap.length,c=0;b>c;c++)if(this.compareFunc(this.heap[c],a)){var e=this.heap[c],g=this.heap.pop();return c!==b-1&&(this.heap[c]=g,d(this.heap,this.weightFunc,c),f(this.heap,this.weightFunc,c)),e}return null},g.removeAll=function(){this.heap=[]},g.size=function(){return this.heap.length},a.exports=e}])})}])}); //# sourceMappingURL=cachefactory.min.map \ No newline at end of file diff --git a/dist/cachefactory.min.map b/dist/cachefactory.min.map index a598cbd..6f76045 100644 --- a/dist/cachefactory.min.map +++ b/dist/cachefactory.min.map @@ -1 +1 @@ -{"version":3,"sources":["cachefactory.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","_inherits","subClass","superClass","TypeError","prototype","Object","create","constructor","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_classCallCheck","instance","Constructor","CacheFactory","cacheId","options","createCache","_get","_x","_x2","_x3","_again","object","property","receiver","desc","parent","getter","undefined","Function","getOwnPropertyDescriptor","get","getPrototypeOf","_createClass","defineProperties","target","props","i","length","descriptor","defineProperty","key","protoProps","staticProps","BinaryHeap","_Promise","window","Promise","e","utils","isNumber","val","isString","isObject","isFunction","fromJson","JSON","parse","equals","a","b","_keys","collection","keys","hasOwnProperty","push","_isPromiseLike","v","then","_stringifyNumber","number","toString","_keySet","keySet","BaseLruStrategy","$$lruHeap","x","accessed","DefaultLruStrategy","_BaseLruStrategy","item","now","Date","remove","StorageLruStrategy","_BaseLruStrategy2","lru","default","withStorage","defaults","capacity","Number","MAX_VALUE","maxAge","deleteOnExpire","onExpire","cacheFlushInterval","recycleFreq","storageMode","storageImpl","disabled","storagePrefix","storeOnResolve","storeOnReject","replacementStrategy","caches","Error","$$data","$$promises","$$storage","$$replacementStrategy","$$expiresHeap","expires","cache","$$id","destroy","clearInterval","$$cacheFlushIntervalId","$$recycleFreqId","removeAll","removeItem","$$prefix","disable","$$disabled","enable","_this","Array","isArray","_ret","values","forEach","doGetItem","modified","onGet","$$deleteOnExpire","$$onExpire","setItem","stringify","info","itemJson","getItem","created","isExpired","getTime","$$maxAge","$$capacity","$$cacheFlushInterval","$$recycleFreq","$$storageMode","size","priorityQueue","keysJson","kSet","put","_this2","$$storeOnResolve","$$storeOnReject","getHandler","store","isError","status","data","headers","statusText","reject","onPut","exists","replacementQueue","peek","onRemove","index","indexOf","splice","removeExpired","expired","expiredItem","pop","setCacheFlushInterval","self","setInterval","setCapacity","removed","setDeleteOnExpire","setRecycleFreq","setMaxAge","setOnExpire","setOptions","cacheOptions","strict","$$storagePrefix","setStorageMode","shouldReInsert","items","localStorage","sessionStorage","j","k","touch","_this3","opt","destroyAll","clearAll","removeExpiredFromAll","enableAll","disableAll","touchAll","bubbleUp","heap","weightFunc","n","element","weight","parentN","Math","floor","_parent","compareFunc","y","bubbleDown","node","nodeWeight","child2N","child1N","swap","child1","child1Weight","child2","child2Weight","BHProto","front","end"],"mappings":"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","file":"cachefactory.min.js"} \ No newline at end of file +{"version":3,"sources":["cachefactory.js"],"names":["root","factory","exports","module","define","amd","this","modules","__webpack_require__","moduleId","installedModules","id","loaded","call","m","c","p","CacheFactory","cacheId","options","createCache","BinaryHeap","_Promise","window","Promise","e","utils","isNumber","val","isString","isObject","isFunction","fromJson","JSON","parse","equals","a","b","_keys","collection","keys","key","undefined","hasOwnProperty","push","_isPromiseLike","v","then","_stringifyNumber","number","toString","_keySet","keySet","defaults","capacity","Number","MAX_VALUE","maxAge","deleteOnExpire","onExpire","cacheFlushInterval","recycleFreq","storageMode","storageImpl","disabled","storagePrefix","storeOnResolve","storeOnReject","caches","Error","$$data","$$promises","$$storage","$$expiresHeap","x","expires","$$lruHeap","accessed","cache","$$id","destroy","clearInterval","$$cacheFlushIntervalId","$$recycleFreqId","removeAll","removeItem","$$prefix","disable","$$disabled","enable","get","_this","Array","isArray","_ret","values","forEach","value","item","itemJson","getItem","now","Date","getTime","remove","$$deleteOnExpire","$$onExpire","setItem","stringify","info","created","isExpired","$$maxAge","$$capacity","$$cacheFlushInterval","$$recycleFreq","$$storageMode","size","keysJson","kSet","i","length","put","_this2","$$storeOnResolve","$$storeOnReject","getHandler","store","isError","status","data","headers","statusText","reject","exists","peek","index","indexOf","splice","removeExpired","expired","expiredItem","pop","setCacheFlushInterval","self","setInterval","setCapacity","removed","setDeleteOnExpire","setRecycleFreq","setMaxAge","setOnExpire","setOptions","cacheOptions","strict","$$storagePrefix","setStorageMode","shouldReInsert","items","localStorage","sessionStorage","touch","_this3","k","opt","destroyAll","clearAll","removeExpiredFromAll","enableAll","disableAll","touchAll","bubbleUp","heap","weightFunc","n","element","weight","parentN","Math","floor","_parent","compareFunc","y","bubbleDown","node","nodeWeight","child2N","child1N","swap","child1","child1Weight","child2","child2Weight","BHProto","prototype","front","end"],"mappings":"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","file":"cachefactory.min.js"} \ No newline at end of file