@e280/strata 0.1.0 → 0.2.0-1

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.
Files changed (87) hide show
  1. package/README.md +28 -14
  2. package/package.json +3 -3
  3. package/s/signals/derive.ts +33 -0
  4. package/s/signals/effect.ts +10 -2
  5. package/s/signals/fns.ts +31 -0
  6. package/s/signals/index.ts +6 -2
  7. package/s/signals/lazy.ts +47 -0
  8. package/s/signals/parts/reactive.ts +12 -0
  9. package/s/signals/parts/readable.ts +16 -0
  10. package/s/signals/signal.ts +48 -37
  11. package/s/signals/signals.test.ts +11 -280
  12. package/s/signals/tests/derive.test.ts +89 -0
  13. package/s/signals/tests/effect.test.ts +89 -0
  14. package/s/signals/tests/lazy.test.ts +49 -0
  15. package/s/signals/tests/signal-fn.test.ts +28 -0
  16. package/s/signals/tests/signal.test.ts +63 -0
  17. package/s/signals/types.ts +11 -3
  18. package/s/signals/utils/default-compare.ts +5 -0
  19. package/s/signals/utils/hipster.ts +40 -0
  20. package/s/tests.test.ts +2 -2
  21. package/s/tree/parts/branch.ts +4 -4
  22. package/s/tree/parts/trunk.ts +7 -5
  23. package/x/signals/derive.d.ts +7 -0
  24. package/x/signals/derive.js +28 -0
  25. package/x/signals/derive.js.map +1 -0
  26. package/x/signals/effect.js.map +1 -1
  27. package/x/signals/fns.d.ts +12 -0
  28. package/x/signals/fns.js +16 -0
  29. package/x/signals/fns.js.map +1 -0
  30. package/x/signals/index.d.ts +5 -2
  31. package/x/signals/index.js +5 -2
  32. package/x/signals/index.js.map +1 -1
  33. package/x/signals/lazy.d.ts +8 -0
  34. package/x/signals/lazy.js +37 -0
  35. package/x/signals/lazy.js.map +1 -0
  36. package/x/signals/parts/reactive.d.ts +5 -0
  37. package/x/signals/parts/reactive.js +9 -0
  38. package/x/signals/parts/reactive.js.map +1 -0
  39. package/x/signals/parts/readable.d.ts +6 -0
  40. package/x/signals/parts/readable.js +15 -0
  41. package/x/signals/parts/readable.js.map +1 -0
  42. package/x/signals/signal.d.ts +7 -17
  43. package/x/signals/signal.js +43 -15
  44. package/x/signals/signal.js.map +1 -1
  45. package/x/signals/signals.test.d.ts +33 -20
  46. package/x/signals/signals.test.js +11 -227
  47. package/x/signals/signals.test.js.map +1 -1
  48. package/x/signals/tests/derive.test.d.ts +8 -0
  49. package/x/signals/tests/derive.test.js +73 -0
  50. package/x/signals/tests/derive.test.js.map +1 -0
  51. package/x/signals/tests/effect.test.d.ts +10 -0
  52. package/x/signals/tests/effect.test.js +72 -0
  53. package/x/signals/tests/effect.test.js.map +1 -0
  54. package/x/signals/tests/lazy.test.d.ts +7 -0
  55. package/x/signals/tests/lazy.test.js +39 -0
  56. package/x/signals/tests/lazy.test.js.map +1 -0
  57. package/x/signals/tests/signal-fn.test.d.ts +6 -0
  58. package/x/signals/tests/signal-fn.test.js +22 -0
  59. package/x/signals/tests/signal-fn.test.js.map +1 -0
  60. package/x/signals/tests/signal.test.d.ts +12 -0
  61. package/x/signals/tests/signal.test.js +54 -0
  62. package/x/signals/tests/signal.test.js.map +1 -0
  63. package/x/signals/types.d.ts +9 -3
  64. package/x/signals/utils/default-compare.d.ts +1 -0
  65. package/x/signals/utils/default-compare.js +4 -0
  66. package/x/signals/utils/default-compare.js.map +1 -0
  67. package/x/signals/utils/hipster.d.ts +3 -0
  68. package/x/signals/utils/hipster.js +28 -0
  69. package/x/signals/utils/hipster.js.map +1 -0
  70. package/x/tests.test.js +2 -2
  71. package/x/tests.test.js.map +1 -1
  72. package/x/tree/parts/branch.js +2 -2
  73. package/x/tree/parts/branch.js.map +1 -1
  74. package/x/tree/parts/trunk.js +4 -3
  75. package/x/tree/parts/trunk.js.map +1 -1
  76. package/s/signals/parts/derive.ts +0 -29
  77. package/s/signals/parts/lazy.ts +0 -27
  78. package/s/signals/parts/units.ts +0 -152
  79. package/x/signals/parts/derive.d.ts +0 -12
  80. package/x/signals/parts/derive.js +0 -12
  81. package/x/signals/parts/derive.js.map +0 -1
  82. package/x/signals/parts/lazy.d.ts +0 -10
  83. package/x/signals/parts/lazy.js +0 -12
  84. package/x/signals/parts/lazy.js.map +0 -1
  85. package/x/signals/parts/units.d.ts +0 -43
  86. package/x/signals/parts/units.js +0 -133
  87. package/x/signals/parts/units.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ import { Science, test, expect } from "@e280/science";
