@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.
- 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/lazy.js +8 -0
- package/cjs/lazy/lazy.js.map +1 -1
- package/cjs/lazy/promise.js +118 -89
- 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/lazy.js +8 -0
- package/esm/lazy/lazy.js.map +1 -1
- package/esm/lazy/promise.js +118 -89
- 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/lazy.d.ts +8 -0
- package/types/lazy/promise.d.ts +39 -30
- package/types/lazy/types.d.ts +63 -54
- 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/esm/lazy/promise.js
CHANGED
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
import { tryDispose } from '../functions/disposer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Asynchronous lazy-loading container that initializes via a promise-based factory.
|
|
4
|
+
* Handles concurrent operations with "latest wins" semantics: multiple refreshes are automatically
|
|
5
|
+
* coordinated so all awaiting promises receive the final value. Supports extensions for custom behavior.
|
|
6
|
+
*/
|
|
2
7
|
export class LazyPromise {
|
|
3
8
|
_factory;
|
|
4
9
|
_initial;
|
|
@@ -6,8 +11,10 @@ export class LazyPromise {
|
|
|
6
11
|
_isLoading = null;
|
|
7
12
|
_promise;
|
|
8
13
|
_expireTracker;
|
|
9
|
-
|
|
14
|
+
// Track the active factory promise to determine "latest wins"
|
|
15
|
+
_activeFactoryPromise = null;
|
|
10
16
|
_error = null;
|
|
17
|
+
_ownDisposer;
|
|
11
18
|
constructor(factory, initial) {
|
|
12
19
|
this._factory = factory;
|
|
13
20
|
this._initial = initial;
|
|
@@ -24,99 +31,72 @@ export class LazyPromise {
|
|
|
24
31
|
this.ensureInstanceLoading();
|
|
25
32
|
return this._instance;
|
|
26
33
|
}
|
|
27
|
-
/**
|
|
34
|
+
/** Returns current value without triggering loading. */
|
|
28
35
|
get currentValue() {
|
|
29
36
|
return this._instance;
|
|
30
37
|
}
|
|
38
|
+
/** Configures automatic cache expiration using an expire tracker. */
|
|
31
39
|
withExpire(tracker) {
|
|
32
40
|
this._expireTracker = tracker;
|
|
33
41
|
return this;
|
|
34
42
|
}
|
|
35
43
|
/**
|
|
36
|
-
* Extends this instance with additional functionality
|
|
44
|
+
* Extends this instance with additional functionality via in-place mutation.
|
|
37
45
|
*
|
|
38
46
|
* **Capabilities:**
|
|
39
|
-
* - `overrideFactory`: Wrap the factory
|
|
40
|
-
* - `extendShape`: Add custom properties/methods
|
|
47
|
+
* - `overrideFactory`: Wrap the factory (logging, retry, caching, etc.)
|
|
48
|
+
* - `extendShape`: Add custom properties/methods
|
|
49
|
+
* - `dispose`: Cleanup resources when disposed
|
|
41
50
|
*
|
|
42
51
|
* **Type Safety:**
|
|
43
52
|
* - Use `ILazyPromiseExtension<any>` for universal extensions
|
|
44
|
-
* - Use `ILazyPromiseExtension<ConcreteType>` for type-specific extensions
|
|
53
|
+
* - Use `ILazyPromiseExtension<ConcreteType>` for type-specific extensions
|
|
45
54
|
*
|
|
46
|
-
* **Note:** Extensions mutate the instance and can be chained.
|
|
55
|
+
* **Note:** Extensions mutate the instance and can be chained.
|
|
47
56
|
*
|
|
48
|
-
* @param extension -
|
|
49
|
-
* @returns The same instance
|
|
57
|
+
* @param extension - Extension configuration
|
|
58
|
+
* @returns The same instance with applied extensions
|
|
50
59
|
*
|
|
51
60
|
* @example
|
|
52
61
|
* ```typescript
|
|
53
|
-
* // Universal logging extension
|
|
54
62
|
* const logged = lazy.extend({
|
|
55
63
|
* overrideFactory: (factory) => async (refreshing) => {
|
|
56
64
|
* console.log('Loading...');
|
|
57
65
|
* return await factory(refreshing);
|
|
58
66
|
* }
|
|
59
67
|
* });
|
|
60
|
-
*
|
|
61
|
-
* // Type-specific extension with custom methods
|
|
62
|
-
* const enhanced = lazyNumber.extend<{ double: () => number | undefined }>({
|
|
63
|
-
* extendShape: (instance) => Object.assign(instance, {
|
|
64
|
-
* double: () => instance.currentValue !== undefined
|
|
65
|
-
* ? instance.currentValue * 2
|
|
66
|
-
* : undefined
|
|
67
|
-
* })
|
|
68
|
-
* });
|
|
69
|
-
*
|
|
70
|
-
* // Chaining multiple extensions
|
|
71
|
-
* const composed = lazy
|
|
72
|
-
* .extend(cacheExtension)
|
|
73
|
-
* .extend(loggingExtension);
|
|
74
68
|
* ```
|
|
75
69
|
*/
|
|
76
70
|
extend(
|
|
77
71
|
// Partial allows extensions with extra properties beyond the interface
|
|
78
72
|
// 'any' type parameter doesn't affect return type since we return 'this'
|
|
79
73
|
extension) {
|
|
80
|
-
|
|
81
|
-
if (extension.overrideFactory) {
|
|
82
|
-
this._factory = extension.overrideFactory(this._factory, this);
|
|
83
|
-
}
|
|
74
|
+
let extended = this;
|
|
84
75
|
// Apply shape extension if provided
|
|
85
76
|
if (extension.extendShape) {
|
|
86
|
-
|
|
77
|
+
extended = extension.extendShape(this);
|
|
87
78
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
|
|
92
|
-
// do not reset the instance, just make sure it will be reloaded
|
|
93
|
-
this._isLoading = null;
|
|
79
|
+
// Override the factory if provided
|
|
80
|
+
if (extension.overrideFactory) {
|
|
81
|
+
this._factory = extension.overrideFactory(this._factory, extended);
|
|
94
82
|
}
|
|
95
|
-
if (
|
|
96
|
-
|
|
97
|
-
|
|
83
|
+
if (extension.dispose) {
|
|
84
|
+
const previousDisposer = this._ownDisposer;
|
|
85
|
+
const nextDisposer = extension.dispose;
|
|
86
|
+
this._ownDisposer = () => {
|
|
87
|
+
nextDisposer(extended);
|
|
88
|
+
previousDisposer?.();
|
|
89
|
+
};
|
|
98
90
|
}
|
|
91
|
+
return extended;
|
|
99
92
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
if (!this._isLoading && this._instance !== undefined) {
|
|
108
|
-
return this._instance;
|
|
109
|
-
}
|
|
110
|
-
this.setInstance(res);
|
|
111
|
-
return res;
|
|
112
|
-
}
|
|
113
|
-
onRejected(e) {
|
|
114
|
-
this._isLoading = false;
|
|
115
|
-
this._instance = this._initial;
|
|
116
|
-
this._promise = Promise.resolve(this._initial);
|
|
117
|
-
this.setError(e);
|
|
118
|
-
return this._initial;
|
|
119
|
-
}
|
|
93
|
+
/**
|
|
94
|
+
* Manually sets the value and marks loading as complete.
|
|
95
|
+
* Clears any errors and restarts the expiration tracker if configured.
|
|
96
|
+
*
|
|
97
|
+
* @param res - The value to set
|
|
98
|
+
* @returns The value that was set
|
|
99
|
+
*/
|
|
120
100
|
setInstance(res) {
|
|
121
101
|
this._isLoading = false;
|
|
122
102
|
this.clearError(); // clear error on successful set
|
|
@@ -124,41 +104,24 @@ export class LazyPromise {
|
|
|
124
104
|
// + make sure it's resolved with the freshest value
|
|
125
105
|
// also do this before setting the instance... just in case :)
|
|
126
106
|
this._promise = Promise.resolve(res);
|
|
107
|
+
this._activeFactoryPromise = null;
|
|
127
108
|
this._instance = res;
|
|
128
|
-
|
|
129
|
-
this._expireTracker.restart();
|
|
130
|
-
}
|
|
109
|
+
this._expireTracker?.restart();
|
|
131
110
|
return res;
|
|
132
111
|
}
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Re-executes the factory to get fresh data.
|
|
114
|
+
*
|
|
115
|
+
* **Concurrency handling:**
|
|
116
|
+
* - Supersedes any in-progress load or refresh
|
|
117
|
+
* - Multiple concurrent refreshes: latest wins
|
|
118
|
+
* - All awaiting promises receive the final refreshed value
|
|
119
|
+
*
|
|
120
|
+
* @returns Promise resolving to the refreshed value
|
|
121
|
+
*/
|
|
139
122
|
async refresh() {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
myPromise = this._factory(true);
|
|
143
|
-
// every new refresh overrides the previous one
|
|
144
|
-
// so this one becomes "last"
|
|
145
|
-
// and previous becomes stale and won't update the value when it resolves
|
|
146
|
-
this._lastRefreshingPromise = myPromise;
|
|
147
|
-
const fresh = await myPromise;
|
|
148
|
-
if (this._lastRefreshingPromise === myPromise) {
|
|
149
|
-
this.setInstance(fresh);
|
|
150
|
-
}
|
|
151
|
-
return fresh;
|
|
152
|
-
}
|
|
153
|
-
catch (e) {
|
|
154
|
-
this.setError(e);
|
|
155
|
-
return this._instance;
|
|
156
|
-
}
|
|
157
|
-
finally {
|
|
158
|
-
if (myPromise != null && this._lastRefreshingPromise === myPromise) {
|
|
159
|
-
this._lastRefreshingPromise = null;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
123
|
+
this.startLoading(true);
|
|
124
|
+
return this._promise;
|
|
162
125
|
}
|
|
163
126
|
reset() {
|
|
164
127
|
this._isLoading = null;
|
|
@@ -167,6 +130,7 @@ export class LazyPromise {
|
|
|
167
130
|
this._instance = this._initial;
|
|
168
131
|
const p = this._promise;
|
|
169
132
|
this._promise = undefined;
|
|
133
|
+
this._activeFactoryPromise = null; // Clear active promise reference
|
|
170
134
|
// check if loading is still in progress
|
|
171
135
|
// need to dispose abandoned value
|
|
172
136
|
if (p && !wasDisposed) {
|
|
@@ -176,8 +140,73 @@ export class LazyPromise {
|
|
|
176
140
|
}
|
|
177
141
|
}
|
|
178
142
|
dispose() {
|
|
143
|
+
this._ownDisposer?.();
|
|
179
144
|
this.reset();
|
|
180
145
|
}
|
|
146
|
+
ensureInstanceLoading() {
|
|
147
|
+
if (this.isLoading === false && this._instance !== undefined && this._expireTracker?.isExpired) {
|
|
148
|
+
// do not reset the instance, just make sure it will be reloaded
|
|
149
|
+
this._isLoading = null;
|
|
150
|
+
}
|
|
151
|
+
if (this._isLoading === null) {
|
|
152
|
+
this._isLoading = true;
|
|
153
|
+
this.startLoading(false);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
startLoading(refreshing) {
|
|
157
|
+
if (!refreshing && this._activeFactoryPromise) {
|
|
158
|
+
// Case when refreshing already is happening - we have an active promise
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const factoryPromise = this._factory(refreshing)
|
|
162
|
+
.then(res => {
|
|
163
|
+
if (!this._activeFactoryPromise) {
|
|
164
|
+
// this promise was abandoned: was superseded or reset called
|
|
165
|
+
return this._instance ?? this._initial;
|
|
166
|
+
}
|
|
167
|
+
if (this._activeFactoryPromise === factoryPromise) {
|
|
168
|
+
// case: during the promise `setInstance` was called manually
|
|
169
|
+
if (!refreshing && !this._isLoading && this._instance !== undefined) {
|
|
170
|
+
return this._instance;
|
|
171
|
+
}
|
|
172
|
+
this.setInstance(res);
|
|
173
|
+
return res;
|
|
174
|
+
}
|
|
175
|
+
// Stale promise - return the latest active promise instead
|
|
176
|
+
// This ensures anyone awaiting this old promise gets the fresh value
|
|
177
|
+
return this._activeFactoryPromise;
|
|
178
|
+
})
|
|
179
|
+
.catch(err => {
|
|
180
|
+
if (!this._activeFactoryPromise || this._activeFactoryPromise === factoryPromise) {
|
|
181
|
+
return this.onRejected(err);
|
|
182
|
+
}
|
|
183
|
+
throw err;
|
|
184
|
+
});
|
|
185
|
+
const hadActive = !!this._activeFactoryPromise;
|
|
186
|
+
// This is now the active promise - any previous one is superseded
|
|
187
|
+
this._activeFactoryPromise = factoryPromise;
|
|
188
|
+
// don't overwrite an existing promise (e.g., from refresh)
|
|
189
|
+
// it should pick up the new active promise automatically
|
|
190
|
+
if (!this._promise || !hadActive) {
|
|
191
|
+
this._promise = factoryPromise;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
onRejected(e) {
|
|
195
|
+
this._isLoading = false;
|
|
196
|
+
// Keep the current instance on error (don't reset to initial)
|
|
197
|
+
// This allows retaining the last successful value
|
|
198
|
+
const currentInstance = this._instance !== undefined ? this._instance : this._initial;
|
|
199
|
+
this._promise = Promise.resolve(currentInstance);
|
|
200
|
+
this._activeFactoryPromise = null;
|
|
201
|
+
this.setError(e);
|
|
202
|
+
return currentInstance;
|
|
203
|
+
}
|
|
204
|
+
setError(err) {
|
|
205
|
+
this._error = this.parseError(err);
|
|
206
|
+
}
|
|
207
|
+
clearError() {
|
|
208
|
+
this._error = null;
|
|
209
|
+
}
|
|
181
210
|
parseError(err) {
|
|
182
211
|
if (typeof err === 'string') {
|
|
183
212
|
return err;
|
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,MAAM,OAAO,WAAW;IAEZ,QAAQ,CAAiB;IAChB,QAAQ,CAAW;IAE5B,SAAS,CAAe;IACxB,UAAU,GAAmB,IAAI,CAAC;IAElC,QAAQ,CAAyB;IACjC,cAAc,CAA6B;
|
|
1
|
+
{"version":3,"file":"promise.js","sourceRoot":"","sources":["../../../src/lazy/promise.ts"],"names":[],"mappings":"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"}
|
|
@@ -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/lazy.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ import { type IDisposable } from '../functions/disposer.js';
|
|
|
2
2
|
import type { IResettableModel } from '../models/types.js';
|
|
3
3
|
import type { IExpireTracker } from '../structures/expire.js';
|
|
4
4
|
import type { ILazy } from './types.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
|
export declare class Lazy<T> implements ILazy<T>, IDisposable, IResettableModel {
|
|
6
10
|
protected readonly _factory: (() => T);
|
|
7
11
|
protected _instance: T | undefined;
|
|
@@ -15,9 +19,13 @@ export declare class Lazy<T> implements ILazy<T>, IDisposable, IResettableModel
|
|
|
15
19
|
get error(): string | null;
|
|
16
20
|
/** Override me: additional way to make sure instance is valid */
|
|
17
21
|
protected get isValid(): boolean;
|
|
22
|
+
/** Provides custom cleanup logic when the instance is reset or disposed. */
|
|
18
23
|
withDisposer(disposer: (prev: T) => void): this;
|
|
24
|
+
/** Configures automatic cache expiration using an expire tracker. */
|
|
19
25
|
withExpire(tracker: IExpireTracker | undefined): this;
|
|
26
|
+
/** Eagerly loads the value without accessing it. Useful for preloading. */
|
|
20
27
|
prewarm(): this;
|
|
28
|
+
/** Manually sets the cached value. */
|
|
21
29
|
setInstance(instance: T | undefined): void;
|
|
22
30
|
reset(): void;
|
|
23
31
|
dispose(): void;
|