synstate 4.1.0 → 5.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 +58 -1
- package/dist/core/class/child-observable-class.d.mts +30 -14
- package/dist/core/class/child-observable-class.d.mts.map +1 -1
- package/dist/core/class/child-observable-class.mjs +39 -25
- package/dist/core/class/child-observable-class.mjs.map +1 -1
- package/dist/core/class/create-child-observable.d.mts +8 -5
- package/dist/core/class/create-child-observable.d.mts.map +1 -1
- package/dist/core/class/create-child-observable.mjs.map +1 -1
- package/dist/core/class/manager-observable-class.d.mts +4 -15
- package/dist/core/class/manager-observable-class.d.mts.map +1 -1
- package/dist/core/class/manager-observable-class.mjs +5 -91
- package/dist/core/class/manager-observable-class.mjs.map +1 -1
- package/dist/core/class/observable-base-class.d.mts +9 -2
- package/dist/core/class/observable-base-class.d.mts.map +1 -1
- package/dist/core/class/observable-base-class.mjs +17 -0
- package/dist/core/class/observable-base-class.mjs.map +1 -1
- package/dist/core/class/observable-node.d.mts +4 -8
- package/dist/core/class/observable-node.d.mts.map +1 -1
- package/dist/core/class/observable-node.mjs.map +1 -1
- package/dist/core/class/propagation-state.d.mts +26 -0
- package/dist/core/class/propagation-state.d.mts.map +1 -1
- package/dist/core/class/propagation-state.mjs +190 -0
- package/dist/core/class/propagation-state.mjs.map +1 -1
- package/dist/core/operators/index.d.mts +1 -0
- package/dist/core/operators/index.d.mts.map +1 -1
- package/dist/core/operators/index.mjs +1 -0
- package/dist/core/operators/index.mjs.map +1 -1
- package/dist/core/operators/keep-equal-parts.d.mts +85 -0
- package/dist/core/operators/keep-equal-parts.d.mts.map +1 -0
- package/dist/core/operators/keep-equal-parts.mjs +129 -0
- package/dist/core/operators/keep-equal-parts.mjs.map +1 -0
- package/dist/core/operators/merge-map.mjs +1 -3
- package/dist/core/operators/merge-map.mjs.map +1 -1
- package/dist/core/operators/switch-map.mjs +1 -3
- package/dist/core/operators/switch-map.mjs.map +1 -1
- package/dist/core/types/id.d.mts +6 -2
- package/dist/core/types/id.d.mts.map +1 -1
- package/dist/core/types/observable-family.d.mts +1 -0
- package/dist/core/types/observable-family.d.mts.map +1 -1
- package/dist/core/utils/id-maker.d.mts +0 -8
- package/dist/core/utils/id-maker.d.mts.map +1 -1
- package/dist/core/utils/id-maker.mjs +1 -11
- package/dist/core/utils/id-maker.mjs.map +1 -1
- package/dist/utils/create-reducer.d.mts +30 -1
- package/dist/utils/create-reducer.d.mts.map +1 -1
- package/dist/utils/create-reducer.mjs +8 -1
- package/dist/utils/create-reducer.mjs.map +1 -1
- package/dist/utils/create-state.d.mts +53 -1
- package/dist/utils/create-state.d.mts.map +1 -1
- package/dist/utils/create-state.mjs +52 -0
- package/dist/utils/create-state.mjs.map +1 -1
- package/package.json +14 -14
- package/src/core/class/child-observable-class.mts +60 -55
- package/src/core/class/create-child-observable.mts +8 -5
- package/src/core/class/manager-observable-class.mts +15 -134
- package/src/core/class/observable-base-class.mts +23 -2
- package/src/core/class/observable-node.mts +5 -11
- package/src/core/class/propagation-order.test.mts +107 -0
- package/src/core/class/propagation-state.mts +262 -0
- package/src/core/class/remove-completed.test.mts +2 -2
- package/src/core/class/update-loop.test.mts +104 -0
- package/src/core/operators/flat-map-sync-inner.test.mts +90 -0
- package/src/core/operators/index.mts +1 -0
- package/src/core/operators/keep-equal-parts.mts +167 -0
- package/src/core/operators/keep-equal-parts.test.mts +132 -0
- package/src/core/operators/merge-map.mts +1 -3
- package/src/core/operators/switch-map.mts +1 -3
- package/src/core/types/id.mts +6 -2
- package/src/core/types/observable-family.mts +5 -0
- package/src/core/utils/id-maker.mts +1 -12
- package/src/utils/create-reducer.mts +42 -2
- package/src/utils/create-state.mts +53 -1
- package/src/utils/create-state.test.mts +88 -0
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
- 🎯 **Simple State Management**: Easy-to-use `createState` and `createReducer` similar to React useState/useReducer for global state
|
|
25
25
|
- ⚡ **High Performance**: Optimized for fast state updates and minimal re-renders
|
|
26
26
|
- 🎨 **Type-Safe**: Full TypeScript support with precise type inference
|
|
27
|
-
- 🚀 **Lightweight**: <!-- bundle-size:synstate -->~6.
|
|
27
|
+
- 🚀 **Lightweight**: <!-- bundle-size:synstate -->~6.6 kB min+gzip<!-- /bundle-size:synstate --> with two external runtime dependencies ([ts-data-forge](https://www.npmjs.com/package/ts-data-forge) and [ts-std-forge](https://www.npmjs.com/package/ts-std-forge), and the first depends on the second)
|
|
28
28
|
- 🌐 **Framework Agnostic**: Works with React, Vue, Svelte, or vanilla JavaScript
|
|
29
29
|
- 🔄 **Reactive Updates**: Automatic propagation of state changes to all subscribers
|
|
30
30
|
- 📡 **Event System**: Built-in `createValueEmitter`, `createEventEmitter` for event-driven architecture
|
|
@@ -334,6 +334,62 @@ dispatch({ type: 'add', amount: 2 });
|
|
|
334
334
|
assert.deepStrictEqual(countHistory, [0, 0, 2]);
|
|
335
335
|
```
|
|
336
336
|
|
|
337
|
+
### Keeping the Parts an Update Did Not Change (`keepEqualParts`)
|
|
338
|
+
|
|
339
|
+
A state written whole from a source that answers with a new object every time, such as a server polled for a report, can take `keepEqualParts: true`. The next state is compared with the current one before it is written: every part deeply equal to the same part of the current state is replaced by that part, so whatever reads an unchanged part keeps the object it has and `skipIfNoChange()` with `Object.is` stops it, and an answer that changes nothing is not passed on at all. Array items are matched by index; `keepEqualParts: { key }` matches them by key. The comparison is `replaceEqualDeep` of ts-data-forge, which serves any other write too.
|
|
340
|
+
|
|
341
|
+
```tsx
|
|
342
|
+
type PullReport = DeepReadonly<{
|
|
343
|
+
summary: { open: number };
|
|
344
|
+
pulls: { number: number; title: string }[];
|
|
345
|
+
}>;
|
|
346
|
+
|
|
347
|
+
const [report, setReport] = createState<PullReport>(
|
|
348
|
+
{ summary: { open: 0 }, pulls: [] },
|
|
349
|
+
{ keepEqualParts: true },
|
|
350
|
+
);
|
|
351
|
+
|
|
352
|
+
const summary = report.pipe(map((r) => r.summary)).pipe(skipIfNoChange());
|
|
353
|
+
|
|
354
|
+
const summaryHistory: unknown[] = [];
|
|
355
|
+
|
|
356
|
+
summary.subscribe((value) => {
|
|
357
|
+
summaryHistory.push(value);
|
|
358
|
+
});
|
|
359
|
+
|
|
360
|
+
// A server answers each poll with the whole report, a new object every
|
|
361
|
+
// time. What did not change keeps the object already held.
|
|
362
|
+
setReport({
|
|
363
|
+
summary: { open: 1 },
|
|
364
|
+
pulls: [{ number: 1, title: 'one' }],
|
|
365
|
+
});
|
|
366
|
+
|
|
367
|
+
const held = report.getSnapshot().value;
|
|
368
|
+
|
|
369
|
+
// An answer that changes nothing is not passed on at all.
|
|
370
|
+
setReport({
|
|
371
|
+
summary: { open: 1 },
|
|
372
|
+
pulls: [{ number: 1, title: 'one' }],
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
assert.strictEqual(report.getSnapshot().value, held);
|
|
376
|
+
|
|
377
|
+
// An edited title: a new report and a new array, while the summary is
|
|
378
|
+
// the one held, so `summary` is not told of it.
|
|
379
|
+
setReport({
|
|
380
|
+
summary: { open: 1 },
|
|
381
|
+
pulls: [{ number: 1, title: 'one (edited)' }],
|
|
382
|
+
});
|
|
383
|
+
|
|
384
|
+
assert.notStrictEqual(report.getSnapshot().value, held);
|
|
385
|
+
|
|
386
|
+
assert.strictEqual(report.getSnapshot().value.summary, held.summary);
|
|
387
|
+
|
|
388
|
+
assert.deepStrictEqual(summaryHistory, [{ open: 0 }, { open: 1 }]);
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
Keep references where the value is written, as here, rather than downstream. The `keepEqualParts()` operator does the same to a stream, but every update that changes nothing has already been passed on by then, so keep it for a source that is not yours to change.
|
|
392
|
+
|
|
337
393
|
### Global Counter State (React)
|
|
338
394
|
|
|
339
395
|
```tsx
|
|
@@ -684,6 +740,7 @@ For complex scenarios, SynState provides observable-based APIs:
|
|
|
684
740
|
- Filtering
|
|
685
741
|
- `filter(predicate)`: Filter values
|
|
686
742
|
- `skipIfNoChange()`: Skip duplicate values (alias: `distinctUntilChanged`)
|
|
743
|
+
- `keepEqualParts()`: Keep the parts equal to the last value and skip a value equal to it as a whole; prefer the `keepEqualParts` option of `createState`
|
|
687
744
|
- `skip(n)`: Skip first n emissions
|
|
688
745
|
- `take(n)`: Take first n emissions then complete
|
|
689
746
|
- `skipWhile(predicate)`: Skip values while predicate is true
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { type Optional, type Some } from 'ts-data-forge';
|
|
2
|
-
import type { AsyncChildObservable, DropInitialValueOperator, InitializedObservable, InitializedSyncChildObservable, KeepInitialValueOperator, NonEmptyUnknownList, Observable, SyncChildObservable, WithInitialValueOperator, Wrap } from '../types/index.mjs';
|
|
2
|
+
import type { AsyncChildObservable, DropInitialValueOperator, InitializedObservable, InitializedSyncChildObservable, KeepInitialValueOperator, NonEmptyUnknownList, Observable, Subscription, SyncChildObservable, UpdateToken, WithInitialValueOperator, Wrap } from '../types/index.mjs';
|
|
3
3
|
import { ManagerObservableClass } from './manager-observable-class.mjs';
|
|
4
4
|
import { ObservableBaseClass } from './observable-base-class.mjs';
|
|
5
|
-
import { type ManagerNode } from './observable-node.mjs';
|
|
6
5
|
type ChildObservableConfig<A, P extends NonEmptyUnknownList> = Readonly<{
|
|
7
6
|
parents: Wrap<P>;
|
|
8
7
|
/**
|
|
@@ -26,14 +25,12 @@ type ChildObservableConfig<A, P extends NonEmptyUnknownList> = Readonly<{
|
|
|
26
25
|
export declare class SyncChildObservableClass<A, const P extends NonEmptyUnknownList> extends ObservableBaseClass<A, 'sync child', number> implements SyncChildObservable<A, P> {
|
|
27
26
|
#private;
|
|
28
27
|
readonly parents: Wrap<P>;
|
|
29
|
-
readonly managers: readonly ManagerNode[];
|
|
30
28
|
constructor({ parents, depth, initialValue, }: ChildObservableConfig<A, P>);
|
|
31
29
|
/**
|
|
32
|
-
* Joins the current scope and registers this observable to its parents
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
* leave a reference in each parent.
|
|
30
|
+
* Joins the current scope and registers this observable to its parents.
|
|
31
|
+
* Completed parents never update again, so a child created under them is
|
|
32
|
+
* complete from the start (#2248), as is one its constructor completed;
|
|
33
|
+
* registering it would only leave a reference in each parent.
|
|
37
34
|
*/
|
|
38
35
|
protected attach(): void;
|
|
39
36
|
protected detach(): void;
|
|
@@ -69,6 +66,22 @@ export declare class AsyncChildObservableClass<A, const P extends NonEmptyUnknow
|
|
|
69
66
|
canEmitNoMore(): boolean;
|
|
70
67
|
/** See `SyncChildObservableClass.completeAfterPropagation`. */
|
|
71
68
|
protected completeAfterPropagation(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Subscribes to the inner observable that the projection of `switchMap` /
|
|
71
|
+
* `mergeMap` returned.
|
|
72
|
+
*
|
|
73
|
+
* If the inner observable already holds a value (`just(x)`, a state), it
|
|
74
|
+
* emits that value synchronously while being subscribed. That first value
|
|
75
|
+
* is emitted with `updateToken`, the token of the update that ran the
|
|
76
|
+
* projection, so it joins the propagation in progress like a sync
|
|
77
|
+
* operator's value would. Starting an update of its own instead would
|
|
78
|
+
* reach the nodes below before the current update reached this
|
|
79
|
+
* observable's siblings: a node reading both would see the new inner value
|
|
80
|
+
* beside stale sibling values (a glitch), and would emit twice.
|
|
81
|
+
*
|
|
82
|
+
* Values the inner observable emits later start updates of their own.
|
|
83
|
+
*/
|
|
84
|
+
protected subscribeInner(inner: Observable<A>, updateToken: UpdateToken): Subscription;
|
|
72
85
|
}
|
|
73
86
|
/**
|
|
74
87
|
* A sync child that always holds a value: a subclass passes a `Some` as its
|
|
@@ -81,12 +94,15 @@ export declare class InitializedSyncChildObservableClass<A, const P extends NonE
|
|
|
81
94
|
pipe<B>(operator: DropInitialValueOperator<A, B>): Observable<B>;
|
|
82
95
|
}
|
|
83
96
|
/**
|
|
84
|
-
* Whether {@link registerChild} checks for a circular dependency:
|
|
85
|
-
*
|
|
86
|
-
* before it and cannot be changed afterwards
|
|
87
|
-
*
|
|
88
|
-
*
|
|
89
|
-
*
|
|
97
|
+
* Whether {@link registerChild} checks for a circular dependency: on in
|
|
98
|
+
* development, off in production. The public API cannot make a cycle — a
|
|
99
|
+
* child's parents exist before it and cannot be changed afterwards — so the
|
|
100
|
+
* check is a safety net for what propagation assumes (a DAG, a depth for every
|
|
101
|
+
* node) against code that rewrites an observable's readonly `parents`, and
|
|
102
|
+
* development is where that code runs first. It walks every ancestor of each
|
|
103
|
+
* new observable, a cost production does not pay: the check is off when
|
|
104
|
+
* `NODE_ENV` is `production`, and where there is no `process` (a browser
|
|
105
|
+
* bundle).
|
|
90
106
|
*/
|
|
91
107
|
export declare const checksCircularDependency: boolean;
|
|
92
108
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/child-observable-class.mts"],"names":[],"mappings":"AAIA,OAAO,
|
|
1
|
+
{"version":3,"file":"child-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/child-observable-class.mts"],"names":[],"mappings":"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"}
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { hasKey, isRecord } from 'ts-data-forge';
|
|
6
6
|
import { panic } from 'ts-std-forge';
|
|
7
7
|
import { maxDepth } from '../utils/index.mjs';
|
|
8
8
|
import { ManagerObservableClass } from './manager-observable-class.mjs';
|
|
9
9
|
import { ObservableBaseClass } from './observable-base-class.mjs';
|
|
10
|
-
import { toNode
|
|
10
|
+
import { toNode } from './observable-node.mjs';
|
|
11
11
|
import { runAfterPropagation } from './propagation-state.mjs';
|
|
12
12
|
|
|
13
13
|
|
|
@@ -20,7 +20,6 @@ import { runAfterPropagation } from './propagation-state.mjs';
|
|
|
20
20
|
export class SyncChildObservableClass extends ObservableBaseClass {
|
|
21
21
|
#mut_isAttached;
|
|
22
22
|
parents;
|
|
23
|
-
managers;
|
|
24
23
|
constructor({ parents, depth = 1 + maxDepth(parents), initialValue, }) {
|
|
25
24
|
super({
|
|
26
25
|
kind: 'sync child',
|
|
@@ -28,7 +27,6 @@ export class SyncChildObservableClass extends ObservableBaseClass {
|
|
|
28
27
|
initialValue,
|
|
29
28
|
});
|
|
30
29
|
this.parents = parents;
|
|
31
|
-
this.managers = managersOf(parents);
|
|
32
30
|
this.#mut_isAttached = false;
|
|
33
31
|
}
|
|
34
32
|
|
|
@@ -37,14 +35,13 @@ export class SyncChildObservableClass extends ObservableBaseClass {
|
|
|
37
35
|
|
|
38
36
|
|
|
39
37
|
|
|
40
|
-
|
|
41
38
|
attach() {
|
|
42
39
|
this.adoptIntoCurrentScope();
|
|
43
40
|
if (this.isCompleted || this.parents.every((p) => p.isCompleted)) {
|
|
44
41
|
this.complete();
|
|
45
42
|
}
|
|
46
43
|
else {
|
|
47
|
-
registerChild(this
|
|
44
|
+
registerChild(this);
|
|
48
45
|
this.#mut_isAttached = true;
|
|
49
46
|
}
|
|
50
47
|
}
|
|
@@ -53,7 +50,7 @@ export class SyncChildObservableClass extends ObservableBaseClass {
|
|
|
53
50
|
return;
|
|
54
51
|
}
|
|
55
52
|
this.#mut_isAttached = false;
|
|
56
|
-
unregisterChild(this
|
|
53
|
+
unregisterChild(this);
|
|
57
54
|
}
|
|
58
55
|
tryComplete() {
|
|
59
56
|
if (shouldComplete(this)) {
|
|
@@ -105,7 +102,7 @@ export class AsyncChildObservableClass extends ManagerObservableClass {
|
|
|
105
102
|
this.complete();
|
|
106
103
|
}
|
|
107
104
|
else {
|
|
108
|
-
registerChild(this
|
|
105
|
+
registerChild(this);
|
|
109
106
|
this.#mut_isAttached = true;
|
|
110
107
|
}
|
|
111
108
|
}
|
|
@@ -114,7 +111,7 @@ export class AsyncChildObservableClass extends ManagerObservableClass {
|
|
|
114
111
|
return;
|
|
115
112
|
}
|
|
116
113
|
this.#mut_isAttached = false;
|
|
117
|
-
unregisterChild(this
|
|
114
|
+
unregisterChild(this);
|
|
118
115
|
}
|
|
119
116
|
tryComplete() {
|
|
120
117
|
if (shouldComplete(this)) {
|
|
@@ -132,6 +129,34 @@ export class AsyncChildObservableClass extends ManagerObservableClass {
|
|
|
132
129
|
this.complete();
|
|
133
130
|
});
|
|
134
131
|
}
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
subscribeInner(inner, updateToken) {
|
|
148
|
+
let mut_isSubscribing = true;
|
|
149
|
+
const subscription = inner.subscribe((value) => {
|
|
150
|
+
if (mut_isSubscribing) {
|
|
151
|
+
this.setNext(value, updateToken);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
this.startUpdate(value);
|
|
155
|
+
}
|
|
156
|
+
});
|
|
157
|
+
mut_isSubscribing = false;
|
|
158
|
+
return subscription;
|
|
159
|
+
}
|
|
135
160
|
}
|
|
136
161
|
|
|
137
162
|
|
|
@@ -156,38 +181,24 @@ export class InitializedSyncChildObservableClass extends SyncChildObservableClas
|
|
|
156
181
|
const shouldComplete = (child) => !child.isCompleted &&
|
|
157
182
|
(child.parents.every((p) => p.isCompleted) || child.canEmitNoMore());
|
|
158
183
|
|
|
159
|
-
const registerChild = (child
|
|
184
|
+
const registerChild = (child) => {
|
|
160
185
|
if (checksCircularDependency) {
|
|
161
186
|
detectCircularDependency(child);
|
|
162
187
|
}
|
|
163
188
|
for (const p of child.parents) {
|
|
164
189
|
toNode(p).addChild(child);
|
|
165
190
|
}
|
|
166
|
-
for (const m of managers) {
|
|
167
|
-
m.addDescendant(child);
|
|
168
|
-
}
|
|
169
191
|
};
|
|
170
192
|
|
|
171
193
|
|
|
172
194
|
|
|
173
195
|
|
|
174
196
|
|
|
175
|
-
|
|
176
|
-
const unregisterChild = (child, managers) => {
|
|
197
|
+
const unregisterChild = (child) => {
|
|
177
198
|
for (const p of child.parents) {
|
|
178
199
|
toNode(p).deleteChild(child);
|
|
179
200
|
}
|
|
180
|
-
for (const m of managers) {
|
|
181
|
-
m.deleteDescendant(child);
|
|
182
|
-
}
|
|
183
201
|
};
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const managersOf = (parents) => Arr.isFixedLengthArray(1, parents)
|
|
189
|
-
? toNode(parents[0]).managers
|
|
190
|
-
: Array.from(new Set(parents.flatMap((p) => toNode(p).managers)));
|
|
191
202
|
const isDevelopmentProcess = () => {
|
|
192
203
|
const proc = Reflect.get(globalThis, 'process');
|
|
193
204
|
return (isRecord(proc) &&
|
|
@@ -203,6 +214,9 @@ const isDevelopmentProcess = () => {
|
|
|
203
214
|
|
|
204
215
|
|
|
205
216
|
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
206
220
|
export const checksCircularDependency = isDevelopmentProcess();
|
|
207
221
|
|
|
208
222
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-observable-class.mjs","sourceRoot":"","sources":["../../../src/core/class/child-observable-class.mts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"child-observable-class.mjs","sourceRoot":"","sources":["../../../src/core/class/child-observable-class.mts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,10 @@ export type AsyncChildObservableTools<A> = Readonly<{
|
|
|
37
37
|
* hooks the factory calls, which read the state `init` creates.
|
|
38
38
|
*/
|
|
39
39
|
export type SyncChildObservableHooks = Readonly<{
|
|
40
|
-
/**
|
|
40
|
+
/**
|
|
41
|
+
* Called with the token of every update in which a parent of this
|
|
42
|
+
* observable emitted.
|
|
43
|
+
*/
|
|
41
44
|
tryUpdate: (updateToken: UpdateToken) => void;
|
|
42
45
|
/**
|
|
43
46
|
* Whether this observable can emit nothing more although some parent is
|
|
@@ -84,10 +87,10 @@ export type InitializedChildObservableConfig<A, P extends NonEmptyUnknownList> =
|
|
|
84
87
|
* other synchronous operators are built with it.
|
|
85
88
|
*
|
|
86
89
|
* `init` runs during construction and receives the tools. It returns
|
|
87
|
-
* `tryUpdate`, which is called with the token of every update
|
|
88
|
-
* this observable — a parent that did not emit in that
|
|
89
|
-
* `updateToken`; to emit, call `setNext` with the
|
|
90
|
-
* object holding `tryUpdate` and the other hooks
|
|
90
|
+
* `tryUpdate`, which is called with the token of every update in which some
|
|
91
|
+
* parent of this observable emitted — a parent that did not emit in that
|
|
92
|
+
* update has a different `updateToken`; to emit, call `setNext` with the
|
|
93
|
+
* token received — or an object holding `tryUpdate` and the other hooks
|
|
91
94
|
* ({@link SyncChildObservableHooks}). State the hooks share can live inside
|
|
92
95
|
* `init`, next to the teardown it registers with the `onComplete` tool.
|
|
93
96
|
* `init` may complete the observable; it is then never registered to its
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-child-observable.d.mts","sourceRoot":"","sources":["../../../src/core/class/create-child-observable.mts"],"names":[],"mappings":"AAIA,OAAO,EAAO,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,IAAI,EACL,MAAM,oBAAoB,CAAC;AAM5B;;;GAGG;AACH,MAAM,MAAM,wBAAwB,CAAC,CAAC,IAAI,QAAQ,CAAC;IACjD,sEAAsE;IACtE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAE1D,WAAW,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;IAErB;;;OAGG;IACH,wBAAwB,EAAE,MAAM,IAAI,CAAC;IAErC;;;;;;OAMG;IACH,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;CAC5C,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,MAAM,yBAAyB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAClD,sEAAsE;IACtE,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;CACrC,CAAC,GACA,wBAAwB,CAAC,CAAC,CAAC,CAAC;AAE9B;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAC;IAC9C
|
|
1
|
+
{"version":3,"file":"create-child-observable.d.mts","sourceRoot":"","sources":["../../../src/core/class/create-child-observable.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/class/create-child-observable.mts"],"names":[],"mappings":"AAAA,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,GAAG,EAA4B,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAS3C,OAAO,EACL,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/class/create-child-observable.mts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,14 @@
|
|
|
1
|
-
import type { Optional } from 'ts-data-forge';
|
|
2
1
|
import type { ManagerObservableKind } from '../types/index.mjs';
|
|
3
2
|
import { ObservableBaseClass } from './observable-base-class.mjs';
|
|
4
|
-
import type { ChildNode, ManagerNode } from './observable-node.mjs';
|
|
5
3
|
/**
|
|
6
4
|
* The base of the observables that start updates of their own: a root, and
|
|
7
5
|
* an async child (`debounce`, `switchMap`), which emits later than its
|
|
8
|
-
* parents do.
|
|
9
|
-
*
|
|
10
|
-
* parents' values of that
|
|
6
|
+
* parents do. Its update visits, shallowest first, the nodes its value
|
|
7
|
+
* reaches: each node that emits puts its children in the update's queue
|
|
8
|
+
* (`propagation-state.mts`), so that each sees its parents' values of that
|
|
9
|
+
* update (no glitch) and a node no value reached is not visited.
|
|
11
10
|
*/
|
|
12
11
|
export declare class ManagerObservableClass<A, Kind extends ManagerObservableKind, Depth extends number> extends ObservableBaseClass<A, Kind, Depth> {
|
|
13
|
-
#private;
|
|
14
|
-
/** The managers this node's descendants register to: itself. */
|
|
15
|
-
readonly managers: readonly ManagerNode[];
|
|
16
|
-
constructor(config: Readonly<{
|
|
17
|
-
kind: Kind;
|
|
18
|
-
depth: Depth;
|
|
19
|
-
initialValue: Optional<A>;
|
|
20
|
-
}>);
|
|
21
|
-
addDescendant(child: ChildNode): void;
|
|
22
|
-
deleteDescendant(child: ChildNode): void;
|
|
23
12
|
/** Emits `nextValue` and propagates it to the descendants. */
|
|
24
13
|
protected startUpdate(nextValue: A): void;
|
|
25
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/manager-observable-class.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/manager-observable-class.mts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AASlE;;;;;;;GAOG;AACH,qBAAa,sBAAsB,CACjC,CAAC,EACD,IAAI,SAAS,qBAAqB,EAClC,KAAK,SAAS,MAAM,CACpB,SAAQ,mBAAmB,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC;IAC3C,8DAA8D;IAC9D,SAAS,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAkBxC;CACF"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { issueUpdateToken } from '../utils/index.mjs';
|
|
2
1
|
import { ObservableBaseClass } from './observable-base-class.mjs';
|
|
3
|
-
import { beginPropagation, endPropagation } from './propagation-state.mjs';
|
|
2
|
+
import { beginPropagation, closeUpdate, drainUpdate, endPropagation, openUpdate, } from './propagation-state.mjs';
|
|
4
3
|
|
|
5
4
|
|
|
6
5
|
|
|
@@ -8,87 +7,11 @@ import { beginPropagation, endPropagation } from './propagation-state.mjs';
|
|
|
8
7
|
|
|
9
8
|
|
|
10
9
|
|
|
11
|
-
export class ManagerObservableClass extends ObservableBaseClass {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
#mut_propagationOrder;
|
|
27
|
-
|
|
28
|
-
#mut_isPropagating;
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
10
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
managers;
|
|
38
|
-
constructor(config) {
|
|
39
|
-
super(config);
|
|
40
|
-
this.managers = [this];
|
|
41
|
-
this.#mut_propagationOrder = [];
|
|
42
|
-
this.#mut_isPropagating = false;
|
|
43
|
-
this.#mut_joinedDuringUpdate = undefined;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
#propagate(updateToken) {
|
|
50
|
-
for (const bucket of this.#mut_propagationOrder) {
|
|
51
|
-
if (bucket !== undefined) {
|
|
52
|
-
for (const c of bucket) {
|
|
53
|
-
|
|
54
|
-
if (this.#mut_joinedDuringUpdate?.has(c) !== true) {
|
|
55
|
-
c.tryUpdate(updateToken);
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
addDescendant(child) {
|
|
62
|
-
const descendants = this.#mut_propagationOrder;
|
|
63
|
-
const index = child.depth - this.depth - 1;
|
|
64
|
-
const mut_bucket = descendants[index];
|
|
65
|
-
if (mut_bucket === undefined) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
this.#mut_propagationOrder = Array.from({ length: Math.max(descendants.length, index + 1) }, (_, i) => (i === index ? new Set([child]) : descendants[i]));
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
mut_bucket.add(child);
|
|
72
|
-
}
|
|
73
|
-
if (!this.#mut_isPropagating) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
this.#mut_joinedDuringUpdate ??= new Set();
|
|
77
|
-
this.#mut_joinedDuringUpdate.add(child);
|
|
78
|
-
}
|
|
79
|
-
deleteDescendant(child) {
|
|
80
|
-
|
|
81
|
-
this.#mut_propagationOrder[child.depth - this.depth - 1]?.delete(child);
|
|
82
|
-
}
|
|
11
|
+
export class ManagerObservableClass extends ObservableBaseClass {
|
|
83
12
|
|
|
84
13
|
startUpdate(nextValue) {
|
|
85
|
-
const updateToken =
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
const wasPropagating = this.#mut_isPropagating;
|
|
89
|
-
const joinedBefore = this.#mut_joinedDuringUpdate;
|
|
90
|
-
this.#mut_isPropagating = true;
|
|
91
|
-
this.#mut_joinedDuringUpdate = undefined;
|
|
14
|
+
const updateToken = openUpdate(this.depth);
|
|
92
15
|
beginPropagation(updateToken);
|
|
93
16
|
|
|
94
17
|
|
|
@@ -96,19 +19,10 @@ export class ManagerObservableClass extends ObservableBaseClass {
|
|
|
96
19
|
|
|
97
20
|
try {
|
|
98
21
|
this.setNext(nextValue, updateToken);
|
|
99
|
-
|
|
22
|
+
drainUpdate(updateToken);
|
|
100
23
|
}
|
|
101
24
|
finally {
|
|
102
|
-
|
|
103
|
-
const joinedNow = this.#mut_joinedDuringUpdate;
|
|
104
|
-
this.#mut_isPropagating = wasPropagating;
|
|
105
|
-
this.#mut_joinedDuringUpdate = joinedBefore;
|
|
106
|
-
if (wasPropagating && joinedNow !== undefined) {
|
|
107
|
-
this.#mut_joinedDuringUpdate ??= new Set();
|
|
108
|
-
for (const c of joinedNow) {
|
|
109
|
-
this.#mut_joinedDuringUpdate.add(c);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
25
|
+
closeUpdate(updateToken);
|
|
112
26
|
endPropagation();
|
|
113
27
|
}
|
|
114
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager-observable-class.mjs","sourceRoot":"","sources":["../../../src/core/class/manager-observable-class.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"manager-observable-class.mjs","sourceRoot":"","sources":["../../../src/core/class/manager-observable-class.mts"],"names":[],"mappings":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,GACX,MAAM,yBAAyB,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,OAAO,sBAIX,SAAQ,mBAAmC;IAC3C,8DAA8D;IACpD,WAAW,CAAC,SAAY;QAChC,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAE3C,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAE9B,uEAAuE;QACvE,yEAAyE;QACzE,mEAAmE;QACnE,uCAAuC;QACvC,IAAI,CAAC;YACH,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YAErC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC3B,CAAC;gBAAS,CAAC;YACT,WAAW,CAAC,WAAW,CAAC,CAAC;YAEzB,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -41,9 +41,16 @@ export declare class ObservableBaseClass<A, Kind extends ObservableKind, Depth e
|
|
|
41
41
|
get hasSubscriber(): boolean;
|
|
42
42
|
get hasChild(): boolean;
|
|
43
43
|
hasActiveChild(): boolean;
|
|
44
|
+
get queuedFor(): UpdateToken | undefined;
|
|
45
|
+
setQueuedFor(updateToken: UpdateToken): void;
|
|
44
46
|
addChild(child: ChildNode): void;
|
|
45
47
|
deleteChild(child: ChildNode): void;
|
|
46
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Stores `nextValue` as the current value, queues the children for the
|
|
50
|
+
* update `updateToken`, and notifies subscribers. The children are queued
|
|
51
|
+
* first, so that a child a subscriber creates, which starts from this
|
|
52
|
+
* value, is not visited for it again.
|
|
53
|
+
*/
|
|
47
54
|
protected setNext(nextValue: A, updateToken: UpdateToken): void;
|
|
48
55
|
/**
|
|
49
56
|
* Called with the token of every update that reaches this observable; a
|
|
@@ -82,7 +89,7 @@ export declare class ObservableBaseClass<A, Kind extends ObservableKind, Depth e
|
|
|
82
89
|
* subscribers hear of it.
|
|
83
90
|
*/
|
|
84
91
|
protected teardown(): void;
|
|
85
|
-
/** Takes a completed child out of its parents'
|
|
92
|
+
/** Takes a completed child out of its parents' lists. */
|
|
86
93
|
protected detach(): void;
|
|
87
94
|
/**
|
|
88
95
|
* Joins the scope whose `run` is executing (`createScope`), if any. A node
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-base-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EAGd,YAAY,EACZ,WAAW,EACX,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,eAAe,EAGhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"observable-base-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,wBAAwB,EACxB,UAAU,EACV,cAAc,EACd,cAAc,EAGd,YAAY,EACZ,WAAW,EACX,wBAAwB,EACzB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,eAAe,EAGhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,mBAAmB,CAC9B,CAAC,EACD,IAAI,SAAS,cAAc,EAC3B,KAAK,SAAS,MAAM,CACpB,YAAW,cAAc,CAAC,CAAC,CAAC;;IAQ5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,SAAiB,CAAC,eAAe,CAAC,EAAE,IAAI,CAAC;IAEzC,YAAY,EACV,IAAI,EACJ,KAAK,EACL,YAAY,GACb,EAAE,QAAQ,CAAC;QACV,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,KAAK,CAAC;QACb,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC,EAoBD;IAED,WAAW,IAAI,QAAQ,CAAC,CAAC,CAAC,CAEzB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,aAAa,IAAI,OAAO,CAI3B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,cAAc,IAAI,OAAO,CAUxB;IAED,IAAI,SAAS,IAAI,WAAW,GAAG,SAAS,CAEvC;IAED,YAAY,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAE3C;IAED,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAQ/B;IAED,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAElC;IAED;;;;;OAKG;IACH,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAc9D;IAED;;;;;;OAMG;IAEH,SAAS,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAEzC;IAED;;;;OAIG;IAEH,WAAW,IAAI,IAAI,CAAG;IAEtB;;;;;OAKG;IACH,QAAQ,IAAI,IAAI,CAQf;IAED;;;OAGG;IACH,OAAO,IAAI,IAAI,CAkCd;IAED;;;OAGG;IAEH,SAAS,CAAC,KAAK,IAAI,IAAI,CAAG;IAE1B;;;;OAIG;IAEH,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAG;IAE7B,yDAAyD;IAEzD,SAAS,CAAC,MAAM,IAAI,IAAI,CAAG;IAE3B;;;;OAIG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI,CAUtC;IAKD,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAE5E,IAAI,CAAC,CAAC,EACJ,QAAQ,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GACxE,UAAU,CAAC,CAAC,CAAC,CAAC;IAUjB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,YAAY,CAuBvE;CACF"}
|