@e280/strata 0.2.1 → 0.2.2

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/README.md CHANGED
@@ -14,14 +14,16 @@
14
14
  🦝 powers reactivity in our view library [@e280/sly](https://github.com/e280/sly)
15
15
  🧑‍💻 a project by https://e280.org/
16
16
 
17
- 🚦 **signals** — ephemeral view-level state
18
- 🌳 **tree** — persistent app-level state
19
- 🪄 **tracker** — reactivity integration hub
17
+ 🚦 [**signals**](#signals) — ephemeral view-level state
18
+ 🌳 [**tree**](#tree) — persistent app-level state
19
+ 🪄 [**tracker**](#tracker) — reactivity integration hub
20
20
 
21
21
 
22
22
 
23
23
  <br/><br/>
24
24
 
25
+ <a id="signals"></a>
26
+
25
27
  ## 🚦 strata signals
26
28
  > *ephemeral view-level state*
27
29
 
@@ -150,7 +152,9 @@ import {signal, effect} from "@e280/strata"
150
152
 
151
153
  <br/><br/>
152
154
 
153
- ## 🌳 strata trees
155
+ <a id="tree"></a>
156
+
157
+ ## 🌳 strata tree
154
158
  > *persistent app-level state*
155
159
 
156
160
  ```ts
@@ -287,6 +291,8 @@ import {Trunk} from "@e280/strata"
287
291
 
288
292
  <br/><br/>
289
293
 
294
+ <a id="tracker"></a>
295
+
290
296
  ## 🪄 strata tracker
291
297
  > *reactivity integration hub*
292
298
 
@@ -318,8 +324,8 @@ note, the *items* that the tracker tracks can be any object, or symbol.. the tra
318
324
  ```
319
325
  - it's a good idea to debounce your rerender fn
320
326
  ```ts
321
- import {debounce} from "@e280/stz"
322
- const myDebouncedRerenderFn = debounce(0, myRerenderFn)
327
+ import {microbounce} from "@e280/stz"
328
+ const myDebouncedRerenderFn = microbounce(myRerenderFn)
323
329
  ```
324
330
  - `tracker.subscribe` to respond to changes
325
331
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@e280/strata",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "description": "state management",
5
5
  "license": "MIT",
6
6
  "author": "Chase Moskal <chasemoskal@gmail.com>",
@@ -29,11 +29,11 @@
29
29
  "_tscw": "tsc -w"
30
30
  },
31
31
  "dependencies": {
32
- "@e280/stz": "^0.2.11"
32
+ "@e280/stz": "^0.2.14"
33
33
  },
34
34
  "devDependencies": {
35
- "@e280/science": "^0.1.2",
36
- "@types/node": "^24.7.1",
35
+ "@e280/science": "^0.1.3",
36
+ "@types/node": "^24.9.1",
37
37
  "npm-run-all": "^4.1.5",
38
38
  "typescript": "^5.9.3"
39
39
  },
@@ -1,5 +1,5 @@
1
1
 
2
- import {debounce} from "@e280/stz"
2
+ import {microbounce} from "@e280/stz"
3
3
  import {tracker} from "../../tracker/tracker.js"
4
4
 
5
5
  export function effect(
@@ -16,7 +16,7 @@ export function collectorEffect<C = void>(
16
16
  ) {
17
17
 
18
18
  const {seen, result} = tracker.observe(collector)
19
- const fn = debounce(0, responder)
19
+ const fn = microbounce(responder)
20
20
 
21
21
  const disposers: (() => void)[] = []
22
22
  const dispose = () => disposers.forEach(d => d())
@@ -1,37 +1,38 @@
1
1
 
2
2
  import {deep} from "@e280/stz"
3
- import {derived} from "../../signals/porcelain.js"
4
- import {Derived} from "../../signals/core/derived.js"
5
- import {Branchstate, Immutable, Mutator, Options, Selector, Tree} from "./types.js"
3
+ import {Branchstate, Immutable, Mutator, TreeOptions, Selector, Tree} from "./types.js"
6
4
 
7
5
  export class Branch<S extends Branchstate, ParentState extends Branchstate = any> implements Tree<S> {
8
- #immutable: Derived<Immutable<S>>
6
+ #previous: Immutable<S>
9
7
 
10
8
  constructor(
11
9
  private parent: Tree<ParentState>,
12
10
  private selector: Selector<S, ParentState>,
13
- private options: Options,
11
+ private options: TreeOptions,
14
12
  ) {
15
-
16
- this.#immutable = derived(() => {
17
- const state = selector(parent.state as any)
18
- return deep.freeze(options.clone(state)) as Immutable<S>
19
- }, {compare: deep.equal})
13
+ this.#previous = this.state
20
14
  }
21
15
 
22
16
  get state() {
23
- return this.#immutable.get()
17
+ return this.selector(this.parent.state as ParentState) as Immutable<S>
24
18
  }
25
19
 
26
- get on() {
27
- return this.#immutable.on
20
+ on = (fn: (state: Immutable<S>) => void) => {
21
+ return this.parent.on(parentState => {
22
+ const oldState = this.#previous
23
+ const newState = this.selector(parentState as ParentState) as Immutable<S>
24
+ if (!deep.equal(newState, oldState)) {
25
+ this.#previous = newState
26
+ fn(newState)
27
+ }
28
+ })
28
29
  }
29
30
 
30
31
  async mutate(mutator: Mutator<S>) {
31
32
  await this.parent.mutate(parentState =>
32
33
  mutator(this.selector(parentState))
33
34
  )
34
- return this.#immutable.get()
35
+ return this.state
35
36
  }
36
37
 
37
38
  branch<Sub extends Branchstate>(selector: Selector<Sub, S>): Branch<Sub, S> {
@@ -1,6 +1,6 @@
1
1
 
2
2
  import {Branch} from "./branch.js"
3
- import {Branchstate, Chronicle, Immutable, Mutator, Options, Selector, Tree} from "./types.js"
3
+ import {Branchstate, Chronicle, Immutable, Mutator, TreeOptions, Selector, Tree} from "./types.js"
4
4
 
5
5
  export class Chronobranch<S extends Branchstate, ParentState extends Branchstate = any> implements Tree<S> {
6
6
  #branch: Branch<Chronicle<S>, ParentState>
@@ -9,7 +9,7 @@ export class Chronobranch<S extends Branchstate, ParentState extends Branchstate
9
9
  public limit: number,
10
10
  public parent: Tree<ParentState>,
11
11
  public selector: Selector<Chronicle<S>, ParentState>,
12
- public options: Options,
12
+ public options: TreeOptions,
13
13
  ) {
14
14
  this.#branch = parent.branch(selector)
15
15
  }
@@ -1,13 +1,11 @@
1
1
 
2
2
  import {deep} from "@e280/stz"
3
3
  import {Branch} from "./branch.js"
4
- import {signal} from "../../signals/porcelain.js"
4
+ import {Immute} from "./utils/immute.js"
5
5
  import {trunkSetup} from "./utils/setup.js"
6
- import {Derived} from "../../signals/core/derived.js"
7
- import {Signal} from "../../signals/core/signal.js"
8
6
  import {Chronobranch} from "./chronobranch.js"
9
7
  import {processOptions} from "./utils/process-options.js"
10
- import {Branchstate, Chronicle, Immutable, Mutator, Options, Selector, Tree, Trunkstate} from "./types.js"
8
+ import {Branchstate, Chronicle, Mutator, TreeOptions, Selector, Tree, Trunkstate} from "./types.js"
11
9
 
12
10
  export class Trunk<S extends Trunkstate> implements Tree<S> {
13
11
  static setup = trunkSetup
@@ -17,47 +15,43 @@ export class Trunk<S extends Trunkstate> implements Tree<S> {
17
15
  future: [],
18
16
  })
19
17
 
20
- options: Options
21
-
22
- #immutable: Derived<Immutable<S>>
23
- #mutable: Signal<S>
18
+ options: TreeOptions
24
19
  #mutationLock = 0
20
+ #immute: Immute<S>
25
21
 
26
- constructor(state: S, options: Partial<Options> = {}) {
22
+ constructor(state: S, options: Partial<TreeOptions> = {}) {
27
23
  this.options = processOptions(options)
28
- this.#mutable = signal(state)
29
- this.#immutable = signal.derived(() =>
30
- deep.freeze(this.options.clone(this.#mutable.get())) as Immutable<S>
31
- )
24
+ this.#immute = new Immute(state, this.options)
32
25
  }
33
26
 
34
27
  get state() {
35
- return this.#immutable.get()
28
+ return this.#immute.immutable
36
29
  }
37
30
 
38
31
  get on() {
39
- return this.#immutable.on
32
+ return this.#immute.on
40
33
  }
41
34
 
42
35
  async mutate(mutator: Mutator<S>) {
43
- const oldState = this.options.clone(this.#mutable.get())
36
+ const oldState = this.#immute.get()
44
37
  if (this.#mutationLock > 0)
45
38
  throw new Error("nested mutations are forbidden")
39
+ let promise = Promise.resolve()
46
40
  try {
47
41
  this.#mutationLock++
48
- const value = this.#mutable.get()
49
- mutator(value)
50
- const newState = value
42
+ const newState = this.options.clone(oldState)
43
+ mutator(newState)
51
44
  const isChanged = !deep.equal(newState, oldState)
52
45
  if (isChanged)
53
- await this.overwrite(newState)
46
+ promise = this.overwrite(newState)
54
47
  }
55
48
  finally { this.#mutationLock-- }
56
- return this.#immutable.get()
49
+ await promise
50
+ return this.state
57
51
  }
58
52
 
59
53
  async overwrite(state: S) {
60
- await this.#mutable.set(state, true)
54
+ await this.#immute.set(state)
61
55
  }
62
56
 
63
57
  branch<Sub extends Branchstate>(selector: Selector<Sub, S>): Branch<Sub, S> {
@@ -1,10 +1,13 @@
1
1
 
2
2
  import {Branch} from "./branch.js"
3
3
 
4
- export type Options = {
4
+ export type TreeOptions = {
5
5
  clone: <X>(x: X) => X
6
6
  }
7
7
 
8
+ /** @deprecated renamed to `TreeOptions` */
9
+ export type Options = TreeOptions
10
+
8
11
  export type Selector<Sub, S> = (state: S) => Sub
9
12
  export type Mutator<S> = (state: S) => void
10
13
 
@@ -0,0 +1,43 @@
1
+
2
+ import {deep, microbounce, sub} from "@e280/stz"
3
+ import {Immutable, TreeOptions} from "../types.js"
4
+ import {tracker} from "../../../tracker/tracker.js"
5
+
6
+ export class Immute<S> {
7
+ #mutable: S
8
+ #immutable: Immutable<S>
9
+
10
+ constructor(mutable: S, private options: TreeOptions) {
11
+ this.#mutable = mutable
12
+ this.#immutable = this.#petrify(mutable)
13
+ }
14
+
15
+ #petrify<X>(x: X) {
16
+ return deep.freeze(
17
+ this.options.clone(x)
18
+ ) as Immutable<X>
19
+ }
20
+
21
+ on = sub<[Immutable<S>]>()
22
+ #debouncePublish = microbounce(async() => this.on.publish(this.#immutable))
23
+
24
+ get() {
25
+ tracker.notifyRead(this)
26
+ return this.#mutable
27
+ }
28
+
29
+ async set(mutable: S) {
30
+ this.#mutable = mutable
31
+ this.#immutable = deep.freeze(this.options.clone(this.get())) as Immutable<S>
32
+ await Promise.all([
33
+ this.#debouncePublish(),
34
+ tracker.notifyWrite(this),
35
+ ])
36
+ }
37
+
38
+ get immutable() {
39
+ tracker.notifyRead(this)
40
+ return this.#immutable
41
+ }
42
+ }
43
+
@@ -1,7 +1,7 @@
1
1
 
2
- import {Options} from "../types.js"
2
+ import {TreeOptions} from "../types.js"
3
3
 
4
- export const processOptions = (options: Partial<Options>): Options => ({
4
+ export const processOptions = (options: Partial<TreeOptions>): TreeOptions => ({
5
5
  clone: options.clone ?? (<X>(x: X) => structuredClone(x)),
6
6
  })
7
7
 
@@ -60,9 +60,11 @@ export default Science.suite({
60
60
  const trunk = new Trunk({count: 0})
61
61
  let mutationCount = 0
62
62
  trunk.on.sub(() => {mutationCount++})
63
- const promise = trunk.mutate(state => state.count++)
64
- expect(mutationCount).is(0)
65
- await promise
63
+ await Promise.all([
64
+ trunk.mutate(state => state.count++),
65
+ trunk.mutate(state => state.count++),
66
+ trunk.mutate(state => state.count++),
67
+ ])
66
68
  expect(mutationCount).is(1)
67
69
  }),
68
70
 
@@ -75,19 +77,30 @@ export default Science.suite({
75
77
  expect(trunk.state.items.length).is(3)
76
78
  }),
77
79
 
78
- "prevent mutation loops": Science.test(async() => {
80
+ // // conceptually incompatible with sequential synchronous mutations
81
+ // "prevent mutation loops": Science.test(async() => {
82
+ // const trunk = new Trunk({count: 0})
83
+ // let mutationCount = 0
84
+ // trunk.on.sub(async() => {
85
+ // mutationCount++
86
+ // if (mutationCount > 100)
87
+ // return
88
+ // await trunk.mutate(s => s.count++)
89
+ // })
90
+ // await expect(async() => {
91
+ // await trunk.mutate(state => state.count++)
92
+ // }).throwsAsync()
93
+ // expect(mutationCount).is(1)
94
+ // }),
95
+
96
+ "sync coherence": Science.test(async() => {
79
97
  const trunk = new Trunk({count: 0})
80
- let mutationCount = 0
81
- trunk.on.sub(async() => {
82
- mutationCount++
83
- if (mutationCount > 100)
84
- return
85
- await trunk.mutate(s => s.count++)
86
- })
87
- await expect(async() => {
88
- await trunk.mutate(state => state.count++)
89
- }).throwsAsync()
90
- expect(mutationCount).is(1)
98
+ const p1 = trunk.mutate(s => s.count++)
99
+ expect(trunk.state.count).is(1)
100
+ const p2 = trunk.mutate(s => s.count++)
101
+ expect(trunk.state.count).is(2)
102
+ await p1
103
+ await p2
91
104
  }),
92
105
  }),
93
106
 
@@ -98,9 +111,18 @@ export default Science.suite({
98
111
  expect(branch.state.rofls).is(0)
99
112
  }),
100
113
 
114
+ "sync coherence": Science.test(async() => {
115
+ const trunk = new Trunk({count: 0, sub: {rofls: 0}})
116
+ const branch = trunk.branch(s => s.sub)
117
+ expect(branch.state.rofls).is(0)
118
+ const p = branch.mutate(s => s.rofls++)
119
+ expect(branch.state.rofls).is(1)
120
+ await p
121
+ }),
122
+
101
123
  "nullable selector": Science.test(async () => {
102
124
  const trunk = new Trunk({
103
- a: {b: 0} as (null | {b: number}),
125
+ a: {b: 0} as (null | {b: number}),
104
126
  })
105
127
  const a = trunk.branch(s => s.a)
106
128
  expect(trunk.state.a?.b).is(0)
@@ -144,7 +166,7 @@ export default Science.suite({
144
166
  const a = trunk.branch(s => s.a)
145
167
  const b = trunk.branch(s => s.b)
146
168
  let counted = 0
147
- b.on.sub(() => {counted++})
169
+ b.on(() => {counted++})
148
170
  expect(counted).is(0)
149
171
  await a.mutate(a => a.x = 1)
150
172
  expect(counted).is(0)
@@ -1,11 +1,11 @@
1
- import { debounce } from "@e280/stz";
1
+ import { microbounce } from "@e280/stz";
2
2
  import { tracker } from "../../tracker/tracker.js";
3
3
  export function effect(collector, responder = collector) {
4
4
  return collectorEffect(collector, responder).dispose;
5
5
  }
6
6
  export function collectorEffect(collector, responder = collector) {
7
7
  const { seen, result } = tracker.observe(collector);
8
- const fn = debounce(0, responder);
8
+ const fn = microbounce(responder);
9
9
  const disposers = [];
10
10
  const dispose = () => disposers.forEach(d => d());
11
11
  for (const saw of seen) {
@@ -1 +1 @@
1
- {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../s/signals/core/effect.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAClC,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAEhD,MAAM,UAAU,MAAM,CACpB,SAAqB,EACrB,YAAwB,SAAS;IAGlC,OAAO,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAkB,EAClB,YAAwB,SAAS;IAGlC,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACjD,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;IAEjC,MAAM,SAAS,GAAmB,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAEjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC1C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,EAAC,MAAM,EAAE,OAAO,EAAC,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../s/signals/core/effect.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,WAAW,EAAC,MAAM,WAAW,CAAA;AACrC,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAEhD,MAAM,UAAU,MAAM,CACpB,SAAqB,EACrB,YAAwB,SAAS;IAGlC,OAAO,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,SAAkB,EAClB,YAAwB,SAAS;IAGlC,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACjD,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAA;IAEjC,MAAM,SAAS,GAAmB,EAAE,CAAA;IACpC,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAA;IAEjD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;QAC1C,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,EAAC,MAAM,EAAE,OAAO,EAAC,CAAA;AACzB,CAAC"}
@@ -1,12 +1,12 @@
1
- import { Branchstate, Immutable, Mutator, Options, Selector, Tree } from "./types.js";
1
+ import { Branchstate, Immutable, Mutator, TreeOptions, Selector, Tree } from "./types.js";
2
2
  export declare class Branch<S extends Branchstate, ParentState extends Branchstate = any> implements Tree<S> {
3
3
  #private;
4
4
  private parent;
5
5
  private selector;
6
6
  private options;
7
- constructor(parent: Tree<ParentState>, selector: Selector<S, ParentState>, options: Options);
7
+ constructor(parent: Tree<ParentState>, selector: Selector<S, ParentState>, options: TreeOptions);
8
8
  get state(): Immutable<S>;
9
- get on(): import("@e280/stz").Sub<[Immutable<S>]>;
9
+ on: (fn: (state: Immutable<S>) => void) => () => void;
10
10
  mutate(mutator: Mutator<S>): Promise<Immutable<S>>;
11
11
  branch<Sub extends Branchstate>(selector: Selector<Sub, S>): Branch<Sub, S>;
12
12
  }
@@ -1,28 +1,31 @@
1
1
  import { deep } from "@e280/stz";
2
- import { derived } from "../../signals/porcelain.js";
3
2
  export class Branch {
4
3
  parent;
5
4
  selector;
6
5
  options;
7
- #immutable;
6
+ #previous;
8
7
  constructor(parent, selector, options) {
9
8
  this.parent = parent;
10
9
  this.selector = selector;
11
10
  this.options = options;
12
- this.#immutable = derived(() => {
13
- const state = selector(parent.state);
14
- return deep.freeze(options.clone(state));
15
- }, { compare: deep.equal });
11
+ this.#previous = this.state;
16
12
  }
17
13
  get state() {
18
- return this.#immutable.get();
19
- }
20
- get on() {
21
- return this.#immutable.on;
14
+ return this.selector(this.parent.state);
22
15
  }
16
+ on = (fn) => {
17
+ return this.parent.on(parentState => {
18
+ const oldState = this.#previous;
19
+ const newState = this.selector(parentState);
20
+ if (!deep.equal(newState, oldState)) {
21
+ this.#previous = newState;
22
+ fn(newState);
23
+ }
24
+ });
25
+ };
23
26
  async mutate(mutator) {
24
27
  await this.parent.mutate(parentState => mutator(this.selector(parentState)));
25
- return this.#immutable.get();
28
+ return this.state;
26
29
  }
27
30
  branch(selector) {
28
31
  return new Branch(this, selector, this.options);
@@ -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,OAAO,EAAC,MAAM,4BAA4B,CAAA;AAIlD,MAAM,OAAO,MAAM;IAIR;IACA;IACA;IALV,UAAU,CAAuB;IAEjC,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,OAAO,CAAC,GAAG,EAAE;YAC9B,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;AAG9B,MAAM,OAAO,MAAM;IAIR;IACA;IACA;IALV,SAAS,CAAc;IAEvB,YACU,MAAyB,EACzB,QAAkC,EAClC,OAAoB;QAFpB,WAAM,GAAN,MAAM,CAAmB;QACzB,aAAQ,GAAR,QAAQ,CAA0B;QAClC,YAAO,GAAP,OAAO,CAAa;QAE7B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAA;IAC5B,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAoB,CAAiB,CAAA;IACvE,CAAC;IAED,EAAE,GAAG,CAAC,EAAiC,EAAE,EAAE;QAC1C,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAA;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAA0B,CAAiB,CAAA;YAC1E,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAA;gBACzB,EAAE,CAAC,QAAQ,CAAC,CAAA;YACb,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAA;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,KAAK,CAAA;IAClB,CAAC;IAED,MAAM,CAA0B,QAA0B;QACzD,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAChD,CAAC;CACD"}
@@ -1,12 +1,12 @@
1
1
  import { Branch } from "./branch.js";
2
- import { Branchstate, Chronicle, Immutable, Mutator, Options, Selector, Tree } from "./types.js";
2
+ import { Branchstate, Chronicle, Immutable, Mutator, TreeOptions, Selector, Tree } from "./types.js";
3
3
  export declare class Chronobranch<S extends Branchstate, ParentState extends Branchstate = any> implements Tree<S> {
4
4
  #private;
5
5
  limit: number;
6
6
  parent: Tree<ParentState>;
7
7
  selector: Selector<Chronicle<S>, ParentState>;
8
- options: Options;
9
- constructor(limit: number, parent: Tree<ParentState>, selector: Selector<Chronicle<S>, ParentState>, options: Options);
8
+ options: TreeOptions;
9
+ constructor(limit: number, parent: Tree<ParentState>, selector: Selector<Chronicle<S>, ParentState>, options: TreeOptions);
10
10
  get state(): Immutable<S>;
11
11
  get undoable(): number;
12
12
  get redoable(): number;
@@ -1 +1 @@
1
- {"version":3,"file":"chronobranch.js","sourceRoot":"","sources":["../../../s/tree/parts/chronobranch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chronobranch.js","sourceRoot":"","sources":["../../../s/tree/parts/chronobranch.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import { Branch } from "./branch.js";
2
2
  import { trunkSetup } from "./utils/setup.js";
3
3
  import { Chronobranch } from "./chronobranch.js";
4
- import { Branchstate, Chronicle, Immutable, Mutator, Options, Selector, Tree, Trunkstate } from "./types.js";
4
+ import { Branchstate, Chronicle, Mutator, TreeOptions, Selector, Tree, Trunkstate } from "./types.js";
5
5
  export declare class Trunk<S extends Trunkstate> implements Tree<S> {
6
6
  #private;
7
7
  static setup: typeof trunkSetup;
8
8
  static chronicle: <S_1 extends Branchstate>(state: S_1) => Chronicle<S_1>;
9
- options: Options;
10
- constructor(state: S, options?: Partial<Options>);
11
- get state(): Immutable<S>;
12
- get on(): import("@e280/stz").Sub<[Immutable<S>]>;
13
- mutate(mutator: Mutator<S>): Promise<Immutable<S>>;
9
+ options: TreeOptions;
10
+ constructor(state: S, options?: Partial<TreeOptions>);
11
+ get state(): import("./types.js").Immutable<S>;
12
+ get on(): import("@e280/stz").Sub<[import("./types.js").Immutable<S>]>;
13
+ mutate(mutator: Mutator<S>): Promise<import("./types.js").Immutable<S>>;
14
14
  overwrite(state: S): Promise<void>;
15
15
  branch<Sub extends Branchstate>(selector: Selector<Sub, S>): Branch<Sub, S>;
16
16
  chronobranch<Sub extends Branchstate>(limit: number, selector: Selector<Chronicle<Sub>, S>): Chronobranch<Sub, S>;
@@ -1,6 +1,6 @@
1
1
  import { deep } from "@e280/stz";
2
2
  import { Branch } from "./branch.js";
3
- import { signal } from "../../signals/porcelain.js";
3
+ import { Immute } from "./utils/immute.js";
4
4
  import { trunkSetup } from "./utils/setup.js";
5
5
  import { Chronobranch } from "./chronobranch.js";
6
6
  import { processOptions } from "./utils/process-options.js";
@@ -12,40 +12,39 @@ export class Trunk {
12
12
  future: [],
13
13
  });
14
14
  options;
15
- #immutable;
16
- #mutable;
17
15
  #mutationLock = 0;
16
+ #immute;
18
17
  constructor(state, options = {}) {
19
18
  this.options = processOptions(options);
20
- this.#mutable = signal(state);
21
- this.#immutable = signal.derived(() => deep.freeze(this.options.clone(this.#mutable.get())));
19
+ this.#immute = new Immute(state, this.options);
22
20
  }
23
21
  get state() {
24
- return this.#immutable.get();
22
+ return this.#immute.immutable;
25
23
  }
26
24
  get on() {
27
- return this.#immutable.on;
25
+ return this.#immute.on;
28
26
  }
29
27
  async mutate(mutator) {
30
- const oldState = this.options.clone(this.#mutable.get());
28
+ const oldState = this.#immute.get();
31
29
  if (this.#mutationLock > 0)
32
30
  throw new Error("nested mutations are forbidden");
31
+ let promise = Promise.resolve();
33
32
  try {
34
33
  this.#mutationLock++;
35
- const value = this.#mutable.get();
36
- mutator(value);
37
- const newState = value;
34
+ const newState = this.options.clone(oldState);
35
+ mutator(newState);
38
36
  const isChanged = !deep.equal(newState, oldState);
39
37
  if (isChanged)
40
- await this.overwrite(newState);
38
+ promise = this.overwrite(newState);
41
39
  }
42
40
  finally {
43
41
  this.#mutationLock--;
44
42
  }
45
- return this.#immutable.get();
43
+ await promise;
44
+ return this.state;
46
45
  }
47
46
  async overwrite(state) {
48
- await this.#mutable.set(state, true);
47
+ await this.#immute.set(state);
49
48
  }
50
49
  branch(selector) {
51
50
  return new Branch(this, selector, this.options);
@@ -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,MAAM,EAAC,MAAM,4BAA4B,CAAA;AACjD,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,CAAuB;IACjC,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,OAAO,CAAC,GAAG,EAAE,CACrC,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,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACrC,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,mBAAmB,CAAA;AACxC,OAAO,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAA;AAC3C,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,CAAa;IACpB,aAAa,GAAG,CAAC,CAAA;IACjB,OAAO,CAAW;IAElB,YAAY,KAAQ,EAAE,UAAgC,EAAE;QACvD,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;QACtC,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,IAAI,KAAK;QACR,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAA;IAC9B,CAAC;IAED,IAAI,EAAE;QACL,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAA;IACvB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAmB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;QACnC,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAClD,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAA;QAC/B,IAAI,CAAC;YACJ,IAAI,CAAC,aAAa,EAAE,CAAA;YACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YAC7C,OAAO,CAAC,QAAQ,CAAC,CAAA;YACjB,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;YACjD,IAAI,SAAS;gBACZ,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QACpC,CAAC;gBACO,CAAC;YAAC,IAAI,CAAC,aAAa,EAAE,CAAA;QAAC,CAAC;QAChC,MAAM,OAAO,CAAA;QACb,OAAO,IAAI,CAAC,KAAK,CAAA;IAClB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAQ;QACvB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAC9B,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,7 +1,9 @@
1
1
  import { Branch } from "./branch.js";
2
- export type Options = {
2
+ export type TreeOptions = {
3
3
  clone: <X>(x: X) => X;
4
4
  };
5
+ /** @deprecated renamed to `TreeOptions` */
6
+ export type Options = TreeOptions;
5
7
  export type Selector<Sub, S> = (state: S) => Sub;
6
8
  export type Mutator<S> = (state: S) => void;
7
9
  export type Trunkstate = {};
@@ -0,0 +1,10 @@
1
+ import { Immutable, TreeOptions } from "../types.js";
2
+ export declare class Immute<S> {
3
+ #private;
4
+ private options;
5
+ constructor(mutable: S, options: TreeOptions);
6
+ on: import("@e280/stz").Sub<[Immutable<S>]>;
7
+ get(): S;
8
+ set(mutable: S): Promise<void>;
9
+ get immutable(): Immutable<S>;
10
+ }
@@ -0,0 +1,34 @@
1
+ import { deep, microbounce, sub } from "@e280/stz";
2
+ import { tracker } from "../../../tracker/tracker.js";
3
+ export class Immute {
4
+ options;
5
+ #mutable;
6
+ #immutable;
7
+ constructor(mutable, options) {
8
+ this.options = options;
9
+ this.#mutable = mutable;
10
+ this.#immutable = this.#petrify(mutable);
11
+ }
12
+ #petrify(x) {
13
+ return deep.freeze(this.options.clone(x));
14
+ }
15
+ on = sub();
16
+ #debouncePublish = microbounce(async () => this.on.publish(this.#immutable));
17
+ get() {
18
+ tracker.notifyRead(this);
19
+ return this.#mutable;
20
+ }
21
+ async set(mutable) {
22
+ this.#mutable = mutable;
23
+ this.#immutable = deep.freeze(this.options.clone(this.get()));
24
+ await Promise.all([
25
+ this.#debouncePublish(),
26
+ tracker.notifyWrite(this),
27
+ ]);
28
+ }
29
+ get immutable() {
30
+ tracker.notifyRead(this);
31
+ return this.#immutable;
32
+ }
33
+ }
34
+ //# sourceMappingURL=immute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"immute.js","sourceRoot":"","sources":["../../../../s/tree/parts/utils/immute.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAC,MAAM,WAAW,CAAA;AAEhD,OAAO,EAAC,OAAO,EAAC,MAAM,6BAA6B,CAAA;AAEnD,MAAM,OAAO,MAAM;IAIc;IAHhC,QAAQ,CAAG;IACX,UAAU,CAAc;IAExB,YAAY,OAAU,EAAU,OAAoB;QAApB,YAAO,GAAP,OAAO,CAAa;QACnD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,QAAQ,CAAI,CAAI;QACf,OAAO,IAAI,CAAC,MAAM,CACjB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CACL,CAAA;IAClB,CAAC;IAED,EAAE,GAAG,GAAG,EAAkB,CAAA;IAC1B,gBAAgB,GAAG,WAAW,CAAC,KAAK,IAAG,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;IAE3E,GAAG;QACF,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAU;QACnB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAA;QACvB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAiB,CAAA;QAC7E,MAAM,OAAO,CAAC,GAAG,CAAC;YACjB,IAAI,CAAC,gBAAgB,EAAE;YACvB,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;SACzB,CAAC,CAAA;IACH,CAAC;IAED,IAAI,SAAS;QACZ,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACxB,OAAO,IAAI,CAAC,UAAU,CAAA;IACvB,CAAC;CACD"}
@@ -1,2 +1,2 @@
1
- import { Options } from "../types.js";
2
- export declare const processOptions: (options: Partial<Options>) => Options;
1
+ import { TreeOptions } from "../types.js";
2
+ export declare const processOptions: (options: Partial<TreeOptions>) => TreeOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"process-options.js","sourceRoot":"","sources":["../../../../s/tree/parts/utils/process-options.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAyB,EAAW,EAAE,CAAC,CAAC;IACtE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAI,CAAI,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC,CAAA"}
1
+ {"version":3,"file":"process-options.js","sourceRoot":"","sources":["../../../../s/tree/parts/utils/process-options.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAA6B,EAAe,EAAE,CAAC,CAAC;IAC9E,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC,CAAI,CAAI,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CACzD,CAAC,CAAA"}
@@ -9,10 +9,11 @@ declare const _default: {
9
9
  "effect reacts to trunk mutation": Science.Test;
10
10
  "signal.on is debounced": Science.Test;
11
11
  "listeners are fired when array item is pushed": Science.Test;
12
- "prevent mutation loops": Science.Test;
12
+ "sync coherence": Science.Test;
13
13
  };
14
14
  branch: {
15
15
  "get state": Science.Test;
16
+ "sync coherence": Science.Test;
16
17
  "nullable selector": Science.Test;
17
18
  composition: Science.Test;
18
19
  "deep mutations": Science.Test;
@@ -51,9 +51,11 @@ export default Science.suite({
51
51
  const trunk = new Trunk({ count: 0 });
52
52
  let mutationCount = 0;
53
53
  trunk.on.sub(() => { mutationCount++; });
54
- const promise = trunk.mutate(state => state.count++);
55
- expect(mutationCount).is(0);
56
- await promise;
54
+ await Promise.all([
55
+ trunk.mutate(state => state.count++),
56
+ trunk.mutate(state => state.count++),
57
+ trunk.mutate(state => state.count++),
58
+ ]);
57
59
  expect(mutationCount).is(1);
58
60
  }),
59
61
  "listeners are fired when array item is pushed": Science.test(async () => {
@@ -64,19 +66,29 @@ export default Science.suite({
64
66
  expect(mutationCount).is(1);
65
67
  expect(trunk.state.items.length).is(3);
66
68
  }),
67
- "prevent mutation loops": Science.test(async () => {
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 () => {
68
85
  const trunk = new Trunk({ count: 0 });
69
- let mutationCount = 0;
70
- trunk.on.sub(async () => {
71
- mutationCount++;
72
- if (mutationCount > 100)
73
- return;
74
- await trunk.mutate(s => s.count++);
75
- });
76
- await expect(async () => {
77
- await trunk.mutate(state => state.count++);
78
- }).throwsAsync();
79
- expect(mutationCount).is(1);
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;
80
92
  }),
81
93
  }),
82
94
  "branch": Science.suite({
@@ -85,6 +97,14 @@ export default Science.suite({
85
97
  const branch = trunk.branch(s => s.sub);
86
98
  expect(branch.state.rofls).is(0);
87
99
  }),
100
+ "sync coherence": Science.test(async () => {
101
+ const trunk = new Trunk({ count: 0, sub: { rofls: 0 } });
102
+ const branch = trunk.branch(s => s.sub);
103
+ expect(branch.state.rofls).is(0);
104
+ const p = branch.mutate(s => s.rofls++);
105
+ expect(branch.state.rofls).is(1);
106
+ await p;
107
+ }),
88
108
  "nullable selector": Science.test(async () => {
89
109
  const trunk = new Trunk({
90
110
  a: { b: 0 },
@@ -128,7 +148,7 @@ export default Science.suite({
128
148
  const a = trunk.branch(s => s.a);
129
149
  const b = trunk.branch(s => s.b);
130
150
  let counted = 0;
131
- b.on.sub(() => { counted++; });
151
+ b.on(() => { counted++; });
132
152
  expect(counted).is(0);
133
153
  await a.mutate(a => a.x = 1);
134
154
  expect(counted).is(0);
@@ -1 +1 @@
1
- {"version":3,"file":"tree.test.js","sourceRoot":"","sources":["../../s/tree/tree.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree.test.js","sourceRoot":"","sources":["../../s/tree/tree.test.ts"],"names":[],"mappings":"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"}