angular-async-cache
Advanced tools
Comparing version 1.0.1 to 2.0.0
import { PipeTransform } from '@angular/core'; | ||
import { Observable } from 'rxjs/Observable'; | ||
import { Observable } from 'rxjs'; | ||
import { AsyncCache } from './async-cache.provider'; | ||
@@ -4,0 +4,0 @@ import { AsyncCacheOptionsInterface } from './async-cache-options.provider'; |
@@ -1,7 +0,2 @@ | ||
import { Observable } from 'rxjs/Observable'; | ||
import 'rxjs/add/observable/fromPromise'; | ||
import 'rxjs/add/observable/of'; | ||
import 'rxjs/add/observable/merge'; | ||
import 'rxjs/add/operator/map'; | ||
import 'rxjs/add/operator/mergeMap'; | ||
import { Observable } from 'rxjs'; | ||
import { AsyncCacheOptions, AsyncCacheOptionsInterface } from './async-cache-options.provider'; | ||
@@ -8,0 +3,0 @@ export declare type GetPromiseFunction = () => Promise<any>; |
@@ -1,626 +0,507 @@ | ||
/** | ||
* angular-async-cache - A simple utility to help with caching of promises and observables to enable an easy offline first approach in angular 4+ apps | ||
* @version v1.0.1 | ||
* @author Matt Lewis | ||
* @link https://github.com/mattlewis92/angular-async-cache#readme | ||
* @license MIT | ||
*/ | ||
(function webpackUniversalModuleDefinition(root, factory) { | ||
if(typeof exports === 'object' && typeof module === 'object') | ||
module.exports = factory(require("@angular/core"), require("rxjs/Observable"), require("rxjs/add/observable/fromPromise"), require("rxjs/add/observable/of"), require("rxjs/add/observable/merge"), require("rxjs/add/operator/map"), require("rxjs/add/operator/mergeMap"), require("@angular/common/http")); | ||
else if(typeof define === 'function' && define.amd) | ||
define(["@angular/core", "rxjs/Observable", "rxjs/add/observable/fromPromise", "rxjs/add/observable/of", "rxjs/add/observable/merge", "rxjs/add/operator/map", "rxjs/add/operator/mergeMap", "@angular/common/http"], factory); | ||
else if(typeof exports === 'object') | ||
exports["angularAsyncCache"] = factory(require("@angular/core"), require("rxjs/Observable"), require("rxjs/add/observable/fromPromise"), require("rxjs/add/observable/of"), require("rxjs/add/observable/merge"), require("rxjs/add/operator/map"), require("rxjs/add/operator/mergeMap"), require("@angular/common/http")); | ||
else | ||
root["angularAsyncCache"] = factory(root["ng"]["core"], root["Rx"], root["Rx"], root["Rx"], root["Rx"], root["Rx"], root["Rx"], root["ng"]["commonHttp"]); | ||
})(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_8__, __WEBPACK_EXTERNAL_MODULE_9__, __WEBPACK_EXTERNAL_MODULE_10__, __WEBPACK_EXTERNAL_MODULE_11__, __WEBPACK_EXTERNAL_MODULE_12__, __WEBPACK_EXTERNAL_MODULE_13__, __WEBPACK_EXTERNAL_MODULE_20__) { | ||
return /******/ (function(modules) { // webpackBootstrap | ||
/******/ // The module cache | ||
/******/ var installedModules = {}; | ||
/******/ | ||
/******/ // The require function | ||
/******/ function __webpack_require__(moduleId) { | ||
/******/ | ||
/******/ // Check if module is in cache | ||
/******/ if(installedModules[moduleId]) { | ||
/******/ return installedModules[moduleId].exports; | ||
/******/ } | ||
/******/ // Create a new module (and put it into the cache) | ||
/******/ var module = installedModules[moduleId] = { | ||
/******/ i: moduleId, | ||
/******/ l: false, | ||
/******/ exports: {} | ||
/******/ }; | ||
/******/ | ||
/******/ // Execute the module function | ||
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); | ||
/******/ | ||
/******/ // Flag the module as loaded | ||
/******/ module.l = true; | ||
/******/ | ||
/******/ // Return the exports of the module | ||
/******/ return module.exports; | ||
/******/ } | ||
/******/ | ||
/******/ | ||
/******/ // expose the modules object (__webpack_modules__) | ||
/******/ __webpack_require__.m = modules; | ||
/******/ | ||
/******/ // expose the module cache | ||
/******/ __webpack_require__.c = installedModules; | ||
/******/ | ||
/******/ // define getter function for harmony exports | ||
/******/ __webpack_require__.d = function(exports, name, getter) { | ||
/******/ if(!__webpack_require__.o(exports, name)) { | ||
/******/ Object.defineProperty(exports, name, { | ||
/******/ configurable: false, | ||
/******/ enumerable: true, | ||
/******/ get: getter | ||
/******/ }); | ||
/******/ } | ||
/******/ }; | ||
/******/ | ||
/******/ // getDefaultExport function for compatibility with non-harmony modules | ||
/******/ __webpack_require__.n = function(module) { | ||
/******/ var getter = module && module.__esModule ? | ||
/******/ function getDefault() { return module['default']; } : | ||
/******/ function getModuleExports() { return module; }; | ||
/******/ __webpack_require__.d(getter, 'a', getter); | ||
/******/ return getter; | ||
/******/ }; | ||
/******/ | ||
/******/ // Object.prototype.hasOwnProperty.call | ||
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; | ||
/******/ | ||
/******/ // __webpack_public_path__ | ||
/******/ __webpack_require__.p = ""; | ||
/******/ | ||
/******/ // Load entry module and return exports | ||
/******/ return __webpack_require__(__webpack_require__.s = 6); | ||
/******/ }) | ||
/************************************************************************/ | ||
/******/ ([ | ||
/* 0 */ | ||
/***/ (function(module, exports) { | ||
(function (global, factory) { | ||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('tslib'), require('@angular/core'), require('rxjs'), require('rxjs/operators'), require('@angular/common/http')) : | ||
typeof define === 'function' && define.amd ? define('angular-async-cache', ['exports', 'tslib', '@angular/core', 'rxjs', 'rxjs/operators', '@angular/common/http'], factory) : | ||
(factory((global['angular-async-cache'] = {}),global.tslib,global.ng.core,null,global.Rx.Observable.prototype,global.ng.common.http)); | ||
}(this, (function (exports,tslib_1,core,rxjs,operators,http) { 'use strict'; | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_0__; | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
var /** @type {?} */ DEFAULT_KEY_PREFIX = 'async-cache-'; | ||
var LocalStorageDriver = (function () { | ||
function LocalStorageDriver(options) { | ||
if (options === void 0) { | ||
options = { keyPrefix: DEFAULT_KEY_PREFIX }; | ||
} | ||
this.options = options; | ||
} | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.has = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return localStorage.hasOwnProperty(this.getInternalKey(key)); | ||
}; | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.get = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return JSON.parse(localStorage.getItem(this.getInternalKey(key))); | ||
}; | ||
/** | ||
* @param {?} key | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.set = /** | ||
* @param {?} key | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
function (key, value) { | ||
return localStorage.setItem(this.getInternalKey(key), JSON.stringify(value)); | ||
}; | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.delete = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return localStorage.removeItem(this.getInternalKey(key)); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.clear = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
try { | ||
for (var _a = tslib_1.__values(this.keys()), _b = _a.next(); !_b.done; _b = _a.next()) { | ||
var key = _b.value; | ||
this.delete(key); | ||
} | ||
} | ||
catch (e_1_1) { | ||
e_1 = { error: e_1_1 }; | ||
} | ||
finally { | ||
try { | ||
if (_b && !_b.done && (_c = _a.return)) | ||
_c.call(_a); | ||
} | ||
finally { | ||
if (e_1) | ||
throw e_1.error; | ||
} | ||
} | ||
return; | ||
var e_1, _c; | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.keys = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
var _this = this; | ||
var /** @type {?} */ keys = []; | ||
for (var /** @type {?} */ i = 0; i < localStorage.length; i++) { | ||
keys.push(localStorage.key(i)); | ||
} | ||
return keys | ||
.filter(function (key) { return key.startsWith(_this.options.keyPrefix); }) | ||
.map(function (key) { return _this.getExternalKey(key); }); | ||
}; | ||
/** | ||
* @param {?} suffix | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.getInternalKey = /** | ||
* @param {?} suffix | ||
* @return {?} | ||
*/ | ||
function (suffix) { | ||
return "" + this.options.keyPrefix + suffix; | ||
}; | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
LocalStorageDriver.prototype.getExternalKey = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return key.replace(new RegExp('^' + this.options.keyPrefix), ''); | ||
}; | ||
return LocalStorageDriver; | ||
}()); | ||
/***/ }), | ||
/* 1 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
var /** @type {?} */ cacheKey = Symbol('cache key'); | ||
var MemoryDriver = (function () { | ||
function MemoryDriver() { | ||
this[cacheKey] = new Map(); | ||
} | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
MemoryDriver.prototype.has = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return this[cacheKey].has(key); | ||
}; | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
MemoryDriver.prototype.get = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return this[cacheKey].get(key); | ||
}; | ||
/** | ||
* @param {?} key | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
MemoryDriver.prototype.set = /** | ||
* @param {?} key | ||
* @param {?} value | ||
* @return {?} | ||
*/ | ||
function (key, value) { | ||
return this[cacheKey].set(key, value); | ||
}; | ||
/** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
MemoryDriver.prototype.delete = /** | ||
* @param {?} key | ||
* @return {?} | ||
*/ | ||
function (key) { | ||
return this[cacheKey].delete(key); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
MemoryDriver.prototype.clear = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
return this[cacheKey].clear(); | ||
}; | ||
/** | ||
* @return {?} | ||
*/ | ||
MemoryDriver.prototype.keys = /** | ||
* @return {?} | ||
*/ | ||
function () { | ||
return Array.from(this[cacheKey].keys()); | ||
}; | ||
return MemoryDriver; | ||
}()); | ||
"use strict"; | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
var AsyncCacheOptions = (function () { | ||
function AsyncCacheOptions(overrides) { | ||
if (overrides === void 0) { | ||
overrides = {}; | ||
} | ||
this.driver = new MemoryDriver(); | ||
this.fromCacheAndReplay = false; | ||
Object.assign(this, overrides); | ||
} | ||
return AsyncCacheOptions; | ||
}()); | ||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | ||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | ||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | ||
return c > 3 && r && Object.defineProperty(target, key, r), r; | ||
}; | ||
var __metadata = (this && this.__metadata) || function (k, v) { | ||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var core_1 = __webpack_require__(0); | ||
var Observable_1 = __webpack_require__(8); | ||
__webpack_require__(9); | ||
__webpack_require__(10); | ||
__webpack_require__(11); | ||
__webpack_require__(12); | ||
__webpack_require__(13); | ||
var symbol_observable_1 = __webpack_require__(14); | ||
var async_cache_options_provider_1 = __webpack_require__(3); | ||
var isPromise = function (fn) { return fn && typeof fn.then === 'function' && typeof fn.catch === 'function'; }; | ||
var isObservable = function (fn) { return fn && fn[symbol_observable_1.default]; }; | ||
var anyToObservable = function (fn) { | ||
if (isObservable(fn)) { | ||
return fn; | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
/** | ||
* @param {?} fn | ||
* @return {?} | ||
*/ | ||
function isPromise(fn) { | ||
return fn && typeof fn.then === 'function' && typeof fn.catch === 'function'; | ||
} | ||
else if (isPromise(fn)) { | ||
return Observable_1.Observable.fromPromise(fn); | ||
} | ||
else { | ||
return Observable_1.Observable.of(fn); | ||
} | ||
}; | ||
var AsyncCache = (function () { | ||
function AsyncCache(defaults) { | ||
this.defaults = defaults; | ||
} | ||
AsyncCache.prototype.wrap = function (value, cacheKey, userOptions) { | ||
if (userOptions === void 0) { userOptions = {}; } | ||
var getAsyncValue; | ||
var options = Object.assign({}, this.defaults, userOptions); | ||
if (isObservable(value)) { | ||
getAsyncValue = value; | ||
/** | ||
* @param {?} fn | ||
* @return {?} | ||
*/ | ||
function anyToObservable(fn) { | ||
if (rxjs.isObservable(fn)) { | ||
return fn; | ||
} | ||
else if (typeof value === 'function') { | ||
getAsyncValue = Observable_1.Observable.create(function (observer) { | ||
var promise = value(); | ||
if (!isPromise(promise)) { | ||
return observer.error('The function you passed to the async cache didn\'t return a promise'); | ||
} | ||
promise.then(function (result) { | ||
observer.next(result); | ||
observer.complete(); | ||
}).catch(function (err) { | ||
observer.error(err); | ||
}); | ||
}); | ||
else if (isPromise(fn)) { | ||
return rxjs.from(fn); | ||
} | ||
else { | ||
throw new Error('Value can only be an observable or a function that returns a promise'); | ||
return rxjs.of(fn); | ||
} | ||
return anyToObservable(options.driver.has(cacheKey)).flatMap(function (existsInCache) { | ||
var cacheAndReturnAsyncValue = function () { return getAsyncValue.flatMap(function (value) { | ||
return anyToObservable(options.driver.set(cacheKey, value)).map(function () { return value; }); | ||
}); }; | ||
if (existsInCache && !options.bypassCache) { | ||
var getCachedValue = anyToObservable(options.driver.get(cacheKey)); | ||
if (options.fromCacheAndReplay) { | ||
return Observable_1.Observable.merge(getCachedValue, cacheAndReturnAsyncValue()); | ||
} | ||
var AsyncCache = (function () { | ||
function AsyncCache(defaults) { | ||
this.defaults = defaults; | ||
} | ||
/** | ||
* @param {?} value | ||
* @param {?} cacheKey | ||
* @param {?=} userOptions | ||
* @return {?} | ||
*/ | ||
AsyncCache.prototype.wrap = /** | ||
* @param {?} value | ||
* @param {?} cacheKey | ||
* @param {?=} userOptions | ||
* @return {?} | ||
*/ | ||
function (value, cacheKey, userOptions) { | ||
if (userOptions === void 0) { | ||
userOptions = {}; | ||
} | ||
var /** @type {?} */ getAsyncValue; | ||
var /** @type {?} */ options = Object.assign({}, this.defaults, userOptions); | ||
if (rxjs.isObservable(value)) { | ||
getAsyncValue = /** @type {?} */ (value); | ||
} | ||
else if (typeof value === 'function') { | ||
getAsyncValue = rxjs.Observable.create(function (observer) { | ||
var /** @type {?} */ promise = value(); | ||
if (!isPromise(promise)) { | ||
return observer.error("The function you passed to the async cache didn't return a promise"); | ||
} | ||
promise | ||
.then(function (result) { | ||
observer.next(result); | ||
observer.complete(); | ||
}) | ||
.catch(function (err) { | ||
observer.error(err); | ||
}); | ||
}); | ||
} | ||
else { | ||
return getCachedValue; | ||
throw new Error('Value can only be an observable or a function that returns a promise'); | ||
} | ||
} | ||
else { | ||
return cacheAndReturnAsyncValue(); | ||
} | ||
}); | ||
}; | ||
AsyncCache = __decorate([ | ||
core_1.Injectable(), | ||
__metadata("design:paramtypes", [async_cache_options_provider_1.AsyncCacheOptions]) | ||
], AsyncCache); | ||
return AsyncCache; | ||
}()); | ||
exports.AsyncCache = AsyncCache; | ||
return anyToObservable(options.driver.has(cacheKey)).pipe(operators.mergeMap(function (existsInCache) { | ||
var /** @type {?} */ cacheAndReturnAsyncValue = function () { | ||
return getAsyncValue.pipe(operators.mergeMap(function (asyncValue) { | ||
return anyToObservable(options.driver.set(cacheKey, asyncValue)).pipe(operators.map(function () { return asyncValue; })); | ||
})); | ||
}; | ||
if (existsInCache && !options.bypassCache) { | ||
var /** @type {?} */ getCachedValue = anyToObservable(options.driver.get(cacheKey)); | ||
if (options.fromCacheAndReplay) { | ||
return rxjs.merge(getCachedValue, cacheAndReturnAsyncValue()); | ||
} | ||
else { | ||
return getCachedValue; | ||
} | ||
} | ||
else { | ||
return cacheAndReturnAsyncValue(); | ||
} | ||
})); | ||
}; | ||
AsyncCache.decorators = [ | ||
{ type: core.Injectable }, | ||
]; | ||
/** @nocollapse */ | ||
AsyncCache.ctorParameters = function () { | ||
return [ | ||
{ type: AsyncCacheOptions, }, | ||
]; | ||
}; | ||
return AsyncCache; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
var AsyncCachePipe = (function () { | ||
function AsyncCachePipe(asyncCache) { | ||
this.asyncCache = asyncCache; | ||
} | ||
/** | ||
* @param {?} value | ||
* @param {?} cacheKey | ||
* @param {?=} options | ||
* @return {?} | ||
*/ | ||
AsyncCachePipe.prototype.transform = /** | ||
* @param {?} value | ||
* @param {?} cacheKey | ||
* @param {?=} options | ||
* @return {?} | ||
*/ | ||
function (value, cacheKey, options) { | ||
return this.asyncCache.wrap(value, cacheKey, options); | ||
}; | ||
AsyncCachePipe.decorators = [ | ||
{ type: core.Pipe, args: [{ | ||
name: 'asyncCache' // tslint:disable-line pipe-naming | ||
},] }, | ||
]; | ||
/** @nocollapse */ | ||
AsyncCachePipe.ctorParameters = function () { | ||
return [ | ||
{ type: AsyncCache, }, | ||
]; | ||
}; | ||
return AsyncCachePipe; | ||
}()); | ||
/***/ }), | ||
/* 2 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
var CachedHttp = (function () { | ||
function CachedHttp(http$$1, asyncCache) { | ||
this.http = http$$1; | ||
this.asyncCache = asyncCache; | ||
} | ||
/** | ||
* @param {?} url | ||
* @param {?=} options | ||
* @param {?=} asyncCacheOptions | ||
* @return {?} | ||
*/ | ||
CachedHttp.prototype.get = /** | ||
* @param {?} url | ||
* @param {?=} options | ||
* @param {?=} asyncCacheOptions | ||
* @return {?} | ||
*/ | ||
function (url, options, asyncCacheOptions) { | ||
var /** @type {?} */ result$ = this.http.get(url, options); | ||
var /** @type {?} */ cacheKey = url; | ||
if (options && options.params) { | ||
cacheKey += '?' + options.params.toString(); | ||
} | ||
return this.asyncCache.wrap(result$, cacheKey, asyncCacheOptions); | ||
}; | ||
CachedHttp.decorators = [ | ||
{ type: core.Injectable }, | ||
]; | ||
/** @nocollapse */ | ||
CachedHttp.ctorParameters = function () { | ||
return [ | ||
{ type: http.HttpClient, }, | ||
{ type: AsyncCache, }, | ||
]; | ||
}; | ||
return CachedHttp; | ||
}()); | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var cacheKey = Symbol('cache key'); | ||
var MemoryDriver = (function () { | ||
function MemoryDriver() { | ||
this[cacheKey] = new Map(); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
/** | ||
* @param {?} options | ||
* @return {?} | ||
*/ | ||
function memoryDriverFactory(options) { | ||
return options.driver instanceof MemoryDriver | ||
? options.driver | ||
: new MemoryDriver(); | ||
} | ||
MemoryDriver.prototype.has = function (key) { | ||
return this[cacheKey].has(key); | ||
}; | ||
MemoryDriver.prototype.get = function (key) { | ||
return this[cacheKey].get(key); | ||
}; | ||
MemoryDriver.prototype.set = function (key, value) { | ||
return this[cacheKey].set(key, value); | ||
}; | ||
MemoryDriver.prototype.delete = function (key) { | ||
return this[cacheKey].delete(key); | ||
}; | ||
MemoryDriver.prototype.clear = function () { | ||
return this[cacheKey].clear(); | ||
}; | ||
MemoryDriver.prototype.keys = function () { | ||
return Array.from(this[cacheKey].keys()); | ||
}; | ||
return MemoryDriver; | ||
}()); | ||
exports.MemoryDriver = MemoryDriver; | ||
/***/ }), | ||
/* 3 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var memory_driver_provider_1 = __webpack_require__(2); | ||
var AsyncCacheOptions = (function () { | ||
function AsyncCacheOptions(overrides) { | ||
if (overrides === void 0) { overrides = {}; } | ||
this.driver = new memory_driver_provider_1.MemoryDriver(); | ||
this.fromCacheAndReplay = false; | ||
Object.assign(this, overrides); | ||
/** | ||
* @param {?} options | ||
* @return {?} | ||
*/ | ||
function localStorageDriverFactory(options) { | ||
return options.driver instanceof LocalStorageDriver | ||
? ((options.driver)) | ||
: new LocalStorageDriver(); | ||
} | ||
return AsyncCacheOptions; | ||
}()); | ||
exports.AsyncCacheOptions = AsyncCacheOptions; | ||
/***/ }), | ||
/* 4 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var DEFAULT_KEY_PREFIX = 'async-cache-'; | ||
var LocalStorageDriver = (function () { | ||
function LocalStorageDriver(options) { | ||
if (options === void 0) { options = { keyPrefix: DEFAULT_KEY_PREFIX }; } | ||
this.options = options; | ||
/** | ||
* @return {?} | ||
*/ | ||
function cacheOptionFactory() { | ||
return new AsyncCacheOptions(); | ||
} | ||
LocalStorageDriver.prototype.has = function (key) { | ||
return localStorage.hasOwnProperty(this.getInternalKey(key)); | ||
}; | ||
LocalStorageDriver.prototype.get = function (key) { | ||
return JSON.parse(localStorage.getItem(this.getInternalKey(key))); | ||
}; | ||
LocalStorageDriver.prototype.set = function (key, value) { | ||
return localStorage.setItem(this.getInternalKey(key), JSON.stringify(value)); | ||
}; | ||
LocalStorageDriver.prototype.delete = function (key) { | ||
return localStorage.removeItem(this.getInternalKey(key)); | ||
}; | ||
LocalStorageDriver.prototype.clear = function () { | ||
for (var _i = 0, _a = this.keys(); _i < _a.length; _i++) { | ||
var key = _a[_i]; | ||
this.delete(key); | ||
var AsyncCacheModule = (function () { | ||
function AsyncCacheModule() { | ||
} | ||
return; | ||
}; | ||
LocalStorageDriver.prototype.keys = function () { | ||
var _this = this; | ||
var keys = []; | ||
for (var i = 0; i < localStorage.length; i++) { | ||
keys.push(localStorage.key(i)); | ||
} | ||
return keys.filter(function (key) { return key.startsWith(_this.options.keyPrefix); }).map(function (key) { return _this.getExternalKey(key); }); | ||
}; | ||
LocalStorageDriver.prototype.getInternalKey = function (suffix) { | ||
return "" + this.options.keyPrefix + suffix; | ||
}; | ||
LocalStorageDriver.prototype.getExternalKey = function (key) { | ||
return key.replace(new RegExp('^' + this.options.keyPrefix), ''); | ||
}; | ||
return LocalStorageDriver; | ||
}()); | ||
exports.LocalStorageDriver = LocalStorageDriver; | ||
/** | ||
* @param {?=} cacheOptions | ||
* @return {?} | ||
*/ | ||
AsyncCacheModule.forRoot = /** | ||
* @param {?=} cacheOptions | ||
* @return {?} | ||
*/ | ||
function (cacheOptions) { | ||
if (cacheOptions === void 0) { | ||
cacheOptions = { | ||
provide: AsyncCacheOptions, | ||
useFactory: cacheOptionFactory | ||
}; | ||
} | ||
return { | ||
ngModule: AsyncCacheModule, | ||
providers: [ | ||
{ | ||
provide: LocalStorageDriver, | ||
useFactory: localStorageDriverFactory, | ||
deps: [AsyncCacheOptions] | ||
}, | ||
{ | ||
provide: MemoryDriver, | ||
useFactory: memoryDriverFactory, | ||
deps: [AsyncCacheOptions] | ||
}, | ||
cacheOptions, | ||
AsyncCache, | ||
CachedHttp | ||
] | ||
}; | ||
}; | ||
AsyncCacheModule.decorators = [ | ||
{ type: core.NgModule, args: [{ | ||
declarations: [AsyncCachePipe], | ||
exports: [AsyncCachePipe] | ||
},] }, | ||
]; | ||
return AsyncCacheModule; | ||
}()); | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
/***/ }), | ||
/* 5 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
/** | ||
* @fileoverview added by tsickle | ||
* @suppress {checkTypes} checked by tsc | ||
*/ | ||
"use strict"; | ||
exports.AsyncCacheOptions = AsyncCacheOptions; | ||
exports.memoryDriverFactory = memoryDriverFactory; | ||
exports.localStorageDriverFactory = localStorageDriverFactory; | ||
exports.cacheOptionFactory = cacheOptionFactory; | ||
exports.AsyncCacheModule = AsyncCacheModule; | ||
exports.LocalStorageDriver = LocalStorageDriver; | ||
exports.MemoryDriver = MemoryDriver; | ||
exports.AsyncCache = AsyncCache; | ||
exports.CachedHttp = CachedHttp; | ||
exports.ɵa = AsyncCachePipe; | ||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | ||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | ||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | ||
return c > 3 && r && Object.defineProperty(target, key, r), r; | ||
}; | ||
var __metadata = (this && this.__metadata) || function (k, v) { | ||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var core_1 = __webpack_require__(0); | ||
var http_1 = __webpack_require__(20); | ||
var async_cache_provider_1 = __webpack_require__(1); | ||
var CachedHttp = (function () { | ||
function CachedHttp(http, asyncCache) { | ||
this.http = http; | ||
this.asyncCache = asyncCache; | ||
} | ||
CachedHttp.prototype.get = function (url, options, asyncCacheOptions) { | ||
var result$ = this.http.get(url, options); | ||
var cacheKey = url; | ||
if (options && options.params) { | ||
cacheKey += '?' + options.params.toString(); | ||
} | ||
return this.asyncCache.wrap(result$, cacheKey, asyncCacheOptions); | ||
}; | ||
CachedHttp = __decorate([ | ||
core_1.Injectable(), | ||
__metadata("design:paramtypes", [http_1.HttpClient, async_cache_provider_1.AsyncCache]) | ||
], CachedHttp); | ||
return CachedHttp; | ||
}()); | ||
exports.CachedHttp = CachedHttp; | ||
Object.defineProperty(exports, '__esModule', { value: true }); | ||
}))); | ||
/***/ }), | ||
/* 6 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
function __export(m) { | ||
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; | ||
} | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
__export(__webpack_require__(7)); | ||
__export(__webpack_require__(4)); | ||
__export(__webpack_require__(2)); | ||
var async_cache_options_provider_1 = __webpack_require__(3); | ||
exports.AsyncCacheOptions = async_cache_options_provider_1.AsyncCacheOptions; | ||
__export(__webpack_require__(1)); | ||
__export(__webpack_require__(5)); | ||
/***/ }), | ||
/* 7 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | ||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | ||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | ||
return c > 3 && r && Object.defineProperty(target, key, r), r; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var core_1 = __webpack_require__(0); | ||
var local_storage_driver_provider_1 = __webpack_require__(4); | ||
var memory_driver_provider_1 = __webpack_require__(2); | ||
var async_cache_options_provider_1 = __webpack_require__(3); | ||
var async_cache_provider_1 = __webpack_require__(1); | ||
var async_cache_pipe_1 = __webpack_require__(19); | ||
var cached_http_provider_1 = __webpack_require__(5); | ||
function memoryDriverFactory(options) { | ||
return options.driver instanceof memory_driver_provider_1.MemoryDriver ? options.driver : new memory_driver_provider_1.MemoryDriver(); | ||
} | ||
exports.memoryDriverFactory = memoryDriverFactory; | ||
function localStorageDriverFactory(options) { | ||
return options.driver instanceof local_storage_driver_provider_1.LocalStorageDriver ? options.driver : new local_storage_driver_provider_1.LocalStorageDriver(); | ||
} | ||
exports.localStorageDriverFactory = localStorageDriverFactory; | ||
function cacheOptionFactory() { | ||
return new async_cache_options_provider_1.AsyncCacheOptions(); | ||
} | ||
exports.cacheOptionFactory = cacheOptionFactory; | ||
var AsyncCacheModule = (function () { | ||
function AsyncCacheModule() { | ||
} | ||
AsyncCacheModule_1 = AsyncCacheModule; | ||
AsyncCacheModule.forRoot = function (cacheOptions) { | ||
if (cacheOptions === void 0) { cacheOptions = { | ||
provide: async_cache_options_provider_1.AsyncCacheOptions, | ||
useFactory: cacheOptionFactory | ||
}; } | ||
return { | ||
ngModule: AsyncCacheModule_1, | ||
providers: [{ | ||
provide: local_storage_driver_provider_1.LocalStorageDriver, | ||
useFactory: localStorageDriverFactory, | ||
deps: [async_cache_options_provider_1.AsyncCacheOptions] | ||
}, { | ||
provide: memory_driver_provider_1.MemoryDriver, | ||
useFactory: memoryDriverFactory, | ||
deps: [async_cache_options_provider_1.AsyncCacheOptions] | ||
}, | ||
cacheOptions, | ||
async_cache_provider_1.AsyncCache, | ||
cached_http_provider_1.CachedHttp | ||
] | ||
}; | ||
}; | ||
AsyncCacheModule = AsyncCacheModule_1 = __decorate([ | ||
core_1.NgModule({ | ||
declarations: [async_cache_pipe_1.AsyncCachePipe], | ||
exports: [async_cache_pipe_1.AsyncCachePipe] | ||
}) | ||
], AsyncCacheModule); | ||
return AsyncCacheModule; | ||
var AsyncCacheModule_1; | ||
}()); | ||
exports.AsyncCacheModule = AsyncCacheModule; | ||
/***/ }), | ||
/* 8 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_8__; | ||
/***/ }), | ||
/* 9 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_9__; | ||
/***/ }), | ||
/* 10 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_10__; | ||
/***/ }), | ||
/* 11 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_11__; | ||
/***/ }), | ||
/* 12 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_12__; | ||
/***/ }), | ||
/* 13 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_13__; | ||
/***/ }), | ||
/* 14 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
module.exports = __webpack_require__(15); | ||
/***/ }), | ||
/* 15 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
/* WEBPACK VAR INJECTION */(function(global, module) { | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
var _ponyfill = __webpack_require__(18); | ||
var _ponyfill2 = _interopRequireDefault(_ponyfill); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } | ||
var root; /* global window */ | ||
if (typeof self !== 'undefined') { | ||
root = self; | ||
} else if (typeof window !== 'undefined') { | ||
root = window; | ||
} else if (typeof global !== 'undefined') { | ||
root = global; | ||
} else if (true) { | ||
root = module; | ||
} else { | ||
root = Function('return this')(); | ||
} | ||
var result = (0, _ponyfill2['default'])(root); | ||
exports['default'] = result; | ||
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(16), __webpack_require__(17)(module))) | ||
/***/ }), | ||
/* 16 */ | ||
/***/ (function(module, exports) { | ||
var g; | ||
// This works in non-strict mode | ||
g = (function() { | ||
return this; | ||
})(); | ||
try { | ||
// This works if eval is allowed (see CSP) | ||
g = g || Function("return this")() || (1,eval)("this"); | ||
} catch(e) { | ||
// This works if the window reference is available | ||
if(typeof window === "object") | ||
g = window; | ||
} | ||
// g can still be undefined, but nothing to do about it... | ||
// We return undefined, instead of nothing here, so it's | ||
// easier to handle this case. if(!global) { ...} | ||
module.exports = g; | ||
/***/ }), | ||
/* 17 */ | ||
/***/ (function(module, exports) { | ||
module.exports = function(module) { | ||
if(!module.webpackPolyfill) { | ||
module.deprecate = function() {}; | ||
module.paths = []; | ||
// module.parent = undefined by default | ||
if(!module.children) module.children = []; | ||
Object.defineProperty(module, "loaded", { | ||
enumerable: true, | ||
get: function() { | ||
return module.l; | ||
} | ||
}); | ||
Object.defineProperty(module, "id", { | ||
enumerable: true, | ||
get: function() { | ||
return module.i; | ||
} | ||
}); | ||
module.webpackPolyfill = 1; | ||
} | ||
return module; | ||
}; | ||
/***/ }), | ||
/* 18 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
Object.defineProperty(exports, "__esModule", { | ||
value: true | ||
}); | ||
exports['default'] = symbolObservablePonyfill; | ||
function symbolObservablePonyfill(root) { | ||
var result; | ||
var _Symbol = root.Symbol; | ||
if (typeof _Symbol === 'function') { | ||
if (_Symbol.observable) { | ||
result = _Symbol.observable; | ||
} else { | ||
result = _Symbol('observable'); | ||
_Symbol.observable = result; | ||
} | ||
} else { | ||
result = '@@observable'; | ||
} | ||
return result; | ||
}; | ||
/***/ }), | ||
/* 19 */ | ||
/***/ (function(module, exports, __webpack_require__) { | ||
"use strict"; | ||
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { | ||
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; | ||
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); | ||
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; | ||
return c > 3 && r && Object.defineProperty(target, key, r), r; | ||
}; | ||
var __metadata = (this && this.__metadata) || function (k, v) { | ||
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var core_1 = __webpack_require__(0); | ||
var async_cache_provider_1 = __webpack_require__(1); | ||
var AsyncCachePipe = (function () { | ||
function AsyncCachePipe(asyncCache) { | ||
this.asyncCache = asyncCache; | ||
} | ||
AsyncCachePipe.prototype.transform = function (value, cacheKey, options) { | ||
return this.asyncCache.wrap(value, cacheKey, options); | ||
}; | ||
AsyncCachePipe = __decorate([ | ||
core_1.Pipe({ | ||
name: 'asyncCache' | ||
}), | ||
__metadata("design:paramtypes", [async_cache_provider_1.AsyncCache]) | ||
], AsyncCachePipe); | ||
return AsyncCachePipe; | ||
}()); | ||
exports.AsyncCachePipe = AsyncCachePipe; | ||
/***/ }), | ||
/* 20 */ | ||
/***/ (function(module, exports) { | ||
module.exports = __WEBPACK_EXTERNAL_MODULE_20__; | ||
/***/ }) | ||
/******/ ]); | ||
}); | ||
//# sourceMappingURL=angular-async-cache.umd.js.map | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1hc3luYy1jYWNoZS51bWQuanMubWFwIiwic291cmNlcyI6WyJuZzovL2FuZ3VsYXItYXN5bmMtY2FjaGUvZHJpdmVycy9sb2NhbC1zdG9yYWdlLWRyaXZlci5wcm92aWRlci50cyIsIm5nOi8vYW5ndWxhci1hc3luYy1jYWNoZS9kcml2ZXJzL21lbW9yeS1kcml2ZXIucHJvdmlkZXIudHMiLCJuZzovL2FuZ3VsYXItYXN5bmMtY2FjaGUvYXN5bmMtY2FjaGUtb3B0aW9ucy5wcm92aWRlci50cyIsIm5nOi8vYW5ndWxhci1hc3luYy1jYWNoZS9hc3luYy1jYWNoZS5wcm92aWRlci50cyIsIm5nOi8vYW5ndWxhci1hc3luYy1jYWNoZS9hc3luYy1jYWNoZS5waXBlLnRzIiwibmc6Ly9hbmd1bGFyLWFzeW5jLWNhY2hlL2NhY2hlZC1odHRwLnByb3ZpZGVyLnRzIiwibmc6Ly9hbmd1bGFyLWFzeW5jLWNhY2hlL2FzeW5jLWNhY2hlLm1vZHVsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYWNoZURyaXZlciwgQXN5bmNWYWx1ZSB9IGZyb20gJy4vY2FjaGUtZHJpdmVyLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9jYWxTdG9yYWdlT3B0aW9ucyB7XG4gIGtleVByZWZpeDogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX0tFWV9QUkVGSVggPSAnYXN5bmMtY2FjaGUtJztcblxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZURyaXZlciBpbXBsZW1lbnRzIENhY2hlRHJpdmVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBvcHRpb25zOiBMb2NhbFN0b3JhZ2VPcHRpb25zID0geyBrZXlQcmVmaXg6IERFRkFVTFRfS0VZX1BSRUZJWCB9XG4gICkge31cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBBc3luY1ZhbHVlIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmhhc093blByb3BlcnR5KHRoaXMuZ2V0SW50ZXJuYWxLZXkoa2V5KSk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBBc3luY1ZhbHVlIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmdldEludGVybmFsS2V5KGtleSkpKTtcbiAgfVxuXG4gIHNldChrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IEFzeW5jVmFsdWUge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcbiAgICAgIHRoaXMuZ2V0SW50ZXJuYWxLZXkoa2V5KSxcbiAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgICk7XG4gIH1cblxuICBkZWxldGUoa2V5OiBzdHJpbmcpOiBBc3luY1ZhbHVlIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5nZXRJbnRlcm5hbEtleShrZXkpKTtcbiAgfVxuXG4gIGNsZWFyKCk6IEFzeW5jVmFsdWUge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHRoaXMua2V5cygpKSB7XG4gICAgICB0aGlzLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBrZXlzKCk6IEFzeW5jVmFsdWUge1xuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2NhbFN0b3JhZ2UubGVuZ3RoOyBpKyspIHtcbiAgICAgIGtleXMucHVzaChsb2NhbFN0b3JhZ2Uua2V5KGkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKHRoaXMub3B0aW9ucy5rZXlQcmVmaXgpKVxuICAgICAgLm1hcChrZXkgPT4gdGhpcy5nZXRFeHRlcm5hbEtleShrZXkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0SW50ZXJuYWxLZXkoc3VmZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLm9wdGlvbnMua2V5UHJlZml4fSR7c3VmZml4fWA7XG4gIH1cblxuICBwcml2YXRlIGdldEV4dGVybmFsS2V5KGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cCgnXicgKyB0aGlzLm9wdGlvbnMua2V5UHJlZml4KSwgJycpO1xuICB9XG59XG4iLCJpbXBvcnQgeyBDYWNoZURyaXZlciwgQXN5bmNWYWx1ZSB9IGZyb20gJy4vY2FjaGUtZHJpdmVyLmludGVyZmFjZSc7XG5cbmNvbnN0IGNhY2hlS2V5OiBhbnkgPSBTeW1ib2woJ2NhY2hlIGtleScpO1xuXG5leHBvcnQgY2xhc3MgTWVtb3J5RHJpdmVyIGltcGxlbWVudHMgQ2FjaGVEcml2ZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzW2NhY2hlS2V5XSA9IG5ldyBNYXA8c3RyaW5nLCBhbnk+KCk7XG4gIH1cblxuICBoYXMoa2V5OiBzdHJpbmcpOiBBc3luY1ZhbHVlIHtcbiAgICByZXR1cm4gdGhpc1tjYWNoZUtleV0uaGFzKGtleSk7XG4gIH1cblxuICBnZXQoa2V5OiBzdHJpbmcpOiBBc3luY1ZhbHVlIHtcbiAgICByZXR1cm4gdGhpc1tjYWNoZUtleV0uZ2V0KGtleSk7XG4gIH1cblxuICBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBBc3luY1ZhbHVlIHtcbiAgICByZXR1cm4gdGhpc1tjYWNoZUtleV0uc2V0KGtleSwgdmFsdWUpO1xuICB9XG5cbiAgZGVsZXRlKGtleTogc3RyaW5nKTogQXN5bmNWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXNbY2FjaGVLZXldLmRlbGV0ZShrZXkpO1xuICB9XG5cbiAgY2xlYXIoKTogQXN5bmNWYWx1ZSB7XG4gICAgcmV0dXJuIHRoaXNbY2FjaGVLZXldLmNsZWFyKCk7XG4gIH1cblxuICBrZXlzKCk6IEFzeW5jVmFsdWUge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXNbY2FjaGVLZXldLmtleXMoKSk7XG4gIH1cbn1cbiIsImltcG9ydCB7IENhY2hlRHJpdmVyIH0gZnJvbSAnLi9kcml2ZXJzL2NhY2hlLWRyaXZlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTWVtb3J5RHJpdmVyIH0gZnJvbSAnLi9kcml2ZXJzL21lbW9yeS1kcml2ZXIucHJvdmlkZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFzeW5jQ2FjaGVPcHRpb25zSW50ZXJmYWNlIHtcbiAgZHJpdmVyPzogQ2FjaGVEcml2ZXI7XG5cbiAgZnJvbUNhY2hlQW5kUmVwbGF5PzogYm9vbGVhbjtcblxuICBieXBhc3NDYWNoZT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBBc3luY0NhY2hlT3B0aW9ucyBpbXBsZW1lbnRzIEFzeW5jQ2FjaGVPcHRpb25zSW50ZXJmYWNlIHtcbiAgZHJpdmVyOiBDYWNoZURyaXZlciA9IG5ldyBNZW1vcnlEcml2ZXIoKTtcblxuICBmcm9tQ2FjaGVBbmRSZXBsYXkgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihvdmVycmlkZXM6IEFzeW5jQ2FjaGVPcHRpb25zSW50ZXJmYWNlID0ge30pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIG92ZXJyaWRlcyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmVyLCBPYnNlcnZhYmxlLCBpc09ic2VydmFibGUsIGZyb20sIG9mLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFzeW5jQ2FjaGVPcHRpb25zLFxuICBBc3luY0NhY2hlT3B0aW9uc0ludGVyZmFjZVxufSBmcm9tICcuL2FzeW5jLWNhY2hlLW9wdGlvbnMucHJvdmlkZXInO1xuXG5leHBvcnQgdHlwZSBHZXRQcm9taXNlRnVuY3Rpb24gPSAoKSA9PiBQcm9taXNlPGFueT47XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShmbjogYW55KSB7XG4gIHJldHVybiBmbiAmJiB0eXBlb2YgZm4udGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZm4uY2F0Y2ggPT09ICdmdW5jdGlvbic7XG59XG5cbmZ1bmN0aW9uIGFueVRvT2JzZXJ2YWJsZShmbjogYW55KSB7XG4gIGlmIChpc09ic2VydmFibGUoZm4pKSB7XG4gICAgcmV0dXJuIGZuO1xuICB9IGVsc2UgaWYgKGlzUHJvbWlzZShmbikpIHtcbiAgICByZXR1cm4gZnJvbShmbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9mKGZuKTtcbiAgfVxufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQXN5bmNDYWNoZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZGVmYXVsdHM6IEFzeW5jQ2FjaGVPcHRpb25zKSB7fVxuXG4gIHdyYXAoXG4gICAgdmFsdWU6IE9ic2VydmFibGU8YW55PiB8IEdldFByb21pc2VGdW5jdGlvbixcbiAgICBjYWNoZUtleTogc3RyaW5nLFxuICAgIHVzZXJPcHRpb25zOiBBc3luY0NhY2hlT3B0aW9uc0ludGVyZmFjZSA9IHt9XG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgbGV0IGdldEFzeW5jVmFsdWU6IE9ic2VydmFibGU8YW55PjtcbiAgICBjb25zdCBvcHRpb25zOiBBc3luY0NhY2hlT3B0aW9uc0ludGVyZmFjZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7fSxcbiAgICAgIHRoaXMuZGVmYXVsdHMsXG4gICAgICB1c2VyT3B0aW9uc1xuICAgICk7XG5cbiAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuICAgICAgZ2V0QXN5bmNWYWx1ZSA9IHZhbHVlIGFzIE9ic2VydmFibGU8YW55PjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZ2V0QXN5bmNWYWx1ZSA9IE9ic2VydmFibGUuY3JlYXRlKChvYnNlcnZlcjogT2JzZXJ2ZXI8YW55PikgPT4ge1xuICAgICAgICBjb25zdCBwcm9taXNlOiBQcm9taXNlPGFueT4gPSB2YWx1ZSgpO1xuICAgICAgICBpZiAoIWlzUHJvbWlzZShwcm9taXNlKSkge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcihcbiAgICAgICAgICAgIFwiVGhlIGZ1bmN0aW9uIHlvdSBwYXNzZWQgdG8gdGhlIGFzeW5jIGNhY2hlIGRpZG4ndCByZXR1cm4gYSBwcm9taXNlXCJcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHByb21pc2VcbiAgICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChyZXN1bHQpO1xuICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdWYWx1ZSBjYW4gb25seSBiZSBhbiBvYnNlcnZhYmxlIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgcHJvbWlzZSdcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFueVRvT2JzZXJ2YWJsZShvcHRpb25zLmRyaXZlci5oYXMoY2FjaGVLZXkpKS5waXBlKFxuICAgICAgbWVyZ2VNYXAoZXhpc3RzSW5DYWNoZSA9PiB7XG4gICAgICAgIGNvbnN0IGNhY2hlQW5kUmV0dXJuQXN5bmNWYWx1ZSA9ICgpID0+XG4gICAgICAgICAgZ2V0QXN5bmNWYWx1ZS5waXBlKFxuICAgICAgICAgICAgbWVyZ2VNYXAoYXN5bmNWYWx1ZSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBhbnlUb09ic2VydmFibGUoXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5kcml2ZXIuc2V0KGNhY2hlS2V5LCBhc3luY1ZhbHVlKVxuICAgICAgICAgICAgICApLnBpcGUobWFwKCgpID0+IGFzeW5jVmFsdWUpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcblxuICAgICAgICBpZiAoZXhpc3RzSW5DYWNoZSAmJiAhb3B0aW9ucy5ieXBhc3NDYWNoZSkge1xuICAgICAgICAgIGNvbnN0IGdldENhY2hlZFZhbHVlOiBPYnNlcnZhYmxlPGFueT4gPSBhbnlUb09ic2VydmFibGUoXG4gICAgICAgICAgICBvcHRpb25zLmRyaXZlci5nZXQoY2FjaGVLZXkpXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmZyb21DYWNoZUFuZFJlcGxheSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlKGdldENhY2hlZFZhbHVlLCBjYWNoZUFuZFJldHVybkFzeW5jVmFsdWUoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDYWNoZWRWYWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGNhY2hlQW5kUmV0dXJuQXN5bmNWYWx1ZSgpO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gIH1cbn1cbiIsImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFzeW5jQ2FjaGUgfSBmcm9tICcuL2FzeW5jLWNhY2hlLnByb3ZpZGVyJztcbmltcG9ydCB7IEFzeW5jQ2FjaGVPcHRpb25zSW50ZXJmYWNlIH0gZnJvbSAnLi9hc3luYy1jYWNoZS1vcHRpb25zLnByb3ZpZGVyJztcblxuQFBpcGUoe1xuICBuYW1lOiAnYXN5bmNDYWNoZScgLy8gdHNsaW50OmRpc2FibGUtbGluZSBwaXBlLW5hbWluZ1xufSlcbmV4cG9ydCBjbGFzcyBBc3luY0NhY2hlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFzeW5jQ2FjaGU6IEFzeW5jQ2FjaGUpIHt9XG5cbiAgdHJhbnNmb3JtKFxuICAgIHZhbHVlOiBPYnNlcnZhYmxlPGFueT4sXG4gICAgY2FjaGVLZXk6IHN0cmluZyxcbiAgICBvcHRpb25zPzogQXN5bmNDYWNoZU9wdGlvbnNJbnRlcmZhY2VcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5hc3luY0NhY2hlLndyYXAodmFsdWUsIGNhY2hlS2V5LCBvcHRpb25zKTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBc3luY0NhY2hlIH0gZnJvbSAnLi9hc3luYy1jYWNoZS5wcm92aWRlcic7XG5pbXBvcnQgeyBBc3luY0NhY2hlT3B0aW9uc0ludGVyZmFjZSB9IGZyb20gJy4vYXN5bmMtY2FjaGUtb3B0aW9ucy5wcm92aWRlcic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHR0cFJlcXVlc3RBcmdzIHtcbiAgaGVhZGVycz86IEh0dHBIZWFkZXJzO1xuICBwYXJhbXM/OiBIdHRwUGFyYW1zO1xuICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhY2hlZEh0dHAge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsIHByaXZhdGUgYXN5bmNDYWNoZTogQXN5bmNDYWNoZSkge31cblxuICBnZXQoXG4gICAgdXJsOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEh0dHBSZXF1ZXN0QXJncyxcbiAgICBhc3luY0NhY2hlT3B0aW9ucz86IEFzeW5jQ2FjaGVPcHRpb25zSW50ZXJmYWNlXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcmVzdWx0JDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5odHRwLmdldCh1cmwsIG9wdGlvbnMpO1xuXG4gICAgbGV0IGNhY2hlS2V5OiBzdHJpbmcgPSB1cmw7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMpIHtcbiAgICAgIGNhY2hlS2V5ICs9ICc/JyArIG9wdGlvbnMucGFyYW1zLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYXN5bmNDYWNoZS53cmFwKHJlc3VsdCQsIGNhY2hlS2V5LCBhc3luY0NhY2hlT3B0aW9ucyk7XG4gIH1cbn1cbiIsImltcG9ydCB7IE5nTW9kdWxlLCBNb2R1bGVXaXRoUHJvdmlkZXJzLCBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9jYWxTdG9yYWdlRHJpdmVyIH0gZnJvbSAnLi9kcml2ZXJzL2xvY2FsLXN0b3JhZ2UtZHJpdmVyLnByb3ZpZGVyJztcbmltcG9ydCB7IE1lbW9yeURyaXZlciB9IGZyb20gJy4vZHJpdmVycy9tZW1vcnktZHJpdmVyLnByb3ZpZGVyJztcbmltcG9ydCB7IEFzeW5jQ2FjaGVPcHRpb25zIH0gZnJvbSAnLi9hc3luYy1jYWNoZS1vcHRpb25zLnByb3ZpZGVyJztcbmltcG9ydCB7IEFzeW5jQ2FjaGUgfSBmcm9tICcuL2FzeW5jLWNhY2hlLnByb3ZpZGVyJztcbmltcG9ydCB7IEFzeW5jQ2FjaGVQaXBlIH0gZnJvbSAnLi9hc3luYy1jYWNoZS5waXBlJztcbmltcG9ydCB7IENhY2hlZEh0dHAgfSBmcm9tICcuL2NhY2hlZC1odHRwLnByb3ZpZGVyJztcblxuZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeURyaXZlckZhY3Rvcnkob3B0aW9uczogQXN5bmNDYWNoZU9wdGlvbnMpOiBNZW1vcnlEcml2ZXIge1xuICByZXR1cm4gb3B0aW9ucy5kcml2ZXIgaW5zdGFuY2VvZiBNZW1vcnlEcml2ZXJcbiAgICA/IG9wdGlvbnMuZHJpdmVyXG4gICAgOiBuZXcgTWVtb3J5RHJpdmVyKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NhbFN0b3JhZ2VEcml2ZXJGYWN0b3J5KFxuICBvcHRpb25zOiBBc3luY0NhY2hlT3B0aW9uc1xuKTogTG9jYWxTdG9yYWdlRHJpdmVyIHtcbiAgcmV0dXJuIG9wdGlvbnMuZHJpdmVyIGluc3RhbmNlb2YgTG9jYWxTdG9yYWdlRHJpdmVyXG4gICAgPyAob3B0aW9ucy5kcml2ZXIgYXMgTG9jYWxTdG9yYWdlRHJpdmVyKVxuICAgIDogbmV3IExvY2FsU3RvcmFnZURyaXZlcigpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FjaGVPcHRpb25GYWN0b3J5KCk6IEFzeW5jQ2FjaGVPcHRpb25zIHtcbiAgcmV0dXJuIG5ldyBBc3luY0NhY2hlT3B0aW9ucygpO1xufVxuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtBc3luY0NhY2hlUGlwZV0sXG4gIGV4cG9ydHM6IFtBc3luY0NhY2hlUGlwZV1cbn0pXG5leHBvcnQgY2xhc3MgQXN5bmNDYWNoZU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KFxuICAgIGNhY2hlT3B0aW9uczogUHJvdmlkZXIgPSB7XG4gICAgICBwcm92aWRlOiBBc3luY0NhY2hlT3B0aW9ucyxcbiAgICAgIHVzZUZhY3Rvcnk6IGNhY2hlT3B0aW9uRmFjdG9yeVxuICAgIH1cbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVycyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBBc3luY0NhY2hlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBMb2NhbFN0b3JhZ2VEcml2ZXIsXG4gICAgICAgICAgdXNlRmFjdG9yeTogbG9jYWxTdG9yYWdlRHJpdmVyRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbQXN5bmNDYWNoZU9wdGlvbnNdXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBNZW1vcnlEcml2ZXIsXG4gICAgICAgICAgdXNlRmFjdG9yeTogbWVtb3J5RHJpdmVyRmFjdG9yeSxcbiAgICAgICAgICBkZXBzOiBbQXN5bmNDYWNoZU9wdGlvbnNdXG4gICAgICAgIH0sXG4gICAgICAgIGNhY2hlT3B0aW9ucyxcbiAgICAgICAgQXN5bmNDYWNoZSxcbiAgICAgICAgQ2FjaGVkSHR0cFxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJ0c2xpYl8xLl9fdmFsdWVzIiwiaXNPYnNlcnZhYmxlIiwiZnJvbSIsIm9mIiwiT2JzZXJ2YWJsZSIsIm1lcmdlTWFwIiwibWFwIiwibWVyZ2UiLCJJbmplY3RhYmxlIiwiUGlwZSIsImh0dHAiLCJIdHRwQ2xpZW50IiwiTmdNb2R1bGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7SUFNQSxxQkFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFFMUMsUUFBQTtRQUNFLDRCQUNVOzs0QkFBaUMsU0FBUyxFQUFFLGtCQUFrQjs7WUFBOUQsWUFBTyxHQUFQLE9BQU87U0FDYjs7Ozs7UUFFSixnQ0FBRzs7OztZQUFILFVBQUksR0FBVztnQkFDYixPQUFPLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQzlEOzs7OztRQUVELGdDQUFHOzs7O1lBQUgsVUFBSSxHQUFXO2dCQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ25FOzs7Ozs7UUFFRCxnQ0FBRzs7Ozs7WUFBSCxVQUFJLEdBQVcsRUFBRSxLQUFVO2dCQUN6QixPQUFPLFlBQVksQ0FBQyxPQUFPLENBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEVBQ3hCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQ3RCLENBQUM7YUFDSDs7Ozs7UUFFRCxtQ0FBTTs7OztZQUFO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 |
@@ -1,9 +0,2 @@ | ||
/** | ||
* angular-async-cache - A simple utility to help with caching of promises and observables to enable an easy offline first approach in angular 4+ apps | ||
* @version v1.0.1 | ||
* @author Matt Lewis | ||
* @link https://github.com/mattlewis92/angular-async-cache#readme | ||
* @license MIT | ||
*/ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@angular/core"),require("rxjs/Observable"),require("rxjs/add/observable/fromPromise"),require("rxjs/add/observable/of"),require("rxjs/add/observable/merge"),require("rxjs/add/operator/map"),require("rxjs/add/operator/mergeMap"),require("@angular/common/http")):"function"==typeof define&&define.amd?define(["@angular/core","rxjs/Observable","rxjs/add/observable/fromPromise","rxjs/add/observable/of","rxjs/add/observable/merge","rxjs/add/operator/map","rxjs/add/operator/mergeMap","@angular/common/http"],t):"object"==typeof exports?exports.angularAsyncCache=t(require("@angular/core"),require("rxjs/Observable"),require("rxjs/add/observable/fromPromise"),require("rxjs/add/observable/of"),require("rxjs/add/observable/merge"),require("rxjs/add/operator/map"),require("rxjs/add/operator/mergeMap"),require("@angular/common/http")):e.angularAsyncCache=t(e.ng.core,e.Rx,e.Rx,e.Rx,e.Rx,e.Rx,e.Rx,e.ng.commonHttp)}(this,function(e,t,r,n,o,a,c,i){return function(e){function t(n){if(r[n])return r[n].exports;var o=r[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var r={};return t.m=e,t.c=r,t.d=function(e,r,n){t.o(e,r)||Object.defineProperty(e,r,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(r,"a",r),r},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=6)}([function(t,r){t.exports=e},function(e,t,r){"use strict";var n=this&&this.__decorate||function(e,t,r,n){var o,a=arguments.length,c=a<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,n);else for(var i=e.length-1;i>=0;i--)(o=e[i])&&(c=(a<3?o(c):a>3?o(t,r,c):o(t,r))||c);return a>3&&c&&Object.defineProperty(t,r,c),c},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),c=r(8);r(9),r(10),r(11),r(12),r(13);var i=r(14),u=r(3),s=function(e){return e&&"function"==typeof e.then&&"function"==typeof e.catch},f=function(e){return e&&e[i.default]},p=function(e){return f(e)?e:s(e)?c.Observable.fromPromise(e):c.Observable.of(e)},l=function(){function e(e){this.defaults=e}return e.prototype.wrap=function(e,t,r){void 0===r&&(r={});var n,o=Object.assign({},this.defaults,r);if(f(e))n=e;else{if("function"!=typeof e)throw new Error("Value can only be an observable or a function that returns a promise");n=c.Observable.create(function(t){var r=e();if(!s(r))return t.error("The function you passed to the async cache didn't return a promise");r.then(function(e){t.next(e),t.complete()}).catch(function(e){t.error(e)})})}return p(o.driver.has(t)).flatMap(function(e){var r=function(){return n.flatMap(function(e){return p(o.driver.set(t,e)).map(function(){return e})})};if(e&&!o.bypassCache){var a=p(o.driver.get(t));return o.fromCacheAndReplay?c.Observable.merge(a,r()):a}return r()})},e=n([a.Injectable(),o("design:paramtypes",[u.AsyncCacheOptions])],e)}();t.AsyncCache=l},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=Symbol("cache key"),o=function(){function e(){this[n]=new Map}return e.prototype.has=function(e){return this[n].has(e)},e.prototype.get=function(e){return this[n].get(e)},e.prototype.set=function(e,t){return this[n].set(e,t)},e.prototype.delete=function(e){return this[n].delete(e)},e.prototype.clear=function(){return this[n].clear()},e.prototype.keys=function(){return Array.from(this[n].keys())},e}();t.MemoryDriver=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(2),o=function(){function e(e){void 0===e&&(e={}),this.driver=new n.MemoryDriver,this.fromCacheAndReplay=!1,Object.assign(this,e)}return e}();t.AsyncCacheOptions=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n="async-cache-",o=function(){function e(e){void 0===e&&(e={keyPrefix:n}),this.options=e}return e.prototype.has=function(e){return localStorage.hasOwnProperty(this.getInternalKey(e))},e.prototype.get=function(e){return JSON.parse(localStorage.getItem(this.getInternalKey(e)))},e.prototype.set=function(e,t){return localStorage.setItem(this.getInternalKey(e),JSON.stringify(t))},e.prototype.delete=function(e){return localStorage.removeItem(this.getInternalKey(e))},e.prototype.clear=function(){for(var e=0,t=this.keys();e<t.length;e++){var r=t[e];this.delete(r)}},e.prototype.keys=function(){for(var e=this,t=[],r=0;r<localStorage.length;r++)t.push(localStorage.key(r));return t.filter(function(t){return t.startsWith(e.options.keyPrefix)}).map(function(t){return e.getExternalKey(t)})},e.prototype.getInternalKey=function(e){return""+this.options.keyPrefix+e},e.prototype.getExternalKey=function(e){return e.replace(new RegExp("^"+this.options.keyPrefix),"")},e}();t.LocalStorageDriver=o},function(e,t,r){"use strict";var n=this&&this.__decorate||function(e,t,r,n){var o,a=arguments.length,c=a<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,n);else for(var i=e.length-1;i>=0;i--)(o=e[i])&&(c=(a<3?o(c):a>3?o(t,r,c):o(t,r))||c);return a>3&&c&&Object.defineProperty(t,r,c),c},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),c=r(20),i=r(1),u=function(){function e(e,t){this.http=e,this.asyncCache=t}return e.prototype.get=function(e,t,r){var n=this.http.get(e,t),o=e;return t&&t.params&&(o+="?"+t.params.toString()),this.asyncCache.wrap(n,o,r)},e=n([a.Injectable(),o("design:paramtypes",[c.HttpClient,i.AsyncCache])],e)}();t.CachedHttp=u},function(e,t,r){"use strict";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(7)),n(r(4)),n(r(2));var o=r(3);t.AsyncCacheOptions=o.AsyncCacheOptions,n(r(1)),n(r(5))},function(e,t,r){"use strict";function n(e){return e.driver instanceof s.MemoryDriver?e.driver:new s.MemoryDriver}function o(e){return e.driver instanceof u.LocalStorageDriver?e.driver:new u.LocalStorageDriver}function a(){return new f.AsyncCacheOptions}var c=this&&this.__decorate||function(e,t,r,n){var o,a=arguments.length,c=a<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,n);else for(var i=e.length-1;i>=0;i--)(o=e[i])&&(c=(a<3?o(c):a>3?o(t,r,c):o(t,r))||c);return a>3&&c&&Object.defineProperty(t,r,c),c};Object.defineProperty(t,"__esModule",{value:!0});var i=r(0),u=r(4),s=r(2),f=r(3),p=r(1),l=r(19),d=r(5);t.memoryDriverFactory=n,t.localStorageDriverFactory=o,t.cacheOptionFactory=a;var y=function(){function e(){}return t=e,e.forRoot=function(e){return void 0===e&&(e={provide:f.AsyncCacheOptions,useFactory:a}),{ngModule:t,providers:[{provide:u.LocalStorageDriver,useFactory:o,deps:[f.AsyncCacheOptions]},{provide:s.MemoryDriver,useFactory:n,deps:[f.AsyncCacheOptions]},e,p.AsyncCache,d.CachedHttp]}},e=t=c([i.NgModule({declarations:[l.AsyncCachePipe],exports:[l.AsyncCachePipe]})],e);var t}();t.AsyncCacheModule=y},function(e,r){e.exports=t},function(e,t){e.exports=r},function(e,t){e.exports=n},function(e,t){e.exports=o},function(e,t){e.exports=a},function(e,t){e.exports=c},function(e,t,r){e.exports=r(15)},function(e,t,r){"use strict";(function(e,n){Object.defineProperty(t,"__esModule",{value:!0});var o,a=r(18),c=function(e){return e&&e.__esModule?e:{default:e}}(a);o="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==e?e:n;var i=(0,c.default)(o);t.default=i}).call(t,r(16),r(17)(e))},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t,r){"use strict";function n(e){var t,r=e.Symbol;return"function"==typeof r?r.observable?t=r.observable:(t=r("observable"),r.observable=t):t="@@observable",t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n},function(e,t,r){"use strict";var n=this&&this.__decorate||function(e,t,r,n){var o,a=arguments.length,c=a<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,r):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,r,n);else for(var i=e.length-1;i>=0;i--)(o=e[i])&&(c=(a<3?o(c):a>3?o(t,r,c):o(t,r))||c);return a>3&&c&&Object.defineProperty(t,r,c),c},o=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)};Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),c=r(1),i=function(){function e(e){this.asyncCache=e}return e.prototype.transform=function(e,t,r){return this.asyncCache.wrap(e,t,r)},e=n([a.Pipe({name:"asyncCache"}),o("design:paramtypes",[c.AsyncCache])],e)}();t.AsyncCachePipe=i},function(e,t){e.exports=i}])}); | ||
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("tslib"),require("@angular/core"),require("rxjs"),require("rxjs/operators"),require("@angular/common/http")):"function"==typeof define&&define.amd?define("angular-async-cache",["exports","tslib","@angular/core","rxjs","rxjs/operators","@angular/common/http"],t):t(e["angular-async-cache"]={},e.tslib,e.ng.core,null,e.Rx.Observable.prototype,e.ng.common.http)}(this,function(e,i,r,c,u,t){"use strict";var n=function(){function e(e){void 0===e&&(e={keyPrefix:"async-cache-"}),this.options=e}return e.prototype.has=function(e){return localStorage.hasOwnProperty(this.getInternalKey(e))},e.prototype.get=function(e){return JSON.parse(localStorage.getItem(this.getInternalKey(e)))},e.prototype.set=function(e,t){return localStorage.setItem(this.getInternalKey(e),JSON.stringify(t))},e.prototype["delete"]=function(e){return localStorage.removeItem(this.getInternalKey(e))},e.prototype.clear=function(){try{for(var e=i.__values(this.keys()),t=e.next();!t.done;t=e.next()){var r=t.value;this["delete"](r)}}catch(a){n={error:a}}finally{try{t&&!t.done&&(o=e["return"])&&o.call(e)}finally{if(n)throw n.error}}var n,o},e.prototype.keys=function(){for(var t=this,e=[],r=0;r<localStorage.length;r++)e.push(localStorage.key(r));return e.filter(function(e){return e.startsWith(t.options.keyPrefix)}).map(function(e){return t.getExternalKey(e)})},e.prototype.getInternalKey=function(e){return""+this.options.keyPrefix+e},e.prototype.getExternalKey=function(e){return e.replace(new RegExp("^"+this.options.keyPrefix),"")},e}(),o=Symbol("cache key"),a=function(){function e(){this[o]=new Map}return e.prototype.has=function(e){return this[o].has(e)},e.prototype.get=function(e){return this[o].get(e)},e.prototype.set=function(e,t){return this[o].set(e,t)},e.prototype["delete"]=function(e){return this[o]["delete"](e)},e.prototype.clear=function(){return this[o].clear()},e.prototype.keys=function(){return Array.from(this[o].keys())},e}(),s=function(e){void 0===e&&(e={}),this.driver=new a,this.fromCacheAndReplay=!1,Object.assign(this,e)};function p(e){return e&&"function"==typeof e.then&&"function"==typeof e["catch"]}function f(e){return c.isObservable(e)?e:p(e)?c.from(e):c.of(e)}var y=function(){function e(e){this.defaults=e}return e.prototype.wrap=function(r,n,e){var o;void 0===e&&(e={});var a=Object.assign({},this.defaults,e);if(c.isObservable(r))o=r;else{if("function"!=typeof r)throw new Error("Value can only be an observable or a function that returns a promise");o=c.Observable.create(function(t){var e=r();if(!p(e))return t.error("The function you passed to the async cache didn't return a promise");e.then(function(e){t.next(e),t.complete()})["catch"](function(e){t.error(e)})})}return f(a.driver.has(n)).pipe(u.mergeMap(function(e){var t=function(){return o.pipe(u.mergeMap(function(e){return f(a.driver.set(n,e)).pipe(u.map(function(){return e}))}))};if(e&&!a.bypassCache){var r=f(a.driver.get(n));return a.fromCacheAndReplay?c.merge(r,t()):r}return t()}))},e.decorators=[{type:r.Injectable}],e.ctorParameters=function(){return[{type:s}]},e}(),l=function(){function e(e){this.asyncCache=e}return e.prototype.transform=function(e,t,r){return this.asyncCache.wrap(e,t,r)},e.decorators=[{type:r.Pipe,args:[{name:"asyncCache"}]}],e.ctorParameters=function(){return[{type:y}]},e}(),h=function(){function e(e,t){this.http=e,this.asyncCache=t}return e.prototype.get=function(e,t,r){var n=this.http.get(e,t),o=e;return t&&t.params&&(o+="?"+t.params.toString()),this.asyncCache.wrap(n,o,r)},e.decorators=[{type:r.Injectable}],e.ctorParameters=function(){return[{type:t.HttpClient},{type:y}]},e}();function d(e){return e.driver instanceof a?e.driver:new a}function g(e){return e.driver instanceof n?e.driver:new n}function v(){return new s}var m=function(){function t(){}return t.forRoot=function(e){return void 0===e&&(e={provide:s,useFactory:v}),{ngModule:t,providers:[{provide:n,useFactory:g,deps:[s]},{provide:a,useFactory:d,deps:[s]},e,y,h]}},t.decorators=[{type:r.NgModule,args:[{declarations:[l],exports:[l]}]}],t}();e.AsyncCacheOptions=s,e.memoryDriverFactory=d,e.localStorageDriverFactory=g,e.cacheOptionFactory=v,e.AsyncCacheModule=m,e.LocalStorageDriver=n,e.MemoryDriver=a,e.AsyncCache=y,e.CachedHttp=h,e.ɵa=l,Object.defineProperty(e,"__esModule",{value:!0})}); | ||
//# sourceMappingURL=angular-async-cache.umd.min.js.map |
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http'; | ||
import { Observable } from 'rxjs/Observable'; | ||
import { Observable } from 'rxjs'; | ||
import { AsyncCache } from './async-cache.provider'; | ||
@@ -4,0 +4,0 @@ import { AsyncCacheOptionsInterface } from './async-cache-options.provider'; |
@@ -5,2 +5,17 @@ # Change Log | ||
<a name="2.0.0"></a> | ||
# [2.0.0](https://github.com/mattlewis92/angular-async-cache/compare/v1.0.1...v2.0.0) (2018-05-16) | ||
### Features | ||
* upgrade to angular 6 ([cf68409](https://github.com/mattlewis92/angular-async-cache/commit/cf68409)), closes [#5](https://github.com/mattlewis92/angular-async-cache/issues/5) | ||
### BREAKING CHANGES | ||
* angular 6 or higher is now required to use this package | ||
<a name="1.0.1"></a> | ||
@@ -7,0 +22,0 @@ ## [1.0.1](https://github.com/mattlewis92/angular-async-cache/compare/v1.0.0...v1.0.1) (2017-12-23) |
@@ -1,2 +0,2 @@ | ||
import { Observable } from 'rxjs/Observable'; | ||
import { Observable } from 'rxjs'; | ||
export declare type AsyncValue = Observable<any> | Promise<any> | any; | ||
@@ -3,0 +3,0 @@ export interface CacheDriver { |
103
package.json
{ | ||
"name": "angular-async-cache", | ||
"version": "1.0.1", | ||
"description": "A simple utility to help with caching of promises and observables to enable an easy offline first approach in angular 4+ apps", | ||
"main": "./bundles/angular-async-cache.umd.js", | ||
"module": "./index.js", | ||
"typings": "./index.d.ts", | ||
"scripts": { | ||
"start": "npm run test:watch", | ||
"build:umd": "webpack --config webpack.config.umd.ts", | ||
"build:ngc": "ngc -p tsconfig-ngc.json", | ||
"build:dist": "npm run build:umd && npm run build:ngc", | ||
"build:clean": "del-cli dist", | ||
"test": "karma start --single-run && npm run build:dist && npm run build:clean", | ||
"test:watch": "karma start --auto-watch", | ||
"commit": "git-cz", | ||
"compodoc": "compodoc -p tsconfig-compodoc.json -d docs --disableGraph --disableCoverage --disablePrivateOrInternalSupport", | ||
"copyfiles": "copyfiles package.json LICENSE README.md CHANGELOG.md dist", | ||
"prerelease": "npm test", | ||
"release:git": "standard-version && git push --follow-tags origin master", | ||
"release:npm": "npm run build:dist && npm run copyfiles && npm publish dist", | ||
"release": "npm run release:git && npm run release:npm", | ||
"postrelease": "npm run build:clean", | ||
"commitmsg": "validate-commit-msg", | ||
"codecov": "cat coverage/lcov.info | codecov" | ||
}, | ||
"version": "2.0.0", | ||
"description": "A simple utility to help with caching of promises and observables to enable an easy offline first approach in angular 6+ apps", | ||
"repository": { | ||
@@ -34,3 +12,3 @@ "type": "git", | ||
"angular", | ||
"angular4", | ||
"angular6", | ||
"http", | ||
@@ -46,30 +24,30 @@ "cache" | ||
"devDependencies": { | ||
"@angular/common": "^4.0.0", | ||
"@angular/compiler": "^4.0.0", | ||
"@angular/compiler-cli": "^4.0.0", | ||
"@angular/core": "^4.0.0", | ||
"@angular/language-service": "^4.0.0", | ||
"@angular/platform-browser": "^4.0.0", | ||
"@angular/platform-browser-dynamic": "^4.0.0", | ||
"@angular/common": "^6.0.2", | ||
"@angular/compiler": "^6.0.2", | ||
"@angular/compiler-cli": "^6.0.2", | ||
"@angular/core": "^6.0.2", | ||
"@angular/language-service": "^6.0.2", | ||
"@angular/platform-browser": "^6.0.2", | ||
"@angular/platform-browser-dynamic": "^6.0.2", | ||
"@compodoc/compodoc": "^1.0.0-beta.3", | ||
"@types/chai": "^4.0.0", | ||
"@types/html-webpack-plugin": "^2.11.2", | ||
"@types/mocha": "^2.2.41", | ||
"@types/node": "^8.0.13", | ||
"@types/sinon": "^2.1.2", | ||
"@types/mocha": "^5.2.0", | ||
"@types/node": "^10.1.0", | ||
"@types/sinon": "^4.3.3", | ||
"@types/sinon-chai": "^2.7.26", | ||
"@types/webpack": "^3.0.4", | ||
"@types/webpack": "^4.1.7", | ||
"chai": "^4.0.0", | ||
"codecov": "^2.1.0", | ||
"codelyzer": "^3.0.0", | ||
"codecov": "^3.0.2", | ||
"codelyzer": "^4.3.0", | ||
"commitizen": "^2.8.1", | ||
"concurrently": "^3.0.0", | ||
"copyfiles": "^1.2.0", | ||
"copyfiles": "^2.0.0", | ||
"core-js": "^2.4.1", | ||
"cz-conventional-changelog": "^2.0.0", | ||
"del-cli": "^1.0.0", | ||
"fork-ts-checker-webpack-plugin": "^0.2.2", | ||
"fork-ts-checker-webpack-plugin": "^0.4.1", | ||
"husky": "^0.14.3", | ||
"istanbul-instrumenter-loader": "^2.0.0", | ||
"karma": "^1.4.1", | ||
"istanbul-instrumenter-loader": "^3.0.1", | ||
"karma": "^2.0.2", | ||
"karma-chrome-launcher": "^2.1.1", | ||
@@ -80,23 +58,25 @@ "karma-coverage-istanbul-reporter": "^1.0.0", | ||
"karma-sourcemap-loader": "^0.3.7", | ||
"karma-webpack": "^2.0.1", | ||
"mocha": "^3.3.0", | ||
"rxjs": "^5.0.1", | ||
"sinon": "^2.0.0", | ||
"sinon-chai": "^2.8.0", | ||
"karma-webpack": "^3.0.0", | ||
"mocha": "^5.1.1", | ||
"ng-packagr": "^3.0.0-rc.5", | ||
"prettier": "^1.12.1", | ||
"pretty-quick": "^1.4.1", | ||
"rxjs": "^6.1.0", | ||
"sinon": "^5.0.7", | ||
"sinon-chai": "^3.0.0", | ||
"standard-version": "^4.0.0", | ||
"ts-loader": "^2.3.0", | ||
"ts-node": "^3.0.0", | ||
"ts-loader": "^4.3.0", | ||
"ts-node": "^6.0.3", | ||
"tslib": "^1.7.1", | ||
"tslint": "^5.1.0", | ||
"tslint-config-mwl": "^0.4.1", | ||
"tslint-loader": "^3.5.3", | ||
"typescript": "~2.4.1", | ||
"typescript": "~2.7.2", | ||
"validate-commit-msg": "^2.8.0", | ||
"webpack": "^3.3.0", | ||
"webpack-angular-externals": "^1.0.0", | ||
"webpack-rxjs-externals": "^1.0.0", | ||
"webpack": "^4.8.3", | ||
"zone.js": "^0.8.4" | ||
}, | ||
"peerDependencies": { | ||
"@angular/common": "^4.3.0 || ^5.0.0", | ||
"@angular/core": "^4.3.0 || ^5.0.0" | ||
"@angular/common": ">=6.0.0 <8.0.0", | ||
"@angular/core": ">=6.0.0 <8.0.0" | ||
}, | ||
@@ -107,3 +87,16 @@ "config": { | ||
} | ||
}, | ||
"main": "bundles/angular-async-cache.umd.js", | ||
"module": "fesm5/angular-async-cache.js", | ||
"es2015": "fesm2015/angular-async-cache.js", | ||
"esm5": "esm5/angular-async-cache.js", | ||
"esm2015": "esm2015/angular-async-cache.js", | ||
"fesm5": "fesm5/angular-async-cache.js", | ||
"fesm2015": "fesm2015/angular-async-cache.js", | ||
"typings": "angular-async-cache.d.ts", | ||
"metadata": "angular-async-cache.metadata.json", | ||
"sideEffects": false, | ||
"dependencies": { | ||
"tslib": "^1.9.0" | ||
} | ||
} |
# angular async cache | ||
[![Build Status](https://travis-ci.org/mattlewis92/angular-async-cache.svg?branch=master)](https://travis-ci.org/mattlewis92/angular-async-cache) | ||
@@ -11,13 +12,14 @@ [![npm version](https://badge.fury.io/js/angular-async-cache.svg)](http://badge.fury.io/js/angular-async-cache) | ||
- [About](#about) | ||
- [Installation](#installation) | ||
- [Documentation](#documentation) | ||
- [Development](#development) | ||
- [License](#licence) | ||
* [About](#about) | ||
* [Installation](#installation) | ||
* [Documentation](#documentation) | ||
* [Development](#development) | ||
* [License](#licence) | ||
## About | ||
A simple utility to help with caching of promises and observables to enable an easy offline first approach in angular 4.3+ apps | ||
A simple utility to help with caching of promises and observables to enable an easy offline first approach in angular 6+ apps | ||
## Demo | ||
There is a [demo app here](http://mattlewis92.github.io/angular2-tv-tracker/) that shows the power of this library. Subscribe to some TV shows, turn off your internet and refresh the page and everything should still work (static assets are handled by the fantastic [webpack offline plugin](https://github.com/NekR/offline-plugin)) | ||
@@ -28,2 +30,3 @@ | ||
Install through npm: | ||
``` | ||
@@ -40,16 +43,21 @@ npm install --save angular-async-cache | ||
import { HttpClientModule } from '@angular/common/http'; | ||
import { AsyncCache, LocalStorageDriver, MemoryDriver, AsyncCacheModule, AsyncCacheOptions, CachedHttp } from 'angular-async-cache'; | ||
import { | ||
AsyncCache, | ||
LocalStorageDriver, | ||
MemoryDriver, | ||
AsyncCacheModule, | ||
AsyncCacheOptions, | ||
CachedHttp | ||
} from 'angular-async-cache'; | ||
export function asyncCacheOptionsFactory(): AsyncCacheOptions { | ||
return new AsyncCacheOptions({ | ||
// Default cache driver to use. Default in memory. | ||
// Default cache driver to use. Default in memory. | ||
// You can also roll your own by implementing the CacheDriver interface | ||
driver: new LocalStorageDriver(), | ||
// this is the special sauce - first emit the data from localstorage, | ||
// then re-fetch the live data from the API and emit a second time. | ||
// this is the special sauce - first emit the data from localstorage, | ||
// then re-fetch the live data from the API and emit a second time. | ||
// The async pipe will then re-render and update the UI. Default: false | ||
fromCacheAndReplay: true | ||
}); | ||
@@ -62,3 +70,3 @@ } | ||
HttpClientModule, | ||
// this configures the default options. Just using `AsyncCacheModule.forRoot()` will use | ||
// this configures the default options. Just using `AsyncCacheModule.forRoot()` will use | ||
// the defaults of an in memory cache and not replaying from the api | ||
@@ -82,3 +90,2 @@ AsyncCacheModule.forRoot({ | ||
class MyComponent { | ||
cars: Observable<Car[]>; | ||
@@ -92,3 +99,2 @@ | ||
} | ||
} | ||
@@ -102,18 +108,14 @@ ``` | ||
class CarService { | ||
constructor( | ||
private http: Http, | ||
private asyncCache: AsyncCache, | ||
private http: Http, | ||
private asyncCache: AsyncCache, | ||
private memoryDriver: MemoryDriver | ||
) {} | ||
getCars(): Observable<Car[]> { | ||
const cars$: Observable<Car[]> = this.http.get('/cars'); | ||
return asyncCache.wrap(cars$, '/cars', { | ||
driver: this.memoryDriver, // override the default and cache the data in memory | ||
driver: this.memoryDriver // override the default and cache the data in memory | ||
}); | ||
} | ||
} | ||
@@ -133,3 +135,2 @@ ``` | ||
class MyComponent { | ||
cars: Observable<Car[]>; | ||
@@ -140,3 +141,2 @@ | ||
} | ||
} | ||
@@ -148,2 +148,3 @@ ``` | ||
### Prepare your environment | ||
* Install [Node.js](http://nodejs.org/) and NPM (should come with) | ||
@@ -153,8 +154,11 @@ * Install local dev dependencies: `npm install` while current directory is this repo | ||
### Development server | ||
Run `npm start` to start a development server on port 8000 with auto reload + tests. | ||
### Testing | ||
Run `npm test` to run tests once or `npm run test:watch` to continually run tests. | ||
### Release | ||
```bash | ||
@@ -161,0 +165,0 @@ npm run release |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Uses eval
Supply chain riskPackage uses dynamic code execution (e.g., eval()), which is a dangerous practice. This can prevent the code from running in certain environments and increases the risk that the code may contain exploits or malicious behavior.
Found 2 instances in 1 package
266830
2562
160
1
3
52
43
+ Addedtslib@^1.9.0
+ Added@angular/common@7.2.16(transitive)
+ Added@angular/core@7.2.16(transitive)
+ Addedrxjs@6.6.7(transitive)
- Removed@angular/common@5.2.11(transitive)
- Removed@angular/core@5.2.11(transitive)
- Removedrxjs@5.5.12(transitive)
- Removedsymbol-observable@1.0.1(transitive)