@zajno/common 2.8.2 → 2.8.4
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/functions/{throttle.js → debounce.js} +8 -8
- package/cjs/functions/{throttle.js.map → debounce.js.map} +1 -1
- package/cjs/functions/index.js +1 -1
- package/cjs/lazy/promise.js +30 -11
- package/cjs/lazy/promise.js.map +1 -1
- package/cjs/observing/debouncedEvent.js +20 -0
- package/cjs/observing/{throttledEvent.js.map → debouncedEvent.js.map} +1 -1
- package/cjs/structures/promiseCache.js +2 -2
- package/esm/functions/{throttle.js → debounce.js} +5 -5
- package/esm/functions/{throttle.js.map → debounce.js.map} +1 -1
- package/esm/functions/index.js +1 -1
- package/esm/lazy/promise.js +30 -11
- package/esm/lazy/promise.js.map +1 -1
- package/esm/observing/debouncedEvent.js +16 -0
- package/esm/observing/{throttledEvent.js.map → debouncedEvent.js.map} +1 -1
- package/esm/structures/promiseCache.js +2 -2
- package/package.json +1 -1
- package/tsconfig.cjs.tsbuildinfo +1 -1
- package/tsconfig.esm.tsbuildinfo +1 -1
- package/tsconfig.types.tsbuildinfo +1 -1
- package/types/functions/{throttle.d.ts → debounce.d.ts} +2 -2
- package/types/functions/index.d.ts +1 -1
- package/types/lazy/promise.d.ts +7 -2
- package/types/observing/{throttledEvent.d.ts → debouncedEvent.d.ts} +2 -2
- package/cjs/observing/throttledEvent.js +0 -20
- 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), [`
|
|
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: `
|
|
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.
|
|
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
|
|
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('[
|
|
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.
|
|
88
|
-
class
|
|
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
|
|
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.
|
|
128
|
-
//# sourceMappingURL=
|
|
127
|
+
exports.DebounceProcessor = DebounceProcessor;
|
|
128
|
+
//# sourceMappingURL=debounce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../../src/functions/debounce.ts"],"names":[],"mappings":"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"}
|
package/cjs/functions/index.js
CHANGED
|
@@ -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("./
|
|
8
|
+
tslib_1.__exportStar(require("./debounce.js"), exports);
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
package/cjs/lazy/promise.js
CHANGED
|
@@ -11,7 +11,9 @@ class LazyPromise {
|
|
|
11
11
|
_factory;
|
|
12
12
|
_initial;
|
|
13
13
|
_instance;
|
|
14
|
-
|
|
14
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
15
|
+
_state = null;
|
|
16
|
+
_isAsyncStateChange = false;
|
|
15
17
|
_promise;
|
|
16
18
|
_expireTracker;
|
|
17
19
|
// Track the active factory promise to determine "latest wins"
|
|
@@ -23,8 +25,9 @@ class LazyPromise {
|
|
|
23
25
|
this._initial = initial;
|
|
24
26
|
this._instance = initial; // as ILazyValue<T, TInitial>;
|
|
25
27
|
}
|
|
26
|
-
|
|
27
|
-
get
|
|
28
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
29
|
+
get isLoading() { return this._state; }
|
|
30
|
+
get hasValue() { return this._state === false; }
|
|
28
31
|
get error() { return this._error; }
|
|
29
32
|
get promise() {
|
|
30
33
|
this.ensureInstanceLoading();
|
|
@@ -43,6 +46,10 @@ class LazyPromise {
|
|
|
43
46
|
this._expireTracker = tracker;
|
|
44
47
|
return this;
|
|
45
48
|
}
|
|
49
|
+
withAsyncStateChange(enabled) {
|
|
50
|
+
this._isAsyncStateChange = enabled;
|
|
51
|
+
return this;
|
|
52
|
+
}
|
|
46
53
|
/**
|
|
47
54
|
* Extends this instance with additional functionality via in-place mutation.
|
|
48
55
|
*
|
|
@@ -101,7 +108,7 @@ class LazyPromise {
|
|
|
101
108
|
* @returns The value that was set
|
|
102
109
|
*/
|
|
103
110
|
setInstance(res) {
|
|
104
|
-
this.
|
|
111
|
+
this.updateState(false);
|
|
105
112
|
this.clearError(); // clear error on successful set
|
|
106
113
|
// refresh promise so it won't keep old callbacks
|
|
107
114
|
// + make sure it's resolved with the freshest value
|
|
@@ -127,7 +134,7 @@ class LazyPromise {
|
|
|
127
134
|
return this._promise;
|
|
128
135
|
}
|
|
129
136
|
reset() {
|
|
130
|
-
this.
|
|
137
|
+
this.updateState(null);
|
|
131
138
|
this.clearError();
|
|
132
139
|
const wasDisposed = (0, disposer_js_1.tryDispose)(this._instance);
|
|
133
140
|
this._instance = this._initial;
|
|
@@ -147,21 +154,30 @@ class LazyPromise {
|
|
|
147
154
|
this.reset();
|
|
148
155
|
}
|
|
149
156
|
ensureInstanceLoading() {
|
|
157
|
+
let nextState;
|
|
150
158
|
if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
|
|
151
159
|
// do not reset the instance, just make sure it will be reloaded
|
|
152
|
-
|
|
160
|
+
nextState = null;
|
|
153
161
|
}
|
|
154
|
-
if (this.
|
|
155
|
-
|
|
162
|
+
if (this._state === null || nextState === null) {
|
|
163
|
+
nextState = true;
|
|
156
164
|
this.startLoading(false);
|
|
157
165
|
}
|
|
166
|
+
if (nextState !== undefined) {
|
|
167
|
+
if (this._isAsyncStateChange) {
|
|
168
|
+
setImmediate(() => { this.updateState(nextState); });
|
|
169
|
+
}
|
|
170
|
+
else {
|
|
171
|
+
this.updateState(nextState);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
158
174
|
}
|
|
159
175
|
startLoading(refreshing) {
|
|
160
176
|
if (!refreshing && this._activeFactoryPromise) {
|
|
161
177
|
// Case when refreshing already is happening - we have an active promise
|
|
162
178
|
return;
|
|
163
179
|
}
|
|
164
|
-
const factoryPromise = this._factory(refreshing)
|
|
180
|
+
const factoryPromise = Promise.resolve(this._factory(refreshing))
|
|
165
181
|
.then(res => {
|
|
166
182
|
if (!this._activeFactoryPromise) {
|
|
167
183
|
// this promise was abandoned: was superseded or reset called
|
|
@@ -169,7 +185,7 @@ class LazyPromise {
|
|
|
169
185
|
}
|
|
170
186
|
if (this._activeFactoryPromise === factoryPromise) {
|
|
171
187
|
// case: during the promise `setInstance` was called manually
|
|
172
|
-
if (!refreshing && !this.
|
|
188
|
+
if (!refreshing && !this._state && this._instance !== undefined) {
|
|
173
189
|
return this._instance;
|
|
174
190
|
}
|
|
175
191
|
this.setInstance(res);
|
|
@@ -195,7 +211,7 @@ class LazyPromise {
|
|
|
195
211
|
}
|
|
196
212
|
}
|
|
197
213
|
onRejected(e) {
|
|
198
|
-
this.
|
|
214
|
+
this.updateState(false);
|
|
199
215
|
// Keep the current instance on error (don't reset to initial)
|
|
200
216
|
// This allows retaining the last successful value
|
|
201
217
|
const currentInstance = this._instance !== undefined ? this._instance : this._initial;
|
|
@@ -204,6 +220,9 @@ class LazyPromise {
|
|
|
204
220
|
this.setError(e);
|
|
205
221
|
return currentInstance;
|
|
206
222
|
}
|
|
223
|
+
updateState(isLoading) {
|
|
224
|
+
this._state = isLoading;
|
|
225
|
+
}
|
|
207
226
|
setError(err) {
|
|
208
227
|
this._error = this.parseError(err);
|
|
209
228
|
}
|
package/cjs/lazy/promise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":";;;AAAA,0DAAwE;AAKxE;;;;GAIG;AACH,MAAa,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":";;;AAAA,0DAAwE;AAKxE;;;;GAIG;AACH,MAAa,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;IAEhC,gFAAgF;IACxE,MAAM,GAAmB,IAAI,CAAC;IAE9B,mBAAmB,GAAG,KAAK,CAAC;IAE5B,QAAQ,CAAyB;IACjC,cAAc,CAA6B;IAEnD,8DAA8D;IACtD,qBAAqB,GAAsB,IAAI,CAAC;IAChD,MAAM,GAAkB,IAAI,CAAC;IAE7B,YAAY,CAAc;IAElC,YACI,OAAuB,EACvB,OAAkB;QAElB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAmB,CAAC;QAEpC,IAAI,CAAC,SAAS,GAAG,OAAuB,CAAC,CAAC,8BAA8B;IAC5E,CAAC;IAED,gFAAgF;IAChF,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;IACvD,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1C,IAAW,OAAO;QACd,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAS,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,wDAAwD;IACxD,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,qEAAqE;IAC9D,UAAU,CAAC,OAAmC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,oBAAoB,CAAC,OAAgB;QACxC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,MAAM;IACT,uEAAuE;IACvE,yEAAyE;IACzE,SAAyD;QAGzD,IAAI,QAAQ,GAAG,IAAwB,CAAC;QAExC,oCAAoC;QACpC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YACxB,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAqB,CAAC;QAC/D,CAAC;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;YAEvC,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE;gBACrB,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvB,gBAAgB,EAAE,EAAE,CAAC;YACzB,CAAC,CAAC;QACN,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACI,WAAW,CAAC,GAAM;QACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,gCAAgC;QAEnD,iDAAiD;QACjD,oDAAoD;QACpD,8DAA8D;QAC9D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAElC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAE/B,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,QAAS,CAAC;IAC1B,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,WAAW,GAAG,IAAA,wBAAU,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC,iCAAiC;QAEpE,wCAAwC;QACxC,kCAAkC;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,IAAA,wBAAU,EAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEO,qBAAqB;QACzB,IAAI,SAAyC,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC;YAC7F,gEAAgE;YAChE,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7C,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,UAAmB;QACpC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5C,wEAAwE;YACxE,OAAO;QACX,CAAC;QAED,MAAM,cAAc,GAAe,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxE,IAAI,CAAC,GAAG,CAAC,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC9B,6DAA6D;gBAC7D,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAa,CAAC;YAChD,CAAC;YAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,cAAc,EAAE,CAAC;gBAChD,6DAA6D;gBAC7D,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC9D,OAAO,IAAI,CAAC,SAAS,CAAC;gBAC1B,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO,GAAG,CAAC;YACf,CAAC;YAED,2DAA2D;YAC3D,qEAAqE;YACrE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACtC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,KAAK,cAAc,EAAE,CAAC;gBAC/E,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,CAAC;YACrC,CAAC;YACD,MAAM,GAAG,CAAC;QACd,CAAC,CAAC,CAAC;QAEP,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAE/C,kEAAkE;QAClE,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC;QAE5C,2DAA2D;QAC3D,yDAAyD;QACzD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;QACnC,CAAC;IACL,CAAC;IAES,UAAU,CAAC,CAAU;QAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,8DAA8D;QAC9D,kDAAkD;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAe,CAAC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,eAAoB,CAAC;IAChC,CAAC;IAES,WAAW,CAAC,SAAyB;QAC3C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC5B,CAAC;IAES,QAAQ,CAAC,GAAY;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAES,UAAU;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAES,UAAU,CAAC,GAAY;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC;QACf,CAAC;QACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,OAAO,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;IAC1C,CAAC;CACJ;AA3RD,kCA2RC"}
|
|
@@ -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":"
|
|
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
|
|
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
|
|
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
|
|
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('[
|
|
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
|
|
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
|
|
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=
|
|
124
|
+
//# sourceMappingURL=debounce.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"debounce.js","sourceRoot":"","sources":["../../../src/functions/debounce.ts"],"names":[],"mappings":"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"}
|
package/esm/functions/index.js
CHANGED
package/esm/lazy/promise.js
CHANGED
|
@@ -8,7 +8,9 @@ export class LazyPromise {
|
|
|
8
8
|
_factory;
|
|
9
9
|
_initial;
|
|
10
10
|
_instance;
|
|
11
|
-
|
|
11
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
12
|
+
_state = null;
|
|
13
|
+
_isAsyncStateChange = false;
|
|
12
14
|
_promise;
|
|
13
15
|
_expireTracker;
|
|
14
16
|
// Track the active factory promise to determine "latest wins"
|
|
@@ -20,8 +22,9 @@ export class LazyPromise {
|
|
|
20
22
|
this._initial = initial;
|
|
21
23
|
this._instance = initial; // as ILazyValue<T, TInitial>;
|
|
22
24
|
}
|
|
23
|
-
|
|
24
|
-
get
|
|
25
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
26
|
+
get isLoading() { return this._state; }
|
|
27
|
+
get hasValue() { return this._state === false; }
|
|
25
28
|
get error() { return this._error; }
|
|
26
29
|
get promise() {
|
|
27
30
|
this.ensureInstanceLoading();
|
|
@@ -40,6 +43,10 @@ export class LazyPromise {
|
|
|
40
43
|
this._expireTracker = tracker;
|
|
41
44
|
return this;
|
|
42
45
|
}
|
|
46
|
+
withAsyncStateChange(enabled) {
|
|
47
|
+
this._isAsyncStateChange = enabled;
|
|
48
|
+
return this;
|
|
49
|
+
}
|
|
43
50
|
/**
|
|
44
51
|
* Extends this instance with additional functionality via in-place mutation.
|
|
45
52
|
*
|
|
@@ -98,7 +105,7 @@ export class LazyPromise {
|
|
|
98
105
|
* @returns The value that was set
|
|
99
106
|
*/
|
|
100
107
|
setInstance(res) {
|
|
101
|
-
this.
|
|
108
|
+
this.updateState(false);
|
|
102
109
|
this.clearError(); // clear error on successful set
|
|
103
110
|
// refresh promise so it won't keep old callbacks
|
|
104
111
|
// + make sure it's resolved with the freshest value
|
|
@@ -124,7 +131,7 @@ export class LazyPromise {
|
|
|
124
131
|
return this._promise;
|
|
125
132
|
}
|
|
126
133
|
reset() {
|
|
127
|
-
this.
|
|
134
|
+
this.updateState(null);
|
|
128
135
|
this.clearError();
|
|
129
136
|
const wasDisposed = tryDispose(this._instance);
|
|
130
137
|
this._instance = this._initial;
|
|
@@ -144,21 +151,30 @@ export class LazyPromise {
|
|
|
144
151
|
this.reset();
|
|
145
152
|
}
|
|
146
153
|
ensureInstanceLoading() {
|
|
154
|
+
let nextState;
|
|
147
155
|
if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
|
|
148
156
|
// do not reset the instance, just make sure it will be reloaded
|
|
149
|
-
|
|
157
|
+
nextState = null;
|
|
150
158
|
}
|
|
151
|
-
if (this.
|
|
152
|
-
|
|
159
|
+
if (this._state === null || nextState === null) {
|
|
160
|
+
nextState = true;
|
|
153
161
|
this.startLoading(false);
|
|
154
162
|
}
|
|
163
|
+
if (nextState !== undefined) {
|
|
164
|
+
if (this._isAsyncStateChange) {
|
|
165
|
+
setImmediate(() => { this.updateState(nextState); });
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
this.updateState(nextState);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
155
171
|
}
|
|
156
172
|
startLoading(refreshing) {
|
|
157
173
|
if (!refreshing && this._activeFactoryPromise) {
|
|
158
174
|
// Case when refreshing already is happening - we have an active promise
|
|
159
175
|
return;
|
|
160
176
|
}
|
|
161
|
-
const factoryPromise = this._factory(refreshing)
|
|
177
|
+
const factoryPromise = Promise.resolve(this._factory(refreshing))
|
|
162
178
|
.then(res => {
|
|
163
179
|
if (!this._activeFactoryPromise) {
|
|
164
180
|
// this promise was abandoned: was superseded or reset called
|
|
@@ -166,7 +182,7 @@ export class LazyPromise {
|
|
|
166
182
|
}
|
|
167
183
|
if (this._activeFactoryPromise === factoryPromise) {
|
|
168
184
|
// case: during the promise `setInstance` was called manually
|
|
169
|
-
if (!refreshing && !this.
|
|
185
|
+
if (!refreshing && !this._state && this._instance !== undefined) {
|
|
170
186
|
return this._instance;
|
|
171
187
|
}
|
|
172
188
|
this.setInstance(res);
|
|
@@ -192,7 +208,7 @@ export class LazyPromise {
|
|
|
192
208
|
}
|
|
193
209
|
}
|
|
194
210
|
onRejected(e) {
|
|
195
|
-
this.
|
|
211
|
+
this.updateState(false);
|
|
196
212
|
// Keep the current instance on error (don't reset to initial)
|
|
197
213
|
// This allows retaining the last successful value
|
|
198
214
|
const currentInstance = this._instance !== undefined ? this._instance : this._initial;
|
|
@@ -201,6 +217,9 @@ export class LazyPromise {
|
|
|
201
217
|
this.setError(e);
|
|
202
218
|
return currentInstance;
|
|
203
219
|
}
|
|
220
|
+
updateState(isLoading) {
|
|
221
|
+
this._state = isLoading;
|
|
222
|
+
}
|
|
204
223
|
setError(err) {
|
|
205
224
|
this._error = this.parseError(err);
|
|
206
225
|
}
|
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;AAKxE;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAoB,MAAM,0BAA0B,CAAC;AAKxE;;;;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,CAAyB;IACjC,cAAc,CAA6B;IAEnD,8DAA8D;IACtD,qBAAqB,GAAsB,IAAI,CAAC;IAChD,MAAM,GAAkB,IAAI,CAAC;IAE7B,YAAY,CAAc;IAElC,YACI,OAAuB,EACvB,OAAkB;QAElB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,OAAmB,CAAC;QAEpC,IAAI,CAAC,SAAS,GAAG,OAAuB,CAAC,CAAC,8BAA8B;IAC5E,CAAC;IAED,gFAAgF;IAChF,IAAW,SAAS,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,IAAW,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC;IACvD,IAAW,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAE1C,IAAW,OAAO;QACd,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,QAAS,CAAC;IAC1B,CAAC;IAED,IAAI,KAAK;QACL,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,wDAAwD;IACxD,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,qEAAqE;IAC9D,UAAU,CAAC,OAAmC;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAEM,oBAAoB,CAAC,OAAgB;QACxC,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC;QACnC,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACI,MAAM;IACT,uEAAuE;IACvE,yEAAyE;IACzE,SAAyD;QAGzD,IAAI,QAAQ,GAAG,IAAwB,CAAC;QAExC,oCAAoC;QACpC,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;YACxB,QAAQ,GAAG,SAAS,CAAC,WAAW,CAAC,IAAI,CAAqB,CAAC;QAC/D,CAAC;QAED,mCAAmC;QACnC,IAAI,SAAS,CAAC,eAAe,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACvE,CAAC;QAED,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,gBAAgB,GAAG,IAAI,CAAC,YAAY,CAAC;YAC3C,MAAM,YAAY,GAAG,SAAS,CAAC,OAAO,CAAC;YAEvC,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE;gBACrB,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACvB,gBAAgB,EAAE,EAAE,CAAC;YACzB,CAAC,CAAC;QACN,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;OAMG;IACI,WAAW,CAAC,GAAM;QACrB,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,gCAAgC;QAEnD,iDAAiD;QACjD,oDAAoD;QACpD,8DAA8D;QAC9D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAElC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC;QAErB,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;QAE/B,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,OAAO;QAChB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,QAAS,CAAC;IAC1B,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE/C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE/B,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,CAAC,iCAAiC;QAEpE,wCAAwC;QACxC,kCAAkC;QAClC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACpB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBACX,UAAU,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEM,OAAO;QACV,IAAI,CAAC,YAAY,EAAE,EAAE,CAAC;QACtB,IAAI,CAAC,KAAK,EAAE,CAAC;IACjB,CAAC;IAEO,qBAAqB;QACzB,IAAI,SAAyC,CAAC;QAC9C,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC;YAC7F,gEAAgE;YAChE,SAAS,GAAG,IAAI,CAAC;QACrB,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YAC7C,SAAS,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,YAAY,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACJ,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,UAAmB;QACpC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC5C,wEAAwE;YACxE,OAAO;QACX,CAAC;QAED,MAAM,cAAc,GAAe,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;aACxE,IAAI,CAAC,GAAG,CAAC,EAAE;YACR,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC9B,6DAA6D;gBAC7D,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAa,CAAC;YAChD,CAAC;YAED,IAAI,IAAI,CAAC,qBAAqB,KAAK,cAAc,EAAE,CAAC;gBAChD,6DAA6D;gBAC7D,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC9D,OAAO,IAAI,CAAC,SAAS,CAAC;gBAC1B,CAAC;gBACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO,GAAG,CAAC;YACf,CAAC;YAED,2DAA2D;YAC3D,qEAAqE;YACrE,OAAO,IAAI,CAAC,qBAAqB,CAAC;QACtC,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,CAAC,EAAE;YACT,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB,KAAK,cAAc,EAAE,CAAC;gBAC/E,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAM,CAAC;YACrC,CAAC;YACD,MAAM,GAAG,CAAC;QACd,CAAC,CAAC,CAAC;QAEP,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC;QAE/C,kEAAkE;QAClE,IAAI,CAAC,qBAAqB,GAAG,cAAc,CAAC;QAE5C,2DAA2D;QAC3D,yDAAyD;QACzD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;QACnC,CAAC;IACL,CAAC;IAES,UAAU,CAAC,CAAU;QAC3B,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxB,8DAA8D;QAC9D,kDAAkD;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;QACtF,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,CAAe,CAAC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,eAAoB,CAAC;IAChC,CAAC;IAES,WAAW,CAAC,SAAyB;QAC3C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;IAC5B,CAAC;IAES,QAAQ,CAAC,GAAY;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;IACvC,CAAC;IAES,UAAU;QAChB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAES,UAAU,CAAC,GAAY;QAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC;QACf,CAAC;QACD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,OAAO,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;IAC1C,CAAC;CACJ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Event } from './event.js';
|
|
2
|
+
import { DebounceAction } from '../functions/debounce.js';
|
|
3
|
+
export class DebouncedEvent extends Event {
|
|
4
|
+
_debounce = new DebounceAction(100);
|
|
5
|
+
setTimeout(timeout) {
|
|
6
|
+
this._debounce.timeout = timeout;
|
|
7
|
+
return this;
|
|
8
|
+
}
|
|
9
|
+
trigger() {
|
|
10
|
+
this._debounce.tryRun(() => super.trigger());
|
|
11
|
+
}
|
|
12
|
+
triggerAsync() {
|
|
13
|
+
throw new Error('DebouncedEvent does not support triggerAsync');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=debouncedEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"debouncedEvent.js","sourceRoot":"","sources":["../../../src/observing/debouncedEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,OAAO,cAAe,SAAQ,KAAK;IAEpB,SAAS,GAAG,IAAI,cAAc,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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DebounceProcessor } from '../functions/debounce.js';
|
|
2
2
|
import { Loggable } from '../logger/loggable.js';
|
|
3
3
|
import { Model } from '../models/Model.js';
|
|
4
4
|
export var DeferredGetter;
|
|
@@ -128,7 +128,7 @@ export class PromiseCache extends Loggable {
|
|
|
128
128
|
* When provided, effectively replaces the main fetcher; but in case of fail, fallbacks to the main fetcher.
|
|
129
129
|
*/
|
|
130
130
|
useBatching(fetcher, delay = BATCHING_DELAY) {
|
|
131
|
-
this._batch = fetcher ? new
|
|
131
|
+
this._batch = fetcher ? new DebounceProcessor(fetcher, delay) : null;
|
|
132
132
|
return this;
|
|
133
133
|
}
|
|
134
134
|
/**
|
package/package.json
CHANGED
package/tsconfig.cjs.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/
|
|
1
|
+
{"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
|
package/tsconfig.esm.tsbuildinfo
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/
|
|
1
|
+
{"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/
|
|
1
|
+
{"root":["../src/api/builder.ts","../src/api/call.config.ts","../src/api/call.ts","../src/api/call.types.ts","../src/api/config.ts","../src/api/endpoint.ts","../src/api/endpoint.types.ts","../src/api/error.ts","../src/api/hooks.ts","../src/api/index.ts","../src/api/interceptor.ts","../src/api/logging.ts","../src/api/methods.ts","../src/api/statuscodes.ts","../src/api/extensions/contenttype.ts","../src/api/extensions/endpointhooks.ts","../src/api/extensions/index.ts","../src/api/extensions/validation.ts","../src/async/arrays.ts","../src/async/index.ts","../src/async/manualpromise.ts","../src/async/misc.ts","../src/async/timeout.ts","../src/dates/calc.ts","../src/dates/calendarindex.ts","../src/dates/convert.ts","../src/dates/datex.ts","../src/dates/decompose.ts","../src/dates/format.ts","../src/dates/index.ts","../src/dates/parse.ts","../src/dates/period.ts","../src/dates/shift.ts","../src/dates/types.ts","../src/dates/tz.ts","../src/dates/yeardate.ts","../src/fields/filter.ts","../src/fields/index.ts","../src/fields/skip.ts","../src/fields/transfer.ts","../src/fields/update.ts","../src/functions/assert.ts","../src/functions/debounce.ts","../src/functions/disposer.symbols.ts","../src/functions/disposer.ts","../src/functions/index.ts","../src/functions/safe.ts","../src/lazy/extensions.ts","../src/lazy/index.ts","../src/lazy/lazy.ts","../src/lazy/light.ts","../src/lazy/promise.ts","../src/lazy/types.ts","../src/localization/localizationmanager.ts","../src/localization/localizedvalidationerrors.ts","../src/localization/abstractions.ts","../src/localization/index.ts","../src/localization/defaults/validationerrorslocalization.ts","../src/localization/defaults/defaultshape.ts","../src/logger/batch.ts","../src/logger/console.ts","../src/logger/empty.ts","../src/logger/index.ts","../src/logger/loggable.ts","../src/logger/manager.ts","../src/logger/named.ts","../src/logger/provider.ts","../src/logger/proxy.ts","../src/logger/types.ts","../src/logger/buffered/base.ts","../src/logger/buffered/buffered.logger.ts","../src/logger/buffered/buffered.memory.ts","../src/logger/buffered/index.ts","../src/logger/buffered/file/buffered.file.ts","../src/logger/buffered/file/index.ts","../src/math/arrays.ts","../src/math/calc.ts","../src/math/distribution.ts","../src/math/index.ts","../src/math/object/helpers.ts","../src/math/object/index.ts","../src/math/object/math.composite.ts","../src/math/object/math.ts","../src/math/object/ops.composite.ts","../src/math/object/ops.ts","../src/math/object/types.ts","../src/models/entitywithstatus.ts","../src/models/file.ts","../src/models/loading.ts","../src/models/logicmodel.ts","../src/models/model.ts","../src/models/valuescollector.ts","../src/models/types.ts","../src/models/wrappers.ts","../src/observing/debouncedevent.ts","../src/observing/event.late.ts","../src/observing/event.ts","../src/observing/progresstracker.ts","../src/observing/timeout.ts","../src/observing/timer.ts","../src/observing/transition.ts","../src/storage/index.ts","../src/storage/types.ts","../src/storage/wrappers.ts","../src/structures/expire.ts","../src/structures/extendobject.ts","../src/structures/linkedlist.ts","../src/structures/nameof.ts","../src/structures/pool.ts","../src/structures/promisecache.ts","../src/structures/promiseextended.ts","../src/structures/promiseproxy.ts","../src/structures/singleton.ts","../src/structures/subscribersmap.ts","../src/structures/tempocache.ts","../src/structures/helpers/enum.ts","../src/structures/helpers/name.ts","../src/structures/path/builder.helpers.ts","../src/structures/path/builder.ts","../src/structures/path/index.ts","../src/structures/path/types.helpers.ts","../src/structures/path/types.ts","../src/structures/path/utils/combineurls.ts","../src/structures/path/utils/index.ts","../src/structures/path/utils/indextrim.ts","../src/structures/path/utils/optionals.ts","../src/structures/queue/parallel.ts","../src/structures/queue/tasks.ts","../src/types/arrays.ts","../src/types/comparator.ts","../src/types/deep.ts","../src/types/functions.ts","../src/types/getter.ts","../src/types/ident.ts","../src/types/index.ts","../src/types/misc.ts","../src/validation/validationerrors.ts","../src/validation/creditcard.ts","../src/validation/emails.ts","../src/validation/helpers.ts","../src/validation/index.ts","../src/validation/throwers.ts","../src/validation/types.ts","../src/validation/validationerror.ts","../src/validation/validators.ts","../src/validation/wrappers.ts"],"version":"5.7.3"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Loggable, type ILogger } from '../logger/index.js';
|
|
2
2
|
import { Getter } from '../types/getter.js';
|
|
3
3
|
/** Runs a callback after a timeout, ignoring all consecutive calls until the first is processed. */
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class DebounceAction<T = any> extends Loggable {
|
|
5
5
|
timeout: number;
|
|
6
6
|
private _timeoutRef;
|
|
7
7
|
private _postponedCb;
|
|
@@ -23,7 +23,7 @@ type ProcessorResult<T> = {
|
|
|
23
23
|
result: T | undefined;
|
|
24
24
|
index: number;
|
|
25
25
|
};
|
|
26
|
-
export declare class
|
|
26
|
+
export declare class DebounceProcessor<TSubject, TResult = any> {
|
|
27
27
|
private readonly process;
|
|
28
28
|
private readonly _queue;
|
|
29
29
|
private readonly _action;
|
package/types/lazy/promise.d.ts
CHANGED
|
@@ -11,13 +11,16 @@ export declare class LazyPromise<T, TInitial extends T | undefined = undefined>
|
|
|
11
11
|
private _factory;
|
|
12
12
|
private readonly _initial;
|
|
13
13
|
private _instance;
|
|
14
|
-
|
|
14
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
15
|
+
private _state;
|
|
16
|
+
private _isAsyncStateChange;
|
|
15
17
|
private _promise;
|
|
16
18
|
private _expireTracker;
|
|
17
19
|
private _activeFactoryPromise;
|
|
18
20
|
private _error;
|
|
19
21
|
private _ownDisposer?;
|
|
20
22
|
constructor(factory: LazyFactory<T>, initial?: TInitial);
|
|
23
|
+
/** Current loading state: true = loading, false = loaded, null = not started */
|
|
21
24
|
get isLoading(): boolean | null;
|
|
22
25
|
get hasValue(): boolean;
|
|
23
26
|
get error(): string | null;
|
|
@@ -27,6 +30,7 @@ export declare class LazyPromise<T, TInitial extends T | undefined = undefined>
|
|
|
27
30
|
get currentValue(): T | TInitial;
|
|
28
31
|
/** Configures automatic cache expiration using an expire tracker. */
|
|
29
32
|
withExpire(tracker: IExpireTracker | undefined): this;
|
|
33
|
+
withAsyncStateChange(enabled: boolean): this;
|
|
30
34
|
/**
|
|
31
35
|
* Extends this instance with additional functionality via in-place mutation.
|
|
32
36
|
*
|
|
@@ -76,9 +80,10 @@ export declare class LazyPromise<T, TInitial extends T | undefined = undefined>
|
|
|
76
80
|
refresh(): Promise<T>;
|
|
77
81
|
reset(): void;
|
|
78
82
|
dispose(): void;
|
|
79
|
-
|
|
83
|
+
private ensureInstanceLoading;
|
|
80
84
|
private startLoading;
|
|
81
85
|
protected onRejected(e: unknown): T | TInitial;
|
|
86
|
+
protected updateState(isLoading: boolean | null): void;
|
|
82
87
|
protected setError(err: unknown): void;
|
|
83
88
|
protected clearError(): void;
|
|
84
89
|
protected parseError(err: unknown): string;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Event } from './event.js';
|
|
2
|
-
export declare class
|
|
3
|
-
private readonly
|
|
2
|
+
export declare class DebouncedEvent extends Event {
|
|
3
|
+
private readonly _debounce;
|
|
4
4
|
setTimeout(timeout: number): this;
|
|
5
5
|
trigger(): void;
|
|
6
6
|
triggerAsync(): Promise<Error[]>;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ThrottledEvent = void 0;
|
|
4
|
-
const event_js_1 = require("./event.js");
|
|
5
|
-
const throttle_js_1 = require("../functions/throttle.js");
|
|
6
|
-
class ThrottledEvent extends event_js_1.Event {
|
|
7
|
-
_throttle = new throttle_js_1.ThrottleAction(100);
|
|
8
|
-
setTimeout(timeout) {
|
|
9
|
-
this._throttle.timeout = timeout;
|
|
10
|
-
return this;
|
|
11
|
-
}
|
|
12
|
-
trigger() {
|
|
13
|
-
this._throttle.tryRun(() => super.trigger());
|
|
14
|
-
}
|
|
15
|
-
triggerAsync() {
|
|
16
|
-
throw new Error('ThrottledEvent does not support triggerAsync');
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
exports.ThrottledEvent = ThrottledEvent;
|
|
20
|
-
//# sourceMappingURL=throttledEvent.js.map
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { Event } from './event.js';
|
|
2
|
-
import { ThrottleAction } from '../functions/throttle.js';
|
|
3
|
-
export class ThrottledEvent extends Event {
|
|
4
|
-
_throttle = new ThrottleAction(100);
|
|
5
|
-
setTimeout(timeout) {
|
|
6
|
-
this._throttle.timeout = timeout;
|
|
7
|
-
return this;
|
|
8
|
-
}
|
|
9
|
-
trigger() {
|
|
10
|
-
this._throttle.tryRun(() => super.trigger());
|
|
11
|
-
}
|
|
12
|
-
triggerAsync() {
|
|
13
|
-
throw new Error('ThrottledEvent does not support triggerAsync');
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=throttledEvent.js.map
|