!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("angular")):"function"==typeof define&&define.amd?define("angular-cache",["angular"],t):"object"==typeof exports?exports.angularCacheModuleName=t(require("angular")):e.angularCacheModuleName=t(e.angular)}(this,function(e){return function(e){function t(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return e[i].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function i(){this.$get=function(){return o.BinaryHeap}}function n(){this.defaults=o.defaults,this.defaults.storagePrefix="angular-cache.caches.",this.$get=["$q",function(e){return o.utils.Promise=e,o}]}var s=r(1),o=r(2);o.utils.equals=s.equals,o.utils.isObject=s.isObject,o.utils.fromJson=s.fromJson,s.module("angular-cache",[]).provider("BinaryHeap",i).provider("CacheFactory",n),e.exports="angular-cache";try{e.exports.name="angular-cache"}catch(a){}},function(t,r){t.exports=e},function(e,t,r){!function(t,r){e.exports=r()}(this,function(){return function(e){function t(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return e[i].call(n.exports,n,n.exports,t),n.loaded=!0,n.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function i(e){var t=[],r=void 0;if(!p.isObject(e))return t;for(r in e)e.hasOwnProperty(r)&&t.push(r);return t}function n(e){return e&&"function"==typeof e.then}function s(e){return p.isNumber(e)?e.toString():e}function o(e){var t={},r=void 0;if(!p.isObject(e))return t;for(r in e)e.hasOwnProperty(r)&&(t[r]=r);return t}function a(e,t){if(e in d)throw new Error(e+" already exists!");if(!p.isString(e))throw new Error("cacheId must be a string!");var r={},a={},c=null,h=new l(function(e){return e.expires},p.equals),f=new l(function(e){return e.accessed},p.equals),$=d[e]={$$id:e,destroy:function(){clearInterval(this.$$cacheFlushIntervalId),clearInterval(this.$$recycleFreqId),this.removeAll(),c&&(c().removeItem(this.$$prefix+".keys"),c().removeItem(this.$$prefix)),c=null,r=null,f=null,h=null,this.$$prefix=null,delete d[this.$$id]},disable:function(){this.$$disabled=!0},enable:function(){delete this.$$disabled},get:function(e,t){var i=this;if(Array.isArray(e)){var n=function(){var r=e,n=[];return r.forEach(function(e){var r=i.get(e,t);null!==r&&void 0!==r&&n.push(r)}),{v:n}}();if("object"===("undefined"==typeof n?"undefined":u(n)))return n.v}else if(e=s(e),this.$$disabled)return;if(t=t||{},!p.isString(e))throw new Error("key must be a string!");if(t&&!p.isObject(t))throw new Error("options must be an object!");if(t.onExpire&&!p.isFunction(t.onExpire))throw new Error("options.onExpire must be a function!");var o=void 0;if(c){if(a[e])return a[e];var l=c().getItem(this.$$prefix+".data."+e);if(!l)return;o=p.fromJson(l)}else if(p.isObject(r)){if(!(e in r))return;o=r[e]}var h=o.value,m=(new Date).getTime();return c?(f.remove({key:e,accessed:o.accessed}),o.accessed=m,f.push({key:e,accessed:m})):(f.remove(o),o.accessed=m,f.push(o)),"passive"===this.$$deleteOnExpire&&"expires"in o&&o.expires(t.maxAge||this.$$maxAge)}):void 0}return p.isObject(r)&&e in r?(t=r[e],{created:t.created,accessed:t.accessed,expires:t.expires,isExpired:(new Date).getTime()-t.created>(t.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:c?c():void 0,disabled:!!this.$$disabled,size:f&&f.size()||0}},keys:function(){if(c){var e=c().getItem(this.$$prefix+".keys");return e?p.fromJson(e):[]}return i(r)},keySet:function(){if(c){var e=c().getItem(this.$$prefix+".keys"),t={};if(e)for(var i=p.fromJson(e),n=0;nthis.$$capacity&&this.remove(f.peek().key),t}},remove:function(e){if(e+="",delete a[e],c){var t=c().getItem(this.$$prefix+".data."+e);if(t){var i=p.fromJson(t);f.remove({key:e,accessed:i.accessed}),h.remove({key:e,expires:i.expires}),c().removeItem(this.$$prefix+".data."+e);var n=c().getItem(this.$$prefix+".keys"),s=n?p.fromJson(n):[],o=s.indexOf(e);return o>=0&&s.splice(o,1),c().setItem(this.$$prefix+".keys",JSON.stringify(s)),i.value}}else if(p.isObject(r)){var u=r[e]?r[e].value:void 0;return f.remove(r[e]),h.remove(r[e]),r[e]=null,delete r[e],u}},removeAll:function(){if(c){f.removeAll(),h.removeAll();var e=c().getItem(this.$$prefix+".keys");if(e)for(var t=p.fromJson(e),i=0;ie)throw new Error("cacheFlushInterval must be greater than zero!");e!==t.$$cacheFlushInterval&&(t.$$cacheFlushInterval=e,clearInterval(t.$$cacheFlushIntervalId),t.$$cacheFlushIntervalId=setInterval(function(){t.removeAll()},t.$$cacheFlushInterval))}},setCapacity:function(e){if(null===e)delete this.$$capacity;else{if(!p.isNumber(e))throw new Error("capacity must be a number!");if(0>e)throw new Error("capacity must be greater than zero!");this.$$capacity=e}for(var t={};f.size()>this.$$capacity;)t[f.peek().key]=this.remove(f.peek().key);return t},setDeleteOnExpire:function(e,t){if(null===e)delete this.$$deleteOnExpire;else{if(!p.isString(e))throw new Error("deleteOnExpire must be a string!");if("none"!==e&&"passive"!==e&&"aggressive"!==e)throw new Error('deleteOnExpire must be "none", "passive" or "aggressive"!');this.$$deleteOnExpire=e}t!==!1&&this.setRecycleFreq(this.$$recycleFreq)},setMaxAge:function(e){if(null===e)this.$$maxAge=Number.MAX_VALUE;else{if(!p.isNumber(e))throw new Error("maxAge must be a number!");if(0>e)throw new Error("maxAge must be greater than zero!");this.$$maxAge=e}var t=void 0,n=void 0,s=void 0;if(h.removeAll(),c){var o=c().getItem(this.$$prefix+".keys");for(n=o?p.fromJson(o):[],t=0;te)throw new Error("recycleFreq must be greater than zero!");this.$$recycleFreq=e}clearInterval(this.$$recycleFreqId),"aggressive"===this.$$deleteOnExpire?!function(e){e.$$recycleFreqId=setInterval(function(){e.removeExpired()},e.$$recycleFreq)}(this):delete this.$$recycleFreqId},setStorageMode:function(e,t){function i(e,t){var r=this.keys(),i=r.length;if(i){for(var n=void 0,s=p.isObject(t),c=0;i>c;c++){if(n=r[c],e){var u=e().getItem(this.$$prefix+".data."+n);u&&(a[n]=p.fromJson(u))}else s&&(a[n]=t[n]);this.remove(n)}o=!0}}if(!p.isString(e))throw new Error("storageMode must be a string!");if("memory"!==e&&"localStorage"!==e&&"sessionStorage"!==e)throw new Error('storageMode must be "memory", "localStorage" or "sessionStorage"!');var n=c,s=r,o=!1,a={};if(this.$$initializing||i.call(this,n,s),this.$$storageMode=e,t){if(!p.isObject(t))throw new Error("storageImpl must be an object!");if(!("setItem"in t&&"function"==typeof t.setItem))throw new Error('storageImpl must implement "setItem(key, value)"!');if(!("getItem"in t&&"function"==typeof t.getItem))throw new Error('storageImpl must implement "getItem(key)"!');if(!("removeItem"in t)||"function"!=typeof t.removeItem)throw new Error('storageImpl must implement "removeItem(key)"!');c=function(){return t}}else if("localStorage"===this.$$storageMode)try{localStorage.setItem("cachefactory","cachefactory"),localStorage.removeItem("cachefactory"),c=function(){return localStorage}}catch(u){c=null,this.$$storageMode="memory"}else if("sessionStorage"===this.$$storageMode)try{sessionStorage.setItem("cachefactory","cachefactory"),sessionStorage.removeItem("cachefactory"),c=function(){return sessionStorage}}catch(u){c=null,this.$$storageMode="memory"}else c=null,this.$$storageModel="memory";if(this.$$initializing&&i.call(this,c,r),o){var l=void 0;for(var h in a)l=a[h],this.put(h,l.value,{created:l.created,accessed:l.accessed,expires:l.expires})}},touch:function(e){var t=this;if(e){var r=this.get(e,{onExpire:function(e,r){return t.put(e,r)}});r&&this.put(e,r)}else for(var i=this.keys(),n=0;n0;){var s=Math.floor((r+1)/2)-1,o=e[s];if(n>=t(o))break;e[s]=i,e[r]=o,r=s}}function n(e,t){if(e||(e=function(e){return e}),t||(t=function(e,t){return e===t}),"function"!=typeof e)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeof t)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=e,this.compareFunc=t,this.heap=[]}var s=function(e,t,r){for(var i=e.length,n=e[r],s=t(n);;){var o=2*(r+1),a=o-1,c=null;if(i>a){var u=e[a],l=t(u);s>l&&(c=a)}if(i>o){var h=e[o],f=t(h);f<(null===c?s:t(e[a]))&&(c=o)}if(null===c)break;e[r]=e[c],e[c]=n,r=c}},o=n.prototype;o.push=function(e){this.heap.push(e),i(this.heap,this.weightFunc,this.heap.length-1)},o.peek=function(){return this.heap[0]},o.pop=function(){var e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&(this.heap[0]=t,s(this.heap,this.weightFunc,0)),e},o.remove=function(e){for(var t=this.heap.length,r=0;t>r;r++)if(this.compareFunc(this.heap[r],e)){var n=this.heap[r],o=this.heap.pop();return r!==t-1&&(this.heap[r]=o,i(this.heap,this.weightFunc,r),s(this.heap,this.weightFunc,r)),n}return null},o.removeAll=function(){this.heap=[]},o.size=function(){return this.heap.length},e.exports=n}])})}])})}])}); //# sourceMappingURL=dist/angular-cache.min.map