async-reactivity 1.0.2 → 2.0.0
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 +4 -10
- package/lib/dependency.js +1 -2
- package/lib/dependent.js +1 -2
- package/lib/index.js +3 -12
- package/lib/index.test.js +48 -73
- package/lib/ref.js +2 -8
- package/lib/tracker.js +1 -4
- package/lib/watcher.js +2 -8
- package/package.json +3 -2
- package/src/computed.ts +5 -5
- package/src/dependency.ts +1 -1
- package/src/dependent.ts +1 -1
- package/src/index.test.ts +4 -4
- package/src/index.ts +5 -5
- package/src/ref.ts +2 -2
- package/src/tracker.ts +2 -2
- package/src/tsconfig.json +2 -2
- package/src/watcher.ts +3 -3
- package/types/computed.d.ts +3 -3
- package/types/computed.d.ts.map +1 -1
- package/types/dependency.d.ts +1 -1
- package/types/dependency.d.ts.map +1 -1
- package/types/dependent.d.ts +1 -1
- package/types/dependent.d.ts.map +1 -1
- package/types/index.d.ts +5 -5
- package/types/index.d.ts.map +1 -1
- package/types/index.test.d.ts +1 -1
- package/types/index.test.d.ts.map +1 -1
- package/types/ref.d.ts +2 -2
- package/types/ref.d.ts.map +1 -1
- package/types/tracker.d.ts +3 -3
- package/types/tracker.d.ts.map +1 -1
- package/types/watcher.d.ts +4 -4
- package/types/watcher.d.ts.map +1 -1
package/lib/computed.js
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const tracker_1 = __importDefault(require("./tracker"));
|
|
1
|
+
import Tracker from "./tracker.js";
|
|
7
2
|
var ComputedState;
|
|
8
3
|
(function (ComputedState) {
|
|
9
4
|
ComputedState[ComputedState["Invalid"] = 0] = "Invalid";
|
|
@@ -14,7 +9,7 @@ var ComputedState;
|
|
|
14
9
|
;
|
|
15
10
|
class CircularDependencyError extends Error {
|
|
16
11
|
}
|
|
17
|
-
class Computed extends
|
|
12
|
+
export default class Computed extends Tracker {
|
|
18
13
|
constructor(getter) {
|
|
19
14
|
super();
|
|
20
15
|
this.state = ComputedState.Invalid;
|
|
@@ -103,9 +98,9 @@ class Computed extends tracker_1.default {
|
|
|
103
98
|
}
|
|
104
99
|
invalidate() {
|
|
105
100
|
if (this.state === ComputedState.Computing) {
|
|
106
|
-
|
|
101
|
+
setTimeout(this.compute.bind(this));
|
|
107
102
|
}
|
|
108
|
-
if (this.state
|
|
103
|
+
else if (this.state === ComputedState.Valid) {
|
|
109
104
|
this.state = ComputedState.Uncertain;
|
|
110
105
|
super.invalidate();
|
|
111
106
|
}
|
|
@@ -126,4 +121,3 @@ class Computed extends tracker_1.default {
|
|
|
126
121
|
this.prepareComputePromise();
|
|
127
122
|
}
|
|
128
123
|
}
|
|
129
|
-
exports.default = Computed;
|
package/lib/dependency.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/lib/dependent.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
1
|
+
export {};
|
package/lib/index.js
CHANGED
|
@@ -1,12 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Watcher = exports.Ref = exports.Computed = void 0;
|
|
7
|
-
var computed_1 = require("./computed");
|
|
8
|
-
Object.defineProperty(exports, "Computed", { enumerable: true, get: function () { return __importDefault(computed_1).default; } });
|
|
9
|
-
var ref_1 = require("./ref");
|
|
10
|
-
Object.defineProperty(exports, "Ref", { enumerable: true, get: function () { return __importDefault(ref_1).default; } });
|
|
11
|
-
var watcher_1 = require("./watcher");
|
|
12
|
-
Object.defineProperty(exports, "Watcher", { enumerable: true, get: function () { return __importDefault(watcher_1).default; } });
|
|
1
|
+
export { default as Computed } from './computed.js';
|
|
2
|
+
export { default as Ref } from './ref.js';
|
|
3
|
+
export { default as Watcher } from './watcher.js';
|
package/lib/index.test.js
CHANGED
|
@@ -1,27 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
1
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
2
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
3
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -31,17 +7,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
31
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
8
|
});
|
|
33
9
|
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
10
|
+
import 'mocha';
|
|
11
|
+
import assert from 'assert';
|
|
12
|
+
import { Computed, Ref, Watcher } from './index.js';
|
|
37
13
|
describe('async reactivity', function () {
|
|
38
14
|
describe('ref', function () {
|
|
39
15
|
it('getter', function () {
|
|
40
|
-
const a = new
|
|
16
|
+
const a = new Ref(5);
|
|
41
17
|
assert.strictEqual(a.value, 5);
|
|
42
18
|
});
|
|
43
19
|
it('setter', function () {
|
|
44
|
-
const a = new
|
|
20
|
+
const a = new Ref(5);
|
|
45
21
|
a.value = 4;
|
|
46
22
|
assert.strictEqual(a.value, 4);
|
|
47
23
|
});
|
|
@@ -49,7 +25,7 @@ describe('async reactivity', function () {
|
|
|
49
25
|
describe('computed', function () {
|
|
50
26
|
it('lazy compute', function () {
|
|
51
27
|
let gate = false;
|
|
52
|
-
const a = new
|
|
28
|
+
const a = new Computed(() => {
|
|
53
29
|
gate = true;
|
|
54
30
|
return 5;
|
|
55
31
|
});
|
|
@@ -59,7 +35,7 @@ describe('async reactivity', function () {
|
|
|
59
35
|
});
|
|
60
36
|
it('cache', function () {
|
|
61
37
|
let gate = false;
|
|
62
|
-
const a = new
|
|
38
|
+
const a = new Computed(() => {
|
|
63
39
|
gate = true;
|
|
64
40
|
return 5;
|
|
65
41
|
});
|
|
@@ -69,8 +45,8 @@ describe('async reactivity', function () {
|
|
|
69
45
|
assert.strictEqual(gate, false);
|
|
70
46
|
});
|
|
71
47
|
it('invalidate dependents', function () {
|
|
72
|
-
const a = new
|
|
73
|
-
const b = new
|
|
48
|
+
const a = new Ref(5);
|
|
49
|
+
const b = new Computed((value) => {
|
|
74
50
|
return value(a) + 4;
|
|
75
51
|
});
|
|
76
52
|
assert.strictEqual(b.value, 9);
|
|
@@ -78,10 +54,10 @@ describe('async reactivity', function () {
|
|
|
78
54
|
assert.strictEqual(b.value, 10);
|
|
79
55
|
});
|
|
80
56
|
it('dependents up-to-date', function () {
|
|
81
|
-
const a = new
|
|
82
|
-
const b = new
|
|
57
|
+
const a = new Ref(5);
|
|
58
|
+
const b = new Ref(10);
|
|
83
59
|
let gate;
|
|
84
|
-
const c = new
|
|
60
|
+
const c = new Computed((value) => {
|
|
85
61
|
gate = true;
|
|
86
62
|
return value(a) < 10 ? value(b) : 0;
|
|
87
63
|
});
|
|
@@ -95,11 +71,11 @@ describe('async reactivity', function () {
|
|
|
95
71
|
});
|
|
96
72
|
it('detect circular dependency', function () {
|
|
97
73
|
// @ts-expect-error
|
|
98
|
-
const a = new
|
|
74
|
+
const a = new Computed((value) => {
|
|
99
75
|
return value(b);
|
|
100
76
|
});
|
|
101
77
|
// @ts-expect-error
|
|
102
|
-
const b = new
|
|
78
|
+
const b = new Computed((value) => {
|
|
103
79
|
return value(a);
|
|
104
80
|
});
|
|
105
81
|
assert.throws(() => a.value);
|
|
@@ -109,15 +85,15 @@ describe('async reactivity', function () {
|
|
|
109
85
|
assert.fail('not implemented');
|
|
110
86
|
});
|
|
111
87
|
it('throw error', function () {
|
|
112
|
-
const a = new
|
|
88
|
+
const a = new Computed(() => {
|
|
113
89
|
throw new Error();
|
|
114
90
|
});
|
|
115
91
|
assert.throws(() => a.value);
|
|
116
92
|
});
|
|
117
93
|
it('ignore same ref value', function () {
|
|
118
94
|
let gate = 0;
|
|
119
|
-
const a = new
|
|
120
|
-
const b = new
|
|
95
|
+
const a = new Ref(5);
|
|
96
|
+
const b = new Computed((value) => {
|
|
121
97
|
gate++;
|
|
122
98
|
return value(a);
|
|
123
99
|
});
|
|
@@ -128,11 +104,11 @@ describe('async reactivity', function () {
|
|
|
128
104
|
});
|
|
129
105
|
it('ignore same computed value', function () {
|
|
130
106
|
let gate = 0;
|
|
131
|
-
const a = new
|
|
132
|
-
const b = new
|
|
107
|
+
const a = new Ref(5);
|
|
108
|
+
const b = new Computed((value) => {
|
|
133
109
|
return value(a) % 2;
|
|
134
110
|
});
|
|
135
|
-
const c = new
|
|
111
|
+
const c = new Computed((value) => {
|
|
136
112
|
gate++;
|
|
137
113
|
return value(b) + 5;
|
|
138
114
|
});
|
|
@@ -145,7 +121,7 @@ describe('async reactivity', function () {
|
|
|
145
121
|
describe('async computed', function () {
|
|
146
122
|
it('getter', function () {
|
|
147
123
|
return __awaiter(this, void 0, void 0, function* () {
|
|
148
|
-
const a = new
|
|
124
|
+
const a = new Computed(() => __awaiter(this, void 0, void 0, function* () {
|
|
149
125
|
yield new Promise(resolve => setTimeout(resolve));
|
|
150
126
|
return 5;
|
|
151
127
|
}));
|
|
@@ -154,8 +130,8 @@ describe('async reactivity', function () {
|
|
|
154
130
|
});
|
|
155
131
|
it('tracks async dependencies', function () {
|
|
156
132
|
return __awaiter(this, void 0, void 0, function* () {
|
|
157
|
-
const a = new
|
|
158
|
-
const b = new
|
|
133
|
+
const a = new Ref(5);
|
|
134
|
+
const b = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
159
135
|
yield new Promise(resolve => setTimeout(resolve));
|
|
160
136
|
return value(a) + 5;
|
|
161
137
|
}));
|
|
@@ -166,7 +142,7 @@ describe('async reactivity', function () {
|
|
|
166
142
|
});
|
|
167
143
|
it('get value while computing', function () {
|
|
168
144
|
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
-
const a = new
|
|
145
|
+
const a = new Computed(() => __awaiter(this, void 0, void 0, function* () {
|
|
170
146
|
yield new Promise(resolve => setTimeout(resolve));
|
|
171
147
|
return 5;
|
|
172
148
|
}));
|
|
@@ -177,12 +153,12 @@ describe('async reactivity', function () {
|
|
|
177
153
|
it('detect circular dependency', function () {
|
|
178
154
|
return __awaiter(this, void 0, void 0, function* () {
|
|
179
155
|
// @ts-expect-error
|
|
180
|
-
const a = new
|
|
156
|
+
const a = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
181
157
|
yield new Promise(resolve => setTimeout(resolve));
|
|
182
158
|
return value(b);
|
|
183
159
|
}));
|
|
184
160
|
// @ts-expect-error
|
|
185
|
-
const b = new
|
|
161
|
+
const b = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
186
162
|
yield new Promise(resolve => setTimeout(resolve));
|
|
187
163
|
return value(a);
|
|
188
164
|
}));
|
|
@@ -192,8 +168,8 @@ describe('async reactivity', function () {
|
|
|
192
168
|
it('old dependency changed while computing', function () {
|
|
193
169
|
return __awaiter(this, void 0, void 0, function* () {
|
|
194
170
|
let gate = 0;
|
|
195
|
-
const a = new
|
|
196
|
-
const b = new
|
|
171
|
+
const a = new Ref(5);
|
|
172
|
+
const b = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
197
173
|
gate++;
|
|
198
174
|
yield new Promise(resolve => setTimeout(resolve));
|
|
199
175
|
return value(a) + 2;
|
|
@@ -209,9 +185,9 @@ describe('async reactivity', function () {
|
|
|
209
185
|
it('new dependency changed while computing', function () {
|
|
210
186
|
return __awaiter(this, void 0, void 0, function* () {
|
|
211
187
|
let gate = 0;
|
|
212
|
-
const a = new
|
|
213
|
-
const b = new
|
|
214
|
-
const c = new
|
|
188
|
+
const a = new Ref(5);
|
|
189
|
+
const b = new Ref(10);
|
|
190
|
+
const c = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
215
191
|
gate++;
|
|
216
192
|
yield new Promise(resolve => setTimeout(resolve, 50));
|
|
217
193
|
let sum = value(a);
|
|
@@ -230,9 +206,9 @@ describe('async reactivity', function () {
|
|
|
230
206
|
});
|
|
231
207
|
it('fallback to primitive while computing', function () {
|
|
232
208
|
return __awaiter(this, void 0, void 0, function* () {
|
|
233
|
-
const a = new
|
|
234
|
-
const b = new
|
|
235
|
-
const c = new
|
|
209
|
+
const a = new Ref(5);
|
|
210
|
+
const b = new Ref(10);
|
|
211
|
+
const c = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
236
212
|
if (value(a) < 10) {
|
|
237
213
|
yield new Promise(resolve => setTimeout(resolve, 50));
|
|
238
214
|
return value(b) + 5;
|
|
@@ -247,7 +223,7 @@ describe('async reactivity', function () {
|
|
|
247
223
|
});
|
|
248
224
|
it('throw error', function () {
|
|
249
225
|
return __awaiter(this, void 0, void 0, function* () {
|
|
250
|
-
const a = new
|
|
226
|
+
const a = new Computed(() => __awaiter(this, void 0, void 0, function* () {
|
|
251
227
|
yield new Promise(resolve => setTimeout(resolve));
|
|
252
228
|
throw new Error();
|
|
253
229
|
}));
|
|
@@ -256,25 +232,24 @@ describe('async reactivity', function () {
|
|
|
256
232
|
});
|
|
257
233
|
it('dispose computed', function () {
|
|
258
234
|
return __awaiter(this, void 0, void 0, function* () {
|
|
259
|
-
const a = new
|
|
235
|
+
const a = new Ref(5);
|
|
260
236
|
let gate = 0;
|
|
261
|
-
const b = new
|
|
237
|
+
const b = new Computed(value => {
|
|
262
238
|
gate++;
|
|
263
239
|
return value(a) + 2;
|
|
264
240
|
});
|
|
265
241
|
b.value;
|
|
266
242
|
assert.strictEqual(gate, 1);
|
|
267
243
|
b.dispose();
|
|
268
|
-
a.value = 6;
|
|
269
244
|
b.value;
|
|
270
|
-
assert.strictEqual(gate,
|
|
245
|
+
assert.strictEqual(gate, 2);
|
|
271
246
|
});
|
|
272
247
|
});
|
|
273
248
|
});
|
|
274
249
|
describe('watcher', function () {
|
|
275
250
|
it('sync', function () {
|
|
276
|
-
const a = new
|
|
277
|
-
new
|
|
251
|
+
const a = new Ref(5);
|
|
252
|
+
new Watcher(a, (newValue, oldValue) => {
|
|
278
253
|
assert.strictEqual(oldValue, 5);
|
|
279
254
|
assert.strictEqual(newValue, 6);
|
|
280
255
|
}, false);
|
|
@@ -282,22 +257,22 @@ describe('async reactivity', function () {
|
|
|
282
257
|
});
|
|
283
258
|
it('async', function () {
|
|
284
259
|
return __awaiter(this, void 0, void 0, function* () {
|
|
285
|
-
const a = new
|
|
260
|
+
const a = new Computed(() => __awaiter(this, void 0, void 0, function* () {
|
|
286
261
|
yield new Promise(resolve => setTimeout(resolve));
|
|
287
262
|
return 10;
|
|
288
263
|
}));
|
|
289
|
-
const result = yield new Promise(resolve => new
|
|
264
|
+
const result = yield new Promise(resolve => new Watcher(a, resolve));
|
|
290
265
|
assert.strictEqual(result, 10);
|
|
291
266
|
});
|
|
292
267
|
});
|
|
293
268
|
it('sync cancel', function () {
|
|
294
269
|
return __awaiter(this, void 0, void 0, function* () {
|
|
295
|
-
const a = new
|
|
296
|
-
const b = new
|
|
270
|
+
const a = new Ref(5);
|
|
271
|
+
const b = new Computed((value) => {
|
|
297
272
|
return value(a) % 2;
|
|
298
273
|
});
|
|
299
274
|
let gate = 0;
|
|
300
|
-
new
|
|
275
|
+
new Watcher(b, () => {
|
|
301
276
|
gate++;
|
|
302
277
|
}, false);
|
|
303
278
|
a.value = 6;
|
|
@@ -310,13 +285,13 @@ describe('async reactivity', function () {
|
|
|
310
285
|
});
|
|
311
286
|
it('async sync cancel', function () {
|
|
312
287
|
return __awaiter(this, void 0, void 0, function* () {
|
|
313
|
-
const a = new
|
|
314
|
-
const b = new
|
|
288
|
+
const a = new Ref(5);
|
|
289
|
+
const b = new Computed((value) => __awaiter(this, void 0, void 0, function* () {
|
|
315
290
|
new Promise(resolve => setTimeout(resolve));
|
|
316
291
|
return value(a) % 2;
|
|
317
292
|
}));
|
|
318
293
|
let gate = 0;
|
|
319
|
-
new
|
|
294
|
+
new Watcher(b, () => {
|
|
320
295
|
gate++;
|
|
321
296
|
}, false);
|
|
322
297
|
yield new Promise(resolve => setTimeout(resolve, 10));
|
package/lib/ref.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const tracker_1 = __importDefault(require("./tracker"));
|
|
7
|
-
class Ref extends tracker_1.default {
|
|
1
|
+
import Tracker from "./tracker.js";
|
|
2
|
+
export default class Ref extends Tracker {
|
|
8
3
|
constructor(_value) {
|
|
9
4
|
super();
|
|
10
5
|
this._value = _value;
|
|
@@ -20,4 +15,3 @@ class Ref extends tracker_1.default {
|
|
|
20
15
|
return super.value;
|
|
21
16
|
}
|
|
22
17
|
}
|
|
23
|
-
exports.default = Ref;
|
package/lib/tracker.js
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class Tracker {
|
|
1
|
+
export default class Tracker {
|
|
4
2
|
constructor() {
|
|
5
3
|
this.dependents = new Set();
|
|
6
4
|
}
|
|
@@ -19,4 +17,3 @@ class Tracker {
|
|
|
19
17
|
return this._value;
|
|
20
18
|
}
|
|
21
19
|
}
|
|
22
|
-
exports.default = Tracker;
|
package/lib/watcher.js
CHANGED
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const tracker_1 = __importDefault(require("./tracker"));
|
|
1
|
+
import Tracker from "./tracker.js";
|
|
7
2
|
var WatchState;
|
|
8
3
|
(function (WatchState) {
|
|
9
4
|
WatchState[WatchState["Uncertain"] = 0] = "Uncertain";
|
|
10
5
|
WatchState[WatchState["Valid"] = 1] = "Valid";
|
|
11
6
|
})(WatchState || (WatchState = {}));
|
|
12
7
|
;
|
|
13
|
-
class Watcher extends
|
|
8
|
+
export default class Watcher extends Tracker {
|
|
14
9
|
constructor(dependency, onChange, immediate = true) {
|
|
15
10
|
super();
|
|
16
11
|
this.state = WatchState.Valid;
|
|
@@ -38,4 +33,3 @@ class Watcher extends tracker_1.default {
|
|
|
38
33
|
this.dependency.removeDependent(this);
|
|
39
34
|
}
|
|
40
35
|
}
|
|
41
|
-
exports.default = Watcher;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "async-reactivity",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "types/index.d.ts",
|
|
@@ -9,9 +9,10 @@
|
|
|
9
9
|
"src",
|
|
10
10
|
"types"
|
|
11
11
|
],
|
|
12
|
+
"type": "module",
|
|
12
13
|
"scripts": {
|
|
13
14
|
"dev": "npx tsc -w -p src",
|
|
14
|
-
"test
|
|
15
|
+
"test": "mocha \"./{,!(node_modules)/**/}*.test.js\""
|
|
15
16
|
},
|
|
16
17
|
"author": "Donatas Lučiūnas",
|
|
17
18
|
"license": "ISC",
|
package/src/computed.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Dependency from "./dependency";
|
|
2
|
-
import Dependent from "./dependent";
|
|
3
|
-
import Tracker from "./tracker";
|
|
1
|
+
import Dependency from "./dependency.js";
|
|
2
|
+
import Dependent from "./dependent.js";
|
|
3
|
+
import Tracker from "./tracker.js";
|
|
4
4
|
|
|
5
5
|
declare type TrackValue = <T>(dependency: Dependency<T>) => T;
|
|
6
6
|
export declare type ComputeFunc<T> = (value: TrackValue) => T;
|
|
@@ -121,8 +121,8 @@ export default class Computed<T> extends Tracker<T> implements Dependent, Depend
|
|
|
121
121
|
|
|
122
122
|
public invalidate() {
|
|
123
123
|
if (this.state === ComputedState.Computing) {
|
|
124
|
-
|
|
125
|
-
} if (this.state
|
|
124
|
+
setTimeout(this.compute.bind(this));
|
|
125
|
+
} else if (this.state === ComputedState.Valid) {
|
|
126
126
|
this.state = ComputedState.Uncertain;
|
|
127
127
|
super.invalidate();
|
|
128
128
|
}
|
package/src/dependency.ts
CHANGED
package/src/dependent.ts
CHANGED
package/src/index.test.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
1
|
+
import 'mocha';
|
|
2
|
+
import assert from 'assert';
|
|
3
|
+
import { Computed, Ref, Watcher } from './index.js';
|
|
3
4
|
|
|
4
5
|
describe('async reactivity', function () {
|
|
5
6
|
describe('ref', function () {
|
|
@@ -243,9 +244,8 @@ describe('async reactivity', function () {
|
|
|
243
244
|
b.value;
|
|
244
245
|
assert.strictEqual(gate, 1);
|
|
245
246
|
b.dispose();
|
|
246
|
-
a.value = 6;
|
|
247
247
|
b.value;
|
|
248
|
-
assert.strictEqual(gate,
|
|
248
|
+
assert.strictEqual(gate, 2);
|
|
249
249
|
});
|
|
250
250
|
});
|
|
251
251
|
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { default as Computed, ComputeFunc, ComputeFuncScoped } from './computed';
|
|
2
|
-
export { default as Ref } from './ref';
|
|
3
|
-
export { default as Watcher } from './watcher';
|
|
4
|
-
export { default as Dependency } from './dependency';
|
|
5
|
-
export { default as Dependent } from './dependent';
|
|
1
|
+
export { default as Computed, ComputeFunc, ComputeFuncScoped } from './computed.js';
|
|
2
|
+
export { default as Ref } from './ref.js';
|
|
3
|
+
export { default as Watcher } from './watcher.js';
|
|
4
|
+
export { default as Dependency } from './dependency.js';
|
|
5
|
+
export { default as Dependent } from './dependent.js';
|
package/src/ref.ts
CHANGED
package/src/tracker.ts
CHANGED
package/src/tsconfig.json
CHANGED
|
@@ -22,9 +22,9 @@
|
|
|
22
22
|
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
|
|
23
23
|
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
|
|
24
24
|
/* Modules */
|
|
25
|
-
"module": "
|
|
25
|
+
"module": "ES2022", /* Specify what module code is generated. */
|
|
26
26
|
// "rootDir": "./", /* Specify the root folder within your source files. */
|
|
27
|
-
|
|
27
|
+
"moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */
|
|
28
28
|
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
|
|
29
29
|
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
|
|
30
30
|
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
|
package/src/watcher.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Dependency from "./dependency";
|
|
2
|
-
import Dependent from "./dependent";
|
|
3
|
-
import Tracker from "./tracker";
|
|
1
|
+
import Dependency from "./dependency.js";
|
|
2
|
+
import Dependent from "./dependent.js";
|
|
3
|
+
import Tracker from "./tracker.js";
|
|
4
4
|
|
|
5
5
|
enum WatchState {
|
|
6
6
|
Uncertain,
|
package/types/computed.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Dependency from "./dependency";
|
|
2
|
-
import Dependent from "./dependent";
|
|
3
|
-
import Tracker from "./tracker";
|
|
1
|
+
import Dependency from "./dependency.js";
|
|
2
|
+
import Dependent from "./dependent.js";
|
|
3
|
+
import Tracker from "./tracker.js";
|
|
4
4
|
declare type TrackValue = <T>(dependency: Dependency<T>) => T;
|
|
5
5
|
export declare type ComputeFunc<T> = (value: TrackValue) => T;
|
|
6
6
|
export declare type ComputeFuncScoped<T1, T2> = (value: TrackValue, scope: T1) => T2;
|
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,
|
|
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;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;IAmCf,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;IASV,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC;IAI3C,OAAO,CAAC,kBAAkB;IAMnB,OAAO;CAOjB"}
|
package/types/dependency.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependency.d.ts","sourceRoot":"","sources":["../src/dependency.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,
|
|
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;CAC/C"}
|
package/types/dependent.d.ts
CHANGED
package/types/dependent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependent.d.ts","sourceRoot":"","sources":["../src/dependent.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"dependent.d.ts","sourceRoot":"","sources":["../src/dependent.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAEzC,MAAM,CAAC,OAAO,WAAW,SAAS;IAC9B,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAC5C,OAAO,IAAI,IAAI,CAAC;CACnB"}
|
package/types/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { default as Computed, ComputeFunc, ComputeFuncScoped } from './computed';
|
|
2
|
-
export { default as Ref } from './ref';
|
|
3
|
-
export { default as Watcher } from './watcher';
|
|
4
|
-
export { default as Dependency } from './dependency';
|
|
5
|
-
export { default as Dependent } from './dependent';
|
|
1
|
+
export { default as Computed, ComputeFunc, ComputeFuncScoped } from './computed.js';
|
|
2
|
+
export { default as Ref } from './ref.js';
|
|
3
|
+
export { default as Watcher } from './watcher.js';
|
|
4
|
+
export { default as Dependency } from './dependency.js';
|
|
5
|
+
export { default as Dependent } from './dependent.js';
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACpF,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
|
package/types/index.test.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import 'mocha';
|
|
2
2
|
//# sourceMappingURL=index.test.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,CAAC"}
|
package/types/ref.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import Dependency from "./dependency";
|
|
2
|
-
import Tracker from "./tracker";
|
|
1
|
+
import Dependency from "./dependency.js";
|
|
2
|
+
import Tracker from "./tracker.js";
|
|
3
3
|
export default class Ref<T> extends Tracker<T> implements Dependency<T> {
|
|
4
4
|
constructor(_value: T);
|
|
5
5
|
set value(_value: T);
|
package/types/ref.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,MAAM,CAAC,OAAO,OAAO,GAAG,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,UAAU,CAAC,CAAC,CAAC;gBAEvD,MAAM,EAAE,CAAC;IAKrB,IAAW,KAAK,CAAC,MAAM,EAAE,CAAC,EAMzB;IAED,IAAW,KAAK,IAAI,CAAC,CAEpB;CACJ"}
|
package/types/tracker.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import Computed from "./computed";
|
|
2
|
-
import Watcher from "./watcher";
|
|
3
|
-
|
|
1
|
+
import Computed from "./computed.js";
|
|
2
|
+
import Watcher from "./watcher.js";
|
|
3
|
+
type Dependent = Computed<any> | Watcher<any>;
|
|
4
4
|
export default class Tracker<T> {
|
|
5
5
|
protected dependents: Set<Dependent>;
|
|
6
6
|
protected _value?: T;
|
package/types/tracker.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../src/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,KAAK,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,OAAO,CAAC,CAAC;IAC1B,SAAS,CAAC,UAAU,iBAAwB;IAC5C,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEd,YAAY,CAAC,SAAS,EAAE,SAAS;IAIjC,eAAe,CAAC,SAAS,EAAE,SAAS;IAIpC,UAAU,IAAI,IAAI;IAMzB,IAAW,KAAK,kBAEf;CACJ"}
|
package/types/watcher.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import Dependency from "./dependency";
|
|
2
|
-
import Dependent from "./dependent";
|
|
3
|
-
import Tracker from "./tracker";
|
|
4
|
-
|
|
1
|
+
import Dependency from "./dependency.js";
|
|
2
|
+
import Dependent from "./dependent.js";
|
|
3
|
+
import Tracker from "./tracker.js";
|
|
4
|
+
type onChangeFunc<T> = (newValue: T, oldValue?: T) => void;
|
|
5
5
|
export default class Watcher<T> extends Tracker<T> implements Dependent {
|
|
6
6
|
private onChange;
|
|
7
7
|
private dependency;
|
package/types/watcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAOnC,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;AAE3D,MAAM,CAAC,OAAO,OAAO,OAAO,CAAC,CAAC,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAE,YAAW,SAAS;IAEnE,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,KAAK,CAAoB;gBAErB,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,SAAS,GAAE,OAAc;IAYpF,UAAU;IAUV,QAAQ;IAIR,OAAO;CAGjB"}
|