async-reactivity 2.0.18 → 2.0.20
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/lib/computed.js +23 -6
- package/lib/computed.test.js +11 -2
- package/lib/deferrer.js +17 -0
- package/lib/listener.js +10 -7
- package/lib/listener.test.js +20 -0
- package/package.json +5 -1
- package/src/computed.test.ts +16 -2
- package/src/computed.ts +29 -9
- package/src/deferrer.ts +16 -0
- package/src/dependency.ts +1 -1
- package/src/listener.test.ts +30 -0
- package/src/listener.ts +11 -7
- package/types/computed.d.ts +4 -1
- package/types/computed.d.ts.map +1 -1
- package/types/deferrer.d.ts +7 -0
- package/types/deferrer.d.ts.map +1 -0
- package/types/dependency.d.ts +1 -1
- package/types/dependency.d.ts.map +1 -1
- package/types/listener.d.ts +2 -1
- package/types/listener.d.ts.map +1 -1
- package/lib/isEqual.js +0 -1
- package/lib/syncListener.js +0 -22
- package/types/index.test.d.ts +0 -2
- package/types/index.test.d.ts.map +0 -1
- package/types/isEqual.d.ts +0 -3
- package/types/isEqual.d.ts.map +0 -1
- package/types/syncListener.d.ts +0 -8
- package/types/syncListener.d.ts.map +0 -1
package/lib/computed.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import Tracker from "./tracker.js";
|
|
2
2
|
import defaultIsEqual from "./defaultIsEqual.js";
|
|
3
|
+
import { Deferrer } from "./deferrer.js";
|
|
4
|
+
import { debounce } from 'lodash-es';
|
|
3
5
|
var ComputedState;
|
|
4
6
|
(function (ComputedState) {
|
|
5
7
|
ComputedState[ComputedState["Invalid"] = 0] = "Invalid";
|
|
@@ -18,11 +20,19 @@ export default class Computed extends Tracker {
|
|
|
18
20
|
computePromise;
|
|
19
21
|
computePromiseActions;
|
|
20
22
|
lastComputeAttemptPromise;
|
|
21
|
-
|
|
23
|
+
deferrer;
|
|
24
|
+
constructor(getter, isEqual = (defaultIsEqual), timeToLive) {
|
|
22
25
|
super();
|
|
23
26
|
this.getter = getter;
|
|
24
27
|
this.isEqual = isEqual;
|
|
25
28
|
this.prepareComputePromise();
|
|
29
|
+
if (timeToLive !== undefined) {
|
|
30
|
+
this.deferrer = new Deferrer(debounce(() => {
|
|
31
|
+
if (this.dependents.size === 0) {
|
|
32
|
+
this.reset();
|
|
33
|
+
}
|
|
34
|
+
}, timeToLive));
|
|
35
|
+
}
|
|
26
36
|
}
|
|
27
37
|
prepareComputePromise() {
|
|
28
38
|
this.computePromise = new Promise((resolve, reject) => {
|
|
@@ -61,7 +71,7 @@ export default class Computed extends Tracker {
|
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
73
|
this.state = ComputedState.Computing;
|
|
64
|
-
this.clearDependencies();
|
|
74
|
+
this.clearDependencies(true);
|
|
65
75
|
const newValue = this.getter(this.trackDependency, this._value);
|
|
66
76
|
if (this.isEqual(newValue, this._value)) {
|
|
67
77
|
this.handlePromiseThen(this.lastComputeAttemptPromise, this._value);
|
|
@@ -80,9 +90,9 @@ export default class Computed extends Tracker {
|
|
|
80
90
|
}
|
|
81
91
|
return this._value;
|
|
82
92
|
}
|
|
83
|
-
clearDependencies() {
|
|
93
|
+
clearDependencies(compute) {
|
|
84
94
|
for (const dependency of this.dependencies.keys()) {
|
|
85
|
-
dependency.removeDependent(this);
|
|
95
|
+
dependency.removeDependent(this, compute ? this.computePromise : undefined);
|
|
86
96
|
}
|
|
87
97
|
this.dependencies.clear();
|
|
88
98
|
}
|
|
@@ -134,11 +144,18 @@ export default class Computed extends Tracker {
|
|
|
134
144
|
dependent.validate(this);
|
|
135
145
|
}
|
|
136
146
|
}
|
|
137
|
-
|
|
138
|
-
|
|
147
|
+
removeDependent(dependent, promise = Promise.resolve()) {
|
|
148
|
+
super.removeDependent(dependent);
|
|
149
|
+
this.deferrer?.finally(promise);
|
|
150
|
+
}
|
|
151
|
+
reset() {
|
|
152
|
+
this.clearDependencies(false);
|
|
139
153
|
this.state = ComputedState.Invalid;
|
|
140
154
|
this._value = undefined;
|
|
141
155
|
this.lastComputeAttemptPromise = undefined;
|
|
142
156
|
this.prepareComputePromise();
|
|
143
157
|
}
|
|
158
|
+
dispose() {
|
|
159
|
+
this.reset();
|
|
160
|
+
}
|
|
144
161
|
}
|
package/lib/computed.test.js
CHANGED
|
@@ -243,7 +243,7 @@ describe('async computed', function () {
|
|
|
243
243
|
});
|
|
244
244
|
assert.rejects(() => a.value);
|
|
245
245
|
});
|
|
246
|
-
it('
|
|
246
|
+
it('reset computed', async function () {
|
|
247
247
|
const a = new Ref(5);
|
|
248
248
|
let gate = 0;
|
|
249
249
|
const b = new Computed(value => {
|
|
@@ -252,8 +252,17 @@ describe('async computed', function () {
|
|
|
252
252
|
});
|
|
253
253
|
b.value;
|
|
254
254
|
assert.strictEqual(gate, 1);
|
|
255
|
-
b.
|
|
255
|
+
b.reset();
|
|
256
256
|
b.value;
|
|
257
257
|
assert.strictEqual(gate, 2);
|
|
258
258
|
});
|
|
259
|
+
it('auto reset', async function () {
|
|
260
|
+
const a = new Computed(() => true, undefined, 0);
|
|
261
|
+
const b = new Computed(value => value(a));
|
|
262
|
+
assert.strictEqual(b.value, true);
|
|
263
|
+
b.dispose();
|
|
264
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
265
|
+
// @ts-expect-error
|
|
266
|
+
assert.strictEqual(a._value, undefined);
|
|
267
|
+
});
|
|
259
268
|
});
|
package/lib/deferrer.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export class Deferrer {
|
|
2
|
+
callback;
|
|
3
|
+
lastPromise;
|
|
4
|
+
constructor(callback) {
|
|
5
|
+
this.callback = callback;
|
|
6
|
+
}
|
|
7
|
+
finally(promise) {
|
|
8
|
+
const currentPromise = Promise.all([this.lastPromise, promise])
|
|
9
|
+
.finally(() => {
|
|
10
|
+
if (this.lastPromise === currentPromise) {
|
|
11
|
+
this.lastPromise = undefined;
|
|
12
|
+
this.callback();
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
this.lastPromise = currentPromise;
|
|
16
|
+
}
|
|
17
|
+
}
|
package/lib/listener.js
CHANGED
|
@@ -1,13 +1,21 @@
|
|
|
1
1
|
import Ref from "./ref.js";
|
|
2
2
|
import defaultIsEqual from "./defaultIsEqual.js";
|
|
3
|
+
import { Deferrer } from "./deferrer.js";
|
|
3
4
|
export default class Listener extends Ref {
|
|
4
5
|
start;
|
|
5
6
|
stop;
|
|
6
7
|
listening = false;
|
|
8
|
+
deferrer;
|
|
7
9
|
constructor(_value, start, stop, isEqual = (defaultIsEqual)) {
|
|
8
10
|
super(_value, isEqual);
|
|
9
11
|
this.start = start;
|
|
10
12
|
this.stop = stop;
|
|
13
|
+
this.deferrer = new Deferrer(() => {
|
|
14
|
+
if (this.dependents.size === 0) {
|
|
15
|
+
this.listening = false;
|
|
16
|
+
this.stop();
|
|
17
|
+
}
|
|
18
|
+
});
|
|
11
19
|
}
|
|
12
20
|
addDependent(dependent) {
|
|
13
21
|
super.addDependent(dependent);
|
|
@@ -16,13 +24,8 @@ export default class Listener extends Ref {
|
|
|
16
24
|
this.start();
|
|
17
25
|
}
|
|
18
26
|
}
|
|
19
|
-
removeDependent(dependent) {
|
|
27
|
+
removeDependent(dependent, promise = Promise.resolve()) {
|
|
20
28
|
super.removeDependent(dependent);
|
|
21
|
-
|
|
22
|
-
if (this.dependents.size === 0) {
|
|
23
|
-
this.listening = false;
|
|
24
|
-
this.stop();
|
|
25
|
-
}
|
|
26
|
-
});
|
|
29
|
+
this.deferrer.finally(promise);
|
|
27
30
|
}
|
|
28
31
|
}
|
package/lib/listener.test.js
CHANGED
|
@@ -75,4 +75,24 @@ describe('listener', function () {
|
|
|
75
75
|
b.value;
|
|
76
76
|
assert.strictEqual(gate, 1);
|
|
77
77
|
});
|
|
78
|
+
it('keep listening when recomputing async', async function () {
|
|
79
|
+
let gate = 0;
|
|
80
|
+
const listener = new Listener(1, () => {
|
|
81
|
+
gate++;
|
|
82
|
+
}, () => { });
|
|
83
|
+
const a = new Ref(5);
|
|
84
|
+
const b = new Computed(async (value) => {
|
|
85
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
86
|
+
return value(a) + value(listener);
|
|
87
|
+
});
|
|
88
|
+
const c = new Watcher(listener, () => { });
|
|
89
|
+
b.value;
|
|
90
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
91
|
+
assert.strictEqual(gate, 1);
|
|
92
|
+
a.value = 6;
|
|
93
|
+
b.value;
|
|
94
|
+
c.dispose();
|
|
95
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
96
|
+
assert.strictEqual(gate, 1);
|
|
97
|
+
});
|
|
78
98
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "async-reactivity",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.20",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "types/index.d.ts",
|
|
@@ -22,9 +22,13 @@
|
|
|
22
22
|
"author": "Donatas Lučiūnas",
|
|
23
23
|
"license": "ISC",
|
|
24
24
|
"devDependencies": {
|
|
25
|
+
"@types/lodash-es": "^4.17.12",
|
|
25
26
|
"@types/mocha": "^10.0.8",
|
|
26
27
|
"@types/node": "^22.13.11",
|
|
27
28
|
"mocha": "^10.7.3",
|
|
28
29
|
"typescript": "^5.8.2"
|
|
30
|
+
},
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"lodash-es": "^4.17.21"
|
|
29
33
|
}
|
|
30
34
|
}
|
package/src/computed.test.ts
CHANGED
|
@@ -280,7 +280,7 @@ describe('async computed', function () {
|
|
|
280
280
|
assert.rejects(() => a.value);
|
|
281
281
|
});
|
|
282
282
|
|
|
283
|
-
it('
|
|
283
|
+
it('reset computed', async function () {
|
|
284
284
|
const a = new Ref(5);
|
|
285
285
|
let gate = 0;
|
|
286
286
|
const b = new Computed(value => {
|
|
@@ -289,8 +289,22 @@ describe('async computed', function () {
|
|
|
289
289
|
});
|
|
290
290
|
b.value;
|
|
291
291
|
assert.strictEqual(gate, 1);
|
|
292
|
-
b.
|
|
292
|
+
b.reset();
|
|
293
293
|
b.value;
|
|
294
294
|
assert.strictEqual(gate, 2);
|
|
295
295
|
});
|
|
296
|
+
|
|
297
|
+
it('auto reset', async function() {
|
|
298
|
+
const a = new Computed(() => true, undefined, 0);
|
|
299
|
+
const b = new Computed(value => value(a));
|
|
300
|
+
|
|
301
|
+
assert.strictEqual(b.value, true);
|
|
302
|
+
|
|
303
|
+
b.dispose();
|
|
304
|
+
|
|
305
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
306
|
+
|
|
307
|
+
// @ts-expect-error
|
|
308
|
+
assert.strictEqual(a._value, undefined);
|
|
309
|
+
});
|
|
296
310
|
});
|
package/src/computed.ts
CHANGED
|
@@ -2,6 +2,8 @@ import Dependency from "./dependency.js";
|
|
|
2
2
|
import Dependent from "./dependent.js";
|
|
3
3
|
import Tracker from "./tracker.js";
|
|
4
4
|
import defaultIsEqual from "./defaultIsEqual.js";
|
|
5
|
+
import { Deferrer } from "./deferrer.js";
|
|
6
|
+
import { debounce } from 'lodash-es';
|
|
5
7
|
|
|
6
8
|
export declare type TrackValue = <T>(dependency: Dependency<T>) => T;
|
|
7
9
|
export declare type ComputeFunc<T> = (value: TrackValue, previousValue?: T) => T;
|
|
@@ -21,15 +23,24 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
21
23
|
isEqual: typeof defaultIsEqual<TBase>;
|
|
22
24
|
private state = ComputedState.Invalid;
|
|
23
25
|
private dependencies = new Map<Dependency<any>, boolean>();
|
|
24
|
-
private computePromise?:
|
|
26
|
+
private computePromise?: Promise<any>;
|
|
25
27
|
private computePromiseActions?: { resolve: Function, reject: Function };
|
|
26
28
|
private lastComputeAttemptPromise?: Promise<void>;
|
|
29
|
+
private deferrer?: Deferrer;
|
|
27
30
|
|
|
28
|
-
constructor(getter: ComputeFunc<T>, isEqual = defaultIsEqual<TBase
|
|
31
|
+
constructor(getter: ComputeFunc<T>, isEqual = defaultIsEqual<TBase>, timeToLive?: number) {
|
|
29
32
|
super();
|
|
30
33
|
this.getter = getter;
|
|
31
34
|
this.isEqual = isEqual;
|
|
32
35
|
this.prepareComputePromise();
|
|
36
|
+
|
|
37
|
+
if (timeToLive !== undefined) {
|
|
38
|
+
this.deferrer = new Deferrer(debounce(() => {
|
|
39
|
+
if (this.dependents.size === 0) {
|
|
40
|
+
this.reset();
|
|
41
|
+
}
|
|
42
|
+
}, timeToLive));
|
|
43
|
+
}
|
|
33
44
|
}
|
|
34
45
|
|
|
35
46
|
private prepareComputePromise() {
|
|
@@ -38,7 +49,7 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
38
49
|
resolve,
|
|
39
50
|
reject
|
|
40
51
|
};
|
|
41
|
-
})
|
|
52
|
+
});
|
|
42
53
|
}
|
|
43
54
|
|
|
44
55
|
public get value(): T {
|
|
@@ -72,7 +83,7 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
72
83
|
}
|
|
73
84
|
|
|
74
85
|
this.state = ComputedState.Computing;
|
|
75
|
-
this.clearDependencies();
|
|
86
|
+
this.clearDependencies(true);
|
|
76
87
|
|
|
77
88
|
const newValue: T = this.getter(this.trackDependency, this._value);
|
|
78
89
|
if (this.isEqual(newValue, this._value!)) {
|
|
@@ -83,7 +94,7 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
83
94
|
.then(result => this.handlePromiseThen(computeAttemptPromise, result))
|
|
84
95
|
.catch(error => this.handlePromiseCatch(computeAttemptPromise, error)) as Promise<void>;
|
|
85
96
|
this.lastComputeAttemptPromise = computeAttemptPromise;
|
|
86
|
-
this._value = this.computePromise
|
|
97
|
+
this._value = this.computePromise! as T;
|
|
87
98
|
} else {
|
|
88
99
|
this._value = newValue;
|
|
89
100
|
this.handlePromiseThen(this.lastComputeAttemptPromise!, this._value);
|
|
@@ -91,9 +102,9 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
91
102
|
return this._value!;
|
|
92
103
|
}
|
|
93
104
|
|
|
94
|
-
private clearDependencies() {
|
|
105
|
+
private clearDependencies(compute: boolean) {
|
|
95
106
|
for (const dependency of this.dependencies.keys()) {
|
|
96
|
-
dependency.removeDependent(this);
|
|
107
|
+
dependency.removeDependent(this, compute ? this.computePromise : undefined);
|
|
97
108
|
}
|
|
98
109
|
this.dependencies.clear();
|
|
99
110
|
}
|
|
@@ -154,11 +165,20 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
154
165
|
}
|
|
155
166
|
}
|
|
156
167
|
|
|
157
|
-
public
|
|
158
|
-
|
|
168
|
+
public removeDependent(dependent: Dependent, promise = Promise.resolve()): void {
|
|
169
|
+
super.removeDependent(dependent);
|
|
170
|
+
this.deferrer?.finally(promise);
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
public reset() {
|
|
174
|
+
this.clearDependencies(false);
|
|
159
175
|
this.state = ComputedState.Invalid;
|
|
160
176
|
this._value = undefined;
|
|
161
177
|
this.lastComputeAttemptPromise = undefined;
|
|
162
178
|
this.prepareComputePromise();
|
|
163
179
|
}
|
|
180
|
+
|
|
181
|
+
public dispose() {
|
|
182
|
+
this.reset();
|
|
183
|
+
}
|
|
164
184
|
}
|
package/src/deferrer.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class Deferrer {
|
|
2
|
+
private lastPromise?: Promise<any>;
|
|
3
|
+
|
|
4
|
+
constructor(private readonly callback: Function) { }
|
|
5
|
+
|
|
6
|
+
finally(promise: Promise<any>) {
|
|
7
|
+
const currentPromise = Promise.all([this.lastPromise, promise])
|
|
8
|
+
.finally(() => {
|
|
9
|
+
if (this.lastPromise === currentPromise) {
|
|
10
|
+
this.lastPromise = undefined;
|
|
11
|
+
this.callback();
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
this.lastPromise = currentPromise;
|
|
15
|
+
}
|
|
16
|
+
}
|
package/src/dependency.ts
CHANGED
package/src/listener.test.ts
CHANGED
|
@@ -120,4 +120,34 @@ describe('listener', function () {
|
|
|
120
120
|
b.value;
|
|
121
121
|
assert.strictEqual(gate, 1);
|
|
122
122
|
});
|
|
123
|
+
|
|
124
|
+
it('keep listening when recomputing async', async function() {
|
|
125
|
+
let gate = 0;
|
|
126
|
+
const listener = new Listener(
|
|
127
|
+
1,
|
|
128
|
+
() => {
|
|
129
|
+
gate++;
|
|
130
|
+
},
|
|
131
|
+
() => {}
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
const a = new Ref(5);
|
|
135
|
+
|
|
136
|
+
const b = new Computed(async value => {
|
|
137
|
+
await new Promise(resolve => setTimeout(resolve, 10));
|
|
138
|
+
return value(a) + value(listener);
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
const c = new Watcher(listener, () => {});
|
|
142
|
+
|
|
143
|
+
b.value;
|
|
144
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
145
|
+
assert.strictEqual(gate, 1);
|
|
146
|
+
|
|
147
|
+
a.value = 6;
|
|
148
|
+
b.value;
|
|
149
|
+
c.dispose();
|
|
150
|
+
await new Promise(resolve => setTimeout(resolve, 20));
|
|
151
|
+
assert.strictEqual(gate, 1);
|
|
152
|
+
});
|
|
123
153
|
});
|
package/src/listener.ts
CHANGED
|
@@ -1,17 +1,26 @@
|
|
|
1
1
|
import Dependent from "./dependent.js";
|
|
2
2
|
import Ref from "./ref.js";
|
|
3
3
|
import defaultIsEqual from "./defaultIsEqual.js";
|
|
4
|
+
import { Deferrer } from "./deferrer.js";
|
|
4
5
|
|
|
5
6
|
export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
|
|
6
7
|
private start: () => void;
|
|
7
8
|
private stop: () => void;
|
|
8
9
|
private listening = false;
|
|
10
|
+
private deferrer: Deferrer;
|
|
9
11
|
|
|
10
12
|
constructor(_value: T, start: () => void, stop: () => void, isEqual = defaultIsEqual<TBase>) {
|
|
11
13
|
super(_value, isEqual);
|
|
12
14
|
|
|
13
15
|
this.start = start;
|
|
14
16
|
this.stop = stop;
|
|
17
|
+
|
|
18
|
+
this.deferrer = new Deferrer(() => {
|
|
19
|
+
if (this.dependents.size === 0) {
|
|
20
|
+
this.listening = false;
|
|
21
|
+
this.stop();
|
|
22
|
+
}
|
|
23
|
+
});
|
|
15
24
|
}
|
|
16
25
|
|
|
17
26
|
public addDependent(dependent: Dependent): void {
|
|
@@ -22,13 +31,8 @@ export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
|
|
|
22
31
|
}
|
|
23
32
|
}
|
|
24
33
|
|
|
25
|
-
public removeDependent(dependent: Dependent): void {
|
|
34
|
+
public removeDependent(dependent: Dependent, promise = Promise.resolve()): void {
|
|
26
35
|
super.removeDependent(dependent);
|
|
27
|
-
|
|
28
|
-
if (this.dependents.size === 0) {
|
|
29
|
-
this.listening = false;
|
|
30
|
-
this.stop();
|
|
31
|
-
}
|
|
32
|
-
})
|
|
36
|
+
this.deferrer.finally(promise);
|
|
33
37
|
}
|
|
34
38
|
}
|
package/types/computed.d.ts
CHANGED
|
@@ -13,7 +13,8 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
13
13
|
private computePromise?;
|
|
14
14
|
private computePromiseActions?;
|
|
15
15
|
private lastComputeAttemptPromise?;
|
|
16
|
-
|
|
16
|
+
private deferrer?;
|
|
17
|
+
constructor(getter: ComputeFunc<T>, isEqual?: (v1: TBase, v2: TBase) => boolean, timeToLive?: number);
|
|
17
18
|
private prepareComputePromise;
|
|
18
19
|
get value(): T;
|
|
19
20
|
private compute;
|
|
@@ -27,6 +28,8 @@ export default class Computed<T extends TBase, TBase = T> extends Tracker<T> imp
|
|
|
27
28
|
forceInvalidate(): void;
|
|
28
29
|
validate(dependency: Dependency<any>): void;
|
|
29
30
|
private validateDependents;
|
|
31
|
+
removeDependent(dependent: Dependent, promise?: Promise<void>): void;
|
|
32
|
+
reset(): void;
|
|
30
33
|
dispose(): void;
|
|
31
34
|
}
|
|
32
35
|
//# sourceMappingURL=computed.d.ts.map
|
package/types/computed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../src/computed.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"computed.d.ts","sourceRoot":"","sources":["../src/computed.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAIjD,MAAM,CAAC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACrE,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACjF,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC;AAWzG,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAC5G,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,EAAE,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;IACtC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAe;IACtC,OAAO,CAAC,qBAAqB,CAAC,CAA0C;IACxE,OAAO,CAAC,yBAAyB,CAAC,CAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,OAAO,oCAAwB,EAAE,UAAU,CAAC,EAAE,MAAM;IAexF,OAAO,CAAC,qBAAqB;IAS7B,IAAW,KAAK,IAAI,CAAC,CAMpB;IAED,OAAO,CAAC,OAAO;IA0Cf,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,iBAAiB;IAOzB,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,eAAe,CAAwC;IAE/D,OAAO,CAAC,iBAAiB;IAMlB,UAAU;IAUV,eAAe;IAKf,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;IAI3C,OAAO,CAAC,kBAAkB;IAMnB,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;IAKxE,KAAK;IAQL,OAAO;CAGjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deferrer.d.ts","sourceRoot":"","sources":["../src/deferrer.ts"],"names":[],"mappings":"AAAA,qBAAa,QAAQ;IAGL,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAFrC,OAAO,CAAC,WAAW,CAAC,CAAe;gBAEN,QAAQ,EAAE,QAAQ;IAE/C,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC;CAUhC"}
|
package/types/dependency.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import Dependent from "./dependent.js";
|
|
|
2
2
|
export default interface Dependency<T> {
|
|
3
3
|
get value(): T;
|
|
4
4
|
addDependent(dependent: Dependent): void;
|
|
5
|
-
removeDependent(dependent: Dependent): void;
|
|
5
|
+
removeDependent(dependent: Dependent, promise?: Promise<any>): void;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=dependency.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../src/dependency.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,CAAC,CAAC;IACf,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../src/dependency.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC,CAAC;IACjC,IAAI,KAAK,IAAI,CAAC,CAAC;IACf,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IACzC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CACvE"}
|
package/types/listener.d.ts
CHANGED
|
@@ -4,8 +4,9 @@ export default class Listener<T extends TBase, TBase = T> extends Ref<T> {
|
|
|
4
4
|
private start;
|
|
5
5
|
private stop;
|
|
6
6
|
private listening;
|
|
7
|
+
private deferrer;
|
|
7
8
|
constructor(_value: T, start: () => void, stop: () => void, isEqual?: (v1: TBase, v2: TBase) => boolean);
|
|
8
9
|
addDependent(dependent: Dependent): void;
|
|
9
|
-
removeDependent(dependent: Dependent): void;
|
|
10
|
+
removeDependent(dependent: Dependent, promise?: Promise<void>): void;
|
|
10
11
|
}
|
|
11
12
|
//# sourceMappingURL=listener.d.ts.map
|
package/types/listener.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,GAAG,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../src/listener.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,GAAG,MAAM,UAAU,CAAC;AAI3B,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,GAAG,CAAC,CAAE,SAAQ,GAAG,CAAC,CAAC,CAAC;IACpE,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,QAAQ,CAAW;gBAEf,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,OAAO,oCAAwB;IAcpF,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAQxC,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,gBAAoB,GAAG,IAAI;CAIlF"}
|
package/lib/isEqual.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export default (v1, v2) => v1 === v2;
|
package/lib/syncListener.js
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import Listener from "./listener.js";
|
|
2
|
-
export default class AsyncListener extends Listener {
|
|
3
|
-
promiseResolve;
|
|
4
|
-
constructor(start, stop) {
|
|
5
|
-
let promiseResolve;
|
|
6
|
-
super(new Promise(resolve => {
|
|
7
|
-
promiseResolve = resolve;
|
|
8
|
-
}), start, stop);
|
|
9
|
-
this.promiseResolve = promiseResolve;
|
|
10
|
-
}
|
|
11
|
-
set value(_value) {
|
|
12
|
-
if (this.promiseResolve) {
|
|
13
|
-
_value.then(this.promiseResolve);
|
|
14
|
-
this.promiseResolve = undefined;
|
|
15
|
-
this._value = _value; // prevent invalidate
|
|
16
|
-
}
|
|
17
|
-
super.value = _value;
|
|
18
|
-
}
|
|
19
|
-
get value() {
|
|
20
|
-
return super.value;
|
|
21
|
-
}
|
|
22
|
-
}
|
package/types/index.test.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
|
package/types/isEqual.d.ts
DELETED
package/types/isEqual.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isEqual.d.ts","sourceRoot":"","sources":["../src/isEqual.ts"],"names":[],"mappings":"yBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC;AAAjC,wBAAgD"}
|
package/types/syncListener.d.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import Listener from "./listener.js";
|
|
2
|
-
export default class AsyncListener<T> extends Listener<Promise<T>> {
|
|
3
|
-
private promiseResolve?;
|
|
4
|
-
constructor(start: () => void, stop: () => void);
|
|
5
|
-
set value(_value: Promise<T>);
|
|
6
|
-
get value(): Promise<T>;
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=syncListener.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"syncListener.d.ts","sourceRoot":"","sources":["../src/syncListener.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,aAAa,CAAC,CAAC,CAAE,SAAQ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,cAAc,CAAC,CAAqB;gBAEhC,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI;IAQ/C,IAAW,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAOlC;IAED,IAAW,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,CAE7B;CACJ"}
|