@e280/strata 0.0.0-9 → 0.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.
- package/README.md +101 -32
- package/package.json +3 -3
- package/s/signals/parts/effect.ts +2 -2
- package/s/signals/parts/signal.ts +4 -4
- package/s/signals/parts/units.ts +7 -5
- package/s/signals/signals.test.ts +9 -0
- package/s/tracker/tracker.test.ts +5 -5
- package/s/tracker/tracker.ts +13 -24
- package/x/signals/parts/effect.js +2 -2
- package/x/signals/parts/effect.js.map +1 -1
- package/x/signals/parts/signal.d.ts +4 -4
- package/x/signals/parts/units.d.ts +2 -2
- package/x/signals/parts/units.js +7 -5
- package/x/signals/parts/units.js.map +1 -1
- package/x/signals/signals.test.d.ts +1 -0
- package/x/signals/signals.test.js +7 -0
- package/x/signals/signals.test.js.map +1 -1
- package/x/tracker/tracker.d.ts +6 -15
- package/x/tracker/tracker.js +12 -22
- package/x/tracker/tracker.js.map +1 -1
- package/x/tracker/tracker.test.js +5 -5
- package/x/tracker/tracker.test.js.map +1 -1
package/README.md
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
📦 `npm install @e280/strata`
|
|
10
10
|
🧙♂️ probably my tenth state management library, lol
|
|
11
11
|
💁 it's all about rerendering ui when data changes
|
|
12
|
+
🦝 used by our view library [@e280/sly](https://github.com/e280/sly)
|
|
13
|
+
🧑💻 a project by https://e280.org/
|
|
12
14
|
|
|
13
15
|
🚦 **signals** — ephemeral view-level state
|
|
14
16
|
🌳 **tree** — persistent app-level state
|
|
@@ -16,18 +18,14 @@
|
|
|
16
18
|
|
|
17
19
|
<br/>
|
|
18
20
|
|
|
19
|
-
|
|
20
|
-
>
|
|
21
|
-
> that means, effects and computeds are responsive to changes in tree state.
|
|
21
|
+
## 🚦 strata signals
|
|
22
|
+
> *ephemeral view-level state*
|
|
22
23
|
|
|
23
|
-
<br/>
|
|
24
|
-
|
|
25
|
-
## 🚦 signals — *ephemeral view-level state*
|
|
26
24
|
```ts
|
|
27
25
|
import {signal, effect, computed} from "@e280/strata"
|
|
28
26
|
```
|
|
29
27
|
|
|
30
|
-
### each signal holds a value
|
|
28
|
+
### 🚦 each signal holds a value
|
|
31
29
|
- **create a signal**
|
|
32
30
|
```ts
|
|
33
31
|
const count = signal(0)
|
|
@@ -45,19 +43,19 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
45
43
|
await count(2)
|
|
46
44
|
```
|
|
47
45
|
|
|
48
|
-
### pick your poison
|
|
49
|
-
- **
|
|
46
|
+
### 🚦 pick your poison
|
|
47
|
+
- **signal hipster fn syntax**
|
|
50
48
|
```ts
|
|
51
49
|
count() // get
|
|
52
50
|
await count(2) // set
|
|
53
51
|
```
|
|
54
|
-
>
|
|
55
|
-
- **
|
|
52
|
+
> *you'd better appreciate this damn hipster syntax, because it makes the implementation cursed, lol* 💀
|
|
53
|
+
- **signal get/set syntax**
|
|
56
54
|
```ts
|
|
57
55
|
count.get() // get
|
|
58
56
|
await count.set(2) // set
|
|
59
57
|
```
|
|
60
|
-
- **
|
|
58
|
+
- **signal .value accessor syntax**
|
|
61
59
|
```ts
|
|
62
60
|
count.value // get
|
|
63
61
|
count.value = 2 // set
|
|
@@ -68,7 +66,7 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
68
66
|
count.value += 1
|
|
69
67
|
```
|
|
70
68
|
|
|
71
|
-
### effects
|
|
69
|
+
### 🚦 effects
|
|
72
70
|
- **effects run when the relevant signals change**
|
|
73
71
|
```ts
|
|
74
72
|
effect(() => console.log(count()))
|
|
@@ -80,7 +78,7 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
80
78
|
// when count is changed, the effect fn is run
|
|
81
79
|
```
|
|
82
80
|
|
|
83
|
-
### `signal.derive` and `signal.lazy` are computed signals
|
|
81
|
+
### 🚦 `signal.derive` and `signal.lazy` are computed signals
|
|
84
82
|
- **signal.derive**
|
|
85
83
|
is for combining signals
|
|
86
84
|
```ts
|
|
@@ -100,21 +98,25 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
100
98
|
is for making special optimizations.
|
|
101
99
|
it's like derive, except it cannot trigger effects,
|
|
102
100
|
because it's so lazy it only computes the value on read, and only when necessary.
|
|
103
|
-
>
|
|
101
|
+
> *i repeat: lazy signals cannot trigger effects!*
|
|
104
102
|
|
|
105
103
|
<br/>
|
|
106
104
|
|
|
107
|
-
## 🌳
|
|
105
|
+
## 🌳 strata trees
|
|
106
|
+
> *persistent app-level state*
|
|
107
|
+
|
|
108
|
+
```ts
|
|
109
|
+
import {Trunk} from "@e280/strata"
|
|
110
|
+
```
|
|
111
|
+
|
|
108
112
|
- single-source-of-truth state tree
|
|
109
113
|
- immutable except for `mutate(fn)` calls
|
|
110
114
|
- localStorage persistence, cross-tab sync, undo/redo history
|
|
111
115
|
- no spooky-dookie proxy magic — just god's honest javascript
|
|
112
116
|
|
|
113
|
-
#### `Trunk` is your app's state tree root
|
|
117
|
+
#### 🌳 `Trunk` is your app's state tree root
|
|
114
118
|
- better stick to json-friendly serializable data
|
|
115
119
|
```ts
|
|
116
|
-
import {Trunk} from "@e280/strata"
|
|
117
|
-
|
|
118
120
|
const trunk = new Trunk({
|
|
119
121
|
count: 0,
|
|
120
122
|
snacks: {
|
|
@@ -127,7 +129,7 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
127
129
|
trunk.state.snacks.peanuts // 8
|
|
128
130
|
```
|
|
129
131
|
|
|
130
|
-
#### formal mutations to change state
|
|
132
|
+
#### 🌳 formal mutations to change state
|
|
131
133
|
- ⛔ informal mutations are denied
|
|
132
134
|
```ts
|
|
133
135
|
trunk.state.count++ // error is thrown
|
|
@@ -137,7 +139,7 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
137
139
|
await trunk.mutate(s => s.count++)
|
|
138
140
|
```
|
|
139
141
|
|
|
140
|
-
#### `Branch` is a view into a subtree
|
|
142
|
+
#### 🌳 `Branch` is a view into a subtree
|
|
141
143
|
- it's a lens, make lots of them, pass 'em around your app
|
|
142
144
|
```ts
|
|
143
145
|
const snacks = trunk.branch(s => s.snacks)
|
|
@@ -152,7 +154,7 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
152
154
|
```
|
|
153
155
|
- you can branch a branch
|
|
154
156
|
|
|
155
|
-
#### `on` to watch for mutations
|
|
157
|
+
#### 🌳 `on` to watch for mutations
|
|
156
158
|
- on the trunk, we can listen deeply for mutations within the whole tree
|
|
157
159
|
```ts
|
|
158
160
|
trunk.on(s => console.log(s.count))
|
|
@@ -167,9 +169,10 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
167
169
|
stop() // stop listening
|
|
168
170
|
```
|
|
169
171
|
|
|
170
|
-
###
|
|
172
|
+
### 🌳 fancy advanced usage
|
|
173
|
+
> *only discerning high-class aristocrats are permitted beyond this point*
|
|
171
174
|
|
|
172
|
-
#### `Trunk.setup` for localStorage persistence etc
|
|
175
|
+
#### 🌳 `Trunk.setup` for localStorage persistence etc
|
|
173
176
|
- it automatically handles persistence to localStorage and cross-tab synchronization
|
|
174
177
|
- simple setup
|
|
175
178
|
```ts
|
|
@@ -196,7 +199,7 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
196
199
|
})
|
|
197
200
|
```
|
|
198
201
|
|
|
199
|
-
#### `Chronobranch` for undo/redo history
|
|
202
|
+
#### 🌳 `Chronobranch` for undo/redo history
|
|
200
203
|
- first, put a `Chronicle` into your state tree
|
|
201
204
|
```ts
|
|
202
205
|
const trunk = new Trunk({
|
|
@@ -234,16 +237,82 @@ import {signal, effect, computed} from "@e280/strata"
|
|
|
234
237
|
|
|
235
238
|
<br/>
|
|
236
239
|
|
|
237
|
-
## 🪄 tracker
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
240
|
+
## 🪄 strata tracker
|
|
241
|
+
> *reactivity integration hub*
|
|
242
|
+
|
|
243
|
+
```ts
|
|
244
|
+
import {tracker} from "@e280/strata/tracker"
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
if you're some kinda framework author, making a new ui thing, or a new state concept -- then you can use the `tracker` to jack into the strata reactivity system, and suddenly your stuff will be fully strata-compatible, reactin' and triggerin' with the best of 'em.
|
|
248
|
+
|
|
249
|
+
the tracker is agnostic and independent, and doesn't know about strata specifics like signals or trees -- and it would be perfectly reasonable for you to use strata solely to integrate with the tracker, thus making your stuff reactivity-compatible with other libraries that use the tracker, like [sly](https://github.com/e280/sly).
|
|
250
|
+
|
|
251
|
+
note, the *items* that the tracker tracks can be any object, or symbol.. the tracker cares about the identity of the item, not the value (tracker holds them in a WeakMap to avoid creating a memory leak)..
|
|
252
|
+
|
|
253
|
+
### 🪄 integrate your ui's reactivity
|
|
254
|
+
- we need to imagine you have some prerequisites
|
|
255
|
+
- `myRenderFn` -- your fn that might access some state stuff
|
|
256
|
+
- `myRerenderFn` -- your fn that is called when some state stuff changes
|
|
257
|
+
- it's okay if these are the same fn, but they don't have to be
|
|
258
|
+
- `tracker.observe` to check what is touched by a fn
|
|
259
|
+
```ts
|
|
260
|
+
// 🪄 run myRenderFn and collect seen items
|
|
261
|
+
const {seen, result} = tracker.observe(myRenderFn)
|
|
262
|
+
|
|
263
|
+
// a set of items that were accessed during myRenderFn
|
|
264
|
+
seen
|
|
265
|
+
|
|
266
|
+
// the value returned by myRenderFn
|
|
267
|
+
result
|
|
268
|
+
```
|
|
269
|
+
- it's a good idea to debounce your rerender fn
|
|
270
|
+
```ts
|
|
271
|
+
import {debounce} from "@e280/stz"
|
|
272
|
+
const myDebouncedRerenderFn = debounce(0, myRerenderFn)
|
|
273
|
+
```
|
|
274
|
+
- `tracker.subscribe` to respond to changes
|
|
275
|
+
```ts
|
|
276
|
+
const stoppers: (() => void)[] = []
|
|
277
|
+
|
|
278
|
+
// loop over every seen item
|
|
279
|
+
for (const item of seen) {
|
|
280
|
+
|
|
281
|
+
// 🪄 react to changes
|
|
282
|
+
const stop = tracker.subscribe(item, myDebouncedRerenderFn)
|
|
283
|
+
|
|
284
|
+
stoppers.push(stop)
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
const stopReactivity = () => stoppers.forEach(stop => stop())
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
### 🪄 integrate your own novel state concepts
|
|
291
|
+
- as an example, we'll invent the simplest possible signal
|
|
292
|
+
```ts
|
|
293
|
+
export class SimpleSignal<Value> {
|
|
294
|
+
constructor(private value: Value) {}
|
|
295
|
+
|
|
296
|
+
get() {
|
|
297
|
+
|
|
298
|
+
// 🪄 tell the tracker this signal was accessed
|
|
299
|
+
tracker.notifyRead(this)
|
|
300
|
+
|
|
301
|
+
return this.value
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
async set(value: Value) {
|
|
305
|
+
this.value = value
|
|
306
|
+
|
|
307
|
+
// 🪄 tell the tracker this signal has changed
|
|
308
|
+
await tracker.notifyWrite(this)
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
```
|
|
243
312
|
|
|
244
313
|
<br/>
|
|
245
314
|
|
|
246
|
-
##
|
|
315
|
+
## 🧑💻 an e280 project
|
|
247
316
|
free and open source by https://e280.org/
|
|
248
317
|
join us if you're cool and good at dev
|
|
249
318
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@e280/strata",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.1",
|
|
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.0.0
|
|
32
|
+
"@e280/stz": "^0.0.0"
|
|
33
33
|
},
|
|
34
34
|
"devDependencies": {
|
|
35
35
|
"@e280/science": "^0.0.6",
|
|
36
|
-
"@types/node": "^24.
|
|
36
|
+
"@types/node": "^24.3.0",
|
|
37
37
|
"npm-run-all": "^4.1.5",
|
|
38
38
|
"typescript": "^5.9.2"
|
|
39
39
|
},
|
|
@@ -7,14 +7,14 @@ export function effect(collector: () => void, responder: () => void = collector)
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export function collectorEffect<C = void>(collector: () => C, responder: () => void = collector) {
|
|
10
|
-
const {seen, result} = tracker.
|
|
10
|
+
const {seen, result} = tracker.observe(collector)
|
|
11
11
|
const fn = debounce(0, responder)
|
|
12
12
|
|
|
13
13
|
const disposers: (() => void)[] = []
|
|
14
14
|
const dispose = () => disposers.forEach(d => d())
|
|
15
15
|
|
|
16
16
|
for (const saw of seen) {
|
|
17
|
-
const dispose = tracker.
|
|
17
|
+
const dispose = tracker.subscribe(saw, fn)
|
|
18
18
|
disposers.push(dispose)
|
|
19
19
|
}
|
|
20
20
|
|
|
@@ -8,8 +8,8 @@ import {processSignalOptions, SignalCore} from "./units.js"
|
|
|
8
8
|
|
|
9
9
|
export type Signal<V> = {
|
|
10
10
|
(): V
|
|
11
|
-
(v: V): Promise<
|
|
12
|
-
(v?: V): V | Promise<
|
|
11
|
+
(v: V): Promise<V>
|
|
12
|
+
(v?: V): V | Promise<V>
|
|
13
13
|
|
|
14
14
|
kind: "signal"
|
|
15
15
|
|
|
@@ -17,8 +17,8 @@ export type Signal<V> = {
|
|
|
17
17
|
value: V
|
|
18
18
|
on: Sub<[V]>
|
|
19
19
|
get(): V
|
|
20
|
-
set(v: V): Promise<
|
|
21
|
-
publish(v?: V): Promise<
|
|
20
|
+
set(v: V): Promise<V>
|
|
21
|
+
publish(v?: V): Promise<V>
|
|
22
22
|
dispose(): void
|
|
23
23
|
} & SignalCore<V>
|
|
24
24
|
|
package/s/signals/parts/units.ts
CHANGED
|
@@ -16,7 +16,7 @@ export class ReadableSignal<V> {
|
|
|
16
16
|
constructor(public sneak: V) {}
|
|
17
17
|
|
|
18
18
|
get() {
|
|
19
|
-
tracker.
|
|
19
|
+
tracker.notifyRead(this)
|
|
20
20
|
return this.sneak
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -45,6 +45,7 @@ export class SignalCore<V> extends ReactiveSignal<V> {
|
|
|
45
45
|
const isChanged = !this._options.compare(this.sneak, v)
|
|
46
46
|
if (isChanged)
|
|
47
47
|
await this.publish(v)
|
|
48
|
+
return v
|
|
48
49
|
}
|
|
49
50
|
|
|
50
51
|
get value() {
|
|
@@ -65,7 +66,7 @@ export class SignalCore<V> extends ReactiveSignal<V> {
|
|
|
65
66
|
this._lock = true
|
|
66
67
|
this.sneak = v
|
|
67
68
|
promise = Promise.all([
|
|
68
|
-
tracker.
|
|
69
|
+
tracker.notifyWrite(this),
|
|
69
70
|
this.on.pub(v),
|
|
70
71
|
]) as any
|
|
71
72
|
}
|
|
@@ -73,7 +74,8 @@ export class SignalCore<V> extends ReactiveSignal<V> {
|
|
|
73
74
|
this._lock = false
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
await promise
|
|
78
|
+
return v
|
|
77
79
|
}
|
|
78
80
|
}
|
|
79
81
|
|
|
@@ -100,7 +102,7 @@ export class LazyCore<V> extends ReadableSignal<V> {
|
|
|
100
102
|
const isChanged = !this._options.compare(this.sneak, v)
|
|
101
103
|
if (isChanged) {
|
|
102
104
|
this.sneak = v
|
|
103
|
-
tracker.
|
|
105
|
+
tracker.notifyWrite(this)
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
108
|
return super.get()
|
|
@@ -124,7 +126,7 @@ export class DerivedCore<V> extends ReactiveSignal<V> {
|
|
|
124
126
|
if (isChanged) {
|
|
125
127
|
that.sneak = value
|
|
126
128
|
await Promise.all([
|
|
127
|
-
tracker.
|
|
129
|
+
tracker.notifyWrite(that),
|
|
128
130
|
that.on.pub(value),
|
|
129
131
|
])
|
|
130
132
|
}
|
|
@@ -28,6 +28,15 @@ export default Science.suite({
|
|
|
28
28
|
expect(count()).is(5)
|
|
29
29
|
}),
|
|
30
30
|
|
|
31
|
+
"signal set and publish returns value": test(async() => {
|
|
32
|
+
const count = signal(0)
|
|
33
|
+
expect(count.value).is(0)
|
|
34
|
+
|
|
35
|
+
expect(await count.set(1)).is(1)
|
|
36
|
+
expect(await count(2)).is(2)
|
|
37
|
+
expect(await count.publish(3)).is(3)
|
|
38
|
+
}),
|
|
39
|
+
|
|
31
40
|
"signal syntax interop": test(async() => {
|
|
32
41
|
const count = signal(0)
|
|
33
42
|
|
|
@@ -8,13 +8,13 @@ export default Science.suite({
|
|
|
8
8
|
let order: string[] = []
|
|
9
9
|
|
|
10
10
|
const item = {}
|
|
11
|
-
tracker.
|
|
11
|
+
tracker.subscribe(item, async () => {
|
|
12
12
|
await Promise.resolve()
|
|
13
13
|
order.push("effect")
|
|
14
14
|
})
|
|
15
15
|
|
|
16
16
|
order.push("before")
|
|
17
|
-
await tracker.
|
|
17
|
+
await tracker.notifyWrite(item)
|
|
18
18
|
order.push("after")
|
|
19
19
|
|
|
20
20
|
expect(order.length).is(3)
|
|
@@ -28,12 +28,12 @@ export default Science.suite({
|
|
|
28
28
|
const item = {}
|
|
29
29
|
|
|
30
30
|
// effect re-publishes the same change, creating a cycle
|
|
31
|
-
tracker.
|
|
32
|
-
await tracker.
|
|
31
|
+
tracker.subscribe(item, async() => {
|
|
32
|
+
await tracker.notifyWrite(item)
|
|
33
33
|
})
|
|
34
34
|
|
|
35
35
|
expect(async() => {
|
|
36
|
-
await tracker.
|
|
36
|
+
await tracker.notifyWrite(item)
|
|
37
37
|
}).throwsAsync()
|
|
38
38
|
}),
|
|
39
39
|
})
|
package/s/tracker/tracker.ts
CHANGED
|
@@ -4,16 +4,7 @@ import {sub, Sub} from "@e280/stz"
|
|
|
4
4
|
export type TrackableItem = object | symbol
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* - it tracks when items are seen or changed
|
|
9
|
-
*
|
|
10
|
-
* for state item integration (like you're integrating a new kind of state object)
|
|
11
|
-
* - items can call `tracker.see(this)` when they are accessed
|
|
12
|
-
* - items can call `tracker.change(this)` when they are reassigned
|
|
13
|
-
*
|
|
14
|
-
* for reactivity integration (like you're integrating a new view library that reacts to state changes)
|
|
15
|
-
* - run `tracker.seen(renderFn)`, collecting a set of seen items
|
|
16
|
-
* - loop over each seen item, attach a changed handler `tracker.changed(item, handlerFn)`
|
|
7
|
+
* reactivity integration hub
|
|
17
8
|
*/
|
|
18
9
|
export class Tracker<Item extends TrackableItem = any> {
|
|
19
10
|
#seeables: Set<Item>[] = []
|
|
@@ -22,20 +13,12 @@ export class Tracker<Item extends TrackableItem = any> {
|
|
|
22
13
|
#busy = new Set<Item>()
|
|
23
14
|
|
|
24
15
|
/** indicate item was accessed */
|
|
25
|
-
|
|
16
|
+
notifyRead(item: Item) {
|
|
26
17
|
this.#seeables.at(-1)?.add(item)
|
|
27
18
|
}
|
|
28
19
|
|
|
29
|
-
/** collect which items were seen during fn */
|
|
30
|
-
seen<R>(fn: () => R) {
|
|
31
|
-
this.#seeables.push(new Set())
|
|
32
|
-
const result = fn()
|
|
33
|
-
const seen = this.#seeables.pop()!
|
|
34
|
-
return {seen, result}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
20
|
/** indicate item was changed */
|
|
38
|
-
async
|
|
21
|
+
async notifyWrite(item: Item) {
|
|
39
22
|
if (this.#busy.has(item))
|
|
40
23
|
throw new Error("circularity forbidden")
|
|
41
24
|
const prom = this.#guaranteeChangeable(item).pub()
|
|
@@ -43,8 +26,16 @@ export class Tracker<Item extends TrackableItem = any> {
|
|
|
43
26
|
return prom
|
|
44
27
|
}
|
|
45
28
|
|
|
29
|
+
/** collect which items were seen during fn */
|
|
30
|
+
observe<R>(fn: () => R) {
|
|
31
|
+
this.#seeables.push(new Set())
|
|
32
|
+
const result = fn()
|
|
33
|
+
const seen = this.#seeables.pop()!
|
|
34
|
+
return {seen, result}
|
|
35
|
+
}
|
|
36
|
+
|
|
46
37
|
/** respond to changes by calling fn */
|
|
47
|
-
|
|
38
|
+
subscribe(item: Item, fn: () => Promise<void>) {
|
|
48
39
|
return this.#guaranteeChangeable(item)(async() => {
|
|
49
40
|
const collected = new Set<Promise<void>>()
|
|
50
41
|
this.#changeStack.push(collected)
|
|
@@ -66,8 +57,6 @@ export class Tracker<Item extends TrackableItem = any> {
|
|
|
66
57
|
}
|
|
67
58
|
}
|
|
68
59
|
|
|
69
|
-
const key = Symbol.for("e280.tracker.v2")
|
|
70
|
-
|
|
71
60
|
/** standard global tracker for integrations */
|
|
72
|
-
export const tracker: Tracker = (globalThis as any)[
|
|
61
|
+
export const tracker: Tracker = (globalThis as any)[Symbol.for("e280.tracker")] ??= new Tracker()
|
|
73
62
|
|
|
@@ -4,12 +4,12 @@ export function effect(collector, responder = collector) {
|
|
|
4
4
|
return collectorEffect(collector, responder).dispose;
|
|
5
5
|
}
|
|
6
6
|
export function collectorEffect(collector, responder = collector) {
|
|
7
|
-
const { seen, result } = tracker.
|
|
7
|
+
const { seen, result } = tracker.observe(collector);
|
|
8
8
|
const fn = debounce(0, responder);
|
|
9
9
|
const disposers = [];
|
|
10
10
|
const dispose = () => disposers.forEach(d => d());
|
|
11
11
|
for (const saw of seen) {
|
|
12
|
-
const dispose = tracker.
|
|
12
|
+
const dispose = tracker.subscribe(saw, fn);
|
|
13
13
|
disposers.push(dispose);
|
|
14
14
|
}
|
|
15
15
|
return { result, dispose };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../s/signals/parts/effect.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAClC,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAEhD,MAAM,UAAU,MAAM,CAAC,SAAqB,EAAE,YAAwB,SAAS;IAC9E,OAAO,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAW,SAAkB,EAAE,YAAwB,SAAS;IAC9F,MAAM,EAAC,IAAI,EAAE,MAAM,EAAC,GAAG,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"effect.js","sourceRoot":"","sources":["../../../s/signals/parts/effect.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,QAAQ,EAAC,MAAM,WAAW,CAAA;AAClC,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAEhD,MAAM,UAAU,MAAM,CAAC,SAAqB,EAAE,YAAwB,SAAS;IAC9E,OAAO,eAAe,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,eAAe,CAAW,SAAkB,EAAE,YAAwB,SAAS;IAC9F,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"}
|
|
@@ -3,15 +3,15 @@ import { SignalOptions } from "./types.js";
|
|
|
3
3
|
import { SignalCore } from "./units.js";
|
|
4
4
|
export type Signal<V> = {
|
|
5
5
|
(): V;
|
|
6
|
-
(v: V): Promise<
|
|
7
|
-
(v?: V): V | Promise<
|
|
6
|
+
(v: V): Promise<V>;
|
|
7
|
+
(v?: V): V | Promise<V>;
|
|
8
8
|
kind: "signal";
|
|
9
9
|
sneak: V;
|
|
10
10
|
value: V;
|
|
11
11
|
on: Sub<[V]>;
|
|
12
12
|
get(): V;
|
|
13
|
-
set(v: V): Promise<
|
|
14
|
-
publish(v?: V): Promise<
|
|
13
|
+
set(v: V): Promise<V>;
|
|
14
|
+
publish(v?: V): Promise<V>;
|
|
15
15
|
dispose(): void;
|
|
16
16
|
} & SignalCore<V>;
|
|
17
17
|
export declare function signal<V>(value: V, options?: Partial<SignalOptions>): Signal<V>;
|
|
@@ -17,10 +17,10 @@ export declare class SignalCore<V> extends ReactiveSignal<V> {
|
|
|
17
17
|
kind: "signal";
|
|
18
18
|
_lock: boolean;
|
|
19
19
|
constructor(sneak: V, _options: SignalOptions);
|
|
20
|
-
set(v: V): Promise<
|
|
20
|
+
set(v: V): Promise<V>;
|
|
21
21
|
get value(): V;
|
|
22
22
|
set value(v: V);
|
|
23
|
-
publish(v?: V): Promise<
|
|
23
|
+
publish(v?: V): Promise<V>;
|
|
24
24
|
}
|
|
25
25
|
export declare class LazyCore<V> extends ReadableSignal<V> {
|
|
26
26
|
_formula: () => V;
|
package/x/signals/parts/units.js
CHANGED
|
@@ -13,7 +13,7 @@ export class ReadableSignal {
|
|
|
13
13
|
this.sneak = sneak;
|
|
14
14
|
}
|
|
15
15
|
get() {
|
|
16
|
-
tracker.
|
|
16
|
+
tracker.notifyRead(this);
|
|
17
17
|
return this.sneak;
|
|
18
18
|
}
|
|
19
19
|
get value() {
|
|
@@ -38,6 +38,7 @@ export class SignalCore extends ReactiveSignal {
|
|
|
38
38
|
const isChanged = !this._options.compare(this.sneak, v);
|
|
39
39
|
if (isChanged)
|
|
40
40
|
await this.publish(v);
|
|
41
|
+
return v;
|
|
41
42
|
}
|
|
42
43
|
get value() {
|
|
43
44
|
return this.get();
|
|
@@ -53,14 +54,15 @@ export class SignalCore extends ReactiveSignal {
|
|
|
53
54
|
this._lock = true;
|
|
54
55
|
this.sneak = v;
|
|
55
56
|
promise = Promise.all([
|
|
56
|
-
tracker.
|
|
57
|
+
tracker.notifyWrite(this),
|
|
57
58
|
this.on.pub(v),
|
|
58
59
|
]);
|
|
59
60
|
}
|
|
60
61
|
finally {
|
|
61
62
|
this._lock = false;
|
|
62
63
|
}
|
|
63
|
-
|
|
64
|
+
await promise;
|
|
65
|
+
return v;
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
export class LazyCore extends ReadableSignal {
|
|
@@ -86,7 +88,7 @@ export class LazyCore extends ReadableSignal {
|
|
|
86
88
|
const isChanged = !this._options.compare(this.sneak, v);
|
|
87
89
|
if (isChanged) {
|
|
88
90
|
this.sneak = v;
|
|
89
|
-
tracker.
|
|
91
|
+
tracker.notifyWrite(this);
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
94
|
return super.get();
|
|
@@ -108,7 +110,7 @@ export class DerivedCore extends ReactiveSignal {
|
|
|
108
110
|
if (isChanged) {
|
|
109
111
|
that.sneak = value;
|
|
110
112
|
await Promise.all([
|
|
111
|
-
tracker.
|
|
113
|
+
tracker.notifyWrite(that),
|
|
112
114
|
that.on.pub(value),
|
|
113
115
|
]);
|
|
114
116
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../../s/signals/parts/units.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAC,MAAM,WAAW,CAAA;AAE7B,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAC,OAAO,EAAC,MAAM,0BAA0B,CAAA;AAEhD,MAAM,oBAAoB,GAAkB;IAC3C,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC;CAC1B,CAAA;AAED,MAAM,UAAU,oBAAoB,CAAC,UAAkC,EAAE;IACxE,OAAO,EAAC,GAAG,oBAAoB,EAAE,GAAG,OAAO,EAAC,CAAA;AAC7C,CAAC;AAED,MAAM,OAAO,cAAc;IACP;IAAnB,YAAmB,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAE/B,GAAG;QACF,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"units.js","sourceRoot":"","sources":["../../../s/signals/parts/units.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { Science } from "@e280/science";
|
|
|
2
2
|
declare const _default: {
|
|
3
3
|
"signal get/set value": Science.Test;
|
|
4
4
|
"signal fn syntax": Science.Test;
|
|
5
|
+
"signal set and publish returns value": Science.Test;
|
|
5
6
|
"signal syntax interop": Science.Test;
|
|
6
7
|
"signal on is not debounced": Science.Test;
|
|
7
8
|
"signal on only fires on change": Science.Test;
|
|
@@ -19,6 +19,13 @@ export default Science.suite({
|
|
|
19
19
|
count(5);
|
|
20
20
|
expect(count()).is(5);
|
|
21
21
|
}),
|
|
22
|
+
"signal set and publish returns value": test(async () => {
|
|
23
|
+
const count = signal(0);
|
|
24
|
+
expect(count.value).is(0);
|
|
25
|
+
expect(await count.set(1)).is(1);
|
|
26
|
+
expect(await count(2)).is(2);
|
|
27
|
+
expect(await count.publish(3)).is(3);
|
|
28
|
+
}),
|
|
22
29
|
"signal syntax interop": test(async () => {
|
|
23
30
|
const count = signal(0);
|
|
24
31
|
count.value = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signals.test.js","sourceRoot":"","sources":["../../s/signals/signals.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"signals.test.js","sourceRoot":"","sources":["../../s/signals/signals.test.ts"],"names":[],"mappings":"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"}
|
package/x/tracker/tracker.d.ts
CHANGED
|
@@ -1,29 +1,20 @@
|
|
|
1
1
|
export type TrackableItem = object | symbol;
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* - it tracks when items are seen or changed
|
|
5
|
-
*
|
|
6
|
-
* for state item integration (like you're integrating a new kind of state object)
|
|
7
|
-
* - items can call `tracker.see(this)` when they are accessed
|
|
8
|
-
* - items can call `tracker.change(this)` when they are reassigned
|
|
9
|
-
*
|
|
10
|
-
* for reactivity integration (like you're integrating a new view library that reacts to state changes)
|
|
11
|
-
* - run `tracker.seen(renderFn)`, collecting a set of seen items
|
|
12
|
-
* - loop over each seen item, attach a changed handler `tracker.changed(item, handlerFn)`
|
|
3
|
+
* reactivity integration hub
|
|
13
4
|
*/
|
|
14
5
|
export declare class Tracker<Item extends TrackableItem = any> {
|
|
15
6
|
#private;
|
|
16
7
|
/** indicate item was accessed */
|
|
17
|
-
|
|
8
|
+
notifyRead(item: Item): void;
|
|
9
|
+
/** indicate item was changed */
|
|
10
|
+
notifyWrite(item: Item): Promise<void>;
|
|
18
11
|
/** collect which items were seen during fn */
|
|
19
|
-
|
|
12
|
+
observe<R>(fn: () => R): {
|
|
20
13
|
seen: Set<Item>;
|
|
21
14
|
result: R;
|
|
22
15
|
};
|
|
23
|
-
/** indicate item was changed */
|
|
24
|
-
change(item: Item): Promise<void>;
|
|
25
16
|
/** respond to changes by calling fn */
|
|
26
|
-
|
|
17
|
+
subscribe(item: Item, fn: () => Promise<void>): () => void;
|
|
27
18
|
}
|
|
28
19
|
/** standard global tracker for integrations */
|
|
29
20
|
export declare const tracker: Tracker;
|
package/x/tracker/tracker.js
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
import { sub } from "@e280/stz";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* - it tracks when items are seen or changed
|
|
5
|
-
*
|
|
6
|
-
* for state item integration (like you're integrating a new kind of state object)
|
|
7
|
-
* - items can call `tracker.see(this)` when they are accessed
|
|
8
|
-
* - items can call `tracker.change(this)` when they are reassigned
|
|
9
|
-
*
|
|
10
|
-
* for reactivity integration (like you're integrating a new view library that reacts to state changes)
|
|
11
|
-
* - run `tracker.seen(renderFn)`, collecting a set of seen items
|
|
12
|
-
* - loop over each seen item, attach a changed handler `tracker.changed(item, handlerFn)`
|
|
3
|
+
* reactivity integration hub
|
|
13
4
|
*/
|
|
14
5
|
export class Tracker {
|
|
15
6
|
#seeables = [];
|
|
@@ -17,26 +8,26 @@ export class Tracker {
|
|
|
17
8
|
#changeStack = [];
|
|
18
9
|
#busy = new Set();
|
|
19
10
|
/** indicate item was accessed */
|
|
20
|
-
|
|
11
|
+
notifyRead(item) {
|
|
21
12
|
this.#seeables.at(-1)?.add(item);
|
|
22
13
|
}
|
|
23
|
-
/** collect which items were seen during fn */
|
|
24
|
-
seen(fn) {
|
|
25
|
-
this.#seeables.push(new Set());
|
|
26
|
-
const result = fn();
|
|
27
|
-
const seen = this.#seeables.pop();
|
|
28
|
-
return { seen, result };
|
|
29
|
-
}
|
|
30
14
|
/** indicate item was changed */
|
|
31
|
-
async
|
|
15
|
+
async notifyWrite(item) {
|
|
32
16
|
if (this.#busy.has(item))
|
|
33
17
|
throw new Error("circularity forbidden");
|
|
34
18
|
const prom = this.#guaranteeChangeable(item).pub();
|
|
35
19
|
this.#changeStack.at(-1)?.add(prom);
|
|
36
20
|
return prom;
|
|
37
21
|
}
|
|
22
|
+
/** collect which items were seen during fn */
|
|
23
|
+
observe(fn) {
|
|
24
|
+
this.#seeables.push(new Set());
|
|
25
|
+
const result = fn();
|
|
26
|
+
const seen = this.#seeables.pop();
|
|
27
|
+
return { seen, result };
|
|
28
|
+
}
|
|
38
29
|
/** respond to changes by calling fn */
|
|
39
|
-
|
|
30
|
+
subscribe(item, fn) {
|
|
40
31
|
return this.#guaranteeChangeable(item)(async () => {
|
|
41
32
|
const collected = new Set();
|
|
42
33
|
this.#changeStack.push(collected);
|
|
@@ -56,7 +47,6 @@ export class Tracker {
|
|
|
56
47
|
return on;
|
|
57
48
|
}
|
|
58
49
|
}
|
|
59
|
-
const key = Symbol.for("e280.tracker.v2");
|
|
60
50
|
/** standard global tracker for integrations */
|
|
61
|
-
export const tracker = globalThis[
|
|
51
|
+
export const tracker = globalThis[Symbol.for("e280.tracker")] ??= new Tracker();
|
|
62
52
|
//# sourceMappingURL=tracker.js.map
|
package/x/tracker/tracker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../s/tracker/tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAM,MAAM,WAAW,CAAA;AAIlC
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../s/tracker/tracker.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,GAAG,EAAM,MAAM,WAAW,CAAA;AAIlC;;GAEG;AACH,MAAM,OAAO,OAAO;IACnB,SAAS,GAAgB,EAAE,CAAA;IAC3B,YAAY,GAAG,IAAI,OAAO,EAAa,CAAA;IACvC,YAAY,GAAyB,EAAE,CAAA;IACvC,KAAK,GAAG,IAAI,GAAG,EAAQ,CAAA;IAEvB,iCAAiC;IACjC,UAAU,CAAC,IAAU;QACpB,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED,gCAAgC;IAChC,KAAK,CAAC,WAAW,CAAC,IAAU;QAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAA;QAClD,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,IAAI,CAAA;IACZ,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAI,EAAW;QACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAA;QAC9B,MAAM,MAAM,GAAG,EAAE,EAAE,CAAA;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAG,CAAA;QAClC,OAAO,EAAC,IAAI,EAAE,MAAM,EAAC,CAAA;IACtB,CAAC;IAED,uCAAuC;IACvC,SAAS,CAAC,IAAU,EAAE,EAAuB;QAC5C,OAAO,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,IAAG,EAAE;YAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAiB,CAAA;YAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YACjC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YACpB,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAA;YACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACvB,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAC5B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA;QACxB,CAAC,CAAC,CAAA;IACH,CAAC;IAED,oBAAoB,CAAC,IAAU;QAC9B,IAAI,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,EAAE,EAAE,CAAC;YACT,EAAE,GAAG,GAAG,EAAE,CAAA;YACV,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;QAChC,CAAC;QACD,OAAO,EAAE,CAAA;IACV,CAAC;CACD;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,OAAO,GAAa,UAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,OAAO,EAAE,CAAA"}
|
|
@@ -5,12 +5,12 @@ export default Science.suite({
|
|
|
5
5
|
const tracker = new Tracker();
|
|
6
6
|
let order = [];
|
|
7
7
|
const item = {};
|
|
8
|
-
tracker.
|
|
8
|
+
tracker.subscribe(item, async () => {
|
|
9
9
|
await Promise.resolve();
|
|
10
10
|
order.push("effect");
|
|
11
11
|
});
|
|
12
12
|
order.push("before");
|
|
13
|
-
await tracker.
|
|
13
|
+
await tracker.notifyWrite(item);
|
|
14
14
|
order.push("after");
|
|
15
15
|
expect(order.length).is(3);
|
|
16
16
|
expect(order[0]).is("before");
|
|
@@ -21,11 +21,11 @@ export default Science.suite({
|
|
|
21
21
|
const tracker = new Tracker();
|
|
22
22
|
const item = {};
|
|
23
23
|
// effect re-publishes the same change, creating a cycle
|
|
24
|
-
tracker.
|
|
25
|
-
await tracker.
|
|
24
|
+
tracker.subscribe(item, async () => {
|
|
25
|
+
await tracker.notifyWrite(item);
|
|
26
26
|
});
|
|
27
27
|
expect(async () => {
|
|
28
|
-
await tracker.
|
|
28
|
+
await tracker.notifyWrite(item);
|
|
29
29
|
}).throwsAsync();
|
|
30
30
|
}),
|
|
31
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.test.js","sourceRoot":"","sources":["../../s/tracker/tracker.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAA;AAEpC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,+CAA+C,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC7B,IAAI,KAAK,GAAa,EAAE,CAAA;QAExB,MAAM,IAAI,GAAG,EAAE,CAAA;QACf,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"tracker.test.js","sourceRoot":"","sources":["../../s/tracker/tracker.test.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAC,MAAM,eAAe,CAAA;AACnD,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAA;AAEpC,eAAe,OAAO,CAAC,KAAK,CAAC;IAC5B,+CAA+C,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QAC/D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC7B,IAAI,KAAK,GAAa,EAAE,CAAA;QAExB,MAAM,IAAI,GAAG,EAAE,CAAA;QACf,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;YAClC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAA;YACvB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrB,CAAC,CAAC,CAAA;QAEF,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACpB,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEnB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC1B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;QAC7B,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC,CAAC;IAEF,uBAAuB,EAAE,IAAI,CAAC,KAAK,IAAG,EAAE;QACvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAC7B,MAAM,IAAI,GAAG,EAAE,CAAA;QAEf,wDAAwD;QACxD,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,IAAG,EAAE;YACjC,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,IAAG,EAAE;YAChB,MAAM,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAChC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACjB,CAAC,CAAC;CACF,CAAC,CAAA"}
|