async-reactivity 2.0.4 → 2.0.5
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 +10 -2
- package/lib/computed.test.js +18 -0
- package/package.json +1 -1
- package/src/computed.test.ts +21 -0
- package/src/computed.ts +10 -2
- package/types/computed.d.ts.map +1 -1
package/lib/computed.js
CHANGED
|
@@ -41,8 +41,16 @@ export default class Computed extends Tracker {
|
|
|
41
41
|
this.dependencies.set(dependency, true);
|
|
42
42
|
}
|
|
43
43
|
if ([...this.dependencies.keys()].every(d => {
|
|
44
|
-
d
|
|
45
|
-
|
|
44
|
+
if (d instanceof Computed) {
|
|
45
|
+
if (d.state === ComputedState.Valid) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
else if (d.state === ComputedState.Uncertain) {
|
|
49
|
+
d.value;
|
|
50
|
+
return !this.dependencies.get(d);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return false;
|
|
46
54
|
})) {
|
|
47
55
|
this.finalizeComputing();
|
|
48
56
|
this.validateDependents();
|
package/lib/computed.test.js
CHANGED
|
@@ -92,6 +92,24 @@ describe('computed', function () {
|
|
|
92
92
|
return value(b) + 5;
|
|
93
93
|
});
|
|
94
94
|
assert.strictEqual(c.value, 6);
|
|
95
|
+
assert.strictEqual(gate, 1);
|
|
96
|
+
a.value = 7;
|
|
97
|
+
assert.strictEqual(c.value, 6);
|
|
98
|
+
assert.strictEqual(gate, 1);
|
|
99
|
+
});
|
|
100
|
+
it('ignore same computed values', function () {
|
|
101
|
+
let gate = 0;
|
|
102
|
+
const a = new Ref(5);
|
|
103
|
+
const b1 = new Computed((value) => {
|
|
104
|
+
return value(a) % 2;
|
|
105
|
+
});
|
|
106
|
+
const b2 = new Computed(() => 5);
|
|
107
|
+
const c = new Computed((value) => {
|
|
108
|
+
gate++;
|
|
109
|
+
return value(b1) + value(b2);
|
|
110
|
+
});
|
|
111
|
+
assert.strictEqual(c.value, 6);
|
|
112
|
+
assert.strictEqual(gate, 1);
|
|
95
113
|
a.value = 7;
|
|
96
114
|
assert.strictEqual(c.value, 6);
|
|
97
115
|
assert.strictEqual(gate, 1);
|
package/package.json
CHANGED
package/src/computed.test.ts
CHANGED
|
@@ -107,6 +107,27 @@ describe('computed', function () {
|
|
|
107
107
|
});
|
|
108
108
|
|
|
109
109
|
assert.strictEqual(c.value, 6);
|
|
110
|
+
assert.strictEqual(gate, 1);
|
|
111
|
+
|
|
112
|
+
a.value = 7;
|
|
113
|
+
assert.strictEqual(c.value, 6);
|
|
114
|
+
assert.strictEqual(gate, 1);
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
it('ignore same computed values', function () {
|
|
118
|
+
let gate = 0;
|
|
119
|
+
const a = new Ref(5);
|
|
120
|
+
const b1 = new Computed((value) => {
|
|
121
|
+
return value(a) % 2;
|
|
122
|
+
});
|
|
123
|
+
const b2 = new Computed(() => 5);
|
|
124
|
+
const c = new Computed((value) => {
|
|
125
|
+
gate++;
|
|
126
|
+
return value(b1) + value(b2);
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
assert.strictEqual(c.value, 6);
|
|
130
|
+
assert.strictEqual(gate, 1);
|
|
110
131
|
|
|
111
132
|
a.value = 7;
|
|
112
133
|
assert.strictEqual(c.value, 6);
|
package/src/computed.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import Dependency from "./dependency.js";
|
|
2
2
|
import Dependent from "./dependent.js";
|
|
3
|
+
import Ref from "./ref.js";
|
|
3
4
|
import Tracker from "./tracker.js";
|
|
4
5
|
|
|
5
6
|
declare type TrackValue = <T>(dependency: Dependency<T>) => T;
|
|
@@ -52,8 +53,15 @@ export default class Computed<T> extends Tracker<T> implements Dependent, Depend
|
|
|
52
53
|
this.dependencies.set(dependency, true);
|
|
53
54
|
}
|
|
54
55
|
if ([...this.dependencies.keys()].every(d => {
|
|
55
|
-
d
|
|
56
|
-
|
|
56
|
+
if (d instanceof Computed) {
|
|
57
|
+
if (d.state === ComputedState.Valid) {
|
|
58
|
+
return true;
|
|
59
|
+
} else if (d.state === ComputedState.Uncertain) {
|
|
60
|
+
d.value;
|
|
61
|
+
return !this.dependencies.get(d);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
57
65
|
})) {
|
|
58
66
|
this.finalizeComputing();
|
|
59
67
|
this.validateDependents();
|
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;
|
|
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;AAEvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC9D,MAAM,CAAC,OAAO,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,KAAK,CAAC,CAAC;AAC9D,MAAM,CAAC,OAAO,MAAM,iBAAiB,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC;AAWrF,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IACnF,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,cAAc,CAAC,CAAI;IAC3B,OAAO,CAAC,qBAAqB,CAAC,CAA0C;IACxE,OAAO,CAAC,yBAAyB,CAAC,CAAgB;gBAEtC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC;IAMlC,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,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;IAI3C,OAAO,CAAC,kBAAkB;IAMnB,OAAO;CAOjB"}
|