@zajno/common 2.8.8 → 2.8.10
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 +1 -1
- package/cjs/functions/safe.js +16 -0
- package/cjs/functions/safe.js.map +1 -1
- package/cjs/lazy/lazy.js +6 -10
- package/cjs/lazy/lazy.js.map +1 -1
- package/cjs/lazy/light.js +4 -1
- package/cjs/lazy/light.js.map +1 -1
- package/cjs/lazy/promise.js +26 -14
- package/cjs/lazy/promise.js.map +1 -1
- package/cjs/structures/promiseCache/cache.js +112 -26
- package/cjs/structures/promiseCache/cache.js.map +1 -1
- package/cjs/structures/promiseCache/core.js +82 -8
- package/cjs/structures/promiseCache/core.js.map +1 -1
- package/cjs/structures/promiseCache/types.js +2 -2
- package/cjs/structures/promiseCache/types.js.map +1 -1
- package/esm/functions/safe.js +15 -0
- package/esm/functions/safe.js.map +1 -1
- package/esm/lazy/lazy.js +6 -10
- package/esm/lazy/lazy.js.map +1 -1
- package/esm/lazy/light.js +4 -1
- package/esm/lazy/light.js.map +1 -1
- package/esm/lazy/promise.js +26 -14
- package/esm/lazy/promise.js.map +1 -1
- package/esm/structures/promiseCache/cache.js +112 -26
- package/esm/structures/promiseCache/cache.js.map +1 -1
- package/esm/structures/promiseCache/core.js +82 -8
- package/esm/structures/promiseCache/core.js.map +1 -1
- package/esm/structures/promiseCache/types.js +2 -2
- package/esm/structures/promiseCache/types.js.map +1 -1
- package/package.json +1 -1
- package/types/functions/safe.d.ts +7 -0
- package/types/lazy/lazy.d.ts +3 -2
- package/types/lazy/promise.d.ts +5 -4
- package/types/lazy/types.d.ts +20 -8
- package/types/structures/promiseCache/cache.d.ts +56 -16
- package/types/structures/promiseCache/core.d.ts +71 -18
- package/types/structures/promiseCache/types.d.ts +26 -7
- 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; }
|
|
@@ -123,10 +136,50 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
123
136
|
return `[PromiseCache:${name || '?'}]`;
|
|
124
137
|
}
|
|
125
138
|
// ─── Public API: reading ─────────────────────────────────────────────
|
|
139
|
+
/**
|
|
140
|
+
* Returns an {@link ILazyPromise} handle for a specified cache key.
|
|
141
|
+
*
|
|
142
|
+
* The returned object implements the same interface as a standalone `LazyPromise`,
|
|
143
|
+
* allowing consumers to use a single `ILazyPromise<T>` interface regardless of whether
|
|
144
|
+
* the data comes from a single lazy value or a keyed cache.
|
|
145
|
+
*
|
|
146
|
+
* - `value` / `promise` trigger a fetch if not started.
|
|
147
|
+
* - `currentValue` reads without triggering.
|
|
148
|
+
* - `refresh()` re-fetches while keeping the stale value available.
|
|
149
|
+
*/
|
|
150
|
+
getLazy(key) {
|
|
151
|
+
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
152
|
+
const self = this;
|
|
153
|
+
return {
|
|
154
|
+
get value() { return self.getCurrent(key); },
|
|
155
|
+
get currentValue() { return self.getCurrent(key, false); },
|
|
156
|
+
get hasValue() {
|
|
157
|
+
const k = self._pk(key);
|
|
158
|
+
return self._itemsCache.has(k);
|
|
159
|
+
},
|
|
160
|
+
get error() { return self.getLastError(key); },
|
|
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
|
+
},
|
|
166
|
+
get isLoading() {
|
|
167
|
+
const v = self.getIsLoading(key);
|
|
168
|
+
return v === undefined ? null : v;
|
|
169
|
+
},
|
|
170
|
+
get promise() { return self.get(key); },
|
|
171
|
+
refresh() {
|
|
172
|
+
return self.refresh(key);
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
126
176
|
/**
|
|
127
177
|
* Returns a {@link DeferredGetter} object for a specified key.
|
|
128
178
|
*
|
|
129
179
|
* This can be used to access the current value, promise, loading state, and last error of the item.
|
|
180
|
+
*
|
|
181
|
+
* @deprecated Use {@link getLazy} instead — it returns an `ILazyPromise<T>` which is the standard
|
|
182
|
+
* interface shared with standalone `LazyPromise` instances.
|
|
130
183
|
*/
|
|
131
184
|
getDeferred(key) {
|
|
132
185
|
// eslint-disable-next-line @typescript-eslint/no-this-alias
|
|
@@ -141,7 +194,11 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
141
194
|
/**
|
|
142
195
|
* Returns the loading state of an item.
|
|
143
196
|
*
|
|
144
|
-
*
|
|
197
|
+
* Note: background refreshes via `refresh()` do **not** update per-key loading status.
|
|
198
|
+
* This method only reflects fetches initiated by `get()`. Use `loadingCount` for
|
|
199
|
+
* a global indicator that includes background refreshes.
|
|
200
|
+
*
|
|
201
|
+
* @returns true if loading, false if loading completed, undefined if loading was not started yet (or invalidated).
|
|
145
202
|
*/
|
|
146
203
|
getIsLoading(id) {
|
|
147
204
|
const key = this._pk(id);
|
|
@@ -173,14 +230,15 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
173
230
|
const key = this._pk(id);
|
|
174
231
|
return this._errorsMap.get(key) ?? null;
|
|
175
232
|
}
|
|
176
|
-
/** Returns the current cached value, optionally triggering a fetch. */
|
|
233
|
+
/** Returns the current cached value, optionally triggering a fetch. Falls back to the initial value if configured. */
|
|
177
234
|
getCurrent(id, initiateFetch = true) {
|
|
178
235
|
const { item, key } = this._getCurrent(id);
|
|
179
236
|
if (initiateFetch) {
|
|
180
237
|
this.get(id);
|
|
181
238
|
}
|
|
182
|
-
|
|
183
|
-
|
|
239
|
+
const result = item ?? this._getInitialValue(id);
|
|
240
|
+
this.logger.log(key, 'getCurrent: returns', result);
|
|
241
|
+
return result;
|
|
184
242
|
}
|
|
185
243
|
/** Returns true if the item is cached or fetching was initiated. Does not initiate fetching. */
|
|
186
244
|
hasKey(id) {
|
|
@@ -215,11 +273,21 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
215
273
|
this._set(key, undefined, undefined, undefined);
|
|
216
274
|
this._errorsMap.delete(key);
|
|
217
275
|
this._timestamps.delete(key);
|
|
276
|
+
this._activeFetchPromises.delete(key);
|
|
218
277
|
}
|
|
219
|
-
/**
|
|
220
|
-
|
|
278
|
+
/** 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. */
|
|
279
|
+
set(id, value) {
|
|
221
280
|
const key = this._pk(id);
|
|
222
281
|
this._set(key, value, undefined, undefined);
|
|
282
|
+
this._timestamps.set(key, Date.now());
|
|
283
|
+
this._errorsMap.delete(key);
|
|
284
|
+
this._activeFetchPromises.delete(key);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* @deprecated Use {@link set} instead.
|
|
288
|
+
*/
|
|
289
|
+
updateValueDirectly(id, value) {
|
|
290
|
+
return this.set(id, value);
|
|
223
291
|
}
|
|
224
292
|
/**
|
|
225
293
|
* Iterates over all cached items and removes those that are invalid (expired).
|
|
@@ -238,6 +306,7 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
238
306
|
this._set(key, undefined, undefined, undefined);
|
|
239
307
|
this._errorsMap.delete(key);
|
|
240
308
|
this._timestamps.delete(key);
|
|
309
|
+
this._activeFetchPromises.delete(key);
|
|
241
310
|
removed++;
|
|
242
311
|
}
|
|
243
312
|
return removed;
|
|
@@ -251,6 +320,7 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
251
320
|
this._fetchCache.clear();
|
|
252
321
|
this._errorsMap.clear();
|
|
253
322
|
this._timestamps.clear();
|
|
323
|
+
this._activeFetchPromises.clear();
|
|
254
324
|
}
|
|
255
325
|
/** @internal updates all caches states at once. */
|
|
256
326
|
_set(key, item, promise, isLoading) {
|
|
@@ -283,6 +353,10 @@ class PromiseCacheCore extends loggable_js_1.Loggable {
|
|
|
283
353
|
this._fetchCache.delete(key);
|
|
284
354
|
this._itemsStatus.set(key, false);
|
|
285
355
|
}
|
|
356
|
+
/** Hooks into the superseded fetch cleanup. Only decrements loading count — does not touch fetch cache or status. */
|
|
357
|
+
onFetchSuperseded(_key) {
|
|
358
|
+
this._loadingCount.value = this._loadingCount.value - 1;
|
|
359
|
+
}
|
|
286
360
|
/** Hooks into the result preparation process, before it's stored into the cache. */
|
|
287
361
|
prepareResult(res) {
|
|
288
362
|
return res;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/structures/promiseCache/core.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../../../src/structures/promiseCache/core.ts"],"names":[],"mappings":";;;AACA,qDAAsD;AACtD,0DAAoD;AACpD,oDAA8C;AAI9C;;;;;;;;;;;;;GAaG;AACH,MAAsB,gBAA4E,SAAQ,sBAAQ;IA6BvF;IACA;IA5BvB,0CAA0C;IACvB,WAAW,CAAmC;IAEjE,gEAAgE;IAC7C,YAAY,CAA6B;IAE5D,kCAAkC;IACf,aAAa,CAAsB;IAEtD,mEAAmE;IAChD,WAAW,CAA2C;IAEzE,oEAAoE;IACjD,UAAU,CAA6B;IAE1D,qEAAqE;IAClD,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE3D;;;OAGG;IACgB,oBAAoB,GAAG,IAAI,GAAG,EAAiC,CAAC;IAEzE,QAAQ,GAAG,CAAC,CAAC;IAEvB,YACuB,UAAsC,EACtC,SAAsC;QAEzD,KAAK,EAAE,CAAC;QAHW,eAAU,GAAV,UAAU,CAA4B;QACtC,cAAS,GAAT,SAAS,CAA6B;QAIzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;QACpD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;IAClD,CAAC;IAED,wEAAwE;IAExE;;;;;;;OAOG;IACH,IAAW,YAAY,KAAa,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAEtE,4DAA4D;IAC5D,IAAW,WAAW,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAElE,gFAAgF;IAChF,IAAW,aAAa,KAAa,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;IAEpE,+EAA+E;IAC/E,IAAW,YAAY;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,KAAK,EAAE,CAAC;YACZ,CAAC;QACL,CAAC;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,wEAAwE;IAExE;;;;;OAKG;IACO,uBAAuB;QAC7B,OAAO,IAAI,gBAAK,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACO,qBAAqB;QAC3B,OAAO,IAAI,GAAG,EAAyB,CAAC;IAC5C,CAAC;IAED;;;;;OAKG;IACO,sBAAsB;QAC5B,OAAO,IAAI,GAAG,EAAmB,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACO,qBAAqB;QAC3B,OAAO,IAAI,GAAG,EAAiC,CAAC;IACpD,CAAC;IAED;;;;;OAKG;IACO,oBAAoB;QAC1B,OAAO,IAAI,GAAG,EAAmB,CAAC;IACtC,CAAC;IAED,wEAAwE;IAE9D,GAAG,CAAC,CAAI;QACd,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACjE,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC;QACb,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC/D,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAES,aAAa,CAAC,IAAwB;QAC5C,OAAO,iBAAiB,IAAI,IAAI,GAAG,GAAG,CAAC;IAC3C,CAAC;IAED,wEAAwE;IAExE;;;;;;;;;;OAUG;IACH,OAAO,CAAC,GAAM;QACV,4DAA4D;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACH,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC5C,IAAI,YAAY,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,QAAQ;gBACR,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACxB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,6CAA6C;YAC7C,IAAI,YAAY;gBACZ,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACnC,OAAO,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,IAAA,qBAAW,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjD,CAAC;YACD,IAAI,SAAS;gBACT,MAAM,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBACjC,OAAO,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;YACD,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,OAAO;gBACH,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7B,CAAC;SACJ,CAAC;IACN,CAAC;IAED;;;;;;;OAOG;IACH,WAAW,CAAC,GAAM;QACd,4DAA4D;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,OAAO;YACH,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACjD,CAAC;IACN,CAAC;IAED;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAK;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,GAAG,EAAE,CAAC;YACN,OAAO,GAAG,CAAC;QACf,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,EAAK;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,EAAK;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,sHAAsH;IACtH,UAAU,CAAC,EAAK,EAAE,aAAa,GAAG,IAAI;QAClC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAC3C,IAAI,aAAa,EAAE,CAAC;YAChB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC;IAClB,CAAC;IAmBD,gGAAgG;IAChG,MAAM,CAAC,EAAK;QACR,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;IAC/F,CAAC;IAQD,IAAI,CAAC,UAAmB,KAAK;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACzC,OAAO,OAAO;YACV,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAQD,UAAU,CAAC,UAAmB,KAAK;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,IAAI,CAAC,EAAE,EAAE,CAAC;YACN,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC;YACb,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC7B,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IACT,CAAC;IAED,wEAAwE;IAExE,sGAAsG;IACtG,UAAU,CAAC,EAAK;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,mLAAmL;IACnL,GAAG,CAAC,EAAK,EAAE,KAAQ;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,mBAAmB,CAAC,EAAK,EAAE,KAAQ;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACJ,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,YAAY,GAAa,EAAE,CAAC;QAElC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YACxC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;QAED,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtC,OAAO,EAAE,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,qDAAqD;IACrD,KAAK;QACD,EAAE,IAAI,CAAC,QAAQ,CAAC;QAChB,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;QAE7B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;IAgBD,mDAAmD;IACzC,IAAI,CAAC,GAAW,EAAE,IAAmB,EAAE,OAA+B,EAAE,SAA8B;QAC5G,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC1D,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAC7D,gBAAgB,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,gFAAgF;IACtE,SAAS,CAAC,GAAW,EAAE,MAAe;QAC5C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC/C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACvC,CAAC;IAED,yEAAyE;IAC/D,UAAU,CAAC,GAAW,EAAE,OAA8B;QAC5D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,uEAAuE;IAC7D,WAAW,CAAC,GAAW,EAAE,GAAM;QACrC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC/B,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,qDAAqD;IAC3C,aAAa,CAAC,IAAY;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,uDAAuD;IAC7C,eAAe,CAAC,GAAW;QACjC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC;IAED,qHAAqH;IAC3G,iBAAiB,CAAC,IAAY;QACpC,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5D,CAAC;IAED,oFAAoF;IAC1E,aAAa,CAAC,GAAM;QAC1B,OAAO,GAAG,CAAC;IACf,CAAC;IAED,0DAA0D;IAChD,MAAM,CAAC,QAAQ,CAAI,GAAW,EAAE,GAAyB,EAAE,GAAM;QACvE,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;aAAM,CAAC;YACJ,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACtB,CAAC;IACL,CAAC;CACJ;AAncD,4CAmcC"}
|
|
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.DeferredGetter = void 0;
|
|
4
4
|
var DeferredGetter;
|
|
5
5
|
(function (DeferredGetter) {
|
|
6
|
-
const _resolvedPromise = Promise.resolve(
|
|
6
|
+
const _resolvedPromise = Promise.resolve(undefined);
|
|
7
7
|
/** Empty resolved value. */
|
|
8
8
|
DeferredGetter.Empty = {
|
|
9
|
-
get current() { return
|
|
9
|
+
get current() { return undefined; },
|
|
10
10
|
get promise() { return _resolvedPromise; },
|
|
11
11
|
get isLoading() { return false; },
|
|
12
12
|
get error() { return null; },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/structures/promiseCache/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/structures/promiseCache/types.ts"],"names":[],"mappings":";;;AAmBA,IAAiB,cAAc,CAU9B;AAVD,WAAiB,cAAc;IAC3B,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAY,SAAS,CAAC,CAAC;IAE/D,4BAA4B;IACf,oBAAK,GAAG;QACjB,IAAI,OAAO,KAAgB,OAAO,SAAS,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,KAAyB,OAAO,gBAAgB,CAAC,CAAC,CAAC;QAC9D,IAAI,SAAS,KAAK,OAAO,KAAK,CAAC,CAAC,CAAC;QACjC,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;KACC,CAAC;AACtC,CAAC,EAVgB,cAAc,8BAAd,cAAc,QAU9B"}
|
package/esm/functions/safe.js
CHANGED
|
@@ -8,4 +8,19 @@ export function wrapAsync(fn, errorCb) {
|
|
|
8
8
|
}
|
|
9
9
|
};
|
|
10
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Formats an unknown caught value into a human-readable string.
|
|
13
|
+
*
|
|
14
|
+
* Useful at presentation boundaries where a display string is needed.
|
|
15
|
+
* Prefer keeping the raw error for programmatic handling (instanceof checks, .cause, etc.).
|
|
16
|
+
*/
|
|
17
|
+
export function formatError(err) {
|
|
18
|
+
if (typeof err === 'string') {
|
|
19
|
+
return err;
|
|
20
|
+
}
|
|
21
|
+
if (err instanceof Error) {
|
|
22
|
+
return err.message;
|
|
23
|
+
}
|
|
24
|
+
return String(err) || 'Unknown error';
|
|
25
|
+
}
|
|
11
26
|
//# sourceMappingURL=safe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/functions/safe.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAE,OAA4B;IAC/E,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,SAAS,CAAyB,EAA+C,EAAE,OAA4B;IAC3H,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACtB,IAAI,EAAE,EAAE,CAAC;YACL,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;IACL,CAAC,CAAC;AACN,CAAC"}
|
|
1
|
+
{"version":3,"file":"safe.js","sourceRoot":"","sources":["../../../src/functions/safe.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,YAAY,CAAC,OAAwB,EAAE,OAA4B;IAC/E,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,SAAS,CAAyB,EAA+C,EAAE,OAA4B;IAC3H,OAAO,CAAC,GAAG,IAAW,EAAE,EAAE;QACtB,IAAI,EAAE,EAAE,CAAC;YACL,YAAY,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACvC,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACf,CAAC;IACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,OAAO,CAAC;IACvB,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;AAC1C,CAAC"}
|
package/esm/lazy/lazy.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tryDispose } from '../functions/disposer.js';
|
|
2
|
+
import { formatError } from '../functions/safe.js';
|
|
2
3
|
/**
|
|
3
4
|
* Synchronous lazy-loading container that initializes a value on first access.
|
|
4
5
|
* The value is cached until reset or expired. Supports custom disposal and cache expiration.
|
|
@@ -19,6 +20,10 @@ export class Lazy {
|
|
|
19
20
|
}
|
|
20
21
|
get currentValue() { return this._instance; }
|
|
21
22
|
get error() { return this._error; }
|
|
23
|
+
/** @deprecated Use {@link error} instead. */
|
|
24
|
+
get errorMessage() {
|
|
25
|
+
return this._error != null ? formatError(this._error) : null;
|
|
26
|
+
}
|
|
22
27
|
/** Override me: additional way to make sure instance is valid */
|
|
23
28
|
get isValid() {
|
|
24
29
|
if (!this.hasValue) {
|
|
@@ -78,17 +83,8 @@ export class Lazy {
|
|
|
78
83
|
this.setInstance(res);
|
|
79
84
|
}
|
|
80
85
|
catch (e) {
|
|
81
|
-
this._error =
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
parseError(err) {
|
|
85
|
-
if (typeof err === 'string') {
|
|
86
|
-
return err;
|
|
87
|
-
}
|
|
88
|
-
if (err instanceof Error) {
|
|
89
|
-
return err.message;
|
|
86
|
+
this._error = e;
|
|
90
87
|
}
|
|
91
|
-
return String(err) || 'Unknown error';
|
|
92
88
|
}
|
|
93
89
|
}
|
|
94
90
|
//# sourceMappingURL=lazy.js.map
|
package/esm/lazy/lazy.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/lazy/lazy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/lazy/lazy.ts"],"names":[],"mappings":"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"}
|
package/esm/lazy/light.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { formatError } from '../functions/safe.js';
|
|
1
2
|
export function createLazy(factory) {
|
|
2
3
|
const _factory = factory;
|
|
3
4
|
let _instance = undefined;
|
|
@@ -10,7 +11,7 @@ export function createLazy(factory) {
|
|
|
10
11
|
_instance = _factory();
|
|
11
12
|
}
|
|
12
13
|
catch (e) {
|
|
13
|
-
_error = e
|
|
14
|
+
_error = e;
|
|
14
15
|
throw e;
|
|
15
16
|
}
|
|
16
17
|
}
|
|
@@ -19,6 +20,8 @@ export function createLazy(factory) {
|
|
|
19
20
|
get currentValue() { return _instance; },
|
|
20
21
|
get hasValue() { return _instance !== undefined; },
|
|
21
22
|
get error() { return _error; },
|
|
23
|
+
/** @deprecated Use {@link error} instead. */
|
|
24
|
+
get errorMessage() { return _error != null ? formatError(_error) : null; },
|
|
22
25
|
reset: () => {
|
|
23
26
|
_instance = undefined;
|
|
24
27
|
_error = null;
|
package/esm/lazy/light.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"light.js","sourceRoot":"","sources":["../../../src/lazy/light.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"light.js","sourceRoot":"","sources":["../../../src/lazy/light.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAInD,MAAM,UAAU,UAAU,CAAI,OAAgB;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC;IACzB,IAAI,SAAS,GAAkB,SAAS,CAAC;IACzC,IAAI,MAAM,GAAY,IAAI,CAAC;IAE3B,MAAM,GAAG,GAA8C;QACnD,IAAI,KAAK;YACL,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,GAAG,IAAI,CAAC;gBACd,IAAI,CAAC;oBACD,SAAS,GAAG,QAAQ,EAAE,CAAC;gBAC3B,CAAC;gBAAC,OAAO,CAAU,EAAE,CAAC;oBAClB,MAAM,GAAG,CAAC,CAAC;oBACX,MAAM,CAAC,CAAC;gBACZ,CAAC;YACL,CAAC;YACD,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,YAAY,KAAK,OAAO,SAAS,CAAC,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,OAAO,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC;QAC9B,6CAA6C;QAC7C,IAAI,YAAY,KAAK,OAAO,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,KAAK,EAAE,GAAG,EAAE;YACR,SAAS,GAAG,SAAS,CAAC;YACtB,MAAM,GAAG,IAAI,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE;KAC7B,CAAC;IAEF,OAAO,GAAG,CAAC;AACf,CAAC"}
|
package/esm/lazy/promise.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { tryDispose } from '../functions/disposer.js';
|
|
2
|
+
import { formatError } from '../functions/safe.js';
|
|
2
3
|
/**
|
|
3
4
|
* Asynchronous lazy-loading container that initializes via a promise-based factory.
|
|
4
5
|
* Handles concurrent operations with "latest wins" semantics: multiple refreshes are automatically
|
|
@@ -26,6 +27,10 @@ export class LazyPromise {
|
|
|
26
27
|
get isLoading() { return this._state; }
|
|
27
28
|
get hasValue() { return this._state === false; }
|
|
28
29
|
get error() { return this._error; }
|
|
30
|
+
/** @deprecated Use {@link error} instead. */
|
|
31
|
+
get errorMessage() {
|
|
32
|
+
return this._error != null ? formatError(this._error) : null;
|
|
33
|
+
}
|
|
29
34
|
get promise() {
|
|
30
35
|
this.ensureInstanceLoading();
|
|
31
36
|
return this._promise;
|
|
@@ -162,7 +167,9 @@ export class LazyPromise {
|
|
|
162
167
|
}
|
|
163
168
|
if (nextState !== undefined) {
|
|
164
169
|
if (this._isAsyncStateChange) {
|
|
165
|
-
|
|
170
|
+
Promise.resolve().then(() => {
|
|
171
|
+
this.updateState(nextState);
|
|
172
|
+
});
|
|
166
173
|
}
|
|
167
174
|
else {
|
|
168
175
|
this.updateState(nextState);
|
|
@@ -174,7 +181,16 @@ export class LazyPromise {
|
|
|
174
181
|
// Case when refreshing already is happening - we have an active promise
|
|
175
182
|
return;
|
|
176
183
|
}
|
|
177
|
-
|
|
184
|
+
let factoryResult;
|
|
185
|
+
try {
|
|
186
|
+
factoryResult = this._factory(refreshing);
|
|
187
|
+
}
|
|
188
|
+
catch (err) {
|
|
189
|
+
// Re-throwing the original error from the synchronous factory call
|
|
190
|
+
// eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors
|
|
191
|
+
factoryResult = Promise.reject(err);
|
|
192
|
+
}
|
|
193
|
+
const factoryPromise = Promise.resolve(factoryResult)
|
|
178
194
|
.then(res => {
|
|
179
195
|
if (!this._activeFactoryPromise) {
|
|
180
196
|
// this promise was abandoned: was superseded or reset called
|
|
@@ -193,10 +209,15 @@ export class LazyPromise {
|
|
|
193
209
|
return this._activeFactoryPromise;
|
|
194
210
|
})
|
|
195
211
|
.catch(err => {
|
|
196
|
-
if (!this._activeFactoryPromise
|
|
212
|
+
if (!this._activeFactoryPromise) {
|
|
213
|
+
// Abandoned (reset/dispose was called) — don't corrupt state
|
|
214
|
+
return this._instance ?? this._initial;
|
|
215
|
+
}
|
|
216
|
+
if (this._activeFactoryPromise === factoryPromise) {
|
|
197
217
|
return this.onRejected(err);
|
|
198
218
|
}
|
|
199
|
-
|
|
219
|
+
// Stale promise — delegate to the latest active promise instead of re-throwing
|
|
220
|
+
return this._activeFactoryPromise;
|
|
200
221
|
});
|
|
201
222
|
const hadActive = !!this._activeFactoryPromise;
|
|
202
223
|
// This is now the active promise - any previous one is superseded
|
|
@@ -221,19 +242,10 @@ export class LazyPromise {
|
|
|
221
242
|
this._state = isLoading;
|
|
222
243
|
}
|
|
223
244
|
setError(err) {
|
|
224
|
-
this._error =
|
|
245
|
+
this._error = err;
|
|
225
246
|
}
|
|
226
247
|
clearError() {
|
|
227
248
|
this._error = null;
|
|
228
249
|
}
|
|
229
|
-
parseError(err) {
|
|
230
|
-
if (typeof err === 'string') {
|
|
231
|
-
return err;
|
|
232
|
-
}
|
|
233
|
-
if (err instanceof Error) {
|
|
234
|
-
return err.message;
|
|
235
|
-
}
|
|
236
|
-
return String(err) || 'Unknown error';
|
|
237
|
-
}
|
|
238
250
|
}
|
|
239
251
|
//# sourceMappingURL=promise.js.map
|
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;
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
|