@fbltd/async 1.0.6 → 1.0.7
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.
|
@@ -7,26 +7,26 @@ function baseComparer(prev, cur) {
|
|
|
7
7
|
}
|
|
8
8
|
class DependencyStream {
|
|
9
9
|
_value;
|
|
10
|
-
|
|
10
|
+
reactionPromise;
|
|
11
11
|
abortPromise = (0, utils_1.getPromise)();
|
|
12
12
|
config;
|
|
13
13
|
constructor(_value, config = {}) {
|
|
14
14
|
this._value = _value;
|
|
15
15
|
this.config = {
|
|
16
|
-
|
|
16
|
+
withCustomEquality: baseComparer,
|
|
17
|
+
withReactionOnSubscribe: false,
|
|
17
18
|
...config,
|
|
18
19
|
};
|
|
19
20
|
}
|
|
20
|
-
_set(v
|
|
21
|
-
if (
|
|
22
|
-
if (this.config.isEqual(this._value, v)) {
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
if (v === this._value)
|
|
21
|
+
_set(v) {
|
|
22
|
+
if (this.config.withCustomEquality(this._value, v)) {
|
|
27
23
|
return;
|
|
24
|
+
}
|
|
28
25
|
this._value = v;
|
|
29
|
-
|
|
26
|
+
if (this.reactionPromise) {
|
|
27
|
+
this.reactionPromise.resolve(v);
|
|
28
|
+
this.reactionPromise = undefined;
|
|
29
|
+
}
|
|
30
30
|
}
|
|
31
31
|
set value(v) {
|
|
32
32
|
this._set(v);
|
|
@@ -37,28 +37,37 @@ class DependencyStream {
|
|
|
37
37
|
[Symbol.asyncIterator]() {
|
|
38
38
|
const totalDispose = this.abortPromise;
|
|
39
39
|
const selfDispose = (0, utils_1.getPromise)();
|
|
40
|
+
const externalPromises = [totalDispose.promise, selfDispose.promise];
|
|
41
|
+
let firstPromise;
|
|
42
|
+
if (this.config.withReactionOnSubscribe) {
|
|
43
|
+
firstPromise = (0, utils_1.getPromise)();
|
|
44
|
+
firstPromise.resolve(this.value);
|
|
45
|
+
externalPromises.push(firstPromise.promise);
|
|
46
|
+
}
|
|
47
|
+
const owner = this;
|
|
40
48
|
return {
|
|
41
|
-
owner
|
|
49
|
+
owner,
|
|
42
50
|
dispose: () => selfDispose.resolve(),
|
|
43
51
|
next: async () => {
|
|
44
|
-
if (!this.
|
|
45
|
-
this.
|
|
52
|
+
if (!this.reactionPromise) {
|
|
53
|
+
this.reactionPromise = (0, utils_1.getPromise)();
|
|
46
54
|
this._set(this._value);
|
|
47
55
|
}
|
|
48
56
|
await Promise.race([
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
this.promiseConf.promise,
|
|
57
|
+
...externalPromises,
|
|
58
|
+
this.reactionPromise.promise,
|
|
52
59
|
]);
|
|
53
|
-
this.promiseConf = undefined;
|
|
54
60
|
if (totalDispose.isFulfilled || selfDispose.isFulfilled) {
|
|
55
61
|
return { done: true };
|
|
56
62
|
}
|
|
57
|
-
|
|
63
|
+
if (firstPromise) {
|
|
64
|
+
firstPromise = undefined;
|
|
65
|
+
externalPromises.pop();
|
|
66
|
+
}
|
|
58
67
|
return {
|
|
59
68
|
done: false,
|
|
60
69
|
get value() {
|
|
61
|
-
return value;
|
|
70
|
+
return owner.value;
|
|
62
71
|
}
|
|
63
72
|
};
|
|
64
73
|
}
|
|
@@ -67,6 +76,7 @@ class DependencyStream {
|
|
|
67
76
|
dispose() {
|
|
68
77
|
this.abortPromise.resolve();
|
|
69
78
|
this.abortPromise = (0, utils_1.getPromise)();
|
|
79
|
+
this.reactionPromise = undefined;
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
82
|
exports.DependencyStream = DependencyStream;
|
package/dist/bin/utils/delay.js
CHANGED
|
@@ -2,11 +2,26 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.delay = delay;
|
|
4
4
|
const get_promise_1 = require("./get-promise");
|
|
5
|
-
function delay(ms = 0) {
|
|
5
|
+
function delay(ms = 0, sync) {
|
|
6
6
|
ms = Math.max(ms, 0);
|
|
7
|
-
|
|
8
|
-
setTimeout(() => {
|
|
9
|
-
resolve();
|
|
10
|
-
}, ms);
|
|
11
|
-
return promise;
|
|
7
|
+
return delay.methods[typeof sync](ms);
|
|
12
8
|
}
|
|
9
|
+
Object.defineProperty(delay, 'methods', {
|
|
10
|
+
value: {
|
|
11
|
+
boolean: (ms) => {
|
|
12
|
+
const start = performance.now();
|
|
13
|
+
while (true) {
|
|
14
|
+
if (performance.now() - start >= ms) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
undefined: (ms) => {
|
|
20
|
+
const { promise, resolve } = (0, get_promise_1.getPromise)();
|
|
21
|
+
setTimeout(() => {
|
|
22
|
+
resolve();
|
|
23
|
+
}, ms);
|
|
24
|
+
return promise;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
});
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
interface
|
|
1
|
+
interface IIsEquals<T> {
|
|
2
2
|
(prev: T, cur: T): boolean;
|
|
3
3
|
}
|
|
4
4
|
type IDependencyStreamConfig<T> = {
|
|
5
|
-
|
|
5
|
+
withCustomEquality: IIsEquals<T>;
|
|
6
|
+
withReactionOnSubscribe: boolean;
|
|
6
7
|
};
|
|
7
8
|
export declare class DependencyStream<T = any> {
|
|
8
9
|
private _value;
|
|
9
|
-
private
|
|
10
|
+
private reactionPromise;
|
|
10
11
|
private abortPromise;
|
|
11
12
|
private config;
|
|
12
13
|
constructor(_value: T, config?: Partial<IDependencyStreamConfig<T>>);
|