@e280/strata 0.2.0-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 (44) hide show
  1. package/README.md +21 -1
  2. package/package.json +1 -1
  3. package/s/signals/derive.ts +0 -4
  4. package/s/signals/fns.ts +1 -0
  5. package/s/signals/signal.ts +8 -3
  6. package/s/signals/signals.test.ts +11 -264
  7. package/s/signals/tests/derive.test.ts +89 -0
  8. package/s/signals/tests/effect.test.ts +89 -0
  9. package/s/signals/tests/lazy.test.ts +49 -0
  10. package/s/signals/tests/signal-fn.test.ts +28 -0
  11. package/s/signals/tests/signal.test.ts +63 -0
  12. package/s/signals/types.ts +8 -0
  13. package/s/signals/utils/hipster.ts +40 -0
  14. package/x/signals/derive.d.ts +0 -1
  15. package/x/signals/derive.js +0 -3
  16. package/x/signals/derive.js.map +1 -1
  17. package/x/signals/fns.d.ts +1 -0
  18. package/x/signals/fns.js +1 -0
  19. package/x/signals/fns.js.map +1 -1
  20. package/x/signals/signal.d.ts +2 -1
  21. package/x/signals/signal.js +7 -3
  22. package/x/signals/signal.js.map +1 -1
  23. package/x/signals/signals.test.d.ts +33 -19
  24. package/x/signals/signals.test.js +11 -217
  25. package/x/signals/signals.test.js.map +1 -1
  26. package/x/signals/tests/derive.test.d.ts +8 -0
  27. package/x/signals/tests/derive.test.js +73 -0
  28. package/x/signals/tests/derive.test.js.map +1 -0
  29. package/x/signals/tests/effect.test.d.ts +10 -0
  30. package/x/signals/tests/effect.test.js +72 -0
  31. package/x/signals/tests/effect.test.js.map +1 -0
  32. package/x/signals/tests/lazy.test.d.ts +7 -0
  33. package/x/signals/tests/lazy.test.js +39 -0
  34. package/x/signals/tests/lazy.test.js.map +1 -0
  35. package/x/signals/tests/signal-fn.test.d.ts +6 -0
  36. package/x/signals/tests/signal-fn.test.js +22 -0
  37. package/x/signals/tests/signal-fn.test.js.map +1 -0
  38. package/x/signals/tests/signal.test.d.ts +12 -0
  39. package/x/signals/tests/signal.test.js +54 -0
  40. package/x/signals/tests/signal.test.js.map +1 -0
  41. package/x/signals/types.d.ts +6 -0
  42. package/x/signals/utils/hipster.d.ts +3 -0
  43. package/x/signals/utils/hipster.js +28 -0
  44. package/x/signals/utils/hipster.js.map +1 -0
@@ -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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"}
@@ -5,3 +5,9 @@ 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,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"}