@zajno/common 2.8.1 → 2.8.3

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.
Files changed (33) hide show
  1. package/README.md +2 -2
  2. package/cjs/functions/{throttle.js → debounce.js} +8 -8
  3. package/cjs/functions/{throttle.js.map → debounce.js.map} +1 -1
  4. package/cjs/functions/index.js +1 -1
  5. package/cjs/lazy/lazy.js +8 -0
  6. package/cjs/lazy/lazy.js.map +1 -1
  7. package/cjs/lazy/promise.js +118 -89
  8. package/cjs/lazy/promise.js.map +1 -1
  9. package/cjs/observing/debouncedEvent.js +20 -0
  10. package/cjs/observing/{throttledEvent.js.map → debouncedEvent.js.map} +1 -1
  11. package/cjs/structures/promiseCache.js +2 -2
  12. package/esm/functions/{throttle.js → debounce.js} +5 -5
  13. package/esm/functions/{throttle.js.map → debounce.js.map} +1 -1
  14. package/esm/functions/index.js +1 -1
  15. package/esm/lazy/lazy.js +8 -0
  16. package/esm/lazy/lazy.js.map +1 -1
  17. package/esm/lazy/promise.js +118 -89
  18. package/esm/lazy/promise.js.map +1 -1
  19. package/esm/observing/debouncedEvent.js +16 -0
  20. package/esm/observing/{throttledEvent.js.map → debouncedEvent.js.map} +1 -1
  21. package/esm/structures/promiseCache.js +2 -2
  22. package/package.json +1 -1
  23. package/tsconfig.cjs.tsbuildinfo +1 -1
  24. package/tsconfig.esm.tsbuildinfo +1 -1
  25. package/tsconfig.types.tsbuildinfo +1 -1
  26. package/types/functions/{throttle.d.ts → debounce.d.ts} +2 -2
  27. package/types/functions/index.d.ts +1 -1
  28. package/types/lazy/lazy.d.ts +8 -0
  29. package/types/lazy/promise.d.ts +39 -30
  30. package/types/lazy/types.d.ts +63 -54
  31. package/types/observing/{throttledEvent.d.ts → debouncedEvent.d.ts} +2 -2
  32. package/cjs/observing/throttledEvent.js +0 -20
  33. package/esm/observing/throttledEvent.js +0 -16
package/README.md CHANGED
@@ -22,7 +22,7 @@ The motivation to have this – just to control and organize some shared code th
22
22
 
23
23
  * [Fields](./src/fields/index.ts): work with object fields: skip/filter falsy, transfer falsy/changed; merge arrays of objects.
24
24
 
25
- * [Functions](./src/functions): [`assert`](./src/functions/assert.ts), [`IDisposable`/`Disposable`/`Disposer`](./src/functions/disposer.ts), [`ThrottleAction`/`ThrottleProcessor`](./src/functions/throttle.ts).
25
+ * [Functions](./src/functions): [`assert`](./src/functions/assert.ts), [`IDisposable`/`Disposable`/`Disposer`](./src/functions/disposer.ts), [`DebounceAction`/`DebounceProcessor`](./src/functions/debounce.ts).
26
26
 
27
27
  * [Lazy](./src/lazy): [`Lazy`](./src/lazy/singleton.ts) (sync), [`LazyPromise`](./src/lazy/promise.ts).
28
28
 
@@ -44,7 +44,7 @@ The motivation to have this – just to control and organize some shared code th
44
44
  * [Observing](./src/observing)
45
45
  - [`Event`](./src/observing/event.ts): a simple event emitter;
46
46
  - [`OneTimeLateEvent`](./src/observing/event.late.ts): an event emitter that can be listened to after it's been emitted;
47
- - Others: `ThrottledEvent`, `Timer`, `ProgressTracker` and more.
47
+ - Others: `DebouncedEvent`, `Timer`, `ProgressTracker` and more.
48
48
 
49
49
  * [Storage](./src/storage/index.ts): abstractions + helpers for sync/async storages;
50
50
 
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ThrottleProcessor = exports.ThrottleAction = void 0;
3
+ exports.DebounceProcessor = exports.DebounceAction = void 0;
4
4
  const manualPromise_js_1 = require("../async/manualPromise.js");
5
5
  const index_js_1 = require("../logger/index.js");
