synstate 0.1.0 → 0.1.2
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/LICENSE +201 -0
- package/README.md +272 -532
- package/assets/synstate-icon.png +0 -0
- package/dist/core/combine/combine.d.mts +33 -3
- package/dist/core/combine/combine.d.mts.map +1 -1
- package/dist/core/combine/combine.mjs +34 -4
- package/dist/core/combine/combine.mjs.map +1 -1
- package/dist/core/combine/merge.d.mts +30 -4
- package/dist/core/combine/merge.d.mts.map +1 -1
- package/dist/core/combine/merge.mjs +30 -4
- package/dist/core/combine/merge.mjs.map +1 -1
- package/dist/core/combine/zip.d.mts +28 -3
- package/dist/core/combine/zip.d.mts.map +1 -1
- package/dist/core/combine/zip.mjs +28 -3
- package/dist/core/combine/zip.mjs.map +1 -1
- package/dist/core/create/from-array.d.mts +21 -3
- package/dist/core/create/from-array.d.mts.map +1 -1
- package/dist/core/create/from-array.mjs +21 -3
- package/dist/core/create/from-array.mjs.map +1 -1
- package/dist/core/create/from-promise.d.mts +29 -7
- package/dist/core/create/from-promise.d.mts.map +1 -1
- package/dist/core/create/from-promise.mjs +29 -7
- package/dist/core/create/from-promise.mjs.map +1 -1
- package/dist/core/create/from-subscribable.d.mts +58 -0
- package/dist/core/create/from-subscribable.d.mts.map +1 -1
- package/dist/core/create/from-subscribable.mjs +58 -0
- package/dist/core/create/from-subscribable.mjs.map +1 -1
- package/dist/core/create/interval.d.mts +29 -4
- package/dist/core/create/interval.d.mts.map +1 -1
- package/dist/core/create/interval.mjs +29 -4
- package/dist/core/create/interval.mjs.map +1 -1
- package/dist/core/create/of.d.mts +22 -3
- package/dist/core/create/of.d.mts.map +1 -1
- package/dist/core/create/of.mjs +22 -3
- package/dist/core/create/of.mjs.map +1 -1
- package/dist/core/create/source.d.mts +21 -2
- package/dist/core/create/source.d.mts.map +1 -1
- package/dist/core/create/source.mjs +2 -2
- package/dist/core/create/source.mjs.map +1 -1
- package/dist/core/create/timer.d.mts +23 -4
- package/dist/core/create/timer.d.mts.map +1 -1
- package/dist/core/create/timer.mjs +23 -4
- package/dist/core/create/timer.mjs.map +1 -1
- package/dist/core/index.d.mts +1 -0
- package/dist/core/index.d.mts.map +1 -1
- package/dist/core/index.mjs +15 -3
- package/dist/core/index.mjs.map +1 -1
- package/dist/core/operators/audit-time.d.mts +59 -0
- package/dist/core/operators/audit-time.d.mts.map +1 -1
- package/dist/core/operators/audit-time.mjs +59 -0
- package/dist/core/operators/audit-time.mjs.map +1 -1
- package/dist/core/operators/debounce-time.d.mts +22 -2
- package/dist/core/operators/debounce-time.d.mts.map +1 -1
- package/dist/core/operators/debounce-time.mjs +22 -2
- package/dist/core/operators/debounce-time.mjs.map +1 -1
- package/dist/core/operators/filter.d.mts +26 -1
- package/dist/core/operators/filter.d.mts.map +1 -1
- package/dist/core/operators/filter.mjs.map +1 -1
- package/dist/core/operators/index.mjs +3 -3
- package/dist/core/operators/map-with-index.d.mts +19 -17
- package/dist/core/operators/map-with-index.d.mts.map +1 -1
- package/dist/core/operators/map-with-index.mjs +21 -23
- package/dist/core/operators/map-with-index.mjs.map +1 -1
- package/dist/core/operators/merge-map.d.mts +48 -6
- package/dist/core/operators/merge-map.d.mts.map +1 -1
- package/dist/core/operators/merge-map.mjs +48 -6
- package/dist/core/operators/merge-map.mjs.map +1 -1
- package/dist/core/operators/pairwise.d.mts +30 -1
- package/dist/core/operators/pairwise.d.mts.map +1 -1
- package/dist/core/operators/pairwise.mjs +30 -1
- package/dist/core/operators/pairwise.mjs.map +1 -1
- package/dist/core/operators/scan.d.mts +23 -1
- package/dist/core/operators/scan.d.mts.map +1 -1
- package/dist/core/operators/scan.mjs +23 -1
- package/dist/core/operators/scan.mjs.map +1 -1
- package/dist/core/operators/skip-if-no-change.d.mts +26 -2
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
- package/dist/core/operators/skip-if-no-change.mjs +27 -3
- package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
- package/dist/core/operators/skip-until.d.mts +50 -0
- package/dist/core/operators/skip-until.d.mts.map +1 -1
- package/dist/core/operators/skip-until.mjs +50 -0
- package/dist/core/operators/skip-until.mjs.map +1 -1
- package/dist/core/operators/skip-while.d.mts +48 -1
- package/dist/core/operators/skip-while.d.mts.map +1 -1
- package/dist/core/operators/skip-while.mjs +50 -5
- package/dist/core/operators/skip-while.mjs.map +1 -1
- package/dist/core/operators/switch-map.d.mts +39 -5
- package/dist/core/operators/switch-map.d.mts.map +1 -1
- package/dist/core/operators/switch-map.mjs +39 -5
- package/dist/core/operators/switch-map.mjs.map +1 -1
- package/dist/core/operators/take-until.d.mts +20 -1
- package/dist/core/operators/take-until.d.mts.map +1 -1
- package/dist/core/operators/take-until.mjs +20 -1
- package/dist/core/operators/take-until.mjs.map +1 -1
- package/dist/core/operators/take-while.d.mts +47 -1
- package/dist/core/operators/take-while.d.mts.map +1 -1
- package/dist/core/operators/take-while.mjs +48 -3
- package/dist/core/operators/take-while.mjs.map +1 -1
- package/dist/core/operators/throttle-time.d.mts +44 -5
- package/dist/core/operators/throttle-time.d.mts.map +1 -1
- package/dist/core/operators/throttle-time.mjs +44 -5
- package/dist/core/operators/throttle-time.mjs.map +1 -1
- package/dist/core/operators/with-buffered-from.d.mts +57 -0
- package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
- package/dist/core/operators/with-buffered-from.mjs +58 -1
- package/dist/core/operators/with-buffered-from.mjs.map +1 -1
- package/dist/core/operators/with-current-value-from.d.mts +59 -0
- package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
- package/dist/core/operators/with-current-value-from.mjs +60 -1
- package/dist/core/operators/with-current-value-from.mjs.map +1 -1
- package/dist/core/operators/with-initial-value.d.mts +24 -2
- package/dist/core/operators/with-initial-value.d.mts.map +1 -1
- package/dist/core/operators/with-initial-value.mjs +24 -2
- package/dist/core/operators/with-initial-value.mjs.map +1 -1
- package/dist/core/predefined/index.d.mts +2 -0
- package/dist/core/predefined/index.d.mts.map +1 -0
- package/dist/core/predefined/index.mjs +13 -0
- package/dist/core/predefined/index.mjs.map +1 -0
- package/dist/core/predefined/operators/attach-index.d.mts +8 -0
- package/dist/core/predefined/operators/attach-index.d.mts.map +1 -0
- package/dist/core/predefined/operators/attach-index.mjs +13 -0
- package/dist/core/predefined/operators/attach-index.mjs.map +1 -0
- package/dist/core/predefined/operators/index.d.mts +13 -0
- package/dist/core/predefined/operators/index.d.mts.map +1 -0
- package/dist/core/predefined/operators/index.mjs +13 -0
- package/dist/core/predefined/operators/index.mjs.map +1 -0
- package/dist/core/predefined/operators/map-optional.d.mts +4 -0
- package/dist/core/predefined/operators/map-optional.d.mts.map +1 -0
- package/dist/core/predefined/operators/map-optional.mjs +7 -0
- package/dist/core/predefined/operators/map-optional.mjs.map +1 -0
- package/dist/core/predefined/operators/map-result-err.d.mts +4 -0
- package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -0
- package/dist/core/predefined/operators/map-result-err.mjs +7 -0
- package/dist/core/predefined/operators/map-result-err.mjs.map +1 -0
- package/dist/core/predefined/operators/map-result-ok.d.mts +4 -0
- package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -0
- package/dist/core/predefined/operators/map-result-ok.mjs +7 -0
- package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -0
- package/dist/core/predefined/operators/map-to.d.mts +3 -0
- package/dist/core/predefined/operators/map-to.d.mts.map +1 -0
- package/dist/core/predefined/operators/map-to.mjs +6 -0
- package/dist/core/predefined/operators/map-to.mjs.map +1 -0
- package/dist/core/predefined/operators/map.d.mts +3 -0
- package/dist/core/predefined/operators/map.d.mts.map +1 -0
- package/dist/core/predefined/operators/map.mjs +8 -0
- package/dist/core/predefined/operators/map.mjs.map +1 -0
- package/dist/core/predefined/operators/pluck.d.mts +8 -0
- package/dist/core/predefined/operators/pluck.d.mts.map +1 -0
- package/dist/core/predefined/operators/pluck.mjs +11 -0
- package/dist/core/predefined/operators/pluck.mjs.map +1 -0
- package/dist/core/predefined/operators/skip.d.mts +3 -0
- package/dist/core/predefined/operators/skip.d.mts.map +1 -0
- package/dist/core/predefined/operators/skip.mjs +9 -0
- package/dist/core/predefined/operators/skip.mjs.map +1 -0
- package/dist/core/predefined/operators/take.d.mts +3 -0
- package/dist/core/predefined/operators/take.d.mts.map +1 -0
- package/dist/core/predefined/operators/take.mjs +8 -0
- package/dist/core/predefined/operators/take.mjs.map +1 -0
- package/dist/core/predefined/operators/unwrap-optional.d.mts +4 -0
- package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -0
- package/dist/core/predefined/operators/unwrap-optional.mjs +9 -0
- package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -0
- package/dist/core/predefined/operators/unwrap-result-err.d.mts +4 -0
- package/dist/core/predefined/operators/unwrap-result-err.d.mts.map +1 -0
- package/dist/core/predefined/operators/unwrap-result-err.mjs +7 -0
- package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -0
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts +4 -0
- package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -0
- package/dist/core/predefined/operators/unwrap-result-ok.mjs +9 -0
- package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -0
- package/dist/core/types/observable-family.d.mts +7 -7
- package/dist/entry-point.mjs +15 -3
- package/dist/entry-point.mjs.map +1 -1
- package/dist/index.mjs +15 -3
- package/dist/index.mjs.map +1 -1
- package/dist/utils/create-event-emitter.d.mts +20 -2
- package/dist/utils/create-event-emitter.d.mts.map +1 -1
- package/dist/utils/create-event-emitter.mjs +20 -2
- package/dist/utils/create-event-emitter.mjs.map +1 -1
- package/dist/utils/create-reducer.d.mts +13 -1
- package/dist/utils/create-reducer.d.mts.map +1 -1
- package/dist/utils/create-reducer.mjs +13 -1
- package/dist/utils/create-reducer.mjs.map +1 -1
- package/dist/utils/create-state.d.mts +24 -4
- package/dist/utils/create-state.d.mts.map +1 -1
- package/dist/utils/create-state.mjs +24 -4
- package/dist/utils/create-state.mjs.map +1 -1
- package/package.json +13 -12
- package/src/core/combine/combine.mts +34 -4
- package/src/core/combine/merge.mts +30 -4
- package/src/core/combine/zip.mts +28 -3
- package/src/core/create/from-array.mts +21 -3
- package/src/core/create/from-promise.mts +29 -7
- package/src/core/create/from-subscribable.mts +58 -0
- package/src/core/create/interval.mts +29 -4
- package/src/core/create/of.mts +22 -3
- package/src/core/create/source.mts +22 -3
- package/src/core/create/timer.mts +23 -4
- package/src/core/index.mts +1 -0
- package/src/core/operators/audit-time.mts +59 -0
- package/src/core/operators/debounce-time.mts +22 -2
- package/src/core/operators/filter.mts +26 -1
- package/src/core/operators/map-with-index.mts +22 -66
- package/src/core/operators/merge-map.mts +48 -6
- package/src/core/operators/pairwise.mts +30 -1
- package/src/core/operators/scan.mts +23 -1
- package/src/core/operators/skip-if-no-change.mts +27 -3
- package/src/core/operators/skip-until.mts +50 -0
- package/src/core/operators/skip-while.mts +49 -16
- package/src/core/operators/switch-map.mts +39 -5
- package/src/core/operators/take-until.mts +20 -1
- package/src/core/operators/take-while.mts +49 -8
- package/src/core/operators/throttle-time.mts +44 -5
- package/src/core/operators/with-buffered-from.mts +58 -1
- package/src/core/operators/with-current-value-from.mts +60 -1
- package/src/core/operators/with-initial-value.mts +24 -2
- package/src/core/predefined/index.mts +1 -0
- package/src/core/predefined/operators/attach-index.mts +13 -0
- package/src/core/predefined/operators/index.mts +12 -0
- package/src/core/predefined/operators/map-optional.mts +8 -0
- package/src/core/predefined/operators/map-result-err.mts +8 -0
- package/src/core/predefined/operators/map-result-ok.mts +8 -0
- package/src/core/predefined/operators/map-to.mts +5 -0
- package/src/core/predefined/operators/map.mts +5 -0
- package/src/core/predefined/operators/pluck.mts +12 -0
- package/src/core/predefined/operators/skip.mts +10 -0
- package/src/core/predefined/operators/take.mts +6 -0
- package/src/core/predefined/operators/unwrap-optional.mts +9 -0
- package/src/core/predefined/operators/unwrap-result-err.mts +8 -0
- package/src/core/predefined/operators/unwrap-result-ok.mts +9 -0
- package/src/core/types/observable-family.mts +7 -7
- package/src/utils/create-event-emitter.mts +20 -2
- package/src/utils/create-reducer.mts +13 -1
- package/src/utils/create-state.mts +24 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scan.mjs","sources":["../../../src/core/operators/scan.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA
|
|
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,aAA4B,EAAA;QAC7C,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,aAAa,KAAK,aAAa;AACnC,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,aAAa,CAAC;IACjE;AACD;;;;"}
|
|
@@ -9,24 +9,48 @@ import { type KeepInitialValueOperator } from '../types/index.mjs';
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
+
* // Timeline:
|
|
13
|
+
* //
|
|
14
|
+
* // num$ 1 1 2 2 2 3
|
|
15
|
+
* // distinct$ 1 2 3
|
|
16
|
+
* //
|
|
17
|
+
* // Explanation:
|
|
18
|
+
* // - skipIfNoChange filters out consecutive duplicate values
|
|
19
|
+
* // - Uses strict equality (===) for comparison
|
|
20
|
+
* // - Only emits when the value actually changes
|
|
21
|
+
*
|
|
12
22
|
* const num$ = source<number>();
|
|
13
23
|
*
|
|
14
24
|
* const distinct$ = num$.pipe(skipIfNoChange());
|
|
15
25
|
*
|
|
26
|
+
* const mut_history: number[] = [];
|
|
27
|
+
*
|
|
16
28
|
* distinct$.subscribe((x) => {
|
|
17
|
-
*
|
|
29
|
+
* mut_history.push(x);
|
|
18
30
|
* });
|
|
19
31
|
*
|
|
20
32
|
* num$.next(1); // logs: 1
|
|
21
33
|
*
|
|
34
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
35
|
+
*
|
|
22
36
|
* num$.next(1); // nothing logged
|
|
23
37
|
*
|
|
38
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
39
|
+
*
|
|
24
40
|
* num$.next(2); // logs: 2
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
43
|
+
*
|
|
44
|
+
* num$.next(2); // nothing logged
|
|
45
|
+
*
|
|
46
|
+
* num$.next(3); // logs: 3
|
|
47
|
+
*
|
|
48
|
+
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
25
49
|
* ```
|
|
26
50
|
*/
|
|
27
51
|
export declare const skipIfNoChange: <A>(eq?: (x: A, y: A) => boolean) => KeepInitialValueOperator<A, A>;
|
|
28
52
|
/**
|
|
29
|
-
* Alias for `skipIfNoChange
|
|
53
|
+
* Alias for `skipIfNoChange`.
|
|
30
54
|
* @see skipIfNoChange
|
|
31
55
|
*/
|
|
32
56
|
export declare const distinctUntilChanged: <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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;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"}
|
|
@@ -12,29 +12,53 @@ import '../utils/id-maker.mjs';
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```ts
|
|
15
|
+
* // Timeline:
|
|
16
|
+
* //
|
|
17
|
+
* // num$ 1 1 2 2 2 3
|
|
18
|
+
* // distinct$ 1 2 3
|
|
19
|
+
* //
|
|
20
|
+
* // Explanation:
|
|
21
|
+
* // - skipIfNoChange filters out consecutive duplicate values
|
|
22
|
+
* // - Uses strict equality (===) for comparison
|
|
23
|
+
* // - Only emits when the value actually changes
|
|
24
|
+
*
|
|
15
25
|
* const num$ = source<number>();
|
|
16
26
|
*
|
|
17
27
|
* const distinct$ = num$.pipe(skipIfNoChange());
|
|
18
28
|
*
|
|
29
|
+
* const mut_history: number[] = [];
|
|
30
|
+
*
|
|
19
31
|
* distinct$.subscribe((x) => {
|
|
20
|
-
*
|
|
32
|
+
* mut_history.push(x);
|
|
21
33
|
* });
|
|
22
34
|
*
|
|
23
35
|
* num$.next(1); // logs: 1
|
|
24
36
|
*
|
|
37
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
38
|
+
*
|
|
25
39
|
* num$.next(1); // nothing logged
|
|
26
40
|
*
|
|
41
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
42
|
+
*
|
|
27
43
|
* num$.next(2); // logs: 2
|
|
44
|
+
*
|
|
45
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
46
|
+
*
|
|
47
|
+
* num$.next(2); // nothing logged
|
|
48
|
+
*
|
|
49
|
+
* num$.next(3); // logs: 3
|
|
50
|
+
*
|
|
51
|
+
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
28
52
|
* ```
|
|
29
53
|
*/
|
|
30
54
|
const skipIfNoChange = (eq = (x, y) => Object.is(x, y)) =>
|
|
31
55
|
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
32
56
|
((parentObservable) => new SkipIfNoChangeObservableClass(parentObservable, eq));
|
|
33
57
|
/**
|
|
34
|
-
* Alias for `skipIfNoChange
|
|
58
|
+
* Alias for `skipIfNoChange`.
|
|
35
59
|
* @see skipIfNoChange
|
|
36
60
|
*/
|
|
37
|
-
const distinctUntilChanged = skipIfNoChange;
|
|
61
|
+
const distinctUntilChanged = skipIfNoChange;
|
|
38
62
|
class SkipIfNoChangeObservableClass extends SyncChildObservableClass {
|
|
39
63
|
#eq;
|
|
40
64
|
#mut_previousValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-if-no-change.mjs","sources":["../../../src/core/operators/skip-if-no-change.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA
|
|
1
|
+
{"version":3,"file":"skip-if-no-change.mjs","sources":["../../../src/core/operators/skip-if-no-change.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;MACU,cAAc,GAAG,CAC5B,EAAA,GAA8B,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAEvD;AACA,CAAC,CAAC,gBAAgB,KAChB,IAAI,6BAA6B,CAC/B,gBAAgB,EAChB,EAAE,CACH;AAEL;;;AAGG;AACI,MAAM,oBAAoB,GAAG;AAEpC,MAAM,6BACJ,SAAQ,wBAAyC,CAAA;AAGxC,IAAA,GAAG;AACZ,IAAA,kBAAkB;IAElB,WAAA,CAAY,gBAA+B,EAAE,EAA2B,EAAA;AACtE,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,YAAA,YAAY,EAAE,gBAAgB,CAAC,WAAW,EAAE;AAC7C,SAAA,CAAC;;;AAIF,QAAA,IAAI,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,WAAW,EAAE;AAExD,QAAA,IAAI,CAAC,GAAG,GAAG,EAAE;IACf;AAES,IAAA,SAAS,CAAC,aAA4B,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC9D,YAAA,OAAO;QACT;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB;QAEpC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC;;AAGrE,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE;QAE5B,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;QACvC;IACF;AACD;;;;"}
|
|
@@ -1,3 +1,53 @@
|
|
|
1
1
|
import { type DropInitialValueOperator, type Observable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Skips all values from the source observable until the notifier observable emits.
|
|
4
|
+
*
|
|
5
|
+
* @template A - The type of values from the source
|
|
6
|
+
* @param notifier - An observable that signals when to start emitting
|
|
7
|
+
* @returns An operator that skips values until the notifier emits
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* // Timeline:
|
|
12
|
+
* //
|
|
13
|
+
* // num$ 1 2 3 start 4 5 6
|
|
14
|
+
* // startNotifier X
|
|
15
|
+
* // skipped$ 4 5 6
|
|
16
|
+
* // |------ skipped -------|
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - skipUntil ignores all values until the notifier emits
|
|
20
|
+
* // - After the notifier emits, all subsequent values are passed through
|
|
21
|
+
* // - Opposite of takeUntil (which completes when notifier emits)
|
|
22
|
+
*
|
|
23
|
+
* const num$ = source<number>();
|
|
24
|
+
*
|
|
25
|
+
* const [startNotifier, start_] = createEventEmitter();
|
|
26
|
+
*
|
|
27
|
+
* const skipped$ = num$.pipe(skipUntil(startNotifier));
|
|
28
|
+
*
|
|
29
|
+
* const mut_history: number[] = [];
|
|
30
|
+
*
|
|
31
|
+
* skipped$.subscribe((x) => {
|
|
32
|
+
* mut_history.push(x);
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* num$.next(1); // nothing logged
|
|
36
|
+
*
|
|
37
|
+
* num$.next(2); // nothing logged
|
|
38
|
+
*
|
|
39
|
+
* assert.deepStrictEqual(mut_history, []);
|
|
40
|
+
*
|
|
41
|
+
* start_();
|
|
42
|
+
*
|
|
43
|
+
* num$.next(4); // logs: 4
|
|
44
|
+
*
|
|
45
|
+
* assert.deepStrictEqual(mut_history, [4]);
|
|
46
|
+
*
|
|
47
|
+
* num$.next(5); // logs: 5
|
|
48
|
+
*
|
|
49
|
+
* assert.deepStrictEqual(mut_history, [4, 5]);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
2
52
|
export declare const skipUntil: <A>(notifier: Observable<unknown>) => DropInitialValueOperator<A, A>;
|
|
3
53
|
//# sourceMappingURL=skip-until.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-until.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-until.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,SAAS,GACnB,CAAC,EAAG,UAAU,UAAU,CAAC,OAAO,CAAC,KAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAER,CAAC"}
|
|
1
|
+
{"version":3,"file":"skip-until.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-until.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,EAAG,UAAU,UAAU,CAAC,OAAO,CAAC,KAAG,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAER,CAAC"}
|
|
@@ -2,6 +2,56 @@ import { Optional } from 'ts-data-forge';
|
|
|
2
2
|
import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
|
|
3
3
|
import '../utils/id-maker.mjs';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Skips all values from the source observable until the notifier observable emits.
|
|
7
|
+
*
|
|
8
|
+
* @template A - The type of values from the source
|
|
9
|
+
* @param notifier - An observable that signals when to start emitting
|
|
10
|
+
* @returns An operator that skips values until the notifier emits
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```ts
|
|
14
|
+
* // Timeline:
|
|
15
|
+
* //
|
|
16
|
+
* // num$ 1 2 3 start 4 5 6
|
|
17
|
+
* // startNotifier X
|
|
18
|
+
* // skipped$ 4 5 6
|
|
19
|
+
* // |------ skipped -------|
|
|
20
|
+
* //
|
|
21
|
+
* // Explanation:
|
|
22
|
+
* // - skipUntil ignores all values until the notifier emits
|
|
23
|
+
* // - After the notifier emits, all subsequent values are passed through
|
|
24
|
+
* // - Opposite of takeUntil (which completes when notifier emits)
|
|
25
|
+
*
|
|
26
|
+
* const num$ = source<number>();
|
|
27
|
+
*
|
|
28
|
+
* const [startNotifier, start_] = createEventEmitter();
|
|
29
|
+
*
|
|
30
|
+
* const skipped$ = num$.pipe(skipUntil(startNotifier));
|
|
31
|
+
*
|
|
32
|
+
* const mut_history: number[] = [];
|
|
33
|
+
*
|
|
34
|
+
* skipped$.subscribe((x) => {
|
|
35
|
+
* mut_history.push(x);
|
|
36
|
+
* });
|
|
37
|
+
*
|
|
38
|
+
* num$.next(1); // nothing logged
|
|
39
|
+
*
|
|
40
|
+
* num$.next(2); // nothing logged
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(mut_history, []);
|
|
43
|
+
*
|
|
44
|
+
* start_();
|
|
45
|
+
*
|
|
46
|
+
* num$.next(4); // logs: 4
|
|
47
|
+
*
|
|
48
|
+
* assert.deepStrictEqual(mut_history, [4]);
|
|
49
|
+
*
|
|
50
|
+
* num$.next(5); // logs: 5
|
|
51
|
+
*
|
|
52
|
+
* assert.deepStrictEqual(mut_history, [4, 5]);
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
5
55
|
const skipUntil = (notifier) => (parentObservable) => new SkipUntilObservableClass(parentObservable, notifier);
|
|
6
56
|
class SkipUntilObservableClass extends SyncChildObservableClass {
|
|
7
57
|
#mut_isSkipping;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-until.mjs","sources":["../../../src/core/operators/skip-until.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"skip-until.mjs","sources":["../../../src/core/operators/skip-until.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDG;MACU,SAAS,GACpB,CAAK,QAA6B,KAClC,CAAC,gBAAgB,KACf,IAAI,wBAAwB,CAAC,gBAAgB,EAAE,QAAQ;AAE3D,MAAM,wBACJ,SAAQ,wBAAyC,CAAA;AAGjD,IAAA,eAAe;IAEf,WAAA,CAAY,gBAA+B,EAAE,QAA6B,EAAA;AACxE,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;AAE3B,QAAA,QAAQ,CAAC,SAAS,CAChB,MAAK;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;QAC9B,CAAC,EACD,MAAK;AACH,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC9B,QAAA,CAAC,CACF;IACH;AAES,IAAA,SAAS,CAAC,aAA4B,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IACE,GAAG,CAAC,aAAa,KAAK,aAAa;AACnC,YAAA,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,eAAe,EACpB;AACA,YAAA,OAAO;QACT;QAEA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;IACvC;AACD;;;;"}
|
|
@@ -1,4 +1,51 @@
|
|
|
1
1
|
import { type DropInitialValueOperator } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Skips values from the source observable while the predicate returns true.
|
|
4
|
+
* Once the predicate returns false, all subsequent values pass through.
|
|
5
|
+
*
|
|
6
|
+
* @template A - The type of values from the source
|
|
7
|
+
* @param predicate - Function to test each value
|
|
8
|
+
* @returns An operator that skips values while the predicate is true
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Timeline:
|
|
13
|
+
* //
|
|
14
|
+
* // num$ 1 2 3 4 5 6 7
|
|
15
|
+
* // skipped$ 5 6 7
|
|
16
|
+
* // |---- skip -----|
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - skipWhile skips values while the predicate returns true
|
|
20
|
+
* // - Once the predicate returns false, all subsequent values pass through
|
|
21
|
+
* // - Unlike filter, the predicate is never checked again after the first false
|
|
22
|
+
*
|
|
23
|
+
* const num$ = source<number>();
|
|
24
|
+
*
|
|
25
|
+
* const skipped$ = num$.pipe(skipWhile((x) => x < 5));
|
|
26
|
+
*
|
|
27
|
+
* const mut_history: number[] = [];
|
|
28
|
+
*
|
|
29
|
+
* skipped$.subscribe((x) => {
|
|
30
|
+
* mut_history.push(x);
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* num$.next(1); // nothing logged
|
|
34
|
+
*
|
|
35
|
+
* num$.next(2); // nothing logged
|
|
36
|
+
*
|
|
37
|
+
* num$.next(5); // logs: 5
|
|
38
|
+
*
|
|
39
|
+
* assert.deepStrictEqual(mut_history, [5]);
|
|
40
|
+
*
|
|
41
|
+
* num$.next(6); // logs: 6
|
|
42
|
+
*
|
|
43
|
+
* assert.deepStrictEqual(mut_history, [5, 6]);
|
|
44
|
+
*
|
|
45
|
+
* num$.next(7); // logs: 7
|
|
46
|
+
*
|
|
47
|
+
* assert.deepStrictEqual(mut_history, [5, 6, 7]);
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
2
50
|
export declare const skipWhile: <A>(predicate: (value: A, index: SafeUint | -1) => boolean) => DropInitialValueOperator<A, A>;
|
|
3
|
-
export declare const skip: <A>(n: PositiveSafeIntWithSmallInt) => DropInitialValueOperator<A, A>;
|
|
4
51
|
//# sourceMappingURL=skip-while.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-while.mts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"skip-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-while.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,EACA,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,OAAO,KACrD,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAE2B,CAAC"}
|
|
@@ -1,11 +1,56 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { pipe, Optional, asSafeUint, SafeUint } from 'ts-data-forge';
|
|
2
2
|
import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
|
|
3
3
|
import '../utils/id-maker.mjs';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Skips values from the source observable while the predicate returns true.
|
|
7
|
+
* Once the predicate returns false, all subsequent values pass through.
|
|
8
|
+
*
|
|
9
|
+
* @template A - The type of values from the source
|
|
10
|
+
* @param predicate - Function to test each value
|
|
11
|
+
* @returns An operator that skips values while the predicate is true
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Timeline:
|
|
16
|
+
* //
|
|
17
|
+
* // num$ 1 2 3 4 5 6 7
|
|
18
|
+
* // skipped$ 5 6 7
|
|
19
|
+
* // |---- skip -----|
|
|
20
|
+
* //
|
|
21
|
+
* // Explanation:
|
|
22
|
+
* // - skipWhile skips values while the predicate returns true
|
|
23
|
+
* // - Once the predicate returns false, all subsequent values pass through
|
|
24
|
+
* // - Unlike filter, the predicate is never checked again after the first false
|
|
25
|
+
*
|
|
26
|
+
* const num$ = source<number>();
|
|
27
|
+
*
|
|
28
|
+
* const skipped$ = num$.pipe(skipWhile((x) => x < 5));
|
|
29
|
+
*
|
|
30
|
+
* const mut_history: number[] = [];
|
|
31
|
+
*
|
|
32
|
+
* skipped$.subscribe((x) => {
|
|
33
|
+
* mut_history.push(x);
|
|
34
|
+
* });
|
|
35
|
+
*
|
|
36
|
+
* num$.next(1); // nothing logged
|
|
37
|
+
*
|
|
38
|
+
* num$.next(2); // nothing logged
|
|
39
|
+
*
|
|
40
|
+
* num$.next(5); // logs: 5
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(mut_history, [5]);
|
|
43
|
+
*
|
|
44
|
+
* num$.next(6); // logs: 6
|
|
45
|
+
*
|
|
46
|
+
* assert.deepStrictEqual(mut_history, [5, 6]);
|
|
47
|
+
*
|
|
48
|
+
* num$.next(7); // logs: 7
|
|
49
|
+
*
|
|
50
|
+
* assert.deepStrictEqual(mut_history, [5, 6, 7]);
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
5
53
|
const skipWhile = (predicate) => (parentObservable) => new SkipWhileObservableClass(parentObservable, predicate);
|
|
6
|
-
/* Specialized operators */
|
|
7
|
-
const skip = (n) => !PositiveSafeInt.is(n) ? idFn : skipWhile((_, index) => index + 1 <= n);
|
|
8
|
-
const idFn = (value) => value;
|
|
9
54
|
/* implementation */
|
|
10
55
|
class SkipWhileObservableClass extends SyncChildObservableClass {
|
|
11
56
|
#predicate;
|
|
@@ -36,5 +81,5 @@ class SkipWhileObservableClass extends SyncChildObservableClass {
|
|
|
36
81
|
}
|
|
37
82
|
}
|
|
38
83
|
|
|
39
|
-
export {
|
|
84
|
+
export { skipWhile };
|
|
40
85
|
//# sourceMappingURL=skip-while.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skip-while.mjs","sources":["../../../src/core/operators/skip-while.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"skip-while.mjs","sources":["../../../src/core/operators/skip-while.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;MACU,SAAS,GACpB,CACE,SAAsD,KAExD,CAAC,gBAAgB,KACf,IAAI,wBAAwB,CAAC,gBAAgB,EAAE,SAAS;AAE5D;AAEA,MAAM,wBACJ,SAAQ,wBAAyC,CAAA;AAGxC,IAAA,UAAU;AACnB,IAAA,UAAU;IAEV,WAAA,CACE,gBAA+B,EAC/B,SAAsD,EAAA;AAEtD,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;YAC3B,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KACxD,QAAQ,CAAC,MAAM,CAAC,EAAE;kBACd,QAAQ,CAAC;kBACT,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE;sBACpB,QAAQ,CAAC;AACX,sBAAE,EAAE,CACT,CAAC,KAAK;AACR,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AAEpB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;IAC7B;AAES,IAAA,SAAS,CAAC,aAA4B,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC9D,YAAA,OAAO;QACT;AAEA,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,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC/C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;QACvC;IACF;AACD;;;;"}
|
|
@@ -10,18 +10,52 @@ import { type DropInitialValueOperator, type Observable } from '../types/index.m
|
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```ts
|
|
13
|
+
* // Timeline:
|
|
14
|
+
* //
|
|
15
|
+
* // searchQuery$ "a" "ab" "abc"
|
|
16
|
+
* // requests fetch1 fetch2 fetch3
|
|
17
|
+
* // results$ cancel cancel result3
|
|
18
|
+
* // fetch1 fetch2
|
|
19
|
+
* //
|
|
20
|
+
* // Explanation:
|
|
21
|
+
* // - switchMap cancels previous inner observables when a new value arrives
|
|
22
|
+
* // - Only the result from the latest search query is emitted
|
|
23
|
+
* // - Previous ongoing requests are cancelled
|
|
24
|
+
* // - Ideal for search-as-you-type scenarios
|
|
25
|
+
*
|
|
13
26
|
* const searchQuery$ = source<string>();
|
|
14
27
|
*
|
|
15
28
|
* const results$ = searchQuery$.pipe(
|
|
16
|
-
* switchMap((query) =>
|
|
29
|
+
* switchMap((query) => {
|
|
30
|
+
* const result$ = source<string[]>();
|
|
31
|
+
*
|
|
32
|
+
* setTimeout(() => {
|
|
33
|
+
* result$.next([query]);
|
|
34
|
+
*
|
|
35
|
+
* result$.complete();
|
|
36
|
+
* }, 10);
|
|
37
|
+
*
|
|
38
|
+
* return result$;
|
|
39
|
+
* }),
|
|
17
40
|
* );
|
|
18
41
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
42
|
+
* const mut_history: string[][] = [];
|
|
43
|
+
*
|
|
44
|
+
* results$.subscribe((value) => {
|
|
45
|
+
* mut_history.push(value);
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* searchQuery$.next('a');
|
|
49
|
+
*
|
|
50
|
+
* searchQuery$.next('ab');
|
|
51
|
+
*
|
|
52
|
+
* searchQuery$.next('abc');
|
|
53
|
+
*
|
|
54
|
+
* await new Promise((resolve) => {
|
|
55
|
+
* setTimeout(resolve, 200);
|
|
21
56
|
* });
|
|
22
|
-
* // Only the latest search results are emitted, previous searches are cancelled
|
|
23
57
|
*
|
|
24
|
-
*
|
|
58
|
+
* assert.deepStrictEqual(mut_history, [['abc']]);
|
|
25
59
|
* ```
|
|
26
60
|
*
|
|
27
61
|
* @note To improve code readability, consider using `createState` instead of `switchMap`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-map.d.mts","sourceRoot":"","sources":["../../../src/core/operators/switch-map.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"switch-map.d.mts","sourceRoot":"","sources":["../../../src/core/operators/switch-map.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,EAAE,CAAC,EACH,iBAAiB,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,KAC1C,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAEiC,CAAC"}
|
|
@@ -13,18 +13,52 @@ import '../utils/id-maker.mjs';
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
|
+
* // Timeline:
|
|
17
|
+
* //
|
|
18
|
+
* // searchQuery$ "a" "ab" "abc"
|
|
19
|
+
* // requests fetch1 fetch2 fetch3
|
|
20
|
+
* // results$ cancel cancel result3
|
|
21
|
+
* // fetch1 fetch2
|
|
22
|
+
* //
|
|
23
|
+
* // Explanation:
|
|
24
|
+
* // - switchMap cancels previous inner observables when a new value arrives
|
|
25
|
+
* // - Only the result from the latest search query is emitted
|
|
26
|
+
* // - Previous ongoing requests are cancelled
|
|
27
|
+
* // - Ideal for search-as-you-type scenarios
|
|
28
|
+
*
|
|
16
29
|
* const searchQuery$ = source<string>();
|
|
17
30
|
*
|
|
18
31
|
* const results$ = searchQuery$.pipe(
|
|
19
|
-
* switchMap((query) =>
|
|
32
|
+
* switchMap((query) => {
|
|
33
|
+
* const result$ = source<string[]>();
|
|
34
|
+
*
|
|
35
|
+
* setTimeout(() => {
|
|
36
|
+
* result$.next([query]);
|
|
37
|
+
*
|
|
38
|
+
* result$.complete();
|
|
39
|
+
* }, 10);
|
|
40
|
+
*
|
|
41
|
+
* return result$;
|
|
42
|
+
* }),
|
|
20
43
|
* );
|
|
21
44
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
45
|
+
* const mut_history: string[][] = [];
|
|
46
|
+
*
|
|
47
|
+
* results$.subscribe((value) => {
|
|
48
|
+
* mut_history.push(value);
|
|
49
|
+
* });
|
|
50
|
+
*
|
|
51
|
+
* searchQuery$.next('a');
|
|
52
|
+
*
|
|
53
|
+
* searchQuery$.next('ab');
|
|
54
|
+
*
|
|
55
|
+
* searchQuery$.next('abc');
|
|
56
|
+
*
|
|
57
|
+
* await new Promise((resolve) => {
|
|
58
|
+
* setTimeout(resolve, 200);
|
|
24
59
|
* });
|
|
25
|
-
* // Only the latest search results are emitted, previous searches are cancelled
|
|
26
60
|
*
|
|
27
|
-
*
|
|
61
|
+
* assert.deepStrictEqual(mut_history, [['abc']]);
|
|
28
62
|
* ```
|
|
29
63
|
*
|
|
30
64
|
* @note To improve code readability, consider using `createState` instead of `switchMap`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"switch-map.mjs","sources":["../../../src/core/operators/switch-map.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA
|
|
1
|
+
{"version":3,"file":"switch-map.mjs","sources":["../../../src/core/operators/switch-map.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6DG;MACU,SAAS,GACpB,CACE,eAA2C,KAE7C,CAAC,gBAAgB,KACf,IAAI,wBAAwB,CAAC,gBAAgB,EAAE,eAAe;AAElE,MAAM,wBACJ,SAAQ,yBAA0C,CAAA;AAGzC,IAAA,gBAAgB;AACzB,IAAA,eAAe;AACf,IAAA,iBAAiB;IAEjB,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,eAAe,GAAG,SAAS;AAEhC,QAAA,IAAI,CAAC,iBAAiB,GAAG,SAAS;IACpC;AAES,IAAA,SAAS,CAAC,aAA4B,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC9D,YAAA,OAAO;QACT;AAEA,QAAA,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE;AAEhC,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;QAErC,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,KAAK,CAAC;AAElD,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU;QAEjC,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,iBAAiB,GAAG,YAAY;IACvC;IAES,QAAQ,GAAA;AACf,QAAA,IAAI,CAAC,iBAAiB,EAAE,WAAW,EAAE;AAErC,QAAA,IAAI,CAAC,eAAe,EAAE,QAAQ,EAAE;QAEhC,KAAK,CAAC,QAAQ,EAAE;IAClB;AACD;;;;"}
|
|
@@ -9,23 +9,42 @@ import { type KeepInitialValueOperator, type Observable } from '../types/index.m
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
+
* // Timeline:
|
|
13
|
+
* //
|
|
14
|
+
* // num$ 1 2 stop 3 (ignored)
|
|
15
|
+
* // stopNotifier X
|
|
16
|
+
* // limited$ 1 2 |------- (completed)
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - takeUntil completes the observable when the notifier emits
|
|
20
|
+
* // - After stop() is called, no further values are emitted
|
|
21
|
+
* // - Useful for cleanup and cancellation patterns
|
|
22
|
+
*
|
|
12
23
|
* const num$ = source<number>();
|
|
13
24
|
*
|
|
14
25
|
* const [stopNotifier, stop_] = createEventEmitter();
|
|
15
26
|
*
|
|
16
27
|
* const limited$ = num$.pipe(takeUntil(stopNotifier));
|
|
17
28
|
*
|
|
29
|
+
* const mut_history: number[] = [];
|
|
30
|
+
*
|
|
18
31
|
* limited$.subscribe((x) => {
|
|
19
|
-
*
|
|
32
|
+
* mut_history.push(x);
|
|
20
33
|
* });
|
|
21
34
|
*
|
|
22
35
|
* num$.next(1); // logs: 1
|
|
23
36
|
*
|
|
37
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
38
|
+
*
|
|
24
39
|
* num$.next(2); // logs: 2
|
|
25
40
|
*
|
|
41
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
42
|
+
*
|
|
26
43
|
* stop_();
|
|
27
44
|
*
|
|
28
45
|
* num$.next(3); // nothing logged (completed)
|
|
46
|
+
*
|
|
47
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
29
48
|
* ```
|
|
30
49
|
*/
|
|
31
50
|
export declare const takeUntil: <A>(notifier: Observable<unknown>) => KeepInitialValueOperator<A, A>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take-until.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-until.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"take-until.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-until.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,UAAU,UAAU,CAAC,OAAO,CAAC,KAC5B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
|
|
@@ -12,23 +12,42 @@ import '../utils/id-maker.mjs';
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```ts
|
|
15
|
+
* // Timeline:
|
|
16
|
+
* //
|
|
17
|
+
* // num$ 1 2 stop 3 (ignored)
|
|
18
|
+
* // stopNotifier X
|
|
19
|
+
* // limited$ 1 2 |------- (completed)
|
|
20
|
+
* //
|
|
21
|
+
* // Explanation:
|
|
22
|
+
* // - takeUntil completes the observable when the notifier emits
|
|
23
|
+
* // - After stop() is called, no further values are emitted
|
|
24
|
+
* // - Useful for cleanup and cancellation patterns
|
|
25
|
+
*
|
|
15
26
|
* const num$ = source<number>();
|
|
16
27
|
*
|
|
17
28
|
* const [stopNotifier, stop_] = createEventEmitter();
|
|
18
29
|
*
|
|
19
30
|
* const limited$ = num$.pipe(takeUntil(stopNotifier));
|
|
20
31
|
*
|
|
32
|
+
* const mut_history: number[] = [];
|
|
33
|
+
*
|
|
21
34
|
* limited$.subscribe((x) => {
|
|
22
|
-
*
|
|
35
|
+
* mut_history.push(x);
|
|
23
36
|
* });
|
|
24
37
|
*
|
|
25
38
|
* num$.next(1); // logs: 1
|
|
26
39
|
*
|
|
40
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
41
|
+
*
|
|
27
42
|
* num$.next(2); // logs: 2
|
|
28
43
|
*
|
|
44
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
45
|
+
*
|
|
29
46
|
* stop_();
|
|
30
47
|
*
|
|
31
48
|
* num$.next(3); // nothing logged (completed)
|
|
49
|
+
*
|
|
50
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
32
51
|
* ```
|
|
33
52
|
*/
|
|
34
53
|
const takeUntil = (notifier) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take-until.mjs","sources":["../../../src/core/operators/take-until.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA
|
|
1
|
+
{"version":3,"file":"take-until.mjs","sources":["../../../src/core/operators/take-until.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;AACI,MAAM,SAAS,GAAG,CACvB,QAA6B;AAE7B;AACA,CAAC,CAAC,gBAAgB,KAChB,IAAI,wBAAwB,CAC1B,gBAAgB,EAChB,QAAQ,CACT;AAEL,MAAM,wBACJ,SAAQ,wBAAyC,CAAA;IAGjD,WAAA,CAAY,gBAA+B,EAAE,QAA6B,EAAA;AACxE,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,YAAA,YAAY,EAAE,gBAAgB,CAAC,WAAW,EAAE;AAC7C,SAAA,CAAC;AAEF,QAAA,QAAQ,CAAC,SAAS,CAChB,MAAK;YACH,IAAI,CAAC,QAAQ,EAAE;QACjB,CAAC,EACD,MAAK;YACH,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CACF;IACH;AAES,IAAA,SAAS,CAAC,aAA4B,EAAA;QAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAE3B,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,QAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;AAC9D,YAAA,OAAO;QACT;QAEA,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;IACvC;AACD;;;;"}
|