@kovalenko/http-request-cache 1.3.5 → 1.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/esm2020/lib/http-request-cache.decorator.mjs +46 -33
- package/fesm2015/kovalenko-http-request-cache.mjs +48 -33
- package/fesm2015/kovalenko-http-request-cache.mjs.map +1 -1
- package/fesm2020/kovalenko-http-request-cache.mjs +45 -32
- package/fesm2020/kovalenko-http-request-cache.mjs.map +1 -1
- package/lib/http-request-cache.decorator.js +47 -33
- package/lib/http-request-cache.decorator.js.map +1 -1
- package/package.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kovalenko-http-request-cache.mjs","sources":["../../../projects/http-request-cache/src/lib/default-storage.ts","../../../projects/http-request-cache/src/lib/request-times.ts","../../../projects/http-request-cache/src/lib/http-request-cache.decorator.ts","../../../projects/http-request-cache/src/public-api.ts","../../../projects/http-request-cache/src/kovalenko-http-request-cache.ts"],"sourcesContent":["import {HttpCacheStorage} from './http-cache-storage';\nimport {Observable} from 'rxjs';\n\nexport class DefaultStorage implements HttpCacheStorage {\n private storage = new Map<string, Observable<any>>();\n\n getItem(key: string): Observable<any> | undefined {\n return this.storage.get(key);\n }\n\n setItem(key: string, item: Observable<any>): void {\n this.storage.set(key, item);\n }\n\n deleteItem(key: string): void {\n this.storage.delete(key);\n }\n}\n","import {HttpCacheStorage} from './http-cache-storage';\nimport {Observable} from 'rxjs';\n\nexport class RequestTimes implements HttpCacheStorage {\n private storage = new Map<string, Observable<any>>();\n\n getItem(key: string): Observable<any> | undefined {\n return this.storage.get(key);\n }\n\n setItem(key: string, item: Observable<any>): void {\n this.storage.set(key, item);\n }\n\n deleteItem(key: string): void {\n this.storage.delete(key);\n }\n}\n","import {\n finalize, merge, NEVER, Observable, Subject, startWith, switchMap, share,\n ReplaySubject, timer,\n} from 'rxjs';\n\nimport {DefaultStorage} from './default-storage';\nimport {HttpCacheOptions} from './http-cache-options';\nimport {RequestTimes} from './request-times';\n\ntype HttpRequestCacheMethod = (...args: any[]) => Observable<any>;\n\nconst serializeArg = (value: any): string => {\n const seen = new WeakMap<object, string>();\n let counter = 0;\n\n const serialize = (v: any): string => {\n if (v === null) {\n return 'null';\n }\n const t = typeof v;\n\n if (t === 'number' || t === 'boolean') {\n return String(v);\n }\n if (t === 'bigint') {\n return `${v}n`;\n }\n if (t === 'undefined' || t === 'symbol' || t === 'function') {\n return 'undef';\n }\n if (t === 'string') {\n return `str:${v}`;\n }\n if (t !== 'object') {\n return `${t}:${String(v)}`;\n }\n\n if (v instanceof Date) {\n return `date:${v.toISOString()}`;\n }\n if (v instanceof RegExp) {\n return `regexp:${v.toString()}`;\n }\n\n const path = seen.get(v);\n if (path !== undefined) {\n return `circ:${path}`;\n }\n seen.set(v, `v${counter++}`);\n\n let out: string;\n if (v instanceof Map) {\n out = `map:${serialize(Array.from(v.entries()))}`;\n } else if (v instanceof Set) {\n out = `set:${serialize(Array.from(v.values()))}`;\n } else if (Array.isArray(v)) {\n out = `[${v.map(serialize).join(',')}]`;\n } else {\n out = `{${Object.keys(v).sort().map(k => `${serialize(k)}:${serialize(v[k])}`).join(',')}}`;\n }\n\n seen.delete(v);\n return out;\n };\n\n return serialize(value);\n};\n\nconst hashArgs = (input: string): string => {\n let h = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0).toString(36);\n};\n\nexport const HttpRequestCache = <T extends Record<string, any>>(optionsHandler?: (obj: T, ...args: any[]) => HttpCacheOptions) => {\n return (target: T, methodName: string, descriptor: TypedPropertyDescriptor<HttpRequestCacheMethod>): TypedPropertyDescriptor<HttpRequestCacheMethod> => {\n if (typeof descriptor?.value !== 'function') {\n throw Error(`'@HttpRequestCache' can be applied only to the class method which returns an Observable`);\n }\n\n const cacheKeyPrefix = `${target.constructor.name}_${methodName}`;\n const originalMethod = descriptor.value;\n const latestCall: Record<string, {self: any, args: any[]}> = {};\n\n const instanceIds = new WeakMap<object, number>();\n let instanceIdCounter = 0;\n\n descriptor.value = function(...args: any[]): Observable<any> {\n const self = this as Record<string, any>;\n const options = optionsHandler?.call(self as T, self as T, ...args);\n\n const useDefaultStorage = !options?.storage;\n if (useDefaultStorage && !self.___storage___) {\n self.___storage___ = new DefaultStorage();\n }\n\n const ttlEnabled = options?.ttl != null;\n if (ttlEnabled && !self.___ttl_storage___) {\n self.___ttl_storage___ = new RequestTimes();\n }\n\n const storage = options?.storage ?? self.___storage___;\n const ttlStorage = self.___ttl_storage___;\n\n let instanceId = '';\n if (useDefaultStorage) {\n let id = instanceIds.get(self);\n if (id === undefined) {\n id = ++instanceIdCounter;\n instanceIds.set(self, id);\n }\n instanceId = `_${id}`;\n }\n\n const key = `${cacheKeyPrefix}${instanceId}_${hashArgs(serializeArg(args))}`;\n const latest = latestCall[key] ?? (latestCall[key] = {self, args});\n latest.self = self;\n latest.args = args;\n\n let ttl: {requestTime: number, subject: Subject<void>} = undefined as any;\n\n if (ttlEnabled && ttlStorage) {\n ttl = ttlStorage.getItem(key);\n\n if (!ttl) {\n ttl = {\n requestTime: Date.now(),\n subject: new Subject(),\n };\n } else if (ttl.requestTime + (options?.ttl as number) <= Date.now()) {\n ttl.requestTime = Date.now();\n ttl.subject.next();\n }\n\n ttlStorage.setItem(key, ttl);\n }\n\n const refreshOn = merge(\n options?.refreshOn ?? NEVER as Observable<unknown>,\n ttl?.subject ?? NEVER as Observable<unknown>,\n );\n\n let observable = storage.getItem(key);\n\n if (!observable) {\n const ttlRemaining = ttlEnabled && ttl\n ? ttl.requestTime + (options?.ttl as number) - Date.now()\n : 0;\n\n observable = refreshOn.pipe(\n startWith(true),\n switchMap(() => originalMethod.apply(latest.self, latest.args)),\n finalize(() => {\n storage.deleteItem(key);\n ttlStorage?.deleteItem(key);\n delete latestCall[key];\n }),\n share({\n connector: () => new ReplaySubject(1),\n resetOnComplete: false,\n resetOnError: true,\n resetOnRefCountZero: options?.refCount\n ? options.refCountDelay != null\n ? (): Observable<number> => timer(options.refCountDelay!)\n : true\n : ttlRemaining > 0\n ? (): Observable<number> => timer(ttlRemaining)\n : true,\n }),\n );\n storage.setItem(key, observable);\n\n if (options?.windowTime) {\n setTimeout(\n () => {\n storage.deleteItem(key);\n ttlStorage?.deleteItem(key);\n delete latestCall[key];\n },\n options.windowTime,\n );\n }\n }\n\n return observable;\n };\n\n return descriptor;\n };\n};\n","/*\n * Public API Surface of http-request-cache\n */\n\nexport * from './lib/http-request-cache.decorator';\nexport * from './lib/http-cache-storage';\nexport * from './lib/http-cache-options';\nexport * from './lib/default-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kovalenko-http-request-cache.mjs","sources":["../../../projects/http-request-cache/src/lib/default-storage.ts","../../../projects/http-request-cache/src/lib/request-times.ts","../../../projects/http-request-cache/src/lib/http-request-cache.decorator.ts","../../../projects/http-request-cache/src/public-api.ts","../../../projects/http-request-cache/src/kovalenko-http-request-cache.ts"],"sourcesContent":["import {HttpCacheStorage} from './http-cache-storage';\nimport {Observable} from 'rxjs';\n\nexport class DefaultStorage implements HttpCacheStorage {\n private storage = new Map<string, Observable<any>>();\n\n getItem(key: string): Observable<any> | undefined {\n return this.storage.get(key);\n }\n\n setItem(key: string, item: Observable<any>): void {\n this.storage.set(key, item);\n }\n\n deleteItem(key: string): void {\n this.storage.delete(key);\n }\n}\n","import {HttpCacheStorage} from './http-cache-storage';\nimport {Observable} from 'rxjs';\n\nexport class RequestTimes implements HttpCacheStorage {\n private storage = new Map<string, Observable<any>>();\n\n getItem(key: string): Observable<any> | undefined {\n return this.storage.get(key);\n }\n\n setItem(key: string, item: Observable<any>): void {\n this.storage.set(key, item);\n }\n\n deleteItem(key: string): void {\n this.storage.delete(key);\n }\n}\n","import {\n filter,\n finalize,\n merge,\n NEVER,\n Observable,\n ReplaySubject,\n share,\n startWith,\n Subject,\n switchMap,\n tap,\n timer,\n} from 'rxjs';\n\nimport {DefaultStorage} from './default-storage';\nimport {HttpCacheOptions} from './http-cache-options';\nimport {RequestTimes} from './request-times';\n\ntype HttpRequestCacheMethod = (...args: any[]) => Observable<any>;\n\nconst serializeArg = (value: any): string => {\n const seen = new WeakMap<object, string>();\n let counter = 0;\n\n const serialize = (v: any): string => {\n if (v === null) {\n return 'null';\n }\n const t = typeof v;\n\n if (t === 'number' || t === 'boolean') {\n return String(v);\n }\n if (t === 'bigint') {\n return `${v}n`;\n }\n if (t === 'undefined' || t === 'symbol' || t === 'function') {\n return 'undef';\n }\n if (t === 'string') {\n return `str:${v}`;\n }\n if (t !== 'object') {\n return `${t}:${String(v)}`;\n }\n\n if (v instanceof Date) {\n return `date:${v.toISOString()}`;\n }\n if (v instanceof RegExp) {\n return `regexp:${v.toString()}`;\n }\n\n const path = seen.get(v);\n if (path !== undefined) {\n return `circ:${path}`;\n }\n seen.set(v, `v${counter++}`);\n\n let out: string;\n if (v instanceof Map) {\n out = `map:${serialize(Array.from(v.entries()))}`;\n } else if (v instanceof Set) {\n out = `set:${serialize(Array.from(v.values()))}`;\n } else if (Array.isArray(v)) {\n out = `[${v.map(serialize).join(',')}]`;\n } else {\n out = `{${Object.keys(v).sort().map((k: string): string => `${serialize(k)}:${serialize(v[k])}`).join(',')}}`;\n }\n\n seen.delete(v);\n return out;\n };\n\n return serialize(value);\n};\n\nconst hashArgs = (input: string): string => {\n let h = 0x811c9dc5;\n for (let i = 0; i < input.length; i++) {\n h ^= input.charCodeAt(i);\n h = Math.imul(h, 0x01000193);\n }\n return (h >>> 0).toString(36);\n};\n\nexport const HttpRequestCache = <T extends Record<string, any>>(optionsHandler?: (obj: T, ...args: any[]) => HttpCacheOptions) => {\n return (\n target: T,\n methodName: string,\n descriptor: TypedPropertyDescriptor<HttpRequestCacheMethod>,\n ): TypedPropertyDescriptor<HttpRequestCacheMethod> => {\n if (!(descriptor?.value instanceof Function)) {\n throw Error(`'@HttpRequestCache' can be applied only to the class method which returns an Observable`);\n }\n\n const cacheKeyPrefix = `${target.constructor.name}_${methodName}`;\n const originalMethod = descriptor.value;\n const working: Record<string, boolean> = {};\n const subscribers: Record<string, number> = {};\n const removeTimers: Record<string, ReturnType<typeof setTimeout>> = {};\n const instanceIds = new WeakMap<object, number>();\n let instanceIdCounter = 0;\n\n descriptor.value = function(...args: any[]): Observable<any> {\n const self = (this as Record<string, any>) ?? target;\n const options = optionsHandler?.call(self as T, self as T, ...args);\n\n if (!options?.storage && !self.___storage___) {\n self.___storage___ = new DefaultStorage();\n }\n\n if (options?.ttl && !self.___ttl_storage___) {\n self.___ttl_storage___ = new RequestTimes();\n }\n\n const storage = options?.storage ?? self.___storage___;\n\n let instanceId = '';\n if (!options?.storage) {\n let id = instanceIds.get(self);\n if (id === undefined) {\n id = ++instanceIdCounter;\n instanceIds.set(self, id);\n }\n instanceId = `_${id}`;\n }\n\n const key = `${cacheKeyPrefix}${instanceId}_${hashArgs(serializeArg(args))}`;\n\n // отменяем запланированное удаление\n if (removeTimers[key]) {\n clearTimeout(removeTimers[key]);\n delete removeTimers[key];\n }\n\n let ttl: {requestTime: number, subject: Subject<void>} = undefined as any;\n\n if (options?.ttl) {\n ttl = self.___ttl_storage___.getItem(key);\n\n if (!ttl) {\n ttl = {\n requestTime: Date.now(),\n subject: new Subject(),\n };\n } else if (ttl.requestTime + options.ttl <= Date.now()) {\n working[key] = true;\n ttl.requestTime = Date.now();\n ttl.subject.next();\n }\n\n self.___ttl_storage___.setItem(key, ttl);\n }\n\n const refreshOn = merge(\n options?.refreshOn ?? NEVER as Observable<unknown>,\n ttl?.subject ?? NEVER as Observable<unknown>,\n );\n\n let observable = storage.getItem(key);\n\n if (!observable) {\n observable = refreshOn.pipe(\n startWith(true),\n switchMap(() => originalMethod.apply(this, [...args])),\n tap(() => {\n delete working[key];\n }),\n share({\n connector: () => new ReplaySubject(1),\n resetOnComplete: false,\n resetOnError: true,\n resetOnRefCountZero: !options?.refCount\n ? false\n : options.refCountDelay != null\n ? (): Observable<number> => timer(options.refCountDelay!)\n : true,\n }),\n filter(() => !working[key]),\n finalize(() => {\n subscribers[key]--;\n\n if (subscribers[key] <= 0) {\n delete subscribers[key];\n\n if (options?.refCount) {\n const unset = (): void => {\n storage.deleteItem(key);\n self.___ttl_storage___?.deleteItem(key);\n\n delete removeTimers[key];\n };\n\n if (options.refCountDelay == null) {\n unset();\n } else {\n removeTimers[key] = setTimeout(unset, options.refCountDelay);\n }\n }\n }\n }),\n );\n storage.setItem(key, observable);\n\n if (options?.windowTime) {\n setTimeout(\n () => {\n storage.deleteItem(key);\n self.___ttl_storage___?.deleteItem(key);\n },\n options.windowTime,\n );\n }\n }\n\n subscribers[key] = (subscribers[key] ?? 0) + 1;\n\n return observable;\n };\n\n return descriptor;\n };\n};\n\n","/*\n * Public API Surface of http-request-cache\n */\n\nexport * from './lib/http-request-cache.decorator';\nexport * from './lib/http-cache-storage';\nexport * from './lib/http-cache-options';\nexport * from './lib/default-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ const serializeArg = (value) => {
|
|
|
49
49
|
out = `[${v.map(serialize).join(',')}]`;
|
|
50
50
|
}
|
|
51
51
|
else {
|
|
52
|
-
out = `{${Object.keys(v).sort().map(k => `${serialize(k)}:${serialize(v[k])}`).join(',')}}`;
|
|
52
|
+
out = `{${Object.keys(v).sort().map((k) => `${serialize(k)}:${serialize(v[k])}`).join(',')}}`;
|
|
53
53
|
}
|
|
54
54
|
seen.delete(v);
|
|
55
55
|
return out;
|
|
@@ -66,30 +66,29 @@ const hashArgs = (input) => {
|
|
|
66
66
|
};
|
|
67
67
|
const HttpRequestCache = (optionsHandler) => {
|
|
68
68
|
return (target, methodName, descriptor) => {
|
|
69
|
-
if (
|
|
69
|
+
if (!((descriptor === null || descriptor === void 0 ? void 0 : descriptor.value) instanceof Function)) {
|
|
70
70
|
throw Error(`'@HttpRequestCache' can be applied only to the class method which returns an Observable`);
|
|
71
71
|
}
|
|
72
72
|
const cacheKeyPrefix = `${target.constructor.name}_${methodName}`;
|
|
73
73
|
const originalMethod = descriptor.value;
|
|
74
|
-
const
|
|
74
|
+
const working = {};
|
|
75
|
+
const subscribers = {};
|
|
76
|
+
const removeTimers = {};
|
|
75
77
|
const instanceIds = new WeakMap();
|
|
76
78
|
let instanceIdCounter = 0;
|
|
77
79
|
descriptor.value = function (...args) {
|
|
78
|
-
var _a, _b, _c, _d;
|
|
79
|
-
const self = this;
|
|
80
|
+
var _a, _b, _c, _d, _e;
|
|
81
|
+
const self = (_a = this) !== null && _a !== void 0 ? _a : target;
|
|
80
82
|
const options = optionsHandler === null || optionsHandler === void 0 ? void 0 : optionsHandler.call(self, self, ...args);
|
|
81
|
-
|
|
82
|
-
if (useDefaultStorage && !self.___storage___) {
|
|
83
|
+
if (!(options === null || options === void 0 ? void 0 : options.storage) && !self.___storage___) {
|
|
83
84
|
self.___storage___ = new default_storage_1.DefaultStorage();
|
|
84
85
|
}
|
|
85
|
-
|
|
86
|
-
if (ttlEnabled && !self.___ttl_storage___) {
|
|
86
|
+
if ((options === null || options === void 0 ? void 0 : options.ttl) && !self.___ttl_storage___) {
|
|
87
87
|
self.___ttl_storage___ = new request_times_1.RequestTimes();
|
|
88
88
|
}
|
|
89
|
-
const storage = (
|
|
90
|
-
const ttlStorage = self.___ttl_storage___;
|
|
89
|
+
const storage = (_b = options === null || options === void 0 ? void 0 : options.storage) !== null && _b !== void 0 ? _b : self.___storage___;
|
|
91
90
|
let instanceId = '';
|
|
92
|
-
if (
|
|
91
|
+
if (!(options === null || options === void 0 ? void 0 : options.storage)) {
|
|
93
92
|
let id = instanceIds.get(self);
|
|
94
93
|
if (id === undefined) {
|
|
95
94
|
id = ++instanceIdCounter;
|
|
@@ -98,55 +97,70 @@ const HttpRequestCache = (optionsHandler) => {
|
|
|
98
97
|
instanceId = `_${id}`;
|
|
99
98
|
}
|
|
100
99
|
const key = `${cacheKeyPrefix}${instanceId}_${hashArgs(serializeArg(args))}`;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
if (removeTimers[key]) {
|
|
101
|
+
clearTimeout(removeTimers[key]);
|
|
102
|
+
delete removeTimers[key];
|
|
103
|
+
}
|
|
104
104
|
let ttl = undefined;
|
|
105
|
-
if (
|
|
106
|
-
ttl =
|
|
105
|
+
if (options === null || options === void 0 ? void 0 : options.ttl) {
|
|
106
|
+
ttl = self.___ttl_storage___.getItem(key);
|
|
107
107
|
if (!ttl) {
|
|
108
108
|
ttl = {
|
|
109
109
|
requestTime: Date.now(),
|
|
110
110
|
subject: new rxjs_1.Subject(),
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
|
-
else if (ttl.requestTime +
|
|
113
|
+
else if (ttl.requestTime + options.ttl <= Date.now()) {
|
|
114
|
+
working[key] = true;
|
|
114
115
|
ttl.requestTime = Date.now();
|
|
115
116
|
ttl.subject.next();
|
|
116
117
|
}
|
|
117
|
-
|
|
118
|
+
self.___ttl_storage___.setItem(key, ttl);
|
|
118
119
|
}
|
|
119
120
|
const refreshOn = (0, rxjs_1.merge)((_c = options === null || options === void 0 ? void 0 : options.refreshOn) !== null && _c !== void 0 ? _c : rxjs_1.NEVER, (_d = ttl === null || ttl === void 0 ? void 0 : ttl.subject) !== null && _d !== void 0 ? _d : rxjs_1.NEVER);
|
|
120
121
|
let observable = storage.getItem(key);
|
|
121
122
|
if (!observable) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
: 0;
|
|
125
|
-
observable = refreshOn.pipe((0, rxjs_1.startWith)(true), (0, rxjs_1.switchMap)(() => originalMethod.apply(latest.self, latest.args)), (0, rxjs_1.finalize)(() => {
|
|
126
|
-
storage.deleteItem(key);
|
|
127
|
-
ttlStorage === null || ttlStorage === void 0 ? void 0 : ttlStorage.deleteItem(key);
|
|
128
|
-
delete latestCall[key];
|
|
123
|
+
observable = refreshOn.pipe((0, rxjs_1.startWith)(true), (0, rxjs_1.switchMap)(() => originalMethod.apply(this, [...args])), (0, rxjs_1.tap)(() => {
|
|
124
|
+
delete working[key];
|
|
129
125
|
}), (0, rxjs_1.share)({
|
|
130
126
|
connector: () => new rxjs_1.ReplaySubject(1),
|
|
131
127
|
resetOnComplete: false,
|
|
132
128
|
resetOnError: true,
|
|
133
|
-
resetOnRefCountZero: (options === null || options === void 0 ? void 0 : options.refCount)
|
|
134
|
-
?
|
|
129
|
+
resetOnRefCountZero: !(options === null || options === void 0 ? void 0 : options.refCount)
|
|
130
|
+
? false
|
|
131
|
+
: options.refCountDelay != null
|
|
135
132
|
? () => (0, rxjs_1.timer)(options.refCountDelay)
|
|
136
|
-
: true
|
|
137
|
-
: ttlRemaining > 0
|
|
138
|
-
? () => (0, rxjs_1.timer)(ttlRemaining)
|
|
139
133
|
: true,
|
|
134
|
+
}), (0, rxjs_1.filter)(() => !working[key]), (0, rxjs_1.finalize)(() => {
|
|
135
|
+
subscribers[key]--;
|
|
136
|
+
if (subscribers[key] <= 0) {
|
|
137
|
+
delete subscribers[key];
|
|
138
|
+
if (options === null || options === void 0 ? void 0 : options.refCount) {
|
|
139
|
+
const unset = () => {
|
|
140
|
+
var _a;
|
|
141
|
+
storage.deleteItem(key);
|
|
142
|
+
(_a = self.___ttl_storage___) === null || _a === void 0 ? void 0 : _a.deleteItem(key);
|
|
143
|
+
delete removeTimers[key];
|
|
144
|
+
};
|
|
145
|
+
if (options.refCountDelay == null) {
|
|
146
|
+
unset();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
removeTimers[key] = setTimeout(unset, options.refCountDelay);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
140
153
|
}));
|
|
141
154
|
storage.setItem(key, observable);
|
|
142
155
|
if (options === null || options === void 0 ? void 0 : options.windowTime) {
|
|
143
156
|
setTimeout(() => {
|
|
157
|
+
var _a;
|
|
144
158
|
storage.deleteItem(key);
|
|
145
|
-
|
|
146
|
-
delete latestCall[key];
|
|
159
|
+
(_a = self.___ttl_storage___) === null || _a === void 0 ? void 0 : _a.deleteItem(key);
|
|
147
160
|
}, options.windowTime);
|
|
148
161
|
}
|
|
149
162
|
}
|
|
163
|
+
subscribers[key] = ((_e = subscribers[key]) !== null && _e !== void 0 ? _e : 0) + 1;
|
|
150
164
|
return observable;
|
|
151
165
|
};
|
|
152
166
|
return descriptor;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-request-cache.decorator.js","sourceRoot":"","sources":["../../../projects/http-request-cache/src/lib/http-request-cache.decorator.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"http-request-cache.decorator.js","sourceRoot":"","sources":["../../../projects/http-request-cache/src/lib/http-request-cache.decorator.ts"],"names":[],"mappings":"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"}
|