2
+ import { lazy, signal } from "../fns.js";
3
+ export default Science.suite({
4
+ "lazy values": test(async () => {
5
+ const a = signal(2);
6
+ const b = signal(3);
7
+ const sum = lazy(() => a.value + b.value);
8
+ expect(sum.value).is(5);
9
+ await a.set(5);
10
+ expect(sum.value).is(8);
11
+ await b.set(7);
12
+ expect(sum.value).is(12);
13
+ }),
14
+ "lazy is lazy": test(async () => {
15
+ const a = signal(1);
16
+ let runs = 0;
17
+ const comp = lazy(() => {
18
+ runs++;
19
+ return a.value * 10;
20
+ });
21
+ expect(runs).is(0);
22
+ expect(comp.value).is(10);
23
+ expect(runs).is(1);
24
+ await a.set(2);
25
+ expect(runs).is(1);
26
+ expect(comp.value).is(20);
27
+ expect(runs).is(2);
28
+ }),
29
+ "lazy syntax": test(async () => {
30
+ const a = signal(2);
31
+ const b = signal(3);
32
+ const sum = lazy(() => a.value + b.value);
33
+ expect(sum.value).is(5);
34
+ await a.set(5);
35
+ expect(sum.value).is(8);
36
+ expect(sum.get()).is(8);
37
+ }),
38
+ });
39
+ //# sourceMappingURL=lazy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy.test.js","sourceRoot":"","sources":["../../../s/signals/tests/lazy.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,MAAM,WAAW,CAAA;AAEtC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,aAAa,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC,CAAC;IAEF,cAAc,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;YACtB,IAAI,EAAE,CAAA;YACN,OAAO,CAAC,CAAC,KAAK,GAAG,EAAE,CAAA;QACpB,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAElB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAA;QACzB,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC,CAAC;IAEF,aAAa,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAA;QACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEvB,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QACd,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACvB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACxB,CAAC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { Science } from "@e280/science";
2
+ declare const _default: {
3
+ "get/set": Science.Test;
4
+ ".on 'this' interrogation": Science.Test;
5
+ };
6
+ export default _default;
@@ -0,0 +1,22 @@
1
+ import { Science, test, expect } from "@e280/science";
2
+ import { signal } from "../fns.js";
3
+ export default Science.suite({
4
+ "get/set": test(async () => {
5
+ const count = signal.fn(0);
6
+ expect(count()).is(0);
7
+ count.value++;
8
+ expect(count()).is(1);
9
+ }),
10
+ ".on 'this' interrogation": test(async () => {
11
+ const count = signal.fn(0);
12
+ expect(count()).is(0);
13
+ let reported = count();
14
+ count.on(x => { reported = x; });
15
+ count(1);
16
+ expect(reported).is(1);
17
+ count.on.clear();
18
+ count(2);
19
+ expect(reported).is(1);
20
+ }),
21
+ });
22
+ //# sourceMappingURL=signal-fn.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-fn.test.js","sourceRoot":"","sources":["../../../s/signals/tests/signal-fn.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,MAAM,EAAC,MAAM,WAAW,CAAA;AAEhC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,SAAS,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACzB,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAErB,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACtB,CAAC,CAAC;IACF,0BAA0B,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAErB,IAAI,QAAQ,GAAG,KAAK,EAAE,CAAA;QACtB,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAE,QAAQ,GAAG,CAAC,CAAA,CAAA,CAAC,CAAC,CAAA;QAE7B,KAAK,CAAC,CAAC,CAAC,CAAA;QACR,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAEtB,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;QAChB,KAAK,CAAC,CAAC,CAAC,CAAA;QACR,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;IACvB,CAAC,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,12 @@
1
+ import { Science } from "@e280/science";
2
+ declare const _default: {
3
+ "get/set value": Science.Test;
4
+ "set and publish returns value": Science.Test;
5
+ "syntax interop": Science.Test;
6
+ on: {
7
+ "on is not debounced": Science.Test;
8
+ "on only fires on change": Science.Test;
9
+ "on circularity forbidden": Science.Test;
10
+ };
11
+ };
12
+ export default _default;
@@ -0,0 +1,54 @@
1
+ import { Science, test, expect } from "@e280/science";
2
+ import { signal } from "../fns.js";
3
+ export default Science.suite({
4
+ "get/set value": test(async () => {
5
+ const count = signal(0);
6
+ expect(count.value).is(0);
7
+ count.value++;
8
+ expect(count.value).is(1);
9
+ count.value = 5;
10
+ expect(count.value).is(5);
11
+ }),
12
+ "set and publish returns value": test(async () => {
13
+ const count = signal(0);
14
+ expect(count.value).is(0);
15
+ expect(await count.set(1)).is(1);
16
+ expect(await count.publish(2)).is(2);
17
+ }),
18
+ "syntax interop": test(async () => {
19
+ const count = signal(0);
20
+ count.value = 1;
21
+ expect(count.get()).is(1);
22
+ }),
23
+ "on": Science.suite({
24
+ "on is not debounced": test(async () => {
25
+ const count = signal(1);
26
+ let runs = 0;
27
+ count.on(() => void runs++);
28
+ await count.set(2);
29
+ await count.set(3);
30
+ expect(runs).is(2);
31
+ }),
32
+ "on only fires on change": test(async () => {
33
+ const count = signal(1);
34
+ let runs = 0;
35
+ count.on(() => void runs++);
36
+ await count.set(2);
37
+ await count.set(2);
38
+ expect(runs).is(1);
39
+ }),
40
+ "on circularity forbidden": test(async () => {
41
+ const count = signal(1);
42
+ let runs = 0;
43
+ count.on(async () => {
44
+ await count.set(99);
45
+ runs++;
46
+ });
47
+ expect(async () => {
48
+ await count.set(2);
49
+ }).throwsAsync();
50
+ expect(runs).is(0);
51
+ }),
52
+ }),
53
+ });
54
+ //# sourceMappingURL=signal.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.test.js","sourceRoot":"","sources":["../../../s/signals/tests/signal.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
+ import { Lazy } from "./lazy.js";
1
2
  import { Signal } from "./signal.js";
