synstate 0.1.0 → 0.1.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/LICENSE +201 -0
- package/README.md +124 -350
- package/assets/synstate-icon.png +0 -0
- package/dist/core/combine/combine.d.mts +32 -2
- package/dist/core/combine/combine.d.mts.map +1 -1
- package/dist/core/combine/combine.mjs +32 -2
- 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 +20 -1
- package/dist/core/create/source.d.mts.map +1 -1
- 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/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/map-with-index.d.mts +19 -4
- package/dist/core/operators/map-with-index.d.mts.map +1 -1
- package/dist/core/operators/map-with-index.mjs +19 -4
- package/dist/core/operators/map-with-index.mjs.map +1 -1
- package/dist/core/operators/merge-map.d.mts +47 -5
- package/dist/core/operators/merge-map.d.mts.map +1 -1
- package/dist/core/operators/merge-map.mjs +47 -5
- 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 +25 -1
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
- package/dist/core/operators/skip-if-no-change.mjs +25 -1
- 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 -0
- package/dist/core/operators/skip-while.d.mts.map +1 -1
- package/dist/core/operators/skip-while.mjs +48 -0
- 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 -0
- package/dist/core/operators/take-while.d.mts.map +1 -1
- package/dist/core/operators/take-while.mjs +47 -0
- 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 +53 -0
- package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
- package/dist/core/operators/with-buffered-from.mjs +53 -0
- package/dist/core/operators/with-buffered-from.mjs.map +1 -1
- package/dist/core/operators/with-current-value-from.d.mts +55 -0
- package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
- package/dist/core/operators/with-current-value-from.mjs +55 -0
- 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/types/observable-family.d.mts +7 -7
- 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 +32 -2
- 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 +20 -1
- package/src/core/create/timer.mts +23 -4
- 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 +19 -4
- package/src/core/operators/merge-map.mts +47 -5
- 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 +25 -1
- package/src/core/operators/skip-until.mts +50 -0
- package/src/core/operators/skip-while.mts +48 -0
- 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 +47 -0
- package/src/core/operators/throttle-time.mts +44 -5
- package/src/core/operators/with-buffered-from.mts +53 -0
- package/src/core/operators/with-current-value-from.mts +55 -0
- package/src/core/operators/with-initial-value.mts +24 -2
- 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,4 +1,52 @@
|
|
|
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
51
|
export declare const skip: <A>(n: PositiveSafeIntWithSmallInt) => DropInitialValueOperator<A, A>;
|
|
4
52
|
//# 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":"AAQA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B,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;AAI9D,eAAO,MAAM,IAAI,GAAI,CAAC,EACpB,GAAG,2BAA2B,KAC7B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CACyC,CAAC"}
|
|
1
|
+
{"version":3,"file":"skip-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/skip-while.mts"],"names":[],"mappings":"AAQA,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;AAI9D,eAAO,MAAM,IAAI,GAAI,CAAC,EACpB,GAAG,2BAA2B,KAC7B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CACyC,CAAC"}
|
|
@@ -2,6 +2,54 @@ import { PositiveSafeInt, pipe, Optional, asSafeUint, SafeUint } from 'ts-data-f
|
|
|
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
54
|
/* Specialized operators */
|
|
7
55
|
const skip = (n) => !PositiveSafeInt.is(n) ? idFn : skipWhile((_, index) => index + 1 <= n);
|
|
@@ -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":";;;;AAeA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;MACU,SAAS,GACpB,CACE,SAAsD,KAExD,CAAC,gBAAgB,KACf,IAAI,wBAAwB,CAAC,gBAAgB,EAAE,SAAS;AAE5D;AAEO,MAAM,IAAI,GAAG,CAClB,CAA8B,KAE9B,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,IAAI,CAAC;AAExE,MAAM,IAAI,GAAG,CAAK,KAAQ,KAAQ,KAAK;AAEvC;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;;;;"}
|
|
@@ -1,4 +1,51 @@
|
|
|
1
1
|
import { type DropInitialValueOperator } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Emits values from the source observable while the predicate returns true.
|
|
4
|
+
* Completes immediately when the predicate returns false.
|
|
5
|
+
*
|
|
6
|
+
* @template A - The type of values from the source
|
|
7
|
+
* @param predicate - Function to test each value
|
|
8
|
+
* @returns An operator that takes values while the predicate is true
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* // Timeline:
|
|
13
|
+
* //
|
|
14
|
+
* // num$ 1 2 3 4 5 6 (ignored)
|
|
15
|
+
* // taken$ 1 2 3 4 | (completes)
|
|
16
|
+
* //
|
|
17
|
+
* // Explanation:
|
|
18
|
+
* // - takeWhile emits values while the predicate returns true
|
|
19
|
+
* // - Completes immediately when the predicate returns false
|
|
20
|
+
* // - No further values are emitted after completion
|
|
21
|
+
*
|
|
22
|
+
* const num$ = source<number>();
|
|
23
|
+
*
|
|
24
|
+
* const taken$ = num$.pipe(takeWhile((x) => x < 5));
|
|
25
|
+
*
|
|
26
|
+
* const mut_history: number[] = [];
|
|
27
|
+
*
|
|
28
|
+
* taken$.subscribe((x) => {
|
|
29
|
+
* mut_history.push(x);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* num$.next(1); // logs: 1
|
|
33
|
+
*
|
|
34
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
35
|
+
*
|
|
36
|
+
* num$.next(2); // logs: 2
|
|
37
|
+
*
|
|
38
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
39
|
+
*
|
|
40
|
+
* num$.next(5); // nothing logged (completes)
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
43
|
+
*
|
|
44
|
+
* num$.next(6); // nothing logged (already completed)
|
|
45
|
+
*
|
|
46
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
2
49
|
export declare const takeWhile: <A>(predicate: (value: A, index: SafeUint | -1) => boolean) => DropInitialValueOperator<A, A>;
|
|
3
50
|
export declare const take: <A>(n: PositiveSafeIntWithSmallInt) => DropInitialValueOperator<A, A>;
|
|
4
51
|
//# sourceMappingURL=take-while.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-while.mts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,wBAAwB,EAK9B,MAAM,oBAAoB,CAAC;AAG5B,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;AAI9D,eAAO,MAAM,IAAI,GAAI,CAAC,EACpB,GAAG,2BAA2B,KAC7B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAA4C,CAAC"}
|
|
1
|
+
{"version":3,"file":"take-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-while.mts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,wBAAwB,EAK9B,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;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;AAI9D,eAAO,MAAM,IAAI,GAAI,CAAC,EACpB,GAAG,2BAA2B,KAC7B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAA4C,CAAC"}
|
|
@@ -2,6 +2,53 @@ 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
|
+
* Emits values from the source observable while the predicate returns true.
|
|
7
|
+
* Completes immediately when the predicate returns false.
|
|
8
|
+
*
|
|
9
|
+
* @template A - The type of values from the source
|
|
10
|
+
* @param predicate - Function to test each value
|
|
11
|
+
* @returns An operator that takes values while the predicate is true
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Timeline:
|
|
16
|
+
* //
|
|
17
|
+
* // num$ 1 2 3 4 5 6 (ignored)
|
|
18
|
+
* // taken$ 1 2 3 4 | (completes)
|
|
19
|
+
* //
|
|
20
|
+
* // Explanation:
|
|
21
|
+
* // - takeWhile emits values while the predicate returns true
|
|
22
|
+
* // - Completes immediately when the predicate returns false
|
|
23
|
+
* // - No further values are emitted after completion
|
|
24
|
+
*
|
|
25
|
+
* const num$ = source<number>();
|
|
26
|
+
*
|
|
27
|
+
* const taken$ = num$.pipe(takeWhile((x) => x < 5));
|
|
28
|
+
*
|
|
29
|
+
* const mut_history: number[] = [];
|
|
30
|
+
*
|
|
31
|
+
* taken$.subscribe((x) => {
|
|
32
|
+
* mut_history.push(x);
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* num$.next(1); // logs: 1
|
|
36
|
+
*
|
|
37
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
38
|
+
*
|
|
39
|
+
* num$.next(2); // logs: 2
|
|
40
|
+
*
|
|
41
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
42
|
+
*
|
|
43
|
+
* num$.next(5); // nothing logged (completes)
|
|
44
|
+
*
|
|
45
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
46
|
+
*
|
|
47
|
+
* num$.next(6); // nothing logged (already completed)
|
|
48
|
+
*
|
|
49
|
+
* assert.deepStrictEqual(mut_history, [1, 2]);
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
5
52
|
const takeWhile = (predicate) => (parentObservable) => new TakeWhileObservableClass(parentObservable, predicate);
|
|
6
53
|
/* Specialized operators */
|
|
7
54
|
const take = (n) => takeWhile((_, index) => index + 1 <= n);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take-while.mjs","sources":["../../../src/core/operators/take-while.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"take-while.mjs","sources":["../../../src/core/operators/take-while.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CG;AACI,MAAM,SAAS,GACpB,CACE,SAAsD,KAExD,CAAC,gBAAgB,KACf,IAAI,wBAAwB,CAAC,gBAAgB,EAAE,SAAS;AAE5D;MAEa,IAAI,GAAG,CAClB,CAA8B,KACK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,KAAK,GAAG,CAAC,IAAI,CAAC;AAE3E;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,GAAG,KACzD,QAAQ,CAAC,MAAM,CAAC,GAAG;kBACf,QAAQ,CAAC;kBACT,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE;AACvB,sBAAE;AACF,sBAAE,QAAQ,CAAC,IAAI,CACpB,CAAC,KAAK;AACR,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;AAEpB,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;;AAGpB,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;;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,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE;YAC9C,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC;;aAChC;YACL,IAAI,CAAC,QAAQ,EAAE;;;AAGpB;;;;"}
|
|
@@ -9,14 +9,53 @@ import { type KeepInitialValueOperator } from '../types/index.mjs';
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
*
|
|
12
|
+
* // Timeline (1000ms throttle):
|
|
13
|
+
* //
|
|
14
|
+
* // Time(ms) 0 100 200 300 ... 1000 1100 1200 ... 2000 2100
|
|
15
|
+
* // scroll$ e1 e2 e3 e4 e5 e6 e7 e8 e9
|
|
16
|
+
* // throttled$ e1 e5 e8
|
|
17
|
+
* // |-------1000ms------> |------1000ms------> |------1000ms------>
|
|
18
|
+
* //
|
|
19
|
+
* // Explanation:
|
|
20
|
+
* // - throttleTime emits the first value immediately, then ignores subsequent values
|
|
21
|
+
* // for the specified duration (1000ms)
|
|
22
|
+
* // - At 0ms: e1 is emitted immediately
|
|
23
|
+
* // - At 100-300ms: e2, e3, e4 are ignored (within 1000ms window)
|
|
24
|
+
* // - At 1000ms: e5 is emitted (1000ms has passed since e1)
|
|
25
|
+
* // - At 1100-1200ms: e6, e7 are ignored
|
|
26
|
+
* // - At 2000ms: e8 is emitted (1000ms has passed since e5)
|
|
13
27
|
*
|
|
14
|
-
* const
|
|
28
|
+
* const scroll$ = source<number>();
|
|
15
29
|
*
|
|
16
|
-
* throttled$.
|
|
17
|
-
*
|
|
30
|
+
* const throttled$ = scroll$.pipe(throttleTime(200));
|
|
31
|
+
*
|
|
32
|
+
* const mut_history: number[] = [];
|
|
33
|
+
*
|
|
34
|
+
* throttled$.subscribe((value) => {
|
|
35
|
+
* mut_history.push(value);
|
|
18
36
|
* });
|
|
19
|
-
*
|
|
37
|
+
*
|
|
38
|
+
* scroll$.next(1);
|
|
39
|
+
*
|
|
40
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
41
|
+
*
|
|
42
|
+
* await new Promise((resolve) => {
|
|
43
|
+
* setTimeout(resolve, 50);
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* scroll$.next(2);
|
|
47
|
+
*
|
|
48
|
+
* scroll$.next(3);
|
|
49
|
+
*
|
|
50
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
51
|
+
*
|
|
52
|
+
* await new Promise((resolve) => {
|
|
53
|
+
* setTimeout(resolve, 200);
|
|
54
|
+
* });
|
|
55
|
+
*
|
|
56
|
+
* scroll$.next(4);
|
|
57
|
+
*
|
|
58
|
+
* assert.deepStrictEqual(mut_history, [1, 4]);
|
|
20
59
|
* ```
|
|
21
60
|
*/
|
|
22
61
|
export declare const throttleTime: <A>(milliSeconds: number) => KeepInitialValueOperator<A, A>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle-time.d.mts","sourceRoot":"","sources":["../../../src/core/operators/throttle-time.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"throttle-time.d.mts","sourceRoot":"","sources":["../../../src/core/operators/throttle-time.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0DG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAC5B,cAAc,MAAM,KACnB,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
|
|
@@ -12,14 +12,53 @@ import '../utils/id-maker.mjs';
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```ts
|
|
15
|
-
*
|
|
15
|
+
* // Timeline (1000ms throttle):
|
|
16
|
+
* //
|
|
17
|
+
* // Time(ms) 0 100 200 300 ... 1000 1100 1200 ... 2000 2100
|
|
18
|
+
* // scroll$ e1 e2 e3 e4 e5 e6 e7 e8 e9
|
|
19
|
+
* // throttled$ e1 e5 e8
|
|
20
|
+
* // |-------1000ms------> |------1000ms------> |------1000ms------>
|
|
21
|
+
* //
|
|
22
|
+
* // Explanation:
|
|
23
|
+
* // - throttleTime emits the first value immediately, then ignores subsequent values
|
|
24
|
+
* // for the specified duration (1000ms)
|
|
25
|
+
* // - At 0ms: e1 is emitted immediately
|
|
26
|
+
* // - At 100-300ms: e2, e3, e4 are ignored (within 1000ms window)
|
|
27
|
+
* // - At 1000ms: e5 is emitted (1000ms has passed since e1)
|
|
28
|
+
* // - At 1100-1200ms: e6, e7 are ignored
|
|
29
|
+
* // - At 2000ms: e8 is emitted (1000ms has passed since e5)
|
|
16
30
|
*
|
|
17
|
-
* const
|
|
31
|
+
* const scroll$ = source<number>();
|
|
18
32
|
*
|
|
19
|
-
* throttled$.
|
|
20
|
-
*
|
|
33
|
+
* const throttled$ = scroll$.pipe(throttleTime(200));
|
|
34
|
+
*
|
|
35
|
+
* const mut_history: number[] = [];
|
|
36
|
+
*
|
|
37
|
+
* throttled$.subscribe((value) => {
|
|
38
|
+
* mut_history.push(value);
|
|
21
39
|
* });
|
|
22
|
-
*
|
|
40
|
+
*
|
|
41
|
+
* scroll$.next(1);
|
|
42
|
+
*
|
|
43
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
44
|
+
*
|
|
45
|
+
* await new Promise((resolve) => {
|
|
46
|
+
* setTimeout(resolve, 50);
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* scroll$.next(2);
|
|
50
|
+
*
|
|
51
|
+
* scroll$.next(3);
|
|
52
|
+
*
|
|
53
|
+
* assert.deepStrictEqual(mut_history, [1]);
|
|
54
|
+
*
|
|
55
|
+
* await new Promise((resolve) => {
|
|
56
|
+
* setTimeout(resolve, 200);
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* scroll$.next(4);
|
|
60
|
+
*
|
|
61
|
+
* assert.deepStrictEqual(mut_history, [1, 4]);
|
|
23
62
|
* ```
|
|
24
63
|
*/
|
|
25
64
|
const throttleTime = (milliSeconds) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"throttle-time.mjs","sources":["../../../src/core/operators/throttle-time.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA
|
|
1
|
+
{"version":3,"file":"throttle-time.mjs","sources":["../../../src/core/operators/throttle-time.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DG;AACI,MAAM,YAAY,GAAG,CAC1B,YAAoB;AAEpB;AACA,CAAC,CAAC,gBAAgB,KAChB,IAAI,2BAA2B,CAC7B,gBAAgB,EAChB,YAAY,CACb;AAEL,MAAM,2BACJ,SAAQ,wBAAyC,CAAA;AAGxC,IAAA,aAAa;AACtB,IAAA,YAAY;AACZ,IAAA,eAAe;IAEf,WAAA,CAAY,gBAA+B,EAAE,YAAoB,EAAA;AAC/D,QAAA,KAAK,CAAC;YACJ,OAAO,EAAE,CAAC,gBAAgB,CAAC;AAC3B,YAAA,YAAY,EAAE,gBAAgB,CAAC,WAAW,EAAE;AAC7C,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAE7B,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAE5B,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;IACnC;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;AAErC,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI;;AAG3B,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,eAAe,GAAG,KAAK;AAC9B,QAAA,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;IACxB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACnC,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QACjC;IACF;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,WAAW,EAAE;QAElB,KAAK,CAAC,QAAQ,EAAE;IAClB;AACD;;;;"}
|