synstate 1.0.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -10
- package/dist/core/class/child-observable-class.d.mts.map +1 -1
- package/dist/core/class/child-observable-class.mjs +148 -140
- package/dist/core/class/child-observable-class.mjs.map +1 -1
- package/dist/core/class/observable-base-class.d.mts.map +1 -1
- package/dist/core/class/observable-base-class.mjs +111 -107
- package/dist/core/class/observable-base-class.mjs.map +1 -1
- package/dist/core/class/root-observable-class.d.mts.map +1 -1
- package/dist/core/class/root-observable-class.mjs +32 -24
- package/dist/core/class/root-observable-class.mjs.map +1 -1
- package/dist/core/combine/combine.d.mts +3 -3
- package/dist/core/combine/combine.d.mts.map +1 -1
- package/dist/core/combine/combine.mjs +31 -113
- package/dist/core/combine/combine.mjs.map +1 -1
- package/dist/core/combine/merge.d.mts +2 -2
- package/dist/core/combine/merge.d.mts.map +1 -1
- package/dist/core/combine/merge.mjs +21 -69
- package/dist/core/combine/merge.mjs.map +1 -1
- package/dist/core/combine/zip.d.mts +2 -2
- package/dist/core/combine/zip.d.mts.map +1 -1
- package/dist/core/combine/zip.mjs +34 -79
- package/dist/core/combine/zip.mjs.map +1 -1
- package/dist/core/create/counter.d.mts +1 -1
- package/dist/core/create/counter.d.mts.map +1 -1
- package/dist/core/create/counter.mjs +45 -84
- package/dist/core/create/counter.mjs.map +1 -1
- package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
- package/dist/core/create/from-abortable-promise.mjs +29 -61
- package/dist/core/create/from-abortable-promise.mjs.map +1 -1
- package/dist/core/create/from-promise.d.mts.map +1 -1
- package/dist/core/create/from-promise.mjs +17 -66
- package/dist/core/create/from-promise.mjs.map +1 -1
- package/dist/core/create/from-subscribable.d.mts.map +1 -1
- package/dist/core/create/from-subscribable.mjs +18 -69
- package/dist/core/create/from-subscribable.mjs.map +1 -1
- package/dist/core/create/just.d.mts.map +1 -1
- package/dist/core/create/just.mjs +5 -35
- package/dist/core/create/just.mjs.map +1 -1
- package/dist/core/create/source.mjs +10 -13
- package/dist/core/create/source.mjs.map +1 -1
- package/dist/core/create/timer.d.mts.map +1 -1
- package/dist/core/create/timer.mjs +32 -68
- package/dist/core/create/timer.mjs.map +1 -1
- package/dist/core/operators/audit.d.mts.map +1 -1
- package/dist/core/operators/audit.mjs +39 -133
- package/dist/core/operators/audit.mjs.map +1 -1
- package/dist/core/operators/debounce.d.mts.map +1 -1
- package/dist/core/operators/debounce.mjs +36 -119
- package/dist/core/operators/debounce.mjs.map +1 -1
- package/dist/core/operators/filter.mjs +22 -25
- package/dist/core/operators/filter.mjs.map +1 -1
- package/dist/core/operators/map.d.mts.map +1 -1
- package/dist/core/operators/map.mjs +28 -61
- package/dist/core/operators/map.mjs.map +1 -1
- package/dist/core/operators/merge-map.d.mts +1 -1
- package/dist/core/operators/merge-map.d.mts.map +1 -1
- package/dist/core/operators/merge-map.mjs +34 -130
- package/dist/core/operators/merge-map.mjs.map +1 -1
- package/dist/core/operators/pairwise.d.mts +3 -2
- package/dist/core/operators/pairwise.d.mts.map +1 -1
- package/dist/core/operators/pairwise.mjs +19 -75
- package/dist/core/operators/pairwise.mjs.map +1 -1
- package/dist/core/operators/scan.d.mts.map +1 -1
- package/dist/core/operators/scan.mjs +16 -67
- package/dist/core/operators/scan.mjs.map +1 -1
- package/dist/core/operators/skip-if-no-change.d.mts +1 -1
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
- package/dist/core/operators/skip-if-no-change.mjs +28 -92
- package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
- package/dist/core/operators/skip-until.d.mts.map +1 -1
- package/dist/core/operators/skip-until.mjs +23 -72
- package/dist/core/operators/skip-until.mjs.map +1 -1
- package/dist/core/operators/skip-while.d.mts.map +1 -1
- package/dist/core/operators/skip-while.mjs +26 -88
- package/dist/core/operators/skip-while.mjs.map +1 -1
- package/dist/core/operators/switch-map.d.mts.map +1 -1
- package/dist/core/operators/switch-map.mjs +31 -124
- package/dist/core/operators/switch-map.mjs.map +1 -1
- package/dist/core/operators/take-until.d.mts.map +1 -1
- package/dist/core/operators/take-until.mjs +28 -69
- package/dist/core/operators/take-until.mjs.map +1 -1
- package/dist/core/operators/take-while.d.mts.map +1 -1
- package/dist/core/operators/take-while.mjs +23 -83
- package/dist/core/operators/take-while.mjs.map +1 -1
- package/dist/core/operators/throttle.d.mts.map +1 -1
- package/dist/core/operators/throttle.mjs +38 -115
- package/dist/core/operators/throttle.mjs.map +1 -1
- package/dist/core/operators/with-buffered-from.d.mts +1 -1
- package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
- package/dist/core/operators/with-buffered-from.mjs +37 -90
- package/dist/core/operators/with-buffered-from.mjs.map +1 -1
- package/dist/core/operators/with-current-value-from.d.mts +1 -1
- package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
- package/dist/core/operators/with-current-value-from.mjs +23 -84
- package/dist/core/operators/with-current-value-from.mjs.map +1 -1
- package/dist/core/operators/with-initial-value.d.mts.map +1 -1
- package/dist/core/operators/with-initial-value.mjs +13 -58
- package/dist/core/operators/with-initial-value.mjs.map +1 -1
- package/dist/core/predefined/operators/attach-index.d.mts +1 -1
- package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
- package/dist/core/predefined/operators/attach-index.mjs +0 -53
- package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
- package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-optional.mjs +1 -48
- package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-result-err.mjs +1 -48
- package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
- package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-result-ok.mjs +1 -48
- package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
- package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-to.mjs +0 -40
- package/dist/core/predefined/operators/map-to.mjs.map +1 -1
- package/dist/core/predefined/operators/pluck.d.mts +1 -1
- package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
- package/dist/core/predefined/operators/pluck.mjs +0 -43
- package/dist/core/predefined/operators/pluck.mjs.map +1 -1
- package/dist/core/predefined/operators/skip.d.mts.map +1 -1
- package/dist/core/predefined/operators/skip.mjs +0 -47
- package/dist/core/predefined/operators/skip.mjs.map +1 -1
- package/dist/core/predefined/operators/take.d.mts.map +1 -1
- package/dist/core/predefined/operators/take.mjs +0 -41
- package/dist/core/predefined/operators/take.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs +4 -43
- package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-err.mjs +0 -40
- package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs +4 -43
- package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
- package/dist/core/types/observable-family.d.mts +10 -10
- package/dist/core/types/observable-family.d.mts.map +1 -1
- package/dist/core/types/observable.d.mts.map +1 -1
- package/dist/core/types/observable.mjs +3 -5
- package/dist/core/types/observable.mjs.map +1 -1
- package/dist/core/types/types.d.mts +2 -1
- package/dist/core/types/types.d.mts.map +1 -1
- package/dist/core/utils/id-maker.mjs +5 -6
- package/dist/core/utils/id-maker.mjs.map +1 -1
- package/dist/core/utils/max-depth.d.mts.map +1 -1
- package/dist/core/utils/max-depth.mjs +1 -3
- package/dist/core/utils/max-depth.mjs.map +1 -1
- package/dist/core/utils/observable-utils.d.mts.map +1 -1
- package/dist/core/utils/observable-utils.mjs +3 -2
- package/dist/core/utils/observable-utils.mjs.map +1 -1
- package/dist/core/utils/utils.d.mts.map +1 -1
- package/dist/core/utils/utils.mjs +23 -30
- package/dist/core/utils/utils.mjs.map +1 -1
- package/dist/utils/collect-to-array.d.mts.map +1 -1
- package/dist/utils/collect-to-array.mjs +9 -6
- package/dist/utils/collect-to-array.mjs.map +1 -1
- package/dist/utils/create-boolean-state.d.mts +1 -1
- package/dist/utils/create-boolean-state.d.mts.map +1 -1
- package/dist/utils/create-boolean-state.mjs +18 -46
- package/dist/utils/create-boolean-state.mjs.map +1 -1
- package/dist/utils/create-event-emitter.mjs +10 -64
- package/dist/utils/create-event-emitter.mjs.map +1 -1
- package/dist/utils/create-reducer.d.mts +1 -1
- package/dist/utils/create-reducer.d.mts.map +1 -1
- package/dist/utils/create-reducer.mjs +8 -52
- package/dist/utils/create-reducer.mjs.map +1 -1
- package/dist/utils/create-state.d.mts +1 -1
- package/dist/utils/create-state.d.mts.map +1 -1
- package/dist/utils/create-state.mjs +23 -53
- package/dist/utils/create-state.mjs.map +1 -1
- package/package.json +16 -16
- package/src/core/class/child-observable-class.mts +1 -1
- package/src/core/class/observable-base-class.mts +16 -16
- package/src/core/combine/combine.mts +38 -16
- package/src/core/combine/merge.mts +3 -3
- package/src/core/combine/zip.mts +24 -13
- package/src/core/create/counter.mts +11 -9
- package/src/core/create/counter.test.mts +11 -0
- package/src/core/create/timer.mts +6 -6
- package/src/core/create/timer.test.mts +11 -0
- package/src/core/operators/audit-throttle-teardown.test.mts +21 -0
- package/src/core/operators/audit.mts +6 -6
- package/src/core/operators/debounce.mts +6 -6
- package/src/core/operators/pairwise.mts +10 -5
- package/src/core/operators/skip-while.mts +1 -5
- package/src/core/operators/skip-while.test.mts +20 -0
- package/src/core/operators/throttle.mts +6 -6
- package/src/core/operators/with-buffered-from.mts +4 -4
- package/src/core/predefined/operators/map-optional.mts +1 -2
- package/src/core/predefined/operators/map-result-err.mts +1 -1
- package/src/core/predefined/operators/map-result-ok.mts +1 -1
- package/src/core/types/observable-family.mts +12 -11
- package/src/core/types/observable.mts +5 -7
- package/src/core/types/types.mts +2 -1
- package/src/core/utils/max-depth.mts +5 -1
- package/src/core/utils/utils.mts +1 -1
- package/src/utils/create-boolean-state.mts +1 -1
- package/src/utils/create-reducer.mts +1 -1
- package/src/utils/create-state.mts +1 -1
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.4 kB min+gzip<!-- /bundle-size:synstate --> with only one external runtime dependency ([ts-data-forge](https://www.npmjs.com/package/ts-data-forge))
|
|
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
|
|
@@ -316,6 +316,7 @@ const ResetButton = (): React.JSX.Element => (
|
|
|
316
316
|
```tsx
|
|
317
317
|
import * as React from 'react';
|
|
318
318
|
import { createReducer } from 'synstate-react-hooks';
|
|
319
|
+
import { Arr } from 'ts-data-forge';
|
|
319
320
|
|
|
320
321
|
type Todo = Readonly<{
|
|
321
322
|
id: number;
|
|
@@ -334,14 +335,11 @@ const initialTodos: readonly Todo[] = [] as const;
|
|
|
334
335
|
const reducer = (todos: readonly Todo[], action: Action): readonly Todo[] => {
|
|
335
336
|
switch (action.type) {
|
|
336
337
|
case 'add':
|
|
337
|
-
return
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
done: false,
|
|
343
|
-
},
|
|
344
|
-
];
|
|
338
|
+
return Arr.toPushed(todos, {
|
|
339
|
+
id: Date.now(),
|
|
340
|
+
text: action.text,
|
|
341
|
+
done: false,
|
|
342
|
+
});
|
|
345
343
|
|
|
346
344
|
case 'toggle':
|
|
347
345
|
return todos.map((t) =>
|
|
@@ -432,6 +430,7 @@ const ThemeToggle = (): React.JSX.Element => {
|
|
|
432
430
|
```tsx
|
|
433
431
|
import * as React from 'react';
|
|
434
432
|
import { createState } from 'synstate-react-hooks';
|
|
433
|
+
import { Arr } from 'ts-data-forge';
|
|
435
434
|
|
|
436
435
|
// State
|
|
437
436
|
const [useItemsState, _, { updateState, resetState: resetItemsState }] =
|
|
@@ -439,7 +438,7 @@ const [useItemsState, _, { updateState, resetState: resetItemsState }] =
|
|
|
439
438
|
|
|
440
439
|
// Setup event handlers
|
|
441
440
|
const addItem = (item: string): void => {
|
|
442
|
-
updateState((items: readonly string[]) =>
|
|
441
|
+
updateState((items: readonly string[]) => Arr.toPushed(items, item));
|
|
443
442
|
};
|
|
444
443
|
|
|
445
444
|
// Component 1: Add items
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/child-observable-class.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,IAAI,EACV,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AA2GlE,qBAAa,yBAAyB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,mBAAmB,CAC3E,SAAQ,mBAAmB,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,CACpD,YAAW,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC;;
|
|
1
|
+
{"version":3,"file":"child-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/child-observable-class.mts"],"names":[],"mappings":"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"}
|
|
@@ -5,160 +5,168 @@ import { maxDepth } from '../utils/max-depth.mjs';
|
|
|
5
5
|
import { binarySearch } from '../utils/utils.mjs';
|
|
6
6
|
import { ObservableBaseClass } from './observable-base-class.mjs';
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Detects circular dependencies by walking the full ancestor chain of the
|
|
10
|
-
* given parents and checking whether `child` already appears among them.
|
|
11
|
-
*
|
|
12
|
-
* @throws {Error} if a circular dependency is detected
|
|
13
|
-
*/
|
|
14
8
|
const hasCircularDependencyFrom = (node, mut_visited, mut_inPath) => {
|
|
15
|
-
|
|
9
|
+
if (mut_inPath.has(node.id)) return true;
|
|
10
|
+
if (mut_visited.has(node.id)) return false;
|
|
11
|
+
mut_visited.add(node.id);
|
|
12
|
+
mut_inPath.add(node.id);
|
|
13
|
+
if (isChildObservable(node)) {
|
|
14
|
+
for (const parent of node.parents) {
|
|
15
|
+
if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {
|
|
16
16
|
return true;
|
|
17
|
-
|
|
18
|
-
return false;
|
|
19
|
-
mut_visited.add(node.id);
|
|
20
|
-
mut_inPath.add(node.id);
|
|
21
|
-
if (isChildObservable(node)) {
|
|
22
|
-
for (const parent of node.parents) {
|
|
23
|
-
if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
17
|
+
}
|
|
27
18
|
}
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
}
|
|
20
|
+
mut_inPath.delete(node.id);
|
|
21
|
+
return false;
|
|
30
22
|
};
|
|
31
23
|
const detectCircularDependency = (child, parents) => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
const mut_visited = /* @__PURE__ */ new Set();
|
|
25
|
+
const mut_inPath = /* @__PURE__ */ new Set([child.id]);
|
|
26
|
+
for (const parent of parents) {
|
|
27
|
+
if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {
|
|
28
|
+
throw new Error(
|
|
29
|
+
"Circular dependency detected in observable graph: a child observable cannot be its own ancestor."
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
39
33
|
};
|
|
40
34
|
const registerChild = (child, parents) => {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// trace back dependency graph
|
|
56
|
-
mut_rest.push(...p.parents);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
35
|
+
detectCircularDependency(child, parents);
|
|
36
|
+
for (const p of parents) {
|
|
37
|
+
p.addChild(child);
|
|
38
|
+
}
|
|
39
|
+
const mut_rest = Array.from(parents);
|
|
40
|
+
while (Arr.isNonEmpty(mut_rest)) {
|
|
41
|
+
const p = mut_rest.pop();
|
|
42
|
+
if (p === void 0) break;
|
|
43
|
+
if (isManagerObservable(p)) {
|
|
44
|
+
p.addDescendant(child);
|
|
45
|
+
} else {
|
|
46
|
+
mut_rest.push(...p.parents);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
59
49
|
};
|
|
60
|
-
const tryComplete = ({
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
50
|
+
const tryComplete = ({
|
|
51
|
+
hasSubscriber,
|
|
52
|
+
hasActiveChild,
|
|
53
|
+
parents,
|
|
54
|
+
complete
|
|
55
|
+
}) => {
|
|
56
|
+
if (parents.every((r) => r.isCompleted)) {
|
|
57
|
+
complete();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (!hasSubscriber && !hasActiveChild) {
|
|
61
|
+
complete();
|
|
62
|
+
}
|
|
63
|
+
for (const par of parents) {
|
|
64
|
+
par.tryComplete();
|
|
65
|
+
}
|
|
74
66
|
};
|
|
75
67
|
class AsyncChildObservableClass extends ObservableBaseClass {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
68
|
+
#mut_propagationOrder;
|
|
69
|
+
parents;
|
|
70
|
+
descendantsIdSet;
|
|
71
|
+
constructor({
|
|
72
|
+
parents,
|
|
73
|
+
depth = 1 + maxDepth(parents),
|
|
74
|
+
initialValue
|
|
75
|
+
}) {
|
|
76
|
+
super({
|
|
77
|
+
kind: "async child",
|
|
78
|
+
depth,
|
|
79
|
+
initialValue
|
|
80
|
+
});
|
|
81
|
+
this.parents = parents;
|
|
82
|
+
this.#mut_propagationOrder = [];
|
|
83
|
+
this.descendantsIdSet = /* @__PURE__ */ new Set();
|
|
84
|
+
registerChild(this, parents);
|
|
85
|
+
}
|
|
86
|
+
// overload
|
|
87
|
+
addDescendant(child) {
|
|
88
|
+
if (this.descendantsIdSet.has(child.id)) return;
|
|
89
|
+
this.descendantsIdSet.add(child.id);
|
|
90
|
+
const insertPos = binarySearch(
|
|
91
|
+
this.#mut_propagationOrder.map((a) => a.depth),
|
|
92
|
+
child.depth
|
|
93
|
+
);
|
|
94
|
+
this.#mut_propagationOrder = Arr.toInserted(
|
|
95
|
+
this.#mut_propagationOrder,
|
|
96
|
+
insertPos,
|
|
97
|
+
child
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
startUpdate(nextValue) {
|
|
101
|
+
const updateToken = issueUpdateToken();
|
|
102
|
+
this.setNext(nextValue, updateToken);
|
|
103
|
+
for (const p of this.#mut_propagationOrder) {
|
|
104
|
+
p.tryUpdate(updateToken);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
complete() {
|
|
108
|
+
super.complete();
|
|
109
|
+
for (const par of this.parents) {
|
|
110
|
+
par.tryComplete();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
tryComplete() {
|
|
114
|
+
tryComplete({
|
|
115
|
+
complete: () => {
|
|
116
|
+
this.complete();
|
|
117
|
+
},
|
|
118
|
+
hasActiveChild: this.hasActiveChild(),
|
|
119
|
+
hasSubscriber: this.hasSubscriber,
|
|
120
|
+
parents: this.parents
|
|
121
|
+
});
|
|
122
|
+
}
|
|
122
123
|
}
|
|
123
124
|
class SyncChildObservableClass extends ObservableBaseClass {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
125
|
+
parents;
|
|
126
|
+
constructor({
|
|
127
|
+
parents,
|
|
128
|
+
depth = 1 + maxDepth(parents),
|
|
129
|
+
initialValue
|
|
130
|
+
}) {
|
|
131
|
+
super({
|
|
132
|
+
kind: "sync child",
|
|
133
|
+
depth,
|
|
134
|
+
initialValue
|
|
135
|
+
});
|
|
136
|
+
this.parents = parents;
|
|
137
|
+
registerChild(this, parents);
|
|
138
|
+
}
|
|
139
|
+
complete() {
|
|
140
|
+
super.complete();
|
|
141
|
+
for (const par of this.parents) {
|
|
142
|
+
par.tryComplete();
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
tryComplete() {
|
|
146
|
+
tryComplete({
|
|
147
|
+
complete: () => {
|
|
148
|
+
this.complete();
|
|
149
|
+
},
|
|
150
|
+
hasActiveChild: this.hasActiveChild(),
|
|
151
|
+
hasSubscriber: this.hasSubscriber,
|
|
152
|
+
parents: this.parents
|
|
153
|
+
});
|
|
154
|
+
}
|
|
150
155
|
}
|
|
151
156
|
class InitializedSyncChildObservableClass extends SyncChildObservableClass {
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
157
|
+
constructor({
|
|
158
|
+
parents,
|
|
159
|
+
depth = 1 + maxDepth(parents),
|
|
160
|
+
initialValue
|
|
161
|
+
}) {
|
|
162
|
+
super({ parents, depth, initialValue });
|
|
163
|
+
}
|
|
164
|
+
getSnapshot() {
|
|
165
|
+
return super.getCurrentValue();
|
|
166
|
+
}
|
|
167
|
+
pipe(operator) {
|
|
168
|
+
return operator(this);
|
|
169
|
+
}
|
|
162
170
|
}
|
|
163
171
|
|
|
164
172
|
export { AsyncChildObservableClass, InitializedSyncChildObservableClass, SyncChildObservableClass };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"child-observable-class.mjs","sources":["../../../src/core/class/child-observable-class.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"child-observable-class.mjs","sources":["../../../src/core/class/child-observable-class.mts"],"sourcesContent":["import { Arr, type Some } from 'ts-data-forge';\nimport { type MutableSet } from 'ts-type-forge';\nimport {\n isChildObservable,\n isManagerObservable,\n type AsyncChildObservable,\n type ChildObservable,\n type InitializedObservable,\n type InitializedSyncChildObservable,\n type KeepInitialValueOperator,\n type NonEmptyUnknownList,\n type Observable,\n type ObservableId,\n type Operator,\n type SyncChildObservable,\n type WithInitialValueOperator,\n type Wrap,\n} from '../types/index.mjs';\nimport { binarySearch, issueUpdateToken, maxDepth } from '../utils/index.mjs';\nimport { ObservableBaseClass } from './observable-base-class.mjs';\n\n/**\n * Detects circular dependencies by walking the full ancestor chain of the\n * given parents and checking whether `child` already appears among them.\n *\n * @throws {Error} if a circular dependency is detected\n */\nconst hasCircularDependencyFrom = (\n node: Observable<unknown>,\n mut_visited: MutableSet<ObservableId>,\n mut_inPath: MutableSet<ObservableId>,\n): boolean => {\n if (mut_inPath.has(node.id)) return true;\n\n if (mut_visited.has(node.id)) return false;\n\n mut_visited.add(node.id);\n\n mut_inPath.add(node.id);\n\n if (isChildObservable(node)) {\n for (const parent of node.parents) {\n if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {\n return true;\n }\n }\n }\n\n mut_inPath.delete(node.id);\n\n return false;\n};\n\nconst detectCircularDependency = (\n child: ChildObservable<unknown>,\n parents: readonly Observable<unknown>[],\n): void => {\n const mut_visited = new Set<ObservableId>();\n\n const mut_inPath = new Set<ObservableId>([child.id]);\n\n for (const parent of parents) {\n if (hasCircularDependencyFrom(parent, mut_visited, mut_inPath)) {\n throw new Error(\n 'Circular dependency detected in observable graph: a child observable cannot be its own ancestor.',\n );\n }\n }\n};\n\nconst registerChild = <A,>(\n child: ChildObservable<A>,\n parents: ChildObservable<A>['parents'],\n): void => {\n detectCircularDependency(child, parents);\n\n for (const p of parents) {\n p.addChild(child);\n }\n\n // register child to all reachable ManagerObservables\n const mut_rest = Array.from(parents);\n\n while (Arr.isNonEmpty(mut_rest)) {\n const p = mut_rest.pop();\n\n if (p === undefined) break;\n\n if (isManagerObservable(p)) {\n p.addDescendant(child);\n } else {\n // trace back dependency graph\n mut_rest.push(...p.parents);\n }\n }\n};\n\nconst tryComplete = <A,>({\n hasSubscriber,\n hasActiveChild,\n parents,\n complete,\n}: Readonly<{\n hasSubscriber: boolean;\n hasActiveChild: boolean;\n parents: ChildObservable<A>['parents'];\n complete: () => void;\n}>): void => {\n // If there is no working parent node\n if (parents.every((r) => r.isCompleted)) {\n complete();\n\n return;\n }\n\n // If there are no active child node\n if (!hasSubscriber && !hasActiveChild) {\n complete();\n }\n\n // propagate to parents\n for (const par of parents) {\n par.tryComplete();\n }\n};\n\nexport class AsyncChildObservableClass<A, const P extends NonEmptyUnknownList>\n extends ObservableBaseClass<A, 'async child', number>\n implements AsyncChildObservable<A, P>\n{\n #mut_propagationOrder: readonly ChildObservable<unknown>[];\n readonly parents;\n protected readonly descendantsIdSet: MutableSet<ObservableId>;\n\n constructor({\n parents,\n depth = 1 + maxDepth(parents),\n initialValue,\n }: Readonly<{\n parents: Wrap<P>;\n depth?: number;\n initialValue: ReturnType<AsyncChildObservable<A>['getSnapshot']>;\n }>) {\n super({\n kind: 'async child',\n depth,\n initialValue,\n });\n\n this.parents = parents;\n\n this.#mut_propagationOrder = [];\n\n this.descendantsIdSet = new Set<ObservableId>();\n\n registerChild(this, parents);\n }\n\n // overload\n addDescendant<B>(child: ChildObservable<B>): void {\n if (this.descendantsIdSet.has(child.id)) return;\n\n this.descendantsIdSet.add(child.id);\n\n const insertPos = binarySearch(\n this.#mut_propagationOrder.map((a) => a.depth),\n child.depth,\n );\n\n this.#mut_propagationOrder = Arr.toInserted(\n this.#mut_propagationOrder,\n insertPos,\n child,\n );\n }\n\n startUpdate(nextValue: A): void {\n const updateToken = issueUpdateToken();\n\n this.setNext(nextValue, updateToken);\n\n for (const p of this.#mut_propagationOrder) {\n p.tryUpdate(updateToken);\n }\n }\n\n override complete(): void {\n super.complete();\n\n // propagate to parents\n for (const par of this.parents) {\n par.tryComplete();\n }\n }\n\n override tryComplete(): void {\n tryComplete({\n complete: () => {\n this.complete();\n },\n hasActiveChild: this.hasActiveChild(),\n hasSubscriber: this.hasSubscriber,\n parents: this.parents,\n });\n }\n}\n\nexport class SyncChildObservableClass<A, const P extends NonEmptyUnknownList>\n extends ObservableBaseClass<A, 'sync child', number>\n implements SyncChildObservable<A, P>\n{\n readonly parents;\n\n constructor({\n parents,\n depth = 1 + maxDepth(parents),\n initialValue,\n }: Readonly<{\n parents: Wrap<P>;\n depth?: number;\n initialValue: ReturnType<SyncChildObservable<A>['getSnapshot']>;\n }>) {\n super({\n kind: 'sync child',\n depth,\n initialValue,\n });\n\n this.parents = parents;\n\n registerChild(this, parents);\n }\n\n override complete(): void {\n super.complete();\n\n for (const par of this.parents) {\n par.tryComplete();\n }\n }\n\n override tryComplete(): void {\n tryComplete({\n complete: () => {\n this.complete();\n },\n hasActiveChild: this.hasActiveChild(),\n hasSubscriber: this.hasSubscriber,\n parents: this.parents,\n });\n }\n}\n\nexport class InitializedSyncChildObservableClass<\n A,\n const P extends NonEmptyUnknownList,\n>\n extends SyncChildObservableClass<A, P>\n implements InitializedSyncChildObservable<A, P>\n{\n constructor({\n parents,\n depth = 1 + maxDepth(parents),\n initialValue,\n }: Readonly<{\n parents: Wrap<P>;\n depth?: number;\n initialValue: ReturnType<InitializedSyncChildObservable<A>['getSnapshot']>;\n }>) {\n super({ parents, depth, initialValue });\n }\n\n override getSnapshot(): Some<A> {\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return super.getCurrentValue() as Some<A>;\n }\n\n override pipe<B>(\n operator: KeepInitialValueOperator<A, B> | WithInitialValueOperator<A, B>,\n ): InitializedObservable<B>;\n\n override pipe<B>(operator: Operator<A, B>): Observable<B>;\n override pipe<B>(operator: Operator<A, B>): Observable<B> {\n return operator(this);\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-base-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGb,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAQ5B,qBAAa,mBAAmB,CAC9B,CAAC,EACD,IAAI,SAAS,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,KAAK,SAAS,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CACxC,YAAW,cAAc,CAAC,CAAC,CAAC;;
|
|
1
|
+
{"version":3,"file":"observable-base-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,qBAAqB,EAC1B,KAAK,UAAU,EACf,KAAK,cAAc,EACnB,KAAK,QAAQ,EAGb,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,wBAAwB,EAC9B,MAAM,oBAAoB,CAAC;AAQ5B,qBAAa,mBAAmB,CAC9B,CAAC,EACD,IAAI,SAAS,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EACtC,KAAK,SAAS,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CACxC,YAAW,cAAc,CAAC,CAAC,CAAC;;IAM5B,QAAQ,CAAC,EAAE,yCAAC;IACZ,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAEtB,YAAY,EACV,IAAI,EACJ,KAAK,EACL,YAAY,GACb,EAAE,QAAQ,CAAC;QACV,IAAI,EAAE,IAAI,CAAC;QACX,KAAK,EAAE,KAAK,CAAC;QACb,YAAY,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC;KAC5D,CAAC,EAgBD;IAeD,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAM3C;IAED,WAAW,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAE1D;IAED,SAAS,CAAC,eAAe,IAAI,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAExE;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,WAAW,IAAI,WAAW,CAE7B;IAED,IAAI,aAAa,IAAI,OAAO,CAE3B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,cAAc,IAAI,OAAO,CAExB;IAED,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,WAAW,GAAG,IAAI,CAQ9D;IAGD,SAAS,CAAC,YAAY,EAAE,WAAW,GAAG,IAAI,CAEzC;IAED,WAAW,IAAI,IAAI,CAIlB;IAED,QAAQ,IAAI,IAAI,CAkBf;IAED,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5E,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IAQjD,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,UAAU,CAAC,EAAE,MAAM,IAAI,GAAG,YAAY,CAyBvE;CACF"}
|
|
@@ -3,113 +3,117 @@ import { issueObservableId, issueUpdateToken, issueSubscriberId } from '../utils
|
|
|
3
3
|
import { toSubscriber } from '../utils/observable-utils.mjs';
|
|
4
4
|
|
|
5
5
|
class ObservableBaseClass {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
6
|
+
#mut_children;
|
|
7
|
+
#subscribers;
|
|
8
|
+
#mut_currentValue;
|
|
9
|
+
#mut_isCompleted;
|
|
10
|
+
#mut_updateToken;
|
|
11
|
+
id;
|
|
12
|
+
kind;
|
|
13
|
+
depth;
|
|
14
|
+
constructor({
|
|
15
|
+
kind,
|
|
16
|
+
depth,
|
|
17
|
+
initialValue
|
|
18
|
+
}) {
|
|
19
|
+
this.kind = kind;
|
|
20
|
+
this.depth = depth;
|
|
21
|
+
this.id = issueObservableId();
|
|
22
|
+
this.#mut_currentValue = initialValue;
|
|
23
|
+
this.#mut_children = [];
|
|
24
|
+
this.#subscribers = /* @__PURE__ */ new Map();
|
|
25
|
+
this.#mut_isCompleted = false;
|
|
26
|
+
this.#mut_updateToken = issueUpdateToken();
|
|
27
|
+
}
|
|
28
|
+
#addSubscriber(s) {
|
|
29
|
+
const id = issueSubscriberId();
|
|
30
|
+
this.#subscribers.set(id, s);
|
|
31
|
+
return id;
|
|
32
|
+
}
|
|
33
|
+
#removeSubscriber(id) {
|
|
34
|
+
this.#subscribers.delete(id);
|
|
35
|
+
}
|
|
36
|
+
addChild(child) {
|
|
37
|
+
this.#mut_children = Arr.toPushed(
|
|
38
|
+
this.#mut_children,
|
|
39
|
+
child
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
getSnapshot() {
|
|
43
|
+
return this.#mut_currentValue;
|
|
44
|
+
}
|
|
45
|
+
getCurrentValue() {
|
|
46
|
+
return this.#mut_currentValue;
|
|
47
|
+
}
|
|
48
|
+
get isCompleted() {
|
|
49
|
+
return this.#mut_isCompleted;
|
|
50
|
+
}
|
|
51
|
+
get updateToken() {
|
|
52
|
+
return this.#mut_updateToken;
|
|
53
|
+
}
|
|
54
|
+
get hasSubscriber() {
|
|
55
|
+
return this.#subscribers.size > 0;
|
|
56
|
+
}
|
|
57
|
+
get hasChild() {
|
|
58
|
+
return Arr.isNonEmpty(this.#mut_children);
|
|
59
|
+
}
|
|
60
|
+
hasActiveChild() {
|
|
61
|
+
return this.#mut_children.some((c) => !c.isCompleted);
|
|
62
|
+
}
|
|
63
|
+
setNext(nextValue, updateToken) {
|
|
64
|
+
this.#mut_updateToken = updateToken;
|
|
65
|
+
this.#mut_currentValue = Optional.some(nextValue);
|
|
66
|
+
for (const s of this.#subscribers.values()) {
|
|
67
|
+
s.onNext(nextValue);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// eslint-disable-next-line @typescript-eslint/class-methods-use-this
|
|
71
|
+
tryUpdate(_updateToken) {
|
|
72
|
+
throw new Error("not implemented");
|
|
73
|
+
}
|
|
74
|
+
tryComplete() {
|
|
75
|
+
if (!this.hasSubscriber && !this.hasActiveChild()) {
|
|
76
|
+
this.complete();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
complete() {
|
|
80
|
+
if (this.isCompleted) return;
|
|
81
|
+
this.#mut_isCompleted = true;
|
|
82
|
+
for (const s of this.#subscribers.values()) {
|
|
83
|
+
s.onComplete();
|
|
84
|
+
}
|
|
85
|
+
this.#subscribers.clear();
|
|
86
|
+
for (const o of this.#mut_children) {
|
|
87
|
+
o.tryComplete();
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
pipe(operator) {
|
|
91
|
+
return operator(
|
|
92
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
93
|
+
this
|
|
94
|
+
);
|
|
95
|
+
}
|
|
96
|
+
subscribe(onNext, onComplete) {
|
|
97
|
+
const curr = this.getSnapshot();
|
|
98
|
+
if (Optional.isSome(curr)) {
|
|
99
|
+
onNext(curr.value);
|
|
100
|
+
}
|
|
101
|
+
if (this.isCompleted) {
|
|
102
|
+
if (onComplete !== void 0) {
|
|
103
|
+
onComplete();
|
|
104
|
+
}
|
|
105
|
+
return { unsubscribe: () => {
|
|
106
|
+
} };
|
|
107
|
+
}
|
|
108
|
+
const id = this.#addSubscriber(
|
|
109
|
+
toSubscriber(onNext, onComplete)
|
|
110
|
+
);
|
|
111
|
+
return {
|
|
112
|
+
unsubscribe: () => {
|
|
113
|
+
this.#removeSubscriber(id);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
}
|
|
113
117
|
}
|
|
114
118
|
|
|
115
119
|
export { ObservableBaseClass };
|