@zajno/common 2.8.9 → 2.8.11
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/README.md +2 -2
- package/cjs/lazy/promise.js +26 -5
- package/cjs/lazy/promise.js.map +1 -1
- package/cjs/structures/promiseCache/cache.js +124 -48
- package/cjs/structures/promiseCache/cache.js.map +1 -1
- package/cjs/structures/promiseCache/core.js +73 -37
- package/cjs/structures/promiseCache/core.js.map +1 -1
- package/esm/lazy/promise.js +26 -5
- package/esm/lazy/promise.js.map +1 -1
- package/esm/structures/promiseCache/cache.js +124 -48
- package/esm/structures/promiseCache/cache.js.map +1 -1
- package/esm/structures/promiseCache/core.js +73 -37
- package/esm/structures/promiseCache/core.js.map +1 -1
- package/package.json +4 -4
- package/types/lazy/promise.d.ts +6 -3
- package/types/lazy/types.d.ts +41 -5
- package/types/structures/promiseCache/cache.d.ts +54 -19
- package/types/structures/promiseCache/core.d.ts +56 -25
- package/types/structures/promiseCache/types.d.ts +17 -1
- package/types/structures/tempoCache.d.ts +1 -1
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.PromiseCacheCore = void 0;
|
|
4
|
+
const safe_js_1 = require("../../functions/safe.js");
|
|
4
5
|
const loggable_js_1 = require("../../logger/loggable.js");
|
|
5
6
|
const Model_js_1 = require("../../models/Model.js");
|
|
6
7
|
/**
|
|
@@ -12,7 +13,7 @@ const Model_js_1 = require("../../models/Model.js");
|
|
|
12
13
|
* - promise caching
|
|
13
14
|
* - error storage
|
|
14
15
|
* - timestamps for cached items
|
|
15
|
-
* - direct cache manipulation (invalidate,
|
|
16
|
+
* - direct cache manipulation (invalidate, set, clear)
|
|
16
17
|
* - keys iteration
|
|
17
18
|
*
|
|
18
19
|
* Subclasses are expected to implement fetching logic, invalidation policies, etc.
|
|
@@ -32,6 +33,11 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
32
33
|
_errorsMap;
|
|
33
34
|
/** Stores items resolve timestamps (for expiration) in map by id. */
|
|
34
35
|
_timestamps = new Map();
|
|
36
|
+
/**
|
|
37
|
+
* Tracks the latest in-flight factory promise per key for "latest wins" refresh semantics.
|
|
38
|
+
* Separate from `_fetchCache` (which stores the public-facing promise returned to callers).
|
|
39
|
+
*/
|
|
40
|
+
_activeFetchPromises = new Map();
|
|
35
41
|
_version = 0;
|
|
36
42
|
constructor(keyAdapter, keyParser) {
|
|
37
43
|
super();
|
|
@@ -44,7 +50,14 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
44
50
|
this._errorsMap = this.pure_createErrorsMap();
|
|
45
51
|
}
|
|
46
52
|
// ─── Counts ──────────────────────────────────────────────────────────
|
|
47
|
-
/**
|
|
53
|
+
/**
|
|
54
|
+
* Returns the number of items currently being fetched (includes background refreshes).
|
|
55
|
+
*
|
|
56
|
+
* Note: `loadingCount` includes background refreshes started via `refresh()`,
|
|
57
|
+
* but `getIsLoading(key)` does **not** reflect background refreshes — it only
|
|
58
|
+
* tracks the per-key status set by `get()`. Use `loadingCount` for global
|
|
59
|
+
* "something is loading" indicators.
|
|
60
|
+
*/
|
|
48
61
|
get loadingCount() { return this._loadingCount.value; }
|
|
49
62
|
/** Returns the number of cached items (resolved values). */
|
|
50
63
|
get cachedCount() { return this._itemsCache.size; }
|
|
@@ -132,30 +145,37 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
132
145
|
*
|
|
133
146
|
* - `value` / `promise` trigger a fetch if not started.
|
|
134
147
|
* - `currentValue` reads without triggering.
|
|
135
|
-
* - `refresh()`
|
|
148
|
+
* - `refresh()` re-fetches while keeping the stale value available.
|
|
136
149
|
*/
|
|
137
150
|
getLazy(key) {
|
|
138
151
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
139
152
|
const self = this;
|
|
140
|
-
|
|
153
|
+
const lazy = {
|
|
141
154
|
get value() { return self.getCurrent(key); },
|
|
142
155
|
get currentValue() { return self.getCurrent(key, false); },
|
|
143
156
|
get hasValue() {
|
|
144
157
|
const k = self._pk(key);
|
|
145
|
-
return self._itemsCache.has(k) && self.
|
|
158
|
+
return self._itemsCache.has(k) && !self._errorsMap.has(k);
|
|
146
159
|
},
|
|
147
160
|
get error() { return self.getLastError(key); },
|
|
148
|
-
|
|
161
|
+
/** @deprecated Use {@link error} instead. */
|
|
162
|
+
get errorMessage() {
|
|
163
|
+
const err = self.getLastError(key);
|
|
164
|
+
return err != null ? (0, safe_js_1.formatError)(err) : null;
|
|
165
|
+
},
|
|
149
166
|
get isLoading() {
|
|
150
167
|
const v = self.getIsLoading(key);
|
|
151
168
|
return v === undefined ? null : v;
|
|
152
169
|
},
|
|
153
170
|
get promise() { return self.get(key); },
|
|
154
171
|
refresh() {
|
|
155
|
-
self.
|
|
156
|
-
|
|
172
|
+
return self.refresh(key);
|
|
173
|
+
},
|
|
174
|
+
hasResolvedValue() {
|
|
175
|
+
return lazy.hasValue;
|
|
157
176
|
},
|
|
158
177
|
};
|
|
178
|
+
return lazy;
|
|
159
179
|
}
|
|
160
180
|
/**
|
|
161
181
|
* Returns a {@link DeferredGetter} object for a specified key.
|
|
@@ -178,7 +198,11 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
178
198
|
/**
|
|
179
199
|
* Returns the loading state of an item.
|
|
180
200
|
*
|
|
181
|
-
*
|
|
201
|
+
* Note: background refreshes via `refresh()` do **not** update per-key loading status.
|
|
202
|
+
* This method only reflects fetches initiated by `get()`. Use `loadingCount` for
|
|
203
|
+
* a global indicator that includes background refreshes.
|
|
204
|
+
*
|
|
205
|
+
* @returns true if loading, false if loading completed, undefined if loading was not started yet (or invalidated).
|
|
182
206
|
*/
|
|
183
207
|
getIsLoading(id) {
|
|
184
208
|
const key = this._pk(id);
|
|
@@ -196,10 +220,7 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
196
220
|
*/
|
|
197
221
|
getIsValid(id) {
|
|
198
222
|
const key = this._pk(id);
|
|
199
|
-
|
|
200
|
-
return false;
|
|
201
|
-
}
|
|
202
|
-
return !this.getIsInvalidated(key);
|
|
223
|
+
return this._itemsCache.has(key) && !this.getIsInvalidated(key);
|
|
203
224
|
}
|
|
204
225
|
/**
|
|
205
226
|
* Returns the last error that occurred during fetching for the specified key.
|
|
@@ -210,19 +231,20 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
210
231
|
const key = this._pk(id);
|
|
211
232
|
return this._errorsMap.get(key) ?? null;
|
|
212
233
|
}
|
|
213
|
-
/** Returns the current cached value, optionally triggering a fetch. */
|
|
234
|
+
/** Returns the current cached value, optionally triggering a fetch. Falls back to the initial value if configured. */
|
|
214
235
|
getCurrent(id, initiateFetch = true) {
|
|
215
|
-
const
|
|
236
|
+
const key = this._pk(id);
|
|
216
237
|
if (initiateFetch) {
|
|
217
238
|
this.get(id);
|
|
218
239
|
}
|
|
219
|
-
this.
|
|
220
|
-
|
|
240
|
+
const result = this._getCachedOrInitial(key, id);
|
|
241
|
+
this.logger.log(key, 'getCurrent: returns', result);
|
|
242
|
+
return result;
|
|
221
243
|
}
|
|
222
244
|
/** Returns true if the item is cached or fetching was initiated. Does not initiate fetching. */
|
|
223
245
|
hasKey(id) {
|
|
224
246
|
const key = this._pk(id);
|
|
225
|
-
return this._itemsCache.
|
|
247
|
+
return this._itemsCache.has(key) || this._itemsStatus.has(key);
|
|
226
248
|
}
|
|
227
249
|
keys(iterate = false) {
|
|
228
250
|
const iterator = this._itemsCache.keys();
|
|
@@ -249,14 +271,26 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
249
271
|
/** Instantly invalidates the cached item for the specified id, like it was never fetched/accessed. */
|
|
250
272
|
invalidate(id) {
|
|
251
273
|
const key = this._pk(id);
|
|
252
|
-
this.
|
|
274
|
+
this._deleteKey(key);
|
|
253
275
|
this._errorsMap.delete(key);
|
|
254
276
|
this._timestamps.delete(key);
|
|
277
|
+
this._activeFetchPromises.delete(key);
|
|
255
278
|
}
|
|
256
|
-
/**
|
|
257
|
-
|
|
279
|
+
/** Injects a value into the cache for the specified key, as if it had been fetched. Sets the timestamp and clears any previous error. Cancels any in-flight fetch for this key. */
|
|
280
|
+
set(id, value) {
|
|
258
281
|
const key = this._pk(id);
|
|
259
|
-
this.
|
|
282
|
+
this._fetchCache.delete(key);
|
|
283
|
+
this._itemsStatus.delete(key);
|
|
284
|
+
this._itemsCache.set(key, value);
|
|
285
|
+
this._timestamps.set(key, Date.now());
|
|
286
|
+
this._errorsMap.delete(key);
|
|
287
|
+
this._activeFetchPromises.delete(key);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* @deprecated Use {@link set} instead.
|
|
291
|
+
*/
|
|
292
|
+
updateValueDirectly(id, value) {
|
|
293
|
+
return this.set(id, value);
|
|
260
294
|
}
|
|
261
295
|
/**
|
|
262
296
|
* Iterates over all cached items and removes those that are invalid (expired).
|
|
@@ -272,9 +306,10 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
272
306
|
}
|
|
273
307
|
}
|
|
274
308
|
for (const key of keysToRemove) {
|
|
275
|
-
this.
|
|
309
|
+
this._deleteKey(key);
|
|
276
310
|
this._errorsMap.delete(key);
|
|
277
311
|
this._timestamps.delete(key);
|
|
312
|
+
this._activeFetchPromises.delete(key);
|
|
278
313
|
removed++;
|
|
279
314
|
}
|
|
280
315
|
return removed;
|
|
@@ -288,12 +323,18 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
288
323
|
this._fetchCache.clear();
|
|
289
324
|
this._errorsMap.clear();
|
|
290
325
|
this._timestamps.clear();
|
|
326
|
+
this._activeFetchPromises.clear();
|
|
291
327
|
}
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
328
|
+
// ─── Protected hooks ─────────────────────────────────────────────────
|
|
329
|
+
/** Returns the cached value if present, otherwise the initial value for the key. */
|
|
330
|
+
_getCachedOrInitial(key, id) {
|
|
331
|
+
return this._itemsCache.has(key) ? this._itemsCache.get(key) : this._getInitialValue(id);
|
|
332
|
+
}
|
|
333
|
+
/** @internal Deletes all cache entries for a key (item, promise, status). */
|
|
334
|
+
_deleteKey(key) {
|
|
335
|
+
this._fetchCache.delete(key);
|
|
336
|
+
this._itemsStatus.delete(key);
|
|
337
|
+
this._itemsCache.delete(key);
|
|
297
338
|
}
|
|
298
339
|
/** Updates the loading status for the specified key. Override to add a hook. */
|
|
299
340
|
setStatus(key, status) {
|
|
@@ -320,19 +361,14 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
320
361
|
this._fetchCache.delete(key);
|
|
321
362
|
this._itemsStatus.set(key, false);
|
|
322
363
|
}
|
|
364
|
+
/** Hooks into the superseded fetch cleanup. Only decrements loading count — does not touch fetch cache or status. */
|
|
365
|
+
onFetchSuperseded(_key) {
|
|
366
|
+
this._loadingCount.value = this._loadingCount.value - 1;
|
|
367
|
+
}
|
|
323
368
|
/** Hooks into the result preparation process, before it's stored into the cache. */
|
|
324
369
|
prepareResult(res) {
|
|
325
370
|
return res;
|
|
326
371
|
}
|
|
327
|
-
/** @internal Helper to set or delete a value in a map. */
|
|
328
|
-
static _setMapX(key, map, val) {
|
|
329
|
-
if (val === undefined) {
|
|
330
|
-
map.delete(key);
|
|
331
|
-
}
|
|
332
|
-
else {
|
|
333
|
-
map.set(key, val);
|
|
334
|
-
}
|
|
335
|
-
}
|
|
336
372
|
}
|
|
337
373
|
exports.PromiseCacheCore = PromiseCacheCore;
|
|
338
374
|
//# sourceMappingURL=core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/structures/promiseCache/core.ts"],"names":[],"mappings":";;;AACA,0DAAoD;AACpD,oDAA8C;AAI9C;;;;;;;;;;;;;GAaG;AACH,MAAsB,
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/structures/promiseCache/core.ts"],"names":[],"mappings":"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"}
|
package/esm/lazy/promise.js
CHANGED
|
@@ -25,8 +25,13 @@ export class LazyPromise {
|
|
|
25
25
|
}
|
|
26
26
|
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
27
27
|
get isLoading() { return this._state; }
|
|
28
|
-
|
|
28
|
+
/** Returns true if a value of type `T` has been successfully loaded (no error). */
|
|
29
|
+
get hasValue() { return this._state === false && this._error == null; }
|
|
29
30
|
get error() { return this._error; }
|
|
31
|
+
/** @inheritdoc */
|
|
32
|
+
hasResolvedValue() {
|
|
33
|
+
return this._state === false && this._error == null;
|
|
34
|
+
}
|
|
30
35
|
/** @deprecated Use {@link error} instead. */
|
|
31
36
|
get errorMessage() {
|
|
32
37
|
return this._error != null ? formatError(this._error) : null;
|
|
@@ -167,7 +172,9 @@ export class LazyPromise {
|
|
|
167
172
|
}
|
|
168
173
|
if (nextState !== undefined) {
|
|
169
174
|
if (this._isAsyncStateChange) {
|
|
170
|
-
|
|
175
|
+
Promise.resolve().then(() => {
|
|
176
|
+
this.updateState(nextState);
|
|
177
|
+
});
|
|
171
178
|
}
|
|
172
179
|
else {
|
|
173
180
|
this.updateState(nextState);
|
|
@@ -179,7 +186,16 @@ export class LazyPromise {
|
|
|
179
186
|
// Case when refreshing already is happening - we have an active promise
|
|
180
187
|
return;
|
|
181
188
|
}
|
|
182
|
-
|
|
189
|
+
let factoryResult;
|
|
190
|
+
try {
|
|
191
|
+
factoryResult = this._factory(refreshing);
|
|
192
|
+
}
|
|
193
|
+
catch (err) {
|
|
194
|
+
// Re-throwing the original error from the synchronous factory call
|
|
195
|
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
196
|
+
factoryResult = Promise.reject(err);
|
|
197
|
+
}
|
|
198
|
+
const factoryPromise = Promise.resolve(factoryResult)
|
|
183
199
|
.then(res => {
|
|
184
200
|
if (!this._activeFactoryPromise) {
|
|
185
201
|
// this promise was abandoned: was superseded or reset called
|
|
@@ -198,10 +214,15 @@ export class LazyPromise {
|
|
|
198
214
|
return this._activeFactoryPromise;
|
|
199
215
|
})
|
|
200
216
|
.catch(err => {
|
|
201
|
-
if (!this._activeFactoryPromise
|
|
217
|
+
if (!this._activeFactoryPromise) {
|
|
218
|
+
// Abandoned (reset/dispose was called) — don't corrupt state
|
|
219
|
+
return this._instance ?? this._initial;
|
|
220
|
+
}
|
|
221
|
+
if (this._activeFactoryPromise === factoryPromise) {
|
|
202
222
|
return this.onRejected(err);
|
|
203
223
|
}
|
|
204
|
-
|
|
224
|
+
// Stale promise — delegate to the latest active promise instead of re-throwing
|
|
225
|
+
return this._activeFactoryPromise;
|
|
205
226
|
});
|
|
206
227
|
const hadActive = !!this._activeFactoryPromise;
|
|
207
228
|
// This is now the active promise - any previous one is superseded
|
package/esm/lazy/promise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKnD;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;IAEhC,gFAAgF;IACxE,MAAM,GAAmB,IAAI,CAAC;IAE9B,mBAAmB,GAAG,KAAK,CAAC;IAE5B,QAAQ,
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
|