2
- import { LazySignal } from "./parts/lazy.js";
3
- import { DerivedSignal } from "./parts/derive.js";
4
- export type Signaloid<V> = Signal<V> | DerivedSignal<V> | LazySignal<V>;
3
+ import { Derive } from "./derive.js";
4
+ export type Signaly<V> = Signal<V> | Derive<V> | Lazy<V>;
5
5
  export type SignalOptions = {
6
6
  compare: (a: any, b: any) => boolean;
7
7
  };
8
+ export type SignalFn<V> = {
9
+ (): V;
10
+ (v: V): Promise<V>;
11
+ (v?: V): V | Promise<V>;
12
+ signal: Signal<V>;
13
+ } & Signal<V>;
@@ -0,0 +1 @@
1
+ export declare function defaultCompare(a: any, b: any): boolean;
@@ -0,0 +1,4 @@
1
+ export function defaultCompare(a, b) {
2
+ return a === b;
3
+ }
4
+ //# sourceMappingURL=default-compare.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-compare.js","sourceRoot":"","sources":["../../../s/signals/utils/default-compare.ts"],"names":[],"mappings":"AACA,MAAM,UAAU,cAAc,CAAC,CAAM,EAAE,CAAM;IAC5C,OAAO,CAAC,KAAK,CAAC,CAAA;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Signal } from "../signal.js";
2
+ import { SignalFn } from "../types.js";
3
+ export declare function hipster<V>(sig: Signal<V>): SignalFn<V>;
@@ -0,0 +1,28 @@
1
+ export function hipster(sig) {
2
+ function f(_v) {
3
+ return (arguments.length === 0)
4
+ ? sig.get()
5
+ : sig.set(arguments[0]);
6
+ }
7
+ f.signal = sig;
8
+ f.get = sig.get.bind(sig);
9
+ f.set = sig.set.bind(sig);
10
+ f.on = sig.on;
11
+ f.dispose = sig.dispose.bind(sig);
12
+ f.publish = sig.publish.bind(sig);
13
+ f.fn = sig.fn.bind(sig);
14
+ Object.setPrototypeOf(f, {
15
+ set: sig.set.bind(sig),
16
+ publish: sig.publish.bind(sig),
17
+ });
18
+ Object.defineProperty(f, "value", {
19
+ get: () => sig.value,
20
+ set: (v) => sig.value = v,
21
+ });
22
+ Object.defineProperty(f, "sneak", {
23
+ get: () => sig.sneak,
24
+ set: (v) => sig.sneak = v,
25
+ });
26
+ return f;
27
+ }
28
+ //# sourceMappingURL=hipster.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hipster.js","sourceRoot":"","sources":["../../../s/signals/utils/hipster.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,OAAO,CAAI,GAAc;IAGxC,SAAS,CAAC,CAAC,EAAM;QAChB,OAAO,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE;YACX,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;IACzB,CAAC;IAED,CAAC,CAAC,MAAM,GAAG,GAAG,CAAA;IAEd,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;IACb,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEvB,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE;QACxB,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;QACtB,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;KAC9B,CAAC,CAAA;IAEF,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;QACjC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK;QACpB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;KACzB,CAAC,CAAA;IAEF,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE;QACjC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK;QACpB,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC;KACzB,CAAC,CAAA;IAEF,OAAO,CAAgB,CAAA;AACxB,CAAC"}
package/x/tests.test.js CHANGED
@@ -2,9 +2,9 @@ import { expect, Science, test } from "@e280/science";
2
2
  import tree from "./tree/tree.test.js";
