synstate 0.1.2 → 1.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 +199 -146
- package/dist/core/class/child-observable-class.d.mts.map +1 -1
- package/dist/core/class/child-observable-class.mjs +43 -10
- package/dist/core/class/child-observable-class.mjs.map +1 -1
- package/dist/core/class/observable-base-class.d.mts +4 -4
- package/dist/core/class/observable-base-class.d.mts.map +1 -1
- package/dist/core/class/observable-base-class.mjs +8 -8
- package/dist/core/class/observable-base-class.mjs.map +1 -1
- package/dist/core/class/root-observable-class.d.mts +1 -1
- package/dist/core/class/root-observable-class.d.mts.map +1 -1
- package/dist/core/class/root-observable-class.mjs +9 -9
- package/dist/core/class/root-observable-class.mjs.map +1 -1
- package/dist/core/combine/combine.d.mts +6 -6
- package/dist/core/combine/combine.mjs +11 -12
- package/dist/core/combine/combine.mjs.map +1 -1
- package/dist/core/combine/merge.d.mts +6 -6
- package/dist/core/combine/merge.mjs +9 -9
- package/dist/core/combine/merge.mjs.map +1 -1
- package/dist/core/combine/zip.d.mts +20 -19
- package/dist/core/combine/zip.d.mts.map +1 -1
- package/dist/core/combine/zip.mjs +22 -21
- package/dist/core/combine/zip.mjs.map +1 -1
- package/dist/core/create/{interval.d.mts → counter.d.mts} +14 -12
- package/dist/core/create/counter.d.mts.map +1 -0
- package/dist/core/create/{interval.mjs → counter.mjs} +21 -23
- package/dist/core/create/counter.mjs.map +1 -0
- package/dist/core/create/from-abortable-promise.d.mts +29 -0
- package/dist/core/create/from-abortable-promise.d.mts.map +1 -0
- package/dist/core/create/from-abortable-promise.mjs +70 -0
- package/dist/core/create/from-abortable-promise.mjs.map +1 -0
- package/dist/core/create/from-promise.d.mts +9 -6
- package/dist/core/create/from-promise.d.mts.map +1 -1
- package/dist/core/create/from-promise.mjs +8 -5
- package/dist/core/create/from-promise.mjs.map +1 -1
- package/dist/core/create/from-subscribable.d.mts +4 -4
- package/dist/core/create/from-subscribable.mjs +4 -4
- package/dist/core/create/index.d.mts +3 -3
- package/dist/core/create/index.d.mts.map +1 -1
- package/dist/core/create/index.mjs +4 -4
- package/dist/core/create/just.d.mts +32 -0
- package/dist/core/create/just.d.mts.map +1 -0
- package/dist/core/create/just.mjs +44 -0
- package/dist/core/create/just.mjs.map +1 -0
- package/dist/core/create/source.d.mts +7 -12
- package/dist/core/create/source.d.mts.map +1 -1
- package/dist/core/create/source.mjs +1 -6
- package/dist/core/create/source.mjs.map +1 -1
- package/dist/core/create/timer.d.mts +6 -4
- package/dist/core/create/timer.d.mts.map +1 -1
- package/dist/core/create/timer.mjs +6 -7
- package/dist/core/create/timer.mjs.map +1 -1
- package/dist/core/index.d.mts +0 -1
- package/dist/core/index.d.mts.map +1 -1
- package/dist/core/index.mjs +8 -13
- package/dist/core/index.mjs.map +1 -1
- package/dist/core/operators/audit.d.mts +97 -0
- package/dist/core/operators/audit.d.mts.map +1 -0
- package/dist/core/operators/audit.mjs +144 -0
- package/dist/core/operators/audit.mjs.map +1 -0
- package/dist/core/operators/debounce.d.mts +88 -0
- package/dist/core/operators/debounce.d.mts.map +1 -0
- package/dist/core/operators/debounce.mjs +130 -0
- package/dist/core/operators/debounce.mjs.map +1 -0
- package/dist/core/operators/filter.d.mts +5 -5
- package/dist/core/operators/filter.mjs +3 -3
- package/dist/core/operators/filter.mjs.map +1 -1
- package/dist/core/operators/index.d.mts +4 -4
- package/dist/core/operators/index.d.mts.map +1 -1
- package/dist/core/operators/index.mjs +4 -4
- package/dist/core/operators/{map-with-index.d.mts → map.d.mts} +11 -11
- package/dist/core/operators/map.d.mts.map +1 -0
- package/dist/core/operators/{map-with-index.mjs → map.mjs} +17 -17
- package/dist/core/operators/map.mjs.map +1 -0
- package/dist/core/operators/merge-map.d.mts +56 -29
- package/dist/core/operators/merge-map.d.mts.map +1 -1
- package/dist/core/operators/merge-map.mjs +58 -31
- package/dist/core/operators/merge-map.mjs.map +1 -1
- package/dist/core/operators/pairwise.d.mts +6 -6
- package/dist/core/operators/pairwise.mjs +9 -9
- package/dist/core/operators/pairwise.mjs.map +1 -1
- package/dist/core/operators/scan.d.mts +6 -6
- package/dist/core/operators/scan.mjs +9 -9
- package/dist/core/operators/scan.mjs.map +1 -1
- package/dist/core/operators/skip-if-no-change.d.mts +20 -8
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
- package/dist/core/operators/skip-if-no-change.mjs +23 -11
- package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
- package/dist/core/operators/skip-until.d.mts +5 -5
- package/dist/core/operators/skip-until.mjs +8 -8
- package/dist/core/operators/skip-until.mjs.map +1 -1
- package/dist/core/operators/skip-while.d.mts +18 -8
- package/dist/core/operators/skip-while.d.mts.map +1 -1
- package/dist/core/operators/skip-while.mjs +26 -11
- package/dist/core/operators/skip-while.mjs.map +1 -1
- package/dist/core/operators/switch-map.d.mts +57 -26
- package/dist/core/operators/switch-map.d.mts.map +1 -1
- package/dist/core/operators/switch-map.mjs +59 -28
- package/dist/core/operators/switch-map.mjs.map +1 -1
- package/dist/core/operators/take-until.d.mts +5 -5
- package/dist/core/operators/take-until.mjs +8 -8
- package/dist/core/operators/take-until.mjs.map +1 -1
- package/dist/core/operators/take-while.d.mts +15 -7
- package/dist/core/operators/take-while.d.mts.map +1 -1
- package/dist/core/operators/take-while.mjs +18 -10
- package/dist/core/operators/take-while.mjs.map +1 -1
- package/dist/core/operators/throttle.d.mts +81 -0
- package/dist/core/operators/throttle.d.mts.map +1 -0
- package/dist/core/operators/throttle.mjs +126 -0
- package/dist/core/operators/throttle.mjs.map +1 -0
- package/dist/core/operators/with-buffered-from.d.mts +9 -9
- package/dist/core/operators/with-buffered-from.mjs +12 -12
- package/dist/core/operators/with-buffered-from.mjs.map +1 -1
- package/dist/core/operators/with-current-value-from.d.mts +10 -9
- package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
- package/dist/core/operators/with-current-value-from.mjs +13 -12
- package/dist/core/operators/with-current-value-from.mjs.map +1 -1
- package/dist/core/operators/with-initial-value.d.mts +5 -5
- package/dist/core/operators/with-initial-value.mjs +8 -8
- package/dist/core/operators/with-initial-value.mjs.map +1 -1
- package/dist/core/predefined/index.mjs +0 -1
- package/dist/core/predefined/index.mjs.map +1 -1
- package/dist/core/predefined/operators/attach-index.d.mts +49 -0
- package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
- package/dist/core/predefined/operators/attach-index.mjs +51 -2
- package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
- package/dist/core/predefined/operators/index.d.mts +0 -1
- package/dist/core/predefined/operators/index.d.mts.map +1 -1
- package/dist/core/predefined/operators/index.mjs +0 -1
- package/dist/core/predefined/operators/index.mjs.map +1 -1
- package/dist/core/predefined/operators/map-optional.d.mts +47 -0
- package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-optional.mjs +49 -1
- package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/map-result-err.d.mts +47 -0
- package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-result-err.mjs +49 -1
- package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
- package/dist/core/predefined/operators/map-result-ok.d.mts +47 -0
- package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-result-ok.mjs +49 -1
- package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
- package/dist/core/predefined/operators/map-to.d.mts +40 -0
- package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
- package/dist/core/predefined/operators/map-to.mjs +43 -1
- package/dist/core/predefined/operators/map-to.mjs.map +1 -1
- package/dist/core/predefined/operators/pluck.d.mts +39 -0
- package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
- package/dist/core/predefined/operators/pluck.mjs +42 -1
- package/dist/core/predefined/operators/pluck.mjs.map +1 -1
- package/dist/core/predefined/operators/skip.d.mts +47 -0
- package/dist/core/predefined/operators/skip.d.mts.map +1 -1
- package/dist/core/predefined/operators/skip.mjs +47 -0
- package/dist/core/predefined/operators/skip.mjs.map +1 -1
- package/dist/core/predefined/operators/take.d.mts +41 -0
- package/dist/core/predefined/operators/take.d.mts.map +1 -1
- package/dist/core/predefined/operators/take.mjs +41 -0
- package/dist/core/predefined/operators/take.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.d.mts +40 -0
- package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs +42 -1
- package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-err.d.mts +40 -0
- package/dist/core/predefined/operators/unwrap-result-err.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-err.mjs +42 -1
- package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts +40 -0
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs +42 -1
- package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
- package/dist/core/types/id.d.mts +1 -1
- package/dist/core/types/id.d.mts.map +1 -1
- package/dist/core/types/index.d.mts +1 -0
- package/dist/core/types/index.d.mts.map +1 -1
- package/dist/core/types/observable-family.d.mts +8 -14
- package/dist/core/types/observable-family.d.mts.map +1 -1
- package/dist/core/types/observable.d.mts +3 -3
- package/dist/core/types/observable.d.mts.map +1 -1
- package/dist/core/types/timer.d.mts +2 -0
- package/dist/core/types/timer.d.mts.map +1 -0
- package/dist/core/types/timer.mjs +2 -0
- package/dist/core/types/timer.mjs.map +1 -0
- package/dist/core/utils/id-maker.d.mts +2 -2
- package/dist/core/utils/id-maker.d.mts.map +1 -1
- package/dist/core/utils/id-maker.mjs +3 -3
- package/dist/core/utils/id-maker.mjs.map +1 -1
- package/dist/core/utils/index.mjs +1 -1
- package/dist/entry-point.mjs +11 -14
- package/dist/entry-point.mjs.map +1 -1
- package/dist/globals.d.mts +0 -3
- package/dist/index.mjs +11 -14
- package/dist/index.mjs.map +1 -1
- package/dist/utils/collect-to-array.d.mts +3 -0
- package/dist/utils/collect-to-array.d.mts.map +1 -0
- package/dist/utils/collect-to-array.mjs +11 -0
- package/dist/utils/collect-to-array.mjs.map +1 -0
- package/dist/utils/create-boolean-state.d.mts +40 -0
- package/dist/utils/create-boolean-state.d.mts.map +1 -0
- package/dist/utils/create-boolean-state.mjs +53 -0
- package/dist/utils/create-boolean-state.mjs.map +1 -0
- package/dist/utils/create-event-emitter.d.mts +4 -4
- package/dist/utils/create-event-emitter.mjs +4 -4
- package/dist/utils/create-reducer.d.mts +10 -7
- package/dist/utils/create-reducer.d.mts.map +1 -1
- package/dist/utils/create-reducer.mjs +7 -7
- package/dist/utils/create-reducer.mjs.map +1 -1
- package/dist/utils/create-state.d.mts +8 -48
- package/dist/utils/create-state.d.mts.map +1 -1
- package/dist/utils/create-state.mjs +10 -60
- package/dist/utils/create-state.mjs.map +1 -1
- package/dist/utils/index.d.mts +2 -0
- package/dist/utils/index.d.mts.map +1 -1
- package/dist/utils/index.mjs +3 -1
- package/dist/utils/index.mjs.map +1 -1
- package/package.json +17 -11
- package/src/core/class/child-observable-class.mts +65 -9
- package/src/core/class/circular-dependency-comparison.test.mts +142 -0
- package/src/core/class/circular-dependency.test.mts +251 -0
- package/src/core/class/observable-base-class.mts +9 -9
- package/src/core/class/root-observable-class.mts +14 -10
- package/src/core/combine/combine.mts +13 -13
- package/src/core/combine/merge.mts +13 -14
- package/src/core/combine/zip.mts +26 -25
- package/src/core/create/{interval.mts → counter.mts} +32 -30
- package/src/core/create/from-abortable-promise.mts +83 -0
- package/src/core/create/from-promise.mts +10 -7
- package/src/core/create/from-subscribable.mts +4 -4
- package/src/core/create/index.mts +3 -3
- package/src/core/create/just.mts +43 -0
- package/src/core/create/source.mts +10 -14
- package/src/core/create/timer.mts +12 -11
- package/src/core/index.mts +0 -1
- package/src/core/operators/audit.mts +172 -0
- package/src/core/operators/debounce.mts +154 -0
- package/src/core/operators/filter.mts +9 -9
- package/src/core/operators/index.mts +4 -4
- package/src/core/operators/{map-with-index.mts → map.mts} +20 -20
- package/src/core/operators/merge-map.mts +59 -32
- package/src/core/operators/pairwise.mts +10 -10
- package/src/core/operators/scan.mts +10 -10
- package/src/core/operators/skip-if-no-change.mts +24 -12
- package/src/core/operators/skip-until.mts +9 -9
- package/src/core/operators/skip-while.mts +29 -12
- package/src/core/operators/switch-map.mts +60 -29
- package/src/core/operators/take-until.mts +9 -9
- package/src/core/operators/take-while.mts +19 -11
- package/src/core/operators/{throttle-time.mts → throttle.mts} +58 -38
- package/src/core/operators/with-buffered-from.mts +13 -13
- package/src/core/operators/with-current-value-from.mts +14 -13
- package/src/core/operators/with-initial-value.mts +9 -9
- package/src/core/predefined/operators/attach-index.mts +51 -2
- package/src/core/predefined/operators/index.mts +0 -1
- package/src/core/predefined/operators/map-optional.mts +48 -1
- package/src/core/predefined/operators/map-result-err.mts +48 -1
- package/src/core/predefined/operators/map-result-ok.mts +48 -1
- package/src/core/predefined/operators/map-to.mts +41 -1
- package/src/core/predefined/operators/pluck.mts +40 -1
- package/src/core/predefined/operators/skip.mts +47 -0
- package/src/core/predefined/operators/take.mts +41 -0
- package/src/core/predefined/operators/unwrap-optional.mts +41 -1
- package/src/core/predefined/operators/unwrap-result-err.mts +41 -1
- package/src/core/predefined/operators/unwrap-result-ok.mts +41 -1
- package/src/core/types/id.mts +1 -1
- package/src/core/types/index.mts +1 -0
- package/src/core/types/observable-family.mts +8 -24
- package/src/core/types/observable.mts +3 -3
- package/src/core/types/timer.mts +2 -0
- package/src/core/utils/id-maker.mts +4 -4
- package/src/globals.d.mts +0 -3
- package/src/utils/collect-to-array.mts +17 -0
- package/src/utils/create-boolean-state.mts +68 -0
- package/src/utils/create-event-emitter.mts +4 -4
- package/src/utils/create-reducer.mts +11 -8
- package/src/utils/create-state.mts +10 -75
- package/src/utils/index.mts +2 -0
- package/dist/core/create/from-array.d.mts +0 -39
- package/dist/core/create/from-array.d.mts.map +0 -1
- package/dist/core/create/from-array.mjs +0 -65
- package/dist/core/create/from-array.mjs.map +0 -1
- package/dist/core/create/interval.d.mts.map +0 -1
- package/dist/core/create/interval.mjs.map +0 -1
- package/dist/core/create/of.d.mts +0 -39
- package/dist/core/create/of.d.mts.map +0 -1
- package/dist/core/create/of.mjs +0 -63
- package/dist/core/create/of.mjs.map +0 -1
- package/dist/core/operators/audit-time.d.mts +0 -62
- package/dist/core/operators/audit-time.d.mts.map +0 -1
- package/dist/core/operators/audit-time.mjs +0 -109
- package/dist/core/operators/audit-time.mjs.map +0 -1
- package/dist/core/operators/debounce-time.d.mts +0 -51
- package/dist/core/operators/debounce-time.d.mts.map +0 -1
- package/dist/core/operators/debounce-time.mjs +0 -93
- package/dist/core/operators/debounce-time.mjs.map +0 -1
- package/dist/core/operators/map-with-index.d.mts.map +0 -1
- package/dist/core/operators/map-with-index.mjs.map +0 -1
- package/dist/core/operators/throttle-time.d.mts +0 -62
- package/dist/core/operators/throttle-time.d.mts.map +0 -1
- package/dist/core/operators/throttle-time.mjs +0 -107
- package/dist/core/operators/throttle-time.mjs.map +0 -1
- package/dist/core/predefined/operators/map.d.mts +0 -3
- package/dist/core/predefined/operators/map.d.mts.map +0 -1
- package/dist/core/predefined/operators/map.mjs +0 -8
- package/dist/core/predefined/operators/map.mjs.map +0 -1
- package/src/core/create/from-array.mts +0 -76
- package/src/core/create/of.mts +0 -73
- package/src/core/operators/audit-time.mts +0 -136
- package/src/core/operators/debounce-time.mts +0 -116
- package/src/core/predefined/operators/map.mts +0 -5
|
@@ -11,8 +11,8 @@ import { type KeepInitialValueOperator } from '../types/index.mjs';
|
|
|
11
11
|
* ```ts
|
|
12
12
|
* // Timeline:
|
|
13
13
|
* //
|
|
14
|
-
* // num$ "
|
|
15
|
-
* // indexed$ "0:
|
|
14
|
+
* // num$ "A" "B" "C"
|
|
15
|
+
* // indexed$ "0: A" "1: B" "2: C"
|
|
16
16
|
* //
|
|
17
17
|
* // Explanation:
|
|
18
18
|
* // - mapWithIndex transforms each value along with its index
|
|
@@ -20,22 +20,22 @@ import { type KeepInitialValueOperator } from '../types/index.mjs';
|
|
|
20
20
|
*
|
|
21
21
|
* const num$ = source<string>();
|
|
22
22
|
*
|
|
23
|
-
* const indexed$ = num$.pipe(
|
|
23
|
+
* const indexed$ = num$.pipe(map((x, i) => `${i}: ${x}`));
|
|
24
24
|
*
|
|
25
|
-
* const
|
|
25
|
+
* const valueHistory: string[] = [];
|
|
26
26
|
*
|
|
27
27
|
* indexed$.subscribe((s) => {
|
|
28
|
-
*
|
|
28
|
+
* valueHistory.push(s);
|
|
29
29
|
* });
|
|
30
30
|
*
|
|
31
|
-
* num$.next('
|
|
31
|
+
* num$.next('A'); // 0: A
|
|
32
32
|
*
|
|
33
|
-
* num$.next('
|
|
33
|
+
* num$.next('B'); // 1: B
|
|
34
34
|
*
|
|
35
|
-
* num$.next('
|
|
35
|
+
* num$.next('C'); // 2: C
|
|
36
36
|
*
|
|
37
|
-
* assert.deepStrictEqual(
|
|
37
|
+
* assert.deepStrictEqual(valueHistory, ['0: A', '1: B', '2: C']);
|
|
38
38
|
* ```
|
|
39
39
|
*/
|
|
40
|
-
export declare const
|
|
41
|
-
//# sourceMappingURL=map
|
|
40
|
+
export declare const map: <A, B>(mapFn: (x: A, index: SafeUint | -1) => B) => KeepInitialValueOperator<A, B>;
|
|
41
|
+
//# sourceMappingURL=map.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.d.mts","sourceRoot":"","sources":["../../../src/core/operators/map.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,CAAC,EACtB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KACvC,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
|
|
@@ -14,8 +14,8 @@ import '../utils/id-maker.mjs';
|
|
|
14
14
|
* ```ts
|
|
15
15
|
* // Timeline:
|
|
16
16
|
* //
|
|
17
|
-
* // num$ "
|
|
18
|
-
* // indexed$ "0:
|
|
17
|
+
* // num$ "A" "B" "C"
|
|
18
|
+
* // indexed$ "0: A" "1: B" "2: C"
|
|
19
19
|
* //
|
|
20
20
|
* // Explanation:
|
|
21
21
|
* // - mapWithIndex transforms each value along with its index
|
|
@@ -23,28 +23,28 @@ import '../utils/id-maker.mjs';
|
|
|
23
23
|
*
|
|
24
24
|
* const num$ = source<string>();
|
|
25
25
|
*
|
|
26
|
-
* const indexed$ = num$.pipe(
|
|
26
|
+
* const indexed$ = num$.pipe(map((x, i) => `${i}: ${x}`));
|
|
27
27
|
*
|
|
28
|
-
* const
|
|
28
|
+
* const valueHistory: string[] = [];
|
|
29
29
|
*
|
|
30
30
|
* indexed$.subscribe((s) => {
|
|
31
|
-
*
|
|
31
|
+
* valueHistory.push(s);
|
|
32
32
|
* });
|
|
33
33
|
*
|
|
34
|
-
* num$.next('
|
|
34
|
+
* num$.next('A'); // 0: A
|
|
35
35
|
*
|
|
36
|
-
* num$.next('
|
|
36
|
+
* num$.next('B'); // 1: B
|
|
37
37
|
*
|
|
38
|
-
* num$.next('
|
|
38
|
+
* num$.next('C'); // 2: C
|
|
39
39
|
*
|
|
40
|
-
* assert.deepStrictEqual(
|
|
40
|
+
* assert.deepStrictEqual(valueHistory, ['0: A', '1: B', '2: C']);
|
|
41
41
|
* ```
|
|
42
42
|
*/
|
|
43
|
-
const
|
|
43
|
+
const map = (mapFn) =>
|
|
44
44
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
45
|
-
((parentObservable) => new
|
|
45
|
+
((parentObservable) => new MapObservableClass(parentObservable, mapFn));
|
|
46
46
|
/* implementation */
|
|
47
|
-
class
|
|
47
|
+
class MapObservableClass extends SyncChildObservableClass {
|
|
48
48
|
#mapFn;
|
|
49
49
|
#mut_index;
|
|
50
50
|
constructor(parentObservable, mapFn) {
|
|
@@ -55,17 +55,17 @@ class MapWithIndexObservableClass extends SyncChildObservableClass {
|
|
|
55
55
|
this.#mut_index = -1;
|
|
56
56
|
this.#mapFn = mapFn;
|
|
57
57
|
}
|
|
58
|
-
tryUpdate(
|
|
58
|
+
tryUpdate(updateToken) {
|
|
59
59
|
const par = this.parents[0];
|
|
60
60
|
const sn = par.getSnapshot();
|
|
61
|
-
if (par.
|
|
61
|
+
if (par.updateToken !== updateToken || Optional.isNone(sn)) {
|
|
62
62
|
return; // skip update
|
|
63
63
|
}
|
|
64
64
|
this.#mut_index =
|
|
65
65
|
this.#mut_index === -1 ? asSafeUint(0) : SafeUint.add(1, this.#mut_index);
|
|
66
|
-
this.setNext(this.#mapFn(sn.value, this.#mut_index),
|
|
66
|
+
this.setNext(this.#mapFn(sn.value, this.#mut_index), updateToken);
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export {
|
|
71
|
-
//# sourceMappingURL=map
|
|
70
|
+
export { map };
|
|
71
|
+
//# sourceMappingURL=map.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"map.mjs","sources":["../../../src/core/operators/map.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCG;AACI,MAAM,GAAG,GAAG,CACjB,KAAwC;AAExC;AACA,CAAC,CAAC,gBAAgB,KAChB,IAAI,kBAAkB,CACpB,gBAAgB,EAChB,KAAK,CACN;AAEL;AAEA,MAAM,kBACJ,SAAQ,wBAAyC,CAAA;AAGxC,IAAA,MAAM;AACf,IAAA,UAAU;IAEV,WAAA,CACE,gBAA+B,EAC/B,KAAwC,EAAA;AAExC,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,KAC3D,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CACb;AACF,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AAEpB,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;;AAGZ,IAAA,SAAS,CAAC,WAAwB,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC1D,YAAA,OAAO;;AAGT,QAAA,IAAI,CAAC,UAAU;YACb,IAAI,CAAC,UAAU,KAAK,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC;AAE3E,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW,CAAC;;AAEpE;;;;"}
|
|
@@ -12,56 +12,83 @@ import { type DropInitialValueOperator, type Observable } from '../types/index.m
|
|
|
12
12
|
* ```ts
|
|
13
13
|
* // Timeline:
|
|
14
14
|
* //
|
|
15
|
-
* //
|
|
16
|
-
* //
|
|
17
|
-
* //
|
|
18
|
-
* //
|
|
15
|
+
* // input$ A B C
|
|
16
|
+
* // inner A A1 A2 A3
|
|
17
|
+
* // inner B B1 B2 B3
|
|
18
|
+
* // inner C C1 C2 C3
|
|
19
|
+
* // result$ A1 A2 A3 B1 B2 C1 B3 C2 C3
|
|
19
20
|
* //
|
|
20
21
|
* // Explanation:
|
|
21
|
-
* // - mergeMap
|
|
22
|
-
* // -
|
|
23
|
-
* // -
|
|
24
|
-
* // - All
|
|
22
|
+
* // - mergeMap creates an inner observable for each source value
|
|
23
|
+
* // - Unlike switchMap, previous inner observables are NOT cancelled
|
|
24
|
+
* // - B's inner continues even after C arrives (B3 is still emitted)
|
|
25
|
+
* // - All inner observables run concurrently and their results are merged
|
|
25
26
|
*
|
|
26
|
-
* const
|
|
27
|
+
* const input$ = source<string>();
|
|
27
28
|
*
|
|
28
|
-
* const
|
|
29
|
-
* mergeMap((
|
|
30
|
-
* const
|
|
29
|
+
* const result$ = input$.pipe(
|
|
30
|
+
* mergeMap((letter) => {
|
|
31
|
+
* const inner$ = source<string>();
|
|
31
32
|
*
|
|
32
33
|
* setTimeout(() => {
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* result$.complete();
|
|
34
|
+
* inner$.next(`${letter}1`);
|
|
36
35
|
* }, 10);
|
|
37
36
|
*
|
|
38
|
-
*
|
|
37
|
+
* setTimeout(() => {
|
|
38
|
+
* inner$.next(`${letter}2`);
|
|
39
|
+
* }, 110);
|
|
40
|
+
*
|
|
41
|
+
* setTimeout(() => {
|
|
42
|
+
* inner$.next(`${letter}3`);
|
|
43
|
+
* }, 210);
|
|
44
|
+
*
|
|
45
|
+
* return inner$;
|
|
39
46
|
* }),
|
|
40
47
|
* );
|
|
41
48
|
*
|
|
42
|
-
* const
|
|
49
|
+
* const valueHistory: string[] = [];
|
|
43
50
|
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
51
|
+
* result$.subscribe((value) => {
|
|
52
|
+
* valueHistory.push(value);
|
|
46
53
|
* });
|
|
47
54
|
*
|
|
48
|
-
*
|
|
55
|
+
* const sleep = (ms: number): Promise<void> =>
|
|
56
|
+
* new Promise((resolve) => {
|
|
57
|
+
* setTimeout(resolve, ms);
|
|
58
|
+
* });
|
|
49
59
|
*
|
|
50
|
-
*
|
|
60
|
+
* // Emit A - inner emits A1, A2, A3 at 10ms, 110ms, 210ms
|
|
61
|
+
* input$.next('A');
|
|
51
62
|
*
|
|
52
|
-
*
|
|
63
|
+
* await sleep(250);
|
|
53
64
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
65
|
+
* assert.deepStrictEqual(valueHistory, ['A1', 'A2', 'A3']);
|
|
66
|
+
*
|
|
67
|
+
* // Emit B - inner starts emitting B1, B2 at 10ms, 110ms
|
|
68
|
+
* input$.next('B');
|
|
69
|
+
*
|
|
70
|
+
* await sleep(150);
|
|
57
71
|
*
|
|
58
|
-
* assert.deepStrictEqual(
|
|
72
|
+
* assert.deepStrictEqual(valueHistory, ['A1', 'A2', 'A3', 'B1', 'B2']);
|
|
59
73
|
*
|
|
60
|
-
*
|
|
74
|
+
* // Emit C while B's inner is still running (B3 at 210ms not yet fired)
|
|
75
|
+
* // Unlike switchMap, B's inner is NOT cancelled
|
|
76
|
+
* input$.next('C');
|
|
61
77
|
*
|
|
62
|
-
*
|
|
78
|
+
* await sleep(250);
|
|
63
79
|
*
|
|
64
|
-
*
|
|
80
|
+
* // B3 appears between C1 and C2, showing the merge behavior
|
|
81
|
+
* assert.deepStrictEqual(valueHistory, [
|
|
82
|
+
* 'A1',
|
|
83
|
+
* 'A2',
|
|
84
|
+
* 'A3',
|
|
85
|
+
* 'B1',
|
|
86
|
+
* 'B2',
|
|
87
|
+
* 'C1',
|
|
88
|
+
* 'B3',
|
|
89
|
+
* 'C2',
|
|
90
|
+
* 'C3',
|
|
91
|
+
* ]);
|
|
65
92
|
* ```
|
|
66
93
|
*
|
|
67
94
|
* @note To improve code readability, consider using `createState` instead of `mergeMap`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-map.d.mts","sourceRoot":"","sources":["../../../src/core/operators/merge-map.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"merge-map.d.mts","sourceRoot":"","sources":["../../../src/core/operators/merge-map.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAE7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8FG;AACH,eAAO,MAAM,QAAQ,GAClB,CAAC,EAAE,CAAC,EACH,iBAAiB,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,KAC1C,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAEgC,CAAC;AAEnE;;;GAGG;AACH,eAAO,MAAM,OAAO,GAVjB,CAAC,EAAE,CAAC,mBACc,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,KAC1C,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAQH,CAAC"}
|
|
@@ -15,56 +15,83 @@ import '../utils/id-maker.mjs';
|
|
|
15
15
|
* ```ts
|
|
16
16
|
* // Timeline:
|
|
17
17
|
* //
|
|
18
|
-
* //
|
|
19
|
-
* //
|
|
20
|
-
* //
|
|
21
|
-
* //
|
|
18
|
+
* // input$ A B C
|
|
19
|
+
* // inner A A1 A2 A3
|
|
20
|
+
* // inner B B1 B2 B3
|
|
21
|
+
* // inner C C1 C2 C3
|
|
22
|
+
* // result$ A1 A2 A3 B1 B2 C1 B3 C2 C3
|
|
22
23
|
* //
|
|
23
24
|
* // Explanation:
|
|
24
|
-
* // - mergeMap
|
|
25
|
-
* // -
|
|
26
|
-
* // -
|
|
27
|
-
* // - All
|
|
25
|
+
* // - mergeMap creates an inner observable for each source value
|
|
26
|
+
* // - Unlike switchMap, previous inner observables are NOT cancelled
|
|
27
|
+
* // - B's inner continues even after C arrives (B3 is still emitted)
|
|
28
|
+
* // - All inner observables run concurrently and their results are merged
|
|
28
29
|
*
|
|
29
|
-
* const
|
|
30
|
+
* const input$ = source<string>();
|
|
30
31
|
*
|
|
31
|
-
* const
|
|
32
|
-
* mergeMap((
|
|
33
|
-
* const
|
|
32
|
+
* const result$ = input$.pipe(
|
|
33
|
+
* mergeMap((letter) => {
|
|
34
|
+
* const inner$ = source<string>();
|
|
34
35
|
*
|
|
35
36
|
* setTimeout(() => {
|
|
36
|
-
*
|
|
37
|
-
*
|
|
38
|
-
* result$.complete();
|
|
37
|
+
* inner$.next(`${letter}1`);
|
|
39
38
|
* }, 10);
|
|
40
39
|
*
|
|
41
|
-
*
|
|
40
|
+
* setTimeout(() => {
|
|
41
|
+
* inner$.next(`${letter}2`);
|
|
42
|
+
* }, 110);
|
|
43
|
+
*
|
|
44
|
+
* setTimeout(() => {
|
|
45
|
+
* inner$.next(`${letter}3`);
|
|
46
|
+
* }, 210);
|
|
47
|
+
*
|
|
48
|
+
* return inner$;
|
|
42
49
|
* }),
|
|
43
50
|
* );
|
|
44
51
|
*
|
|
45
|
-
* const
|
|
52
|
+
* const valueHistory: string[] = [];
|
|
46
53
|
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
54
|
+
* result$.subscribe((value) => {
|
|
55
|
+
* valueHistory.push(value);
|
|
49
56
|
* });
|
|
50
57
|
*
|
|
51
|
-
*
|
|
58
|
+
* const sleep = (ms: number): Promise<void> =>
|
|
59
|
+
* new Promise((resolve) => {
|
|
60
|
+
* setTimeout(resolve, ms);
|
|
61
|
+
* });
|
|
52
62
|
*
|
|
53
|
-
*
|
|
63
|
+
* // Emit A - inner emits A1, A2, A3 at 10ms, 110ms, 210ms
|
|
64
|
+
* input$.next('A');
|
|
54
65
|
*
|
|
55
|
-
*
|
|
66
|
+
* await sleep(250);
|
|
56
67
|
*
|
|
57
|
-
*
|
|
58
|
-
*
|
|
59
|
-
*
|
|
68
|
+
* assert.deepStrictEqual(valueHistory, ['A1', 'A2', 'A3']);
|
|
69
|
+
*
|
|
70
|
+
* // Emit B - inner starts emitting B1, B2 at 10ms, 110ms
|
|
71
|
+
* input$.next('B');
|
|
72
|
+
*
|
|
73
|
+
* await sleep(150);
|
|
60
74
|
*
|
|
61
|
-
* assert.deepStrictEqual(
|
|
75
|
+
* assert.deepStrictEqual(valueHistory, ['A1', 'A2', 'A3', 'B1', 'B2']);
|
|
62
76
|
*
|
|
63
|
-
*
|
|
77
|
+
* // Emit C while B's inner is still running (B3 at 210ms not yet fired)
|
|
78
|
+
* // Unlike switchMap, B's inner is NOT cancelled
|
|
79
|
+
* input$.next('C');
|
|
64
80
|
*
|
|
65
|
-
*
|
|
81
|
+
* await sleep(250);
|
|
66
82
|
*
|
|
67
|
-
*
|
|
83
|
+
* // B3 appears between C1 and C2, showing the merge behavior
|
|
84
|
+
* assert.deepStrictEqual(valueHistory, [
|
|
85
|
+
* 'A1',
|
|
86
|
+
* 'A2',
|
|
87
|
+
* 'A3',
|
|
88
|
+
* 'B1',
|
|
89
|
+
* 'B2',
|
|
90
|
+
* 'C1',
|
|
91
|
+
* 'B3',
|
|
92
|
+
* 'C2',
|
|
93
|
+
* 'C3',
|
|
94
|
+
* ]);
|
|
68
95
|
* ```
|
|
69
96
|
*
|
|
70
97
|
* @note To improve code readability, consider using `createState` instead of `mergeMap`,
|
|
@@ -89,10 +116,10 @@ class MergeMapObservableClass extends AsyncChildObservableClass {
|
|
|
89
116
|
this.#mut_observables = [];
|
|
90
117
|
this.#mut_subscriptions = [];
|
|
91
118
|
}
|
|
92
|
-
tryUpdate(
|
|
119
|
+
tryUpdate(updateToken) {
|
|
93
120
|
const par = this.parents[0];
|
|
94
121
|
const sn = par.getSnapshot();
|
|
95
|
-
if (par.
|
|
122
|
+
if (par.updateToken !== updateToken || Optional.isNone(sn)) {
|
|
96
123
|
return; // skip update
|
|
97
124
|
}
|
|
98
125
|
const observable = this.#mapToObservable(sn.value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-map.mjs","sources":["../../../src/core/operators/merge-map.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA
|
|
1
|
+
{"version":3,"file":"merge-map.mjs","sources":["../../../src/core/operators/merge-map.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FG;MACU,QAAQ,GACnB,CACE,eAA2C,KAE7C,CAAC,gBAAgB,KACf,IAAI,uBAAuB,CAAC,gBAAgB,EAAE,eAAe;AAEjE;;;AAGG;AACI,MAAM,OAAO,GAAG;AAEvB,MAAM,uBACJ,SAAQ,yBAA0C,CAAA;AAGzC,IAAA,gBAAgB;AACzB,IAAA,gBAAgB;AAChB,IAAA,kBAAkB;IAElB,WAAA,CACE,gBAA+B,EAC/B,eAA2C,EAAA;AAE3C,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,gBAAgB,GAAG,eAAe;AAEvC,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;AAE1B,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;IAC9B;AAES,IAAA,SAAS,CAAC,WAAwB,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC1D,YAAA,OAAO;QACT;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC;AAElD,QAAA,IAAI,CAAC,gBAAgB,GAAG,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC;QAEvE,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AACjD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;AACxB,QAAA,CAAC,CAAC;AAEF,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,QAAQ,CACpC,IAAI,CAAC,kBAAkB,EACvB,YAAY,CACb;IACH;IAES,QAAQ,GAAA;AACf,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACvC,CAAC,CAAC,WAAW,EAAE;QACjB;AAEA,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE;YACrC,CAAC,CAAC,QAAQ,EAAE;QACd;QAEA,KAAK,CAAC,QAAQ,EAAE;IAClB;AACD;;;;"}
|
|
@@ -22,30 +22,30 @@ import { type DropInitialValueOperator } from '../types/index.mjs';
|
|
|
22
22
|
*
|
|
23
23
|
* const pairs$ = num$.pipe(pairwise());
|
|
24
24
|
*
|
|
25
|
-
* const
|
|
25
|
+
* const valueHistory: (readonly [number, number])[] = [];
|
|
26
26
|
*
|
|
27
27
|
* pairs$.subscribe(([prev, curr]) => {
|
|
28
|
-
*
|
|
28
|
+
* valueHistory.push([prev, curr]);
|
|
29
29
|
* });
|
|
30
30
|
*
|
|
31
31
|
* num$.next(1); // nothing logged
|
|
32
32
|
*
|
|
33
|
-
* assert.deepStrictEqual(
|
|
33
|
+
* assert.deepStrictEqual(valueHistory, []);
|
|
34
34
|
*
|
|
35
35
|
* num$.next(2); // logs: 1, 2
|
|
36
36
|
*
|
|
37
|
-
* assert.deepStrictEqual(
|
|
37
|
+
* assert.deepStrictEqual(valueHistory, [[1, 2]]);
|
|
38
38
|
*
|
|
39
39
|
* num$.next(3); // logs: 2, 3
|
|
40
40
|
*
|
|
41
|
-
* assert.deepStrictEqual(
|
|
41
|
+
* assert.deepStrictEqual(valueHistory, [
|
|
42
42
|
* [1, 2],
|
|
43
43
|
* [2, 3],
|
|
44
44
|
* ]);
|
|
45
45
|
*
|
|
46
46
|
* num$.next(4); // logs: 3, 4
|
|
47
47
|
*
|
|
48
|
-
* assert.deepStrictEqual(
|
|
48
|
+
* assert.deepStrictEqual(valueHistory, [
|
|
49
49
|
* [1, 2],
|
|
50
50
|
* [2, 3],
|
|
51
51
|
* [3, 4],
|
|
@@ -25,30 +25,30 @@ import '../utils/id-maker.mjs';
|
|
|
25
25
|
*
|
|
26
26
|
* const pairs$ = num$.pipe(pairwise());
|
|
27
27
|
*
|
|
28
|
-
* const
|
|
28
|
+
* const valueHistory: (readonly [number, number])[] = [];
|
|
29
29
|
*
|
|
30
30
|
* pairs$.subscribe(([prev, curr]) => {
|
|
31
|
-
*
|
|
31
|
+
* valueHistory.push([prev, curr]);
|
|
32
32
|
* });
|
|
33
33
|
*
|
|
34
34
|
* num$.next(1); // nothing logged
|
|
35
35
|
*
|
|
36
|
-
* assert.deepStrictEqual(
|
|
36
|
+
* assert.deepStrictEqual(valueHistory, []);
|
|
37
37
|
*
|
|
38
38
|
* num$.next(2); // logs: 1, 2
|
|
39
39
|
*
|
|
40
|
-
* assert.deepStrictEqual(
|
|
40
|
+
* assert.deepStrictEqual(valueHistory, [[1, 2]]);
|
|
41
41
|
*
|
|
42
42
|
* num$.next(3); // logs: 2, 3
|
|
43
43
|
*
|
|
44
|
-
* assert.deepStrictEqual(
|
|
44
|
+
* assert.deepStrictEqual(valueHistory, [
|
|
45
45
|
* [1, 2],
|
|
46
46
|
* [2, 3],
|
|
47
47
|
* ]);
|
|
48
48
|
*
|
|
49
49
|
* num$.next(4); // logs: 3, 4
|
|
50
50
|
*
|
|
51
|
-
* assert.deepStrictEqual(
|
|
51
|
+
* assert.deepStrictEqual(valueHistory, [
|
|
52
52
|
* [1, 2],
|
|
53
53
|
* [2, 3],
|
|
54
54
|
* [3, 4],
|
|
@@ -68,10 +68,10 @@ class PairwiseObservableClass extends SyncChildObservableClass {
|
|
|
68
68
|
// if parentObservable is InitializedObservable
|
|
69
69
|
this.#mut_previousValue = parentObservable.getSnapshot();
|
|
70
70
|
}
|
|
71
|
-
tryUpdate(
|
|
71
|
+
tryUpdate(updateToken) {
|
|
72
72
|
const par = this.parents[0];
|
|
73
73
|
const sn = par.getSnapshot();
|
|
74
|
-
if (par.
|
|
74
|
+
if (par.updateToken !== updateToken || Optional.isNone(sn)) {
|
|
75
75
|
return; // skip update
|
|
76
76
|
}
|
|
77
77
|
const prev = this.#mut_previousValue;
|
|
@@ -79,7 +79,7 @@ class PairwiseObservableClass extends SyncChildObservableClass {
|
|
|
79
79
|
// NOTE: Must update before setNext, otherwise Optional.isNone(prev) remains true when tryUpdate is called consecutively
|
|
80
80
|
this.#mut_previousValue = par.getSnapshot();
|
|
81
81
|
if (cond) {
|
|
82
|
-
this.setNext([prev.value, sn.value],
|
|
82
|
+
this.setNext([prev.value, sn.value], updateToken);
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairwise.mjs","sources":["../../../src/core/operators/pairwise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDG;MACU,QAAQ,GAAG,MACtB;AAEF,MAAM,CAAC,GAAG,CAAK,gBAA+B,KAC5C,IAAI,uBAAuB,CAAC,gBAAgB,CAAC;AAE/C,MAAM,uBACJ,SAAQ,wBAAuD,CAAA;AAG/D,IAAA,kBAAkB;AAElB,IAAA,WAAA,CAAY,gBAA+B,EAAA;AACzC,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;;;AAIF,QAAA,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,WAAW,EAAE;IAC1D;AAES,IAAA,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"pairwise.mjs","sources":["../../../src/core/operators/pairwise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDG;MACU,QAAQ,GAAG,MACtB;AAEF,MAAM,CAAC,GAAG,CAAK,gBAA+B,KAC5C,IAAI,uBAAuB,CAAC,gBAAgB,CAAC;AAE/C,MAAM,uBACJ,SAAQ,wBAAuD,CAAA;AAG/D,IAAA,kBAAkB;AAElB,IAAA,WAAA,CAAY,gBAA+B,EAAA;AACzC,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;;;AAIF,QAAA,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,WAAW,EAAE;IAC1D;AAES,IAAA,SAAS,CAAC,WAAwB,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC1D,YAAA,OAAO;QACT;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB;QAEpC,MAAM,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;;AAGnC,QAAA,IAAI,CAAC,kBAAkB,GAAG,GAAG,CAAC,WAAW,EAAE;QAE3C,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;QACnD;IACF;AACD;;;;"}
|
|
@@ -27,25 +27,25 @@ import { type WithInitialValueOperator } from '../types/index.mjs';
|
|
|
27
27
|
*
|
|
28
28
|
* const sum$ = num$.pipe(scan((acc, curr) => acc + curr, 0));
|
|
29
29
|
*
|
|
30
|
-
* const
|
|
30
|
+
* const valueHistory: number[] = [];
|
|
31
31
|
*
|
|
32
32
|
* sum$.subscribe((x) => {
|
|
33
|
-
*
|
|
33
|
+
* valueHistory.push(x);
|
|
34
34
|
* });
|
|
35
35
|
*
|
|
36
|
-
* assert.deepStrictEqual(
|
|
36
|
+
* assert.deepStrictEqual(valueHistory, [0]);
|
|
37
37
|
*
|
|
38
38
|
* num$.next(1); // logs: 1
|
|
39
39
|
*
|
|
40
|
-
* assert.deepStrictEqual(
|
|
40
|
+
* assert.deepStrictEqual(valueHistory, [0, 1]);
|
|
41
41
|
*
|
|
42
42
|
* num$.next(2); // logs: 3
|
|
43
43
|
*
|
|
44
|
-
* assert.deepStrictEqual(
|
|
44
|
+
* assert.deepStrictEqual(valueHistory, [0, 1, 3]);
|
|
45
45
|
*
|
|
46
46
|
* num$.next(3); // logs: 6
|
|
47
47
|
*
|
|
48
|
-
* assert.deepStrictEqual(
|
|
48
|
+
* assert.deepStrictEqual(valueHistory, [0, 1, 3, 6]);
|
|
49
49
|
* ```
|
|
50
50
|
*/
|
|
51
51
|
export declare const scan: <A, B>(reducer: (acc: B, curr: A) => B, initialValue: B) => WithInitialValueOperator<A, B>;
|
|
@@ -30,25 +30,25 @@ import '../utils/id-maker.mjs';
|
|
|
30
30
|
*
|
|
31
31
|
* const sum$ = num$.pipe(scan((acc, curr) => acc + curr, 0));
|
|
32
32
|
*
|
|
33
|
-
* const
|
|
33
|
+
* const valueHistory: number[] = [];
|
|
34
34
|
*
|
|
35
35
|
* sum$.subscribe((x) => {
|
|
36
|
-
*
|
|
36
|
+
* valueHistory.push(x);
|
|
37
37
|
* });
|
|
38
38
|
*
|
|
39
|
-
* assert.deepStrictEqual(
|
|
39
|
+
* assert.deepStrictEqual(valueHistory, [0]);
|
|
40
40
|
*
|
|
41
41
|
* num$.next(1); // logs: 1
|
|
42
42
|
*
|
|
43
|
-
* assert.deepStrictEqual(
|
|
43
|
+
* assert.deepStrictEqual(valueHistory, [0, 1]);
|
|
44
44
|
*
|
|
45
45
|
* num$.next(2); // logs: 3
|
|
46
46
|
*
|
|
47
|
-
* assert.deepStrictEqual(
|
|
47
|
+
* assert.deepStrictEqual(valueHistory, [0, 1, 3]);
|
|
48
48
|
*
|
|
49
49
|
* num$.next(3); // logs: 6
|
|
50
50
|
*
|
|
51
|
-
* assert.deepStrictEqual(
|
|
51
|
+
* assert.deepStrictEqual(valueHistory, [0, 1, 3, 6]);
|
|
52
52
|
* ```
|
|
53
53
|
*/
|
|
54
54
|
const scan = (reducer, initialValue) => (parentObservable) => new ScanObservableClass(parentObservable, reducer, initialValue);
|
|
@@ -61,16 +61,16 @@ class ScanObservableClass extends InitializedSyncChildObservableClass {
|
|
|
61
61
|
});
|
|
62
62
|
this.#reducer = reducer;
|
|
63
63
|
}
|
|
64
|
-
tryUpdate(
|
|
64
|
+
tryUpdate(updateToken) {
|
|
65
65
|
const par = this.parents[0];
|
|
66
66
|
const psn = par.getSnapshot();
|
|
67
67
|
const sn = this.getSnapshot();
|
|
68
|
-
if (par.
|
|
68
|
+
if (par.updateToken !== updateToken ||
|
|
69
69
|
Optional.isNone(psn) ||
|
|
70
70
|
Optional.isNone(sn)) {
|
|
71
71
|
return; // skip update
|
|
72
72
|
}
|
|
73
|
-
this.setNext(this.#reducer(sn.value, psn.value),
|
|
73
|
+
this.setNext(this.#reducer(sn.value, psn.value), updateToken);
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.mjs","sources":["../../../src/core/operators/scan.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;AACI,MAAM,IAAI,GACf,CACE,OAA+B,EAC/B,YAAe,KAEjB,CAAC,gBAAgB,KACf,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY;AAEnE,MAAM,mBACJ,SAAQ,mCAAoD,CAAA;AAGnD,IAAA,QAAQ;AAEjB,IAAA,WAAA,CACE,gBAA+B,EAC/B,OAA+B,EAC/B,YAAe,EAAA;AAEf,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,YAAA,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAES,IAAA,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"scan.mjs","sources":["../../../src/core/operators/scan.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;AACI,MAAM,IAAI,GACf,CACE,OAA+B,EAC/B,YAAe,KAEjB,CAAC,gBAAgB,KACf,IAAI,mBAAmB,CAAC,gBAAgB,EAAE,OAAO,EAAE,YAAY;AAEnE,MAAM,mBACJ,SAAQ,mCAAoD,CAAA;AAGnD,IAAA,QAAQ;AAEjB,IAAA,WAAA,CACE,gBAA+B,EAC/B,OAA+B,EAC/B,YAAe,EAAA;AAEf,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,YAAA,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;AAC1C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,QAAQ,GAAG,OAAO;IACzB;AAES,IAAA,SAAS,CAAC,WAAwB,EAAA;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE;AAE7B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE;AAE7B,QAAA,IACE,GAAG,CAAC,WAAW,KAAK,WAAW;AAC/B,YAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;AACpB,YAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EACnB;AACA,YAAA,OAAO;QACT;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC;IAC/D;AACD;;;;"}
|
|
@@ -11,8 +11,8 @@ import { type KeepInitialValueOperator } from '../types/index.mjs';
|
|
|
11
11
|
* ```ts
|
|
12
12
|
* // Timeline:
|
|
13
13
|
* //
|
|
14
|
-
* // num$ 1 1 2 2 2 3
|
|
15
|
-
* // distinct$ 1 2
|
|
14
|
+
* // num$ 1 1 2 2 1 2 3 2
|
|
15
|
+
* // distinct$ 1 2 1 2 3 2
|
|
16
16
|
* //
|
|
17
17
|
* // Explanation:
|
|
18
18
|
* // - skipIfNoChange filters out consecutive duplicate values
|
|
@@ -23,29 +23,41 @@ import { type KeepInitialValueOperator } from '../types/index.mjs';
|
|
|
23
23
|
*
|
|
24
24
|
* const distinct$ = num$.pipe(skipIfNoChange());
|
|
25
25
|
*
|
|
26
|
-
* const
|
|
26
|
+
* const valueHistory: number[] = [];
|
|
27
27
|
*
|
|
28
28
|
* distinct$.subscribe((x) => {
|
|
29
|
-
*
|
|
29
|
+
* valueHistory.push(x);
|
|
30
30
|
* });
|
|
31
31
|
*
|
|
32
32
|
* num$.next(1); // logs: 1
|
|
33
33
|
*
|
|
34
|
-
* assert.deepStrictEqual(
|
|
34
|
+
* assert.deepStrictEqual(valueHistory, [1]);
|
|
35
35
|
*
|
|
36
36
|
* num$.next(1); // nothing logged
|
|
37
37
|
*
|
|
38
|
-
* assert.deepStrictEqual(
|
|
38
|
+
* assert.deepStrictEqual(valueHistory, [1]);
|
|
39
39
|
*
|
|
40
40
|
* num$.next(2); // logs: 2
|
|
41
41
|
*
|
|
42
|
-
* assert.deepStrictEqual(
|
|
42
|
+
* assert.deepStrictEqual(valueHistory, [1, 2]);
|
|
43
43
|
*
|
|
44
44
|
* num$.next(2); // nothing logged
|
|
45
45
|
*
|
|
46
|
+
* num$.next(1); // logs: 1
|
|
47
|
+
*
|
|
48
|
+
* assert.deepStrictEqual(valueHistory, [1, 2, 1]);
|
|
49
|
+
*
|
|
50
|
+
* num$.next(2); // logs: 2
|
|
51
|
+
*
|
|
52
|
+
* assert.deepStrictEqual(valueHistory, [1, 2, 1, 2]);
|
|
53
|
+
*
|
|
46
54
|
* num$.next(3); // logs: 3
|
|
47
55
|
*
|
|
48
|
-
* assert.deepStrictEqual(
|
|
56
|
+
* assert.deepStrictEqual(valueHistory, [1, 2, 1, 2, 3]);
|
|
57
|
+
*
|
|
58
|
+
* num$.next(2); // logs: 2
|
|
59
|
+
*
|
|
60
|
+
* assert.deepStrictEqual(valueHistory, [1, 2, 1, 2, 3, 2]);
|
|
49
61
|
* ```
|
|
50
62
|
*/
|
|
51
63
|
export declare const skipIfNoChange: <A>(eq?: (x: A, y: A) => boolean) => KeepInitialValueOperator<A, A>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-if-no-change.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-if-no-change.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"skip-if-no-change.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-if-no-change.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,EAC9B,KAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAmC,KACtD,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC;AAEzC;;;GAGG;AACH,eAAO,MAAM,oBAAoB,GAdF,CAAC,OAC1B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,KAC1B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAYkB,CAAC"}
|