synstate 3.2.0 ā 3.2.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 +1 -1
- package/dist/core/base/create-child-observable.d.mts.map +1 -1
- package/dist/core/base/create-child-observable.mjs +60 -2
- package/dist/core/base/create-child-observable.mjs.map +1 -1
- package/dist/core/base/create-observable-base.d.mts +21 -4
- package/dist/core/base/create-observable-base.d.mts.map +1 -1
- package/dist/core/base/create-observable-base.mjs +69 -12
- package/dist/core/base/create-observable-base.mjs.map +1 -1
- package/dist/core/base/create-root-observable.d.mts.map +1 -1
- package/dist/core/base/create-root-observable.mjs +2 -1
- package/dist/core/base/create-root-observable.mjs.map +1 -1
- package/dist/core/types/observable.d.mts +2 -0
- package/dist/core/types/observable.d.mts.map +1 -1
- package/dist/core/types/observable.mjs.map +1 -1
- package/package.json +10 -10
- package/src/core/base/create-child-observable.mts +78 -2
- package/src/core/base/create-observable-base.mts +108 -30
- package/src/core/base/create-root-observable.mts +3 -1
- package/src/core/types/observable.mts +2 -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 -->~4.
|
|
27
|
+
- š **Lightweight**: <!-- bundle-size:synstate -->~4.9 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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-child-observable.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EAGxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,oBAAoB,CAAC;AAQ5B;;;;GAIG;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;CACtB,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,KAAK,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,IAAI,QAAQ,CAAC;IACvE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,CAAC,SAAS,mBAAmB,IAC3B,yBAAyB,CAAC,CAAC,CAAC,GAC9B,QAAQ,CAAC;IACP,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEL,MAAM,MAAM,gCAAgC,CAC1C,CAAC,EACD,CAAC,SAAS,mBAAmB,IAC3B,yBAAyB,CAAC,CAAC,CAAC,GAC9B,QAAQ,CAAC;IACP,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEL;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,EAAE,CAAC,SAAS,mBAAmB,iDAMrE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,mBACb,CACf,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,mBAAmB,CAAC,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"create-child-observable.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAGL,KAAK,oBAAoB,EAEzB,KAAK,8BAA8B,EACnC,KAAK,mBAAmB,EAGxB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EAChB,KAAK,IAAI,EACV,MAAM,oBAAoB,CAAC;AAQ5B;;;;GAIG;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;CACtB,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,KAAK,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,IAAI,QAAQ,CAAC;IACvE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,CAAC,SAAS,mBAAmB,IAC3B,yBAAyB,CAAC,CAAC,CAAC,GAC9B,QAAQ,CAAC;IACP,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;CAC3B,CAAC,CAAC;AAEL,MAAM,MAAM,gCAAgC,CAC1C,CAAC,EACD,CAAC,SAAS,mBAAmB,IAC3B,yBAAyB,CAAC,CAAC,CAAC,GAC9B,QAAQ,CAAC;IACP,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;CACvB,CAAC,CAAC;AAEL;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GAAI,CAAC,EAAE,CAAC,SAAS,mBAAmB,iDAMrE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,mBACb,CACf,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,mBAAmB,CAAC,CAAC,EAAE,CAAC,CA8D1B,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oCAAoC,GAC/C,CAAC,EACD,CAAC,SAAS,mBAAmB,UAErB,gCAAgC,CAAC,CAAC,EAAE,CAAC,CAAC,mBAC7B,CACf,KAAK,EAAE,wBAAwB,CAAC,CAAC,CAAC,KAC/B,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,8BAA8B,CAAC,CAAC,EAAE,CAAC,CASrC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,CAAC,EAAE,CAAC,SAAS,mBAAmB,iDAMtE,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAAC,mBACb,CACf,KAAK,EAAE,yBAAyB,CAAC,CAAC,CAAC,KAChC,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,KACtC,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAkE3B,CAAC"}
|
|
@@ -15,15 +15,29 @@ import { assembleObservable, createManagerObservableParts, createObservableBaseH
|
|
|
15
15
|
|
|
16
16
|
export const createSyncChildObservable = ({ parents, depth = 1 + maxDepth(parents), initialValue, onComplete, }, createTryUpdate) => {
|
|
17
17
|
const handle = createObservableBaseHandle(initialValue);
|
|
18
|
+
|
|
19
|
+
let mut_self = undefined;
|
|
18
20
|
const complete = () => {
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
if (handle.isCompleted()) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
19
27
|
onComplete?.();
|
|
20
28
|
handle.completeBase();
|
|
29
|
+
if (mut_self !== undefined) {
|
|
30
|
+
unregisterChild(mut_self, parents);
|
|
31
|
+
}
|
|
21
32
|
|
|
22
33
|
for (const par of parents) {
|
|
23
34
|
par.tryComplete();
|
|
24
35
|
}
|
|
25
36
|
};
|
|
26
37
|
const tryComplete = () => {
|
|
38
|
+
if (handle.isCompleted()) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
27
41
|
tryCompleteChild({
|
|
28
42
|
hasSubscriber: handle.hasSubscriber(),
|
|
29
43
|
hasActiveChild: handle.hasActiveChild(),
|
|
@@ -46,6 +60,7 @@ export const createSyncChildObservable = ({ parents, depth = 1 + maxDepth(parent
|
|
|
46
60
|
extra: { parents },
|
|
47
61
|
});
|
|
48
62
|
registerChild(observable, parents);
|
|
63
|
+
mut_self = observable;
|
|
49
64
|
return observable;
|
|
50
65
|
};
|
|
51
66
|
|
|
@@ -70,16 +85,30 @@ export const createInitializedSyncChildObservable = (config, createTryUpdate) =>
|
|
|
70
85
|
|
|
71
86
|
export const createAsyncChildObservable = ({ parents, depth = 1 + maxDepth(parents), initialValue, onComplete, }, createTryUpdate) => {
|
|
72
87
|
const handle = createObservableBaseHandle(initialValue);
|
|
73
|
-
const { addDescendant, startUpdate } = createManagerObservableParts(handle);
|
|
88
|
+
const { addDescendant, deleteDescendant, startUpdate } = createManagerObservableParts(handle);
|
|
89
|
+
|
|
90
|
+
let mut_self = undefined;
|
|
74
91
|
const complete = () => {
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
if (handle.isCompleted()) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
75
98
|
onComplete?.();
|
|
76
99
|
handle.completeBase();
|
|
100
|
+
if (mut_self !== undefined) {
|
|
101
|
+
unregisterChild(mut_self, parents);
|
|
102
|
+
}
|
|
77
103
|
|
|
78
104
|
for (const par of parents) {
|
|
79
105
|
par.tryComplete();
|
|
80
106
|
}
|
|
81
107
|
};
|
|
82
108
|
const tryComplete = () => {
|
|
109
|
+
if (handle.isCompleted()) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
83
112
|
tryCompleteChild({
|
|
84
113
|
hasSubscriber: handle.hasSubscriber(),
|
|
85
114
|
hasActiveChild: handle.hasActiveChild(),
|
|
@@ -100,9 +129,10 @@ export const createAsyncChildObservable = ({ parents, depth = 1 + maxDepth(paren
|
|
|
100
129
|
tryUpdate,
|
|
101
130
|
tryComplete,
|
|
102
131
|
complete,
|
|
103
|
-
extra: { parents, addDescendant },
|
|
132
|
+
extra: { parents, addDescendant, deleteDescendant },
|
|
104
133
|
});
|
|
105
134
|
registerChild(observable, parents);
|
|
135
|
+
mut_self = observable;
|
|
106
136
|
return observable;
|
|
107
137
|
};
|
|
108
138
|
|
|
@@ -171,6 +201,34 @@ const registerChild = (child, parents) => {
|
|
|
171
201
|
}
|
|
172
202
|
}
|
|
173
203
|
};
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
const unregisterChild = (child, parents) => {
|
|
215
|
+
for (const p of parents) {
|
|
216
|
+
p.deleteChild(child);
|
|
217
|
+
}
|
|
218
|
+
const mut_rest = Array.from(parents);
|
|
219
|
+
while (Arr.isNonEmpty(mut_rest)) {
|
|
220
|
+
const p = mut_rest.pop();
|
|
221
|
+
if (p === undefined) {
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
if (isManagerObservable(p)) {
|
|
225
|
+
p.deleteDescendant(child);
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
mut_rest.push(...p.parents);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
};
|
|
174
232
|
const tryCompleteChild = ({ hasSubscriber, hasActiveChild, parents, complete, }) => {
|
|
175
233
|
|
|
176
234
|
if (parents.every((r) => r.isCompleted)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAA4B,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAUpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAwDtC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,EACE,OAAO,EACP,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAC7B,YAAY,EACZ,UAAU,GACkB,EAC9B,eAEuC,EACZ,EAAE;IAC7B,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,UAAU,EAAE,EAAE,CAAC;QAEf,MAAM,CAAC,YAAY,EAAE,CAAC;QAEtB,uBAAuB;QACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,gBAAgB,CAAC;YACf,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE;YACrC,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE;YACvC,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,UAAU,GAA8B,kBAAkB,CAAC;QAC/D,IAAI,EAAE,YAAY;QAClB,KAAK;QACL,MAAM;QACN,SAAS;QACT,WAAW;QACX,QAAQ;QACR,KAAK,EAAE,EAAE,OAAO,EAAE;KACnB,CAAC,CAAC;IAEH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEnC,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAIlD,MAA8C,EAC9C,eAEuC,EACD,EAAE;IACxC,MAAM,UAAU,GAAG,yBAAyB,CAAO,MAAM,EAAE,eAAe,CAAC,CAAC;IAE5E,OAAO;IACL,2EAA2E;IAC3E,uCAAuC;IACvC,4DAA4D;IAC5D,UAAkD,CACnD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,EACE,OAAO,EACP,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAC7B,YAAY,EACZ,UAAU,GACkB,EAC9B,eAEuC,EACX,EAAE;IAC9B,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"create-child-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-child-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAA4B,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAErC,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAUpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AAwDtC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,CACvC,EACE,OAAO,EACP,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAC7B,YAAY,EACZ,UAAU,GACkB,EAC9B,eAEuC,EACZ,EAAE;IAC7B,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,uDAAuD;IACvD,IAAI,QAAQ,GAAmC,SAAS,CAAC;IAEzD,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,wEAAwE;QACxE,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,UAAU,EAAE,EAAE,CAAC;QAEf,MAAM,CAAC,YAAY,EAAE,CAAC;QAEtB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC;YACf,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE;YACrC,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE;YACvC,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;KACT,CAAC,CAAC;IAEH,MAAM,UAAU,GAA8B,kBAAkB,CAAC;QAC/D,IAAI,EAAE,YAAY;QAClB,KAAK;QACL,MAAM;QACN,SAAS;QACT,WAAW;QACX,QAAQ;QACR,KAAK,EAAE,EAAE,OAAO,EAAE;KACnB,CAAC,CAAC;IAEH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEnC,QAAQ,GAAG,UAAU,CAAC;IAEtB,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAAG,CAIlD,MAA8C,EAC9C,eAEuC,EACD,EAAE;IACxC,MAAM,UAAU,GAAG,yBAAyB,CAAO,MAAM,EAAE,eAAe,CAAC,CAAC;IAE5E,OAAO;IACL,2EAA2E;IAC3E,uCAAuC;IACvC,4DAA4D;IAC5D,UAAkD,CACnD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,EACE,OAAO,EACP,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,EAC7B,YAAY,EACZ,UAAU,GACkB,EAC9B,eAEuC,EACX,EAAE;IAC9B,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,GACpD,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAEvC,uDAAuD;IACvD,IAAI,QAAQ,GAAmC,SAAS,CAAC;IAEzD,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,wEAAwE;QACxE,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,UAAU,EAAE,EAAE,CAAC;QAEf,MAAM,CAAC,YAAY,EAAE,CAAC;QAEtB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACrC,CAAC;QAED,uBAAuB;QACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;YAC1B,GAAG,CAAC,WAAW,EAAE,CAAC;QACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC;YACf,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE;YACrC,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE;YACvC,OAAO;YACP,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,eAAe,CAAC;QAChC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;QACR,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,UAAU,GAA+B,kBAAkB,CAAC;QAChE,IAAI,EAAE,aAAa;QACnB,KAAK;QACL,MAAM;QACN,SAAS;QACT,WAAW;QACX,QAAQ;QACR,KAAK,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE;KACpD,CAAC,CAAC;IAEH,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAEnC,QAAQ,GAAG,UAAU,CAAC;IAEtB,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,aAAa;AAEb;;;;;GAKG;AACH,MAAM,yBAAyB,GAAG,CAChC,IAAyB,EACzB,WAAqC,EACrC,UAAoC,EAC3B,EAAE;IACX,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAExB,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAClC,IAAI,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC/D,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC/B,KAA+B,EAC/B,OAAuC,EACjC,EAAE;IACR,MAAM,WAAW,GAAG,IAAI,GAAG,EAAgB,CAAC;IAE5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAErD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,yBAAyB,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC;YAC/D,+DAA+D;YAC/D,gEAAgE;YAChE,uEAAuE;YACvE,oEAAoE;YACpE,KAAK,CACH,kGAAkG,CACnG,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,aAAa,GAAG,CACpB,KAAyB,EACzB,OAAsC,EAChC,EAAE;IACR,wBAAwB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpB,CAAC;IAED,qDAAqD;IACrD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM;QACR,CAAC;QAED,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,eAAe,GAAG,CACtB,KAAyB,EACzB,OAAsC,EAChC,EAAE;IACR,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAErC,OAAO,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAEzB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YACpB,MAAM;QACR,CAAC;QAED,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3B,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAK,EAC5B,aAAa,EACb,cAAc,EACd,OAAO,EACP,QAAQ,GAMR,EAAQ,EAAE;IACV,qCAAqC;IACrC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;QACxC,QAAQ,EAAE,CAAC;QAEX,OAAO;IACT,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC,aAAa,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,uBAAuB;IACvB,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,GAAG,CAAC,WAAW,EAAE,CAAC;IACpB,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -47,6 +47,11 @@ export type ObservableBaseHandle<A> = Readonly<{
|
|
|
47
47
|
*/
|
|
48
48
|
attach: (writers: ObservableStateWriters) => void;
|
|
49
49
|
addChild: <B>(child: ChildObservable<B>) => void;
|
|
50
|
+
/**
|
|
51
|
+
* Forgets `child`, which a completed child calls on each of its parents so
|
|
52
|
+
* that nothing keeps a reference to it (#2134).
|
|
53
|
+
*/
|
|
54
|
+
deleteChild: <B>(child: ChildObservable<B>) => void;
|
|
50
55
|
getSnapshot: () => Optional<A>;
|
|
51
56
|
isCompleted: () => boolean;
|
|
52
57
|
updateToken: () => UpdateToken;
|
|
@@ -83,15 +88,27 @@ export declare const createObservableBaseHandle: <A>(initialValue: Optional<A>)
|
|
|
83
88
|
*/
|
|
84
89
|
export type ManagerObservableParts<A> = Readonly<{
|
|
85
90
|
addDescendant: <B>(child: ChildObservable<B>) => void;
|
|
91
|
+
/**
|
|
92
|
+
* Takes `child` out of the propagation order, which a completed child calls
|
|
93
|
+
* on every manager it registered to (#2134).
|
|
94
|
+
*/
|
|
95
|
+
deleteDescendant: <B>(child: ChildObservable<B>) => void;
|
|
86
96
|
/** Emits `nextValue` and propagates the update to all descendants. */
|
|
87
97
|
startUpdate: (nextValue: A) => void;
|
|
88
98
|
}>;
|
|
89
99
|
/**
|
|
90
100
|
* Builds the manager half of a root or async-child observable. Both start their
|
|
91
|
-
* own update propagation, so both keep a
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
*
|
|
101
|
+
* own update propagation, so both keep a depth-ordered propagation list; this
|
|
102
|
+
* is the single implementation of it (the class version duplicated it across
|
|
103
|
+
* `RootObservableClass` and `AsyncChildObservableClass`).
|
|
104
|
+
*
|
|
105
|
+
* The descendants are kept in one insertion-ordered set per depth, so adding
|
|
106
|
+
* and removing one is O(1) apart from the first node of a new depth. The flat
|
|
107
|
+
* array `startUpdate` walks is rebuilt only when an update finds it stale: it
|
|
108
|
+
* used to be copied on every `addDescendant`, which made creating n nodes under
|
|
109
|
+
* one root O(n²). Rebuilding at the start of an update also keeps the walk a
|
|
110
|
+
* snapshot, as the copy-on-write array was ā a node created or completed while
|
|
111
|
+
* an update is propagating does not change which nodes that update visits.
|
|
95
112
|
*/
|
|
96
113
|
export declare const createManagerObservableParts: <A>(handle: ObservableBaseHandle<A>) => ManagerObservableParts<A>;
|
|
97
114
|
/** Default `tryUpdate` for observables that never receive parent updates. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-observable-base.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,KAAK,EAA0B,cAAc,EAAE,MAAM,eAAe,CAAC;AAC5E,OAAO,KAAK,EACV,eAAe,EAGf,cAAc,EACd,YAAY,EACZ,cAAc,EAId,YAAY,EACZ,WAAW,EAEZ,MAAM,oBAAoB,CAAC;AAS5B;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7C,EAAE,EAAE,YAAY,CAAC;IAEjB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,IAAI,CAAC;IAElD,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IAEjD,WAAW,EAAE,MAAM,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE/B,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B,WAAW,EAAE,MAAM,WAAW,CAAC;IAE/B,aAAa,EAAE,MAAM,OAAO,CAAC;IAE7B,cAAc,EAAE,MAAM,OAAO,CAAC;IAE9B,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI,KAAK,YAAY,CAAC;IAE7E,wEAAwE;IACxE,OAAO,EAAE,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAE1D;;;;;OAKG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,KAAK,sBAAsB,GAAG,QAAQ,CAAC;IACrC,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,CAAC;IAC7C,gBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3C,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;CACvC,CAAC,CAAC;AAEH,eAAO,MAAM,0BAA0B,GAAI,CAAC,gBAC5B,QAAQ,CAAC,CAAC,CAAC,KACxB,oBAAoB,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"create-observable-base.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"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"}
|
|
@@ -3,7 +3,9 @@ import { unreachable } from 'ts-std-forge';
|
|
|
3
3
|
import { binarySearch, issueObservableId, issueSubscriberId, issueUpdateToken, toSubscriber, } from '../utils/index.mjs';
|
|
4
4
|
export const createObservableBaseHandle = (initialValue) => {
|
|
5
5
|
const id = issueObservableId();
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
const mut_children = new Set();
|
|
7
9
|
const mut_subscribers = new Map();
|
|
8
10
|
let mut_currentValue = initialValue;
|
|
9
11
|
let mut_isCompleted = false;
|
|
@@ -20,7 +22,7 @@ export const createObservableBaseHandle = (initialValue) => {
|
|
|
20
22
|
writers.setIsCompleted(mut_isCompleted);
|
|
21
23
|
writers.setUpdateToken(mut_updateToken);
|
|
22
24
|
writers.setHasSubscriber(mut_subscribers.size > 0);
|
|
23
|
-
writers.setHasChild(
|
|
25
|
+
writers.setHasChild(mut_children.size > 0);
|
|
24
26
|
};
|
|
25
27
|
const addSubscriber = (s) => {
|
|
26
28
|
|
|
@@ -34,14 +36,25 @@ export const createObservableBaseHandle = (initialValue) => {
|
|
|
34
36
|
mut_writers?.setHasSubscriber(mut_subscribers.size > 0);
|
|
35
37
|
};
|
|
36
38
|
const addChild = (child) => {
|
|
37
|
-
mut_children
|
|
39
|
+
mut_children.add(child);
|
|
38
40
|
mut_writers?.setHasChild(true);
|
|
39
41
|
};
|
|
42
|
+
const deleteChild = (child) => {
|
|
43
|
+
mut_children.delete(child);
|
|
44
|
+
mut_writers?.setHasChild(mut_children.size > 0);
|
|
45
|
+
};
|
|
40
46
|
const getSnapshot = () => mut_currentValue;
|
|
41
47
|
const isCompleted = () => mut_isCompleted;
|
|
42
48
|
const updateToken = () => mut_updateToken;
|
|
43
49
|
const hasSubscriber = () => mut_subscribers.size > 0;
|
|
44
|
-
const hasActiveChild = () =>
|
|
50
|
+
const hasActiveChild = () => {
|
|
51
|
+
for (const c of mut_children) {
|
|
52
|
+
if (!c.isCompleted) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
};
|
|
45
58
|
const setNext = (nextValue, nextUpdateToken) => {
|
|
46
59
|
mut_updateToken = nextUpdateToken;
|
|
47
60
|
mut_writers?.setUpdateToken(nextUpdateToken);
|
|
@@ -65,6 +78,7 @@ export const createObservableBaseHandle = (initialValue) => {
|
|
|
65
78
|
mut_subscribers.clear();
|
|
66
79
|
mut_writers?.setHasSubscriber(false);
|
|
67
80
|
|
|
81
|
+
|
|
68
82
|
for (const o of mut_children) {
|
|
69
83
|
o.tryComplete();
|
|
70
84
|
}
|
|
@@ -92,6 +106,7 @@ export const createObservableBaseHandle = (initialValue) => {
|
|
|
92
106
|
id,
|
|
93
107
|
attach,
|
|
94
108
|
addChild,
|
|
109
|
+
deleteChild,
|
|
95
110
|
getSnapshot,
|
|
96
111
|
isCompleted,
|
|
97
112
|
updateToken,
|
|
@@ -109,25 +124,66 @@ export const createObservableBaseHandle = (initialValue) => {
|
|
|
109
124
|
|
|
110
125
|
|
|
111
126
|
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
|
|
112
134
|
export const createManagerObservableParts = (handle) => {
|
|
135
|
+
const mut_buckets = new Map();
|
|
136
|
+
|
|
137
|
+
let mut_depths = [];
|
|
138
|
+
|
|
113
139
|
let mut_propagationOrder = [];
|
|
114
|
-
const mut_descendantsIdSet = new Set();
|
|
115
140
|
const addDescendant = (child) => {
|
|
116
|
-
|
|
117
|
-
|
|
141
|
+
const mut_bucket = mut_buckets.get(child.depth);
|
|
142
|
+
if (mut_bucket === undefined) {
|
|
143
|
+
mut_buckets.set(child.depth, new Set([child]));
|
|
144
|
+
mut_depths = Arr.toInserted(mut_depths, binarySearch(mut_depths, child.depth), child.depth);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
if (mut_bucket.has(child)) {
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
mut_bucket.add(child);
|
|
151
|
+
}
|
|
152
|
+
mut_propagationOrder = undefined;
|
|
153
|
+
};
|
|
154
|
+
const deleteDescendant = (child) => {
|
|
155
|
+
|
|
156
|
+
const mut_bucket = mut_buckets.get(child.depth);
|
|
157
|
+
if (mut_bucket?.delete(child) === true) {
|
|
158
|
+
mut_propagationOrder = undefined;
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const getPropagationOrder = () => {
|
|
162
|
+
if (mut_propagationOrder !== undefined) {
|
|
163
|
+
return mut_propagationOrder;
|
|
164
|
+
}
|
|
165
|
+
const mut_order = [];
|
|
166
|
+
for (const depth of mut_depths) {
|
|
167
|
+
const bucket = mut_buckets.get(depth);
|
|
168
|
+
if (bucket !== undefined) {
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
for (const c of bucket) {
|
|
172
|
+
mut_order.push(c);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
118
175
|
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
mut_propagationOrder = Arr.toInserted(mut_propagationOrder, insertPos, child);
|
|
176
|
+
mut_propagationOrder = mut_order;
|
|
177
|
+
return mut_order;
|
|
122
178
|
};
|
|
123
179
|
const startUpdate = (nextValue) => {
|
|
124
180
|
const updateToken = issueUpdateToken();
|
|
125
181
|
handle.setNext(nextValue, updateToken);
|
|
126
|
-
for (const p of
|
|
182
|
+
for (const p of getPropagationOrder()) {
|
|
127
183
|
p.tryUpdate(updateToken);
|
|
128
184
|
}
|
|
129
185
|
};
|
|
130
|
-
return { addDescendant, startUpdate };
|
|
186
|
+
return { addDescendant, deleteDescendant, startUpdate };
|
|
131
187
|
};
|
|
132
188
|
|
|
133
189
|
export const createTryUpdateNotImplemented = () => tryUpdateNotImplemented;
|
|
@@ -165,6 +221,7 @@ export const assembleObservable = ({ kind, depth, handle, tryUpdate, tryComplete
|
|
|
165
221
|
kind,
|
|
166
222
|
depth,
|
|
167
223
|
addChild: handle.addChild,
|
|
224
|
+
deleteChild: handle.deleteChild,
|
|
168
225
|
getSnapshot: handle.getSnapshot,
|
|
169
226
|
isCompleted: false,
|
|
170
227
|
updateToken: handle.updateToken(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-observable-base.mjs","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAgB3C,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,GACb,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"create-observable-base.mjs","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-root-observable.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-root-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQ3E;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC5C,sEAAsE;IACtE,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;IAEpC,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7C,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAC/B,CAAC,EAGD,SAAS,SAAS,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAChE,KAAK,EACL,KAAK,CACN,gCAE6B,oBAAoB,CAAC,CAAC,CAAC,QAC/C,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,SAAS,KACjD,SAAS,GAAG,cAAc,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"create-root-observable.d.mts","sourceRoot":"","sources":["../../../src/core/base/create-root-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAQ3E;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC5C,sEAAsE;IACtE,WAAW,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,IAAI,CAAC;IAEpC,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC,CAAC;AAEH,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI,QAAQ,CAAC;IAC7C,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IAE1B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC,CAAC;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,oBAAoB,GAC/B,CAAC,EAGD,SAAS,SAAS,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,cAAc,CAChE,KAAK,EACL,KAAK,CACN,gCAE6B,oBAAoB,CAAC,CAAC,CAAC,QAC/C,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAAK,SAAS,KACjD,SAAS,GAAG,cAAc,CAAC,CAAC,CAqC9B,CAAC"}
|
|
@@ -14,7 +14,7 @@ import { assembleObservable, createManagerObservableParts, createObservableBaseH
|
|
|
14
14
|
|
|
15
15
|
export const createRootObservable = ({ initialValue, onComplete }, init) => {
|
|
16
16
|
const handle = createObservableBaseHandle(initialValue);
|
|
17
|
-
const { addDescendant, startUpdate } = createManagerObservableParts(handle);
|
|
17
|
+
const { addDescendant, deleteDescendant, startUpdate } = createManagerObservableParts(handle);
|
|
18
18
|
const complete = () => {
|
|
19
19
|
onComplete?.();
|
|
20
20
|
handle.completeBase();
|
|
@@ -39,6 +39,7 @@ export const createRootObservable = ({ initialValue, onComplete }, init) => {
|
|
|
39
39
|
extra: {
|
|
40
40
|
...extension,
|
|
41
41
|
addDescendant,
|
|
42
|
+
deleteDescendant,
|
|
42
43
|
},
|
|
43
44
|
});
|
|
44
45
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-root-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-root-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAuB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AA4BtC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CASlC,EAAE,YAAY,EAAE,UAAU,EAA2B,EACrD,IAAkD,EACnB,EAAE;IACjC,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"create-root-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-root-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAuB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AA4BtC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CASlC,EAAE,YAAY,EAAE,UAAU,EAA2B,EACrD,IAAkD,EACnB,EAAE;IACjC,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,MAAM,EAAE,aAAa,EAAE,gBAAgB,EAAE,WAAW,EAAE,GACpD,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,UAAU,EAAE,EAAE,CAAC;QAEf,MAAM,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YACxD,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAc,IAAI,CAAC;QAChC,WAAW;QACX,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC;QACxB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;QACR,MAAM;QACN,SAAS,EAAE,6BAA6B;QACxC,WAAW;QACX,QAAQ;QACR,KAAK,EAAE;YACL,GAAG,SAAS;YACZ,aAAa;YACb,gBAAgB;SACjB;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,MAAM,CACX,gBAAgB,CACd,oBAAoB,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACrE,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -21,6 +21,7 @@ type CreateObservableType<A, Kind extends ObservableKind> = Readonly<{
|
|
|
21
21
|
kind: Kind;
|
|
22
22
|
depth: Kind extends 'root' ? 0 : number;
|
|
23
23
|
addChild: <B>(child: ChildObservable<B>) => void;
|
|
24
|
+
deleteChild: <B>(child: ChildObservable<B>) => void;
|
|
24
25
|
getSnapshot: () => Optional<A>;
|
|
25
26
|
isCompleted: boolean;
|
|
26
27
|
updateToken: UpdateToken;
|
|
@@ -48,6 +49,7 @@ declare namespace ObservableTypeConverter {
|
|
|
48
49
|
}>;
|
|
49
50
|
export type ToManager<A, O extends CreateObservableType<A, 'async child' | 'root'>> = O & Readonly<{
|
|
50
51
|
addDescendant: <B>(child: ChildObservable<B>) => void;
|
|
52
|
+
deleteDescendant: <B>(child: ChildObservable<B>) => void;
|
|
51
53
|
}>;
|
|
52
54
|
export {};
|
|
53
55
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable.d.mts","sourceRoot":"","sources":["../../../src/core/types/observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,QAAQ,EAAE,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,eAAe,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAErE;;;;;;;;;;;;GAYG;AAEH,KAAK,oBAAoB,CAAC,CAAC,EAAE,IAAI,SAAS,cAAc,IAAI,QAAQ,CAAC;IACnE,EAAE,EAAE,YAAY,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;IAGX,KAAK,EAAE,IAAI,SAAS,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;IACxC,QAAQ,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"observable.d.mts","sourceRoot":"","sources":["../../../src/core/types/observable.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable.mjs","sourceRoot":"","sources":["../../../src/core/types/observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"observable.mjs","sourceRoot":"","sources":["../../../src/core/types/observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,MAAM,eAAe,CAAC;AAmKrE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,GAAkB,EACW,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,YAAY,CAAC;AAE5D,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,GAAkB,EACQ,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC;AAEnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,GAAkB,EACS,EAAE,CAC7B,GAAG,CAAC,IAAI,KAAK,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,CAAC;AAgB1D,sEAAsE;AACtE,uDAAuD;AAEvD,UAAU,CAAuD,IAAI,CAAC,CAAC;AAEvE,UAAU,CAAiD,IAAI,CAAC,CAAC;AAEjE,UAAU,CAAsC,GAAG,CAAC,CAAC;AAErD,UAAU,CAAiD,GAAG,CAAC,CAAC;AAEhE,UAAU,CAAgD,GAAG,CAAC,CAAC;AAE/D,UAAU,CAAiD,GAAG,CAAC,CAAC;AAEhE,UAAU,CAA2C,GAAG,CAAC,CAAC;AAE1D,UAAU,CAAuD,GAAG,CAAC,CAAC;AAEtE,UAAU,CAA8C,IAAI,CAAC,CAAC;AAE9D,UAAU,CAA8C,KAAK,CAAC,CAAC;AAE/D,UAAU,CAGR,IAAI,CAAC,CAAC;AAER,UAAU,CAA8C,KAAK,CAAC,CAAC;AAE/D,UAAU,CAGR,IAAI,CAAC,CAAC;AAER,UAAU,CAGR,KAAK,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "synstate",
|
|
3
|
-
"version": "3.2.
|
|
3
|
+
"version": "3.2.1",
|
|
4
4
|
"description": "Type-safe State Management Library for TypeScript/JavaScript",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -39,20 +39,20 @@
|
|
|
39
39
|
"@types/react": "19.3.0",
|
|
40
40
|
"@vitest/browser-playwright": "5.0.3",
|
|
41
41
|
"argparse": "3.0.2",
|
|
42
|
-
"eslint-config-typed": "5.17.
|
|
43
|
-
"eslint-plugin-ts-data-forge": "0.8.
|
|
44
|
-
"eslint-plugin-ts-fortress": "1.3.
|
|
45
|
-
"eslint-plugin-ts-type-forge": "0.8.
|
|
42
|
+
"eslint-config-typed": "5.17.4",
|
|
43
|
+
"eslint-plugin-ts-data-forge": "0.8.6",
|
|
44
|
+
"eslint-plugin-ts-fortress": "1.3.3",
|
|
45
|
+
"eslint-plugin-ts-type-forge": "0.8.8",
|
|
46
46
|
"jotai": "3.0.1",
|
|
47
47
|
"mobx": "7.0.6",
|
|
48
|
-
"playwright": "1.
|
|
48
|
+
"playwright": "1.64.0",
|
|
49
49
|
"prettier": "3.9.9",
|
|
50
50
|
"prettier-plugin-organize-imports": "4.3.0",
|
|
51
51
|
"prettier-plugin-packagejson": "3.0.2",
|
|
52
52
|
"react": "19.3.0",
|
|
53
53
|
"rxjs": "7.8.2",
|
|
54
|
-
"synstate-react-hooks": "3.2.
|
|
55
|
-
"synstate-react-hooks-compat": "3.2.
|
|
54
|
+
"synstate-react-hooks": "3.2.1",
|
|
55
|
+
"synstate-react-hooks-compat": "3.2.1",
|
|
56
56
|
"ts-repo-utils": "10.7.1",
|
|
57
57
|
"valtio": "2.3.2",
|
|
58
58
|
"zustand": "5.0.15"
|
|
@@ -68,7 +68,7 @@
|
|
|
68
68
|
"scripts": {
|
|
69
69
|
"build": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/build.mts",
|
|
70
70
|
"check:ext": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ./scripts/cmd/check-ext.mts",
|
|
71
|
-
"check:lint": "eslint .",
|
|
71
|
+
"check:lint": "oxlint . && eslint .",
|
|
72
72
|
"check:sumi": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../languages/sumi/cli/src/cmd/sumi.mts check ./tsconfig.sumi.json",
|
|
73
73
|
"check:test": "pnpm run z:vitest:node run",
|
|
74
74
|
"check:test:browser": "pnpm run z:vitest --project='Browser' run",
|
|
@@ -79,7 +79,7 @@
|
|
|
79
79
|
"fix:fmt": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-uncommitted.mts --cwd .",
|
|
80
80
|
"fix:fmt:diff": "tsx --tsconfig ../../tools/configs/tsconfig.tsx.json ../../libs/ts-repo-utils/src/cmd/format-diff-from.mts origin/main --cwd .",
|
|
81
81
|
"fix:fmt:full": "pnpm run z:prettier .",
|
|
82
|
-
"fix:lint": "eslint . --fix",
|
|
82
|
+
"fix:lint": "oxlint . --fix && eslint . --fix",
|
|
83
83
|
"fmt": "pnpm run fix:fmt",
|
|
84
84
|
"gen": "run-s gen:index gen:readme gen:jsdoc gen:sample-diffs",
|
|
85
85
|
"gen:index": "run-s gen:index:src fix:fmt",
|
|
@@ -98,11 +98,25 @@ export const createSyncChildObservable = <A, P extends NonEmptyUnknownList>(
|
|
|
98
98
|
): SyncChildObservable<A, P> => {
|
|
99
99
|
const handle = createObservableBaseHandle<A>(initialValue);
|
|
100
100
|
|
|
101
|
+
/** Set once assembled; see {@link unregisterChild}. */
|
|
102
|
+
let mut_self: ChildObservable<A> | undefined = undefined;
|
|
103
|
+
|
|
101
104
|
const complete = (): void => {
|
|
105
|
+
// A completed node is reached again through every parent and child that
|
|
106
|
+
// completes after it; running again would repeat the teardown and the
|
|
107
|
+
// ancestor walk in `unregisterChild` for each of them.
|
|
108
|
+
if (handle.isCompleted()) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
|
|
102
112
|
onComplete?.();
|
|
103
113
|
|
|
104
114
|
handle.completeBase();
|
|
105
115
|
|
|
116
|
+
if (mut_self !== undefined) {
|
|
117
|
+
unregisterChild(mut_self, parents);
|
|
118
|
+
}
|
|
119
|
+
|
|
106
120
|
// propagate to parents
|
|
107
121
|
for (const par of parents) {
|
|
108
122
|
par.tryComplete();
|
|
@@ -110,6 +124,10 @@ export const createSyncChildObservable = <A, P extends NonEmptyUnknownList>(
|
|
|
110
124
|
};
|
|
111
125
|
|
|
112
126
|
const tryComplete = (): void => {
|
|
127
|
+
if (handle.isCompleted()) {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
|
|
113
131
|
tryCompleteChild({
|
|
114
132
|
hasSubscriber: handle.hasSubscriber(),
|
|
115
133
|
hasActiveChild: handle.hasActiveChild(),
|
|
@@ -136,6 +154,8 @@ export const createSyncChildObservable = <A, P extends NonEmptyUnknownList>(
|
|
|
136
154
|
|
|
137
155
|
registerChild(observable, parents);
|
|
138
156
|
|
|
157
|
+
mut_self = observable;
|
|
158
|
+
|
|
139
159
|
return observable;
|
|
140
160
|
};
|
|
141
161
|
|
|
@@ -183,13 +203,28 @@ export const createAsyncChildObservable = <A, P extends NonEmptyUnknownList>(
|
|
|
183
203
|
): AsyncChildObservable<A, P> => {
|
|
184
204
|
const handle = createObservableBaseHandle<A>(initialValue);
|
|
185
205
|
|
|
186
|
-
const { addDescendant, startUpdate } =
|
|
206
|
+
const { addDescendant, deleteDescendant, startUpdate } =
|
|
207
|
+
createManagerObservableParts(handle);
|
|
208
|
+
|
|
209
|
+
/** Set once assembled; see {@link unregisterChild}. */
|
|
210
|
+
let mut_self: ChildObservable<A> | undefined = undefined;
|
|
187
211
|
|
|
188
212
|
const complete = (): void => {
|
|
213
|
+
// A completed node is reached again through every parent and child that
|
|
214
|
+
// completes after it; running again would repeat the teardown and the
|
|
215
|
+
// ancestor walk in `unregisterChild` for each of them.
|
|
216
|
+
if (handle.isCompleted()) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
|
|
189
220
|
onComplete?.();
|
|
190
221
|
|
|
191
222
|
handle.completeBase();
|
|
192
223
|
|
|
224
|
+
if (mut_self !== undefined) {
|
|
225
|
+
unregisterChild(mut_self, parents);
|
|
226
|
+
}
|
|
227
|
+
|
|
193
228
|
// propagate to parents
|
|
194
229
|
for (const par of parents) {
|
|
195
230
|
par.tryComplete();
|
|
@@ -197,6 +232,10 @@ export const createAsyncChildObservable = <A, P extends NonEmptyUnknownList>(
|
|
|
197
232
|
};
|
|
198
233
|
|
|
199
234
|
const tryComplete = (): void => {
|
|
235
|
+
if (handle.isCompleted()) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
|
|
200
239
|
tryCompleteChild({
|
|
201
240
|
hasSubscriber: handle.hasSubscriber(),
|
|
202
241
|
hasActiveChild: handle.hasActiveChild(),
|
|
@@ -219,11 +258,13 @@ export const createAsyncChildObservable = <A, P extends NonEmptyUnknownList>(
|
|
|
219
258
|
tryUpdate,
|
|
220
259
|
tryComplete,
|
|
221
260
|
complete,
|
|
222
|
-
extra: { parents, addDescendant },
|
|
261
|
+
extra: { parents, addDescendant, deleteDescendant },
|
|
223
262
|
});
|
|
224
263
|
|
|
225
264
|
registerChild(observable, parents);
|
|
226
265
|
|
|
266
|
+
mut_self = observable;
|
|
267
|
+
|
|
227
268
|
return observable;
|
|
228
269
|
};
|
|
229
270
|
|
|
@@ -321,6 +362,41 @@ const registerChild = <A,>(
|
|
|
321
362
|
}
|
|
322
363
|
};
|
|
323
364
|
|
|
365
|
+
/**
|
|
366
|
+
* Undoes {@link registerChild} for a completed child: its parents forget it, and
|
|
367
|
+
* every manager it registered to stops propagating updates to it. Without this
|
|
368
|
+
* a completed node stayed reachable for as long as its root lived, and ran its
|
|
369
|
+
* `tryUpdate` on every update (#2134).
|
|
370
|
+
*
|
|
371
|
+
* A completion that happens while the child is still being constructed (from
|
|
372
|
+
* a leaf factory's `createTryUpdate`) precedes its registration, so there is
|
|
373
|
+
* nothing to undo; `mut_self` is still `undefined` then.
|
|
374
|
+
*/
|
|
375
|
+
const unregisterChild = <A,>(
|
|
376
|
+
child: ChildObservable<A>,
|
|
377
|
+
parents: ChildObservable<A>['parents'],
|
|
378
|
+
): void => {
|
|
379
|
+
for (const p of parents) {
|
|
380
|
+
p.deleteChild(child);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
const mut_rest = Array.from(parents);
|
|
384
|
+
|
|
385
|
+
while (Arr.isNonEmpty(mut_rest)) {
|
|
386
|
+
const p = mut_rest.pop();
|
|
387
|
+
|
|
388
|
+
if (p === undefined) {
|
|
389
|
+
break;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
if (isManagerObservable(p)) {
|
|
393
|
+
p.deleteDescendant(child);
|
|
394
|
+
} else {
|
|
395
|
+
mut_rest.push(...p.parents);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
|
|
324
400
|
const tryCompleteChild = <A,>({
|
|
325
401
|
hasSubscriber,
|
|
326
402
|
hasActiveChild,
|
|
@@ -72,6 +72,12 @@ export type ObservableBaseHandle<A> = Readonly<{
|
|
|
72
72
|
|
|
73
73
|
addChild: <B>(child: ChildObservable<B>) => void;
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Forgets `child`, which a completed child calls on each of its parents so
|
|
77
|
+
* that nothing keeps a reference to it (#2134).
|
|
78
|
+
*/
|
|
79
|
+
deleteChild: <B>(child: ChildObservable<B>) => void;
|
|
80
|
+
|
|
75
81
|
getSnapshot: () => Optional<A>;
|
|
76
82
|
|
|
77
83
|
isCompleted: () => boolean;
|
|
@@ -115,7 +121,9 @@ export const createObservableBaseHandle = <A,>(
|
|
|
115
121
|
): ObservableBaseHandle<A> => {
|
|
116
122
|
const id = issueObservableId();
|
|
117
123
|
|
|
118
|
-
|
|
124
|
+
// A set, not an array: a completed child removes itself, and that has to be
|
|
125
|
+
// O(1) for a UI that creates and completes derived nodes on every mount.
|
|
126
|
+
const mut_children: MutableSet<ChildObservable<unknown>> = new Set();
|
|
119
127
|
|
|
120
128
|
const mut_subscribers: MutableMap<SubscriberId, Subscriber<A>> = new Map();
|
|
121
129
|
|
|
@@ -142,7 +150,7 @@ export const createObservableBaseHandle = <A,>(
|
|
|
142
150
|
|
|
143
151
|
writers.setHasSubscriber(mut_subscribers.size > 0);
|
|
144
152
|
|
|
145
|
-
writers.setHasChild(
|
|
153
|
+
writers.setHasChild(mut_children.size > 0);
|
|
146
154
|
};
|
|
147
155
|
|
|
148
156
|
const addSubscriber = (s: Subscriber<A>): SubscriberId => {
|
|
@@ -163,15 +171,17 @@ export const createObservableBaseHandle = <A,>(
|
|
|
163
171
|
};
|
|
164
172
|
|
|
165
173
|
const addChild = <B,>(child: ChildObservable<B>): void => {
|
|
166
|
-
mut_children
|
|
167
|
-
mut_children,
|
|
168
|
-
|
|
169
|
-
child as ChildObservable<unknown>,
|
|
170
|
-
);
|
|
174
|
+
mut_children.add(child);
|
|
171
175
|
|
|
172
176
|
mut_writers?.setHasChild(true);
|
|
173
177
|
};
|
|
174
178
|
|
|
179
|
+
const deleteChild = <B,>(child: ChildObservable<B>): void => {
|
|
180
|
+
mut_children.delete(child);
|
|
181
|
+
|
|
182
|
+
mut_writers?.setHasChild(mut_children.size > 0);
|
|
183
|
+
};
|
|
184
|
+
|
|
175
185
|
const getSnapshot = (): Optional<A> => mut_currentValue;
|
|
176
186
|
|
|
177
187
|
const isCompleted = (): boolean => mut_isCompleted;
|
|
@@ -180,8 +190,15 @@ export const createObservableBaseHandle = <A,>(
|
|
|
180
190
|
|
|
181
191
|
const hasSubscriber = (): boolean => mut_subscribers.size > 0;
|
|
182
192
|
|
|
183
|
-
const hasActiveChild = (): boolean =>
|
|
184
|
-
|
|
193
|
+
const hasActiveChild = (): boolean => {
|
|
194
|
+
for (const c of mut_children) {
|
|
195
|
+
if (!c.isCompleted) {
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return false;
|
|
201
|
+
};
|
|
185
202
|
|
|
186
203
|
const setNext = (nextValue: A, nextUpdateToken: UpdateToken): void => {
|
|
187
204
|
mut_updateToken = nextUpdateToken;
|
|
@@ -215,7 +232,8 @@ export const createObservableBaseHandle = <A,>(
|
|
|
215
232
|
|
|
216
233
|
mut_writers?.setHasSubscriber(false);
|
|
217
234
|
|
|
218
|
-
//
|
|
235
|
+
// Propagate to children. A child that completes removes itself from
|
|
236
|
+
// `mut_children` during this loop, which iterating a `Set` tolerates.
|
|
219
237
|
for (const o of mut_children) {
|
|
220
238
|
o.tryComplete();
|
|
221
239
|
}
|
|
@@ -255,6 +273,7 @@ export const createObservableBaseHandle = <A,>(
|
|
|
255
273
|
id,
|
|
256
274
|
attach,
|
|
257
275
|
addChild,
|
|
276
|
+
deleteChild,
|
|
258
277
|
getSnapshot,
|
|
259
278
|
isCompleted,
|
|
260
279
|
updateToken,
|
|
@@ -273,41 +292,98 @@ export const createObservableBaseHandle = <A,>(
|
|
|
273
292
|
export type ManagerObservableParts<A> = Readonly<{
|
|
274
293
|
addDescendant: <B>(child: ChildObservable<B>) => void;
|
|
275
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Takes `child` out of the propagation order, which a completed child calls
|
|
297
|
+
* on every manager it registered to (#2134).
|
|
298
|
+
*/
|
|
299
|
+
deleteDescendant: <B>(child: ChildObservable<B>) => void;
|
|
300
|
+
|
|
276
301
|
/** Emits `nextValue` and propagates the update to all descendants. */
|
|
277
302
|
startUpdate: (nextValue: A) => void;
|
|
278
303
|
}>;
|
|
279
304
|
|
|
280
305
|
/**
|
|
281
306
|
* Builds the manager half of a root or async-child observable. Both start their
|
|
282
|
-
* own update propagation, so both keep a
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
*
|
|
307
|
+
* own update propagation, so both keep a depth-ordered propagation list; this
|
|
308
|
+
* is the single implementation of it (the class version duplicated it across
|
|
309
|
+
* `RootObservableClass` and `AsyncChildObservableClass`).
|
|
310
|
+
*
|
|
311
|
+
* The descendants are kept in one insertion-ordered set per depth, so adding
|
|
312
|
+
* and removing one is O(1) apart from the first node of a new depth. The flat
|
|
313
|
+
* array `startUpdate` walks is rebuilt only when an update finds it stale: it
|
|
314
|
+
* used to be copied on every `addDescendant`, which made creating n nodes under
|
|
315
|
+
* one root O(n²). Rebuilding at the start of an update also keeps the walk a
|
|
316
|
+
* snapshot, as the copy-on-write array was ā a node created or completed while
|
|
317
|
+
* an update is propagating does not change which nodes that update visits.
|
|
286
318
|
*/
|
|
287
319
|
export const createManagerObservableParts = <A,>(
|
|
288
320
|
handle: ObservableBaseHandle<A>,
|
|
289
321
|
): ManagerObservableParts<A> => {
|
|
290
|
-
|
|
322
|
+
const mut_buckets: MutableMap<
|
|
323
|
+
number,
|
|
324
|
+
MutableSet<ChildObservable<unknown>>
|
|
325
|
+
> = new Map();
|
|
326
|
+
|
|
327
|
+
/** The keys of `mut_buckets`, ascending. */
|
|
328
|
+
let mut_depths: readonly number[] = [];
|
|
291
329
|
|
|
292
|
-
|
|
330
|
+
/** `undefined` while stale. */
|
|
331
|
+
let mut_propagationOrder: readonly ChildObservable<unknown>[] | undefined =
|
|
332
|
+
[];
|
|
293
333
|
|
|
294
334
|
const addDescendant = <B,>(child: ChildObservable<B>): void => {
|
|
295
|
-
|
|
296
|
-
|
|
335
|
+
const mut_bucket = mut_buckets.get(child.depth);
|
|
336
|
+
|
|
337
|
+
if (mut_bucket === undefined) {
|
|
338
|
+
mut_buckets.set(child.depth, new Set<ChildObservable<unknown>>([child]));
|
|
339
|
+
|
|
340
|
+
mut_depths = Arr.toInserted(
|
|
341
|
+
mut_depths,
|
|
342
|
+
binarySearch(mut_depths, child.depth),
|
|
343
|
+
child.depth,
|
|
344
|
+
);
|
|
345
|
+
} else {
|
|
346
|
+
if (mut_bucket.has(child)) {
|
|
347
|
+
return;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
mut_bucket.add(child);
|
|
297
351
|
}
|
|
298
352
|
|
|
299
|
-
|
|
353
|
+
mut_propagationOrder = undefined;
|
|
354
|
+
};
|
|
300
355
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
);
|
|
356
|
+
const deleteDescendant = <B,>(child: ChildObservable<B>): void => {
|
|
357
|
+
// An emptied bucket stays, so that its depth is not inserted again.
|
|
358
|
+
const mut_bucket = mut_buckets.get(child.depth);
|
|
305
359
|
|
|
306
|
-
|
|
307
|
-
mut_propagationOrder
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
360
|
+
if (mut_bucket?.delete(child) === true) {
|
|
361
|
+
mut_propagationOrder = undefined;
|
|
362
|
+
}
|
|
363
|
+
};
|
|
364
|
+
|
|
365
|
+
const getPropagationOrder = (): readonly ChildObservable<unknown>[] => {
|
|
366
|
+
if (mut_propagationOrder !== undefined) {
|
|
367
|
+
return mut_propagationOrder;
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
const mut_order: ChildObservable<unknown>[] = [];
|
|
371
|
+
|
|
372
|
+
for (const depth of mut_depths) {
|
|
373
|
+
const bucket = mut_buckets.get(depth);
|
|
374
|
+
|
|
375
|
+
if (bucket !== undefined) {
|
|
376
|
+
// Not `push(...bucket)`: a spread passes every element as an argument,
|
|
377
|
+
// which overflows the stack for a bucket of a few hundred thousand.
|
|
378
|
+
for (const c of bucket) {
|
|
379
|
+
mut_order.push(c);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
mut_propagationOrder = mut_order;
|
|
385
|
+
|
|
386
|
+
return mut_order;
|
|
311
387
|
};
|
|
312
388
|
|
|
313
389
|
const startUpdate = (nextValue: A): void => {
|
|
@@ -315,12 +391,12 @@ export const createManagerObservableParts = <A,>(
|
|
|
315
391
|
|
|
316
392
|
handle.setNext(nextValue, updateToken);
|
|
317
393
|
|
|
318
|
-
for (const p of
|
|
394
|
+
for (const p of getPropagationOrder()) {
|
|
319
395
|
p.tryUpdate(updateToken);
|
|
320
396
|
}
|
|
321
397
|
};
|
|
322
398
|
|
|
323
|
-
return { addDescendant, startUpdate };
|
|
399
|
+
return { addDescendant, deleteDescendant, startUpdate };
|
|
324
400
|
};
|
|
325
401
|
|
|
326
402
|
/** Default `tryUpdate` for observables that never receive parent updates. */
|
|
@@ -417,6 +493,8 @@ export const assembleObservable = <
|
|
|
417
493
|
|
|
418
494
|
addChild: handle.addChild,
|
|
419
495
|
|
|
496
|
+
deleteChild: handle.deleteChild,
|
|
497
|
+
|
|
420
498
|
getSnapshot: handle.getSnapshot,
|
|
421
499
|
|
|
422
500
|
isCompleted: false,
|
|
@@ -59,7 +59,8 @@ export const createRootObservable = <
|
|
|
59
59
|
): Extension & RootObservable<A> => {
|
|
60
60
|
const handle = createObservableBaseHandle<A>(initialValue);
|
|
61
61
|
|
|
62
|
-
const { addDescendant, startUpdate } =
|
|
62
|
+
const { addDescendant, deleteDescendant, startUpdate } =
|
|
63
|
+
createManagerObservableParts(handle);
|
|
63
64
|
|
|
64
65
|
const complete = (): void => {
|
|
65
66
|
onComplete?.();
|
|
@@ -89,6 +90,7 @@ export const createRootObservable = <
|
|
|
89
90
|
extra: {
|
|
90
91
|
...extension,
|
|
91
92
|
addDescendant,
|
|
93
|
+
deleteDescendant,
|
|
92
94
|
},
|
|
93
95
|
});
|
|
94
96
|
};
|
|
@@ -25,6 +25,7 @@ type CreateObservableType<A, Kind extends ObservableKind> = Readonly<{
|
|
|
25
25
|
// reactive dependency tree structure
|
|
26
26
|
depth: Kind extends 'root' ? 0 : number;
|
|
27
27
|
addChild: <B>(child: ChildObservable<B>) => void;
|
|
28
|
+
deleteChild: <B>(child: ChildObservable<B>) => void;
|
|
28
29
|
|
|
29
30
|
// state
|
|
30
31
|
getSnapshot: () => Optional<A>;
|
|
@@ -84,6 +85,7 @@ namespace ObservableTypeConverter {
|
|
|
84
85
|
> = O &
|
|
85
86
|
Readonly<{
|
|
86
87
|
addDescendant: <B>(child: ChildObservable<B>) => void;
|
|
88
|
+
deleteDescendant: <B>(child: ChildObservable<B>) => void;
|
|
87
89
|
}>;
|
|
88
90
|
}
|
|
89
91
|
|