!function(e,t){"object"==typeofexports&&"undefined"!=typeofmodule?module.exports=t("undefined"==typeofangular?require("angular"):angular):"function"==typeofdefine&&define.amd?define("angular-cache",["angular"],t):e.angularCacheModuleName=t(e.angular)}(this,function(e){"use strict";functiont(e,t){if(e||(e=function(e){returne}),t||(t=function(e,t){returne===t}),"function"!=typeofe)thrownewError('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeoft)thrownewError('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=e,this.compareFunc=t,this.heap=[]}functionr(e){vart=[],r=void0;if(!d.isObject(e))returnt;for(rine)e.hasOwnProperty(r)&&t.push(r);returnt}functioni(e){returne&&"function"==typeofe.then}functions(e){returnd.isNumber(e)?e.toString():e}functionn(e){vart={},r=void0;if(!d.isObject(e))returnt;for(rine)e.hasOwnProperty(r)&&(t[r]=r);returnt}functiono(e,o){if(eing)thrownewError(e+" already exists!");if(!d.isString(e))thrownewError("cacheId must be a string!");vara={},c={},l=null,h=newt(function(e){returne.expires},d.equals),f=newt(function(e){returne.accessed},d.equals),p=g[e]={$$id:e,destroy:function(){clearInterval(this.$$cacheFlushIntervalId),clearInterval(this.$$recycleFreqId),this.removeAll(),l&&(l().removeItem(this.$$prefix+".keys"),l().removeItem(this.$$prefix)),l=null,a=null,f=null,h=null,this.$$prefix=null,deleteg[this.$$id]},disable:function(){this.$$disabled=!0},enable:function(){deletethis.$$disabled},get:function(e,t){varr=this;if(Array.isArray(e)){vari=function(){vari=e,s=[];returni.forEach(function(e){vari=r.get(e,t);null!==i&&void0!==i&&s.push(i)}),{v:s}}();if("object"===("undefined"==typeofi?"undefined":u["typeof"](i)))returni.v}elseif(e=s(e),this.$$disabled)return;if(t=t||{},!d.isString(e))thrownewError("key must be a string!");if(t&&!d.isObject(t))thrownewError("options must be an object!");if(t.onExpire&&!d.isFunction(t.onExpire))thrownewError("options.onExpire must be a function!");varn=void0;if(l){if(c[e])returnc[e];varo=l().getItem(this.$$prefix+".data."+e);if(!o)return;n=d.fromJson(o)}elseif(d.isObject(a)){if(!(eina))return;n=a[e]}varh=n.value,p=(newDate).getTime();returnl?(f.remove({key:e,accessed:n.accessed}),n.accessed=p,f.push({key:e,accessed:p})):(f.remove(n),n.accessed=p,f.push(n)),"passive"===this.$$deleteOnExpire&&"expires"inn&&n.expires<p?(this.remove(e),this.$$onExpire?this.$$onExpire(e,n.value,t.onExpire):t.onExpire&&t.onExpire.call(this,e,n.value),h=void0):l&&l().setItem(this.$$prefix+".data."+e,JSON.stringify(n)),h},info:function(e){if(e){vart=void0;if(l){varr=l().getItem(this.$$prefix+".data."+e);returnr?(t=d.fromJson(r),{created:t.created,accessed:t.accessed,expires:t.expires,isExpired:(newDate).getTime()-t.created>(t.maxAge||this.$$maxAge)}):void0}returnd.isObject(a)&&eina?(t=a[e],{created:t.created,accessed:t.accessed,expires:t.expires,isExpired:(newDate).getTime()-t.created>(t.maxAge||this.$$maxAge)}):void0}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:l?l():void0,disabled:!!this.$$disabled,size:f&&f.size()||0}},keys:function(){if(l){vare=l().getItem(this.$$prefix+".keys");returne?d.fromJson(e):[]}returnr(a)},keySet:function(){if(l){vare=l().getItem(this.$$prefix+".keys"),t={};if(e)for(varr=d.fromJson(e),i=0;i<r.length;i++)t[r[i]]=r[i];returnt}returnn(a)},put:function(e,t,r){varn=this;r||(r={});varo="storeOnResolve"inr?!!r.storeOnResolve:this.$$storeOnResolve,u="storeOnReject"inr?!!r.storeOnReject:this.$$storeOnReject,p=function(t,r){returnfunction(i){if(t&&(deletec[e],d.isObject(i)&&"status"ini&&"data"ini?(i=[i.status,i.data,i.headers(),i.statusText],n.put(e,i)):n.put(e,i)),r){if(d.Promise)returnd.Promise.reject(i);throwi}returni}};if(!this.$$disabled&&d.isObject(a)&&null!==t&&void0!==t){if(e=s(e),!d.isString(e))thrownewError("key must be a string!");varm=(newDate).getTime(),$={key:e,value:i(t)?t.then(p(o,!1),p(u,!0)):t,created:void0===r.created?m:r.created,accessed:void0===r.accessed?m:r.accessed};if(r.maxAge&&($.maxAge=r.maxAge),void0===r.expires?$.expires=$.created+($.maxAge||this.$$maxAge):$.expires=r.expires,l){if(i($.value))returnc[e]=$.value,c[e];varv=l().getItem(this.$$prefix+".keys"),g=v?d.fromJson(v):[],y=l().getItem(this.$$prefix+".data."+e);y&&this.remove(e),h.push({key:e,expires:$.expires}),f.push({key:e,accessed:$.accessed}),l().setItem(this.$$prefix+".data."+e,JSON.stringify($));for(varx=!1,b=0;b<g.length;b++)if(g[b]===e){x=!0;break}x||g.push(e),l().setItem(this.$$prefix+".keys",JSON.stringify(g))}elsea[e]&&this.remove(e),h.push($),f.push($),a[e]=$,deletec[e];returnf.size()>this.$$capacity&&this.remove(f.peek().key),t}},remove:function(e){if(e+="",deletec[e],l){vart=l().getItem(this.$$prefix+".data."+e);if(t){varr=d.fromJson(t);f.remove({key:e,accessed:r.accessed}),h.remove({key:e,expires:r.expires}),l().removeItem(this.$$prefix+".data."+e);vari=l().getItem(this.$$prefix+".keys"),s=i?d.fromJson(i):[],n=s.indexOf(e);returnn>=0&&s.splice(n,1),l().setItem(this.$$prefix+".keys",JSON.stringify(s)),r.value}}elseif(d.isObject(a)){varo=a[e]?a[e].value:void0;returnf.remove(a[e]),h.remove(a[e]),a[e]=null,deletea[e],o}},removeAll:function(){if(l){f.removeAll(),h.removeAll();vare=l().getItem(this.$$prefix+".keys");if(e)for(vart=d.fromJson(e),r=0;r<t.length;r++)this.remove(t[r]);l().setItem(this.$$prefix+".keys",JSON.stringify([]))}elseif(d.isObject(a)){f.removeAll(),h.removeAll();for(variina)a[i]=null;a={}}elsef.removeAll(),h.removeAll(),a={};c={}},removeExpired:function(){for(vare=(newDate).getTime(),t={},r=void0,i=void0;(i=h.peek())&&i.expires<=e;)t[i.key]=i.value?i.value:null,h.pop();if(l)for(rint){vars=l().getItem(this.$$prefix+".data."+r);s&&(t[r]=d.fromJson(s).value,this.remove(r))}elsefor(rint)this.remove(r);if(this.$$onExpire)for(rint)this.$$onExpire(r,t[r]);returnt},setCacheFlushInterval:function(e){vart=this;if(null===e)deletet.$$cacheFlushInterval;else{if(!d.isNumber(e))thrownewError("cacheFlushInterval must be a number!");if(0>e)thrownewError("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)deletethis.$$capacity;else{if(!d.isNumber(e))thrownewError("capacity must be a number!");if(0>e)thrownewError("capacity must be greater than zero!");this.$$capacity=e}for(vart={};f.size()>this.$$capacity;)t[f.peek().key]=this.remove(f.peek().key);returnt},setDeleteOnExpire:function(e,t){if(null===e)deletethis.$$deleteOnExpire;else{if(!d.isString(e))thrownewError("deleteOnExpire must be a string!");if("none"!==e&&"passive"!==e&&"aggressive"!==e)thrownewError('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(!d.isNumber(e))thrownewError("maxAge must be a number!");if(0>e)thrownewError("maxAge must be greater than zero!");this.$$maxAge=e}vart=void0,i=void0,s=void0;if(h.removeAll(),l){varn=l().getItem(this.$$prefix+".keys");for(i=n?d.fromJson(n):[],t=0;t<i.length;t++){s=i[t];varo=l().getItem(this.$$prefix+".data."+s);if(o){varc=d.fromJson(o);this.$$maxAge===Number.MAX_VALUE?c.expires=Number.MAX_VALUE:c.expires=c.created+(c.maxAge||this.$$maxAge),h.push({key:s,expires:c.expires})}}}elsefor(i=r(a),t=0;t<i.length;t++)s=i[t],this.$$maxAge===Number.MAX_VALUE?a[s].expires=Number.MAX_VALUE:a[s].expires=a[s].created+(a[s].maxAge||this.$$maxAge),h.push(a[s]);return"aggressive"===this.$$deleteOnExpire?this.removeExpired():{}},setOnExpire:function(e){if(null===e)deletethis.$$onExpire;else{if(!d.isFunction(e))thrownewError("onExpire must be a function!");this.$$onExpire=e}},setOptions:function(e,t){if(e=e||{},t=!!t,!d.isObject(e))thrownewError("cacheOptions must be an object!");"storagePrefix"ine?this.$$storagePrefix=e.storagePrefix:t&&(this.$$storagePrefix=v.storagePrefix),this.$$prefix=this.$$storagePrefix+this.$$id,"disabled"ine?this.$$disabled=!!e.disabled:t&&(this.$$disabled=v.disabled),"deleteOnExpire"ine?this.setDeleteOnExpire(e.deleteOnExpire,!1):t&&this.setDeleteOnExpire(v.deleteOnExpire,!1),"recycleFreq"ine?this.setRecycleFreq(e.recycleFreq):t&&this.setRecycleFreq(v.recycleFreq),"maxAge"ine?this.setMaxAge(e.maxAge):t&&this.setMaxAge(v.maxAge),"storeOnResolve"ine?this.$$storeOnResolve=!!e.storeOnResolve:t&&(this.$$storeOnResolve=v.storeOnResolve),"storeOnReject"ine?this.$$storeOnReject=!!e.storeOnReject:t&&(this.$$storeOnReject=v.storeOnReject),"capacity"ine?this.setCapacity(e.capacity):t&&this.setCapacity(v.capacity),"cacheFlushInterval"ine?this.setCacheFlushInterval(e.cacheFlushInterval):t&&this.setCacheFlushInterval(v.cacheFlushInterval),"onExpire"ine?this.setOnExpire(e.onExpire):t&&this.setOnExpire(v.onExpire),"storageMode"ine||"storageImpl"ine?this.setStorageMode(e.storageMode||v.storageMode,e.storageImpl||v.storageImpl):t&&this.setStorageMode(v.storageMode,v.storageImpl)},setRecycleFreq:function(e){if(null===e)deletethis.$$recycleFreq;else{if(!d.isNumber(e))thrownewError("recycleFreq must be a number!");if(0>e)thrownewError("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):deletethis.$$recycleFreqId},setStorageMode:function(e,t){functionr(e,t){varr=this.keys(),i=r.length;if(i){for(vars=void0,a=d.isObject(t),c=0;i>c;c++){if(s=r[c],e){varl=e().getItem(this.$$prefix+".data."+s);l&&(o[s]=d.fromJson(l))}elsea&&(o[s]=t[s]);this.remove(s)}n=!0}}if(!d.isString(e))thrownewError("storageMode must be a string!");if("memory"!==e&&"localStorage"!==e&&"sessionStorage"!==e)thrownewError('storageMode must be "memory", "localStorage" or "sessionStorage"!');vari=l,s=a,n=!1,o={};if(this.$$initializing||r.call(this,i,s),this.$$storageMode=e,t){if(!d.isObject(t))thrownewError("storageImpl must be an object!");if(!("setItem"int&&"function"==typeoft.setItem))thrownewError('storageImpl must implement "setItem(key, value)"!');if(!("getItem"int&&"function"==typeoft.getItem))thrownewError('storageImpl must implement "getItem(key)"!');if(!("removeItem"int)||"function"!=typeoft.removeItem)thrownewError('storageImpl must implement "removeItem(key)"!');l=function(){returnt}}elseif("localStorage"===this.$$storageMode)try{localStorage.setItem("cachefactory","cachefactory"),localStorage.removeItem("cachefactory"),l=function(){returnlocalStorage}}catch(c){l=null,this.$$storageMode="memory"}elseif("sessionStorage"===this.$$storageMode)try{sessionStorage.setItem("cachefactory","cachefactory"),sessionStorage.removeItem("cachefactory"),l=function(){returnsessionStorage}}catch(c){l=null,this.$$storageMode="memory"}elsel=null,this.$$storageMode="memory";if(this.$$initializing&&r.call(this,l,a),n){varu=void0;for(varhino)u=o[h],this.put(h,u.value,{created:u.created,accessed:u.accessed,expires:u.expires})}},touch:function(e,t){varr=this;if(e){vari=this.get(e,{onExpire:function(e,t){returnr.put(e,t)}});i&&this.put(e,i,t)}elsefor(vars=this.keys(),n=0;n<s.length;n++)this.touch(s[n],t)},values:function(){for(vare=this.keys(),t=[],r=0;r<e.length;r++)t.push(this.get(e[r]));returnt}};returnp.$$initializing=!0,p.setOptions(o,!0),p.$$initializing=!1,p}functiona(e,t){returno(e,t)}functionc(){this.$get=function(){returna.BinaryHeap}}functionl(){this.defaults=a.defaults,this.defaults.storagePrefix="angular-cache.caches.",this.$get=["$q",function(e){returna.utils.Promise=e,a}]}e="default"ine?e["default"]:e;varu={};u["typeof"]="function"==typeofSymbol&&"symbol"==typeofSymbol.iterator?function(e){returntypeofe}:function(e){returne&&"function"==typeofSymbol&&e.constructor===Symbol?"symbol":typeofe};varh=function(e,t,r){for(vari=e[r],s=t(i);r>0;){varn=Math.floor((r+1)/2)-1,o=e[n];if(s>=t(o))break;e[n]=i,e[r]=o,r=n}},f=function(e,t,r){for(vari=e.length,s=e[r],n=t(s);;){varo=2*(r+1),a=o-1,c=null;if(i>a){varl=e[a],u=t(l);n>u&&(c=a)}if(i>o){varh=e[o],f=t(h);f<(null===c?n:t(e[a]))&&(c=o)}if(null===c)break;e[r]=e[c],e[c]=s,r=c}},p=t.prototype;p.push=function(e){this.heap.push(e),h(this.heap,this.weightFunc,this.heap.length-1)},p.peek=function(){returnthis.heap[0]},p.pop=function(){vare=this.heap[0],t=this.heap.pop();returnthis.heap.length>0&&(this.heap[0]=t,f(this.heap,this.weightFunc,0)),e},p.remove=function(e){for(vart=this.heap.length,r=0;t>r;r++)if(this.compareFunc(this.heap[r],e)){vari=this.heap[r],s=this.heap.pop();returnr!==t-1&&(this.heap[r]=s,h(this.heap,this.weightFunc,r),f(this.heap,this.weightFunc,r)),i}returnnull},p.removeAll=function(){this.heap=[]},p.size=function(){returnthis.heap.length};varm=null;try{m=window.Promise}catch($){}vard={isNumber:function(e){return"number"==typeofe},isString:function(e){return"string"==typeofe},isObject:function(e){returnnull!==e&&"object"===("undefined"==typeofe?"undefined":u["typeof"](e))},isFunction:function(e){return"function"==typeofe},fromJson:function(e){returnJSON.parse(e)},equals:function(e,t){returne===t},Promise:m},v={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},g={};a.createCache=o,a.defaults=v,a.info=function(){vare=r(g),t={size:e.length,caches:{}};for(variinv)v.hasOwnProperty(i)&&(t[i]=v[i]);for(vars=0;s<e.length;s++){varn=e[s];t.caches[n]=g[n].info()}returnt},a.get=function(e){returng[e]},a.keySet=function(){returnn(g)},a.keys=function(){returnr(g)},a.destroy=function(e){g[e]&&(g[e].destroy(),deleteg[e])},a.destroyAll=function(){for(vareing)g[e].destroy();g={}},a.clearAll=function(){for(vareing)g[e].removeAll()},a.removeExpiredFromAll=function(){vare={};for(varting)e[t]=g[t].removeExpired();returne},a.enableAll=function(){for(vareing)g[e].$$disabled=!1},a.disableAll=function(){for(vareing)g[e].$$disabled=!0},a.touchAll=function(){for(vareing)g[e].touch()},a.utils=d,a.BinaryHeap=t,a.utils.equals=e.equals,a.utils.isObject=e.isObject,a.utils.fromJson=e.fromJson,e.module("angular-cache",[]).provider("BinaryHeap",c).provider("CacheFactory",l);vary="angular-cache";returny});//# sourceMappingURL=angular-cache.min.map