6
6
  const index_js_2 = require("../math/index.js");
7
7
  const safe_js_1 = require("./safe.js");
8
8
  /** Runs a callback after a timeout, ignoring all consecutive calls until the first is processed. */
9
- class ThrottleAction extends index_js_1.Loggable {
9
+ class DebounceAction extends index_js_1.Loggable {
10
10
  timeout;
11
11
  _timeoutRef = null;
12
12
  _postponedCb = null;
@@ -58,7 +58,7 @@ class ThrottleAction extends index_js_1.Loggable {
58
58
  // This is probably OK since the running call should cover the current one.
59
59
  // TODO Maybe just don't start timeout if the lock is set?
60
60
  // The reason for not doing that 👆 is there's still a valid case when previous is still working but it's legit to start a new one (e.g. some state has changed already)
61
- this.logger.warn('[ThrottleAction] THROTTLE LOCKED, but another call is forced. Skipping since the behavior is undefined.');
61
+ this.logger.warn('[DebounceAction] DEBOUNCE LOCKED, but another call is forced. Skipping since the behavior is undefined.');
62
62
  }
63
63
  else if (cb) {
64
64
  let result = undefined;
@@ -84,8 +84,8 @@ class ThrottleAction extends index_js_1.Loggable {
84
84
  return this._currentRun?.promise || Promise.resolve(undefined);
85
85
  }
86
86
  }
87
- exports.ThrottleAction = ThrottleAction;
88
- class ThrottleProcessor {
87
+ exports.DebounceAction = DebounceAction;
88
+ class DebounceProcessor {
89
89
  process;
90
90
  _queue = [];
91
91
  _action;
@@ -95,7 +95,7 @@ class ThrottleProcessor {
95
95
  if (!process) {
96
96
  throw new Error('Arg0 expected: process');
97
97
  }
98
- this._action = new ThrottleAction(timeout)
98
+ this._action = new DebounceAction(timeout)
99
99
  .useParallelRuns();
100
100
  }
101
101
  setLogger(logger) {
@@ -124,5 +124,5 @@ class ThrottleProcessor {
124
124
  this._promise = null;
125
125
  }
126
126
  }
127
- exports.ThrottleProcessor = ThrottleProcessor;
128
- //# sourceMappingURL=throttle.js.map
127
+ exports.DebounceProcessor = DebounceProcessor;
128
+ //# sourceMappingURL=debounce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/functions/throttle.ts"],"names":[],"mappings":";;;AAAA,gEAAoF;AACpF,iDAA4D;AAC5D,+CAA0C;AAE1C,uCAAyC;AAIzC,qGAAqG;AACrG,MAAa,cAAwB,SAAQ,mBAAQ;IAc9B;IAZX,WAAW,GAAyC,IAAI,CAAC;IACzD,YAAY,GAAuB,IAAI,CAAC;IACxC,OAAO,GAAmB,KAAK,CAAC;IAExC;;;QAGI;IACI,kBAAkB,GAAG,KAAK,CAAC;IAE3B,WAAW,GAAwC,IAAI,CAAC;IAEhE,YAAmB,UAAU,IAAI;QAC7B,KAAK,EAAE,CAAC;QADO,YAAO,GAAP,OAAO,CAAO;IAEjC,CAAC;IAEM,eAAe;QAClB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IAC7B,CAAC;IAED,MAAM,CAAC,EAAwB,EAAE,cAAc,GAAG,KAAK;QACnD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,oBAAoB;YACzC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACpB,IAAI,CAAC,WAAW,GAAG,IAAA,sCAAmB,GAAiB,CAAC;YAC5D,CAAC;YAED,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC;YAExC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;YACvB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAA,sBAAY,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjF,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7B,CAAC;IAED,QAAQ,GAAG,KAAK,IAAI,EAAE;QAClB,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAExB,IAAI,CAAC,KAAK,EAAE,CAAC;QAEb,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC3C,4HAA4H;YAC5H,2EAA2E;YAC3E,0DAA0D;YAC1D,wKAAwK;YACxK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yGAAyG,CAAC,CAAC;QAChI,CAAC;aAAM,IAAI,EAAE,EAAE,CAAC;YACZ,IAAI,MAAM,GAAkB,SAAS,CAAC;YACtC,MAAM,MAAM,GAAG,IAAA,iBAAM,EAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;gBACtB,MAAM,GAAG,MAAM,EAAE,EAAE,CAAC;gBACpB,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;gBACnB,OAAO,MAAM,CAAC;YAClB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACX,CAAC,EAAE,MAAM,CAAC,GAAY,CAAC,CAAC;gBACxB,OAAO,SAAS,CAAC;YACrB,CAAC;oBAAS,CAAC;gBACP,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;oBAC1B,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACzB,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,UAAU;QACN,OAAO,IAAI,CAAC,WAAW,EAAE,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACnE,CAAC;CACJ;AAxFD,wCAwFC;AAID,MAAa,iBAAiB;IAOG;IALZ,MAAM,GAAe,EAAE,CAAC;IACxB,OAAO,CAAsC;IAEtD,QAAQ,GAAkC,IAAI,CAAC;IAEvD,YAA6B,OAA+C,EAAE,OAAO,GAAG,IAAI;QAA/D,YAAO,GAAP,OAAO,CAAwC;QACxE,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC9C,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,OAAO,CAAC;aACrC,eAAe,EAAE,CAAC;IAC3B,CAAC;IAEM,SAAS,CAAC,MAAuB;QACpC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAc;QACrB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAE3D,OAAO;YACH,MAAM,EAAE,GAAG;YACX,KAAK;SACR,CAAC;IACN,CAAC;IAEO,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO;QACX,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC,CAAC;IAEF,KAAK;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,SAAoB,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;IACzB,CAAC;CACJ;AAhDD,8CAgDC"}
1
+ {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../../src/functions/debounce.ts"],"names":[],"mappings":"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"}
@@ -5,5 +5,5 @@ tslib_1.__exportStar(require("./assert.js"), exports);
5
5
  tslib_1.__exportStar(require("./disposer.symbols.js"), exports);
6
6
  tslib_1.__exportStar(require("./disposer.js"), exports);
7
7
  tslib_1.__exportStar(require("./safe.js"), exports);
8
- tslib_1.__exportStar(require("./throttle.js"), exports);
8
+ tslib_1.__exportStar(require("./debounce.js"), exports);
9
9
  //# sourceMappingURL=index.js.map
package/cjs/lazy/lazy.js CHANGED
@@ -2,6 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Lazy = void 0;
4
4
  const disposer_js_1 = require("../functions/disposer.js");
5
+ /**
6
+ * Synchronous lazy-loading container that initializes a value on first access.
7
+ * The value is cached until reset or expired. Supports custom disposal and cache expiration.
8
+ */
5
9
  class Lazy {
6
10
  _factory;
7
11
  _instance = undefined;
@@ -31,18 +35,22 @@ class Lazy {
31
35
  }
32
36
  return true;
33
37
  }
38
+ /** Provides custom cleanup logic when the instance is reset or disposed. */
34
39
  withDisposer(disposer) {
35
40
  this._disposer = disposer;
36
41
  return this;
37
42
  }
43
+ /** Configures automatic cache expiration using an expire tracker. */
38
44
  withExpire(tracker) {
39
45
  this._expireTracker = tracker;
40
46
  return this;
41
47
  }
48
+ /** Eagerly loads the value without accessing it. Useful for preloading. */
42
49
  prewarm() {
43
50
  this.ensureInstance();
44
51
  return this;
45
52
  }
53
+ /** Manually sets the cached value. */
46
54
  setInstance(instance) {
47
55
  this._instance = instance;
48
56
  if (this._instance !== undefined && this._expireTracker) {
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/lazy/lazy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/lazy/lazy.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.LazyPromise = void 0;
4
4
  const disposer_js_1 = require("../functions/disposer.js");
5
+ /**
6
+ * Asynchronous lazy-loading container that initializes via a promise-based factory.
7
+ * Handles concurrent operations with "latest wins" semantics: multiple refreshes are automatically
8
+ * coordinated so all awaiting promises receive the final value. Supports extensions for custom behavior.
9
+ */
5
10
  class LazyPromise {
6
11
  _factory;
7
12
  _initial;
@@ -9,8 +14,10 @@ class LazyPromise {
9
14
  _isLoading = null;
10
15
  _promise;
11
16
  _expireTracker;
12
- _lastRefreshingPromise = null;
17
+ // Track the active factory promise to determine "latest wins"
18
+ _activeFactoryPromise = null;
13
19
  _error = null;
20
+ _ownDisposer;
14
21
  constructor(factory, initial) {
15
22
  this._factory = factory;
16
23
  this._initial = initial;
@@ -27,99 +34,72 @@ class LazyPromise {
27
34
  this.ensureInstanceLoading();
28
35
  return this._instance;
29
36
  }
30
- /** does not calls factory */
37
+ /** Returns current value without triggering loading. */
31
38
  get currentValue() {
32
39
  return this._instance;
33
40
  }
41
+ /** Configures automatic cache expiration using an expire tracker. */
34
42
  withExpire(tracker) {
35
43
  this._expireTracker = tracker;
36
44
  return this;
37
45
  }
38
46
  /**
39
- * Extends this instance with additional functionality by applying extensions in place.
47
+ * Extends this instance with additional functionality via in-place mutation.
40
48
  *
41
49
  * **Capabilities:**
42
- * - `overrideFactory`: Wrap the factory function (logging, retry, caching, etc.)
43
- * - `extendShape`: Add custom properties/methods to the instance
50
+ * - `overrideFactory`: Wrap the factory (logging, retry, caching, etc.)
51
+ * - `extendShape`: Add custom properties/methods
52
+ * - `dispose`: Cleanup resources when disposed
44
53
  *
45
54
  * **Type Safety:**
46
55
  * - Use `ILazyPromiseExtension<any>` for universal extensions
47
- * - Use `ILazyPromiseExtension<ConcreteType>` for type-specific extensions (e.g., number-only)
56
+ * - Use `ILazyPromiseExtension<ConcreteType>` for type-specific extensions
48
57
  *
49
- * **Note:** Extensions mutate the instance and can be chained. Subclasses preserve their type.
58
+ * **Note:** Extensions mutate the instance and can be chained.
50
59
  *
51
- * @param extension - Configuration with factory override and/or shape extensions
52
- * @returns The same instance (this) with applied extensions
60
+ * @param extension - Extension configuration
61
+ * @returns The same instance with applied extensions
53
62
  *
54
63
  * @example
55
64
  * ```typescript
56
- * // Universal logging extension
57
65
  * const logged = lazy.extend({
58
66
  * overrideFactory: (factory) => async (refreshing) => {
59
67
  * console.log('Loading...');
60
68
  * return await factory(refreshing);
61
69
  * }
62
70
  * });
63
- *
64
- * // Type-specific extension with custom methods
65
- * const enhanced = lazyNumber.extend<{ double: () => number | undefined }>({
66
- * extendShape: (instance) => Object.assign(instance, {
67
- * double: () => instance.currentValue !== undefined
68
- * ? instance.currentValue * 2
69
- * : undefined
70
- * })
71
- * });
72
- *
73
- * // Chaining multiple extensions
74
- * const composed = lazy
75
- * .extend(cacheExtension)
76
- * .extend(loggingExtension);
77
71
  * ```
78
72
  */
79
73
  extend(
80
74
  // Partial allows extensions with extra properties beyond the interface
81
75
  // 'any' type parameter doesn't affect return type since we return 'this'
82
76
  extension) {
83
- // Override the factory if provided
84
- if (extension.overrideFactory) {
85
- this._factory = extension.overrideFactory(this._factory, this);
86
- }
77
+ let extended = this;
87
78
  // Apply shape extension if provided
88
79
  if (extension.extendShape) {
89
- return extension.extendShape(this);
80
+ extended = extension.extendShape(this);
90
81
  }
91
- return this;
92
- }
93
- ensureInstanceLoading() {
94
- if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
95
- // do not reset the instance, just make sure it will be reloaded
96
- this._isLoading = null;
82
+ // Override the factory if provided
83
+ if (extension.overrideFactory) {
84
+ this._factory = extension.overrideFactory(this._factory, extended);
97
85
  }
98
- if (this._isLoading === null) {
99
- this._isLoading = true;
100
- this.doLoad();
86
+ if (extension.dispose) {
87
+ const previousDisposer = this._ownDisposer;
88
+ const nextDisposer = extension.dispose;
89
+ this._ownDisposer = () => {
90
+ nextDisposer(extended);
91
+ previousDisposer?.();
92
+ };
101
93
  }
94
+ return extended;
102
95
  }
103
- doLoad() {
104
- this._promise = this._factory(false)
105
- .then(this.onResolved.bind(this))
106
- .catch(this.onRejected.bind(this));
107
- }
108
- onResolved(res) {
109
- // case: during the promise `setInstance` was called
110
- if (!this._isLoading && this._instance !== undefined) {
111
- return this._instance;
112
- }
113
- this.setInstance(res);
114
- return res;
115
- }
116
- onRejected(e) {
117
- this._isLoading = false;
118
- this._instance = this._initial;
119
- this._promise = Promise.resolve(this._initial);
120
- this.setError(e);
121
- return this._initial;
122
- }
96
+ /**
97
+ * Manually sets the value and marks loading as complete.
98
+ * Clears any errors and restarts the expiration tracker if configured.
99
+ *
100
+ * @param res - The value to set
101
+ * @returns The value that was set
102
+ */
123
103
  setInstance(res) {
124
104
  this._isLoading = false;
125
105
  this.clearError(); // clear error on successful set
@@ -127,41 +107,24 @@ class LazyPromise {
127
107
  // + make sure it's resolved with the freshest value
128
108
  // also do this before setting the instance... just in case :)
129
109
  this._promise = Promise.resolve(res);
110
+ this._activeFactoryPromise = null;
130
111
  this._instance = res;
131
- if (this._expireTracker) {
132
- this._expireTracker.restart();
133
- }
112
+ this._expireTracker?.restart();
134
113
  return res;
135
114
  }
136
- setError(err) {
137
- this._error = this.parseError(err);
138
- }
139
- clearError() {
140
- this._error = null;
141
- }
115
+ /**
116
+ * Re-executes the factory to get fresh data.
117
+ *
118
+ * **Concurrency handling:**
119
+ * - Supersedes any in-progress load or refresh
120
+ * - Multiple concurrent refreshes: latest wins
121
+ * - All awaiting promises receive the final refreshed value
122
+ *
123
+ * @returns Promise resolving to the refreshed value
124
+ */
142
125
  async refresh() {
143
- let myPromise = null;
144
- try {
145
- myPromise = this._factory(true);
146
- // every new refresh overrides the previous one
147
- // so this one becomes "last"
148
- // and previous becomes stale and won't update the value when it resolves
149
- this._lastRefreshingPromise = myPromise;
150
- const fresh = await myPromise;
151
- if (this._lastRefreshingPromise === myPromise) {
152
- this.setInstance(fresh);
153
- }
154
- return fresh;
155
- }
156
- catch (e) {
157
- this.setError(e);
158
- return this._instance;
159
- }
160
- finally {
161
- if (myPromise != null && this._lastRefreshingPromise === myPromise) {
162
- this._lastRefreshingPromise = null;
163
- }
164
- }
126
+ this.startLoading(true);
127
+ return this._promise;
165
128
  }
166
129
  reset() {
167
130
  this._isLoading = null;
@@ -170,6 +133,7 @@ class LazyPromise {
170
133
  this._instance = this._initial;
171
134
  const p = this._promise;
172
135
  this._promise = undefined;
136
+ this._activeFactoryPromise = null; // Clear active promise reference
173
137
  // check if loading is still in progress
174
138
  // need to dispose abandoned value
175
139
  if (p && !wasDisposed) {
@@ -179,8 +143,73 @@ class LazyPromise {
179
143
  }
180
144
  }
181
145
  dispose() {
146
+ this._ownDisposer?.();
182
147
  this.reset();
183
148
  }
149
+ ensureInstanceLoading() {
150
+ if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
151
+ // do not reset the instance, just make sure it will be reloaded
152
+ this._isLoading = null;
153
+ }
154
+ if (this._isLoading === null) {
155
+ this._isLoading = true;
156
+ this.startLoading(false);
157
+ }
158
+ }
159
+ startLoading(refreshing) {
160
+ if (!refreshing && this._activeFactoryPromise) {
161
+ // Case when refreshing already is happening - we have an active promise
162
+ return;
163
+ }
164
+ const factoryPromise = this._factory(refreshing)
165
+ .then(res => {
166
+ if (!this._activeFactoryPromise) {
167
+ // this promise was abandoned: was superseded or reset called
168
+ return this._instance ?? this._initial;
169
+ }
170
+ if (this._activeFactoryPromise === factoryPromise) {
171
+ // case: during the promise `setInstance` was called manually
172
+ if (!refreshing && !this._isLoading && this._instance !== undefined) {
173
+ return this._instance;
174
+ }
175
+ this.setInstance(res);
176
+ return res;
177
+ }
178
+ // Stale promise - return the latest active promise instead
179
+ // This ensures anyone awaiting this old promise gets the fresh value
180
+ return this._activeFactoryPromise;
181
+ })
182
+ .catch(err => {
183
+ if (!this._activeFactoryPromise || this._activeFactoryPromise === factoryPromise) {
184
+ return this.onRejected(err);
185
+ }
186
+ throw err;
187
+ });
188
+ const hadActive = !!this._activeFactoryPromise;
189
+ // This is now the active promise - any previous one is superseded
190
+ this._activeFactoryPromise = factoryPromise;
191
+ // don't overwrite an existing promise (e.g., from refresh)
192
+ // it should pick up the new active promise automatically
193
+ if (!this._promise || !hadActive) {
194
+ this._promise = factoryPromise;
195
+ }
196
+ }
197
+ onRejected(e) {
198
+ this._isLoading = false;
199
+ // Keep the current instance on error (don't reset to initial)
200
+ // This allows retaining the last successful value
201
+ const currentInstance = this._instance !== undefined ? this._instance : this._initial;
202
+ this._promise = Promise.resolve(currentInstance);
203
+ this._activeFactoryPromise = null;
204
+ this.setError(e);
205
+ return currentInstance;
206
+ }
207
+ setError(err) {
208
+ this._error = this.parseError(err);
209
+ }
210
+ clearError() {
211
+ this._error = null;
212
+ }
184
213
  parseError(err) {
185
214
  if (typeof err === 'string') {
186
215
  return err;
@@ -1 +1 @@
1
- {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DebouncedEvent = void 0;
4
+ const event_js_1 = require("./event.js");
5
+ const debounce_js_1 = require("../functions/debounce.js");
6
+ class DebouncedEvent extends event_js_1.Event {
7
+ _debounce = new debounce_js_1.DebounceAction(100);
8
+ setTimeout(timeout) {
9
+ this._debounce.timeout = timeout;
10
+ return this;
11
+ }
12
+ trigger() {
13
+ this._debounce.tryRun(() => super.trigger());
14
+ }
15
+ triggerAsync() {
16
+ throw new Error('DebouncedEvent does not support triggerAsync');
17
+ }
18
+ }
19
+ exports.DebouncedEvent = DebouncedEvent;
20
+ //# sourceMappingURL=debouncedEvent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"throttledEvent.js","sourceRoot":"","sources":["../../../src/observing/throttledEvent.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AACnC,0DAA0D;AAE1D,MAAa,cAAe,SAAQ,gBAAK;IAEpB,SAAS,GAAG,IAAI,4BAAc,CAAC,GAAG,CAAC,CAAC;IAE9C,UAAU,CAAC,OAAe;QAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,YAAY;QACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;CACJ;AAhBD,wCAgBC"}
1
+ {"version":3,"file":"debouncedEvent.js","sourceRoot":"","sources":["../../../src/observing/debouncedEvent.ts"],"names":[],"mappings":";;;AAAA,yCAAmC;AACnC,0DAA0D;AAE1D,MAAa,cAAe,SAAQ,gBAAK;IAEpB,SAAS,GAAG,IAAI,4BAAc,CAAC,GAAG,CAAC,CAAC;IAE9C,UAAU,CAAC,OAAe;QAC7B,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,OAAO,CAAC;QACjC,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAEM,YAAY;QACf,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;CACJ;AAhBD,wCAgBC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PromiseCache = exports.DeferredGetter = void 0;
4
- const throttle_js_1 = require("../functions/throttle.js");
4
+ const debounce_js_1 = require("../functions/debounce.js");
5
5
  const loggable_js_1 = require("../logger/loggable.js");
6
6
  const Model_js_1 = require("../models/Model.js");
7
7
  var DeferredGetter;
@@ -131,7 +131,7 @@ class PromiseCache extends loggable_js_1.Loggable {
131
131
  * When provided, effectively replaces the main fetcher; but in case of fail, fallbacks to the main fetcher.
132
132
  */
133
133
  useBatching(fetcher, delay = BATCHING_DELAY) {
134
- this._batch = fetcher ? new throttle_js_1.ThrottleProcessor(fetcher, delay) : null;
134
+ this._batch = fetcher ? new debounce_js_1.DebounceProcessor(fetcher, delay) : null;
135
135
  return this;
136
136
  }
137
137
  /**
@@ -4,7 +4,7 @@ import { random } from '../math/index.js';
4
4
  import { Getter } from '../types/getter.js';
5
5
  import { catchPromise } from './safe.js';
6
6
  /** Runs a callback after a timeout, ignoring all consecutive calls until the first is processed. */
7
- export class ThrottleAction extends Loggable {
7
+ export class DebounceAction extends Loggable {
8
8
  timeout;
9
9
  _timeoutRef = null;
10
10
  _postponedCb = null;
@@ -56,7 +56,7 @@ export class ThrottleAction extends Loggable {
56
56
  // This is probably OK since the running call should cover the current one.
57
57
  // TODO Maybe just don't start timeout if the lock is set?
58
58
  // The reason for not doing that 👆 is there's still a valid case when previous is still working but it's legit to start a new one (e.g. some state has changed already)
59
- this.logger.warn('[ThrottleAction] THROTTLE LOCKED, but another call is forced. Skipping since the behavior is undefined.');
59
+ this.logger.warn('[DebounceAction] DEBOUNCE LOCKED, but another call is forced. Skipping since the behavior is undefined.');
60
60
  }
61
61
  else if (cb) {
62
62
  let result = undefined;
@@ -82,7 +82,7 @@ export class ThrottleAction extends Loggable {
82
82
  return this._currentRun?.promise || Promise.resolve(undefined);
83
83
  }
84
84
  }
85
- export class ThrottleProcessor {
85
+ export class DebounceProcessor {
86
86
  process;
87
87
  _queue = [];
88
88
  _action;
@@ -92,7 +92,7 @@ export class ThrottleProcessor {
92
92
  if (!process) {
93
93
  throw new Error('Arg0 expected: process');
94
94
  }
95
- this._action = new ThrottleAction(timeout)
95
+ this._action = new DebounceAction(timeout)
96
96
  .useParallelRuns();
97
97
  }
98
98
  setLogger(logger) {
@@ -121,4 +121,4 @@ export class ThrottleProcessor {
121
121
  this._promise = null;
122
122
  }
123
123
  }
124
- //# sourceMappingURL=throttle.js.map
124
+ //# sourceMappingURL=debounce.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.js","sourceRoot":"","sources":["../../../src/functions/throttle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../../src/functions/debounce.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,5 @@ export * from './assert.js';
2
2
  export * from './disposer.symbols.js';
3
3
  export * from './disposer.js';
4
4
  export * from './safe.js';
5
- export * from './throttle.js';
5
+ export * from './debounce.js';
6
6
  //# sourceMappingURL=index.js.map
package/esm/lazy/lazy.js CHANGED
@@ -1,4 +1,8 @@
1
1
  import { tryDispose } from '../functions/disposer.js';
2
+ /**
3
+ * Synchronous lazy-loading container that initializes a value on first access.
4
+ * The value is cached until reset or expired. Supports custom disposal and cache expiration.
5
+ */
2
6
  export class Lazy {
3
7
  _factory;
4
8
  _instance = undefined;
@@ -28,18 +32,22 @@ export class Lazy {
28
32
  }
29
33
  return true;
30
34
  }
35
+ /** Provides custom cleanup logic when the instance is reset or disposed. */
31
36
  withDisposer(disposer) {
32
37
  this._disposer = disposer;
33
38
  return this;
34
39
  }
40
+ /** Configures automatic cache expiration using an expire tracker. */
35
41
  withExpire(tracker) {
36
42
  this._expireTracker = tracker;
37
43
  return this;
38
44
  }
45
+ /** Eagerly loads the value without accessing it. Useful for preloading. */
39
46
  prewarm() {
40
47
  this.ensureInstance();
41
48
  return this;
42
49
  }
50
+ /** Manually sets the cached value. */
43
51
  setInstance(instance) {
44
52
  this._instance = instance;
45
53
  if (this._instance !== undefined && this._expireTracker) {
@@ -1 +1 @@
1
- {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/lazy/lazy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../src/lazy/lazy.ts"],"names":[],"mappings":"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"}