@e280/strata 0.2.7 → 0.3.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/LICENSE +1 -1
- package/README.md +56 -47
- package/package.json +3 -3
- package/s/index.ts +0 -1
- package/s/prism/prism.test.ts +2 -1
- package/s/prism/prism.ts +1 -1
- package/s/signals/derived/class.ts +34 -0
- package/s/signals/derived/fn.ts +36 -0
- package/s/signals/{tests/derived.test.ts → derived/test.ts} +13 -14
- package/s/signals/effect/effect.ts +7 -0
- package/s/signals/effect/test.ts +172 -0
- package/s/signals/effect/watch.ts +32 -0
- package/s/signals/index.ts +11 -7
- package/s/signals/lazy/class.ts +74 -0
- package/s/signals/lazy/fn.ts +22 -0
- package/s/signals/{tests/lazy.test.ts → lazy/test.ts} +23 -12
- package/s/signals/signal/class.ts +77 -0
- package/s/signals/signal/fn.ts +31 -0
- package/s/signals/{tests/signal.test.ts → signal/test.ts} +56 -59
- package/s/signals/signals.test.ts +8 -8
- package/s/signals/types.ts +4 -23
- package/s/signals/utils/default-compare.ts +1 -1
- package/s/signals/utils/symbols.ts +9 -0
- package/s/tests.test.ts +1 -57
- package/s/tracker/bindings/react.ts +42 -0
- package/s/tracker/index.ts +1 -0
- package/x/index.d.ts +0 -1
- package/x/index.js +0 -1
- package/x/index.js.map +1 -1
- package/x/prism/prism.js.map +1 -1
- package/x/prism/prism.test.js +1 -1
- package/x/prism/prism.test.js.map +1 -1
- package/x/signals/derived/class.d.ts +14 -0
- package/x/signals/derived/class.js +23 -0
- package/x/signals/derived/class.js.map +1 -0
- package/x/signals/derived/fn.d.ts +3 -0
- package/x/signals/derived/fn.js +28 -0
- package/x/signals/derived/fn.js.map +1 -0
- package/x/signals/{tests/derived.test.d.ts → derived/test.d.ts} +1 -3
- package/x/signals/{tests/derived.test.js → derived/test.js} +14 -15
- package/x/signals/derived/test.js.map +1 -0
- package/x/signals/effect/effect.d.ts +1 -0
- package/x/signals/effect/effect.js +5 -0
- package/x/signals/effect/effect.js.map +1 -0
- package/x/signals/{tests/effect.test.d.ts → effect/test.d.ts} +7 -0
- package/x/signals/effect/test.js +132 -0
- package/x/signals/effect/test.js.map +1 -0
- package/x/signals/effect/watch.d.ts +4 -0
- package/x/signals/effect/watch.js +25 -0
- package/x/signals/effect/watch.js.map +1 -0
- package/x/signals/index.d.ts +8 -7
- package/x/signals/index.js +8 -7
- package/x/signals/index.js.map +1 -1
- package/x/signals/lazy/class.d.ts +19 -0
- package/x/signals/lazy/class.js +59 -0
- package/x/signals/lazy/class.js.map +1 -0
- package/x/signals/lazy/fn.d.ts +3 -0
- package/x/signals/lazy/fn.js +17 -0
- package/x/signals/lazy/fn.js.map +1 -0
- package/x/signals/{tests/lazy.test.d.ts → lazy/test.d.ts} +2 -3
- package/x/signals/{tests/lazy.test.js → lazy/test.js} +23 -13
- package/x/signals/lazy/test.js.map +1 -0
- package/x/signals/signal/class.d.ts +20 -0
- package/x/signals/signal/class.js +57 -0
- package/x/signals/signal/class.js.map +1 -0
- package/x/signals/signal/fn.d.ts +7 -0
- package/x/signals/signal/fn.js +23 -0
- package/x/signals/signal/fn.js.map +1 -0
- package/x/signals/{tests/signal.test.d.ts → signal/test.d.ts} +8 -7
- package/x/signals/{tests/signal.test.js → signal/test.js} +50 -46
- package/x/signals/signal/test.js.map +1 -0
- package/x/signals/signals.test.d.ts +25 -20
- package/x/signals/signals.test.js +8 -8
- package/x/signals/signals.test.js.map +1 -1
- package/x/signals/types.d.ts +4 -19
- package/x/signals/utils/default-compare.js +1 -1
- package/x/signals/utils/default-compare.js.map +1 -1
- package/x/signals/utils/symbols.d.ts +7 -0
- package/x/signals/utils/symbols.js +8 -0
- package/x/signals/utils/symbols.js.map +1 -0
- package/x/tests.test.js +1 -45
- package/x/tests.test.js.map +1 -1
- package/x/tracker/bindings/react.d.ts +10 -0
- package/x/tracker/bindings/react.js +29 -0
- package/x/tracker/bindings/react.js.map +1 -0
- package/x/tracker/index.d.ts +1 -0
- package/x/tracker/index.js +1 -0
- package/x/tracker/index.js.map +1 -1
- package/s/signals/core/derived.ts +0 -65
- package/s/signals/core/effect.ts +0 -31
- package/s/signals/core/lazy.ts +0 -78
- package/s/signals/core/parts/reactive.ts +0 -12
- package/s/signals/core/parts/readable.ts +0 -16
- package/s/signals/core/signal.ts +0 -101
- package/s/signals/porcelain.ts +0 -30
- package/s/signals/tests/effect.test.ts +0 -89
- package/s/tree/index.ts +0 -7
- package/s/tree/parts/branch.ts +0 -55
- package/s/tree/parts/chronobranch.ts +0 -86
- package/s/tree/parts/persistence.ts +0 -31
- package/s/tree/parts/trunk.ts +0 -70
- package/s/tree/parts/types.ts +0 -70
- package/s/tree/parts/utils/immute.ts +0 -43
- package/s/tree/parts/utils/process-options.ts +0 -7
- package/s/tree/parts/utils/setup.ts +0 -40
- package/s/tree/tree.test.ts +0 -366
- package/x/signals/core/derived.d.ts +0 -10
- package/x/signals/core/derived.js +0 -52
- package/x/signals/core/derived.js.map +0 -1
- package/x/signals/core/effect.d.ts +0 -5
- package/x/signals/core/effect.js +0 -17
- package/x/signals/core/effect.js.map +0 -1
- package/x/signals/core/lazy.d.ts +0 -11
- package/x/signals/core/lazy.js +0 -60
- package/x/signals/core/lazy.js.map +0 -1
- package/x/signals/core/parts/reactive.d.ts +0 -5
- package/x/signals/core/parts/reactive.js +0 -9
- package/x/signals/core/parts/reactive.js.map +0 -1
- package/x/signals/core/parts/readable.d.ts +0 -6
- package/x/signals/core/parts/readable.js +0 -15
- package/x/signals/core/parts/readable.js.map +0 -1
- package/x/signals/core/signal.d.ts +0 -13
- package/x/signals/core/signal.js +0 -77
- package/x/signals/core/signal.js.map +0 -1
- package/x/signals/porcelain.d.ts +0 -8
- package/x/signals/porcelain.js +0 -15
- package/x/signals/porcelain.js.map +0 -1
- package/x/signals/tests/derived.test.js.map +0 -1
- package/x/signals/tests/effect.test.js +0 -72
- package/x/signals/tests/effect.test.js.map +0 -1
- package/x/signals/tests/lazy.test.js.map +0 -1
- package/x/signals/tests/signal.test.js.map +0 -1
- package/x/tree/index.d.ts +0 -5
- package/x/tree/index.js +0 -6
- package/x/tree/index.js.map +0 -1
- package/x/tree/parts/branch.d.ts +0 -14
- package/x/tree/parts/branch.js +0 -42
- package/x/tree/parts/branch.js.map +0 -1
- package/x/tree/parts/chronobranch.d.ts +0 -25
- package/x/tree/parts/chronobranch.js +0 -75
- package/x/tree/parts/chronobranch.js.map +0 -1
- package/x/tree/parts/persistence.d.ts +0 -2
- package/x/tree/parts/persistence.js +0 -23
- package/x/tree/parts/persistence.js.map +0 -1
- package/x/tree/parts/trunk.d.ts +0 -19
- package/x/tree/parts/trunk.js +0 -57
- package/x/tree/parts/trunk.js.map +0 -1
- package/x/tree/parts/types.d.ts +0 -28
- package/x/tree/parts/types.js +0 -2
- package/x/tree/parts/types.js.map +0 -1
- package/x/tree/parts/utils/immute.d.ts +0 -11
- package/x/tree/parts/utils/immute.js +0 -33
- package/x/tree/parts/utils/immute.js.map +0 -1
- package/x/tree/parts/utils/process-options.d.ts +0 -2
- package/x/tree/parts/utils/process-options.js +0 -4
- package/x/tree/parts/utils/process-options.js.map +0 -1
- package/x/tree/parts/utils/setup.d.ts +0 -8
- package/x/tree/parts/utils/setup.js +0 -24
- package/x/tree/parts/utils/setup.js.map +0 -1
- package/x/tree/tree.test.d.ts +0 -40
- package/x/tree/tree.test.js +0 -325
- package/x/tree/tree.test.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../s/signals/derived/class.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,SAAS,CAAA;AAE/B,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAMhD,MAAM,OAAO,OAAO;IACnB,KAAK,CAAQ;IACb,EAAE,CAAe;IACjB,OAAO,CAAa;IAEpB,YAAY,OAAoB,EAAE,OAAgC;QACjE,IAAI,GAAG,CAAC,MAAM,KAAK,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAC3E,OAAO,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IACjC,CAAC;IAED,IAAI,KAAK;QACR,OAAQ,IAAqB,CAAC,GAAG,EAAE,CAAA;IACpC,CAAC;IAED,GAAG;QACF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,KAAK,CAAA;IAClB,CAAC;IAED,QAAQ;QACP,OAAO,aAAa,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA;IAC3C,CAAC;CACD"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { sub } from "@e280/stz";
|
|
2
|
+
import { Derived } from "./class.js";
|
|
3
|
+
import { watch } from "../effect/watch.js";
|
|
4
|
+
import { tracker } from "../../tracker/tracker.js";
|
|
5
|
+
import { defaultCompare } from "../utils/default-compare.js";
|
|
6
|
+
export function derived(formula, options) {
|
|
7
|
+
function fn() {
|
|
8
|
+
return fn.get();
|
|
9
|
+
}
|
|
10
|
+
const compare = options?.compare ?? defaultCompare;
|
|
11
|
+
Object.setPrototypeOf(fn, Derived.prototype);
|
|
12
|
+
fn.on = sub();
|
|
13
|
+
const { result, dispose } = watch(formula, async () => {
|
|
14
|
+
const value = formula();
|
|
15
|
+
const isChanged = !compare(fn.sneak, value);
|
|
16
|
+
if (isChanged) {
|
|
17
|
+
fn.sneak = value;
|
|
18
|
+
await Promise.all([
|
|
19
|
+
tracker.notifyWrite(fn),
|
|
20
|
+
fn.on.pub(value),
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
fn.sneak = result;
|
|
25
|
+
fn.dispose = dispose;
|
|
26
|
+
return fn;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=fn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fn.js","sourceRoot":"","sources":["../../../s/signals/derived/fn.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAC7B,OAAO,EAAC,OAAO,EAAC,MAAM,YAAY,CAAA;AAClC,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAA;AAExC,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAA;AAE1D,MAAM,UAAU,OAAO,CAAQ,OAAoB,EAAE,OAAgC;IACpF,SAAS,EAAE;QACV,OAAQ,EAAqB,CAAC,GAAG,EAAE,CAAA;IACpC,CAAC;IAED,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;IAElD,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5C,EAAE,CAAC,EAAE,GAAG,GAAG,EAAW,CAAA;IAEtB,MAAM,EAAC,MAAM,EAAE,OAAO,EAAC,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,IAAG,EAAE;QAClD,MAAM,KAAK,GAAG,OAAO,EAAE,CAAA;QACvB,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,IAAI,SAAS,EAAE,CAAC;YACf,EAAE,CAAC,KAAK,GAAG,KAAK,CAAA;YAChB,MAAM,OAAO,CAAC,GAAG,CAAC;gBACjB,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC;aAChB,CAAC,CAAA;QACH,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,KAAK,GAAG,MAAM,CAAA;IACjB,EAAE,CAAC,OAAO,GAAG,OAAO,CAAA;IAEpB,OAAO,EAAoB,CAAA;AAC5B,CAAC"}
|
|
@@ -5,8 +5,6 @@ declare const _default: {
|
|
|
5
5
|
"effect doesn't overreact to derived": Science.Test;
|
|
6
6
|
"derived.on": Science.Test;
|
|
7
7
|
"derived.on not called if result doesn't change": Science.Test;
|
|
8
|
-
"hipster
|
|
9
|
-
basic: Science.Test;
|
|
10
|
-
};
|
|
8
|
+
"hipster syntax": Science.Test;
|
|
11
9
|
};
|
|
12
10
|
export default _default;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Science, test, expect, spy } from "@e280/science";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { derived } from "./fn.js";
|
|
3
|
+
import { signal } from "../signal/fn.js";
|
|
4
|
+
import { effect } from "../effect/effect.js";
|
|
4
5
|
export default Science.suite({
|
|
5
6
|
"basic": test(async () => {
|
|
6
7
|
const a = signal(1);
|
|
@@ -31,7 +32,7 @@ export default Science.suite({
|
|
|
31
32
|
"effect doesn't overreact to derived": test(async () => {
|
|
32
33
|
const a = signal(1);
|
|
33
34
|
const b = signal(10);
|
|
34
|
-
const product =
|
|
35
|
+
const product = derived(() => a.value * b.value);
|
|
35
36
|
const derivedSpy = spy(() => { });
|
|
36
37
|
product.on(derivedSpy);
|
|
37
38
|
let mutations = 0;
|
|
@@ -51,7 +52,7 @@ export default Science.suite({
|
|
|
51
52
|
"derived.on": test(async () => {
|
|
52
53
|
const a = signal(1);
|
|
53
54
|
const b = signal(10);
|
|
54
|
-
const product =
|
|
55
|
+
const product = derived(() => a.value * b.value);
|
|
55
56
|
expect(product.value).is(10);
|
|
56
57
|
const mole = spy((_v) => { });
|
|
57
58
|
product.on(mole);
|
|
@@ -64,7 +65,7 @@ export default Science.suite({
|
|
|
64
65
|
"derived.on not called if result doesn't change": test(async () => {
|
|
65
66
|
const a = signal(1);
|
|
66
67
|
const b = signal(10);
|
|
67
|
-
const product =
|
|
68
|
+
const product = derived(() => a.value * b.value);
|
|
68
69
|
expect(product.value).is(10);
|
|
69
70
|
const mole = spy((_v) => { });
|
|
70
71
|
product.on(mole);
|
|
@@ -77,15 +78,13 @@ export default Science.suite({
|
|
|
77
78
|
expect(product.value).is(20);
|
|
78
79
|
expect(mole.spy.calls.length).is(1);
|
|
79
80
|
}),
|
|
80
|
-
"hipster
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
expect(product()).is(20);
|
|
88
|
-
}),
|
|
81
|
+
"hipster syntax": test(async () => {
|
|
82
|
+
const a = signal(1);
|
|
83
|
+
const b = signal(10);
|
|
84
|
+
const product = derived(() => a() * b());
|
|
85
|
+
expect(product()).is(10);
|
|
86
|
+
await a(2);
|
|
87
|
+
expect(product()).is(20);
|
|
89
88
|
}),
|
|
90
89
|
});
|
|
91
|
-
//# sourceMappingURL=
|
|
90
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../s/signals/derived/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function effect(collector: () => void, responder?: () => void): () => void;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../s/signals/effect/effect.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAA;AAEhC,MAAM,UAAU,MAAM,CAAC,SAAqB,EAAE,SAAsB;IACnE,OAAO,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAA;AAC3C,CAAC"}
|
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { Science } from "@e280/science";
|
|
2
2
|
declare const _default: {
|
|
3
|
+
watch: {
|
|
4
|
+
"responder gets value": Science.Test;
|
|
5
|
+
"responder not called until change": Science.Test;
|
|
6
|
+
"watch updates dynamic dependencies": Science.Test;
|
|
7
|
+
};
|
|
3
8
|
"tracks signal changes": Science.Test;
|
|
9
|
+
"correct signal effect order": Science.Test;
|
|
10
|
+
"simple effect called the correct number of times": Science.Test;
|
|
4
11
|
"is only called when signal actually changes": Science.Test;
|
|
5
12
|
debounced: Science.Test;
|
|
6
13
|
"can be disposed": Science.Test;
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Science, test, expect } from "@e280/science";
|
|
2
|
+
import { watch } from "./watch.js";
|
|
3
|
+
import { effect } from "./effect.js";
|
|
4
|
+
import { signal } from "../signal/fn.js";
|
|
5
|
+
export default Science.suite({
|
|
6
|
+
"watch": Science.suite({
|
|
7
|
+
"responder gets value": test(async () => {
|
|
8
|
+
const count = signal(1);
|
|
9
|
+
let collected = 0;
|
|
10
|
+
watch(() => count(), x => { collected = x; });
|
|
11
|
+
expect(collected).is(0);
|
|
12
|
+
await count(2);
|
|
13
|
+
expect(collected).is(2);
|
|
14
|
+
}),
|
|
15
|
+
"responder not called until change": test(async () => {
|
|
16
|
+
const count = signal(1);
|
|
17
|
+
let calls = 0;
|
|
18
|
+
watch(() => count(), () => { calls++; });
|
|
19
|
+
expect(calls).is(0);
|
|
20
|
+
await count(2);
|
|
21
|
+
expect(calls).is(1);
|
|
22
|
+
}),
|
|
23
|
+
"watch updates dynamic dependencies": test(async () => {
|
|
24
|
+
const toggle = signal(true);
|
|
25
|
+
const a = signal(1);
|
|
26
|
+
const b = signal(10);
|
|
27
|
+
let collected = 0;
|
|
28
|
+
watch(() => toggle() ? a() : b(), x => { collected = x; });
|
|
29
|
+
await a(2);
|
|
30
|
+
expect(collected).is(2);
|
|
31
|
+
await toggle(false);
|
|
32
|
+
expect(collected).is(10);
|
|
33
|
+
collected = 0;
|
|
34
|
+
await a(3);
|
|
35
|
+
expect(collected).is(0);
|
|
36
|
+
await b(11);
|
|
37
|
+
expect(collected).is(11);
|
|
38
|
+
})
|
|
39
|
+
}),
|
|
40
|
+
"tracks signal changes": test(async () => {
|
|
41
|
+
const count = signal(1);
|
|
42
|
+
let doubled = 0;
|
|
43
|
+
effect(() => doubled = count.value * 2);
|
|
44
|
+
expect(doubled).is(2);
|
|
45
|
+
await count.set(3);
|
|
46
|
+
expect(doubled).is(6);
|
|
47
|
+
}),
|
|
48
|
+
"correct signal effect order": test(async () => {
|
|
49
|
+
let order = [];
|
|
50
|
+
const count = signal(0);
|
|
51
|
+
effect(() => {
|
|
52
|
+
if (count.value)
|
|
53
|
+
order.push("effect");
|
|
54
|
+
});
|
|
55
|
+
order.push("before");
|
|
56
|
+
await count.set(1);
|
|
57
|
+
order.push("after");
|
|
58
|
+
expect(order.length).is(3);
|
|
59
|
+
expect(order[0]).is("before");
|
|
60
|
+
expect(order[1]).is("effect");
|
|
61
|
+
expect(order[2]).is("after");
|
|
62
|
+
}),
|
|
63
|
+
"simple effect called the correct number of times": test(async () => {
|
|
64
|
+
const count = signal(0);
|
|
65
|
+
let runs = 0;
|
|
66
|
+
effect(() => { count(); runs++; });
|
|
67
|
+
expect(runs).is(1);
|
|
68
|
+
await count(1);
|
|
69
|
+
expect(runs).is(2);
|
|
70
|
+
await count(2);
|
|
71
|
+
expect(runs).is(3);
|
|
72
|
+
}),
|
|
73
|
+
"is only called when signal actually changes": test(async () => {
|
|
74
|
+
const count = signal(1);
|
|
75
|
+
let runs = 0;
|
|
76
|
+
effect(() => {
|
|
77
|
+
count.get();
|
|
78
|
+
runs++;
|
|
79
|
+
});
|
|
80
|
+
expect(runs).is(1);
|
|
81
|
+
await count.set(999);
|
|
82
|
+
expect(runs).is(2);
|
|
83
|
+
await count.set(999);
|
|
84
|
+
expect(runs).is(2);
|
|
85
|
+
}),
|
|
86
|
+
"debounced": test(async () => {
|
|
87
|
+
const count = signal(1);
|
|
88
|
+
let runs = 0;
|
|
89
|
+
effect(() => {
|
|
90
|
+
count.get();
|
|
91
|
+
runs++;
|
|
92
|
+
});
|
|
93
|
+
expect(runs).is(1);
|
|
94
|
+
count.value++;
|
|
95
|
+
count.value++;
|
|
96
|
+
await count.set(count.get() + 1);
|
|
97
|
+
expect(runs).is(2);
|
|
98
|
+
}),
|
|
99
|
+
"can be disposed": test(async () => {
|
|
100
|
+
const count = signal(1);
|
|
101
|
+
let doubled = 0;
|
|
102
|
+
const dispose = effect(() => doubled = count.value * 2);
|
|
103
|
+
expect(doubled).is(2);
|
|
104
|
+
await count.set(3);
|
|
105
|
+
expect(doubled).is(6);
|
|
106
|
+
dispose();
|
|
107
|
+
await count.set(4);
|
|
108
|
+
expect(doubled).is(6); // old value
|
|
109
|
+
}),
|
|
110
|
+
"signal set promise waits for effects": test(async () => {
|
|
111
|
+
const count = signal(1);
|
|
112
|
+
let doubled = 0;
|
|
113
|
+
effect(() => doubled = count.value * 2);
|
|
114
|
+
expect(doubled).is(2);
|
|
115
|
+
await count.set(3);
|
|
116
|
+
expect(doubled).is(6);
|
|
117
|
+
}),
|
|
118
|
+
"only runs on change": test(async () => {
|
|
119
|
+
const sig = signal("a");
|
|
120
|
+
let runs = 0;
|
|
121
|
+
effect(() => {
|
|
122
|
+
sig.value;
|
|
123
|
+
runs++;
|
|
124
|
+
});
|
|
125
|
+
expect(runs).is(1);
|
|
126
|
+
await sig.set("a");
|
|
127
|
+
expect(runs).is(1);
|
|
128
|
+
await sig.set("b");
|
|
129
|
+
expect(runs).is(2);
|
|
130
|
+
}),
|
|
131
|
+
});
|
|
132
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../s/signals/effect/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { microbounce } from "@e280/stz";
|
|
2
|
+
import { tracker } from "../../tracker/tracker.js";
|
|
3
|
+
export function watch(collector, responder) {
|
|
4
|
+
let disposers = [];
|
|
5
|
+
const dispose = () => {
|
|
6
|
+
for (const d of disposers)
|
|
7
|
+
d();
|
|
8
|
+
disposers = [];
|
|
9
|
+
};
|
|
10
|
+
const run = () => {
|
|
11
|
+
const { seen, result } = tracker.observe(collector);
|
|
12
|
+
for (const saw of seen)
|
|
13
|
+
disposers.push(tracker.subscribe(saw, reset));
|
|
14
|
+
return result;
|
|
15
|
+
};
|
|
16
|
+
const reset = microbounce(() => {
|
|
17
|
+
dispose();
|
|
18
|
+
if (responder)
|
|
19
|
+
responder(run());
|
|
20
|
+
else
|
|
21
|
+
run();
|
|
22
|
+
});
|
|
23
|
+
return { result: run(), dispose };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../s/signals/effect/watch.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAA;AACrC,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAEhD,MAAM,UAAU,KAAK,CACnB,SAAsB,EACtB,SAAkC;IAGnC,IAAI,SAAS,GAAmB,EAAE,CAAA;IAElC,MAAM,OAAO,GAAG,GAAG,EAAE;QACpB,KAAK,MAAM,CAAC,IAAI,SAAS;YAAE,CAAC,EAAE,CAAA;QAC9B,SAAS,GAAG,EAAE,CAAA;IACf,CAAC,CAAA;IAED,MAAM,GAAG,GAAG,GAAG,EAAE;QAChB,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACjD,KAAK,MAAM,GAAG,IAAI,IAAI;YACrB,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QAC9C,OAAO,MAAM,CAAA;IACd,CAAC,CAAA;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;QAC9B,OAAO,EAAE,CAAA;QACT,IAAI,SAAS;YAAE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAA;;YAC1B,GAAG,EAAE,CAAA;IACX,CAAC,CAAC,CAAA;IAEF,OAAO,EAAC,MAAM,EAAE,GAAG,EAAE,EAAE,OAAO,EAAC,CAAA;AAChC,CAAC"}
|
package/x/signals/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
1
|
+
export * from "./derived/fn.js";
|
|
2
|
+
export * from "./derived/class.js";
|
|
3
|
+
export * from "./effect/effect.js";
|
|
4
|
+
export * from "./effect/watch.js";
|
|
5
|
+
export * from "./lazy/fn.js";
|
|
6
|
+
export * from "./lazy/class.js";
|
|
7
7
|
export * from "./r/map.js";
|
|
8
8
|
export * from "./r/set.js";
|
|
9
|
-
export * from "./
|
|
9
|
+
export * from "./signal/fn.js";
|
|
10
|
+
export * from "./signal/class.js";
|
|
10
11
|
export * from "./types.js";
|
package/x/signals/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export * from "./
|
|
3
|
-
export * from "./
|
|
4
|
-
export * from "./
|
|
5
|
-
export * from "./
|
|
6
|
-
export * from "./
|
|
1
|
+
export * from "./derived/fn.js";
|
|
2
|
+
export * from "./derived/class.js";
|
|
3
|
+
export * from "./effect/effect.js";
|
|
4
|
+
export * from "./effect/watch.js";
|
|
5
|
+
export * from "./lazy/fn.js";
|
|
6
|
+
export * from "./lazy/class.js";
|
|
7
7
|
export * from "./r/map.js";
|
|
8
8
|
export * from "./r/set.js";
|
|
9
|
-
export * from "./
|
|
9
|
+
export * from "./signal/fn.js";
|
|
10
|
+
export * from "./signal/class.js";
|
|
10
11
|
export * from "./types.js";
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
package/x/signals/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/signals/index.ts"],"names":[],"mappings":"AACA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../s/signals/index.ts"],"names":[],"mappings":"AACA,cAAc,iBAAiB,CAAA;AAC/B,cAAc,oBAAoB,CAAA;AAElC,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AAEjC,cAAc,cAAc,CAAA;AAC5B,cAAc,iBAAiB,CAAA;AAE/B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAE1B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AAEjC,cAAc,YAAY,CAAA"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { SignalOptions } from "../types.js";
|
|
2
|
+
import { _collect, _compare, _dirty, _disposers, _effect, _formula } from "../utils/symbols.js";
|
|
3
|
+
export interface Lazy<Value> {
|
|
4
|
+
(): Value;
|
|
5
|
+
}
|
|
6
|
+
export declare class Lazy<Value> {
|
|
7
|
+
sneak: Value;
|
|
8
|
+
[_formula]: () => Value;
|
|
9
|
+
[_dirty]: boolean;
|
|
10
|
+
[_disposers]: (() => void)[];
|
|
11
|
+
[_effect]: (() => void) | undefined;
|
|
12
|
+
[_compare]: (a: any, b: any) => boolean;
|
|
13
|
+
constructor(formula: () => Value, options?: Partial<SignalOptions>);
|
|
14
|
+
get value(): Value;
|
|
15
|
+
[_collect](): Value;
|
|
16
|
+
get(): Value;
|
|
17
|
+
dispose(): void;
|
|
18
|
+
toString(): string;
|
|
19
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { lazy } from "./fn.js";
|
|
2
|
+
import { tracker } from "../../tracker/tracker.js";
|
|
3
|
+
import { _collect, _compare, _dirty, _disposers, _effect, _formula } from "../utils/symbols.js";
|
|
4
|
+
export class Lazy {
|
|
5
|
+
sneak;
|
|
6
|
+
[_formula];
|
|
7
|
+
[_dirty];
|
|
8
|
+
[_disposers];
|
|
9
|
+
[_effect];
|
|
10
|
+
[_compare];
|
|
11
|
+
constructor(formula, options) {
|
|
12
|
+
if (new.target !== Lazy)
|
|
13
|
+
throw new Error("Lazy cannot be subclassed");
|
|
14
|
+
return lazy(formula, options);
|
|
15
|
+
}
|
|
16
|
+
get value() {
|
|
17
|
+
return this.get();
|
|
18
|
+
}
|
|
19
|
+
[_collect]() {
|
|
20
|
+
for (const d of this[_disposers])
|
|
21
|
+
d();
|
|
22
|
+
this[_disposers] = [];
|
|
23
|
+
const { seen, result } = tracker.observe(this[_formula]);
|
|
24
|
+
const markDirty = async () => { this[_dirty] = true; };
|
|
25
|
+
for (const saw of seen)
|
|
26
|
+
this[_disposers].push(tracker.subscribe(saw, markDirty));
|
|
27
|
+
this[_effect] = () => {
|
|
28
|
+
for (const d of this[_disposers])
|
|
29
|
+
d();
|
|
30
|
+
this[_disposers] = [];
|
|
31
|
+
};
|
|
32
|
+
return result;
|
|
33
|
+
}
|
|
34
|
+
get() {
|
|
35
|
+
if (!this[_effect]) {
|
|
36
|
+
this.sneak = this[_collect]();
|
|
37
|
+
this[_dirty] = false;
|
|
38
|
+
}
|
|
39
|
+
else if (this[_dirty]) {
|
|
40
|
+
this[_dirty] = false;
|
|
41
|
+
const value = this[_collect]();
|
|
42
|
+
const isChanged = !this[_compare](this.sneak, value);
|
|
43
|
+
if (isChanged) {
|
|
44
|
+
this.sneak = value;
|
|
45
|
+
tracker.notifyWrite(this);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
tracker.notifyRead(this);
|
|
49
|
+
return this.sneak;
|
|
50
|
+
}
|
|
51
|
+
dispose() {
|
|
52
|
+
if (this[_effect])
|
|
53
|
+
this[_effect]();
|
|
54
|
+
}
|
|
55
|
+
toString() {
|
|
56
|
+
return `($lazy "${String(this.get())}")`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=class.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class.js","sourceRoot":"","sources":["../../../s/signals/lazy/class.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAChD,OAAO,EAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAM7F,MAAM,OAAO,IAAI;IAChB,KAAK,CACJ;IAAA,CAAC,QAAQ,CAAC,CACV;IAAA,CAAC,MAAM,CAAC,CACR;IAAA,CAAC,UAAU,CAAC,CACZ;IAAA,CAAC,OAAO,CAAC,CACT;IAAA,CAAC,QAAQ,CAAC,CAA8B;IAEzC,YAAY,OAAoB,EAAE,OAAgC;QACjE,IAAI,GAAG,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QACrE,OAAO,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,GAAG,EAAE,CAAA;IAClB,CAAC;IAED,CAAC,QAAQ,CAAC;QACT,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;YAAE,CAAC,EAAE,CAAA;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;QAErB,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA;QAEtD,MAAM,SAAS,GAAG,KAAK,IAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA,CAAC,CAAC,CAAA;QACpD,KAAK,MAAM,GAAG,IAAI,IAAI;YACrB,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAA;QAEzD,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,EAAE;YACpB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC;gBAAE,CAAC,EAAE,CAAA;YACrC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;QACtB,CAAC,CAAA;QAED,OAAO,MAAM,CAAA;IACd,CAAC;IAED,GAAG;QACF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;YAC7B,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;QACrB,CAAC;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAA;YAC9B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YACpD,IAAI,SAAS,EAAE,CAAC;gBACf,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;gBAClB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;YAC1B,CAAC;QACF,CAAC;QAED,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,KAAK,CAAA;IAClB,CAAC;IAED,OAAO;QACN,IAAI,IAAI,CAAC,OAAO,CAAC;YAChB,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;IACjB,CAAC;IAED,QAAQ;QACP,OAAO,WAAW,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAA;IACzC,CAAC;CACD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Lazy } from "./class.js";
|
|
2
|
+
import { defaultCompare } from "../utils/default-compare.js";
|
|
3
|
+
import { _compare, _dirty, _disposers, _effect, _formula } from "../utils/symbols.js";
|
|
4
|
+
export function lazy(formula, options) {
|
|
5
|
+
function fn() {
|
|
6
|
+
return fn.get();
|
|
7
|
+
}
|
|
8
|
+
Object.setPrototypeOf(fn, Lazy.prototype);
|
|
9
|
+
fn.sneak = undefined;
|
|
10
|
+
fn[_formula] = formula;
|
|
11
|
+
fn[_dirty] = false;
|
|
12
|
+
fn[_effect] = undefined;
|
|
13
|
+
fn[_disposers] = [];
|
|
14
|
+
fn[_compare] = options?.compare ?? defaultCompare;
|
|
15
|
+
return fn;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=fn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fn.js","sourceRoot":"","sources":["../../../s/signals/lazy/fn.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,YAAY,CAAA;AAE/B,OAAO,EAAC,cAAc,EAAC,MAAM,6BAA6B,CAAA;AAC1D,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAC,MAAM,qBAAqB,CAAA;AAEnF,MAAM,UAAU,IAAI,CAAQ,OAAoB,EAAE,OAAgC;IACjF,SAAS,EAAE;QACV,OAAQ,EAAkB,CAAC,GAAG,EAAE,CAAA;IACjC,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;IACzC,EAAE,CAAC,KAAK,GAAG,SAAS,CAAA;IACpB,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAA;IACtB,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;IAClB,EAAE,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;IACvB,EAAE,CAAC,UAAU,CAAC,GAAG,EAAS,CAAA;IAC1B,EAAE,CAAC,QAAQ,CAAC,GAAG,OAAO,EAAE,OAAO,IAAI,cAAc,CAAA;IAEjD,OAAO,EAAiB,CAAA;AACzB,CAAC"}
|
|
@@ -2,9 +2,8 @@ import { Science } from "@e280/science";
|
|
|
2
2
|
declare const _default: {
|
|
3
3
|
"lazy values": Science.Test;
|
|
4
4
|
"lazy is lazy": Science.Test;
|
|
5
|
+
"lazy handles changing deps": Science.Test;
|
|
5
6
|
"lazy syntax": Science.Test;
|
|
6
|
-
"hipster
|
|
7
|
-
"lazy values": Science.Test;
|
|
8
|
-
};
|
|
7
|
+
"lazy hipster syntax": Science.Test;
|
|
9
8
|
};
|
|
10
9
|
export default _default;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Science, test, expect } from "@e280/science";
|
|
2
|
-
import { lazy
|
|
2
|
+
import { lazy } from "./fn.js";
|
|
3
|
+
import { signal } from "../signal/fn.js";
|
|
3
4
|
export default Science.suite({
|
|
4
5
|
"lazy values": test(async () => {
|
|
5
6
|
const a = signal(2);
|
|
@@ -26,6 +27,17 @@ export default Science.suite({
|
|
|
26
27
|
expect(comp.value).is(20);
|
|
27
28
|
expect(runs).is(2);
|
|
28
29
|
}),
|
|
30
|
+
"lazy handles changing deps": test(async () => {
|
|
31
|
+
const toggle = signal(true);
|
|
32
|
+
const a = signal(1);
|
|
33
|
+
const b = signal(2);
|
|
34
|
+
const comp = lazy(() => toggle() ? a() : b());
|
|
35
|
+
expect(comp()).is(1);
|
|
36
|
+
await toggle(false);
|
|
37
|
+
expect(comp()).is(2);
|
|
38
|
+
await b(3);
|
|
39
|
+
expect(comp()).is(3);
|
|
40
|
+
}),
|
|
29
41
|
"lazy syntax": test(async () => {
|
|
30
42
|
const a = signal(2);
|
|
31
43
|
const b = signal(3);
|
|
@@ -35,17 +47,15 @@ export default Science.suite({
|
|
|
35
47
|
expect(sum.value).is(8);
|
|
36
48
|
expect(sum.get()).is(8);
|
|
37
49
|
}),
|
|
38
|
-
"hipster
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
expect(sum()).is(12);
|
|
48
|
-
}),
|
|
50
|
+
"lazy hipster syntax": test(async () => {
|
|
51
|
+
const a = signal(2);
|
|
52
|
+
const b = signal(3);
|
|
53
|
+
const sum = lazy(() => a() + b());
|
|
54
|
+
expect(sum()).is(5);
|
|
55
|
+
await a(5);
|
|
56
|
+
expect(sum()).is(8);
|
|
57
|
+
await b(7);
|
|
58
|
+
expect(sum()).is(12);
|
|
49
59
|
}),
|
|
50
60
|
});
|
|
51
|
-
//# sourceMappingURL=
|
|
61
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../s/signals/lazy/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Sub } from "@e280/stz";
|
|
2
|
+
import { SignalOptions } from "../types.js";
|
|
3
|
+
import { _compare, _lock } from "../utils/symbols.js";
|
|
4
|
+
export interface Signal<Value> {
|
|
5
|
+
(): Value;
|
|
6
|
+
(value: Value): Promise<Value>;
|
|
7
|
+
}
|
|
8
|
+
export declare class Signal<Value> {
|
|
9
|
+
sneak: Value;
|
|
10
|
+
on: Sub<[Value]>;
|
|
11
|
+
[_lock]: boolean;
|
|
12
|
+
[_compare]: (a: any, b: any) => boolean;
|
|
13
|
+
constructor(value: Value, options?: Partial<SignalOptions>);
|
|
14
|
+
get value(): any;
|
|
15
|
+
set value(value: any);
|
|
16
|
+
get(): Value;
|
|
17
|
+
set(value: Value, forcePublish?: boolean): Promise<Value>;
|
|
18
|
+
publish(): Promise<Value>;
|
|
19
|
+
toString(): string;
|
|
20
|
+
}
|