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
|
@@ -15,21 +15,51 @@ import { withInitialValue } from '../operators/with-initial-value.mjs';
|
|
|
15
15
|
*
|
|
16
16
|
* @example
|
|
17
17
|
* ```ts
|
|
18
|
+
* // Timeline:
|
|
19
|
+
* //
|
|
20
|
+
* // name$ "Alice" "Bob"
|
|
21
|
+
* // age$ 25 30
|
|
22
|
+
* // user$ ["Alice",25] ["Bob",25] ["Bob",30]
|
|
23
|
+
* //
|
|
24
|
+
* // Explanation:
|
|
25
|
+
* // - combine waits for all sources to emit at least once
|
|
26
|
+
* // - Then emits the latest value from all sources whenever any source emits
|
|
27
|
+
* // - Always emits an array with the latest values from each source
|
|
28
|
+
*
|
|
18
29
|
* const name$ = source<string>();
|
|
19
30
|
*
|
|
20
31
|
* const age$ = source<number>();
|
|
21
32
|
*
|
|
22
33
|
* const user$ = combine([name$, age$]);
|
|
23
34
|
*
|
|
35
|
+
* const mut_history: (readonly [string, number])[] = [];
|
|
36
|
+
*
|
|
24
37
|
* user$.subscribe(([name_, age]) => {
|
|
25
|
-
*
|
|
38
|
+
* mut_history.push([name_, age]);
|
|
26
39
|
* });
|
|
27
40
|
*
|
|
28
|
-
* name$.next('Alice');
|
|
41
|
+
* name$.next('Alice'); // nothing logged (age$ hasn't emitted yet)
|
|
42
|
+
*
|
|
43
|
+
* assert.deepStrictEqual(mut_history, []);
|
|
29
44
|
*
|
|
30
45
|
* age$.next(25); // logs: { name: 'Alice', age: 25 }
|
|
31
46
|
*
|
|
47
|
+
* assert.deepStrictEqual(mut_history, [['Alice', 25]]);
|
|
48
|
+
*
|
|
32
49
|
* name$.next('Bob'); // logs: { name: 'Bob', age: 25 }
|
|
50
|
+
*
|
|
51
|
+
* assert.deepStrictEqual(mut_history, [
|
|
52
|
+
* ['Alice', 25],
|
|
53
|
+
* ['Bob', 25],
|
|
54
|
+
* ]);
|
|
55
|
+
*
|
|
56
|
+
* age$.next(30); // logs: { name: 'Bob', age: 30 }
|
|
57
|
+
*
|
|
58
|
+
* assert.deepStrictEqual(mut_history, [
|
|
59
|
+
* ['Alice', 25],
|
|
60
|
+
* ['Bob', 25],
|
|
61
|
+
* ['Bob', 30],
|
|
62
|
+
* ]);
|
|
33
63
|
* ```
|
|
34
64
|
*/
|
|
35
65
|
const combine = (parents) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combine.mjs","sources":["../../../src/core/combine/combine.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAgBA
|
|
1
|
+
{"version":3,"file":"combine.mjs","sources":["../../../src/core/combine/combine.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDG;AACI,MAAM,OAAO,GAAG,CACrB,OAAW;AAEX;AACA,IAAI,sBAAsB,CACxB,OAAO;AAGX;;;AAGG;AACI,MAAM,aAAa,GAAG,QAAQ;AAErC,MAAM,sBACJ,SAAQ,wBAA8B,CAAA;AAGtC,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAEzD,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;kBAC7C,QAAQ,CAAC,IAAI;;AAEX,gBAAA,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;kBAE7C,QAAQ,CAAC,IAAI;AAClB,SAAA,CAAC;;AAGK,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC;AAAE,YAAA,OAAO;AAEzE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvC,YAAA,MAAM,SAAS;;AAEb,YAAA,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;AAE5C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAG3C;AAED;IACE;AACE,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;AAErC,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;QAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;IAO7B;AACE,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;QAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;IAO7B;AACE,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAE/D,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;;AAM7B,IAAA,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IAEf,OAAO,CAAC;AAClB,QAAA,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAA;AAQH;;;;"}
|
|
@@ -9,16 +9,42 @@ import { type MergeObservableRefined, type Observable } from '../types/index.mjs
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
*
|
|
12
|
+
* // Timeline:
|
|
13
|
+
* //
|
|
14
|
+
* // clicks$ c1 c2 c3
|
|
15
|
+
* // keys$ k1 k2 k3
|
|
16
|
+
* // events$ c1 k1 c2 k2 c3 k3
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - merge combines multiple observables into one
|
|
20
|
+
* // - Emits values from any source as they arrive
|
|
21
|
+
* // - Order is preserved based on emission time
|
|
13
22
|
*
|
|
14
|
-
* const
|
|
23
|
+
* const clicks$ = source<string>();
|
|
24
|
+
*
|
|
25
|
+
* const keys$ = source<string>();
|
|
15
26
|
*
|
|
16
27
|
* const events$ = merge([clicks$, keys$]);
|
|
17
28
|
*
|
|
29
|
+
* const mut_history: string[] = [];
|
|
30
|
+
*
|
|
18
31
|
* events$.subscribe((event_) => {
|
|
19
|
-
*
|
|
32
|
+
* mut_history.push(event_);
|
|
20
33
|
* });
|
|
21
|
-
*
|
|
34
|
+
*
|
|
35
|
+
* clicks$.next('c1');
|
|
36
|
+
*
|
|
37
|
+
* assert.deepStrictEqual(mut_history, ['c1']);
|
|
38
|
+
*
|
|
39
|
+
* keys$.next('k1');
|
|
40
|
+
*
|
|
41
|
+
* assert.deepStrictEqual(mut_history, ['c1', 'k1']);
|
|
42
|
+
*
|
|
43
|
+
* clicks$.next('c2');
|
|
44
|
+
*
|
|
45
|
+
* keys$.next('k2');
|
|
46
|
+
*
|
|
47
|
+
* assert.deepStrictEqual(mut_history, ['c1', 'k1', 'c2', 'k2']);
|
|
22
48
|
* ```
|
|
23
49
|
*
|
|
24
50
|
* @note To improve code readability, consider using `createState` instead of `merge`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.mts","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"merge.d.mts","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACvE,SAAS,EAAE,KACV,sBAAsB,CAAC,EAAE,CAEqC,CAAC"}
|
|
@@ -12,16 +12,42 @@ import '../utils/id-maker.mjs';
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
14
|
* ```ts
|
|
15
|
-
*
|
|
15
|
+
* // Timeline:
|
|
16
|
+
* //
|
|
17
|
+
* // clicks$ c1 c2 c3
|
|
18
|
+
* // keys$ k1 k2 k3
|
|
19
|
+
* // events$ c1 k1 c2 k2 c3 k3
|
|
20
|
+
* //
|
|
21
|
+
* // Explanation:
|
|
22
|
+
* // - merge combines multiple observables into one
|
|
23
|
+
* // - Emits values from any source as they arrive
|
|
24
|
+
* // - Order is preserved based on emission time
|
|
16
25
|
*
|
|
17
|
-
* const
|
|
26
|
+
* const clicks$ = source<string>();
|
|
27
|
+
*
|
|
28
|
+
* const keys$ = source<string>();
|
|
18
29
|
*
|
|
19
30
|
* const events$ = merge([clicks$, keys$]);
|
|
20
31
|
*
|
|
32
|
+
* const mut_history: string[] = [];
|
|
33
|
+
*
|
|
21
34
|
* events$.subscribe((event_) => {
|
|
22
|
-
*
|
|
35
|
+
* mut_history.push(event_);
|
|
23
36
|
* });
|
|
24
|
-
*
|
|
37
|
+
*
|
|
38
|
+
* clicks$.next('c1');
|
|
39
|
+
*
|
|
40
|
+
* assert.deepStrictEqual(mut_history, ['c1']);
|
|
41
|
+
*
|
|
42
|
+
* keys$.next('k1');
|
|
43
|
+
*
|
|
44
|
+
* assert.deepStrictEqual(mut_history, ['c1', 'k1']);
|
|
45
|
+
*
|
|
46
|
+
* clicks$.next('c2');
|
|
47
|
+
*
|
|
48
|
+
* keys$.next('k2');
|
|
49
|
+
*
|
|
50
|
+
* assert.deepStrictEqual(mut_history, ['c1', 'k1', 'c2', 'k2']);
|
|
25
51
|
* ```
|
|
26
52
|
*
|
|
27
53
|
* @note To improve code readability, consider using `createState` instead of `merge`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.mjs","sources":["../../../src/core/combine/merge.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAaA
|
|
1
|
+
{"version":3,"file":"merge.mjs","sources":["../../../src/core/combine/merge.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDG;AACI,MAAM,KAAK,GAAG,CACnB,OAAW;AAEX;AACA,IAAI,oBAAoB,CAAC,OAAO;AAElC,MAAM,oBACJ,SAAQ,wBAA4C,CAAA;AAGpD,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;;AAGK,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,CAAC,KACA,CAAC,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACxE;QAED,IAAI,WAAW,KAAK,SAAS;YAAE;AAE/B,QAAA,MAAM,SAAS;;QAEb,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAoB;AAE/D,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;AAEzC;;;;"}
|
|
@@ -10,16 +10,41 @@ import { type Observable, type ZipObservableRefined } from '../types/index.mjs';
|
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```ts
|
|
13
|
+
* // Timeline:
|
|
14
|
+
* //
|
|
15
|
+
* // letters$ 'a' 'b' 'c'
|
|
16
|
+
* // numbers$ 1 2 3
|
|
17
|
+
* // zipped$ ['a',1] ['b',2] ['c',3]
|
|
18
|
+
* //
|
|
19
|
+
* // Explanation:
|
|
20
|
+
* // - zip pairs values by their index from multiple sources
|
|
21
|
+
* // - Waits for all sources to emit at the same index
|
|
22
|
+
* // - Completes when any source completes
|
|
23
|
+
*
|
|
13
24
|
* const letters$ = fromArray(['a', 'b', 'c']);
|
|
14
25
|
*
|
|
15
26
|
* const numbers$ = fromArray([1, 2, 3]);
|
|
16
27
|
*
|
|
17
28
|
* const zipped$ = zip([letters$, numbers$]);
|
|
18
29
|
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
30
|
+
* const mut_history: (readonly [string, number])[] = [];
|
|
31
|
+
*
|
|
32
|
+
* await new Promise<void>((resolve) => {
|
|
33
|
+
* zipped$.subscribe(
|
|
34
|
+
* ([letter, num]) => {
|
|
35
|
+
* mut_history.push([letter, num]);
|
|
36
|
+
* },
|
|
37
|
+
* () => {
|
|
38
|
+
* resolve();
|
|
39
|
+
* },
|
|
40
|
+
* );
|
|
21
41
|
* });
|
|
22
|
-
*
|
|
42
|
+
*
|
|
43
|
+
* assert.deepStrictEqual(mut_history, [
|
|
44
|
+
* ['a', 1],
|
|
45
|
+
* ['b', 2],
|
|
46
|
+
* ['c', 3],
|
|
47
|
+
* ]);
|
|
23
48
|
* ```
|
|
24
49
|
*/
|
|
25
50
|
export declare const zip: <const OS extends NonEmptyArray<Observable<unknown>>>(parents: OS) => ZipObservableRefined<OS>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.d.mts","sourceRoot":"","sources":["../../../src/core/combine/zip.mts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,UAAU,EAMf,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B
|
|
1
|
+
{"version":3,"file":"zip.d.mts","sourceRoot":"","sources":["../../../src/core/combine/zip.mts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,UAAU,EAMf,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACrE,SAAS,EAAE,KACV,oBAAoB,CAAC,EAAE,CAE8C,CAAC"}
|
|
@@ -13,16 +13,41 @@ import '../utils/id-maker.mjs';
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
|
+
* // Timeline:
|
|
17
|
+
* //
|
|
18
|
+
* // letters$ 'a' 'b' 'c'
|
|
19
|
+
* // numbers$ 1 2 3
|
|
20
|
+
* // zipped$ ['a',1] ['b',2] ['c',3]
|
|
21
|
+
* //
|
|
22
|
+
* // Explanation:
|
|
23
|
+
* // - zip pairs values by their index from multiple sources
|
|
24
|
+
* // - Waits for all sources to emit at the same index
|
|
25
|
+
* // - Completes when any source completes
|
|
26
|
+
*
|
|
16
27
|
* const letters$ = fromArray(['a', 'b', 'c']);
|
|
17
28
|
*
|
|
18
29
|
* const numbers$ = fromArray([1, 2, 3]);
|
|
19
30
|
*
|
|
20
31
|
* const zipped$ = zip([letters$, numbers$]);
|
|
21
32
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
33
|
+
* const mut_history: (readonly [string, number])[] = [];
|
|
34
|
+
*
|
|
35
|
+
* await new Promise<void>((resolve) => {
|
|
36
|
+
* zipped$.subscribe(
|
|
37
|
+
* ([letter, num]) => {
|
|
38
|
+
* mut_history.push([letter, num]);
|
|
39
|
+
* },
|
|
40
|
+
* () => {
|
|
41
|
+
* resolve();
|
|
42
|
+
* },
|
|
43
|
+
* );
|
|
24
44
|
* });
|
|
25
|
-
*
|
|
45
|
+
*
|
|
46
|
+
* assert.deepStrictEqual(mut_history, [
|
|
47
|
+
* ['a', 1],
|
|
48
|
+
* ['b', 2],
|
|
49
|
+
* ['c', 3],
|
|
50
|
+
* ]);
|
|
26
51
|
* ```
|
|
27
52
|
*/
|
|
28
53
|
const zip = (parents) =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"zip.mjs","sources":["../../../src/core/combine/zip.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAiBA
|
|
1
|
+
{"version":3,"file":"zip.mjs","sources":["../../../src/core/combine/zip.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;AACI,MAAM,GAAG,GAAG,CACjB,OAAW;AAEX;AACA,IAAI,kBAAkB,CAAC,OAAO;AAEhC,MAAM,kBACJ,SAAQ,wBAA8B,CAAA;AAG7B,IAAA,OAAO;AAEhB,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAEzD,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;kBAC7C,QAAQ,CAAC,IAAI;;AAEX,gBAAA,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;kBAE7C,QAAQ,CAAC,IAAI;AAClB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAC9B,WAAW,EAAE,CACiB;;AAGzB,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAE3B,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,YAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC9D,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;;;AAIpC,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,MAAM,SAAS;;YAEb,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAM;AAE3D,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAG3C;;;;"}
|
|
@@ -9,12 +9,30 @@ import { type FromArrayObservable } from '../types/index.mjs';
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
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
|
+
*
|
|
12
20
|
* const nums$ = fromArray([1, 2, 3]);
|
|
13
21
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
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
|
+
* );
|
|
16
33
|
* });
|
|
17
|
-
*
|
|
34
|
+
*
|
|
35
|
+
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
18
36
|
* ```
|
|
19
37
|
*/
|
|
20
38
|
export declare const fromArray: <A>(values: readonly A[], startManually?: boolean) => FromArrayObservable<A>;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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"}
|
|
@@ -12,12 +12,30 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
|
|
|
12
12
|
*
|
|
13
13
|
* @example
|
|
14
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
|
+
*
|
|
15
23
|
* const nums$ = fromArray([1, 2, 3]);
|
|
16
24
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
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
|
+
* );
|
|
19
36
|
* });
|
|
20
|
-
*
|
|
37
|
+
*
|
|
38
|
+
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
21
39
|
* ```
|
|
22
40
|
*/
|
|
23
41
|
const fromArray = (values, startManually = false) => new FromArrayObservableClass(values, startManually);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-array.mjs","sources":["../../../src/core/create/from-array.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA
|
|
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;;;;"}
|
|
@@ -10,15 +10,37 @@ import { type FromPromiseObservable } from '../types/index.mjs';
|
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```ts
|
|
13
|
-
*
|
|
13
|
+
* // Timeline:
|
|
14
|
+
* //
|
|
15
|
+
* // promise [pending...] -> resolved/rejected
|
|
16
|
+
* // data$ Ok(value) or Err(error)
|
|
17
|
+
* //
|
|
18
|
+
* // Explanation:
|
|
19
|
+
* // - fromPromise converts a Promise into an observable
|
|
20
|
+
* // - Emits a Result type: Ok(value) on success, Err(error) on failure
|
|
21
|
+
* // - Completes after emitting the result
|
|
22
|
+
* // - Useful for integrating async operations into reactive flows
|
|
14
23
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
24
|
+
* const fetchData = async (): Promise<{ value: number }> => ({ value: 42 });
|
|
25
|
+
*
|
|
26
|
+
* const data$ = fromPromise(fetchData());
|
|
27
|
+
*
|
|
28
|
+
* const mut_history: { value: number }[] = [];
|
|
29
|
+
*
|
|
30
|
+
* await new Promise<void>((resolve) => {
|
|
31
|
+
* data$.subscribe(
|
|
32
|
+
* (result) => {
|
|
33
|
+
* if (Result.isOk(result)) {
|
|
34
|
+
* mut_history.push(result.value);
|
|
35
|
+
* }
|
|
36
|
+
* },
|
|
37
|
+
* () => {
|
|
38
|
+
* resolve();
|
|
39
|
+
* },
|
|
40
|
+
* );
|
|
21
41
|
* });
|
|
42
|
+
*
|
|
43
|
+
* assert.deepStrictEqual(mut_history, [{ value: 42 }]);
|
|
22
44
|
* ```
|
|
23
45
|
*/
|
|
24
46
|
export declare const fromPromise: <A, E = unknown>(promise: Readonly<Promise<A>>) => FromPromiseObservable<A, E>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-promise.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-promise.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"from-promise.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-promise.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EACxC,SAAS,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAC5B,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAA4C,CAAC"}
|
|
@@ -13,15 +13,37 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
|
|
|
13
13
|
*
|
|
14
14
|
* @example
|
|
15
15
|
* ```ts
|
|
16
|
-
*
|
|
16
|
+
* // Timeline:
|
|
17
|
+
* //
|
|
18
|
+
* // promise [pending...] -> resolved/rejected
|
|
19
|
+
* // data$ Ok(value) or Err(error)
|
|
20
|
+
* //
|
|
21
|
+
* // Explanation:
|
|
22
|
+
* // - fromPromise converts a Promise into an observable
|
|
23
|
+
* // - Emits a Result type: Ok(value) on success, Err(error) on failure
|
|
24
|
+
* // - Completes after emitting the result
|
|
25
|
+
* // - Useful for integrating async operations into reactive flows
|
|
17
26
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
27
|
+
* const fetchData = async (): Promise<{ value: number }> => ({ value: 42 });
|
|
28
|
+
*
|
|
29
|
+
* const data$ = fromPromise(fetchData());
|
|
30
|
+
*
|
|
31
|
+
* const mut_history: { value: number }[] = [];
|
|
32
|
+
*
|
|
33
|
+
* await new Promise<void>((resolve) => {
|
|
34
|
+
* data$.subscribe(
|
|
35
|
+
* (result) => {
|
|
36
|
+
* if (Result.isOk(result)) {
|
|
37
|
+
* mut_history.push(result.value);
|
|
38
|
+
* }
|
|
39
|
+
* },
|
|
40
|
+
* () => {
|
|
41
|
+
* resolve();
|
|
42
|
+
* },
|
|
43
|
+
* );
|
|
24
44
|
* });
|
|
45
|
+
*
|
|
46
|
+
* assert.deepStrictEqual(mut_history, [{ value: 42 }]);
|
|
25
47
|
* ```
|
|
26
48
|
*/
|
|
27
49
|
const fromPromise = (promise) => new FromPromiseObservableClass(promise);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA
|
|
1
|
+
{"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;AACI,MAAM,WAAW,GAAG,CACzB,OAA6B,KACG,IAAI,0BAA0B,CAAC,OAAO;AAExE,MAAM,0BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,OAA6B,EAAA;QACvC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC;AACG,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;YACd,IAAI,IAAI,CAAC,WAAW;gBAAE;YAEtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAc,KAAI;YACxB,IAAI,IAAI,CAAC,WAAW;gBAAE;AAEtB,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,GAAG;;YAER,KAAU,CACX,CACF;AACH,QAAA,CAAC;aACA,OAAO,CAAC,MAAK;YACZ,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;AACD;;;;"}
|
|
@@ -1,3 +1,61 @@
|
|
|
1
1
|
import { type FromSubscribableObservable, type Subscribable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Converts any subscribable object into a SynState Observable.
|
|
4
|
+
* Works with objects that have a subscribe(onNext, onError, onComplete) method.
|
|
5
|
+
*
|
|
6
|
+
* @template A - The type of values from the subscribable
|
|
7
|
+
* @template E - The type of errors from the subscribable
|
|
8
|
+
* @param subscribable - An object with a subscribe method
|
|
9
|
+
* @returns An observable that wraps values in Result type
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* // Explanation:
|
|
14
|
+
* // - fromSubscribable converts any subscribable object into a SynState Observable
|
|
15
|
+
* // - Works with objects that have a subscribe(onNext, onError, onComplete) method
|
|
16
|
+
* // - Wraps values in Result type for error handling
|
|
17
|
+
* // - Useful for integrating with other reactive libraries or custom subscribables
|
|
18
|
+
*
|
|
19
|
+
* // Example: Converting a custom subscribable
|
|
20
|
+
* const customSubscribable = {
|
|
21
|
+
* subscribe: (
|
|
22
|
+
* onNext: (value: number) => void,
|
|
23
|
+
* _onError?: (error: unknown) => void,
|
|
24
|
+
* onComplete?: () => void,
|
|
25
|
+
* ) => {
|
|
26
|
+
* setTimeout(() => {
|
|
27
|
+
* onNext(1);
|
|
28
|
+
*
|
|
29
|
+
* onNext(2);
|
|
30
|
+
*
|
|
31
|
+
* onNext(3);
|
|
32
|
+
*
|
|
33
|
+
* onComplete?.();
|
|
34
|
+
* }, 0);
|
|
35
|
+
*
|
|
36
|
+
* return { unsubscribe: () => {} };
|
|
37
|
+
* },
|
|
38
|
+
* };
|
|
39
|
+
*
|
|
40
|
+
* const observable$ = fromSubscribable<number>(customSubscribable);
|
|
41
|
+
*
|
|
42
|
+
* const mut_history: number[] = [];
|
|
43
|
+
*
|
|
44
|
+
* await new Promise<void>((resolve) => {
|
|
45
|
+
* observable$.subscribe(
|
|
46
|
+
* (result) => {
|
|
47
|
+
* if (Result.isOk(result)) {
|
|
48
|
+
* mut_history.push(result.value);
|
|
49
|
+
* }
|
|
50
|
+
* },
|
|
51
|
+
* () => {
|
|
52
|
+
* resolve();
|
|
53
|
+
* },
|
|
54
|
+
* );
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
2
60
|
export declare const fromSubscribable: <A, E = unknown>(subscribable: Subscribable<A>) => FromSubscribableObservable<A, E>;
|
|
3
61
|
//# sourceMappingURL=from-subscribable.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-subscribable.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-subscribable.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAC7C,cAAc,YAAY,CAAC,CAAC,CAAC,KAC5B,0BAA0B,CAAC,CAAC,EAAE,CAAC,CACiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"from-subscribable.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-subscribable.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAC7C,cAAc,YAAY,CAAC,CAAC,CAAC,KAC5B,0BAA0B,CAAC,CAAC,EAAE,CAAC,CACiB,CAAC"}
|
|
@@ -2,6 +2,64 @@ import { Optional, Result } from 'ts-data-forge';
|
|
|
2
2
|
import '../utils/id-maker.mjs';
|
|
3
3
|
import { RootObservableClass } from '../class/root-observable-class.mjs';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Converts any subscribable object into a SynState Observable.
|
|
7
|
+
* Works with objects that have a subscribe(onNext, onError, onComplete) method.
|
|
8
|
+
*
|
|
9
|
+
* @template A - The type of values from the subscribable
|
|
10
|
+
* @template E - The type of errors from the subscribable
|
|
11
|
+
* @param subscribable - An object with a subscribe method
|
|
12
|
+
* @returns An observable that wraps values in Result type
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* // Explanation:
|
|
17
|
+
* // - fromSubscribable converts any subscribable object into a SynState Observable
|
|
18
|
+
* // - Works with objects that have a subscribe(onNext, onError, onComplete) method
|
|
19
|
+
* // - Wraps values in Result type for error handling
|
|
20
|
+
* // - Useful for integrating with other reactive libraries or custom subscribables
|
|
21
|
+
*
|
|
22
|
+
* // Example: Converting a custom subscribable
|
|
23
|
+
* const customSubscribable = {
|
|
24
|
+
* subscribe: (
|
|
25
|
+
* onNext: (value: number) => void,
|
|
26
|
+
* _onError?: (error: unknown) => void,
|
|
27
|
+
* onComplete?: () => void,
|
|
28
|
+
* ) => {
|
|
29
|
+
* setTimeout(() => {
|
|
30
|
+
* onNext(1);
|
|
31
|
+
*
|
|
32
|
+
* onNext(2);
|
|
33
|
+
*
|
|
34
|
+
* onNext(3);
|
|
35
|
+
*
|
|
36
|
+
* onComplete?.();
|
|
37
|
+
* }, 0);
|
|
38
|
+
*
|
|
39
|
+
* return { unsubscribe: () => {} };
|
|
40
|
+
* },
|
|
41
|
+
* };
|
|
42
|
+
*
|
|
43
|
+
* const observable$ = fromSubscribable<number>(customSubscribable);
|
|
44
|
+
*
|
|
45
|
+
* const mut_history: number[] = [];
|
|
46
|
+
*
|
|
47
|
+
* await new Promise<void>((resolve) => {
|
|
48
|
+
* observable$.subscribe(
|
|
49
|
+
* (result) => {
|
|
50
|
+
* if (Result.isOk(result)) {
|
|
51
|
+
* mut_history.push(result.value);
|
|
52
|
+
* }
|
|
53
|
+
* },
|
|
54
|
+
* () => {
|
|
55
|
+
* resolve();
|
|
56
|
+
* },
|
|
57
|
+
* );
|
|
58
|
+
* });
|
|
59
|
+
*
|
|
60
|
+
* assert.deepStrictEqual(mut_history, [1, 2, 3]);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
5
63
|
const fromSubscribable = (subscribable) => new FromSubscribableObservableClass(subscribable);
|
|
6
64
|
class FromSubscribableObservableClass extends RootObservableClass {
|
|
7
65
|
constructor(subscribable) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDG;AACI,MAAM,gBAAgB,GAAG,CAC9B,YAA6B,KAE7B,IAAI,+BAA+B,CAAC,YAAY;AAElD,MAAM,+BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,YAA6B,EAAA;QACvC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,YAAY,CAAC,SAAS,CACpB,CAAC,SAAS,KAAI;YACZ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACxC,QAAA,CAAC,EACD,CAAC,KAAe,KAAI;AAClB,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,GAAG;;YAER,KAAU,CACX,CACF;QACH,CAAC,EACD,MAAK;YACH,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CACF;IACH;AACD;;;;"}
|
|
@@ -9,12 +9,37 @@ import { type IntervalObservable } from '../types/index.mjs';
|
|
|
9
9
|
*
|
|
10
10
|
* @example
|
|
11
11
|
* ```ts
|
|
12
|
-
*
|
|
12
|
+
* // Timeline:
|
|
13
|
+
* //
|
|
14
|
+
* // Time(s) 0 1 2 3 4 5
|
|
15
|
+
* // tick$ 0 1 2 3 4 5 ...
|
|
16
|
+
* //
|
|
17
|
+
* // Explanation:
|
|
18
|
+
* // - interval emits incrementing numbers at specified intervals
|
|
19
|
+
* // - Starts at 0 and continues indefinitely
|
|
20
|
+
* // - Useful for periodic tasks or animations
|
|
13
21
|
*
|
|
14
|
-
* tick
|
|
15
|
-
*
|
|
22
|
+
* const tick$ = interval(100);
|
|
23
|
+
*
|
|
24
|
+
* const mut_history: number[] = [];
|
|
25
|
+
*
|
|
26
|
+
* const subscription = tick$.subscribe((count) => {
|
|
27
|
+
* mut_history.push(count);
|
|
16
28
|
* });
|
|
17
|
-
*
|
|
29
|
+
*
|
|
30
|
+
* await new Promise((resolve) => {
|
|
31
|
+
* setTimeout(resolve, 350);
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* subscription.unsubscribe();
|
|
35
|
+
*
|
|
36
|
+
* assert.isTrue(Arr.isArrayAtLeastLength(mut_history, 3));
|
|
37
|
+
*
|
|
38
|
+
* assert.deepStrictEqual(mut_history[0], 0);
|
|
39
|
+
*
|
|
40
|
+
* assert.deepStrictEqual(mut_history[1], 1);
|
|
41
|
+
*
|
|
42
|
+
* assert.deepStrictEqual(mut_history[2], 2);
|
|
18
43
|
* ```
|
|
19
44
|
*/
|
|
20
45
|
export declare const interval: (milliSeconds: number, startManually?: boolean) => IntervalObservable;
|
|
@@ -1 +1 @@
|
|
|
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
|
|
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"}
|