/*!
* angular-cache
* @version 4.0.1 - Homepage
* @author Jason Dobry
* @copyright (c) 2013-2015 Jason Dobry
* @license MIT
*
* @overview angular-cache is a very useful replacement for Angular's $cacheFactory.
*/
!function(a,b){"object"==typeof exports&&"object"==typeof module?module.exports=b(require("angular")):"function"==typeof define&&define.amd?define(["angular"],b):"object"==typeof exports?exports.angularCacheModuleName=b(require("angular")):a.angularCacheModuleName=b(a.angular)}(this,function(a){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){var d=function(a){return a&&a.__esModule?a["default"]:a},e=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},f=d(c(1)),g=d(c(2)),h=function(a){var b=[],c=void 0;for(c in a)a.hasOwnProperty(c)&&b.push(c);return b},i=function(a){return a&&"function"==typeof a.then},j=function(a){return f.isNumber(a)?a.toString():a},k=function(a){var b,c={};for(b in a)a.hasOwnProperty(b)&&(c[b]=b);return c},l=function n(){e(this,n),this.$get=function(){return g}},m=function o(){var a=this;e(this,o);var b=this.defaults={capacity:Number.MAX_VALUE,maxAge:Number.MAX_VALUE,deleteOnExpire:"none",onExpire:null,cacheFlushInterval:null,recycleFreq:1e3,storageMode:"memory",storageImpl:null,disabled:!1,storagePrefix:"angular-cache.caches.",storeOnResolve:!1,storeOnReject:!1};this.$get=["$q",function(c){function d(a,b){return l(a,b)}var e={},l=function(a,d){if(a in e)throw new Error(""+a+" already exists!");if(!f.isString(a))throw new Error("cacheId must be a string!");var l=e[a]={$$id:a,$$data:{},$$promises:{},$$storage:null,$$expiresHeap:new g(function(a){return a.expires}),$$lruHeap:new g(function(a){return a.accessed}),destroy:function(){clearInterval(this.$$cacheFlushIntervalId),clearInterval(this.$$recycleFreqId),this.removeAll(),this.$$storage&&(this.$$storage().removeItem(""+this.$$prefix+".keys"),this.$$storage().removeItem(this.$$prefix)),this.$$storage=null,this.$$data=null,this.$$lruHeap=null,this.$$expiresHeap=null,this.$$prefix=null,delete e[this.$$id]},disable:function(){this.$$disabled=!0},enable:function(){delete this.$$disabled},get:function(a,b){var c=this;if(f.isArray(a)){var d=function(){var d=a,e=[];return f.forEach(d,function(a){var d=c.get(a,b);null!==d&&void 0!==d&&e.push(d)}),{v:e}}();if("object"==typeof d)return d.v}else if(a=j(a),this.$$disabled)return;if(b=b||{},!f.isString(a))throw new Error("key must be a string!");if(b&&!f.isObject(b))throw new Error("options must be an object!");if(b.onExpire&&!f.isFunction(b.onExpire))throw new Error("options.onExpire must be a function!");var e=void 0;if(this.$$storage){if(this.$$promises[a])return this.$$promises[a];var g=this.$$storage().getItem(""+this.$$prefix+".data."+a);if(!g)return;e=f.fromJson(g)}else{if(!(a in this.$$data))return;e=this.$$data[a]}var h=e.value,i=(new Date).getTime();return this.$$storage?(this.$$lruHeap.remove({key:a,accessed:e.accessed}),e.accessed=i,this.$$lruHeap.push({key:a,accessed:i})):(this.$$lruHeap.remove(e),e.accessed=i,this.$$lruHeap.push(e)),"passive"===this.$$deleteOnExpire&&"expires"in e&&e.expiresthis.$$maxAge}):void 0}return a in this.$$data?(b=this.$$data[a],{created:b.created,accessed:b.accessed,expires:b.expires,isExpired:(new Date).getTime()-b.created>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:this.$$storage?this.$$storage():void 0,disabled:!!this.$$disabled,size:this.$$lruHeap&&this.$$lruHeap.size()||0}},keys:function(){if(this.$$storage){var a=this.$$storage().getItem(""+this.$$prefix+".keys");return a?f.fromJson(a):[]}return h(this.$$data)},keySet:function(){if(this.$$storage){var a=this.$$storage().getItem(""+this.$$prefix+".keys"),b={};if(a)for(var c=f.fromJson(a),d=0;dthis.$$capacity&&this.remove(this.$$lruHeap.peek().key),b}},remove:function(a){if(a+="",delete this.$$promises[a],!this.$$storage){var b=this.$$data[a]?this.$$data[a].value:void 0;return this.$$lruHeap.remove(this.$$data[a]),this.$$expiresHeap.remove(this.$$data[a]),this.$$data[a]=null,delete this.$$data[a],b}var c=this.$$storage().getItem(""+this.$$prefix+".data."+a);if(c){var d=f.fromJson(c);this.$$lruHeap.remove({key:a,accessed:d.accessed}),this.$$expiresHeap.remove({key:a,expires:d.expires}),this.$$storage().removeItem(""+this.$$prefix+".data."+a);var e=this.$$storage().getItem(""+this.$$prefix+".keys"),g=e?f.fromJson(e):[],h=g.indexOf(a);return h>=0&&g.splice(h,1),this.$$storage().setItem(""+this.$$prefix+".keys",JSON.stringify(g)),d.value}},removeAll:function(){if(this.$$storage){this.$$lruHeap.removeAll(),this.$$expiresHeap.removeAll();var a=this.$$storage().getItem(""+this.$$prefix+".keys");if(a)for(var b=f.fromJson(a),c=0;ca)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(!f.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={};this.$$lruHeap.size()>this.$$capacity;)b[this.$$lruHeap.peek().key]=this.remove(this.$$lruHeap.peek().key);return b},setDeleteOnExpire:function(a,b){if(null===a)delete this.$$deleteOnExpire;else{if(!f.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(!f.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,c=void 0,d=void 0;if(this.$$expiresHeap.removeAll(),this.$$storage){var e=this.$$storage().getItem(""+this.$$prefix+".keys");for(c=e?f.fromJson(e):[],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(!f.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={};if("string"==typeof this.$$storageMode&&this.$$storageMode!==a){var 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}}var c=function(){function a(a,b){for(var c in b){var d=b[c];d.configurable=!0,d.value&&(d.writable=!0)}Object.defineProperties(a,b)}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),d=function(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")},e=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}},f=function(){function a(b,c){if(d(this,a),b||(b=function(a){return a}),c||(c=function(a,b){return a===b}),"function"!=typeof b)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "weightFunc" must be a function!');if("function"!=typeof c)throw new Error('BinaryHeap([weightFunc][, compareFunc]): "compareFunc" must be a function!');this.weightFunc=b,this.compareFunc=c,this.heap=[]}return c(a,{push:{value:function(a){this.heap.push(a),b(this.heap,this.weightFunc,this.heap.length-1)}},peek:{value:function(){return this.heap[0]}},pop:{value:function(){var a=this.heap[0],b=this.heap.pop();return this.heap.length>0&&(this.heap[0]=b,e(this.heap,this.weightFunc,0)),a}},remove:{value:function(a){for(var c=this.heap.length,d=0;c>d;d++)if(this.compareFunc(this.heap[d],a)){var f=this.heap[d],g=this.heap.pop();return d!==c-1&&(this.heap[d]=g,b(this.heap,this.weightFunc,d),e(this.heap,this.weightFunc,d)),f}return null}},removeAll:{value:function(){this.heap=[]}},size:{value:function(){return this.heap.length}}}),a}();a.exports=f}])})}])});
//# sourceMappingURL=angular-cache.min.map