@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.
Files changed (162) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +56 -47
  3. package/package.json +3 -3
  4. package/s/index.ts +0 -1
  5. package/s/prism/prism.test.ts +2 -1
  6. package/s/prism/prism.ts +1 -1
  7. package/s/signals/derived/class.ts +34 -0
  8. package/s/signals/derived/fn.ts +36 -0
  9. package/s/signals/{tests/derived.test.ts → derived/test.ts} +13 -14
  10. package/s/signals/effect/effect.ts +7 -0
  11. package/s/signals/effect/test.ts +172 -0
  12. package/s/signals/effect/watch.ts +32 -0
  13. package/s/signals/index.ts +11 -7
  14. package/s/signals/lazy/class.ts +74 -0
  15. package/s/signals/lazy/fn.ts +22 -0
  16. package/s/signals/{tests/lazy.test.ts → lazy/test.ts} +23 -12
  17. package/s/signals/signal/class.ts +77 -0
  18. package/s/signals/signal/fn.ts +31 -0
  19. package/s/signals/{tests/signal.test.ts → signal/test.ts} +56 -59
  20. package/s/signals/signals.test.ts +8 -8
  21. package/s/signals/types.ts +4 -23
  22. package/s/signals/utils/default-compare.ts +1 -1
  23. package/s/signals/utils/symbols.ts +9 -0
  24. package/s/tests.test.ts +1 -57
  25. package/s/tracker/bindings/react.ts +42 -0
  26. package/s/tracker/index.ts +1 -0
  27. package/x/index.d.ts +0 -1
  28. package/x/index.js +0 -1
  29. package/x/index.js.map +1 -1
  30. package/x/prism/prism.js.map +1 -1
  31. package/x/prism/prism.test.js +1 -1
  32. package/x/prism/prism.test.js.map +1 -1
  33. package/x/signals/derived/class.d.ts +14 -0
  34. package/x/signals/derived/class.js +23 -0
  35. package/x/signals/derived/class.js.map +1 -0
  36. package/x/signals/derived/fn.d.ts +3 -0
  37. package/x/signals/derived/fn.js +28 -0
  38. package/x/signals/derived/fn.js.map +1 -0
  39. package/x/signals/{tests/derived.test.d.ts → derived/test.d.ts} +1 -3
  40. package/x/signals/{tests/derived.test.js → derived/test.js} +14 -15
  41. package/x/signals/derived/test.js.map +1 -0
  42. package/x/signals/effect/effect.d.ts +1 -0
  43. package/x/signals/effect/effect.js +5 -0
  44. package/x/signals/effect/effect.js.map +1 -0
  45. package/x/signals/{tests/effect.test.d.ts → effect/test.d.ts} +7 -0
  46. package/x/signals/effect/test.js +132 -0
  47. package/x/signals/effect/test.js.map +1 -0
  48. package/x/signals/effect/watch.d.ts +4 -0
  49. package/x/signals/effect/watch.js +25 -0
  50. package/x/signals/effect/watch.js.map +1 -0
  51. package/x/signals/index.d.ts +8 -7
  52. package/x/signals/index.js +8 -7
  53. package/x/signals/index.js.map +1 -1
  54. package/x/signals/lazy/class.d.ts +19 -0
  55. package/x/signals/lazy/class.js +59 -0
  56. package/x/signals/lazy/class.js.map +1 -0
  57. package/x/signals/lazy/fn.d.ts +3 -0
  58. package/x/signals/lazy/fn.js +17 -0
  59. package/x/signals/lazy/fn.js.map +1 -0
  60. package/x/signals/{tests/lazy.test.d.ts → lazy/test.d.ts} +2 -3
  61. package/x/signals/{tests/lazy.test.js → lazy/test.js} +23 -13
  62. package/x/signals/lazy/test.js.map +1 -0
  63. package/x/signals/signal/class.d.ts +20 -0
  64. package/x/signals/signal/class.js +57 -0
  65. package/x/signals/signal/class.js.map +1 -0
  66. package/x/signals/signal/fn.d.ts +7 -0
  67. package/x/signals/signal/fn.js +23 -0
  68. package/x/signals/signal/fn.js.map +1 -0
  69. package/x/signals/{tests/signal.test.d.ts → signal/test.d.ts} +8 -7
  70. package/x/signals/{tests/signal.test.js → signal/test.js} +50 -46
  71. package/x/signals/signal/test.js.map +1 -0
  72. package/x/signals/signals.test.d.ts +25 -20
  73. package/x/signals/signals.test.js +8 -8
  74. package/x/signals/signals.test.js.map +1 -1
  75. package/x/signals/types.d.ts +4 -19
  76. package/x/signals/utils/default-compare.js +1 -1
  77. package/x/signals/utils/default-compare.js.map +1 -1
  78. package/x/signals/utils/symbols.d.ts +7 -0
  79. package/x/signals/utils/symbols.js +8 -0
  80. package/x/signals/utils/symbols.js.map +1 -0
  81. package/x/tests.test.js +1 -45
  82. package/x/tests.test.js.map +1 -1
  83. package/x/tracker/bindings/react.d.ts +10 -0
  84. package/x/tracker/bindings/react.js +29 -0
  85. package/x/tracker/bindings/react.js.map +1 -0
  86. package/x/tracker/index.d.ts +1 -0
  87. package/x/tracker/index.js +1 -0
  88. package/x/tracker/index.js.map +1 -1
  89. package/s/signals/core/derived.ts +0 -65
  90. package/s/signals/core/effect.ts +0 -31
  91. package/s/signals/core/lazy.ts +0 -78
  92. package/s/signals/core/parts/reactive.ts +0 -12
  93. package/s/signals/core/parts/readable.ts +0 -16
  94. package/s/signals/core/signal.ts +0 -101
  95. package/s/signals/porcelain.ts +0 -30
  96. package/s/signals/tests/effect.test.ts +0 -89
  97. package/s/tree/index.ts +0 -7
  98. package/s/tree/parts/branch.ts +0 -55
  99. package/s/tree/parts/chronobranch.ts +0 -86
  100. package/s/tree/parts/persistence.ts +0 -31
  101. package/s/tree/parts/trunk.ts +0 -70
  102. package/s/tree/parts/types.ts +0 -70
  103. package/s/tree/parts/utils/immute.ts +0 -43
  104. package/s/tree/parts/utils/process-options.ts +0 -7
  105. package/s/tree/parts/utils/setup.ts +0 -40
  106. package/s/tree/tree.test.ts +0 -366
  107. package/x/signals/core/derived.d.ts +0 -10
  108. package/x/signals/core/derived.js +0 -52
  109. package/x/signals/core/derived.js.map +0 -1
  110. package/x/signals/core/effect.d.ts +0 -5
  111. package/x/signals/core/effect.js +0 -17
  112. package/x/signals/core/effect.js.map +0 -1
  113. package/x/signals/core/lazy.d.ts +0 -11
  114. package/x/signals/core/lazy.js +0 -60
  115. package/x/signals/core/lazy.js.map +0 -1
  116. package/x/signals/core/parts/reactive.d.ts +0 -5
  117. package/x/signals/core/parts/reactive.js +0 -9
  118. package/x/signals/core/parts/reactive.js.map +0 -1
  119. package/x/signals/core/parts/readable.d.ts +0 -6
  120. package/x/signals/core/parts/readable.js +0 -15
  121. package/x/signals/core/parts/readable.js.map +0 -1
  122. package/x/signals/core/signal.d.ts +0 -13
  123. package/x/signals/core/signal.js +0 -77
  124. package/x/signals/core/signal.js.map +0 -1
  125. package/x/signals/porcelain.d.ts +0 -8
  126. package/x/signals/porcelain.js +0 -15
  127. package/x/signals/porcelain.js.map +0 -1
  128. package/x/signals/tests/derived.test.js.map +0 -1
  129. package/x/signals/tests/effect.test.js +0 -72
  130. package/x/signals/tests/effect.test.js.map +0 -1
  131. package/x/signals/tests/lazy.test.js.map +0 -1
  132. package/x/signals/tests/signal.test.js.map +0 -1
  133. package/x/tree/index.d.ts +0 -5
  134. package/x/tree/index.js +0 -6
  135. package/x/tree/index.js.map +0 -1
  136. package/x/tree/parts/branch.d.ts +0 -14
  137. package/x/tree/parts/branch.js +0 -42
  138. package/x/tree/parts/branch.js.map +0 -1
  139. package/x/tree/parts/chronobranch.d.ts +0 -25
  140. package/x/tree/parts/chronobranch.js +0 -75
  141. package/x/tree/parts/chronobranch.js.map +0 -1
  142. package/x/tree/parts/persistence.d.ts +0 -2
  143. package/x/tree/parts/persistence.js +0 -23
  144. package/x/tree/parts/persistence.js.map +0 -1
  145. package/x/tree/parts/trunk.d.ts +0 -19
  146. package/x/tree/parts/trunk.js +0 -57
  147. package/x/tree/parts/trunk.js.map +0 -1
  148. package/x/tree/parts/types.d.ts +0 -28
  149. package/x/tree/parts/types.js +0 -2
  150. package/x/tree/parts/types.js.map +0 -1
  151. package/x/tree/parts/utils/immute.d.ts +0 -11
  152. package/x/tree/parts/utils/immute.js +0 -33
  153. package/x/tree/parts/utils/immute.js.map +0 -1
  154. package/x/tree/parts/utils/process-options.d.ts +0 -2
  155. package/x/tree/parts/utils/process-options.js +0 -4
  156. package/x/tree/parts/utils/process-options.js.map +0 -1
  157. package/x/tree/parts/utils/setup.d.ts +0 -8
  158. package/x/tree/parts/utils/setup.js +0 -24
  159. package/x/tree/parts/utils/setup.js.map +0 -1
  160. package/x/tree/tree.test.d.ts +0 -40
  161. package/x/tree/tree.test.js +0 -325
  162. package/x/tree/tree.test.js.map +0 -1