3
3
  import signals from "./signals/signals.test.js";
4
4
  import tracker from "./tracker/tracker.test.js";
5
- import { Trunk } from "./tree/parts/trunk.js";
5
+ import { signal } from "./signals/fns.js";
6
6
  import { effect } from "./signals/effect.js";
7
- import { signal } from "./signals/signal.js";
7
+ import { Trunk } from "./tree/parts/trunk.js";
8
8
  await Science.run({
9
9
  tree,
10
10
  signals,
@@ -1 +1 @@
1
- {"version":3,"file":"tests.test.js","sourceRoot":"","sources":["../s/tests.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tests.test.js","sourceRoot":"","sources":["../s/tests.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { deep } from "@e280/stz";
2
- import { signal } from "../../signals/signal.js";
2
+ import { derive } from "../../signals/fns.js";
3
3
  export class Branch {
4
4
  parent;
5
5
  selector;
@@ -9,7 +9,7 @@ export class Branch {
9
9
  this.parent = parent;
10
10
  this.selector = selector;
11
11
  this.options = options;
12
- this.#immutable = signal.derive(() => {
12
+ this.#immutable = derive(() => {
13
13
  const state = selector(parent.state);
14
14
  return deep.freeze(options.clone(state));
15
15
  }, { compare: deep.equal });
@@ -1 +1 @@
1
- {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../s/tree/parts/branch.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,yBAAyB,CAAA;AAI9C,MAAM,OAAO,MAAM;IAIR;IACA;IACA;IALV,UAAU,CAA6B;IAEvC,YACU,MAAyB,EACzB,QAAkC,EAClC,OAAgB;QAFhB,WAAM,GAAN,MAAM,CAAmB;QACzB,aAAQ,GAAR,QAAQ,CAA0B;QAClC,YAAO,GAAP,OAAO,CAAS;QAGzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;YACpC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAY,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAiB,CAAA;QACzD,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI,EAAE;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CACnC,CAAA;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,CAA0B,QAA0B;QACzD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;CACD"}
1
+ {"version":3,"file":"branch.js","sourceRoot":"","sources":["../../../s/tree/parts/branch.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAA;AAI3C,MAAM,OAAO,MAAM;IAIR;IACA;IACA;IALV,UAAU,CAAsB;IAEhC,YACU,MAAyB,EACzB,QAAkC,EAClC,OAAgB;QAFhB,WAAM,GAAN,MAAM,CAAmB;QACzB,aAAQ,GAAR,QAAQ,CAA0B;QAClC,YAAO,GAAP,OAAO,CAAS;QAGzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,EAAE;YAC7B,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAY,CAAC,CAAA;YAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAiB,CAAA;QACzD,CAAC,EAAE,EAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAC,CAAC,CAAA;IAC1B,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI,EAAE;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CACnC,CAAA;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,MAAM,CAA0B,QAA0B;QACzD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;CACD"}
@@ -1,9 +1,9 @@
1
1
  import { deep } from "@e280/stz";
2
2
  import { Branch } from "./branch.js";
3
+ import { signal } from "../../signals/fns.js";
3
4
  import { trunkSetup } from "./utils/setup.js";
4
5
  import { Chronobranch } from "./chronobranch.js";
5
6
  import { processOptions } from "./utils/process-options.js";
6
- import { signal } from "../../signals/signal.js";
7
7
  export class Trunk {
8
8
  static setup = trunkSetup;
9
9
  static chronicle = (state) => ({
@@ -32,8 +32,9 @@ export class Trunk {
32
32
  throw new Error("nested mutations are forbidden");
33
33
  try {
34
34
  this.#mutationLock++;
35
- mutator(this.#mutable());
36
- const newState = this.#mutable.get();
35
+ const value = this.#mutable.get();
36
+ mutator(value);
37
+ const newState = value;
37
38
  const isChanged = !deep.equal(newState, oldState);
38
39
  if (isChanged)
39
40
  await this.overwrite(newState);
@@ -1 +1 @@
1
- {"version":3,"file":"trunk.js","sourceRoot":"","sources":["../../../s/tree/parts/trunk.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAEzD,OAAO,EAAC,MAAM,EAAS,MAAM,yBAAyB,CAAA;AAGtD,MAAM,OAAO,KAAK;IACjB,MAAM,CAAC,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,CAAC,SAAS,GAAG,CAAwB,KAAQ,EAAgB,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACV,CAAC,CAAA;IAEF,OAAO,CAAS;IAEhB,UAAU,CAA6B;IACvC,QAAQ,CAAW;IACnB,aAAa,GAAG,CAAC,CAAA;IAEjB,YAAY,KAAQ,EAAE,UAA4B,EAAE;QACnD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAiB,CACpE,CAAA;IACF,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI,EAAE;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;QACxD,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAClD,IAAI,CAAC;YACJ,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;YACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;YACpC,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACjD,IAAI,SAAS;gBACZ,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;gBACO,CAAC;YAAC,IAAI,CAAC,aAAa,EAAE,CAAA;QAAC,CAAC;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAQ;QACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,CAA0B,QAA0B;QACzD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED,YAAY,CACV,KAAa,EACb,QAAqC;QAEtC,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7D,CAAC"}
1
+ {"version":3,"file":"trunk.js","sourceRoot":"","sources":["../../../s/tree/parts/trunk.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAC9B,OAAO,EAAC,MAAM,EAAC,MAAM,aAAa,CAAA;AAClC,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAA;AAC3C,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAG3C,OAAO,EAAC,YAAY,EAAC,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAC,cAAc,EAAC,MAAM,4BAA4B,CAAA;AAGzD,MAAM,OAAO,KAAK;IACjB,MAAM,CAAC,KAAK,GAAG,UAAU,CAAA;IACzB,MAAM,CAAC,SAAS,GAAG,CAAwB,KAAQ,EAAgB,EAAE,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;KACV,CAAC,CAAA;IAEF,OAAO,CAAS;IAEhB,UAAU,CAAsB;IAChC,QAAQ,CAAW;IACnB,aAAa,GAAG,CAAC,CAAA;IAEjB,YAAY,KAAQ,EAAE,UAA4B,EAAE;QACnD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAiB,CACpE,CAAA;IACF,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,IAAI,EAAE;QACL,OAAO,IAAI,CAAC,UAAU,CAAC,EAAE,CAAA;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAA;QACxD,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAClD,IAAI,CAAC;YACJ,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAA;YACjC,OAAO,CAAC,KAAK,CAAC,CAAA;YACd,MAAM,QAAQ,GAAG,KAAK,CAAA;YACtB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACjD,IAAI,SAAS;gBACZ,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAChC,CAAC;gBACO,CAAC;YAAC,IAAI,CAAC,aAAa,EAAE,CAAA;QAAC,CAAC;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAQ;QACvB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACnC,CAAC;IAED,MAAM,CAA0B,QAA0B;QACzD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;IAED,YAAY,CACV,KAAa,EACb,QAAqC;QAEtC,OAAO,IAAI,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC7D,CAAC"}
@@ -1,29 +0,0 @@
1
-
2
- import {Sub} from "@e280/stz"
3
- import {SignalOptions} from "../types.js"
4
- import {DerivedCore, processSignalOptions} from "./units.js"
5
-
6
- export type DerivedSignal<V> = {
7
- (): V
8
- kind: "derived"
9
-
10
- sneak: V
11
- on: Sub<[V]>
12
- get(): V
13
- get value(): V
14
- dispose(): void
15
- }
16
-
17
- export function derive<V>(formula: () => V, options: Partial<SignalOptions> = {}) {
18
- function fn(): V {
19
- return (fn as any).value
20
- }
21
-
22
- const o = processSignalOptions(options)
23
- const core = DerivedCore.make<V>(fn as any, formula, o)
24
- Object.setPrototypeOf(fn, DerivedCore.prototype)
25
- Object.assign(fn, core)
26
-
27
- return fn as DerivedSignal<V>
28
- }
29
-
@@ -1,27 +0,0 @@
1
-
2
- import {SignalOptions} from "../types.js"
3
- import {LazyCore, processSignalOptions} from "./units.js"
4
-
5
- export type LazySignal<V> = {
6
- (): V
7
- kind: "lazy"
8
-
9
- sneak: V
10
- get(): V
11
- get value(): V
12
- dispose(): void
13
- }
14
-
15
- export function lazy<V>(formula: () => V, options: Partial<SignalOptions> = {}) {
16
- function fn(): V {
17
- return (fn as any).value
18
- }
19
-
20
- const o = processSignalOptions(options)
21
- const core = new LazyCore<V>(formula, o)
22
- Object.setPrototypeOf(fn, LazyCore.prototype)
23
- Object.assign(fn, core)
24
-
25
- return fn as LazySignal<V>
26
- }
27
-
@@ -1,152 +0,0 @@
1
-
2
- import {sub} from "@e280/stz"
3
- import {SignalOptions} from "../types.js"
4
- import {collectorEffect} from "../effect.js"
5
- import {tracker} from "../../tracker/tracker.js"
6
-
7
- const defaultSignalOptions: SignalOptions = {
8
- compare: (a, b) => a === b
9
- }
10
-
11
- export function processSignalOptions(options: Partial<SignalOptions> = {}) {
12
- return {...defaultSignalOptions, ...options}
13
- }
14
-
15
- export class ReadableSignal<V> {
16
- constructor(public sneak: V) {}
17
-
18
- get() {
19
- tracker.notifyRead(this)
20
- return this.sneak
21
- }
22
-
23
- get value() {
24
- return this.get()
25
- }
26
- }
27
-
28
- export class ReactiveSignal<V> extends ReadableSignal<V> {
29
- on = sub<[V]>()
30
-
31
- dispose() {
32
- this.on.clear()
33
- }
34
- }
35
-
36
- export class SignalCore<V> extends ReactiveSignal<V> {
37
- kind: "signal" = "signal"
38
- _lock = false
39
-
40
- constructor(sneak: V, public _options: SignalOptions) {
41
- super(sneak)
42
- }
43
-
44
- async set(v: V) {
45
- const isChanged = !this._options.compare(this.sneak, v)
46
- if (isChanged)
47
- await this.publish(v)
48
- return v
49
- }
50
-
51
- get value() {
52
- return this.get()
53
- }
54
-
55
- set value(v: V) {
56
- this.set(v)
57
- }
58
-
59
- async publish(v = this.get()) {
60
- if (this._lock)
61
- throw new Error("forbid circularity")
62
-
63
- let promise = Promise.resolve()
64
-
65
- try {
66
- this._lock = true
67
- this.sneak = v
68
- promise = Promise.all([
69
- tracker.notifyWrite(this),
70
- this.on.pub(v),
71
- ]) as any
72
- }
73
- finally {
74
- this._lock = false
75
- }
76
-
77
- await promise
78
- return v
79
- }
80
- }
81
-
82
- export class LazyCore<V> extends ReadableSignal<V> {
83
- kind: "lazy" = "lazy"
84
-
85
- _dirty = false
86
- _effect: (() => void) | undefined
87
-
88
- constructor(public _formula: () => V, public _options: SignalOptions) {
89
- super(undefined as any)
90
- }
91
-
92
- get() {
93
- if (!this._effect) {
94
- const {result, dispose} = collectorEffect(this._formula, () => this._dirty = true)
95
- this._effect = dispose
96
- this.sneak = result
97
- }
98
- if (this._dirty) {
99
- this._dirty = false
100
-
101
- const v = this._formula()
102
- const isChanged = !this._options.compare(this.sneak, v)
103
- if (isChanged) {
104
- this.sneak = v
105
- tracker.notifyWrite(this)
106
- }
107
- }
108
- return super.get()
109
- }
110
-
111
- get value() {
112
- return this.get()
113
- }
114
-
115
- dispose() {
116
- if (this._effect)
117
- this._effect()
118
- }
119
- }
120
-
121
- export class DerivedCore<V> extends ReactiveSignal<V> {
122
- static make<V>(that: DerivedCore<V>, formula: () => V, options: SignalOptions) {
123
- const {result, dispose} = collectorEffect(formula, async() => {
124
- const value = formula()
125
- const isChanged = !options.compare(that.sneak, value)
126
- if (isChanged) {
127
- that.sneak = value
128
- await Promise.all([
129
- tracker.notifyWrite(that),
130
- that.on.pub(value),
131
- ])
132
- }
133
- })
134
- return new this(result, dispose)
135
- }
136
-
137
- kind: "derived" = "derived"
138
-
139
- constructor(initialValue: V, public _effect: () => void) {
140
- super(initialValue)
141
- }
142
-
143
- get value() {
144
- return this.get()
145
- }
146
-
147
- dispose() {
148
- super.dispose()
149
- this._effect()
150
- }
151
- }
152
-
@@ -1,12 +0,0 @@
1
- import { Sub } from "@e280/stz";
2
- import { SignalOptions } from "../types.js";
3
- export type DerivedSignal<V> = {
4
- (): V;
5
- kind: "derived";
6
- sneak: V;
7
- on: Sub<[V]>;
8
- get(): V;
9
- get value(): V;
10
- dispose(): void;
11
- };
12
- export declare function derive<V>(formula: () => V, options?: Partial<SignalOptions>): DerivedSignal<V>;
@@ -1,12 +0,0 @@
1
- import { DerivedCore, processSignalOptions } from "./units.js";
2
- export function derive(formula, options = {}) {
3
- function fn() {
4
- return fn.value;
5
- }
6
- const o = processSignalOptions(options);
7
- const core = DerivedCore.make(fn, formula, o);
8
- Object.setPrototypeOf(fn, DerivedCore.prototype);
9
- Object.assign(fn, core);
10
- return fn;
11
- }
12
- //# sourceMappingURL=derive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"derive.js","sourceRoot":"","sources":["../../../s/signals/parts/derive.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,WAAW,EAAE,oBAAoB,EAAC,MAAM,YAAY,CAAA;AAa5D,MAAM,UAAU,MAAM,CAAI,OAAgB,EAAE,UAAkC,EAAE;IAC/E,SAAS,EAAE;QACV,OAAQ,EAAU,CAAC,KAAK,CAAA;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAI,EAAS,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;IACvD,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC,CAAA;IAChD,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAEvB,OAAO,EAAsB,CAAA;AAC9B,CAAC"}
@@ -1,10 +0,0 @@
1
- import { SignalOptions } from "../types.js";
2
- export type LazySignal<V> = {
3
- (): V;
4
- kind: "lazy";
5
- sneak: V;
6
- get(): V;
7
- get value(): V;
8
- dispose(): void;
9
- };
10
- export declare function lazy<V>(formula: () => V, options?: Partial<SignalOptions>): LazySignal<V>;
@@ -1,12 +0,0 @@
1
- import { LazyCore, processSignalOptions } from "./units.js";
2
- export function lazy(formula, options = {}) {
3
- function fn() {
4
- return fn.value;
5
- }
6
- const o = processSignalOptions(options);
7
- const core = new LazyCore(formula, o);
8
- Object.setPrototypeOf(fn, LazyCore.prototype);
9
- Object.assign(fn, core);
10
- return fn;
11
- }
12
- //# sourceMappingURL=lazy.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"lazy.js","sourceRoot":"","sources":["../../../s/signals/parts/lazy.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAE,oBAAoB,EAAC,MAAM,YAAY,CAAA;AAYzD,MAAM,UAAU,IAAI,CAAI,OAAgB,EAAE,UAAkC,EAAE;IAC7E,SAAS,EAAE;QACV,OAAQ,EAAU,CAAC,KAAK,CAAA;IACzB,CAAC;IAED,MAAM,CAAC,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAI,OAAO,EAAE,CAAC,CAAC,CAAA;IACxC,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;IAC7C,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IAEvB,OAAO,EAAmB,CAAA;AAC3B,CAAC"}
@@ -1,43 +0,0 @@
1
- import { SignalOptions } from "../types.js";
2
- export declare function processSignalOptions(options?: Partial<SignalOptions>): {
3
- compare: (a: any, b: any) => boolean;
4
- };
5
- export declare class ReadableSignal<V> {
6
- sneak: V;
7
- constructor(sneak: V);
8
- get(): V;
9
- get value(): V;
10
- }
11
- export declare class ReactiveSignal<V> extends ReadableSignal<V> {
12
- on: import("@e280/stz").Sub<[V]>;
13
- dispose(): void;
14
- }
15
- export declare class SignalCore<V> extends ReactiveSignal<V> {
16
- _options: SignalOptions;
17
- kind: "signal";
18
- _lock: boolean;
19
- constructor(sneak: V, _options: SignalOptions);
20
- set(v: V): Promise<V>;
21
- get value(): V;
22
- set value(v: V);
23
- publish(v?: V): Promise<V>;
24
- }
25
- export declare class LazyCore<V> extends ReadableSignal<V> {
26
- _formula: () => V;
27
- _options: SignalOptions;
28
- kind: "lazy";
29
- _dirty: boolean;
30
- _effect: (() => void) | undefined;
31
- constructor(_formula: () => V, _options: SignalOptions);
32
- get(): V;
33
- get value(): V;
34
- dispose(): void;
35
- }
36
- export declare class DerivedCore<V> extends ReactiveSignal<V> {
37
- _effect: () => void;
38
- static make<V>(that: DerivedCore<V>, formula: () => V, options: SignalOptions): DerivedCore<V>;
39
- kind: "derived";
40
- constructor(initialValue: V, _effect: () => void);
41
- get value(): V;
42
- dispose(): void;
43
- }