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
|
@@ -1,7 +1,47 @@
|
|
|
1
1
|
import { Result } from 'ts-data-forge';
|
|
2
|
+
import { map } from '../../operators/index.mjs';
|
|
2
3
|
import { type KeepInitialValueOperator } from '../../types/index.mjs';
|
|
3
|
-
import { map } from './map.mjs';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Unwraps the error value from a `Result`, converting `Err(error)` to `error` and `Ok` to `undefined`.
|
|
7
|
+
*
|
|
8
|
+
* @template R - The Result type from the source
|
|
9
|
+
* @returns An operator that unwraps the Err side of Result emissions
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Timeline:
|
|
14
|
+
* //
|
|
15
|
+
* // result$ Ok(1) Err("fail") Ok(2)
|
|
16
|
+
* // unwrapped$ undefined "fail" undefined
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - unwrapResultErr converts Err(error) to error, and Ok to undefined
|
|
20
|
+
* // - Useful for extracting error values from Result streams
|
|
21
|
+
*
|
|
22
|
+
* const result$ = source<Result<number, string>>();
|
|
23
|
+
*
|
|
24
|
+
* const unwrapped$ = result$.pipe(unwrapResultErr());
|
|
25
|
+
*
|
|
26
|
+
* const valueHistory: (string | undefined)[] = [];
|
|
27
|
+
*
|
|
28
|
+
* unwrapped$.subscribe((v) => {
|
|
29
|
+
* valueHistory.push(v);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* result$.next(Result.ok(1));
|
|
33
|
+
*
|
|
34
|
+
* assert.deepStrictEqual(valueHistory, [undefined]);
|
|
35
|
+
*
|
|
36
|
+
* result$.next(Result.err('fail'));
|
|
37
|
+
*
|
|
38
|
+
* assert.deepStrictEqual(valueHistory, [undefined, 'fail']);
|
|
39
|
+
*
|
|
40
|
+
* result$.next(Result.ok(2));
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(valueHistory, [undefined, 'fail', undefined]);
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
5
45
|
export const unwrapResultErr = <
|
|
6
46
|
R extends UnknownResult,
|
|
7
47
|
>(): KeepInitialValueOperator<R, Result.UnwrapErr<R> | undefined> =>
|
|
@@ -1,7 +1,47 @@
|
|
|
1
1
|
import { Result } from 'ts-data-forge';
|
|
2
|
+
import { map } from '../../operators/index.mjs';
|
|
2
3
|
import { type KeepInitialValueOperator } from '../../types/index.mjs';
|
|
3
|
-
import { map } from './map.mjs';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Unwraps the success value from a `Result`, converting `Ok(value)` to `value` and `Err` to `undefined`.
|
|
7
|
+
*
|
|
8
|
+
* @template R - The Result type from the source
|
|
9
|
+
* @returns An operator that unwraps the Ok side of Result emissions
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Timeline:
|
|
14
|
+
* //
|
|
15
|
+
* // result$ Ok(42) Err("e") Ok(7)
|
|
16
|
+
* // unwrapped$ 42 undefined 7
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - unwrapResultOk converts Ok(value) to value, and Err to undefined
|
|
20
|
+
* // - Useful for extracting success values from Result streams
|
|
21
|
+
*
|
|
22
|
+
* const result$ = source<Result<number, string>>();
|
|
23
|
+
*
|
|
24
|
+
* const unwrapped$ = result$.pipe(unwrapResultOk());
|
|
25
|
+
*
|
|
26
|
+
* const valueHistory: (number | undefined)[] = [];
|
|
27
|
+
*
|
|
28
|
+
* unwrapped$.subscribe((v) => {
|
|
29
|
+
* valueHistory.push(v);
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* result$.next(Result.ok(42));
|
|
33
|
+
*
|
|
34
|
+
* assert.deepStrictEqual(valueHistory, [42]);
|
|
35
|
+
*
|
|
36
|
+
* result$.next(Result.err('e'));
|
|
37
|
+
*
|
|
38
|
+
* assert.deepStrictEqual(valueHistory, [42, undefined]);
|
|
39
|
+
*
|
|
40
|
+
* result$.next(Result.ok(7));
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(valueHistory, [42, undefined, 7]);
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
5
45
|
export const unwrapResultOk = <
|
|
6
46
|
R extends UnknownResult,
|
|
7
47
|
>(): KeepInitialValueOperator<R, Result.UnwrapOk<R> | undefined> =>
|
package/src/core/types/id.mts
CHANGED
package/src/core/types/index.mts
CHANGED
|
@@ -23,16 +23,6 @@ export type SourceObservable<A> = Readonly<{
|
|
|
23
23
|
}> &
|
|
24
24
|
RootObservable<A>;
|
|
25
25
|
|
|
26
|
-
export type OfObservable<A> = Readonly<{
|
|
27
|
-
emit: () => OfObservable<A>;
|
|
28
|
-
}> &
|
|
29
|
-
RootObservable<A>;
|
|
30
|
-
|
|
31
|
-
export type FromArrayObservable<A> = Readonly<{
|
|
32
|
-
emit: () => FromArrayObservable<A>;
|
|
33
|
-
}> &
|
|
34
|
-
RootObservable<A>;
|
|
35
|
-
|
|
36
26
|
export type FromPromiseObservable<A, E = unknown> = RootObservable<
|
|
37
27
|
Result<A, E>
|
|
38
28
|
>;
|
|
@@ -41,13 +31,13 @@ export type FromSubscribableObservable<A, E = unknown> = RootObservable<
|
|
|
41
31
|
Result<A, E>
|
|
42
32
|
>;
|
|
43
33
|
|
|
44
|
-
export type
|
|
45
|
-
start: () =>
|
|
34
|
+
export type CounterObservable = Readonly<{
|
|
35
|
+
start: () => void;
|
|
46
36
|
}> &
|
|
47
37
|
RootObservable<SafeUint>;
|
|
48
38
|
|
|
49
39
|
export type TimerObservable = Readonly<{
|
|
50
|
-
start: () =>
|
|
40
|
+
start: () => void;
|
|
51
41
|
}> &
|
|
52
42
|
RootObservable<0>;
|
|
53
43
|
|
|
@@ -77,7 +67,7 @@ namespace SynStateInternals {
|
|
|
77
67
|
? true
|
|
78
68
|
: false;
|
|
79
69
|
|
|
80
|
-
/** Evaluates
|
|
70
|
+
/** Evaluates true | false as true instead of boolean */
|
|
81
71
|
type LogicalValue<B extends boolean> = readonly [B] extends readonly [true]
|
|
82
72
|
? true
|
|
83
73
|
: readonly [B] extends readonly [false]
|
|
@@ -184,10 +174,7 @@ export type MergeObservableRefined<
|
|
|
184
174
|
OS extends NonEmptyArray<Observable<unknown>>,
|
|
185
175
|
> = SynStateInternals.MergeObservableRefinedImpl<OS>;
|
|
186
176
|
|
|
187
|
-
export type
|
|
188
|
-
B,
|
|
189
|
-
readonly [A]
|
|
190
|
-
>;
|
|
177
|
+
export type MapOperatorObservable<A, B> = SyncChildObservable<B, readonly [A]>;
|
|
191
178
|
|
|
192
179
|
export type PairwiseOperatorObservable<A> = SyncChildObservable<
|
|
193
180
|
readonly [A, A],
|
|
@@ -231,19 +218,16 @@ export type SkipIfNoChangeOperatorObservable<A> = SyncChildObservable<
|
|
|
231
218
|
readonly [A]
|
|
232
219
|
>;
|
|
233
220
|
|
|
234
|
-
export type
|
|
221
|
+
export type ThrottleOperatorObservable<A> = SyncChildObservable<
|
|
235
222
|
A,
|
|
236
223
|
readonly [A]
|
|
237
224
|
>;
|
|
238
225
|
|
|
239
226
|
// AsyncChildObservable
|
|
240
227
|
|
|
241
|
-
export type
|
|
242
|
-
A,
|
|
243
|
-
readonly [A]
|
|
244
|
-
>;
|
|
228
|
+
export type AuditOperatorObservable<A> = AsyncChildObservable<A, readonly [A]>;
|
|
245
229
|
|
|
246
|
-
export type
|
|
230
|
+
export type DebounceOperatorObservable<A> = AsyncChildObservable<
|
|
247
231
|
A,
|
|
248
232
|
readonly [A]
|
|
249
233
|
>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expectType, type Optional } from 'ts-data-forge';
|
|
2
|
-
import { type ObservableId, type
|
|
2
|
+
import { type ObservableId, type UpdateToken } from './id.mjs';
|
|
3
3
|
import { type ObservableKind } from './observable-kind.mjs';
|
|
4
4
|
import { type NonEmptyUnknownList, type Subscription } from './types.mjs';
|
|
5
5
|
|
|
@@ -28,12 +28,12 @@ type CreateObservableType<A, Kind extends ObservableKind> = Readonly<{
|
|
|
28
28
|
// state
|
|
29
29
|
getSnapshot: () => Optional<A>;
|
|
30
30
|
isCompleted: boolean;
|
|
31
|
-
|
|
31
|
+
updateToken: UpdateToken;
|
|
32
32
|
hasSubscriber: boolean;
|
|
33
33
|
hasChild: boolean;
|
|
34
34
|
hasActiveChild: () => boolean;
|
|
35
35
|
|
|
36
|
-
tryUpdate: (
|
|
36
|
+
tryUpdate: (updateToken: UpdateToken) => void;
|
|
37
37
|
tryComplete: () => void;
|
|
38
38
|
complete: () => void;
|
|
39
39
|
subscribe: (onNext: (v: A) => void, onComplete?: () => void) => Subscription;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
type ObservableId,
|
|
3
3
|
type SubscriberId,
|
|
4
|
-
type
|
|
4
|
+
type UpdateToken,
|
|
5
5
|
} from '../types/index.mjs';
|
|
6
6
|
|
|
7
7
|
function* idMaker<T extends symbol>(): Generator<T, T, T> {
|
|
@@ -19,7 +19,7 @@ const observableIdMaker = idMaker<ObservableId>();
|
|
|
19
19
|
|
|
20
20
|
const subscriberIdMaker = idMaker<SubscriberId>();
|
|
21
21
|
|
|
22
|
-
const
|
|
22
|
+
const updateTokenMaker = idMaker<UpdateToken>();
|
|
23
23
|
|
|
24
24
|
export const issueObservableId = (): ObservableId =>
|
|
25
25
|
observableIdMaker.next().value;
|
|
@@ -27,5 +27,5 @@ export const issueObservableId = (): ObservableId =>
|
|
|
27
27
|
export const issueSubscriberId = (): SubscriberId =>
|
|
28
28
|
subscriberIdMaker.next().value;
|
|
29
29
|
|
|
30
|
-
export const
|
|
31
|
-
|
|
30
|
+
export const issueUpdateToken = (): UpdateToken =>
|
|
31
|
+
updateTokenMaker.next().value;
|
package/src/globals.d.mts
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Observable } from '../core/index.mjs';
|
|
2
|
+
|
|
3
|
+
export const collectToArray = <A,>(
|
|
4
|
+
observable: Observable<A>,
|
|
5
|
+
): Promise<readonly A[]> =>
|
|
6
|
+
new Promise<readonly A[]>((resolve) => {
|
|
7
|
+
const mut_buffer: A[] = [];
|
|
8
|
+
|
|
9
|
+
observable.subscribe(
|
|
10
|
+
(value) => {
|
|
11
|
+
mut_buffer.push(value);
|
|
12
|
+
},
|
|
13
|
+
() => {
|
|
14
|
+
resolve(mut_buffer);
|
|
15
|
+
},
|
|
16
|
+
);
|
|
17
|
+
});
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { type InitializedObservable } from '../core/index.mjs';
|
|
2
|
+
import { createState } from './create-state.mjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Creates a reactive boolean state with convenient methods for boolean operations.
|
|
6
|
+
* Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.
|
|
7
|
+
*
|
|
8
|
+
* @param initialState - The initial boolean value
|
|
9
|
+
* @returns A 2-element tuple: `[state, { setTrue, setFalse, toggle, setState, updateState, resetState, getSnapshot, initialState }]`
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* import type * as React from 'react';
|
|
14
|
+
* import { createBooleanState } from 'synstate';
|
|
15
|
+
* import { useObservableValue } from 'synstate-react-hooks';
|
|
16
|
+
*
|
|
17
|
+
* // Menu drawer open/close state.
|
|
18
|
+
* // setTrue and setFalse can be passed directly as callbacks
|
|
19
|
+
* // — no need to create wrapper functions like `() => setState(true)`.
|
|
20
|
+
* const [menuOpen$, { setTrue: openMenu, setFalse: closeMenu }] =
|
|
21
|
+
* createBooleanState(false);
|
|
22
|
+
*
|
|
23
|
+
* const SampleComponent = (): React.JSX.Element => (
|
|
24
|
+
* <MenuDrawer
|
|
25
|
+
* open={useObservableValue(menuOpen$)}
|
|
26
|
+
* onClose={closeMenu}
|
|
27
|
+
* onOpen={openMenu}
|
|
28
|
+
* />
|
|
29
|
+
* );
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export const createBooleanState = (
|
|
34
|
+
initialState: boolean,
|
|
35
|
+
): readonly [
|
|
36
|
+
state: InitializedObservable<boolean>,
|
|
37
|
+
Readonly<{
|
|
38
|
+
setTrue: () => void;
|
|
39
|
+
setFalse: () => void;
|
|
40
|
+
setState: (next: boolean) => boolean;
|
|
41
|
+
toggle: () => boolean;
|
|
42
|
+
updateState: (updateFn: (prev: boolean) => boolean) => boolean;
|
|
43
|
+
resetState: () => boolean;
|
|
44
|
+
getSnapshot: () => boolean;
|
|
45
|
+
initialState: boolean;
|
|
46
|
+
}>,
|
|
47
|
+
] => {
|
|
48
|
+
const [state, setState, { updateState, resetState, getSnapshot }] =
|
|
49
|
+
createState(initialState);
|
|
50
|
+
|
|
51
|
+
return [
|
|
52
|
+
state,
|
|
53
|
+
{
|
|
54
|
+
setTrue: () => {
|
|
55
|
+
setState(true);
|
|
56
|
+
},
|
|
57
|
+
setFalse: () => {
|
|
58
|
+
setState(false);
|
|
59
|
+
},
|
|
60
|
+
toggle: () => updateState((s) => !s),
|
|
61
|
+
setState,
|
|
62
|
+
updateState,
|
|
63
|
+
resetState,
|
|
64
|
+
getSnapshot,
|
|
65
|
+
initialState,
|
|
66
|
+
},
|
|
67
|
+
] as const;
|
|
68
|
+
};
|
|
@@ -51,19 +51,19 @@ export const createEventEmitter = (): readonly [
|
|
|
51
51
|
* ```ts
|
|
52
52
|
* const [message$, emitMessage] = createValueEmitter<string>();
|
|
53
53
|
*
|
|
54
|
-
* const
|
|
54
|
+
* const messageHistory: string[] = [];
|
|
55
55
|
*
|
|
56
56
|
* message$.subscribe((msg) => {
|
|
57
|
-
*
|
|
57
|
+
* messageHistory.push(msg);
|
|
58
58
|
* });
|
|
59
59
|
*
|
|
60
60
|
* emitMessage('Hello'); // logs: Hello
|
|
61
61
|
*
|
|
62
|
-
* assert.deepStrictEqual(
|
|
62
|
+
* assert.deepStrictEqual(messageHistory, ['Hello']);
|
|
63
63
|
*
|
|
64
64
|
* emitMessage('World');
|
|
65
65
|
*
|
|
66
|
-
* assert.deepStrictEqual(
|
|
66
|
+
* assert.deepStrictEqual(messageHistory, ['Hello', 'World']);
|
|
67
67
|
* ```
|
|
68
68
|
*/
|
|
69
69
|
export const createValueEmitter = <A,>(): readonly [
|
|
@@ -8,7 +8,7 @@ import { source, type InitializedObservable } from '../core/index.mjs';
|
|
|
8
8
|
* @template A - The type of actions
|
|
9
9
|
* @param reducer - A pure function that takes current state and action, returns new state
|
|
10
10
|
* @param initialState - The initial value of the state
|
|
11
|
-
* @returns
|
|
11
|
+
* @returns A 3-element tuple: `[state, dispatch, { getSnapshot, initialState }]`
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```ts
|
|
@@ -24,23 +24,23 @@ import { source, type InitializedObservable } from '../core/index.mjs';
|
|
|
24
24
|
* 0,
|
|
25
25
|
* );
|
|
26
26
|
*
|
|
27
|
-
* const
|
|
27
|
+
* const stateHistory: number[] = [];
|
|
28
28
|
*
|
|
29
29
|
* state.subscribe((value: number) => {
|
|
30
|
-
*
|
|
30
|
+
* stateHistory.push(value);
|
|
31
31
|
* });
|
|
32
32
|
*
|
|
33
|
-
* assert.deepStrictEqual(
|
|
33
|
+
* assert.deepStrictEqual(stateHistory, [0]);
|
|
34
34
|
*
|
|
35
35
|
* dispatch({ type: 'increment' }); // logs: 1
|
|
36
36
|
*
|
|
37
|
-
* assert.deepStrictEqual(
|
|
37
|
+
* assert.deepStrictEqual(stateHistory, [0, 1]);
|
|
38
38
|
*
|
|
39
39
|
* dispatch({ type: 'increment' });
|
|
40
40
|
*
|
|
41
41
|
* dispatch({ type: 'decrement' });
|
|
42
42
|
*
|
|
43
|
-
* assert.deepStrictEqual(
|
|
43
|
+
* assert.deepStrictEqual(stateHistory, [0, 1, 2, 1]);
|
|
44
44
|
* ```
|
|
45
45
|
*/
|
|
46
46
|
export const createReducer = <S, A>(
|
|
@@ -49,7 +49,10 @@ export const createReducer = <S, A>(
|
|
|
49
49
|
): readonly [
|
|
50
50
|
state: InitializedObservable<S>,
|
|
51
51
|
dispatch: (action: A) => S,
|
|
52
|
-
|
|
52
|
+
Readonly<{
|
|
53
|
+
getSnapshot: () => S;
|
|
54
|
+
initialState: S;
|
|
55
|
+
}>,
|
|
53
56
|
] => {
|
|
54
57
|
const state = source<S>(initialState);
|
|
55
58
|
|
|
@@ -63,5 +66,5 @@ export const createReducer = <S, A>(
|
|
|
63
66
|
|
|
64
67
|
const getSnapshot = (): S => state.getSnapshot().value;
|
|
65
68
|
|
|
66
|
-
return [state, dispatch, getSnapshot] as const;
|
|
69
|
+
return [state, dispatch, { getSnapshot, initialState }] as const;
|
|
67
70
|
};
|
|
@@ -28,31 +28,31 @@ const reducer = <S,>(state: S, action: Action<S>): S => {
|
|
|
28
28
|
*
|
|
29
29
|
* @template S - The type of the state
|
|
30
30
|
* @param initialState - The initial value of the state
|
|
31
|
-
* @returns
|
|
31
|
+
* @returns A 3-element tuple: `[state, setState, { updateState, resetState, getSnapshot, initialState }]`
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
34
34
|
* ```ts
|
|
35
35
|
* const [state, setState, { updateState, resetState }] = createState(0);
|
|
36
36
|
*
|
|
37
|
-
* const
|
|
37
|
+
* const stateHistory: number[] = [];
|
|
38
38
|
*
|
|
39
39
|
* state.subscribe((value: number) => {
|
|
40
|
-
*
|
|
40
|
+
* stateHistory.push(value);
|
|
41
41
|
* });
|
|
42
42
|
*
|
|
43
|
-
* assert.deepStrictEqual(
|
|
43
|
+
* assert.deepStrictEqual(stateHistory, [0]);
|
|
44
44
|
*
|
|
45
45
|
* setState(10); // logs: 10
|
|
46
46
|
*
|
|
47
|
-
* assert.deepStrictEqual(
|
|
47
|
+
* assert.deepStrictEqual(stateHistory, [0, 10]);
|
|
48
48
|
*
|
|
49
49
|
* updateState((prev: number) => prev + 1); // logs: 11
|
|
50
50
|
*
|
|
51
|
-
* assert.deepStrictEqual(
|
|
51
|
+
* assert.deepStrictEqual(stateHistory, [0, 10, 11]);
|
|
52
52
|
*
|
|
53
53
|
* resetState(); // logs: 0
|
|
54
54
|
*
|
|
55
|
-
* assert.deepStrictEqual(
|
|
55
|
+
* assert.deepStrictEqual(stateHistory, [0, 10, 11, 0]);
|
|
56
56
|
* ```
|
|
57
57
|
*/
|
|
58
58
|
export const createState = <S,>(
|
|
@@ -64,9 +64,10 @@ export const createState = <S,>(
|
|
|
64
64
|
updateState: (updateFn: (prev: S) => S) => S;
|
|
65
65
|
resetState: () => S;
|
|
66
66
|
getSnapshot: () => S;
|
|
67
|
+
initialState: S;
|
|
67
68
|
}>,
|
|
68
69
|
] => {
|
|
69
|
-
const [state, dispatch, getSnapshot] = createReducer<S, Action<S>>(
|
|
70
|
+
const [state, dispatch, { getSnapshot }] = createReducer<S, Action<S>>(
|
|
70
71
|
reducer,
|
|
71
72
|
initialState,
|
|
72
73
|
);
|
|
@@ -86,73 +87,7 @@ export const createState = <S,>(
|
|
|
86
87
|
updateState,
|
|
87
88
|
resetState,
|
|
88
89
|
getSnapshot,
|
|
89
|
-
|
|
90
|
-
] as const;
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
/**
|
|
94
|
-
* Creates a reactive boolean state with convenient methods for boolean operations.
|
|
95
|
-
* Extends `createState` with boolean-specific helpers like `toggle`, `setTrue`, and `setFalse`.
|
|
96
|
-
*
|
|
97
|
-
* @param initialState - The initial boolean value
|
|
98
|
-
* @returns An object with the state observable and boolean-specific methods
|
|
99
|
-
*
|
|
100
|
-
* @example
|
|
101
|
-
* ```ts
|
|
102
|
-
* const [state, { setTrue, toggle }] = createBooleanState(false);
|
|
103
|
-
*
|
|
104
|
-
* const mut_history: boolean[] = [];
|
|
105
|
-
*
|
|
106
|
-
* state.subscribe((value: boolean) => {
|
|
107
|
-
* mut_history.push(value);
|
|
108
|
-
* });
|
|
109
|
-
*
|
|
110
|
-
* assert.deepStrictEqual(mut_history, [false]);
|
|
111
|
-
*
|
|
112
|
-
* setTrue(); // logs: true
|
|
113
|
-
*
|
|
114
|
-
* assert.deepStrictEqual(mut_history, [false, true]);
|
|
115
|
-
*
|
|
116
|
-
* toggle(); // logs: false
|
|
117
|
-
*
|
|
118
|
-
* assert.deepStrictEqual(mut_history, [false, true, false]);
|
|
119
|
-
*
|
|
120
|
-
* toggle(); // logs: true
|
|
121
|
-
*
|
|
122
|
-
* assert.deepStrictEqual(mut_history, [false, true, false, true]);
|
|
123
|
-
* ```
|
|
124
|
-
*/
|
|
125
|
-
export const createBooleanState = (
|
|
126
|
-
initialState: boolean,
|
|
127
|
-
): readonly [
|
|
128
|
-
state: InitializedObservable<boolean>,
|
|
129
|
-
Readonly<{
|
|
130
|
-
setTrue: () => void;
|
|
131
|
-
setFalse: () => void;
|
|
132
|
-
setState: (next: boolean) => boolean;
|
|
133
|
-
toggle: () => boolean;
|
|
134
|
-
updateState: (updateFn: (prev: boolean) => boolean) => boolean;
|
|
135
|
-
resetState: () => boolean;
|
|
136
|
-
getSnapshot: () => boolean;
|
|
137
|
-
}>,
|
|
138
|
-
] => {
|
|
139
|
-
const [state, setState, { updateState, resetState, getSnapshot }] =
|
|
140
|
-
createState(initialState);
|
|
141
|
-
|
|
142
|
-
return [
|
|
143
|
-
state,
|
|
144
|
-
{
|
|
145
|
-
setTrue: () => {
|
|
146
|
-
setState(true);
|
|
147
|
-
},
|
|
148
|
-
setFalse: () => {
|
|
149
|
-
setState(false);
|
|
150
|
-
},
|
|
151
|
-
toggle: () => updateState((s) => !s),
|
|
152
|
-
setState,
|
|
153
|
-
updateState,
|
|
154
|
-
resetState,
|
|
155
|
-
getSnapshot,
|
|
90
|
+
initialState,
|
|
156
91
|
},
|
|
157
92
|
] as const;
|
|
158
93
|
};
|
package/src/utils/index.mts
CHANGED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { type FromArrayObservable } from '../types/index.mjs';
|
|
2
|
-
/**
|
|
3
|
-
* Creates an observable that emits all values from an array sequentially, then completes.
|
|
4
|
-
*
|
|
5
|
-
* @template A - The type of array elements
|
|
6
|
-
* @param values - The array of values to emit
|
|
7
|
-
* @param startManually - If true, waits for manual start (default: false)
|
|
8
|
-
* @returns An observable that emits array values
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
* ```ts
|
|
12
|
-
* // Timeline:
|
|
13
|
-
* //
|
|
14
|
-
* // nums$ 1 2 3 | (completes)
|
|
15
|
-
* //
|
|
16
|
-
* // Explanation:
|
|
17
|
-
* // - fromArray creates an observable from an array
|
|
18
|
-
* // - Emits all values synchronously, then completes
|
|
19
|
-
*
|
|
20
|
-
* const nums$ = fromArray([1, 2, 3]);
|
|
21
|
-
*
|
|
22
|
-
* const mut_history: number[] = [];
|
|
23
|
-
*
|
|
24
|
-
* await new Promise<void>((resolve) => {
|
|
25
|
-
* nums$.subscribe(
|
|
26
|
-
* (x) => {
|
|
27
|
-
* mut_history.push(x);
|
|
28
|
-
* },
|
|
29
|
-
* () => {
|
|
30
|
-
* resolve();
|
|
31
|
-
* },
|
|
32
|
-
* );
|
|
33
|
-
* });
|
|
34
|
-
*
|
|
35
|
-
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
export declare const fromArray: <A>(values: readonly A[], startManually?: boolean) => FromArrayObservable<A>;
|
|
39
|
-
//# sourceMappingURL=from-array.d.mts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"from-array.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-array.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,QAAQ,SAAS,CAAC,EAAE,EACpB,gBAAe,OAAe,KAC7B,mBAAmB,CAAC,CAAC,CACgC,CAAC"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Optional } from 'ts-data-forge';
|
|
2
|
-
import '../utils/id-maker.mjs';
|
|
3
|
-
import { RootObservableClass } from '../class/root-observable-class.mjs';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Creates an observable that emits all values from an array sequentially, then completes.
|
|
7
|
-
*
|
|
8
|
-
* @template A - The type of array elements
|
|
9
|
-
* @param values - The array of values to emit
|
|
10
|
-
* @param startManually - If true, waits for manual start (default: false)
|
|
11
|
-
* @returns An observable that emits array values
|
|
12
|
-
*
|
|
13
|
-
* @example
|
|
14
|
-
* ```ts
|
|
15
|
-
* // Timeline:
|
|
16
|
-
* //
|
|
17
|
-
* // nums$ 1 2 3 | (completes)
|
|
18
|
-
* //
|
|
19
|
-
* // Explanation:
|
|
20
|
-
* // - fromArray creates an observable from an array
|
|
21
|
-
* // - Emits all values synchronously, then completes
|
|
22
|
-
*
|
|
23
|
-
* const nums$ = fromArray([1, 2, 3]);
|
|
24
|
-
*
|
|
25
|
-
* const mut_history: number[] = [];
|
|
26
|
-
*
|
|
27
|
-
* await new Promise<void>((resolve) => {
|
|
28
|
-
* nums$.subscribe(
|
|
29
|
-
* (x) => {
|
|
30
|
-
* mut_history.push(x);
|
|
31
|
-
* },
|
|
32
|
-
* () => {
|
|
33
|
-
* resolve();
|
|
34
|
-
* },
|
|
35
|
-
* );
|
|
36
|
-
* });
|
|
37
|
-
*
|
|
38
|
-
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
const fromArray = (values, startManually = false) => new FromArrayObservableClass(values, startManually);
|
|
42
|
-
class FromArrayObservableClass extends RootObservableClass {
|
|
43
|
-
#values;
|
|
44
|
-
constructor(values, startManually = false) {
|
|
45
|
-
super({ initialValue: Optional.none });
|
|
46
|
-
this.#values = values;
|
|
47
|
-
if (!startManually) {
|
|
48
|
-
setTimeout(() => {
|
|
49
|
-
this.emit();
|
|
50
|
-
}, 0);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
emit() {
|
|
54
|
-
if (this.isCompleted)
|
|
55
|
-
return this;
|
|
56
|
-
for (const v of this.#values) {
|
|
57
|
-
this.startUpdate(v);
|
|
58
|
-
}
|
|
59
|
-
this.complete();
|
|
60
|
-
return this;
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export { fromArray };
|
|
65
|
-
//# sourceMappingURL=from-array.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"from-array.mjs","sources":["../../../src/core/create/from-array.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;AACI,MAAM,SAAS,GAAG,CACvB,MAAoB,EACpB,aAAA,GAAyB,KAAK,KAE9B,IAAI,wBAAwB,CAAI,MAAM,EAAE,aAAa;AAEvD,MAAM,wBACJ,SAAQ,mBAAsB,CAAA;AAGrB,IAAA,OAAO;IAEhB,WAAA,CAAY,MAAoB,EAAE,aAAA,GAAyB,KAAK,EAAA;QAC9D,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QAErB,IAAI,CAAC,aAAa,EAAE;YAClB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,IAAI,EAAE;YACb,CAAC,EAAE,CAAC,CAAC;QACP;IACF;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAEjC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrB;QAEA,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,OAAO,IAAI;IACb;AACD;;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interval.d.mts","sourceRoot":"","sources":["../../../src/core/create/interval.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,QAAQ,GACnB,cAAc,MAAM,EACpB,gBAAgB,OAAO,KACtB,kBACuD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"interval.mjs","sources":["../../../src/core/create/interval.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;AACI,MAAM,QAAQ,GAAG,CACtB,YAAoB,EACpB,aAAuB,KAEvB,IAAI,uBAAuB,CAAC,YAAY,EAAE,aAAa;AAEzD,MAAM,uBACJ,SAAQ,mBAA6B,CAAA;AAG5B,IAAA,aAAa;AACtB,IAAA,YAAY;AACZ,IAAA,aAAa;AACb,IAAA,YAAY;AACZ,IAAA,cAAc;IAEd,WAAA,CAAY,YAAoB,EAAE,aAAuB,EAAA;QACvD,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;AAEjC,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC;AAEjC,QAAA,IAAI,CAAC,aAAa,GAAG,SAAS;AAE9B,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAE7B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;AAElC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,2CAA2C,CAAC;AAEzD,YAAA,OAAO,IAAI;QACb;;AAGA,QAAA,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;QACrC,CAAC,EAAE,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC,MAAK;AACnC,YAAA,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC;AAEtD,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC;AACrC,QAAA,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;AAEtB,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACvE,YAAA,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC;AAEjC,YAAA,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC;QAClC;IACF;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,WAAW,EAAE;QAElB,KAAK,CAAC,QAAQ,EAAE;IAClB;AACD;;;;"}
|