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
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
import { Optional } from 'ts-data-forge';
|
|
9
9
|
import { unreachable } from 'ts-std-forge';
|
|
10
10
|
import { getCurrentScopeInternals, notUpdatedYet, observableBrand, toSubscriber, } from '../utils/index.mjs';
|
|
11
|
+
import { enqueueChildren } from './propagation-state.mjs';
|
|
11
12
|
|
|
12
13
|
|
|
13
14
|
|
|
@@ -38,6 +39,7 @@ export class ObservableBaseClass {
|
|
|
38
39
|
#mut_children;
|
|
39
40
|
#mut_subscribers;
|
|
40
41
|
#mut_scope;
|
|
42
|
+
#mut_queuedFor;
|
|
41
43
|
kind;
|
|
42
44
|
depth;
|
|
43
45
|
constructor({ kind, depth, initialValue, }) {
|
|
@@ -46,6 +48,7 @@ export class ObservableBaseClass {
|
|
|
46
48
|
this.#mut_snapshot = initialValue;
|
|
47
49
|
this.#mut_isCompleted = false;
|
|
48
50
|
this.#mut_updateToken = notUpdatedYet;
|
|
51
|
+
this.#mut_queuedFor = undefined;
|
|
49
52
|
this.#mut_children = undefined;
|
|
50
53
|
this.#mut_subscribers = undefined;
|
|
51
54
|
this.#mut_scope = undefined;
|
|
@@ -76,6 +79,12 @@ export class ObservableBaseClass {
|
|
|
76
79
|
}
|
|
77
80
|
return false;
|
|
78
81
|
}
|
|
82
|
+
get queuedFor() {
|
|
83
|
+
return this.#mut_queuedFor;
|
|
84
|
+
}
|
|
85
|
+
setQueuedFor(updateToken) {
|
|
86
|
+
this.#mut_queuedFor = updateToken;
|
|
87
|
+
}
|
|
79
88
|
addChild(child) {
|
|
80
89
|
|
|
81
90
|
|
|
@@ -90,9 +99,17 @@ export class ObservableBaseClass {
|
|
|
90
99
|
this.#mut_children?.delete(child);
|
|
91
100
|
}
|
|
92
101
|
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
|
|
93
107
|
setNext(nextValue, updateToken) {
|
|
94
108
|
this.#mut_updateToken = updateToken;
|
|
95
109
|
this.#mut_snapshot = Optional.some(nextValue);
|
|
110
|
+
if (this.#mut_children !== undefined) {
|
|
111
|
+
enqueueChildren(this.#mut_children, updateToken);
|
|
112
|
+
}
|
|
96
113
|
if (this.#mut_subscribers !== undefined) {
|
|
97
114
|
for (const s of this.#mut_subscribers) {
|
|
98
115
|
s.onNext(nextValue);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-base-class.mjs","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,yDAAyD;AACzD,4EAA4E;AAC5E,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAe3C,OAAO,EACL,wBAAwB,EACxB,aAAa,EACb,eAAe,EACf,YAAY,GAEb,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"observable-base-class.mjs","sourceRoot":"","sources":["../../../src/core/class/observable-base-class.mts"],"names":[],"mappings":"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"}
|
|
@@ -14,21 +14,17 @@ type NodeInternals = Readonly<{
|
|
|
14
14
|
addChild: (child: ChildNode) => void;
|
|
15
15
|
deleteChild: (child: ChildNode) => void;
|
|
16
16
|
/**
|
|
17
|
-
* The
|
|
18
|
-
*
|
|
19
|
-
* has one. Cached so that creating a child does not walk its ancestors.
|
|
17
|
+
* The last update that queued this node (`propagation-state.mts`). Left in
|
|
18
|
+
* place after the visit: the next update has another token.
|
|
20
19
|
*/
|
|
21
|
-
|
|
20
|
+
queuedFor: UpdateToken | undefined;
|
|
21
|
+
setQueuedFor: (updateToken: UpdateToken) => void;
|
|
22
22
|
}>;
|
|
23
23
|
/** An observable, as the other nodes of the graph see it. */
|
|
24
24
|
export type ObservableNode<A = unknown> = NodeInternals & Observable<A>;
|
|
25
25
|
export type ChildNode = NodeInternals & ObservableBase<unknown> & Readonly<{
|
|
26
26
|
parents: readonly Observable<unknown>[];
|
|
27
27
|
}>;
|
|
28
|
-
export type ManagerNode = NodeInternals & ObservableBase<unknown> & Readonly<{
|
|
29
|
-
addDescendant: (child: ChildNode) => void;
|
|
30
|
-
deleteDescendant: (child: ChildNode) => void;
|
|
31
|
-
}>;
|
|
32
28
|
/**
|
|
33
29
|
* The one place a public observable is seen as the node it is. Every
|
|
34
30
|
* observable is built by a synstate class, and the public types carry a
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-node.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-node.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,KAAK,aAAa,GAAG,QAAQ,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAExC
|
|
1
|
+
{"version":3,"file":"observable-node.d.mts","sourceRoot":"","sources":["../../../src/core/class/observable-node.mts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAE5B;;;;;GAKG;AACH,KAAK,aAAa,GAAG,QAAQ,CAAC;IAC5B,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,MAAM,OAAO,CAAC;IAC9B,SAAS,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAExC;;;OAGG;IACH,SAAS,EAAE,WAAW,GAAG,SAAS,CAAC;IAEnC,YAAY,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,IAAI,CAAC;CAClD,CAAC,CAAC;AAEH,6DAA6D;AAC7D,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,OAAO,IAAI,aAAa,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,SAAS,GAAG,aAAa,GACnC,cAAc,CAAC,OAAO,CAAC,GACvB,QAAQ,CAAC;IACP,OAAO,EAAE,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;CACzC,CAAC,CAAC;AAEL;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,CAAC,cAAe,UAAU,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAEtC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observable-node.mjs","sourceRoot":"","sources":["../../../src/core/class/observable-node.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"observable-node.mjs","sourceRoot":"","sources":["../../../src/core/class/observable-node.mts"],"names":[],"mappings":"AAuCA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAK,UAAyB,EAAqB,EAAE;AACzE,4DAA4D;AAC5D,UAA+B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { UpdateToken } from '../types/index.mjs';
|
|
2
|
+
import type { ChildNode } from './observable-node.mjs';
|
|
2
3
|
/**
|
|
3
4
|
* Whether some observable's update is propagating right now. A root written
|
|
4
5
|
* to while one is, is written to from inside a subscriber or a projection
|
|
@@ -21,4 +22,29 @@ export declare const beginPropagation: (updateToken: UpdateToken) => void;
|
|
|
21
22
|
* has ended.
|
|
22
23
|
*/
|
|
23
24
|
export declare const endPropagation: () => void;
|
|
25
|
+
/**
|
|
26
|
+
* Opens an update started by a node at `depth`, and returns its token. The
|
|
27
|
+
* token is the update's queue: a node that emits with it puts its children
|
|
28
|
+
* there, whichever copy of synstate the node belongs to, so that an update
|
|
29
|
+
* reaches every node its value reaches, and each once, in ascending depth.
|
|
30
|
+
* Close it with {@link closeUpdate}.
|
|
31
|
+
*/
|
|
32
|
+
export declare const openUpdate: (depth: number) => UpdateToken;
|
|
33
|
+
/**
|
|
34
|
+
* How many updates of one copy may be open at once, one inside another. An
|
|
35
|
+
* update opens inside another only when a subscriber or projection writes to
|
|
36
|
+
* a root while the outer one is propagating; a chain of such writes this deep
|
|
37
|
+
* is a loop that would otherwise run until the stack overflows.
|
|
38
|
+
*/
|
|
39
|
+
export declare const maxUpdateNesting = 100;
|
|
40
|
+
export declare const updateLoopMessage: `synstate: more than ${string} updates were nested, one started inside another: a subscriber or projection keeps writing to an observable whose update reaches it again. Make the write stop (a condition, or a value equal to the current one), or derive the value with map / combine.`;
|
|
41
|
+
/** Visits every node the update has queued, shallowest first. */
|
|
42
|
+
export declare const drainUpdate: (updateToken: UpdateToken) => void;
|
|
43
|
+
/** Closes an update, emptying what an exception left in its buckets. */
|
|
44
|
+
export declare const closeUpdate: (updateToken: UpdateToken) => void;
|
|
45
|
+
/**
|
|
46
|
+
* Puts the children of a node that emitted with `updateToken` into that
|
|
47
|
+
* update's queue. The update may belong to another copy of synstate.
|
|
48
|
+
*/
|
|
49
|
+
export declare const enqueueChildren: (children: ReadonlySet<ChildNode>, updateToken: UpdateToken) => void;
|
|
24
50
|
//# sourceMappingURL=propagation-state.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propagation-state.d.mts","sourceRoot":"","sources":["../../../src/core/class/propagation-state.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"propagation-state.d.mts","sourceRoot":"","sources":["../../../src/core/class/propagation-state.mts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAiBvD;;;;GAIG;AACH,eAAO,MAAM,aAAa,QAAO,OAAoC,CAAC;AAEtE,iEAAiE;AACjE,eAAO,MAAM,oBAAoB,QAAO,WAAW,GAAG,SACtB,CAAC;AAEjC;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,SAAU,MAAM,IAAI,KAAG,IAMtD,CAAC;AAEF,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,gBAAiB,WAAW,KAAG,IAM3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,QAAO,IAcjC,CAAC;AAcF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,UAAW,MAAM,KAAG,WAY1C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,MAAM,CAAC;AAEpC,eAAO,MAAM,iBAAiB,2RAC2R,CAAC;AAE1T,iEAAiE;AACjE,eAAO,MAAM,WAAW,gBAAiB,WAAW,KAAG,IAEtD,CAAC;AAEF,wEAAwE;AACxE,eAAO,MAAM,WAAW,gBAAiB,WAAW,KAAG,IAItD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,aAChB,WAAW,CAAC,SAAS,CAAC,eACnB,WAAW,KACvB,IAEF,CAAC"}
|
|
@@ -7,7 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
10
14
|
import { Arr } from 'ts-data-forge';
|
|
15
|
+
import { panic } from 'ts-std-forge';
|
|
11
16
|
|
|
12
17
|
|
|
13
18
|
|
|
@@ -63,4 +68,189 @@ export const endPropagation = () => {
|
|
|
63
68
|
mut_afterPropagation.shift()?.();
|
|
64
69
|
}
|
|
65
70
|
};
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
const mut_bucketSets = [];
|
|
79
|
+
|
|
80
|
+
const mut_queueState = { level: 0 };
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
export const openUpdate = (depth) => {
|
|
89
|
+
if (mut_queueState.level >= maxUpdateNesting) {
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
panic(updateLoopMessage);
|
|
95
|
+
}
|
|
96
|
+
mut_queueState.level += 1;
|
|
97
|
+
return toToken(new UpdateQueue(depth + 1, mut_queueState.level));
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
export const maxUpdateNesting = 100;
|
|
106
|
+
export const updateLoopMessage = `synstate: more than ${maxUpdateNesting.toString()} updates were nested, one started inside another: a subscriber or projection keeps writing to an observable whose update reaches it again. Make the write stop (a condition, or a value equal to the current one), or derive the value with map / combine.`;
|
|
107
|
+
|
|
108
|
+
export const drainUpdate = (updateToken) => {
|
|
109
|
+
toQueue(updateToken).drain();
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
export const closeUpdate = (updateToken) => {
|
|
113
|
+
toQueue(updateToken).close();
|
|
114
|
+
mut_queueState.level -= 1;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
export const enqueueChildren = (children, updateToken) => {
|
|
121
|
+
toQueue(updateToken).enqueueChildren(children);
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class UpdateQueue {
|
|
134
|
+
#base;
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
#mut_buckets;
|
|
138
|
+
#mut_size;
|
|
139
|
+
#mut_isOpen;
|
|
140
|
+
#mut_queuedDespiteMark;
|
|
141
|
+
|
|
142
|
+
constructor(base, level) {
|
|
143
|
+
this.#base = base;
|
|
144
|
+
const mut_buckets = mut_bucketSets[level - 1] ?? [];
|
|
145
|
+
mut_bucketSets[level - 1] = mut_buckets;
|
|
146
|
+
this.#mut_buckets = mut_buckets;
|
|
147
|
+
this.#mut_size = 0;
|
|
148
|
+
this.#mut_isOpen = true;
|
|
149
|
+
this.#mut_queuedDespiteMark = undefined;
|
|
150
|
+
}
|
|
151
|
+
#push(child) {
|
|
152
|
+
const index = child.depth - this.#base;
|
|
153
|
+
const mut_buckets = this.#mut_buckets;
|
|
154
|
+
while (mut_buckets.length <= index) {
|
|
155
|
+
mut_buckets.push({ nodes: [], length: 0 });
|
|
156
|
+
}
|
|
157
|
+
if (index >= this.#mut_size) {
|
|
158
|
+
this.#mut_size = index + 1;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
const mut_bucket = mut_buckets[index];
|
|
163
|
+
const { nodes: mut_nodes, length } = mut_bucket;
|
|
164
|
+
if (length < mut_nodes.length) {
|
|
165
|
+
mut_nodes[length] = child;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
mut_nodes.push(child);
|
|
169
|
+
}
|
|
170
|
+
mut_bucket.length = length + 1;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
get isOpen() {
|
|
174
|
+
return this.#mut_isOpen;
|
|
175
|
+
}
|
|
176
|
+
enqueueChildren(children) {
|
|
177
|
+
const ownMark = toToken(this);
|
|
178
|
+
for (const child of children) {
|
|
179
|
+
const mark = child.queuedFor;
|
|
180
|
+
if (mark === ownMark) {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (mark !== undefined && toQueue(mark).isOpen) {
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
if (this.#mut_queuedDespiteMark === undefined) {
|
|
187
|
+
this.#mut_queuedDespiteMark = new Set();
|
|
188
|
+
}
|
|
189
|
+
else if (this.#mut_queuedDespiteMark.has(child)) {
|
|
190
|
+
continue;
|
|
191
|
+
}
|
|
192
|
+
this.#mut_queuedDespiteMark.add(child);
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
child.setQueuedFor(ownMark);
|
|
196
|
+
}
|
|
197
|
+
this.#push(child);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
drain() {
|
|
201
|
+
const token = toToken(this);
|
|
202
|
+
const mut_buckets = this.#mut_buckets;
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
for (let mut_index = 0; mut_index < this.#mut_size; mut_index += 1) {
|
|
207
|
+
const mut_bucket = mut_buckets[mut_index];
|
|
208
|
+
if (mut_bucket === undefined) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
const { nodes: mut_nodes, length } = mut_bucket;
|
|
215
|
+
|
|
216
|
+
for (let mut_slot = 0; mut_slot < length; mut_slot += 1) {
|
|
217
|
+
const node = mut_nodes[mut_slot];
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
mut_nodes[mut_slot] = undefined;
|
|
221
|
+
if (node !== undefined && !node.isCompleted) {
|
|
222
|
+
node.tryUpdate(token);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
mut_bucket.length = 0;
|
|
226
|
+
}
|
|
227
|
+
this.#mut_size = 0;
|
|
228
|
+
}
|
|
229
|
+
close() {
|
|
230
|
+
const mut_buckets = this.#mut_buckets;
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
for (let mut_index = 0; mut_index < this.#mut_size; mut_index += 1) {
|
|
234
|
+
const mut_bucket = mut_buckets[mut_index];
|
|
235
|
+
if (mut_bucket === undefined) {
|
|
236
|
+
continue;
|
|
237
|
+
}
|
|
238
|
+
mut_bucket.nodes.fill(undefined, 0, mut_bucket.length);
|
|
239
|
+
mut_bucket.length = 0;
|
|
240
|
+
}
|
|
241
|
+
this.#mut_size = 0;
|
|
242
|
+
this.#mut_isOpen = false;
|
|
243
|
+
this.#mut_queuedDespiteMark = undefined;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
const toQueue = (updateToken) =>
|
|
251
|
+
|
|
252
|
+
updateToken;
|
|
253
|
+
const toToken = (queue) =>
|
|
254
|
+
|
|
255
|
+
queue;
|
|
66
256
|
//# sourceMappingURL=propagation-state.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"propagation-state.mjs","sourceRoot":"","sources":["../../../src/core/class/propagation-state.mts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"propagation-state.mjs","sourceRoot":"","sources":["../../../src/core/class/propagation-state.mts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/operators/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/operators/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/operators/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/operators/index.mts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,wBAAwB,CAAC;AACvC,cAAc,WAAW,CAAC;AAC1B,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type ReplaceEqualDeepOptions } from 'ts-data-forge';
|
|
2
|
+
import type { KeepInitialValueOperator } from '../types/index.mjs';
|
|
3
|
+
/**
|
|
4
|
+
* Passes on each value with every part deeply equal to the same part of the
|
|
5
|
+
* value passed on before replaced by that part, and skips a value deeply
|
|
6
|
+
* equal to it altogether (structural sharing). A reader of a part that did
|
|
7
|
+
* not change keeps the object it has, so `skipIfNoChange()` with `Object.is`
|
|
8
|
+
* stops it. Superset of `skipIfNoChange(fastDeepEqual)`.
|
|
9
|
+
*
|
|
10
|
+
* **Prefer keeping references where the value is written** — compare before
|
|
11
|
+
* `setState`, and skip it when nothing changed — so that nothing downstream
|
|
12
|
+
* has anything to undo. The `keepEqualParts` option of `createState` and
|
|
13
|
+
* `createReducer` does it for a state written whole, and `replaceEqualDeep`
|
|
14
|
+
* of ts-data-forge does it for any other write. This operator lets every
|
|
15
|
+
* update that changes nothing reach the source and everything up to it, and
|
|
16
|
+
* walks the whole value again on each one; reach for it when the source is
|
|
17
|
+
* not yours to change (a stream that arrives whole from outside).
|
|
18
|
+
*
|
|
19
|
+
* Array items are matched by index; pass `{ key }` to match them by key, an
|
|
20
|
+
* item for which `key` returns `undefined` being matched by index. Only plain
|
|
21
|
+
* objects and arrays are walked into; a `Map`, a `Set`, a `Date` or a class
|
|
22
|
+
* instance is compared and kept whole. The values must not be changed after
|
|
23
|
+
* they are passed on, because the parts kept are shared by later values.
|
|
24
|
+
*
|
|
25
|
+
* @template A - The type of values from the source
|
|
26
|
+
* @param options - `key`, to match array items by key rather than by index
|
|
27
|
+
* @returns An operator that keeps the parts that did not change
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```ts
|
|
31
|
+
* type Board = DeepReadonly<{
|
|
32
|
+
* title: string;
|
|
33
|
+
* cards: { id: number; text: string }[];
|
|
34
|
+
* }>;
|
|
35
|
+
*
|
|
36
|
+
* // A stream that arrives whole from outside (a WebSocket, say), each
|
|
37
|
+
* // message a new object even when nothing changed. A state you write
|
|
38
|
+
* // yourself takes `createState(initial, { keepEqualParts: true })`
|
|
39
|
+
* // instead.
|
|
40
|
+
* const message$ = source<Board>();
|
|
41
|
+
*
|
|
42
|
+
* const board$ = message$.pipe(keepEqualParts());
|
|
43
|
+
*
|
|
44
|
+
* const firstCard$ = board$
|
|
45
|
+
* .pipe(map((board) => board.cards[0]))
|
|
46
|
+
* .pipe(skipIfNoChange());
|
|
47
|
+
*
|
|
48
|
+
* const boardHistory: Board[] = [];
|
|
49
|
+
*
|
|
50
|
+
* board$.subscribe((board) => {
|
|
51
|
+
* boardHistory.push(board);
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* const firstCardHistory: unknown[] = [];
|
|
55
|
+
*
|
|
56
|
+
* firstCard$.subscribe((card) => {
|
|
57
|
+
* firstCardHistory.push(card);
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* message$.next({ title: 'todo', cards: [{ id: 1, text: 'a' }] });
|
|
61
|
+
*
|
|
62
|
+
* // Equal to the last one: nothing is passed on.
|
|
63
|
+
* message$.next({ title: 'todo', cards: [{ id: 1, text: 'a' }] });
|
|
64
|
+
*
|
|
65
|
+
* assert.strictEqual(boardHistory.length, 1);
|
|
66
|
+
*
|
|
67
|
+
* // A card added: a new board, but the first card is the one passed on
|
|
68
|
+
* // before, so `firstCard$` is not told of it.
|
|
69
|
+
* message$.next({
|
|
70
|
+
* title: 'todo',
|
|
71
|
+
* cards: [
|
|
72
|
+
* { id: 1, text: 'a' },
|
|
73
|
+
* { id: 2, text: 'b' },
|
|
74
|
+
* ],
|
|
75
|
+
* });
|
|
76
|
+
*
|
|
77
|
+
* assert.strictEqual(boardHistory.length, 2);
|
|
78
|
+
*
|
|
79
|
+
* assert.strictEqual(boardHistory[1]?.cards[0], boardHistory[0]?.cards[0]);
|
|
80
|
+
*
|
|
81
|
+
* assert.strictEqual(firstCardHistory.length, 1);
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare const keepEqualParts: <A>(options?: ReplaceEqualDeepOptions) => KeepInitialValueOperator<A, A>;
|
|
85
|
+
//# sourceMappingURL=keep-equal-parts.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keep-equal-parts.d.mts","sourceRoot":"","sources":["../../../src/core/operators/keep-equal-parts.mts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,uBAAuB,EAC7B,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAEV,wBAAwB,EAGzB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,YACpB,uBAAuB,KAChC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
import { Optional, replaceEqualDeep, } from 'ts-data-forge';
|
|
9
|
+
import { SyncChildObservableClass } from '../class/index.mjs';
|
|
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
|
+
export const keepEqualParts = (options) =>
|
|
92
|
+
|
|
93
|
+
((parentObservable) => new KeepEqualPartsObservableClass(parentObservable, options));
|
|
94
|
+
class KeepEqualPartsObservableClass extends SyncChildObservableClass {
|
|
95
|
+
#options;
|
|
96
|
+
#mut_previousValue;
|
|
97
|
+
constructor(parentObservable, options) {
|
|
98
|
+
super({
|
|
99
|
+
parents: [parentObservable],
|
|
100
|
+
initialValue: parentObservable.getSnapshot(),
|
|
101
|
+
});
|
|
102
|
+
this.#mut_previousValue = parentObservable.getSnapshot();
|
|
103
|
+
this.#options = options;
|
|
104
|
+
this.attach();
|
|
105
|
+
}
|
|
106
|
+
tryUpdate(updateToken) {
|
|
107
|
+
const par = this.parents[0];
|
|
108
|
+
const sn = par.getSnapshot();
|
|
109
|
+
if (par.updateToken !== updateToken || Optional.isNone(sn)) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const prev = this.#mut_previousValue;
|
|
113
|
+
if (Optional.isNone(prev)) {
|
|
114
|
+
this.#mut_previousValue = sn;
|
|
115
|
+
this.setNext(sn.value, updateToken);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const kept = replaceEqualDeep(prev.value, sn.value, this.#options);
|
|
119
|
+
if (Object.is(kept, prev.value)) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
this.#mut_previousValue = Object.is(kept, sn.value)
|
|
124
|
+
? sn
|
|
125
|
+
: Optional.some(kept);
|
|
126
|
+
this.setNext(kept, updateToken);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=keep-equal-parts.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keep-equal-parts.mjs","sourceRoot":"","sources":["../../../src/core/operators/keep-equal-parts.mts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,yCAAyC;AACzC,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EACL,QAAQ,EACR,gBAAgB,GAEjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAQ9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgFG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,OAAiC,EACD,EAAE;AAClC,4DAA4D;AAC5D,CAAC,CAAC,gBAAgB,EAAE,EAAE,CACpB,IAAI,6BAA6B,CAC/B,gBAAgB,EAChB,OAAO,CACR,CAAmC,CAAC;AAEzC,MAAM,6BACJ,SAAQ,wBAAyC;IAGxC,QAAQ,CAAsC;IACvD,kBAAkB,CAAc;IAEhC,YACE,gBAA+B,EAC/B,OAA4C;QAE5C,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,gBAAgB,CAAC,WAAW,EAAE;SAC7C,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAEzD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;QAExB,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEQ,SAAS,CAAC,WAAwB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAE7B,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB,CAAC;QAErC,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;YAE7B,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;YAEpC,OAAO;QACT,CAAC;QAED,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEnE,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO;QACT,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC;YACjD,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAExB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAClC,CAAC;CACF"}
|
|
@@ -137,9 +137,7 @@ class MergeMapObservableClass extends AsyncChildObservableClass {
|
|
|
137
137
|
const innerScope = createScope(this.#ownerScope);
|
|
138
138
|
this.#mut_innerScopes = Arr.toPushed(this.#mut_innerScopes, innerScope);
|
|
139
139
|
const observable = innerScope.run(() => this.#mapToObservable(sn.value));
|
|
140
|
-
const subscription =
|
|
141
|
-
this.startUpdate(curr);
|
|
142
|
-
});
|
|
140
|
+
const subscription = this.subscribeInner(observable, updateToken);
|
|
143
141
|
this.#mut_subscriptions = Arr.toPushed(this.#mut_subscriptions, subscription);
|
|
144
142
|
}
|
|
145
143
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-map.mjs","sourceRoot":"","sources":["../../../src/core/operators/merge-map.mts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,yCAAyC;AACzC,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAUlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH,MAAM,CAAC,MAAM,QAAQ,GACnB,CACE,eAA2C,EACX,EAAE,CACpC,CAAC,gBAAgB,EAAE,EAAE,CACnB,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,MAAM,uBACJ,SAAQ,yBAA0C;IAGzC,gBAAgB,CAA6B;IAEtD,sCAAsC;IAC7B,WAAW,CAAoB;IAExC,gBAAgB,CAAmB;IACnC,kBAAkB,CAA0B;IAE5C,YACE,gBAA+B,EAC/B,eAA2C;QAE3C,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAExC,IAAI,CAAC,WAAW,GAAG,eAAe,EAAE,CAAC;QAErC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEQ,SAAS,CAAC,WAAwB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAE7B,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAExE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzE,MAAM,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"merge-map.mjs","sourceRoot":"","sources":["../../../src/core/operators/merge-map.mts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,6EAA6E;AAC7E,yCAAyC;AACzC,2CAA2C;AAC3C,gDAAgD;AAChD,0DAA0D;AAC1D,kEAAkE;AAClE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAUlE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgGG;AACH,MAAM,CAAC,MAAM,QAAQ,GACnB,CACE,eAA2C,EACX,EAAE,CACpC,CAAC,gBAAgB,EAAE,EAAE,CACnB,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAEnE;;;GAGG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,MAAM,uBACJ,SAAQ,yBAA0C;IAGzC,gBAAgB,CAA6B;IAEtD,sCAAsC;IAC7B,WAAW,CAAoB;IAExC,gBAAgB,CAAmB;IACnC,kBAAkB,CAA0B;IAE5C,YACE,gBAA+B,EAC/B,eAA2C;QAE3C,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;SAC5B,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;QAExC,IAAI,CAAC,WAAW,GAAG,eAAe,EAAE,CAAC;QAErC,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;QAE3B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;IAChB,CAAC;IAEQ,SAAS,CAAC,WAAwB;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAE5B,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QAE7B,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjD,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QAExE,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAEzE,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;QAElE,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,QAAQ,CACpC,IAAI,CAAC,kBAAkB,EACvB,YAAY,CACb,CAAC;IACJ,CAAC;IAED,yEAAyE;IACtD,QAAQ;QACzB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxC,CAAC,CAAC,WAAW,EAAE,CAAC;QAClB,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAC1C,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;CACF"}
|