@zajno/common 2.8.3 → 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/cjs/lazy/promise.js +30 -11
- package/cjs/lazy/promise.js.map +1 -1
- package/esm/lazy/promise.js +30 -11
- package/esm/lazy/promise.js.map +1 -1
- package/package.json +1 -1
- package/types/lazy/promise.d.ts +7 -2
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":"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"}
|
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":"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"}
|
package/package.json
CHANGED
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;
|