@e280/strata 0.0.2 → 0.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.
Files changed (63) hide show
  1. package/README.md +7 -13
  2. package/package.json +3 -3
  3. package/s/signals/derive.ts +37 -0
  4. package/s/signals/effect.ts +10 -2
  5. package/s/signals/fns.ts +30 -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 +43 -37
  11. package/s/signals/signals.test.ts +6 -22
  12. package/s/signals/types.ts +3 -3
  13. package/s/signals/utils/default-compare.ts +5 -0
  14. package/s/tests.test.ts +2 -2
  15. package/s/tree/parts/branch.ts +4 -4
  16. package/s/tree/parts/trunk.ts +7 -5
  17. package/x/signals/derive.d.ts +8 -0
  18. package/x/signals/derive.js +31 -0
  19. package/x/signals/derive.js.map +1 -0
  20. package/x/signals/effect.js.map +1 -1
  21. package/x/signals/fns.d.ts +11 -0
  22. package/x/signals/fns.js +15 -0
  23. package/x/signals/fns.js.map +1 -0
  24. package/x/signals/index.d.ts +5 -2
  25. package/x/signals/index.js +5 -2
  26. package/x/signals/index.js.map +1 -1
  27. package/x/signals/lazy.d.ts +8 -0
  28. package/x/signals/lazy.js +37 -0
  29. package/x/signals/lazy.js.map +1 -0
  30. package/x/signals/parts/reactive.d.ts +5 -0
  31. package/x/signals/parts/reactive.js +9 -0
  32. package/x/signals/parts/reactive.js.map +1 -0
  33. package/x/signals/parts/readable.d.ts +6 -0
  34. package/x/signals/parts/readable.js +15 -0
  35. package/x/signals/parts/readable.js.map +1 -0
  36. package/x/signals/signal.d.ts +6 -17
  37. package/x/signals/signal.js +39 -15
  38. package/x/signals/signal.js.map +1 -1
  39. package/x/signals/signals.test.d.ts +1 -2
  40. package/x/signals/signals.test.js +6 -16
  41. package/x/signals/signals.test.js.map +1 -1
  42. package/x/signals/types.d.ts +3 -3
  43. package/x/signals/utils/default-compare.d.ts +1 -0
  44. package/x/signals/utils/default-compare.js +4 -0
  45. package/x/signals/utils/default-compare.js.map +1 -0
  46. package/x/tests.test.js +2 -2
  47. package/x/tests.test.js.map +1 -1
  48. package/x/tree/parts/branch.js +2 -2
  49. package/x/tree/parts/branch.js.map +1 -1
  50. package/x/tree/parts/trunk.js +4 -3
  51. package/x/tree/parts/trunk.js.map +1 -1
  52. package/s/signals/parts/derive.ts +0 -29
  53. package/s/signals/parts/lazy.ts +0 -27
  54. package/s/signals/parts/units.ts +0 -152
  55. package/x/signals/parts/derive.d.ts +0 -12
  56. package/x/signals/parts/derive.js +0 -12
  57. package/x/signals/parts/derive.js.map +0 -1
  58. package/x/signals/parts/lazy.d.ts +0 -10
  59. package/x/signals/parts/lazy.js +0 -12
  60. package/x/signals/parts/lazy.js.map +0 -1
  61. package/x/signals/parts/units.d.ts +0 -43
  62. package/x/signals/parts/units.js +0 -133
  63. package/x/signals/parts/units.js.map +0 -1
@@ -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
- }
@@ -1,133 +0,0 @@
1
- import { sub } from "@e280/stz";
2
- import { collectorEffect } from "../effect.js";
3
- import { tracker } from "../../tracker/tracker.js";
4
- const defaultSignalOptions = {
5
- compare: (a, b) => a === b
6
- };
7
- export function processSignalOptions(options = {}) {
8
- return { ...defaultSignalOptions, ...options };
9
- }
10
- export class ReadableSignal {
11
- sneak;
12
- constructor(sneak) {
13
- this.sneak = sneak;
14
- }
15
- get() {
16
- tracker.notifyRead(this);
17
- return this.sneak;
18
- }
19
- get value() {
20
- return this.get();
21
- }
22
- }
23
- export class ReactiveSignal extends ReadableSignal {
24
- on = sub();
25
- dispose() {
26
- this.on.clear();
27
- }
28
- }
29
- export class SignalCore extends ReactiveSignal {
30
- _options;
31
- kind = "signal";
32
- _lock = false;
33
- constructor(sneak, _options) {
34
- super(sneak);
35
- this._options = _options;
36
- }
37
- async set(v) {
38
- const isChanged = !this._options.compare(this.sneak, v);
39
- if (isChanged)
40
- await this.publish(v);
41
- return v;
42
- }
43
- get value() {
44
- return this.get();
45
- }
46
- set value(v) {
47
- this.set(v);
48
- }
49
- async publish(v = this.get()) {
50
- if (this._lock)
51
- throw new Error("forbid circularity");
52
- let promise = Promise.resolve();
53
- try {
54
- this._lock = true;
55
- this.sneak = v;
56
- promise = Promise.all([
57
- tracker.notifyWrite(this),
58
- this.on.pub(v),
59
- ]);
60
- }
61
- finally {
62
- this._lock = false;
63
- }
64
- await promise;
65
- return v;
66
- }
67
- }
68
- export class LazyCore extends ReadableSignal {
69
- _formula;
70
- _options;
71
- kind = "lazy";
72
- _dirty = false;
73
- _effect;
74
- constructor(_formula, _options) {
75
- super(undefined);
76
- this._formula = _formula;
77
- this._options = _options;
78
- }
79
- get() {
80
- if (!this._effect) {
81
- const { result, dispose } = collectorEffect(this._formula, () => this._dirty = true);
82
- this._effect = dispose;
83
- this.sneak = result;
84
- }
85
- if (this._dirty) {
86
- this._dirty = false;
87
- const v = this._formula();
88
- const isChanged = !this._options.compare(this.sneak, v);
89
- if (isChanged) {
90
- this.sneak = v;
91
- tracker.notifyWrite(this);
92
- }
93
- }
94
- return super.get();
95
- }
96
- get value() {
97
- return this.get();
98
- }
99
- dispose() {
100
- if (this._effect)
101
- this._effect();
102
- }
103
- }
104
- export class DerivedCore extends ReactiveSignal {
105
- _effect;
106
- static make(that, formula, options) {
107
- const { result, dispose } = collectorEffect(formula, async () => {
108
- const value = formula();
109
- const isChanged = !options.compare(that.sneak, value);
110
- if (isChanged) {
111
- that.sneak = value;
112
- await Promise.all([
113
- tracker.notifyWrite(that),
114
- that.on.pub(value),
115
- ]);
116
- }
117
- });
118
- return new this(result, dispose);
119
- }
120
- kind = "derived";
121
- constructor(initialValue, _effect) {
122
- super(initialValue);
123
- this._effect = _effect;
124
- }
125
- get value() {
126
- return this.get();
127
- }
128
- dispose() {
129
- super.dispose();
130
- this._effect();
131
- }
132
- }
133
- //# sourceMappingURL=units.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"units.js","sourceRoot":"","sources":["../../../s/signals/parts/units.ts"],"names":[],"mappings":"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"}