synstate 0.1.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 +878 -0
- package/dist/core/class/child-observable-class.d.mts +37 -0
- package/dist/core/class/child-observable-class.d.mts.map +1 -0
- package/dist/core/class/child-observable-class.mjs +134 -0
- package/dist/core/class/child-observable-class.mjs.map +1 -0
- package/dist/core/class/index.d.mts +4 -0
- package/dist/core/class/index.d.mts.map +1 -0
- package/dist/core/class/index.mjs +4 -0
- package/dist/core/class/index.mjs.map +1 -0
- package/dist/core/class/observable-base-class.d.mts +28 -0
- package/dist/core/class/observable-base-class.d.mts.map +1 -0
- package/dist/core/class/observable-base-class.mjs +116 -0
- package/dist/core/class/observable-base-class.mjs.map +1 -0
- package/dist/core/class/root-observable-class.d.mts +12 -0
- package/dist/core/class/root-observable-class.d.mts.map +1 -0
- package/dist/core/class/root-observable-class.mjs +35 -0
- package/dist/core/class/root-observable-class.mjs.map +1 -0
- package/dist/core/combine/combine.d.mts +35 -0
- package/dist/core/combine/combine.d.mts.map +1 -0
- package/dist/core/combine/combine.mjs +94 -0
- package/dist/core/combine/combine.mjs.map +1 -0
- package/dist/core/combine/index.d.mts +4 -0
- package/dist/core/combine/index.d.mts.map +1 -0
- package/dist/core/combine/index.mjs +4 -0
- package/dist/core/combine/index.mjs.map +1 -0
- package/dist/core/combine/merge.d.mts +28 -0
- package/dist/core/combine/merge.d.mts.map +1 -0
- package/dist/core/combine/merge.mjs +52 -0
- package/dist/core/combine/merge.mjs.map +1 -0
- package/dist/core/combine/zip.d.mts +26 -0
- package/dist/core/combine/zip.d.mts.map +1 -0
- package/dist/core/combine/zip.mjs +63 -0
- package/dist/core/combine/zip.mjs.map +1 -0
- package/dist/core/create/from-array.d.mts +21 -0
- package/dist/core/create/from-array.d.mts.map +1 -0
- package/dist/core/create/from-array.mjs +47 -0
- package/dist/core/create/from-array.mjs.map +1 -0
- package/dist/core/create/from-promise.d.mts +25 -0
- package/dist/core/create/from-promise.d.mts.map +1 -0
- package/dist/core/create/from-promise.mjs +51 -0
- package/dist/core/create/from-promise.mjs.map +1 -0
- package/dist/core/create/from-subscribable.d.mts +3 -0
- package/dist/core/create/from-subscribable.d.mts.map +1 -0
- package/dist/core/create/from-subscribable.mjs +22 -0
- package/dist/core/create/from-subscribable.mjs.map +1 -0
- package/dist/core/create/index.d.mts +8 -0
- package/dist/core/create/index.d.mts.map +1 -0
- package/dist/core/create/index.mjs +8 -0
- package/dist/core/create/index.mjs.map +1 -0
- package/dist/core/create/interval.d.mts +21 -0
- package/dist/core/create/interval.d.mts.map +1 -0
- package/dist/core/create/interval.mjs +74 -0
- package/dist/core/create/interval.mjs.map +1 -0
- package/dist/core/create/of.d.mts +20 -0
- package/dist/core/create/of.d.mts.map +1 -0
- package/dist/core/create/of.mjs +44 -0
- package/dist/core/create/of.mjs.map +1 -0
- package/dist/core/create/source.d.mts +29 -0
- package/dist/core/create/source.d.mts.map +1 -0
- package/dist/core/create/source.mjs +29 -0
- package/dist/core/create/source.mjs.map +1 -0
- package/dist/core/create/timer.d.mts +20 -0
- package/dist/core/create/timer.d.mts.map +1 -0
- package/dist/core/create/timer.mjs +64 -0
- package/dist/core/create/timer.mjs.map +1 -0
- package/dist/core/index.d.mts +7 -0
- package/dist/core/index.d.mts.map +1 -0
- package/dist/core/index.mjs +37 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/core/operators/audit-time.d.mts +3 -0
- package/dist/core/operators/audit-time.d.mts.map +1 -0
- package/dist/core/operators/audit-time.mjs +50 -0
- package/dist/core/operators/audit-time.mjs.map +1 -0
- package/dist/core/operators/debounce-time.d.mts +31 -0
- package/dist/core/operators/debounce-time.d.mts.map +1 -0
- package/dist/core/operators/debounce-time.mjs +73 -0
- package/dist/core/operators/debounce-time.mjs.map +1 -0
- package/dist/core/operators/filter.d.mts +28 -0
- package/dist/core/operators/filter.d.mts.map +1 -0
- package/dist/core/operators/filter.mjs +38 -0
- package/dist/core/operators/filter.mjs.map +1 -0
- package/dist/core/operators/index.d.mts +18 -0
- package/dist/core/operators/index.d.mts.map +1 -0
- package/dist/core/operators/index.mjs +18 -0
- package/dist/core/operators/index.mjs.map +1 -0
- package/dist/core/operators/map-with-index.d.mts +39 -0
- package/dist/core/operators/map-with-index.d.mts.map +1 -0
- package/dist/core/operators/map-with-index.mjs +73 -0
- package/dist/core/operators/map-with-index.mjs.map +1 -0
- package/dist/core/operators/merge-map.d.mts +34 -0
- package/dist/core/operators/merge-map.d.mts.map +1 -0
- package/dist/core/operators/merge-map.mjs +75 -0
- package/dist/core/operators/merge-map.mjs.map +1 -0
- package/dist/core/operators/pairwise.d.mts +27 -0
- package/dist/core/operators/pairwise.d.mts.map +1 -0
- package/dist/core/operators/pairwise.mjs +59 -0
- package/dist/core/operators/pairwise.mjs.map +1 -0
- package/dist/core/operators/scan.d.mts +30 -0
- package/dist/core/operators/scan.d.mts.map +1 -0
- package/dist/core/operators/scan.mjs +56 -0
- package/dist/core/operators/scan.mjs.map +1 -0
- package/dist/core/operators/skip-if-no-change.d.mts +33 -0
- package/dist/core/operators/skip-if-no-change.d.mts.map +1 -0
- package/dist/core/operators/skip-if-no-change.mjs +68 -0
- package/dist/core/operators/skip-if-no-change.mjs.map +1 -0
- package/dist/core/operators/skip-until.d.mts +3 -0
- package/dist/core/operators/skip-until.d.mts.map +1 -0
- package/dist/core/operators/skip-until.mjs +33 -0
- package/dist/core/operators/skip-until.mjs.map +1 -0
- package/dist/core/operators/skip-while.d.mts +4 -0
- package/dist/core/operators/skip-while.d.mts.map +1 -0
- package/dist/core/operators/skip-while.mjs +40 -0
- package/dist/core/operators/skip-while.mjs.map +1 -0
- package/dist/core/operators/switch-map.d.mts +31 -0
- package/dist/core/operators/switch-map.d.mts.map +1 -0
- package/dist/core/operators/switch-map.mjs +70 -0
- package/dist/core/operators/switch-map.mjs.map +1 -0
- package/dist/core/operators/take-until.d.mts +32 -0
- package/dist/core/operators/take-until.d.mts.map +1 -0
- package/dist/core/operators/take-until.mjs +60 -0
- package/dist/core/operators/take-until.mjs.map +1 -0
- package/dist/core/operators/take-while.d.mts +4 -0
- package/dist/core/operators/take-while.d.mts.map +1 -0
- package/dist/core/operators/take-while.mjs +42 -0
- package/dist/core/operators/take-while.mjs.map +1 -0
- package/dist/core/operators/throttle-time.d.mts +23 -0
- package/dist/core/operators/throttle-time.d.mts.map +1 -0
- package/dist/core/operators/throttle-time.mjs +68 -0
- package/dist/core/operators/throttle-time.mjs.map +1 -0
- package/dist/core/operators/with-buffered-from.d.mts +4 -0
- package/dist/core/operators/with-buffered-from.d.mts.map +1 -0
- package/dist/core/operators/with-buffered-from.mjs +45 -0
- package/dist/core/operators/with-buffered-from.mjs.map +1 -0
- package/dist/core/operators/with-current-value-from.d.mts +4 -0
- package/dist/core/operators/with-current-value-from.d.mts.map +1 -0
- package/dist/core/operators/with-current-value-from.mjs +37 -0
- package/dist/core/operators/with-current-value-from.mjs.map +1 -0
- package/dist/core/operators/with-initial-value.d.mts +26 -0
- package/dist/core/operators/with-initial-value.d.mts.map +1 -0
- package/dist/core/operators/with-initial-value.mjs +47 -0
- package/dist/core/operators/with-initial-value.mjs.map +1 -0
- package/dist/core/types/id.d.mts +4 -0
- package/dist/core/types/id.d.mts.map +1 -0
- package/dist/core/types/id.mjs +2 -0
- package/dist/core/types/id.mjs.map +1 -0
- package/dist/core/types/index.d.mts +6 -0
- package/dist/core/types/index.d.mts.map +1 -0
- package/dist/core/types/index.mjs +3 -0
- package/dist/core/types/index.mjs.map +1 -0
- package/dist/core/types/observable-family.d.mts +68 -0
- package/dist/core/types/observable-family.d.mts.map +1 -0
- package/dist/core/types/observable-family.mjs +2 -0
- package/dist/core/types/observable-family.mjs.map +1 -0
- package/dist/core/types/observable-kind.d.mts +4 -0
- package/dist/core/types/observable-kind.d.mts.map +1 -0
- package/dist/core/types/observable-kind.mjs +2 -0
- package/dist/core/types/observable-kind.mjs.map +1 -0
- package/dist/core/types/observable.d.mts +83 -0
- package/dist/core/types/observable.d.mts.map +1 -0
- package/dist/core/types/observable.mjs +10 -0
- package/dist/core/types/observable.mjs.map +1 -0
- package/dist/core/types/types.d.mts +16 -0
- package/dist/core/types/types.d.mts.map +1 -0
- package/dist/core/types/types.mjs +2 -0
- package/dist/core/types/types.mjs.map +1 -0
- package/dist/core/utils/id-maker.d.mts +5 -0
- package/dist/core/utils/id-maker.d.mts.map +1 -0
- package/dist/core/utils/id-maker.mjs +17 -0
- package/dist/core/utils/id-maker.mjs.map +1 -0
- package/dist/core/utils/index.d.mts +5 -0
- package/dist/core/utils/index.d.mts.map +1 -0
- package/dist/core/utils/index.mjs +5 -0
- package/dist/core/utils/index.mjs.map +1 -0
- package/dist/core/utils/max-depth.d.mts +3 -0
- package/dist/core/utils/max-depth.d.mts.map +1 -0
- package/dist/core/utils/max-depth.mjs +8 -0
- package/dist/core/utils/max-depth.mjs.map +1 -0
- package/dist/core/utils/observable-utils.d.mts +3 -0
- package/dist/core/utils/observable-utils.d.mts.map +1 -0
- package/dist/core/utils/observable-utils.mjs +7 -0
- package/dist/core/utils/observable-utils.mjs.map +1 -0
- package/dist/core/utils/utils.d.mts +4 -0
- package/dist/core/utils/utils.d.mts.map +1 -0
- package/dist/core/utils/utils.mjs +38 -0
- package/dist/core/utils/utils.mjs.map +1 -0
- package/dist/entry-point.d.mts +2 -0
- package/dist/entry-point.d.mts.map +1 -0
- package/dist/entry-point.mjs +40 -0
- package/dist/entry-point.mjs.map +1 -0
- package/dist/globals.d.mts +4 -0
- package/dist/index.d.mts +3 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +40 -0
- package/dist/index.mjs.map +1 -0
- package/dist/tsconfig.json +1 -0
- package/dist/types.d.mts +2 -0
- package/dist/utils/create-event-emitter.d.mts +39 -0
- package/dist/utils/create-event-emitter.d.mts.map +1 -0
- package/dist/utils/create-event-emitter.mjs +57 -0
- package/dist/utils/create-event-emitter.mjs.map +1 -0
- package/dist/utils/create-reducer.d.mts +34 -0
- package/dist/utils/create-reducer.d.mts.map +1 -0
- package/dist/utils/create-reducer.mjs +49 -0
- package/dist/utils/create-reducer.mjs.map +1 -0
- package/dist/utils/create-state.d.mts +61 -0
- package/dist/utils/create-state.d.mts.map +1 -0
- package/dist/utils/create-state.mjs +92 -0
- package/dist/utils/create-state.mjs.map +1 -0
- package/dist/utils/index.d.mts +4 -0
- package/dist/utils/index.d.mts.map +1 -0
- package/dist/utils/index.mjs +4 -0
- package/dist/utils/index.mjs.map +1 -0
- package/package.json +71 -0
- package/src/core/class/child-observable-class.mts +232 -0
- package/src/core/class/index.mts +3 -0
- package/src/core/class/observable-base-class.mts +186 -0
- package/src/core/class/observable.class.test.mts +89 -0
- package/src/core/class/root-observable-class.mts +68 -0
- package/src/core/combine/combine.mts +144 -0
- package/src/core/combine/index.mts +3 -0
- package/src/core/combine/merge.mts +84 -0
- package/src/core/combine/zip.mts +149 -0
- package/src/core/create/from-array.mts +58 -0
- package/src/core/create/from-promise.mts +58 -0
- package/src/core/create/from-subscribable.mts +37 -0
- package/src/core/create/index.mts +7 -0
- package/src/core/create/interval.mts +99 -0
- package/src/core/create/of.mts +54 -0
- package/src/core/create/source.mts +59 -0
- package/src/core/create/timer.mts +84 -0
- package/src/core/index.mts +6 -0
- package/src/core/operators/audit-time.mts +77 -0
- package/src/core/operators/debounce-time.mts +96 -0
- package/src/core/operators/filter.mts +125 -0
- package/src/core/operators/index.mts +17 -0
- package/src/core/operators/map-with-index.mts +168 -0
- package/src/core/operators/merge-map.mts +108 -0
- package/src/core/operators/pairwise.mts +77 -0
- package/src/core/operators/scan.mts +81 -0
- package/src/core/operators/skip-if-no-change.mts +91 -0
- package/src/core/operators/skip-until.mts +54 -0
- package/src/core/operators/skip-while.mts +77 -0
- package/src/core/operators/switch-map.mts +101 -0
- package/src/core/operators/take-until.mts +80 -0
- package/src/core/operators/take-while.mts +103 -0
- package/src/core/operators/throttle-time.mts +95 -0
- package/src/core/operators/with-buffered-from.mts +68 -0
- package/src/core/operators/with-current-value-from.mts +58 -0
- package/src/core/operators/with-initial-value.mts +76 -0
- package/src/core/types/id.mts +5 -0
- package/src/core/types/index.mts +5 -0
- package/src/core/types/observable-family.mts +259 -0
- package/src/core/types/observable-kind.mts +5 -0
- package/src/core/types/observable.mts +218 -0
- package/src/core/types/types.mts +40 -0
- package/src/core/utils/id-maker.mts +31 -0
- package/src/core/utils/index.mts +4 -0
- package/src/core/utils/max-depth.mts +7 -0
- package/src/core/utils/observable-utils.mts +10 -0
- package/src/core/utils/utils.mts +51 -0
- package/src/core/utils/utils.test.mts +88 -0
- package/src/entry-point.mts +1 -0
- package/src/globals.d.mts +4 -0
- package/src/index.mts +2 -0
- package/src/utils/create-event-emitter.mts +62 -0
- package/src/utils/create-reducer.mts +55 -0
- package/src/utils/create-state.mts +138 -0
- package/src/utils/index.mts +3 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Optional } from 'ts-data-forge';
|
|
2
|
+
import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
|
|
3
|
+
import '../utils/id-maker.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Merges multiple observables into a single observable that emits all values from all sources.
|
|
7
|
+
* Emits whenever any source observable emits a value.
|
|
8
|
+
*
|
|
9
|
+
* @template OS - Tuple type of source observables
|
|
10
|
+
* @param parents - Array of observables to merge
|
|
11
|
+
* @returns A merged observable emitting values from any source
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const clicks$ = source<MouseEvent>();
|
|
16
|
+
*
|
|
17
|
+
* const keys$ = source<KeyboardEvent>();
|
|
18
|
+
*
|
|
19
|
+
* const events$ = merge([clicks$, keys$]);
|
|
20
|
+
*
|
|
21
|
+
* events$.subscribe((event_) => {
|
|
22
|
+
* console.log(event_);
|
|
23
|
+
* });
|
|
24
|
+
* // Logs any mouse click or keyboard event
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* @note To improve code readability, consider using `createState` instead of `merge`,
|
|
28
|
+
* subscribing to `parents` and calling `setState` within it.
|
|
29
|
+
*/
|
|
30
|
+
const merge = (parents) =>
|
|
31
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
32
|
+
new MergeObservableClass(parents);
|
|
33
|
+
class MergeObservableClass extends SyncChildObservableClass {
|
|
34
|
+
constructor(parents) {
|
|
35
|
+
super({
|
|
36
|
+
parents,
|
|
37
|
+
initialValue: Optional.none,
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
tryUpdate(updaterSymbol) {
|
|
41
|
+
const parentToUse = this.parents.find((o) => o.updaterSymbol === updaterSymbol && Optional.isSome(o.getSnapshot()));
|
|
42
|
+
if (parentToUse === undefined)
|
|
43
|
+
return;
|
|
44
|
+
const nextValue =
|
|
45
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
46
|
+
Optional.unwrap(parentToUse.getSnapshot());
|
|
47
|
+
this.setNext(nextValue, updaterSymbol);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { merge };
|
|
52
|
+
//# sourceMappingURL=merge.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.mjs","sources":["../../../src/core/combine/merge.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAaA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;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;;;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Observable, type ZipObservableRefined } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Combines multiple observables by pairing their emissions by index.
|
|
4
|
+
* Waits for all sources to emit their nth value before emitting the nth tuple.
|
|
5
|
+
* Completes when any source completes.
|
|
6
|
+
*
|
|
7
|
+
* @template OS - Tuple type of source observables
|
|
8
|
+
* @param parents - Array of observables to zip
|
|
9
|
+
* @returns A zipped observable emitting tuples of values
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const letters$ = fromArray(['a', 'b', 'c']);
|
|
14
|
+
*
|
|
15
|
+
* const numbers$ = fromArray([1, 2, 3]);
|
|
16
|
+
*
|
|
17
|
+
* const zipped$ = zip([letters$, numbers$]);
|
|
18
|
+
*
|
|
19
|
+
* zipped$.subscribe(([letter, num]) => {
|
|
20
|
+
* console.log(letter, num);
|
|
21
|
+
* });
|
|
22
|
+
* // logs: a 1, b 2, c 3
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare const zip: <const OS extends NonEmptyArray<Observable<unknown>>>(parents: OS) => ZipObservableRefined<OS>;
|
|
26
|
+
//# sourceMappingURL=zip.d.mts.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;;GAsBG;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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { Optional, Arr, createQueue } from 'ts-data-forge';
|
|
2
|
+
import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
|
|
3
|
+
import '../utils/id-maker.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Combines multiple observables by pairing their emissions by index.
|
|
7
|
+
* Waits for all sources to emit their nth value before emitting the nth tuple.
|
|
8
|
+
* Completes when any source completes.
|
|
9
|
+
*
|
|
10
|
+
* @template OS - Tuple type of source observables
|
|
11
|
+
* @param parents - Array of observables to zip
|
|
12
|
+
* @returns A zipped observable emitting tuples of values
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const letters$ = fromArray(['a', 'b', 'c']);
|
|
17
|
+
*
|
|
18
|
+
* const numbers$ = fromArray([1, 2, 3]);
|
|
19
|
+
*
|
|
20
|
+
* const zipped$ = zip([letters$, numbers$]);
|
|
21
|
+
*
|
|
22
|
+
* zipped$.subscribe(([letter, num]) => {
|
|
23
|
+
* console.log(letter, num);
|
|
24
|
+
* });
|
|
25
|
+
* // logs: a 1, b 2, c 3
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
const zip = (parents) =>
|
|
29
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
30
|
+
new ZipObservableClass(parents);
|
|
31
|
+
class ZipObservableClass extends SyncChildObservableClass {
|
|
32
|
+
#queues;
|
|
33
|
+
constructor(parents) {
|
|
34
|
+
const parentsValues = parents.map((p) => p.getSnapshot());
|
|
35
|
+
super({
|
|
36
|
+
parents,
|
|
37
|
+
initialValue: parentsValues.every(Optional.isSome)
|
|
38
|
+
? Optional.some(
|
|
39
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
40
|
+
Arr.map(parentsValues, (c) => c.value))
|
|
41
|
+
: Optional.none,
|
|
42
|
+
});
|
|
43
|
+
this.#queues = Arr.map(parents, () => createQueue());
|
|
44
|
+
}
|
|
45
|
+
tryUpdate(updaterSymbol) {
|
|
46
|
+
const queues = this.#queues;
|
|
47
|
+
for (const [index, par] of this.parents.entries()) {
|
|
48
|
+
const sn = par.getSnapshot();
|
|
49
|
+
if (par.updaterSymbol === updaterSymbol && Optional.isSome(sn)) {
|
|
50
|
+
queues[index]?.enqueue(sn.value);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (queues.every((list) => !list.isEmpty)) {
|
|
54
|
+
const nextValue =
|
|
55
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
56
|
+
Arr.map(queues, (q) => Optional.unwrap(q.dequeue()));
|
|
57
|
+
this.setNext(nextValue, updaterSymbol);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export { zip };
|
|
63
|
+
//# sourceMappingURL=zip.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.mjs","sources":["../../../src/core/combine/zip.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAiBA;;;;;;;;;;;;;;;;;;;;;;AAsBG;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;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
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
|
+
* const nums$ = fromArray([1, 2, 3]);
|
|
13
|
+
*
|
|
14
|
+
* nums$.subscribe((x) => {
|
|
15
|
+
* console.log(x);
|
|
16
|
+
* });
|
|
17
|
+
* // logs: 1, 2, 3
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const fromArray: <A>(values: readonly A[], startManually?: boolean) => FromArrayObservable<A>;
|
|
21
|
+
//# sourceMappingURL=from-array.d.mts.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,QAAQ,SAAS,CAAC,EAAE,EACpB,gBAAe,OAAe,KAC7B,mBAAmB,CAAC,CAAC,CACgC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
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
|
+
* const nums$ = fromArray([1, 2, 3]);
|
|
16
|
+
*
|
|
17
|
+
* nums$.subscribe((x) => {
|
|
18
|
+
* console.log(x);
|
|
19
|
+
* });
|
|
20
|
+
* // logs: 1, 2, 3
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
const fromArray = (values, startManually = false) => new FromArrayObservableClass(values, startManually);
|
|
24
|
+
class FromArrayObservableClass extends RootObservableClass {
|
|
25
|
+
#values;
|
|
26
|
+
constructor(values, startManually = false) {
|
|
27
|
+
super({ initialValue: Optional.none });
|
|
28
|
+
this.#values = values;
|
|
29
|
+
if (!startManually) {
|
|
30
|
+
setTimeout(() => {
|
|
31
|
+
this.emit();
|
|
32
|
+
}, 0);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
emit() {
|
|
36
|
+
if (this.isCompleted)
|
|
37
|
+
return this;
|
|
38
|
+
for (const v of this.#values) {
|
|
39
|
+
this.startUpdate(v);
|
|
40
|
+
}
|
|
41
|
+
this.complete();
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
export { fromArray };
|
|
47
|
+
//# sourceMappingURL=from-array.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-array.mjs","sources":["../../../src/core/create/from-array.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;AAiBG;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;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type FromPromiseObservable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an observable from a Promise.
|
|
4
|
+
* Emits Result.ok when the promise resolves, or Result.err when it rejects.
|
|
5
|
+
*
|
|
6
|
+
* @template A - The type of the resolved value
|
|
7
|
+
* @template E - The type of the error
|
|
8
|
+
* @param promise - The promise to convert to observable
|
|
9
|
+
* @returns An observable that emits the promise result
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```ts
|
|
13
|
+
* const data$ = fromPromise(fetch('/api/data').then((r) => r.json()));
|
|
14
|
+
*
|
|
15
|
+
* data$.subscribe((result) => {
|
|
16
|
+
* if (Result.isOk(result)) {
|
|
17
|
+
* console.log('Data:', result.value);
|
|
18
|
+
* } else {
|
|
19
|
+
* console.error('Error:', result.value);
|
|
20
|
+
* }
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare const fromPromise: <A, E = unknown>(promise: Readonly<Promise<A>>) => FromPromiseObservable<A, E>;
|
|
25
|
+
//# sourceMappingURL=from-promise.d.mts.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;;;;;GAqBG;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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Optional, Result } 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 from a Promise.
|
|
7
|
+
* Emits Result.ok when the promise resolves, or Result.err when it rejects.
|
|
8
|
+
*
|
|
9
|
+
* @template A - The type of the resolved value
|
|
10
|
+
* @template E - The type of the error
|
|
11
|
+
* @param promise - The promise to convert to observable
|
|
12
|
+
* @returns An observable that emits the promise result
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* const data$ = fromPromise(fetch('/api/data').then((r) => r.json()));
|
|
17
|
+
*
|
|
18
|
+
* data$.subscribe((result) => {
|
|
19
|
+
* if (Result.isOk(result)) {
|
|
20
|
+
* console.log('Data:', result.value);
|
|
21
|
+
* } else {
|
|
22
|
+
* console.error('Error:', result.value);
|
|
23
|
+
* }
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
const fromPromise = (promise) => new FromPromiseObservableClass(promise);
|
|
28
|
+
class FromPromiseObservableClass extends RootObservableClass {
|
|
29
|
+
constructor(promise) {
|
|
30
|
+
super({ initialValue: Optional.none });
|
|
31
|
+
promise
|
|
32
|
+
.then((value) => {
|
|
33
|
+
if (this.isCompleted)
|
|
34
|
+
return;
|
|
35
|
+
this.startUpdate(Result.ok(value));
|
|
36
|
+
})
|
|
37
|
+
.catch((error) => {
|
|
38
|
+
if (this.isCompleted)
|
|
39
|
+
return;
|
|
40
|
+
this.startUpdate(Result.err(
|
|
41
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
42
|
+
error));
|
|
43
|
+
})
|
|
44
|
+
.finally(() => {
|
|
45
|
+
this.complete();
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { fromPromise };
|
|
51
|
+
//# sourceMappingURL=from-promise.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;AAqBG;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;;;;"}
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Optional, Result } from 'ts-data-forge';
|
|
2
|
+
import '../utils/id-maker.mjs';
|
|
3
|
+
import { RootObservableClass } from '../class/root-observable-class.mjs';
|
|
4
|
+
|
|
5
|
+
const fromSubscribable = (subscribable) => new FromSubscribableObservableClass(subscribable);
|
|
6
|
+
class FromSubscribableObservableClass extends RootObservableClass {
|
|
7
|
+
constructor(subscribable) {
|
|
8
|
+
super({ initialValue: Optional.none });
|
|
9
|
+
subscribable.subscribe((nextValue) => {
|
|
10
|
+
this.startUpdate(Result.ok(nextValue));
|
|
11
|
+
}, (error) => {
|
|
12
|
+
this.startUpdate(Result.err(
|
|
13
|
+
// eslint-disable-next-line total-functions/no-unsafe-type-assertion
|
|
14
|
+
error));
|
|
15
|
+
}, () => {
|
|
16
|
+
this.complete();
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export { fromSubscribable };
|
|
22
|
+
//# sourceMappingURL=from-subscribable.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAOO,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;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './from-array.mjs';
|
|
2
|
+
export * from './from-promise.mjs';
|
|
3
|
+
export * from './from-subscribable.mjs';
|
|
4
|
+
export * from './interval.mjs';
|
|
5
|
+
export * from './of.mjs';
|
|
6
|
+
export * from './source.mjs';
|
|
7
|
+
export * from './timer.mjs';
|
|
8
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/create/index.mts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { fromArray } from './from-array.mjs';
|
|
2
|
+
export { fromPromise } from './from-promise.mjs';
|
|
3
|
+
export { fromSubscribable } from './from-subscribable.mjs';
|
|
4
|
+
export { interval } from './interval.mjs';
|
|
5
|
+
export { of } from './of.mjs';
|
|
6
|
+
export { source, subject } from './source.mjs';
|
|
7
|
+
export { timer } from './timer.mjs';
|
|
8
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type IntervalObservable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an observable that emits incremental numbers at a specified interval.
|
|
4
|
+
* Starts with 0 immediately after subscription, then emits 1, 2, 3, ... every interval.
|
|
5
|
+
*
|
|
6
|
+
* @param milliSeconds - The interval duration in milliseconds
|
|
7
|
+
* @param startManually - If true, waits for manual start (default: false)
|
|
8
|
+
* @returns An observable that emits sequential numbers
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const tick$ = interval(1000);
|
|
13
|
+
*
|
|
14
|
+
* tick$.subscribe((count) => {
|
|
15
|
+
* console.log(count);
|
|
16
|
+
* });
|
|
17
|
+
* // logs: 0, 1, 2, 3, ... every second
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare const interval: (milliSeconds: number, startManually?: boolean) => IntervalObservable;
|
|
21
|
+
//# sourceMappingURL=interval.d.mts.map
|
|
@@ -0,0 +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;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,QAAQ,GACnB,cAAc,MAAM,EACpB,gBAAgB,OAAO,KACtB,kBACuD,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Optional, asSafeUint, SafeUint } 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 incremental numbers at a specified interval.
|
|
7
|
+
* Starts with 0 immediately after subscription, then emits 1, 2, 3, ... every interval.
|
|
8
|
+
*
|
|
9
|
+
* @param milliSeconds - The interval duration in milliseconds
|
|
10
|
+
* @param startManually - If true, waits for manual start (default: false)
|
|
11
|
+
* @returns An observable that emits sequential numbers
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const tick$ = interval(1000);
|
|
16
|
+
*
|
|
17
|
+
* tick$.subscribe((count) => {
|
|
18
|
+
* console.log(count);
|
|
19
|
+
* });
|
|
20
|
+
* // logs: 0, 1, 2, 3, ... every second
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
const interval = (milliSeconds, startManually) => new IntervalObservableClass(milliSeconds, startManually);
|
|
24
|
+
class IntervalObservableClass extends RootObservableClass {
|
|
25
|
+
#milliSeconds;
|
|
26
|
+
#mut_counter;
|
|
27
|
+
#mut_timerId0;
|
|
28
|
+
#mut_timerId;
|
|
29
|
+
#mut_isStarted;
|
|
30
|
+
constructor(milliSeconds, startManually) {
|
|
31
|
+
super({ initialValue: Optional.none });
|
|
32
|
+
this.#milliSeconds = milliSeconds;
|
|
33
|
+
this.#mut_counter = asSafeUint(0);
|
|
34
|
+
this.#mut_timerId0 = undefined;
|
|
35
|
+
this.#mut_timerId = undefined;
|
|
36
|
+
this.#mut_isStarted = false;
|
|
37
|
+
if (startManually !== true) {
|
|
38
|
+
this.start();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
start() {
|
|
42
|
+
if (this.#mut_isStarted) {
|
|
43
|
+
console.warn('cannot start twice');
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
this.#mut_isStarted = true;
|
|
47
|
+
if (this.isCompleted) {
|
|
48
|
+
console.warn('cannot restart stopped IntervalObservable');
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
// emit zero
|
|
52
|
+
this.#mut_timerId0 = setTimeout(() => {
|
|
53
|
+
this.startUpdate(this.#mut_counter);
|
|
54
|
+
}, 0);
|
|
55
|
+
this.#mut_timerId = setInterval(() => {
|
|
56
|
+
this.#mut_counter = SafeUint.add(1, this.#mut_counter);
|
|
57
|
+
this.startUpdate(this.#mut_counter);
|
|
58
|
+
}, this.#milliSeconds);
|
|
59
|
+
return this;
|
|
60
|
+
}
|
|
61
|
+
#resetTimer() {
|
|
62
|
+
if (this.#mut_timerId0 !== undefined && this.#mut_timerId !== undefined) {
|
|
63
|
+
clearInterval(this.#mut_timerId0);
|
|
64
|
+
clearInterval(this.#mut_timerId);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
complete() {
|
|
68
|
+
this.#resetTimer();
|
|
69
|
+
super.complete();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export { interval };
|
|
74
|
+
//# sourceMappingURL=interval.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interval.mjs","sources":["../../../src/core/create/interval.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;AAiBG;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;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type OfObservable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an observable that emits a single value and then completes.
|
|
4
|
+
*
|
|
5
|
+
* @template A - The type of the value
|
|
6
|
+
* @param value - The value to emit
|
|
7
|
+
* @param startManually - If true, waits for manual start (default: false)
|
|
8
|
+
* @returns An observable that emits the value
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```ts
|
|
12
|
+
* const num$ = of(42);
|
|
13
|
+
*
|
|
14
|
+
* num$.subscribe((x) => {
|
|
15
|
+
* console.log(x);
|
|
16
|
+
* }); // logs: 42
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare const of: <A>(value: A, startManually?: boolean) => OfObservable<A>;
|
|
20
|
+
//# sourceMappingURL=of.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"of.d.mts","sourceRoot":"","sources":["../../../src/core/create/of.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,EAAE,GAAI,CAAC,EAClB,OAAO,CAAC,EACR,gBAAe,OAAe,KAC7B,YAAY,CAAC,CAAC,CAAmD,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
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 a single value and then completes.
|
|
7
|
+
*
|
|
8
|
+
* @template A - The type of the value
|
|
9
|
+
* @param value - The value to emit
|
|
10
|
+
* @param startManually - If true, waits for manual start (default: false)
|
|
11
|
+
* @returns An observable that emits the value
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```ts
|
|
15
|
+
* const num$ = of(42);
|
|
16
|
+
*
|
|
17
|
+
* num$.subscribe((x) => {
|
|
18
|
+
* console.log(x);
|
|
19
|
+
* }); // logs: 42
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
const of = (value, startManually = false) => new OfObservableClass(value, startManually);
|
|
23
|
+
class OfObservableClass extends RootObservableClass {
|
|
24
|
+
#value;
|
|
25
|
+
constructor(value, startManually = false) {
|
|
26
|
+
super({ initialValue: Optional.none });
|
|
27
|
+
this.#value = value;
|
|
28
|
+
if (!startManually) {
|
|
29
|
+
setTimeout(() => {
|
|
30
|
+
this.emit();
|
|
31
|
+
}, 0);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
emit() {
|
|
35
|
+
if (this.isCompleted)
|
|
36
|
+
return this;
|
|
37
|
+
this.startUpdate(this.#value);
|
|
38
|
+
this.complete();
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export { of };
|
|
44
|
+
//# sourceMappingURL=of.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"of.mjs","sources":["../../../src/core/create/of.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;AAgBG;AACI,MAAM,EAAE,GAAG,CAChB,KAAQ,EACR,aAAA,GAAyB,KAAK,KACV,IAAI,iBAAiB,CAAI,KAAK,EAAE,aAAa;AAEnE,MAAM,iBACJ,SAAQ,mBAAsB,CAAA;AAGrB,IAAA,MAAM;IAEf,WAAA,CAAY,KAAQ,EAAE,aAAA,GAAyB,KAAK,EAAA;QAClD,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK;QAEnB,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,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,OAAO,IAAI;IACb;AACD;;;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type InitializedSourceObservable, type SourceObservable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a new Observable source that can manually emit values.
|
|
4
|
+
* This is the primary way to create root observables that start reactive chains.
|
|
5
|
+
*
|
|
6
|
+
* @template A - The type of values emitted by the source
|
|
7
|
+
* @returns A SourceObservable that can emit values via `.next()` method
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const count$ = source<number>();
|
|
12
|
+
*
|
|
13
|
+
* count$.subscribe((value) => {
|
|
14
|
+
* console.log(value);
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* count$.next(1); // logs: 1
|
|
18
|
+
*
|
|
19
|
+
* count$.next(2); // logs: 2
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function source<A>(initialValue: A): InitializedSourceObservable<A>;
|
|
23
|
+
export declare function source<A>(): SourceObservable<A>;
|
|
24
|
+
/**
|
|
25
|
+
* Alias for `source()`. Creates a new Observable source.
|
|
26
|
+
* @see source
|
|
27
|
+
*/
|
|
28
|
+
export declare const subject: typeof source;
|
|
29
|
+
//# sourceMappingURL=source.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.d.mts","sourceRoot":"","sources":["../../../src/core/create/source.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,EACtB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAE3E,wBAAgB,MAAM,CAAC,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAMjD;;;GAGG;AACH,eAAO,MAAM,OAAO,eAAS,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Optional, Arr } from 'ts-data-forge';
|
|
2
|
+
import '../utils/id-maker.mjs';
|
|
3
|
+
import { RootObservableClass } from '../class/root-observable-class.mjs';
|
|
4
|
+
|
|
5
|
+
function source(...args) {
|
|
6
|
+
return new SourceObservableClass(...args);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Alias for `source()`. Creates a new Observable source.
|
|
10
|
+
* @see source
|
|
11
|
+
*/
|
|
12
|
+
const subject = source; // alias
|
|
13
|
+
class SourceObservableClass extends RootObservableClass {
|
|
14
|
+
constructor(...args) {
|
|
15
|
+
super({
|
|
16
|
+
initialValue: Arr.isNonEmpty(args)
|
|
17
|
+
? Optional.some(args[0])
|
|
18
|
+
: Optional.none,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
next(nextValue) {
|
|
22
|
+
if (this.isCompleted)
|
|
23
|
+
return;
|
|
24
|
+
this.startUpdate(nextValue);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export { source, subject };
|
|
29
|
+
//# sourceMappingURL=source.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.mjs","sources":["../../../src/core/create/source.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AA+BM,SAAU,MAAM,CAAI,GAAG,IAAkB,EAAA;AAC7C,IAAA,OAAO,IAAI,qBAAqB,CAAI,GAAG,IAAI,CAAC;AAC9C;AAEA;;;AAGG;AACI,MAAM,OAAO,GAAG,OAAO;AAE9B,MAAM,qBACJ,SAAQ,mBAAsB,CAAA;AAG9B,IAAA,WAAA,CAAY,GAAG,IAAkB,EAAA;AAC/B,QAAA,KAAK,CAAC;AACJ,YAAA,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI;kBAC7B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;kBACrB,QAAQ,CAAC,IAAI;AAClB,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,CAAC,SAAY,EAAA;QACf,IAAI,IAAI,CAAC,WAAW;YAAE;AAEtB,QAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IAC7B;AACD;;;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type TimerObservable } from '../types/index.mjs';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an observable that emits 0 after a specified delay and then completes.
|
|
4
|
+
*
|
|
5
|
+
* @param milliSeconds - The delay in milliseconds before emission
|
|
6
|
+
* @param startManually - If true, waits for manual start (default: false)
|
|
7
|
+
* @returns An observable that emits after delay
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```ts
|
|
11
|
+
* const delayed$ = timer(1000);
|
|
12
|
+
*
|
|
13
|
+
* delayed$.subscribe(() => {
|
|
14
|
+
* console.log('1 second passed');
|
|
15
|
+
* });
|
|
16
|
+
* // After 1 second, logs: 1 second passed
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export declare const timer: (milliSeconds: number, startManually?: boolean) => TimerObservable;
|
|
20
|
+
//# sourceMappingURL=timer.d.mts.map
|