@@ -1,8 +0,0 @@
1
- import { Trunk } from "../trunk.js";
2
- import { SetupOptions, Trunkstate } from "../types.js";
3
- export declare function trunkSetup<S extends Trunkstate>(options: SetupOptions<S>): Promise<{
4
- trunk: Trunk<S>;
5
- load: () => Promise<void>;
6
- save: import("@e280/stz").DebounceReturn<() => Promise<void>>;
7
- dispose: () => void;
8
- }>;
@@ -1,24 +0,0 @@
1
- import { debounce } from "@e280/stz";
2
- import { Trunk } from "../trunk.js";
3
- import { localPersistence } from "../persistence.js";
4
- export async function trunkSetup(options) {
5
- const { version, initialState, saveDebounceTime = 500, persistence = localPersistence("strataTree"), } = options;
6
- const trunk = new Trunk(initialState);
7
- async function load() {
8
- const pickle = await persistence.store.get();
9
- if (pickle && pickle.version === version)
10
- await trunk.overwrite(pickle.state);
11
- }
12
- const save = debounce(saveDebounceTime, async () => persistence.store.set({
13
- version,
14
- state: trunk.state,
15
- }));
16
- // persistence: initial load from store
17
- await load();
18
- // persistence: save to store
19
- trunk.on(save);
20
- // cross-tab sync
21
- const dispose = persistence.onChange(load);
22
- return { trunk, load, save, dispose };
23
- }
24
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../../s/tree/parts/utils/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAElC,OAAO,EAAC,KAAK,EAAC,MAAM,aAAa,CAAA;AACjC,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAA;AAGlD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAuB,OAAwB;IAC9E,MAAM,EACL,OAAO,EACP,YAAY,EACZ,gBAAgB,GAAG,GAAG,EACtB,WAAW,GAAG,gBAAgB,CAAC,YAAY,CAAC,GAC5C,GAAG,OAAO,CAAA;IAEX,MAAM,KAAK,GAAG,IAAI,KAAK,CAAI,YAAY,CAAC,CAAA;IAExC,KAAK,UAAU,IAAI;QAClB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;QAC5C,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;YACvC,MAAM,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,gBAAgB,EAAE,KAAK,IAAG,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC;QACxE,OAAO;QACP,KAAK,EAAE,KAAK,CAAC,KAAY;KACzB,CAAC,CAAC,CAAA;IAEH,uCAAuC;IACvC,MAAM,IAAI,EAAE,CAAA;IAEZ,6BAA6B;IAC7B,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;IAEd,iBAAiB;IACjB,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAE1C,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAC,CAAA;AACpC,CAAC"}
@@ -1,40 +0,0 @@
1
- import { Science } from "@e280/science";
2
- declare const _default: {
3
- trunk: {
4
- "get state": Science.Test;
5
- "state is immutable": Science.Test;
6
- "run a proper mutation": Science.Test;
7
- "forbidden mutation nesting": Science.Test;
8
- "state after mutation is frozen": Science.Test;
9
- "effect reacts to trunk mutation": Science.Test;
10
- "trunk.on is debounced": Science.Test;
11
- "listeners are fired when array item is pushed": Science.Test;
12
- "sync coherence": Science.Test;
13
- };
14
- branch: {
15
- "get state": Science.Test;
16
- "mutation triggers effect": Science.Test;
17
- "sync coherence": Science.Test;
18
- "nullable selector": Science.Test;
19
- composition: Science.Test;
20
- "deep mutations": Science.Test;
21
- "branch.on ignores outside mutations": Science.Test;
22
- "effects ignore outside mutations": Science.Test;
23
- "forbid submutation in mutation": Science.Test;
24
- "forbid mutation in submutation": Science.Test;
25
- };
26
- chronobranch: {
27
- "get state": Science.Test;
28
- mutate: Science.Test;
29
- "undoable/redoable": Science.Test;
30
- undo: Science.Test;
31
- redo: Science.Test;
32
- "undo/redo well ordered": Science.Test;
33
- "undo nothing does nothing": Science.Test;
34
- "redo nothing does nothing": Science.Test;
35
- "undo 2x": Science.Test;
36
- "redo 2x": Science.Test;
37
- "substrata mutations are tracked": Science.Test;
38
- };
39
- };
40
- export default _default;
@@ -1,325 +0,0 @@
1
- import { nap } from "@e280/stz";
2
- import { Science, expect } from "@e280/science";
3
- import { Trunk } from "./parts/trunk.js";
4
- import { effect } from "../signals/core/effect.js";
5
- export default Science.suite({
6
- "trunk": Science.suite({
7
- "get state": Science.test(async () => {
8
- const trunk = new Trunk({ count: 0 });
9
- expect(trunk.state.count).is(0);
10
- }),
11
- "state is immutable": Science.test(async () => {
12
- const trunk = new Trunk({ count: 0 });
13
- expect(() => trunk.state.count++).throws();
14
- }),
15
- "run a proper mutation": Science.test(async () => {
16
- const trunk = new Trunk({ count: 0 });
17
- expect(trunk.state.count).is(0);
18
- await trunk.mutate(state => state.count++);
19
- expect(trunk.state.count).is(1);
20
- await trunk.mutate(state => state.count++);
21
- expect(trunk.state.count).is(2);
22
- }),
23
- "forbidden mutation nesting": Science.test(async () => {
24
- const trunk = new Trunk({ count: 0 });
25
- await expect(async () => {
26
- let promise;
27
- await trunk.mutate(() => {
28
- promise = trunk.mutate(() => { });
29
- });
30
- await promise;
31
- }).throwsAsync();
32
- }),
33
- "state after mutation is frozen": Science.test(async () => {
34
- const trunk = new Trunk({ x: 1 });
35
- await trunk.mutate(s => { s.x = 2; });
36
- expect(() => trunk.state.x = 3).throws();
37
- }),
38
- "effect reacts to trunk mutation": Science.test(async () => {
39
- const trunk = new Trunk({ count: 0 });
40
- await nap(10);
41
- let mutationCount = 0;
42
- effect(() => {
43
- void trunk.state.count;
44
- mutationCount++;
45
- });
46
- expect(mutationCount).is(1);
47
- await trunk.mutate(state => state.count++);
48
- expect(mutationCount).is(2);
49
- }),
50
- "trunk.on is debounced": Science.test.skip(async () => {
51
- const trunk = new Trunk({ count: 0 });
52
- let mutationCount = 0;
53
- trunk.on.sub(() => { mutationCount++; });
54
- await Promise.all([
55
- trunk.mutate(state => state.count++),
56
- trunk.mutate(state => state.count++),
57
- trunk.mutate(state => state.count++),
58
- ]);
59
- expect(mutationCount).is(1);
60
- }),
61
- "listeners are fired when array item is pushed": Science.test(async () => {
62
- const trunk = new Trunk({ items: ["hello", "world"] });
63
- let mutationCount = 0;
64
- trunk.on.sub(() => { mutationCount++; });
65
- await trunk.mutate(state => state.items.push("lol"));
66
- expect(mutationCount).is(1);
67
- expect(trunk.state.items.length).is(3);
68
- }),
69
- // // conceptually incompatible with sequential synchronous mutations
70
- // "prevent mutation loops": Science.test(async() => {
71
- // const trunk = new Trunk({count: 0})
72
- // let mutationCount = 0
73
- // trunk.on.sub(async() => {
74
- // mutationCount++
75
- // if (mutationCount > 100)
76
- // return
77
- // await trunk.mutate(s => s.count++)
78
- // })
79
- // await expect(async() => {
80
- // await trunk.mutate(state => state.count++)
81
- // }).throwsAsync()
82
- // expect(mutationCount).is(1)
83
- // }),
84
- "sync coherence": Science.test(async () => {
85
- const trunk = new Trunk({ count: 0 });
86
- const p1 = trunk.mutate(s => s.count++);
87
- expect(trunk.state.count).is(1);
88
- const p2 = trunk.mutate(s => s.count++);
89
- expect(trunk.state.count).is(2);
90
- await p1;
91
- await p2;
92
- }),
93
- }),
94
- "branch": Science.suite({
95
- "get state": Science.test(async () => {
96
- const trunk = new Trunk({ count: 0, sub: { rofls: 0 } });
97
- const branch = trunk.branch(s => s.sub);
98
- expect(branch.state.rofls).is(0);
99
- }),
100
- "mutation triggers effect": Science.test(async () => {
101
- const trunk = new Trunk({ a: { x: 0 } });
102
- const branch = trunk.branch(s => s.a);
103
- expect(branch.state.x).is(0);
104
- let triggered = 0;
105
- effect(() => {
106
- void branch.state.x;
107
- triggered++;
108
- });
109
- expect(triggered).is(1);
110
- await branch.mutate(s => s.x++);
111
- expect(triggered).is(2);
112
- }),
113
- "sync coherence": Science.test(async () => {
114
- const trunk = new Trunk({ count: 0, sub: { rofls: 0 } });
115
- const branch = trunk.branch(s => s.sub);
116
- expect(branch.state.rofls).is(0);
117
- const p = branch.mutate(s => s.rofls++);
118
- expect(branch.state.rofls).is(1);
119
- await p;
120
- }),
121
- "nullable selector": Science.test(async () => {
122
- const trunk = new Trunk({
123
- a: { b: 0 },
124
- });
125
- const a = trunk.branch(s => s.a);
126
- expect(trunk.state.a?.b).is(0);
127
- expect(a.state?.b).is(0);
128
- await a.mutate(a => { a.b = 1; });
129
- expect(trunk.state.a?.b).is(1);
130
- expect(a.state?.b).is(1);
131
- await trunk.mutate(s => s.a = null);
132
- expect(trunk.state.a?.b).is(undefined);
133
- expect(a.state?.b).is(undefined);
134
- }),
135
- "composition": Science.test(async () => {
136
- const trunk = new Trunk({ a: { b: { c: 0 } } });
137
- const a = trunk.branch(s => s.a);
138
- const b = a.branch(s => s.b);
139
- expect(trunk.state.a.b.c).is(0);
140
- expect(b.state.c).is(0);
141
- }),
142
- "deep mutations": Science.test(async () => {
143
- const trunk = new Trunk({ a: { b: { c: 0 } } });
144
- const a = trunk.branch(s => s.a);
145
- const b = a.branch(s => s.b);
146
- await b.mutate(b => { b.c = 101; });
147
- expect(trunk.state.a.b.c).is(101);
148
- expect(a.state.b.c).is(101);
149
- expect(b.state.c).is(101);
150
- await a.mutate(a => { a.b = { c: 102 }; });
151
- expect(trunk.state.a.b.c).is(102);
152
- expect(a.state.b.c).is(102);
153
- expect(b.state.c).is(102);
154
- await trunk.mutate(s => { s.a = { b: { c: 103 } }; });
155
- expect(trunk.state.a.b.c).is(103);
156
- expect(a.state.b.c).is(103);
157
- expect(b.state.c).is(103);
158
- }),
159
- "branch.on ignores outside mutations": Science.test(async () => {
160
- const trunk = new Trunk({ a: { x: 0 }, b: { x: 0 } });
161
- const a = trunk.branch(s => s.a);
162
- const b = trunk.branch(s => s.b);
163
- let counted = 0;
164
- b.on(() => { counted++; });
165
- expect(counted).is(0);
166
- await a.mutate(a => a.x = 1);
167
- expect(counted).is(0);
168
- }),
169
- "effects ignore outside mutations": Science.test(async () => {
170
- const trunk = new Trunk({ a: { x: 0 }, b: { x: 0 } });
171
- const a = trunk.branch(s => s.a);
172
- const b = trunk.branch(s => s.b);
173
- let counted = 0;
174
- effect(() => {
175
- void b.state.x;
176
- counted++;
177
- });
178
- expect(counted).is(1);
179
- await a.mutate(a => a.x++);
180
- expect(counted).is(1);
181
- }),
182
- "forbid submutation in mutation": Science.test(async () => {
183
- const trunk = new Trunk({ a: { b: 0 } });
184
- const a = trunk.branch(s => s.a);
185
- await expect(async () => {
186
- let promise;
187
- await trunk.mutate(() => {
188
- promise = a.mutate(() => { });
189
- });
190
- await promise;
191
- }).throwsAsync();
192
- }),
193
- "forbid mutation in submutation": Science.test(async () => {
194
- const trunk = new Trunk({ a: { b: 0 } });
195
- const a = trunk.branch(s => s.a);
196
- await expect(async () => {
197
- let promise;
198
- await a.mutate(() => {
199
- promise = trunk.mutate(() => { });
200
- });
201
- await promise;
202
- }).throwsAsync();
203
- }),
204
- }),
205
- "chronobranch": (() => {
206
- const setup = () => {
207
- const trunk = new Trunk({
208
- chron: Trunk.chronicle({ count: 0 }),
209
- });
210
- const chron = trunk.chronobranch(64, s => s.chron);
211
- return { trunk, chron };
212
- };
213
- return Science.suite({
214
- "get state": Science.test(async () => {
215
- const { chron } = setup();
216
- expect(chron.state.count).is(0);
217
- }),
218
- "mutate": Science.test(async () => {
219
- const { chron } = setup();
220
- expect(chron.state.count).is(0);
221
- await chron.mutate(s => s.count++);
222
- expect(chron.state.count).is(1);
223
- await chron.mutate(s => s.count++);
224
- expect(chron.state.count).is(2);
225
- }),
226
- "undoable/redoable": Science.test(async () => {
227
- const { chron } = setup();
228
- expect(chron.undoable).is(0);
229
- expect(chron.redoable).is(0);
230
- expect(chron.state.count).is(0);
231
- await chron.mutate(s => s.count++);
232
- expect(chron.undoable).is(1);
233
- await chron.mutate(s => s.count++);
234
- expect(chron.undoable).is(2);
235
- await chron.undo();
236
- expect(chron.undoable).is(1);
237
- expect(chron.redoable).is(1);
238
- await chron.undo();
239
- expect(chron.undoable).is(0);
240
- expect(chron.redoable).is(2);
241
- await chron.redo();
242
- expect(chron.undoable).is(1);
243
- expect(chron.redoable).is(1);
244
- }),
245
- "undo": Science.test(async () => {
246
- const { chron } = setup();
247
- await chron.mutate(s => s.count++);
248
- await chron.undo();
249
- expect(chron.state.count).is(0);
250
- }),
251
- "redo": Science.test(async () => {
252
- const { chron } = setup();
253
- await chron.mutate(s => s.count++);
254
- await chron.undo();
255
- expect(chron.state.count).is(0);
256
- await chron.redo();
257
- expect(chron.state.count).is(1);
258
- }),
259
- "undo/redo well ordered": Science.test(async () => {
260
- const { chron } = setup();
261
- await chron.mutate(s => s.count++);
262
- await chron.mutate(s => s.count++);
263
- await chron.mutate(s => s.count++);
264
- expect(chron.state.count).is(3);
265
- await chron.undo();
266
- expect(chron.state.count).is(2);
267
- await chron.undo();
268
- expect(chron.state.count).is(1);
269
- await chron.redo();
270
- expect(chron.state.count).is(2);
271
- await chron.redo();
272
- expect(chron.state.count).is(3);
273
- await chron.undo();
274
- expect(chron.state.count).is(2);
275
- await chron.undo();
276
- expect(chron.state.count).is(1);
277
- await chron.undo();
278
- expect(chron.state.count).is(0);
279
- }),
280
- "undo nothing does nothing": Science.test(async () => {
281
- const { chron } = setup();
282
- await chron.undo();
283
- expect(chron.state.count).is(0);
284
- }),
285
- "redo nothing does nothing": Science.test(async () => {
286
- const { chron } = setup();
287
- await chron.redo();
288
- expect(chron.state.count).is(0);
289
- }),
290
- "undo 2x": Science.test(async () => {
291
- const { chron } = setup();
292
- await chron.mutate(s => s.count++);
293
- await chron.mutate(s => s.count++);
294
- expect(chron.state.count).is(2);
295
- await chron.undo(2);
296
- expect(chron.state.count).is(0);
297
- }),
298
- "redo 2x": Science.test(async () => {
299
- const { chron } = setup();
300
- await chron.mutate(s => s.count++);
301
- await chron.mutate(s => s.count++);
302
- expect(chron.state.count).is(2);
303
- await chron.undo(2);
304
- expect(chron.state.count).is(0);
305
- await chron.redo(2);
306
- expect(chron.state.count).is(2);
307
- }),
308
- "substrata mutations are tracked": Science.test(async () => {
309
- const strata = new Trunk({
310
- chron: Trunk.chronicle({
311
- group: { count: 0 },
312
- }),
313
- });
314
- const chron = strata.chronobranch(64, s => s.chron);
315
- const group = chron.branch(s => s.group);
316
- expect(group.state.count).is(0);
317
- await group.mutate(g => g.count = 101);
318
- expect(group.state.count).is(101);
319
- await chron.undo();
320
- expect(group.state.count).is(0);
321
- }),
322
- });
323
- })(),
324
- });
325
- //# sourceMappingURL=tree.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tree.test.js","sourceRoot":"","sources":["../../s/tree/tree.test.ts"],"names":[],"mappings":"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"}