From 8c6e9d1d8ec900e4db10724e3f00a8c6bcc0b910 Mon Sep 17 00:00:00 2001 From: Shaun Grady Date: Tue, 27 Sep 2016 09:36:21 -0700 Subject: [PATCH] 2.0.13 --- lib/index.js | 14 +--- npm-shrinkwrap.json | 2 +- package.json | 2 +- release/angular-http-etag.js | 113 ++++++--------------------- release/angular-http-etag.min.js | 2 +- release/angular-http-etag.min.js.map | 2 +- 6 files changed, 30 insertions(+), 105 deletions(-) diff --git a/lib/index.js b/lib/index.js index b20de49..3e53a23 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,5 +1,5 @@ /** - * angular-http-etag v2.0.12 + * angular-http-etag v2.0.13 * Shaun Grady (http://shaungrady.com), 2016 * https://github.com/shaungrady/angular-http-etag * Module Format: CommonJS @@ -556,23 +556,17 @@ function cacheAdaptersConfig (httpEtagProvider) { }) } -var _$provide - var index = angular .module('http-etag', []) .provider('httpEtag', httpEtagProvider) .config(cacheAdaptersConfig) .config(['$provide', '$httpProvider', function addHttpEtagInterceptor ($provide, $httpProvider) { - _$provide = $provide - $httpProvider.interceptors.push(httpEtagInterceptorFactory) - httpEtagHttpDecorator.useLegacyPromiseExtensions = $httpProvider.useLegacyPromiseExtensions || function useLegacyPromiseExtensions () { return true } + $provide.decorator('$http', httpEtagHttpDecorator) + $httpProvider.interceptors.push(httpEtagInterceptorFactory) }]) - .run(function decorateHttpService () { - _$provide.decorator('$http', httpEtagHttpDecorator) - }) .name -module.exports = index; \ No newline at end of file +module.exports = index; diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index bfbc86b..74c44c5 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -1,6 +1,6 @@ { "name": "angular-http-etag", - "version": "2.0.12", + "version": "2.0.13", "dependencies": { "array-map": { "version": "0.0.0", diff --git a/package.json b/package.json index 561d726..38349cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "angular-http-etag", - "version": "2.0.12", + "version": "2.0.13", "description": "Angular module for easy ETag-based caching of $http responses", "homepage": "https://github.com/shaungrady/angular-http-etag", "author": "Shaun Grady (http://shaungrady.com)", diff --git a/release/angular-http-etag.js b/release/angular-http-etag.js index 4b7f5d9..23f6b54 100644 --- a/release/angular-http-etag.js +++ b/release/angular-http-etag.js @@ -1,5 +1,5 @@ /** - * angular-http-etag v2.0.12 + * angular-http-etag v2.0.13 * Shaun Grady (http://shaungrady.com), 2016 * https://github.com/shaungrady/angular-http-etag * Module Format: Universal Module Definition @@ -14,10 +14,6 @@ angular = 'default' in angular ? angular['default'] : angular; -function interopDefault(ex) { - return ex && typeof ex === 'object' && 'default' in ex ? ex['default'] : ex; -} - function createCommonjsModule(fn, module) { return module = { exports: {} }, fn(module, module.exports), module.exports; } @@ -99,27 +95,13 @@ exports.indexOf = indexOf; exports.isBuffer = isBuffer; }); -var polyfill$1 = interopDefault(polyfill); -var isBuffer = polyfill.isBuffer; -var indexOf = polyfill.indexOf; -var getSymbols = polyfill.getSymbols; -var getKeys = polyfill.getKeys; - -var require$$0$1 = Object.freeze({ - default: polyfill$1, - isBuffer: isBuffer, - indexOf: indexOf, - getSymbols: getSymbols, - getKeys: getKeys -}); - -var copy = createCommonjsModule(function (module, exports) { +var copy_1 = createCommonjsModule(function (module, exports) { 'use strict'; exports.__esModule = true; exports.copyValue = exports.copyCollection = exports.copy = void 0; -var _polyfill = interopDefault(require$$0$1); +var _polyfill = polyfill; var toString = Object.prototype.toString; @@ -259,27 +241,14 @@ exports.copyCollection = copyCollection; exports.copyValue = copyValue; }); -var copy$1 = interopDefault(copy); -var copyValue = copy.copyValue; -var copyCollection = copy.copyCollection; -var copy$$1 = copy.copy; - - -var require$$1 = Object.freeze({ - default: copy$1, - copyValue: copyValue, - copyCollection: copyCollection, - copy: copy$$1 -}); - var index$2 = createCommonjsModule(function (module, exports) { 'use strict'; exports.__esModule = true; -var _copy = interopDefault(require$$1); +var _copy = copy_1; -var _polyfill = interopDefault(require$$0$1); +var _polyfill = polyfill; function defaultCustomizer(target) { return void 0; @@ -367,18 +336,7 @@ exports['default'] = deepcopy; module.exports = exports['default']; }); -var index$3 = interopDefault(index$2); - - -var require$$0 = Object.freeze({ - default: index$3 -}); - -var index$1 = createCommonjsModule(function (module) { -module.exports = interopDefault(require$$0); -}); - -var deepcopy = interopDefault(index$1); +var index$1 = index$2; function httpEtagProvider () { var httpEtagProvider = this @@ -490,7 +448,7 @@ function httpEtagProvider () { var serviceDeepCopies = cacheAdapters[config.cacheService].config.storesDeepCopies var deepCopy = !serviceDeepCopies && cacheDefinitions[cacheId].deepCopy var copy = function (value) { - return deepCopy ? deepcopy(value) : value + return deepCopy ? index$1(value) : value } angular.forEach(cacheAdapterMethods, function (method) { @@ -607,13 +565,10 @@ function httpEtagProvider () { }] } -var isArguments = createCommonjsModule(function (module) { -'use strict'; - -var toStr = Object.prototype.toString; +var toStr$1 = Object.prototype.toString; -module.exports = function isArguments(value) { - var str = toStr.call(value); +var isArguments = function isArguments(value) { + var str = toStr$1.call(value); var isArgs = str === '[object Arguments]'; if (!isArgs) { isArgs = str !== '[object Array]' && @@ -621,27 +576,16 @@ module.exports = function isArguments(value) { typeof value === 'object' && typeof value.length === 'number' && value.length >= 0 && - toStr.call(value.callee) === '[object Function]'; + toStr$1.call(value.callee) === '[object Function]'; } return isArgs; }; -}); - -var isArguments$1 = interopDefault(isArguments); - - -var require$$0$2 = Object.freeze({ - default: isArguments$1 -}); - -var index$4 = createCommonjsModule(function (module) { -'use strict'; // modified from https://github.com/es-shims/es5-shim var has = Object.prototype.hasOwnProperty; var toStr = Object.prototype.toString; var slice = Array.prototype.slice; -var isArgs = interopDefault(require$$0$2); +var isArgs = isArguments; var isEnumerable = Object.prototype.propertyIsEnumerable; var hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString'); var hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype'); @@ -713,11 +657,11 @@ var equalsConstructorPrototypeIfNotBuggy = function (o) { var keysShim = function keys(object) { var isObject = object !== null && typeof object === 'object'; var isFunction = toStr.call(object) === '[object Function]'; - var isArguments = isArgs(object); + var isArguments$$1 = isArgs(object); var isString = isObject && toStr.call(object) === '[object String]'; var theKeys = []; - if (!isObject && !isFunction && !isArguments) { + if (!isObject && !isFunction && !isArguments$$1) { throw new TypeError('Object.keys called on a non-object'); } @@ -728,7 +672,7 @@ var keysShim = function keys(object) { } } - if (isArguments && object.length > 0) { + if (isArguments$$1 && object.length > 0) { for (var j = 0; j < object.length; ++j) { theKeys.push(String(j)); } @@ -774,13 +718,9 @@ keysShim.shim = function shimObjectKeys() { return Object.keys || keysShim; }; -module.exports = keysShim; -}); - -var objectKeys = interopDefault(index$4); +var index$4 = keysShim; -var index$5 = createCommonjsModule(function (module) { -module.exports = function (xs, f) { +var index$5 = function (xs, f) { if (xs.map) return xs.map(f); var res = []; for (var i = 0; i < xs.length; i++) { @@ -791,9 +731,6 @@ module.exports = function (xs, f) { }; var hasOwn = Object.prototype.hasOwnProperty; -}); - -var arrayMap = interopDefault(index$5); httpEtagHttpDecorator.$inject = ['$delegate', 'httpEtag'] @@ -948,11 +885,11 @@ function httpEtagHttpDecorator ($delegate, httpEtag) { // Based on npm package "query-string" function stringifyParams (obj) { - return obj ? arrayMap(objectKeys(obj).sort(), function (key) { + return obj ? index$5(index$4(obj).sort(), function (key) { var val = obj[key] if (angular.isArray(val)) { - return arrayMap(val.sort(), function (val2) { + return index$5(val.sort(), function (val2) { return encodeURIComponent(key) + '=' + encodeURIComponent(val2) }).join('&') } @@ -1109,25 +1046,19 @@ function cacheAdaptersConfig (httpEtagProvider) { }) } -var _$provide - var index = angular .module('http-etag', []) .provider('httpEtag', httpEtagProvider) .config(cacheAdaptersConfig) .config(['$provide', '$httpProvider', function addHttpEtagInterceptor ($provide, $httpProvider) { - _$provide = $provide - $httpProvider.interceptors.push(httpEtagInterceptorFactory) - httpEtagHttpDecorator.useLegacyPromiseExtensions = $httpProvider.useLegacyPromiseExtensions || function useLegacyPromiseExtensions () { return true } + $provide.decorator('$http', httpEtagHttpDecorator) + $httpProvider.interceptors.push(httpEtagInterceptorFactory) }]) - .run(function decorateHttpService () { - _$provide.decorator('$http', httpEtagHttpDecorator) - }) .name return index; -}))); \ No newline at end of file +}))); diff --git a/release/angular-http-etag.min.js b/release/angular-http-etag.min.js index faaaefe..a75c3ac 100644 --- a/release/angular-http-etag.min.js +++ b/release/angular-http-etag.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("angular")):"function"==typeof define&&define.amd?define(["angular"],t):e.angularHttpEtag=t(e.angular)}(this,function(e){"use strict";function t(e){return e&&"object"==typeof e&&"default"in e?e.default:e}function n(e,t){return t={exports:{}},e(t,t.exports),t.exports}function r(){var t=this,n=["createCache","getCache"],r=["setItem","getItem","removeItem","removeAllItems"],o=n.concat(r),c={},i={},a="httpEtagCache",u={deepCopy:!1,cacheResponseData:!0,cacheService:"$cacheFactory",cacheOptions:{number:25}};t.setDefaultCacheConfig=function(n){return u=e.extend({},u,n),t},t.getDefaultCacheConfig=function(){return u},t.defineCache=function(n,r){return r=e.extend({},u,r,{id:n}),i[n]=r,t},t.defineCacheServiceAdapter=function(n,r){if(!r)throw new Error("Missing cache service adapter configuration");if(!r.methods)throw new Error("Missing cache service adapter configuration methods");return e.forEach(o,function(e){if("function"!=typeof r.methods[e])throw new Error('Expected cache service adapter method "'+e+'" to be a function')}),c[n]=r,t},t.getCacheServiceAdapter=function(e){return c[e]},t.$get=["$injector",function(o){function u(e){var t=typeof e,n="number"===t||"string"===t&&!!e;return n?e:a}var f={},s={},l={},p={},d={};return i[a]||t.defineCache(a),e.forEach(c,function(t,r){var c=s[r]=window[r]||o.get(r),i=l[r]={};e.forEach(n,function(n){i[n]=e.bind({},t.methods[n],c)})}),e.forEach(i,function(t,n){l[t.cacheService].createCache(n,t);var o=p[n]=l[t.cacheService].getCache(n),a=d[n]={},u=c[t.cacheService].config.storesDeepCopies,s=!u&&i[n].deepCopy,h=function(e){return s?O(e):e};e.forEach(r,function(n){var r,i,u=c[t.cacheService].methods[n];"getItem"===n&&(r=function(e,t,n){var r=u(e,t,n);return r&&h(r.responseData)},i=function(e,t,n){return h(u(e,t,n))}),"setItem"===n&&(r=function(e,t,n,r){var o=a.$getItem(t);n=h(n),o&&"object"==typeof o?(o.responseData=n,n=o):n={responseData:n},u(e,t,n,r)},i=function(e,t,n,r){u(e,t,h(n),r)}),a[n]=e.bind({},r||u,o),i&&(a["$"+n]=e.bind({},i,o))}),a.unsetItem=function(e){a.setItem(e,void 0)},a.expireItem=function(e){var t=a.$getItem(e);delete t.etagHeader,a.$setItem(e,t)},a.getItemCache=function(e){return f.getItemCache(n,e)},a.info=function(){return i[n]},a.isCache=!0}),f.info=function(){return i},f.getCache=function(e){var t=d[u(e)];if(t)return t},f.getItemCache=function(t,n){var r=f.getCache(t),o={};if(r){var c=[["set","setItem"],["get","getItem"],["$set","$setItem"],["$get","$getItem"],["unset","unsetItem"],["expire","expireItem"],["remove","removeItem"]];return e.forEach(c,function(t){o[t[0]]=e.bind({},r[t[1]],n)}),o.info=function e(){var e=r.info();return e.itemKey=n,e},o.isItemCache=!0,o}},f.purgeCaches=function(){e.forEach(d,function(e){e.removeAllItems()})},f}]}function o(t,n){function r(t){function r(e){var n=e.then,o=e.success;return e.cached=function(n){return d&&m&&v.cacheResponseData&&n(b,"cached",void 0,t,g),e},e.then=function(t,o,c){function i(e){return t(e,g)}function a(e){return o(e,g)}var u=n.apply(e,[t?i:void 0,o?a:void 0,c]);return r(u)},a&&g&&(e.success=function(t){var n=u(t,void 0,void 0,void 0,void 0,g);return o.apply(e,[n])}),e}var i,a=o.useLegacyPromiseExtensions(),l=!!t.etagCache,p=s.indexOf(t.method)>=0,d=l&&p;if(d){var h=c(t);if(h){var g=n.getItemCache(h.id,h.itemKey);if(!g)throw new Error("No defined ETag caches match specified cache ID");var v=g.info(),m=g.$get(),y=m&&m.etagHeader,b=y&&m.responseData;t.$$_itemCache=g,y&&(t.headers=e.extend({},t.headers,{"If-None-Match":y}))}}return i=f.apply(f,arguments),r(i),i}function c(e){var t=e.etagCache,n=typeof t,r={};if("function"===n&&(t=t(e),n=typeof t),"object"===n){var o,c;t.isCache?(o=t.info().id,c=i(e)):t.isItemCache?(o=t.info().id,c=t.info().itemKey):(o=t.id,c=t.itemKey||i(e)),r.id=o,r.itemKey=c}else if("string"===n)r.id=t,r.itemKey=i(e);else{if(t!==!0)return;r.itemKey=i(e)}return r}function i(e){var t=e.url,n=a(e.params),r=n&&t.indexOf("?")>0?"&":"?",o=n&&r+n||"";return t+o}function a(t){return t?P(A(t).sort(),function(n){var r=t[n];return e.isArray(r)?P(r.sort(),function(e){return encodeURIComponent(n)+"="+encodeURIComponent(e)}).join("&"):encodeURIComponent(n)+"="+encodeURIComponent(r)}).join("&"):""}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){for(var n=0,r=0;r=0&&"[object Function]"===t.call(e.callee)),r}}),w=t($),E=Object.freeze({default:w}),x=n(function(e){var n=Object.prototype.hasOwnProperty,r=Object.prototype.toString,o=Array.prototype.slice,c=t(E),i=Object.prototype.propertyIsEnumerable,a=!i.call({toString:null},"toString"),u=i.call(function(){},"prototype"),f=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],s=function(e){var t=e.constructor;return t&&t.prototype===e},l={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},p=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!l["$"+e]&&n.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{s(window[e])}catch(e){return!0}}catch(e){return!0}return!1}(),d=function(e){if("undefined"==typeof window||!p)return s(e);try{return s(e)}catch(e){return!1}},h=function(e){var t=null!==e&&"object"==typeof e,o="[object Function]"===r.call(e),i=c(e),s=t&&"[object String]"===r.call(e),l=[];if(!t&&!o&&!i)throw new TypeError("Object.keys called on a non-object");var p=u&&o;if(s&&e.length>0&&!n.call(e,0))for(var h=0;h0)for(var g=0;g=0,h=l&&p;if(h){var d=c(t);if(d){var v=n.getItemCache(d.id,d.itemKey);if(!v)throw new Error("No defined ETag caches match specified cache ID");var g=v.info(),m=v.$get(),y=m&&m.etagHeader,b=y&&m.responseData;t.$$_itemCache=v,y&&(t.headers=e.extend({},t.headers,{"If-None-Match":y}))}}return i=f.apply(f,arguments),o(i),i}function c(e){var t=e.etagCache,n=typeof t,r={};if("function"===n&&(t=t(e),n=typeof t),"object"===n){var o,c;t.isCache?(o=t.info().id,c=i(e)):t.isItemCache?(o=t.info().id,c=t.info().itemKey):(o=t.id,c=t.itemKey||i(e)),r.id=o,r.itemKey=c}else if("string"===n)r.id=t,r.itemKey=i(e);else{if(t!==!0)return;r.itemKey=i(e)}return r}function i(e){var t=e.url,n=a(e.params),r=n&&t.indexOf("?")>0?"&":"?",o=n&&r+n||"";return t+o}function a(t){return t?O(w(t).sort(),function(n){var r=t[n];return e.isArray(r)?O(r.sort(),function(e){return encodeURIComponent(n)+"="+encodeURIComponent(e)}).join("&"):encodeURIComponent(n)+"="+encodeURIComponent(r)}).join("&"):""}function u(e){var t=Array.prototype.slice.call(arguments,1);return function(){for(var n=0,r=0;r=0&&"[object Function]"===s.call(e.callee)),n},p=Object.prototype.hasOwnProperty,h=Object.prototype.toString,d=Array.prototype.slice,v=l,g=Object.prototype.propertyIsEnumerable,m=!g.call({toString:null},"toString"),y=g.call(function(){},"prototype"),b=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],I=function(e){var t=e.constructor;return t&&t.prototype===e},C={$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},S=function(){if("undefined"==typeof window)return!1;for(var e in window)try{if(!C["$"+e]&&p.call(window,e)&&null!==window[e]&&"object"==typeof window[e])try{I(window[e])}catch(e){return!0}}catch(e){return!0}return!1}(),$=function(e){if("undefined"==typeof window||!S)return I(e);try{return I(e)}catch(e){return!1}},j=function(e){var t=null!==e&&"object"==typeof e,n="[object Function]"===h.call(e),r=v(e),o=t&&"[object String]"===h.call(e),c=[];if(!t&&!n&&!r)throw new TypeError("Object.keys called on a non-object");var i=y&&n;if(o&&e.length>0&&!p.call(e,0))for(var a=0;a0)for(var u=0;u= 0\n var isCachable = hasConfig && isCacheableMethod\n var httpPromise\n\n if (isCachable) {\n var etagCacheConfig = processHttpConfigEtagValue(httpConfig)\n if (etagCacheConfig) {\n var itemCache = httpEtag.getItemCache(etagCacheConfig.id, etagCacheConfig.itemKey)\n if (!itemCache) throw new Error('No defined ETag caches match specified cache ID')\n\n var cacheInfo = itemCache.info()\n var rawCacheData = itemCache.$get()\n var cachedEtag = rawCacheData && rawCacheData.etagHeader\n var cachedResponse = cachedEtag && rawCacheData.responseData\n\n // Allow easy access to cache in interceptor\n httpConfig.$$_itemCache = itemCache\n\n if (cachedEtag) {\n httpConfig.headers = angular.extend({}, httpConfig.headers, {\n 'If-None-Match': cachedEtag\n })\n }\n }\n }\n\n httpPromise = $http.apply($http, arguments)\n httpEtagPromiseFactory(httpPromise)\n\n function httpEtagPromiseFactory (httpPromise) {\n var then = httpPromise.then\n var success = httpPromise.success\n\n httpPromise.cached = function httpEtagPromiseCached (callback) {\n if (isCachable && rawCacheData && cacheInfo.cacheResponseData) {\n callback(cachedResponse, 'cached', undefined, httpConfig, itemCache)\n }\n return httpPromise\n }\n\n httpPromise.then = function httpEtagThenWrapper (successCallback, errorCallback, progressBackCallback) {\n var thenPromise = then.apply(httpPromise, [\n successCallback ? httpEtagSuccessWrapper : undefined,\n errorCallback ? httpEtagErrorWrapper : undefined,\n progressBackCallback\n ])\n\n function httpEtagSuccessWrapper (response) {\n return successCallback(response, itemCache)\n }\n\n function httpEtagErrorWrapper (response) {\n return errorCallback(response, itemCache)\n }\n\n return httpEtagPromiseFactory(thenPromise)\n }\n\n if (useLegacyPromiseExtensions && itemCache) {\n httpPromise.success = function httpEtagPromiseSuccess (callback) {\n var partializedCallback = partial(callback, undefined, undefined, undefined, undefined, itemCache)\n return success.apply(httpPromise, [partializedCallback])\n }\n }\n\n return httpPromise\n }\n\n return httpPromise\n }\n\n // Decorate the cachable shortcut methods, too\n angular.forEach(cachableHttpMethods, function (httpMethod) {\n var method = httpMethod.toLowerCase()\n $httpDecorator[method] = function httpEtagHttpShortcutWrapper (url, config) {\n config = angular.extend({}, config, {\n method: httpMethod,\n url: url\n })\n\n return $httpDecorator.call($http, config)\n }\n })\n\n // Copy over all other properties and methods\n angular.forEach($http, function copyHttpPropertyToDectorator (value, key) {\n if (!$httpDecorator[key]) $httpDecorator[key] = value\n })\n\n /**\n * HELPERS\n */\n\n function processHttpConfigEtagValue (httpConfig) {\n var etagValue = httpConfig.etagCache\n var etagValueType = typeof etagValue\n var etagCacheConfig = {}\n\n // Evaluate function first\n if (etagValueType === 'function') {\n etagValue = etagValue(httpConfig)\n etagValueType = typeof etagValue\n }\n\n // Plain, cache, or itemCache objects\n if (etagValueType === 'object') {\n var id, itemKey\n\n if (etagValue.isCache) {\n id = etagValue.info().id\n itemKey = generateCacheItemKey(httpConfig)\n } else if (etagValue.isItemCache) {\n id = etagValue.info().id\n itemKey = etagValue.info().itemKey\n } else {\n id = etagValue.id\n itemKey = etagValue.itemKey || generateCacheItemKey(httpConfig)\n }\n\n etagCacheConfig.id = id\n etagCacheConfig.itemKey = itemKey\n } else if (etagValueType === 'string') {\n etagCacheConfig.id = etagValue\n etagCacheConfig.itemKey = generateCacheItemKey(httpConfig)\n } else if (etagValue === true) {\n // Undefined cacheId will use the default cacheId as defined in provider\n etagCacheConfig.itemKey = generateCacheItemKey(httpConfig)\n } else return\n return etagCacheConfig\n }\n\n function generateCacheItemKey (httpConfig) {\n var url = httpConfig.url\n var params = stringifyParams(httpConfig.params)\n var joiner = ((params && url.indexOf('?') > 0) ? '&' : '?')\n var queryString = (params && joiner + params) || ''\n return url + queryString\n }\n\n // Based on npm package \"query-string\"\n function stringifyParams (obj) {\n return obj ? arrayMap(objectKeys(obj).sort(), function (key) {\n var val = obj[key]\n\n if (angular.isArray(val)) {\n return arrayMap(val.sort(), function (val2) {\n return encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n }).join('&')\n }\n\n return encodeURIComponent(key) + '=' + encodeURIComponent(val)\n }).join('&') : ''\n }\n\n // http://ejohn.org/blog/partial-functions-in-javascript/\n function partial (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n return function () {\n var arg = 0\n for (var i = 0; i < args.length && arg < arguments.length; i++) {\n if (args[i] === undefined) args[i] = arguments[arg++]\n }\n return fn.apply(this, args)\n }\n }\n\n return $httpDecorator\n}\n","export default httpEtagInterceptorFactory\n\nfunction httpEtagInterceptorFactory () {\n function responseInterceptor (response) {\n var itemCache = response.config.$$_itemCache\n\n if (itemCache) {\n var cacheInfo = itemCache.info()\n var cacheResponseData = cacheInfo.cacheResponseData\n var etag = response.headers().etag\n var cacheData = {}\n\n if (etag) {\n cacheData.etagHeader = etag\n if (cacheResponseData) cacheData.responseData = response.data\n itemCache.$set(cacheData)\n }\n\n delete response.config.$$_itemCache\n }\n\n return response\n }\n\n return {\n response: responseInterceptor\n }\n}\n","import angular from 'angular'\n\nexport default cacheAdaptersConfig\n\ncacheAdaptersConfig.$inject = ['httpEtagProvider']\n\nfunction cacheAdaptersConfig (httpEtagProvider) {\n httpEtagProvider\n\n .defineCacheServiceAdapter('$cacheFactory', {\n config: {\n storesDeepCopies: false\n },\n methods: {\n createCache: function createCache ($cacheFactory, cacheId, options) {\n $cacheFactory(cacheId, options)\n },\n getCache: function getCache ($cacheFactory, cacheId) {\n return $cacheFactory.get(cacheId)\n },\n setItem: function setItem (cache, itemKey, value) {\n cache.put(itemKey, value)\n },\n getItem: function getItem (cache, itemKey) {\n return cache.get(itemKey)\n },\n removeItem: function removeItem (cache, itemKey) {\n cache.remove(itemKey)\n },\n removeAllItems: function removeAllItems (cache, itemKey) {\n cache.removeAll()\n }\n }\n })\n\n .defineCacheServiceAdapter('localStorage', {\n config: {\n storesDeepCopies: true\n },\n methods: {\n createCache: angular.noop,\n getCache: function getCache (localStorage, cacheId) {\n return cacheId\n },\n setItem: function setItem (cacheId, itemKey, value) {\n try {\n itemKey = cacheId + ':' + itemKey\n localStorage.setItem(itemKey, JSON.stringify(value))\n } catch (e) {\n\n }\n },\n getItem: function getItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n return JSON.parse(localStorage.getItem(itemKey))\n },\n removeItem: function removeItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n localStorage.removeItem(itemKey)\n },\n removeAllItems: function removeAllItems (cacheId, itemKey) {\n var keyPrefix = cacheId + ':'\n\n angular.forEach(localStorage, function (value, key) {\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key)\n }\n })\n }\n }\n })\n\n .defineCacheServiceAdapter('sessionStorage', {\n config: {\n storesDeepCopies: true\n },\n methods: {\n createCache: angular.noop,\n getCache: function getCache (sessionStorage, cacheId) {\n return cacheId\n },\n setItem: function setItem (cacheId, itemKey, value) {\n try {\n itemKey = cacheId + ':' + itemKey\n sessionStorage.setItem(itemKey, JSON.stringify(value))\n } catch (e) {\n\n }\n },\n getItem: function getItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n return JSON.parse(sessionStorage.getItem(itemKey))\n },\n removeItem: function removeItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n sessionStorage.removeItem(itemKey)\n },\n removeAllItems: function removeAllItems (cacheId, itemKey) {\n var keyPrefix = cacheId + ':'\n\n angular.forEach(sessionStorage, function (value, key) {\n if (key.indexOf(keyPrefix) === 0) {\n sessionStorage.removeItem(key)\n }\n })\n }\n }\n })\n}\n","'use strict';\n\nexports.__esModule = true;\nvar toString = Object.prototype.toString;\n\nvar isBuffer = typeof Buffer !== 'undefined' ? function isBuffer(obj) {\n return Buffer.isBuffer(obj);\n} : function isBuffer() {\n // always return false in browsers\n return false;\n};\n\nvar getKeys = typeof Object.keys === 'function' ? function getKeys(obj) {\n return Object.keys(obj);\n} : function getKeys(obj) {\n var objType = typeof obj;\n\n if (obj === null || objType !== 'function' && objType !== 'object') {\n throw new TypeError('obj must be an Object');\n }\n\n var resultKeys = [],\n key = void 0;\n\n for (key in obj) {\n Object.prototype.hasOwnProperty.call(obj, key) && resultKeys.push(key);\n }\n\n return resultKeys;\n};\n\nvar getSymbols = typeof Symbol === 'function' ? function getSymbols(obj) {\n return Object.getOwnPropertySymbols(obj);\n} : function getSymbols() {\n // always return empty Array when Symbol is not supported\n return [];\n};\n\n// NOTE:\n//\n// Array.prototype.indexOf is cannot find NaN (in Chrome)\n// Array.prototype.includes is can find NaN (in Chrome)\n//\n// this function can find NaN, because use SameValue algorithm\nfunction indexOf(array, s) {\n if (toString.call(array) !== '[object Array]') {\n throw new TypeError('array must be an Array');\n }\n\n var i = void 0,\n len = void 0,\n value = void 0;\n\n for (i = 0, len = array.length; i < len; ++i) {\n value = array[i];\n\n // NOTE:\n //\n // it is SameValue algorithm\n // http://stackoverflow.com/questions/27144277/comparing-a-variable-with-itself\n //\n // eslint-disable-next-line no-self-compare\n if (value === s || value !== value && s !== s) {\n return i;\n }\n }\n\n return -1;\n}\n\nexports.getKeys = getKeys;\nexports.getSymbols = getSymbols;\nexports.indexOf = indexOf;\nexports.isBuffer = isBuffer;","'use strict';\n\nexports.__esModule = true;\nexports.copyValue = exports.copyCollection = exports.copy = void 0;\n\nvar _polyfill = require('./polyfill');\n\nvar toString = Object.prototype.toString;\n\nfunction copy(target, customizer) {\n var resultValue = copyValue(target);\n\n if (resultValue !== null) {\n return resultValue;\n }\n\n return copyCollection(target, customizer);\n}\n\nfunction copyCollection(target, customizer) {\n if (typeof customizer !== 'function') {\n throw new TypeError('customizer is must be a Function');\n }\n\n if (typeof target === 'function') {\n var source = String(target);\n\n // NOTE:\n //\n // https://gist.github.com/jdalton/5e34d890105aca44399f\n //\n // - https://gist.github.com/jdalton/5e34d890105aca44399f#gistcomment-1283831\n // - http://es5.github.io/#x15\n //\n // native functions does not have prototype:\n //\n // Object.toString.prototype // => undefined\n // (function() {}).prototype // => {}\n //\n // but cannot detect native constructor:\n //\n // typeof Object // => 'function'\n // Object.prototype // => {}\n //\n // and cannot detect null binded function:\n //\n // String(Math.abs)\n // // => 'function abs() { [native code] }'\n //\n // Firefox, Safari:\n // String((function abs() {}).bind(null))\n // // => 'function abs() { [native code] }'\n //\n // Chrome:\n // String((function abs() {}).bind(null))\n // // => 'function () { [native code] }'\n if (/^\\s*function\\s*\\S*\\([^\\)]*\\)\\s*{\\s*\\[native code\\]\\s*}/.test(source)) {\n // native function\n return target;\n } else {\n // user defined function\n return new Function('return ' + String(source))();\n }\n }\n\n var targetClass = toString.call(target);\n\n if (targetClass === '[object Array]') {\n return [];\n }\n\n if (targetClass === '[object Object]' && target.constructor === Object) {\n return {};\n }\n\n if (targetClass === '[object Date]') {\n // NOTE:\n //\n // Firefox need to convert\n //\n // Firefox:\n // var date = new Date;\n // +date; // 1420909365967\n // +new Date(date); // 1420909365000\n // +new Date(+date); // 1420909365967\n //\n // Chrome:\n // var date = new Date;\n // +date; // 1420909757913\n // +new Date(date); // 1420909757913\n // +new Date(+date); // 1420909757913\n return new Date(target.getTime());\n }\n\n if (targetClass === '[object RegExp]') {\n // NOTE:\n //\n // Chrome, Safari:\n // (new RegExp).source => \"(?:)\"\n //\n // Firefox:\n // (new RegExp).source => \"\"\n //\n // Chrome, Safari, Firefox:\n // String(new RegExp) => \"/(?:)/\"\n var regexpText = String(target),\n slashIndex = regexpText.lastIndexOf('/');\n\n return new RegExp(regexpText.slice(1, slashIndex), regexpText.slice(slashIndex + 1));\n }\n\n if ((0, _polyfill.isBuffer)(target)) {\n var buffer = new Buffer(target.length);\n\n target.copy(buffer);\n\n return buffer;\n }\n\n var customizerResult = customizer(target);\n\n if (customizerResult !== void 0) {\n return customizerResult;\n }\n\n return null;\n}\n\nfunction copyValue(target) {\n var targetType = typeof target;\n\n // copy String, Number, Boolean, undefined and Symbol\n // without null and Function\n if (target !== null && targetType !== 'object' && targetType !== 'function') {\n return target;\n }\n\n return null;\n}\n\nexports.copy = copy;\nexports.copyCollection = copyCollection;\nexports.copyValue = copyValue;","'use strict';\n\nexports.__esModule = true;\n\nvar _copy = require('./copy');\n\nvar _polyfill = require('./polyfill');\n\nfunction defaultCustomizer(target) {\n return void 0;\n}\n\nfunction deepcopy(target) {\n var customizer = arguments.length <= 1 || arguments[1] === void 0 ? defaultCustomizer : arguments[1];\n\n if (target === null) {\n // copy null\n return null;\n }\n\n var resultValue = (0, _copy.copyValue)(target);\n\n if (resultValue !== null) {\n // copy some primitive types\n return resultValue;\n }\n\n var resultCollection = (0, _copy.copyCollection)(target, customizer),\n clone = resultCollection !== null ? resultCollection : target;\n\n var visited = [target],\n reference = [clone];\n\n // recursively copy from collection\n return recursiveCopy(target, customizer, clone, visited, reference);\n}\n\nfunction recursiveCopy(target, customizer, clone, visited, reference) {\n if (target === null) {\n // copy null\n return null;\n }\n\n var resultValue = (0, _copy.copyValue)(target);\n\n if (resultValue !== null) {\n // copy some primitive types\n return resultValue;\n }\n\n var keys = (0, _polyfill.getKeys)(target).concat((0, _polyfill.getSymbols)(target));\n\n var i = void 0,\n len = void 0;\n\n var key = void 0,\n value = void 0,\n index = void 0,\n resultCopy = void 0,\n result = void 0,\n ref = void 0;\n\n for (i = 0, len = keys.length; i < len; ++i) {\n key = keys[i];\n value = target[key];\n index = (0, _polyfill.indexOf)(visited, value);\n\n resultCopy = void 0;\n result = void 0;\n ref = void 0;\n\n if (index === -1) {\n resultCopy = (0, _copy.copy)(value, customizer);\n result = resultCopy !== null ? resultCopy : value;\n\n if (value !== null && /^(?:function|object)$/.test(typeof value)) {\n visited.push(value);\n reference.push(result);\n }\n } else {\n // circular reference\n ref = reference[index];\n }\n\n clone[key] = ref || recursiveCopy(value, customizer, result, visited, reference);\n }\n\n return clone;\n}\n\nexports['default'] = deepcopy;\nmodule.exports = exports['default'];","module.exports = require('./lib');\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\nvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\nvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar excludedKeys = {\n\t$console: true,\n\t$external: true,\n\t$frame: true,\n\t$frameElement: true,\n\t$frames: true,\n\t$innerHeight: true,\n\t$innerWidth: true,\n\t$outerHeight: true,\n\t$outerWidth: true,\n\t$pageXOffset: true,\n\t$pageYOffset: true,\n\t$parent: true,\n\t$scrollLeft: true,\n\t$scrollTop: true,\n\t$scrollX: true,\n\t$scrollY: true,\n\t$self: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true,\n\t$window: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\ttry {\n\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\ttry {\n\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","module.exports = function (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = xs[i];\n if (hasOwn.call(xs, i)) res.push(f(x, i, xs));\n }\n return res;\n};\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n","import angular from 'angular'\nimport service from './service'\nimport httpDecorator from './httpDecorator'\nimport httpInterceptor from './httpInterceptor'\nimport cacheServiceAdapters from './cacheServiceAdapters'\n\nvar _$provide\n\nexport default angular\n .module('http-etag', [])\n .provider('httpEtag', service)\n .config(cacheServiceAdapters)\n .config(['$provide', '$httpProvider', function addHttpEtagInterceptor ($provide, $httpProvider) {\n _$provide = $provide\n $httpProvider.interceptors.push(httpInterceptor)\n\n httpDecorator.useLegacyPromiseExtensions =\n $httpProvider.useLegacyPromiseExtensions ||\n function useLegacyPromiseExtensions () { return true }\n }])\n .run(function decorateHttpService () {\n _$provide.decorator('$http', httpDecorator)\n })\n .name\n"],"names":["httpEtagProvider","this","serviceAdapterMethods","cacheAdapterMethods","requiredAdapterMethods","concat","cacheAdapters","cacheDefinitions","defaultCacheId","defaultEtagCacheConfig","deepCopy","cacheResponseData","cacheService","cacheOptions","number","setDefaultCacheConfig","config","angular","extend","getDefaultCacheConfig","defineCache","cacheId","id","defineCacheServiceAdapter","serviceName","Error","methods","forEach","method","getCacheServiceAdapter","$get","$injector","processCacheId","type","isDefined","httpEtagService","services","adaptedServices","caches","adaptedCaches","adapter","service","window","get","adaptedService","bind","createCache","cache","getCache","adaptedCache","serviceDeepCopies","storesDeepCopies","copy","value","deepcopy","wrappedMethod","wrappedRawMethod","adapterMethod","itemKey","options","cachedData","responseData","$getItem","unsetItem","setItem","undefined","expireItem","data","etagHeader","$setItem","getItemCache","info","isCache","itemCache","methodMappings","itemCacheInfo","isItemCache","purgeCaches","removeAllItems","httpEtagHttpDecorator","$delegate","httpEtag","$httpDecorator","httpConfig","httpEtagPromiseFactory","httpPromise","then","success","cached","callback","isCachable","rawCacheData","cacheInfo","cachedResponse","successCallback","errorCallback","progressBackCallback","httpEtagSuccessWrapper","response","httpEtagErrorWrapper","thenPromise","apply","useLegacyPromiseExtensions","partializedCallback","partial","hasConfig","etagCache","isCacheableMethod","cachableHttpMethods","indexOf","etagCacheConfig","processHttpConfigEtagValue","cachedEtag","$$_itemCache","headers","If-None-Match","$http","arguments","etagValue","etagValueType","generateCacheItemKey","url","params","stringifyParams","joiner","queryString","obj","arrayMap","objectKeys","sort","key","val","isArray","val2","encodeURIComponent","join","fn","args","Array","prototype","slice","call","arg","i","length","httpMethod","toLowerCase","httpEtagInterceptorFactory","responseInterceptor","etag","cacheData","$set","cacheAdaptersConfig","$cacheFactory","put","getItem","removeItem","remove","removeAll","noop","localStorage","JSON","stringify","e","parse","keyPrefix","sessionStorage","array","s","toString","TypeError","len","exports","__esModule","Object","isBuffer","Buffer","getKeys","keys","objType","resultKeys","hasOwnProperty","push","getSymbols","Symbol","getOwnPropertySymbols","target","customizer","resultValue","copyValue","copyCollection","source","String","test","Function","targetClass","constructor","Date","getTime","regexpText","slashIndex","lastIndexOf","RegExp","_polyfill","buffer","customizerResult","targetType","commonjsHelpers.interopDefault","defaultCustomizer","_copy","resultCollection","clone","visited","reference","recursiveCopy","index","resultCopy","result","ref","module","toStr","str","isArgs","callee","has","isEnumerable","propertyIsEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","ctor","excludedKeys","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","k","equalsConstructorPrototypeIfNotBuggy","keysShim","object","isObject","isFunction","isArguments","isString","theKeys","skipProto","j","name","skipConstructor","shim","keysWorksWithArguments","originalKeys","xs","f","map","res","x","hasOwn","$inject","_$provide","provider","cacheServiceAdapters","$provide","$httpProvider","interceptors","httpInterceptor","httpDecorator","run","decorator"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":null,"sources":["../src/service.js","../src/httpDecorator.js","../src/httpInterceptor.js","../src/cacheServiceAdapters.js","../node_modules/deepcopy/lib/polyfill.js","../node_modules/deepcopy/lib/copy.js","../node_modules/deepcopy/lib/index.js","../node_modules/deepcopy/index.js","../node_modules/object-keys/isArguments.js","../node_modules/object-keys/index.js","../node_modules/array-map/index.js","../src/index.js"],"sourcesContent":["import angular from 'angular'\nimport deepcopy from 'deepcopy'\n\nexport default httpEtagProvider\n\nfunction httpEtagProvider () {\n var httpEtagProvider = this\n\n var serviceAdapterMethods = [\n 'createCache',\n 'getCache'\n ]\n\n var cacheAdapterMethods = [\n 'setItem',\n 'getItem',\n 'removeItem',\n 'removeAllItems'\n // info method hard-coded\n ]\n\n var requiredAdapterMethods = serviceAdapterMethods.concat(cacheAdapterMethods)\n\n // Built-in adapters defined in ./cacheServiceAdapters.js\n var cacheAdapters = {}\n var cacheDefinitions = {}\n\n // Cache config defaults\n var defaultCacheId = 'httpEtagCache'\n var defaultEtagCacheConfig = {\n deepCopy: false,\n cacheResponseData: true,\n cacheService: '$cacheFactory',\n cacheOptions: {\n number: 25\n }\n }\n\n /**\n * SERVICE PROVIDER\n * .setDefaultCacheConfig(config)\n * .defineCache(cacheId, config)\n * .defineCacheServiceAdapter(serviceName, config)\n * .getCacheServiceAdapter(serviceName)\n */\n\n httpEtagProvider.setDefaultCacheConfig = function httpEtagSetDefaultCacheOptions (config) {\n defaultEtagCacheConfig = angular.extend({}, defaultEtagCacheConfig, config)\n return httpEtagProvider\n }\n\n httpEtagProvider.getDefaultCacheConfig = function httpEtagGetDefaultCacheOptions () {\n return defaultEtagCacheConfig\n }\n\n httpEtagProvider.defineCache = function httpEtagDefineCache (cacheId, config) {\n config = angular.extend({}, defaultEtagCacheConfig, config, { id: cacheId })\n cacheDefinitions[cacheId] = config\n return httpEtagProvider\n }\n\n httpEtagProvider.defineCacheServiceAdapter = function httpEtagDefineCacheServiceAdapter (serviceName, config) {\n if (!config) throw new Error('Missing cache service adapter configuration')\n if (!config.methods) throw new Error('Missing cache service adapter configuration methods')\n angular.forEach(requiredAdapterMethods, function (method) {\n if (typeof config.methods[method] !== 'function') {\n throw new Error('Expected cache service adapter method \"' + method + '\" to be a function')\n }\n })\n\n cacheAdapters[serviceName] = config\n return httpEtagProvider\n }\n\n httpEtagProvider.getCacheServiceAdapter = function httpEtagGetCacheServiceAdapter (serviceName) {\n return cacheAdapters[serviceName]\n }\n\n /**\n * SERVICE\n * .info()\n * .getCache(acheId)\n * .getItemCache(cacheId, itemKey)\n */\n\n httpEtagProvider.$get = ['$injector', function httpEtagFactory ($injector) {\n var httpEtagService = {}\n\n var services = {}\n var adaptedServices = {}\n var caches = {}\n var adaptedCaches = {}\n\n // Add default cache if not already defined\n if (!cacheDefinitions[defaultCacheId]) httpEtagProvider.defineCache(defaultCacheId)\n\n // Find/inject cache service and create adapted versions\n angular.forEach(cacheAdapters, function adaptCacheService (adapter, serviceName) {\n var service = services[serviceName] = window[serviceName] || $injector.get(serviceName)\n var adaptedService = adaptedServices[serviceName] = {}\n\n angular.forEach(serviceAdapterMethods, function (method) {\n adaptedService[method] = angular.bind({}, adapter.methods[method], service)\n })\n })\n\n // Instantiate caches and create adapted versions\n angular.forEach(cacheDefinitions, function adaptCache (config, cacheId) {\n adaptedServices[config.cacheService].createCache(cacheId, config)\n var cache = caches[cacheId] = adaptedServices[config.cacheService].getCache(cacheId)\n var adaptedCache = adaptedCaches[cacheId] = {}\n // Determine whether to perform deepcopying or not\n var serviceDeepCopies = cacheAdapters[config.cacheService].config.storesDeepCopies\n var deepCopy = !serviceDeepCopies && cacheDefinitions[cacheId].deepCopy\n var copy = function (value) {\n return deepCopy ? deepcopy(value) : value\n }\n\n angular.forEach(cacheAdapterMethods, function (method) {\n var adapterMethod = cacheAdapters[config.cacheService].methods[method]\n var wrappedMethod\n var wrappedRawMethod\n\n // Wrap set/get methods to set/get to the `responseData` property of an\n // object. This is where the $http interceptor stores response data.\n if (method === 'getItem') {\n wrappedMethod = function getCacheItemResponseData (cache, itemKey, options) {\n var cachedData = adapterMethod(cache, itemKey, options)\n return cachedData && copy(cachedData.responseData)\n }\n\n wrappedRawMethod = function getCacheItemData (cache, itemKey, options) {\n return copy(adapterMethod(cache, itemKey, options))\n }\n }\n\n if (method === 'setItem') {\n wrappedMethod = function setCacheItemResponseData (cache, itemKey, value, options) {\n var cachedData = adaptedCache.$getItem(itemKey)\n value = copy(value)\n\n if (cachedData && typeof cachedData === 'object') {\n cachedData.responseData = value\n value = cachedData\n } else value = { responseData: value }\n\n adapterMethod(cache, itemKey, value, options)\n }\n\n wrappedRawMethod = function setCacheItemData (cache, itemKey, value, options) {\n adapterMethod(cache, itemKey, copy(value), options)\n }\n }\n\n adaptedCache[method] = angular.bind({}, (wrappedMethod || adapterMethod), cache)\n if (wrappedRawMethod) {\n adaptedCache['$' + method] = angular.bind({}, wrappedRawMethod, cache)\n }\n })\n\n adaptedCache.unsetItem = function adaptedCacheUnsetItemCache (itemKey) {\n adaptedCache.setItem(itemKey, undefined)\n }\n adaptedCache.expireItem = function adaptedCacheUnsetItemCache (itemKey) {\n var data = adaptedCache.$getItem(itemKey)\n delete data.etagHeader\n adaptedCache.$setItem(itemKey, data)\n }\n adaptedCache.getItemCache = function adaptedCacheGetItemCache (itemKey) {\n return httpEtagService.getItemCache(cacheId, itemKey)\n }\n adaptedCache.info = function adaptedCacheInfo () {\n return cacheDefinitions[cacheId]\n }\n adaptedCache.isCache = true\n })\n\n httpEtagService.info = function httpEtagServiceInfo () {\n return cacheDefinitions\n }\n\n httpEtagService.getCache = function httpEtagServiceGetCache (cacheId) {\n var cache = adaptedCaches[processCacheId(cacheId)]\n if (cache) return cache\n }\n\n httpEtagService.getItemCache = function httpEtagServiceGeItemCache (cacheId, itemKey) {\n var cache = httpEtagService.getCache(cacheId)\n var itemCache = {}\n if (!cache) return\n\n var methodMappings = [\n ['set', 'setItem'],\n ['get', 'getItem'],\n ['$set', '$setItem'],\n ['$get', '$getItem'],\n ['unset', 'unsetItem'],\n ['expire', 'expireItem'],\n ['remove', 'removeItem']\n ]\n\n angular.forEach(methodMappings, function mapCacheMethdodsToItemCache (methods) {\n itemCache[methods[0]] = angular.bind({}, cache[methods[1]], itemKey)\n })\n\n itemCache.info = function itemCacheInfo () {\n var itemCacheInfo = cache.info()\n itemCacheInfo.itemKey = itemKey\n return itemCacheInfo\n }\n\n itemCache.isItemCache = true\n\n return itemCache\n }\n\n httpEtagService.purgeCaches = function httpEtagPurgeCaches () {\n angular.forEach(adaptedCaches, function (cache) {\n cache.removeAllItems()\n })\n }\n\n function processCacheId (cacheId) {\n var type = typeof cacheId\n var isDefined = type === 'number' || (type === 'string' && !!cacheId)\n return isDefined ? cacheId : defaultCacheId\n }\n\n return httpEtagService\n }]\n}\n","import angular from 'angular'\nimport objectKeys from 'object-keys'\nimport arrayMap from 'array-map'\n\nexport default httpEtagHttpDecorator\n\nhttpEtagHttpDecorator.$inject = ['$delegate', 'httpEtag']\n\nfunction httpEtagHttpDecorator ($delegate, httpEtag) {\n var $http = $delegate\n var cachableHttpMethods = [\n 'GET',\n 'JSONP'\n ]\n\n function $httpDecorator (httpConfig) {\n var useLegacyPromiseExtensions = httpEtagHttpDecorator.useLegacyPromiseExtensions()\n var hasConfig = !!httpConfig.etagCache\n var isCacheableMethod = cachableHttpMethods.indexOf(httpConfig.method) >= 0\n var isCachable = hasConfig && isCacheableMethod\n var httpPromise\n\n if (isCachable) {\n var etagCacheConfig = processHttpConfigEtagValue(httpConfig)\n if (etagCacheConfig) {\n var itemCache = httpEtag.getItemCache(etagCacheConfig.id, etagCacheConfig.itemKey)\n if (!itemCache) throw new Error('No defined ETag caches match specified cache ID')\n\n var cacheInfo = itemCache.info()\n var rawCacheData = itemCache.$get()\n var cachedEtag = rawCacheData && rawCacheData.etagHeader\n var cachedResponse = cachedEtag && rawCacheData.responseData\n\n // Allow easy access to cache in interceptor\n httpConfig.$$_itemCache = itemCache\n\n if (cachedEtag) {\n httpConfig.headers = angular.extend({}, httpConfig.headers, {\n 'If-None-Match': cachedEtag\n })\n }\n }\n }\n\n httpPromise = $http.apply($http, arguments)\n httpEtagPromiseFactory(httpPromise)\n\n function httpEtagPromiseFactory (httpPromise) {\n var then = httpPromise.then\n var success = httpPromise.success\n\n httpPromise.cached = function httpEtagPromiseCached (callback) {\n if (isCachable && rawCacheData && cacheInfo.cacheResponseData) {\n callback(cachedResponse, 'cached', undefined, httpConfig, itemCache)\n }\n return httpPromise\n }\n\n httpPromise.then = function httpEtagThenWrapper (successCallback, errorCallback, progressBackCallback) {\n var thenPromise = then.apply(httpPromise, [\n successCallback ? httpEtagSuccessWrapper : undefined,\n errorCallback ? httpEtagErrorWrapper : undefined,\n progressBackCallback\n ])\n\n function httpEtagSuccessWrapper (response) {\n return successCallback(response, itemCache)\n }\n\n function httpEtagErrorWrapper (response) {\n return errorCallback(response, itemCache)\n }\n\n return httpEtagPromiseFactory(thenPromise)\n }\n\n if (useLegacyPromiseExtensions && itemCache) {\n httpPromise.success = function httpEtagPromiseSuccess (callback) {\n var partializedCallback = partial(callback, undefined, undefined, undefined, undefined, itemCache)\n return success.apply(httpPromise, [partializedCallback])\n }\n }\n\n return httpPromise\n }\n\n return httpPromise\n }\n\n // Decorate the cachable shortcut methods, too\n angular.forEach(cachableHttpMethods, function (httpMethod) {\n var method = httpMethod.toLowerCase()\n $httpDecorator[method] = function httpEtagHttpShortcutWrapper (url, config) {\n config = angular.extend({}, config, {\n method: httpMethod,\n url: url\n })\n\n return $httpDecorator.call($http, config)\n }\n })\n\n // Copy over all other properties and methods\n angular.forEach($http, function copyHttpPropertyToDectorator (value, key) {\n if (!$httpDecorator[key]) $httpDecorator[key] = value\n })\n\n /**\n * HELPERS\n */\n\n function processHttpConfigEtagValue (httpConfig) {\n var etagValue = httpConfig.etagCache\n var etagValueType = typeof etagValue\n var etagCacheConfig = {}\n\n // Evaluate function first\n if (etagValueType === 'function') {\n etagValue = etagValue(httpConfig)\n etagValueType = typeof etagValue\n }\n\n // Plain, cache, or itemCache objects\n if (etagValueType === 'object') {\n var id, itemKey\n\n if (etagValue.isCache) {\n id = etagValue.info().id\n itemKey = generateCacheItemKey(httpConfig)\n } else if (etagValue.isItemCache) {\n id = etagValue.info().id\n itemKey = etagValue.info().itemKey\n } else {\n id = etagValue.id\n itemKey = etagValue.itemKey || generateCacheItemKey(httpConfig)\n }\n\n etagCacheConfig.id = id\n etagCacheConfig.itemKey = itemKey\n } else if (etagValueType === 'string') {\n etagCacheConfig.id = etagValue\n etagCacheConfig.itemKey = generateCacheItemKey(httpConfig)\n } else if (etagValue === true) {\n // Undefined cacheId will use the default cacheId as defined in provider\n etagCacheConfig.itemKey = generateCacheItemKey(httpConfig)\n } else return\n return etagCacheConfig\n }\n\n function generateCacheItemKey (httpConfig) {\n var url = httpConfig.url\n var params = stringifyParams(httpConfig.params)\n var joiner = ((params && url.indexOf('?') > 0) ? '&' : '?')\n var queryString = (params && joiner + params) || ''\n return url + queryString\n }\n\n // Based on npm package \"query-string\"\n function stringifyParams (obj) {\n return obj ? arrayMap(objectKeys(obj).sort(), function (key) {\n var val = obj[key]\n\n if (angular.isArray(val)) {\n return arrayMap(val.sort(), function (val2) {\n return encodeURIComponent(key) + '=' + encodeURIComponent(val2)\n }).join('&')\n }\n\n return encodeURIComponent(key) + '=' + encodeURIComponent(val)\n }).join('&') : ''\n }\n\n // http://ejohn.org/blog/partial-functions-in-javascript/\n function partial (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n return function () {\n var arg = 0\n for (var i = 0; i < args.length && arg < arguments.length; i++) {\n if (args[i] === undefined) args[i] = arguments[arg++]\n }\n return fn.apply(this, args)\n }\n }\n\n return $httpDecorator\n}\n","export default httpEtagInterceptorFactory\n\nfunction httpEtagInterceptorFactory () {\n function responseInterceptor (response) {\n var itemCache = response.config.$$_itemCache\n\n if (itemCache) {\n var cacheInfo = itemCache.info()\n var cacheResponseData = cacheInfo.cacheResponseData\n var etag = response.headers().etag\n var cacheData = {}\n\n if (etag) {\n cacheData.etagHeader = etag\n if (cacheResponseData) cacheData.responseData = response.data\n itemCache.$set(cacheData)\n }\n\n delete response.config.$$_itemCache\n }\n\n return response\n }\n\n return {\n response: responseInterceptor\n }\n}\n","import angular from 'angular'\n\nexport default cacheAdaptersConfig\n\ncacheAdaptersConfig.$inject = ['httpEtagProvider']\n\nfunction cacheAdaptersConfig (httpEtagProvider) {\n httpEtagProvider\n\n .defineCacheServiceAdapter('$cacheFactory', {\n config: {\n storesDeepCopies: false\n },\n methods: {\n createCache: function createCache ($cacheFactory, cacheId, options) {\n $cacheFactory(cacheId, options)\n },\n getCache: function getCache ($cacheFactory, cacheId) {\n return $cacheFactory.get(cacheId)\n },\n setItem: function setItem (cache, itemKey, value) {\n cache.put(itemKey, value)\n },\n getItem: function getItem (cache, itemKey) {\n return cache.get(itemKey)\n },\n removeItem: function removeItem (cache, itemKey) {\n cache.remove(itemKey)\n },\n removeAllItems: function removeAllItems (cache, itemKey) {\n cache.removeAll()\n }\n }\n })\n\n .defineCacheServiceAdapter('localStorage', {\n config: {\n storesDeepCopies: true\n },\n methods: {\n createCache: angular.noop,\n getCache: function getCache (localStorage, cacheId) {\n return cacheId\n },\n setItem: function setItem (cacheId, itemKey, value) {\n try {\n itemKey = cacheId + ':' + itemKey\n localStorage.setItem(itemKey, JSON.stringify(value))\n } catch (e) {\n\n }\n },\n getItem: function getItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n return JSON.parse(localStorage.getItem(itemKey))\n },\n removeItem: function removeItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n localStorage.removeItem(itemKey)\n },\n removeAllItems: function removeAllItems (cacheId, itemKey) {\n var keyPrefix = cacheId + ':'\n\n angular.forEach(localStorage, function (value, key) {\n if (key.indexOf(keyPrefix) === 0) {\n localStorage.removeItem(key)\n }\n })\n }\n }\n })\n\n .defineCacheServiceAdapter('sessionStorage', {\n config: {\n storesDeepCopies: true\n },\n methods: {\n createCache: angular.noop,\n getCache: function getCache (sessionStorage, cacheId) {\n return cacheId\n },\n setItem: function setItem (cacheId, itemKey, value) {\n try {\n itemKey = cacheId + ':' + itemKey\n sessionStorage.setItem(itemKey, JSON.stringify(value))\n } catch (e) {\n\n }\n },\n getItem: function getItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n return JSON.parse(sessionStorage.getItem(itemKey))\n },\n removeItem: function removeItem (cacheId, itemKey) {\n itemKey = cacheId + ':' + itemKey\n sessionStorage.removeItem(itemKey)\n },\n removeAllItems: function removeAllItems (cacheId, itemKey) {\n var keyPrefix = cacheId + ':'\n\n angular.forEach(sessionStorage, function (value, key) {\n if (key.indexOf(keyPrefix) === 0) {\n sessionStorage.removeItem(key)\n }\n })\n }\n }\n })\n}\n","'use strict';\n\nexports.__esModule = true;\nvar toString = Object.prototype.toString;\n\nvar isBuffer = typeof Buffer !== 'undefined' ? function isBuffer(obj) {\n return Buffer.isBuffer(obj);\n} : function isBuffer() {\n // always return false in browsers\n return false;\n};\n\nvar getKeys = typeof Object.keys === 'function' ? function getKeys(obj) {\n return Object.keys(obj);\n} : function getKeys(obj) {\n var objType = typeof obj;\n\n if (obj === null || objType !== 'function' && objType !== 'object') {\n throw new TypeError('obj must be an Object');\n }\n\n var resultKeys = [],\n key = void 0;\n\n for (key in obj) {\n Object.prototype.hasOwnProperty.call(obj, key) && resultKeys.push(key);\n }\n\n return resultKeys;\n};\n\nvar getSymbols = typeof Symbol === 'function' ? function getSymbols(obj) {\n return Object.getOwnPropertySymbols(obj);\n} : function getSymbols() {\n // always return empty Array when Symbol is not supported\n return [];\n};\n\n// NOTE:\n//\n// Array.prototype.indexOf is cannot find NaN (in Chrome)\n// Array.prototype.includes is can find NaN (in Chrome)\n//\n// this function can find NaN, because use SameValue algorithm\nfunction indexOf(array, s) {\n if (toString.call(array) !== '[object Array]') {\n throw new TypeError('array must be an Array');\n }\n\n var i = void 0,\n len = void 0,\n value = void 0;\n\n for (i = 0, len = array.length; i < len; ++i) {\n value = array[i];\n\n // NOTE:\n //\n // it is SameValue algorithm\n // http://stackoverflow.com/questions/27144277/comparing-a-variable-with-itself\n //\n // eslint-disable-next-line no-self-compare\n if (value === s || value !== value && s !== s) {\n return i;\n }\n }\n\n return -1;\n}\n\nexports.getKeys = getKeys;\nexports.getSymbols = getSymbols;\nexports.indexOf = indexOf;\nexports.isBuffer = isBuffer;","'use strict';\n\nexports.__esModule = true;\nexports.copyValue = exports.copyCollection = exports.copy = void 0;\n\nvar _polyfill = require('./polyfill');\n\nvar toString = Object.prototype.toString;\n\nfunction copy(target, customizer) {\n var resultValue = copyValue(target);\n\n if (resultValue !== null) {\n return resultValue;\n }\n\n return copyCollection(target, customizer);\n}\n\nfunction copyCollection(target, customizer) {\n if (typeof customizer !== 'function') {\n throw new TypeError('customizer is must be a Function');\n }\n\n if (typeof target === 'function') {\n var source = String(target);\n\n // NOTE:\n //\n // https://gist.github.com/jdalton/5e34d890105aca44399f\n //\n // - https://gist.github.com/jdalton/5e34d890105aca44399f#gistcomment-1283831\n // - http://es5.github.io/#x15\n //\n // native functions does not have prototype:\n //\n // Object.toString.prototype // => undefined\n // (function() {}).prototype // => {}\n //\n // but cannot detect native constructor:\n //\n // typeof Object // => 'function'\n // Object.prototype // => {}\n //\n // and cannot detect null binded function:\n //\n // String(Math.abs)\n // // => 'function abs() { [native code] }'\n //\n // Firefox, Safari:\n // String((function abs() {}).bind(null))\n // // => 'function abs() { [native code] }'\n //\n // Chrome:\n // String((function abs() {}).bind(null))\n // // => 'function () { [native code] }'\n if (/^\\s*function\\s*\\S*\\([^\\)]*\\)\\s*{\\s*\\[native code\\]\\s*}/.test(source)) {\n // native function\n return target;\n } else {\n // user defined function\n return new Function('return ' + String(source))();\n }\n }\n\n var targetClass = toString.call(target);\n\n if (targetClass === '[object Array]') {\n return [];\n }\n\n if (targetClass === '[object Object]' && target.constructor === Object) {\n return {};\n }\n\n if (targetClass === '[object Date]') {\n // NOTE:\n //\n // Firefox need to convert\n //\n // Firefox:\n // var date = new Date;\n // +date; // 1420909365967\n // +new Date(date); // 1420909365000\n // +new Date(+date); // 1420909365967\n //\n // Chrome:\n // var date = new Date;\n // +date; // 1420909757913\n // +new Date(date); // 1420909757913\n // +new Date(+date); // 1420909757913\n return new Date(target.getTime());\n }\n\n if (targetClass === '[object RegExp]') {\n // NOTE:\n //\n // Chrome, Safari:\n // (new RegExp).source => \"(?:)\"\n //\n // Firefox:\n // (new RegExp).source => \"\"\n //\n // Chrome, Safari, Firefox:\n // String(new RegExp) => \"/(?:)/\"\n var regexpText = String(target),\n slashIndex = regexpText.lastIndexOf('/');\n\n return new RegExp(regexpText.slice(1, slashIndex), regexpText.slice(slashIndex + 1));\n }\n\n if ((0, _polyfill.isBuffer)(target)) {\n var buffer = new Buffer(target.length);\n\n target.copy(buffer);\n\n return buffer;\n }\n\n var customizerResult = customizer(target);\n\n if (customizerResult !== void 0) {\n return customizerResult;\n }\n\n return null;\n}\n\nfunction copyValue(target) {\n var targetType = typeof target;\n\n // copy String, Number, Boolean, undefined and Symbol\n // without null and Function\n if (target !== null && targetType !== 'object' && targetType !== 'function') {\n return target;\n }\n\n return null;\n}\n\nexports.copy = copy;\nexports.copyCollection = copyCollection;\nexports.copyValue = copyValue;","'use strict';\n\nexports.__esModule = true;\n\nvar _copy = require('./copy');\n\nvar _polyfill = require('./polyfill');\n\nfunction defaultCustomizer(target) {\n return void 0;\n}\n\nfunction deepcopy(target) {\n var customizer = arguments.length <= 1 || arguments[1] === void 0 ? defaultCustomizer : arguments[1];\n\n if (target === null) {\n // copy null\n return null;\n }\n\n var resultValue = (0, _copy.copyValue)(target);\n\n if (resultValue !== null) {\n // copy some primitive types\n return resultValue;\n }\n\n var resultCollection = (0, _copy.copyCollection)(target, customizer),\n clone = resultCollection !== null ? resultCollection : target;\n\n var visited = [target],\n reference = [clone];\n\n // recursively copy from collection\n return recursiveCopy(target, customizer, clone, visited, reference);\n}\n\nfunction recursiveCopy(target, customizer, clone, visited, reference) {\n if (target === null) {\n // copy null\n return null;\n }\n\n var resultValue = (0, _copy.copyValue)(target);\n\n if (resultValue !== null) {\n // copy some primitive types\n return resultValue;\n }\n\n var keys = (0, _polyfill.getKeys)(target).concat((0, _polyfill.getSymbols)(target));\n\n var i = void 0,\n len = void 0;\n\n var key = void 0,\n value = void 0,\n index = void 0,\n resultCopy = void 0,\n result = void 0,\n ref = void 0;\n\n for (i = 0, len = keys.length; i < len; ++i) {\n key = keys[i];\n value = target[key];\n index = (0, _polyfill.indexOf)(visited, value);\n\n resultCopy = void 0;\n result = void 0;\n ref = void 0;\n\n if (index === -1) {\n resultCopy = (0, _copy.copy)(value, customizer);\n result = resultCopy !== null ? resultCopy : value;\n\n if (value !== null && /^(?:function|object)$/.test(typeof value)) {\n visited.push(value);\n reference.push(result);\n }\n } else {\n // circular reference\n ref = reference[index];\n }\n\n clone[key] = ref || recursiveCopy(value, customizer, result, visited, reference);\n }\n\n return clone;\n}\n\nexports['default'] = deepcopy;\nmodule.exports = exports['default'];","module.exports = require('./lib');\n","'use strict';\n\nvar toStr = Object.prototype.toString;\n\nmodule.exports = function isArguments(value) {\n\tvar str = toStr.call(value);\n\tvar isArgs = str === '[object Arguments]';\n\tif (!isArgs) {\n\t\tisArgs = str !== '[object Array]' &&\n\t\t\tvalue !== null &&\n\t\t\ttypeof value === 'object' &&\n\t\t\ttypeof value.length === 'number' &&\n\t\t\tvalue.length >= 0 &&\n\t\t\ttoStr.call(value.callee) === '[object Function]';\n\t}\n\treturn isArgs;\n};\n","'use strict';\n\n// modified from https://github.com/es-shims/es5-shim\nvar has = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar slice = Array.prototype.slice;\nvar isArgs = require('./isArguments');\nvar isEnumerable = Object.prototype.propertyIsEnumerable;\nvar hasDontEnumBug = !isEnumerable.call({ toString: null }, 'toString');\nvar hasProtoEnumBug = isEnumerable.call(function () {}, 'prototype');\nvar dontEnums = [\n\t'toString',\n\t'toLocaleString',\n\t'valueOf',\n\t'hasOwnProperty',\n\t'isPrototypeOf',\n\t'propertyIsEnumerable',\n\t'constructor'\n];\nvar equalsConstructorPrototype = function (o) {\n\tvar ctor = o.constructor;\n\treturn ctor && ctor.prototype === o;\n};\nvar excludedKeys = {\n\t$console: true,\n\t$external: true,\n\t$frame: true,\n\t$frameElement: true,\n\t$frames: true,\n\t$innerHeight: true,\n\t$innerWidth: true,\n\t$outerHeight: true,\n\t$outerWidth: true,\n\t$pageXOffset: true,\n\t$pageYOffset: true,\n\t$parent: true,\n\t$scrollLeft: true,\n\t$scrollTop: true,\n\t$scrollX: true,\n\t$scrollY: true,\n\t$self: true,\n\t$webkitIndexedDB: true,\n\t$webkitStorageInfo: true,\n\t$window: true\n};\nvar hasAutomationEqualityBug = (function () {\n\t/* global window */\n\tif (typeof window === 'undefined') { return false; }\n\tfor (var k in window) {\n\t\ttry {\n\t\t\tif (!excludedKeys['$' + k] && has.call(window, k) && window[k] !== null && typeof window[k] === 'object') {\n\t\t\t\ttry {\n\t\t\t\t\tequalsConstructorPrototype(window[k]);\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}());\nvar equalsConstructorPrototypeIfNotBuggy = function (o) {\n\t/* global window */\n\tif (typeof window === 'undefined' || !hasAutomationEqualityBug) {\n\t\treturn equalsConstructorPrototype(o);\n\t}\n\ttry {\n\t\treturn equalsConstructorPrototype(o);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n\nvar keysShim = function keys(object) {\n\tvar isObject = object !== null && typeof object === 'object';\n\tvar isFunction = toStr.call(object) === '[object Function]';\n\tvar isArguments = isArgs(object);\n\tvar isString = isObject && toStr.call(object) === '[object String]';\n\tvar theKeys = [];\n\n\tif (!isObject && !isFunction && !isArguments) {\n\t\tthrow new TypeError('Object.keys called on a non-object');\n\t}\n\n\tvar skipProto = hasProtoEnumBug && isFunction;\n\tif (isString && object.length > 0 && !has.call(object, 0)) {\n\t\tfor (var i = 0; i < object.length; ++i) {\n\t\t\ttheKeys.push(String(i));\n\t\t}\n\t}\n\n\tif (isArguments && object.length > 0) {\n\t\tfor (var j = 0; j < object.length; ++j) {\n\t\t\ttheKeys.push(String(j));\n\t\t}\n\t} else {\n\t\tfor (var name in object) {\n\t\t\tif (!(skipProto && name === 'prototype') && has.call(object, name)) {\n\t\t\t\ttheKeys.push(String(name));\n\t\t\t}\n\t\t}\n\t}\n\n\tif (hasDontEnumBug) {\n\t\tvar skipConstructor = equalsConstructorPrototypeIfNotBuggy(object);\n\n\t\tfor (var k = 0; k < dontEnums.length; ++k) {\n\t\t\tif (!(skipConstructor && dontEnums[k] === 'constructor') && has.call(object, dontEnums[k])) {\n\t\t\t\ttheKeys.push(dontEnums[k]);\n\t\t\t}\n\t\t}\n\t}\n\treturn theKeys;\n};\n\nkeysShim.shim = function shimObjectKeys() {\n\tif (Object.keys) {\n\t\tvar keysWorksWithArguments = (function () {\n\t\t\t// Safari 5.0 bug\n\t\t\treturn (Object.keys(arguments) || '').length === 2;\n\t\t}(1, 2));\n\t\tif (!keysWorksWithArguments) {\n\t\t\tvar originalKeys = Object.keys;\n\t\t\tObject.keys = function keys(object) {\n\t\t\t\tif (isArgs(object)) {\n\t\t\t\t\treturn originalKeys(slice.call(object));\n\t\t\t\t} else {\n\t\t\t\t\treturn originalKeys(object);\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} else {\n\t\tObject.keys = keysShim;\n\t}\n\treturn Object.keys || keysShim;\n};\n\nmodule.exports = keysShim;\n","module.exports = function (xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n for (var i = 0; i < xs.length; i++) {\n var x = xs[i];\n if (hasOwn.call(xs, i)) res.push(f(x, i, xs));\n }\n return res;\n};\n\nvar hasOwn = Object.prototype.hasOwnProperty;\n","import angular from 'angular'\nimport service from './service'\nimport httpDecorator from './httpDecorator'\nimport httpInterceptor from './httpInterceptor'\nimport cacheServiceAdapters from './cacheServiceAdapters'\n\nexport default angular\n .module('http-etag', [])\n .provider('httpEtag', service)\n .config(cacheServiceAdapters)\n .config(['$provide', '$httpProvider', function addHttpEtagInterceptor ($provide, $httpProvider) {\n httpDecorator.useLegacyPromiseExtensions =\n $httpProvider.useLegacyPromiseExtensions ||\n function useLegacyPromiseExtensions () { return true }\n $provide.decorator('$http', httpDecorator)\n $httpProvider.interceptors.push(httpInterceptor)\n }])\n .name\n"],"names":["httpEtagProvider","this","serviceAdapterMethods","cacheAdapterMethods","requiredAdapterMethods","concat","cacheAdapters","cacheDefinitions","defaultCacheId","defaultEtagCacheConfig","deepCopy","cacheResponseData","cacheService","cacheOptions","number","setDefaultCacheConfig","config","angular","extend","getDefaultCacheConfig","defineCache","cacheId","id","defineCacheServiceAdapter","serviceName","Error","methods","forEach","method","getCacheServiceAdapter","$get","$injector","processCacheId","type","isDefined","httpEtagService","services","adaptedServices","caches","adaptedCaches","adapter","service","window","get","adaptedService","bind","createCache","cache","getCache","adaptedCache","serviceDeepCopies","storesDeepCopies","copy","value","deepcopy","wrappedMethod","wrappedRawMethod","adapterMethod","itemKey","options","cachedData","responseData","$getItem","unsetItem","setItem","undefined","expireItem","data","etagHeader","$setItem","getItemCache","info","isCache","itemCache","methodMappings","itemCacheInfo","isItemCache","purgeCaches","removeAllItems","httpEtagHttpDecorator","$delegate","httpEtag","$httpDecorator","httpConfig","httpEtagPromiseFactory","httpPromise","then","success","cached","callback","isCachable","rawCacheData","cacheInfo","cachedResponse","successCallback","errorCallback","progressBackCallback","httpEtagSuccessWrapper","response","httpEtagErrorWrapper","thenPromise","apply","useLegacyPromiseExtensions","partializedCallback","partial","hasConfig","etagCache","isCacheableMethod","cachableHttpMethods","indexOf","etagCacheConfig","processHttpConfigEtagValue","cachedEtag","$$_itemCache","headers","If-None-Match","$http","arguments","etagValue","etagValueType","generateCacheItemKey","url","params","stringifyParams","joiner","queryString","obj","arrayMap","objectKeys","sort","key","val","isArray","val2","encodeURIComponent","join","fn","args","Array","prototype","slice","call","arg","i","length","httpMethod","toLowerCase","httpEtagInterceptorFactory","responseInterceptor","etag","cacheData","$set","cacheAdaptersConfig","$cacheFactory","put","getItem","removeItem","remove","removeAll","noop","localStorage","JSON","stringify","e","parse","keyPrefix","sessionStorage","array","s","toString","TypeError","len","exports","Object","isBuffer","Buffer","getKeys","keys","objType","resultKeys","hasOwnProperty","push","getSymbols","Symbol","getOwnPropertySymbols","target","customizer","resultValue","copyValue","copyCollection","source","String","test","Function","targetClass","constructor","Date","getTime","regexpText","slashIndex","lastIndexOf","RegExp","_polyfill","buffer","customizerResult","targetType","require$$0","defaultCustomizer","_copy","resultCollection","clone","visited","reference","recursiveCopy","index","resultCopy","result","ref","require$$1","module","toStr","str","isArgs","callee","has","isEnumerable","propertyIsEnumerable","hasDontEnumBug","hasProtoEnumBug","dontEnums","equalsConstructorPrototype","o","ctor","excludedKeys","$console","$external","$frame","$frameElement","$frames","$innerHeight","$innerWidth","$outerHeight","$outerWidth","$pageXOffset","$pageYOffset","$parent","$scrollLeft","$scrollTop","$scrollX","$scrollY","$self","$webkitIndexedDB","$webkitStorageInfo","$window","hasAutomationEqualityBug","k","equalsConstructorPrototypeIfNotBuggy","keysShim","object","isObject","isFunction","isArguments","isString","theKeys","skipProto","j","name","skipConstructor","shim","keysWorksWithArguments","originalKeys","xs","f","map","res","x","hasOwn","$inject","provider","cacheServiceAdapters","$provide","$httpProvider","httpDecorator","decorator","interceptors","httpInterceptor"],"mappings":"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"} \ No newline at end of file