synstate 1.0.2 → 2.0.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.
Files changed (194) hide show
  1. package/README.md +16 -17
  2. package/dist/core/class/child-observable-class.d.mts.map +1 -1
  3. package/dist/core/class/child-observable-class.mjs +148 -140
  4. package/dist/core/class/child-observable-class.mjs.map +1 -1
  5. package/dist/core/class/observable-base-class.d.mts.map +1 -1
  6. package/dist/core/class/observable-base-class.mjs +111 -107
  7. package/dist/core/class/observable-base-class.mjs.map +1 -1
  8. package/dist/core/class/root-observable-class.d.mts.map +1 -1
  9. package/dist/core/class/root-observable-class.mjs +32 -24
  10. package/dist/core/class/root-observable-class.mjs.map +1 -1
  11. package/dist/core/combine/combine.d.mts +3 -3
  12. package/dist/core/combine/combine.d.mts.map +1 -1
  13. package/dist/core/combine/combine.mjs +31 -113
  14. package/dist/core/combine/combine.mjs.map +1 -1
  15. package/dist/core/combine/merge.d.mts +2 -2
  16. package/dist/core/combine/merge.d.mts.map +1 -1
  17. package/dist/core/combine/merge.mjs +21 -69
  18. package/dist/core/combine/merge.mjs.map +1 -1
  19. package/dist/core/combine/zip.d.mts +2 -2
  20. package/dist/core/combine/zip.d.mts.map +1 -1
  21. package/dist/core/combine/zip.mjs +34 -79
  22. package/dist/core/combine/zip.mjs.map +1 -1
  23. package/dist/core/create/counter.d.mts +1 -1
  24. package/dist/core/create/counter.d.mts.map +1 -1
  25. package/dist/core/create/counter.mjs +45 -84
  26. package/dist/core/create/counter.mjs.map +1 -1
  27. package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
  28. package/dist/core/create/from-abortable-promise.mjs +29 -61
  29. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  30. package/dist/core/create/from-promise.d.mts.map +1 -1
  31. package/dist/core/create/from-promise.mjs +17 -66
  32. package/dist/core/create/from-promise.mjs.map +1 -1
  33. package/dist/core/create/from-subscribable.d.mts.map +1 -1
  34. package/dist/core/create/from-subscribable.mjs +18 -69
  35. package/dist/core/create/from-subscribable.mjs.map +1 -1
  36. package/dist/core/create/just.d.mts.map +1 -1
  37. package/dist/core/create/just.mjs +5 -35
  38. package/dist/core/create/just.mjs.map +1 -1
  39. package/dist/core/create/source.mjs +10 -13
  40. package/dist/core/create/source.mjs.map +1 -1
  41. package/dist/core/create/timer.d.mts.map +1 -1
  42. package/dist/core/create/timer.mjs +32 -68
  43. package/dist/core/create/timer.mjs.map +1 -1
  44. package/dist/core/operators/audit.d.mts.map +1 -1
  45. package/dist/core/operators/audit.mjs +39 -133
  46. package/dist/core/operators/audit.mjs.map +1 -1
  47. package/dist/core/operators/debounce.d.mts.map +1 -1
  48. package/dist/core/operators/debounce.mjs +36 -119
  49. package/dist/core/operators/debounce.mjs.map +1 -1
  50. package/dist/core/operators/filter.mjs +22 -25
  51. package/dist/core/operators/filter.mjs.map +1 -1
  52. package/dist/core/operators/map.d.mts.map +1 -1
  53. package/dist/core/operators/map.mjs +28 -61
  54. package/dist/core/operators/map.mjs.map +1 -1
  55. package/dist/core/operators/merge-map.d.mts +1 -1
  56. package/dist/core/operators/merge-map.d.mts.map +1 -1
  57. package/dist/core/operators/merge-map.mjs +34 -130
  58. package/dist/core/operators/merge-map.mjs.map +1 -1
  59. package/dist/core/operators/pairwise.d.mts +3 -2
  60. package/dist/core/operators/pairwise.d.mts.map +1 -1
  61. package/dist/core/operators/pairwise.mjs +19 -75
  62. package/dist/core/operators/pairwise.mjs.map +1 -1
  63. package/dist/core/operators/scan.d.mts.map +1 -1
  64. package/dist/core/operators/scan.mjs +16 -67
  65. package/dist/core/operators/scan.mjs.map +1 -1
  66. package/dist/core/operators/skip-if-no-change.d.mts +1 -1
  67. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  68. package/dist/core/operators/skip-if-no-change.mjs +28 -92
  69. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  70. package/dist/core/operators/skip-until.d.mts.map +1 -1
  71. package/dist/core/operators/skip-until.mjs +23 -72
  72. package/dist/core/operators/skip-until.mjs.map +1 -1
  73. package/dist/core/operators/skip-while.d.mts.map +1 -1
  74. package/dist/core/operators/skip-while.mjs +26 -88
  75. package/dist/core/operators/skip-while.mjs.map +1 -1
  76. package/dist/core/operators/switch-map.d.mts.map +1 -1
  77. package/dist/core/operators/switch-map.mjs +31 -124
  78. package/dist/core/operators/switch-map.mjs.map +1 -1
  79. package/dist/core/operators/take-until.d.mts.map +1 -1
  80. package/dist/core/operators/take-until.mjs +28 -69
  81. package/dist/core/operators/take-until.mjs.map +1 -1
  82. package/dist/core/operators/take-while.d.mts.map +1 -1
  83. package/dist/core/operators/take-while.mjs +23 -83
  84. package/dist/core/operators/take-while.mjs.map +1 -1
  85. package/dist/core/operators/throttle.d.mts.map +1 -1
  86. package/dist/core/operators/throttle.mjs +38 -115
  87. package/dist/core/operators/throttle.mjs.map +1 -1
  88. package/dist/core/operators/with-buffered-from.d.mts +1 -1
  89. package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
  90. package/dist/core/operators/with-buffered-from.mjs +37 -90
  91. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  92. package/dist/core/operators/with-current-value-from.d.mts +1 -1
  93. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  94. package/dist/core/operators/with-current-value-from.mjs +23 -84
  95. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  96. package/dist/core/operators/with-initial-value.d.mts.map +1 -1
  97. package/dist/core/operators/with-initial-value.mjs +13 -58
  98. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  99. package/dist/core/predefined/operators/attach-index.d.mts +1 -1
  100. package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
  101. package/dist/core/predefined/operators/attach-index.mjs +0 -53
  102. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  103. package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
  104. package/dist/core/predefined/operators/map-optional.mjs +1 -48
  105. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  106. package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
  107. package/dist/core/predefined/operators/map-result-err.mjs +1 -48
  108. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  109. package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
  110. package/dist/core/predefined/operators/map-result-ok.mjs +1 -48
  111. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  112. package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
  113. package/dist/core/predefined/operators/map-to.mjs +0 -40
  114. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  115. package/dist/core/predefined/operators/pluck.d.mts +1 -1
  116. package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
  117. package/dist/core/predefined/operators/pluck.mjs +0 -43
  118. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  119. package/dist/core/predefined/operators/skip.d.mts.map +1 -1
  120. package/dist/core/predefined/operators/skip.mjs +0 -47
  121. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  122. package/dist/core/predefined/operators/take.d.mts.map +1 -1
  123. package/dist/core/predefined/operators/take.mjs +0 -41
  124. package/dist/core/predefined/operators/take.mjs.map +1 -1
  125. package/dist/core/predefined/operators/unwrap-optional.mjs +4 -43
  126. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  127. package/dist/core/predefined/operators/unwrap-result-err.mjs +0 -40
  128. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  129. package/dist/core/predefined/operators/unwrap-result-ok.mjs +4 -43
  130. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  131. package/dist/core/types/observable-family.d.mts +10 -10
  132. package/dist/core/types/observable-family.d.mts.map +1 -1
  133. package/dist/core/types/observable.d.mts.map +1 -1
  134. package/dist/core/types/observable.mjs +3 -5
  135. package/dist/core/types/observable.mjs.map +1 -1
  136. package/dist/core/types/types.d.mts +2 -1
  137. package/dist/core/types/types.d.mts.map +1 -1
  138. package/dist/core/utils/id-maker.mjs +5 -6
  139. package/dist/core/utils/id-maker.mjs.map +1 -1
  140. package/dist/core/utils/max-depth.d.mts.map +1 -1
  141. package/dist/core/utils/max-depth.mjs +1 -3
  142. package/dist/core/utils/max-depth.mjs.map +1 -1
  143. package/dist/core/utils/observable-utils.d.mts.map +1 -1
  144. package/dist/core/utils/observable-utils.mjs +3 -2
  145. package/dist/core/utils/observable-utils.mjs.map +1 -1
  146. package/dist/core/utils/utils.d.mts.map +1 -1
  147. package/dist/core/utils/utils.mjs +23 -30
  148. package/dist/core/utils/utils.mjs.map +1 -1
  149. package/dist/utils/collect-to-array.d.mts.map +1 -1
  150. package/dist/utils/collect-to-array.mjs +9 -6
  151. package/dist/utils/collect-to-array.mjs.map +1 -1
  152. package/dist/utils/create-boolean-state.d.mts +1 -1
  153. package/dist/utils/create-boolean-state.d.mts.map +1 -1
  154. package/dist/utils/create-boolean-state.mjs +18 -46
  155. package/dist/utils/create-boolean-state.mjs.map +1 -1
  156. package/dist/utils/create-event-emitter.mjs +10 -64
  157. package/dist/utils/create-event-emitter.mjs.map +1 -1
  158. package/dist/utils/create-reducer.d.mts +1 -1
  159. package/dist/utils/create-reducer.d.mts.map +1 -1
  160. package/dist/utils/create-reducer.mjs +8 -52
  161. package/dist/utils/create-reducer.mjs.map +1 -1
  162. package/dist/utils/create-state.d.mts +1 -1
  163. package/dist/utils/create-state.d.mts.map +1 -1
  164. package/dist/utils/create-state.mjs +23 -53
  165. package/dist/utils/create-state.mjs.map +1 -1
  166. package/package.json +42 -29
  167. package/src/core/class/child-observable-class.mts +1 -1
  168. package/src/core/class/observable-base-class.mts +16 -16
  169. package/src/core/combine/combine.mts +38 -16
  170. package/src/core/combine/merge.mts +3 -3
  171. package/src/core/combine/zip.mts +24 -13
  172. package/src/core/create/counter.mts +11 -9
  173. package/src/core/create/counter.test.mts +11 -0
  174. package/src/core/create/timer.mts +6 -6
  175. package/src/core/create/timer.test.mts +11 -0
  176. package/src/core/operators/audit-throttle-teardown.test.mts +21 -0
  177. package/src/core/operators/audit.mts +6 -6
  178. package/src/core/operators/debounce.mts +6 -6
  179. package/src/core/operators/pairwise.mts +10 -5
  180. package/src/core/operators/skip-while.mts +1 -5
  181. package/src/core/operators/skip-while.test.mts +20 -0
  182. package/src/core/operators/throttle.mts +6 -6
  183. package/src/core/operators/with-buffered-from.mts +4 -4
  184. package/src/core/predefined/operators/map-optional.mts +1 -2
  185. package/src/core/predefined/operators/map-result-err.mts +1 -1
  186. package/src/core/predefined/operators/map-result-ok.mts +1 -1
  187. package/src/core/types/observable-family.mts +12 -11
  188. package/src/core/types/observable.mts +5 -7
  189. package/src/core/types/types.mts +2 -1
  190. package/src/core/utils/max-depth.mts +5 -1
  191. package/src/core/utils/utils.mts +1 -1
  192. package/src/utils/create-boolean-state.mts +1 -1
  193. package/src/utils/create-reducer.mts +1 -1
  194. package/src/utils/create-state.mts +1 -1
@@ -2,74 +2,25 @@ 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
- * 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
- * // 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
26
- *
27
- * const fetchData = async (): Promise<Readonly<{ value: number }>> =>
28
- * ({
29
- * value: 42,
30
- * }) as const;
31
- *
32
- * const data$ = fromPromise(fetchData());
33
- *
34
- * const valueHistory: Readonly<{ value: number }>[] = [];
35
- *
36
- * await new Promise<void>((resolve) => {
37
- * data$.subscribe(
38
- * (result) => {
39
- * if (Result.isOk(result)) {
40
- * valueHistory.push(result.value);
41
- * }
42
- * },
43
- * () => {
44
- * resolve();
45
- * },
46
- * );
47
- * });
48
- *
49
- * assert.deepStrictEqual(valueHistory, [{ value: 42 }]);
50
- * ```
51
- */
52
5
  const fromPromise = (promise) => new FromPromiseObservableClass(promise);
53
6
  class FromPromiseObservableClass extends RootObservableClass {
54
- constructor(promise) {
55
- super({ initialValue: Optional.none });
56
- promise
57
- .then((value) => {
58
- if (this.isCompleted)
59
- return;
60
- this.startUpdate(Result.ok(value));
61
- })
62
- .catch((error) => {
63
- if (this.isCompleted)
64
- return;
65
- this.startUpdate(Result.err(
66
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
67
- error));
68
- })
69
- .finally(() => {
70
- this.complete();
71
- });
72
- }
7
+ constructor(promise) {
8
+ super({ initialValue: Optional.none });
9
+ promise.then((value) => {
10
+ if (this.isCompleted) return;
11
+ this.startUpdate(Result.ok(value));
12
+ }).catch((error) => {
13
+ if (this.isCompleted) return;
14
+ this.startUpdate(
15
+ Result.err(
16
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
17
+ error
18
+ )
19
+ );
20
+ }).finally(() => {
21
+ this.complete();
22
+ });
23
+ }
73
24
  }
74
25
 
75
26
  export { fromPromise };
@@ -1 +1 @@
1
- {"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CG;AACI,MAAM,WAAW,GAAG,CACzB,OAAmB,KACa,IAAI,0BAA0B,CAAC,OAAO;AAExE,MAAM,0BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,OAAmB,EAAA;QAC7B,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
+ {"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":["import { Optional, Result } from 'ts-data-forge';\nimport { RootObservableClass } from '../class/index.mjs';\nimport { type FromPromiseObservable } from '../types/index.mjs';\n\n/**\n * Creates an observable from a Promise.\n * Emits Result.ok when the promise resolves, or Result.err when it rejects.\n *\n * @template A - The type of the resolved value\n * @template E - The type of the error\n * @param promise - The promise to convert to observable\n * @returns An observable that emits the promise result\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // promise [pending...] -> resolved/rejected\n * // data$ Ok(value) or Err(error)\n * //\n * // Explanation:\n * // - fromPromise converts a Promise into an observable\n * // - Emits a Result type: Ok(value) on success, Err(error) on failure\n * // - Completes after emitting the result\n * // - Useful for integrating async operations into reactive flows\n *\n * const fetchData = async (): Promise<Readonly<{ value: number }>> =>\n * ({\n * value: 42,\n * }) as const;\n *\n * const data$ = fromPromise(fetchData());\n *\n * const valueHistory: Readonly<{ value: number }>[] = [];\n *\n * await new Promise<void>((resolve) => {\n * data$.subscribe(\n * (result) => {\n * if (Result.isOk(result)) {\n * valueHistory.push(result.value);\n * }\n * },\n * () => {\n * resolve();\n * },\n * );\n * });\n *\n * assert.deepStrictEqual(valueHistory, [{ value: 42 }]);\n * ```\n */\nexport const fromPromise = <A, E = unknown>(\n promise: Promise<A>,\n): FromPromiseObservable<A, E> => new FromPromiseObservableClass(promise);\n\nclass FromPromiseObservableClass<A, E = unknown>\n extends RootObservableClass<Result<A, E>>\n implements FromPromiseObservable<A, E>\n{\n constructor(promise: Promise<A>) {\n super({ initialValue: Optional.none });\n\n promise\n .then((value) => {\n if (this.isCompleted) return;\n\n this.startUpdate(Result.ok(value));\n })\n .catch((error: unknown) => {\n if (this.isCompleted) return;\n\n this.startUpdate(\n Result.err(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n error as E,\n ),\n );\n })\n .finally(() => {\n this.complete();\n });\n }\n}\n"],"names":[],"mappings":";;;;AAmDO,MAAM,WAAA,GAAc,CACzB,OAAA,KACgC,IAAI,2BAA2B,OAAO;AAExE,MAAM,mCACI,mBAAA,CAEV;AAAA,EACE,YAAY,OAAA,EAAqB;AAC/B,IAAA,KAAA,CAAM,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,EAAM,CAAA;AAErC,IAAA,OAAA,CACG,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,MAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,IACnC,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAmB;AACzB,MAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,MAAA,IAAA,CAAK,WAAA;AAAA,QACH,MAAA,CAAO,GAAA;AAAA;AAAA,UAEL;AAAA;AACF,OACF;AAAA,IACF,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,IAAA,CAAK,QAAA,EAAS;AAAA,IAChB,CAAC,CAAA;AAAA,EACL;AACF;;;;"}
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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,gBAC/B,YAAY,CAAC,CAAC,CAAC,KAC5B,0BAA0B,CAAC,CAAC,EAAE,CAAC,CACiB,CAAC"}
@@ -2,78 +2,27 @@ 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
- * } as const;
42
- *
43
- * const observable$ = fromSubscribable<number>(customSubscribable);
44
- *
45
- * const valueHistory: number[] = [];
46
- *
47
- * await new Promise<void>((resolve) => {
48
- * observable$.subscribe(
49
- * (result) => {
50
- * if (Result.isOk(result)) {
51
- * valueHistory.push(result.value);
52
- * }
53
- * },
54
- * () => {
55
- * resolve();
56
- * },
57
- * );
58
- * });
59
- *
60
- * assert.deepStrictEqual(valueHistory, [1, 2, 3]);
61
- * ```
62
- */
63
5
  const fromSubscribable = (subscribable) => new FromSubscribableObservableClass(subscribable);
64
6
  class FromSubscribableObservableClass extends RootObservableClass {
65
- constructor(subscribable) {
66
- super({ initialValue: Optional.none });
67
- subscribable.subscribe((nextValue) => {
68
- this.startUpdate(Result.ok(nextValue));
69
- }, (error) => {
70
- this.startUpdate(Result.err(
7
+ constructor(subscribable) {
8
+ super({ initialValue: Optional.none });
9
+ subscribable.subscribe(
10
+ (nextValue) => {
11
+ this.startUpdate(Result.ok(nextValue));
12
+ },
13
+ (error) => {
14
+ this.startUpdate(
15
+ Result.err(
71
16
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
72
- error));
73
- }, () => {
74
- this.complete();
75
- });
76
- }
17
+ error
18
+ )
19
+ );
20
+ },
21
+ () => {
22
+ this.complete();
23
+ }
24
+ );
25
+ }
77
26
  }
78
27
 
79
28
  export { fromSubscribable };
@@ -1 +1 @@
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;;;;"}
1
+ {"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":["import { Optional, Result } from 'ts-data-forge';\nimport { RootObservableClass } from '../class/index.mjs';\nimport {\n type FromSubscribableObservable,\n type Subscribable,\n} from '../types/index.mjs';\n\n/**\n * Converts any subscribable object into a SynState Observable.\n * Works with objects that have a subscribe(onNext, onError, onComplete) method.\n *\n * @template A - The type of values from the subscribable\n * @template E - The type of errors from the subscribable\n * @param subscribable - An object with a subscribe method\n * @returns An observable that wraps values in Result type\n *\n * @example\n * ```ts\n * // Explanation:\n * // - fromSubscribable converts any subscribable object into a SynState Observable\n * // - Works with objects that have a subscribe(onNext, onError, onComplete) method\n * // - Wraps values in Result type for error handling\n * // - Useful for integrating with other reactive libraries or custom subscribables\n *\n * // Example: Converting a custom subscribable\n * const customSubscribable = {\n * subscribe: (\n * onNext: (value: number) => void,\n * _onError?: (error: unknown) => void,\n * onComplete?: () => void,\n * ) => {\n * setTimeout(() => {\n * onNext(1);\n *\n * onNext(2);\n *\n * onNext(3);\n *\n * onComplete?.();\n * }, 0);\n *\n * return { unsubscribe: () => {} };\n * },\n * } as const;\n *\n * const observable$ = fromSubscribable<number>(customSubscribable);\n *\n * const valueHistory: number[] = [];\n *\n * await new Promise<void>((resolve) => {\n * observable$.subscribe(\n * (result) => {\n * if (Result.isOk(result)) {\n * valueHistory.push(result.value);\n * }\n * },\n * () => {\n * resolve();\n * },\n * );\n * });\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3]);\n * ```\n */\nexport const fromSubscribable = <A, E = unknown>(\n subscribable: Subscribable<A>,\n): FromSubscribableObservable<A, E> =>\n new FromSubscribableObservableClass(subscribable);\n\nclass FromSubscribableObservableClass<A, E = unknown>\n extends RootObservableClass<Result<A, E>>\n implements FromSubscribableObservable<A, E>\n{\n constructor(subscribable: Subscribable<A>) {\n super({ initialValue: Optional.none });\n\n subscribable.subscribe(\n (nextValue) => {\n this.startUpdate(Result.ok(nextValue));\n },\n (error?: unknown) => {\n this.startUpdate(\n Result.err(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n error as E,\n ),\n );\n },\n () => {\n this.complete();\n },\n );\n }\n}\n"],"names":[],"mappings":";;;;AAiEO,MAAM,gBAAA,GAAmB,CAC9B,YAAA,KAEA,IAAI,gCAAgC,YAAY;AAElD,MAAM,wCACI,mBAAA,CAEV;AAAA,EACE,YAAY,YAAA,EAA+B;AACzC,IAAA,KAAA,CAAM,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,EAAM,CAAA;AAErC,IAAA,YAAA,CAAa,SAAA;AAAA,MACX,CAAC,SAAA,KAAc;AACb,QAAA,IAAA,CAAK,WAAA,CAAY,MAAA,CAAO,EAAA,CAAG,SAAS,CAAC,CAAA;AAAA,MACvC,CAAA;AAAA,MACA,CAAC,KAAA,KAAoB;AACnB,QAAA,IAAA,CAAK,WAAA;AAAA,UACH,MAAA,CAAO,GAAA;AAAA;AAAA,YAEL;AAAA;AACF,SACF;AAAA,MACF,CAAA;AAAA,MACA,MAAM;AACJ,QAAA,IAAA,CAAK,QAAA,EAAS;AAAA,MAChB;AAAA,KACF;AAAA,EACF;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"just.d.mts","sourceRoot":"","sources":["../../../src/core/create/just.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,CAAC,EAAG,OAAO,CAAC,KAAG,yBAAyB,CAAC,CAAC,CASpE,CAAC"}
1
+ {"version":3,"file":"just.d.mts","sourceRoot":"","sources":["../../../src/core/create/just.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,CAAC,SAAU,CAAC,KAAG,yBAAyB,CAAC,CAAC,CASpE,CAAC"}
@@ -2,42 +2,12 @@ import { Optional } 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
- * Creates an Observable that holds a single static value and immediately
7
- * completes. Useful inside `switchMap` to emit a fallback value when no
8
- * asynchronous work is needed.
9
- *
10
- * @template A - The type of the value
11
- * @param value - The value to emit
12
- * @returns An initialized Observable that holds the value and is already completed
13
- *
14
- * @example
15
- * ```ts
16
- * const greeting$ = just('hello');
17
- *
18
- * const valueHistory: string[] = [];
19
- *
20
- * greeting$.subscribe(
21
- * (value) => {
22
- * valueHistory.push(value);
23
- * },
24
- * () => {
25
- * // onComplete — called immediately since just() completes right away
26
- * },
27
- * );
28
- *
29
- * assert.deepStrictEqual(valueHistory, ['hello']);
30
- *
31
- * assert.strictEqual(greeting$.isCompleted, true);
32
- * ```
33
- */
34
5
  const just = (value) => {
35
- const obs = new RootObservableClass({
36
- initialValue: Optional.some(value),
37
- });
38
- obs.complete();
39
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
40
- return obs;
6
+ const obs = new RootObservableClass({
7
+ initialValue: Optional.some(value)
8
+ });
9
+ obs.complete();
10
+ return obs;
41
11
  };
42
12
 
43
13
  export { just };
@@ -1 +1 @@
1
- {"version":3,"file":"just.mjs","sources":["../../../src/core/create/just.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BG;AACI,MAAM,IAAI,GAAG,CAAW,KAAQ,KAAkC;AACvE,IAAA,MAAM,GAAG,GAAG,IAAI,mBAAmB,CAAI;AACrC,QAAA,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACnC,KAAA,CAAC;IAEF,GAAG,CAAC,QAAQ,EAAE;;AAGd,IAAA,OAAO,GAAmC;AAC5C;;;;"}
1
+ {"version":3,"file":"just.mjs","sources":["../../../src/core/create/just.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { RootObservableClass } from '../class/index.mjs';\nimport { type InitializedRootObservable } from '../types/index.mjs';\n\n/**\n * Creates an Observable that holds a single static value and immediately\n * completes. Useful inside `switchMap` to emit a fallback value when no\n * asynchronous work is needed.\n *\n * @template A - The type of the value\n * @param value - The value to emit\n * @returns An initialized Observable that holds the value and is already completed\n *\n * @example\n * ```ts\n * const greeting$ = just('hello');\n *\n * const valueHistory: string[] = [];\n *\n * greeting$.subscribe(\n * (value) => {\n * valueHistory.push(value);\n * },\n * () => {\n * // onComplete — called immediately since just() completes right away\n * },\n * );\n *\n * assert.deepStrictEqual(valueHistory, ['hello']);\n *\n * assert.strictEqual(greeting$.isCompleted, true);\n * ```\n */\nexport const just = <const A,>(value: A): InitializedRootObservable<A> => {\n const obs = new RootObservableClass<A>({\n initialValue: Optional.some(value),\n });\n\n obs.complete();\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return obs as InitializedRootObservable<A>;\n};\n"],"names":[],"mappings":";;;;AAiCO,MAAM,IAAA,GAAO,CAAW,KAAA,KAA2C;AACxE,EAAA,MAAM,GAAA,GAAM,IAAI,mBAAA,CAAuB;AAAA,IACrC,YAAA,EAAc,QAAA,CAAS,IAAA,CAAK,KAAK;AAAA,GAClC,CAAA;AAED,EAAA,GAAA,CAAI,QAAA,EAAS;AAGb,EAAA,OAAO,GAAA;AACT;;;;"}
@@ -3,21 +3,18 @@ import '../utils/id-maker.mjs';
3
3
  import { RootObservableClass } from '../class/root-observable-class.mjs';
4
4
 
5
5
  function source(...args) {
6
- return new SourceObservableClass(...args);
6
+ return new SourceObservableClass(...args);
7
7
  }
8
8
  class SourceObservableClass extends RootObservableClass {
9
- constructor(...args) {
10
- super({
11
- initialValue: Arr.isNonEmpty(args)
12
- ? Optional.some(args[0])
13
- : Optional.none,
14
- });
15
- }
16
- next(nextValue) {
17
- if (this.isCompleted)
18
- return;
19
- this.startUpdate(nextValue);
20
- }
9
+ constructor(...args) {
10
+ super({
11
+ initialValue: Arr.isNonEmpty(args) ? Optional.some(args[0]) : Optional.none
12
+ });
13
+ }
14
+ next(nextValue) {
15
+ if (this.isCompleted) return;
16
+ this.startUpdate(nextValue);
17
+ }
21
18
  }
22
19
 
23
20
  export { source };
@@ -1 +1 @@
1
- {"version":3,"file":"source.mjs","sources":["../../../src/core/create/source.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAoDM,SAAU,MAAM,CAAU,GAAG,IAAkB,EAAA;AACnD,IAAA,OAAO,IAAI,qBAAqB,CAAI,GAAG,IAAI,CAAC;AAC9C;AAEA,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;;;;"}
1
+ {"version":3,"file":"source.mjs","sources":["../../../src/core/create/source.mts"],"sourcesContent":["import { Arr, Optional } from 'ts-data-forge';\nimport { RootObservableClass } from '../class/index.mjs';\nimport {\n type InitializedSourceObservable,\n type SourceObservable,\n} from '../types/index.mjs';\n\n/**\n * Creates a new Observable source that can manually emit values.\n * This is the primary way to create root observables that start reactive chains.\n *\n * @template A - The type of values emitted by the source\n * @returns A SourceObservable that can emit values via `.next()` method\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // count$ 1 2 3 ...\n * //\n * // Explanation:\n * // - source creates a new observable that you can manually emit values to\n * // - Use .next() to emit values\n * // - Foundation for building custom observables\n *\n * const count$ = source<number>();\n *\n * const valueHistory: number[] = [];\n *\n * count$.subscribe((value) => {\n * valueHistory.push(value);\n * });\n *\n * count$.next(1); // logs: 1\n *\n * assert.deepStrictEqual(valueHistory, [1]);\n *\n * count$.next(2); // logs: 2\n *\n * assert.deepStrictEqual(valueHistory, [1, 2]);\n *\n * count$.next(3); // logs: 3\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3]);\n * ```\n */\nexport function source<const A>(\n initialValue: A,\n): InitializedSourceObservable<A>;\n\nexport function source<const A>(): SourceObservable<A>;\n\nexport function source<const A>(...args: readonly A[]): SourceObservable<A> {\n return new SourceObservableClass<A>(...args);\n}\n\nclass SourceObservableClass<A>\n extends RootObservableClass<A>\n implements SourceObservable<A>\n{\n constructor(...args: readonly A[]) {\n super({\n initialValue: Arr.isNonEmpty(args)\n ? Optional.some(args[0])\n : Optional.none,\n });\n }\n\n next(nextValue: A): void {\n if (this.isCompleted) return;\n\n this.startUpdate(nextValue);\n }\n}\n"],"names":[],"mappings":";;;;AAoDO,SAAS,UAAmB,IAAA,EAAyC;AAC1E,EAAA,OAAO,IAAI,qBAAA,CAAyB,GAAG,IAAI,CAAA;AAC7C;AAEA,MAAM,8BACI,mBAAA,CAEV;AAAA,EACE,eAAe,IAAA,EAAoB;AACjC,IAAA,KAAA,CAAM;AAAA,MACJ,YAAA,EAAc,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,GAC7B,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,GACrB,QAAA,CAAS;AAAA,KACd,CAAA;AAAA,EACH;AAAA,EAEA,KAAK,SAAA,EAAoB;AACvB,IAAA,IAAI,KAAK,WAAA,EAAa;AAEtB,IAAA,IAAA,CAAK,YAAY,SAAS,CAAA;AAAA,EAC5B;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"timer.d.mts","sourceRoot":"","sources":["../../../src/core/create/timer.mts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,KAAK,GAChB,cAAc,MAAM,EACpB,UAAU,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,KACD,eACsE,CAAC"}
1
+ {"version":3,"file":"timer.d.mts","sourceRoot":"","sources":["../../../src/core/create/timer.mts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAExE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,KAAK,iBACF,MAAM,YACV,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,KACD,eACsE,CAAC"}
@@ -2,80 +2,44 @@ import { Optional } 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
- * Creates an observable that emits 0 after a specified delay and then completes.
7
- *
8
- * @param milliSeconds - The delay in milliseconds before emission
9
- * @param startManually - If true, waits for manual start (default: false)
10
- * @returns An observable that emits after delay
11
- *
12
- * @example
13
- * ```ts
14
- * // Timeline:
15
- * //
16
- * // Time(ms) 0 ... 1000
17
- * // delayed$ X (emits and completes)
18
- * //
19
- * // Explanation:
20
- * // - timer emits once after the specified delay, then completes
21
- * // - Useful for delayed actions or timeouts
22
- *
23
- * const delayed$ = timer(100);
24
- *
25
- * const valueHistory: number[] = [];
26
- *
27
- * await new Promise<void>((resolve) => {
28
- * delayed$.subscribe(
29
- * () => {
30
- * valueHistory.push(1);
31
- * },
32
- * () => {
33
- * resolve();
34
- * },
35
- * );
36
- * });
37
- *
38
- * assert.deepStrictEqual(valueHistory, [1]);
39
- * ```
40
- */
41
5
  const timer = (milliSeconds, options) => new TimerObservableClass(milliSeconds, options?.startManually ?? false);
42
6
  class TimerObservableClass extends RootObservableClass {
43
- #milliSeconds;
44
- #mut_timerId;
45
- #mut_isStarted;
46
- constructor(milliSeconds, startManually) {
47
- super({ initialValue: Optional.none });
48
- this.#milliSeconds = milliSeconds;
49
- this.#mut_timerId = undefined;
50
- this.#mut_isStarted = false;
51
- if (!startManually) {
52
- this.start();
53
- }
7
+ #milliSeconds;
8
+ #mut_timerId;
9
+ #mut_isStarted;
10
+ constructor(milliSeconds, startManually) {
11
+ super({ initialValue: Optional.none });
12
+ this.#milliSeconds = milliSeconds;
13
+ this.#mut_timerId = void 0;
14
+ this.#mut_isStarted = false;
15
+ if (!startManually) {
16
+ this.start();
54
17
  }
55
- start() {
56
- if (this.#mut_isStarted) {
57
- console.warn('cannot start twice');
58
- return;
59
- }
60
- this.#mut_isStarted = true;
61
- if (this.isCompleted) {
62
- console.warn('cannot restart stopped TimerObservable');
63
- return;
64
- }
65
- this.#mut_timerId = setTimeout(() => {
66
- this.startUpdate(0);
67
- this.complete();
68
- }, this.#milliSeconds);
18
+ }
19
+ #resetTimer() {
20
+ if (this.#mut_timerId !== void 0) {
21
+ clearTimeout(this.#mut_timerId);
69
22
  }
70
- #resetTimer() {
71
- if (this.#mut_timerId !== undefined) {
72
- clearTimeout(this.#mut_timerId);
73
- }
23
+ }
24
+ start() {
25
+ if (this.#mut_isStarted) {
26
+ console.warn("cannot start twice");
27
+ return;
74
28
  }
75
- complete() {
76
- this.#resetTimer();
77
- super.complete();
29
+ this.#mut_isStarted = true;
30
+ if (this.isCompleted) {
31
+ console.warn("cannot restart stopped TimerObservable");
32
+ return;
78
33
  }
34
+ this.#mut_timerId = setTimeout(() => {
35
+ this.startUpdate(0);
36
+ this.complete();
37
+ }, this.#milliSeconds);
38
+ }
39
+ complete() {
40
+ this.#resetTimer();
41
+ super.complete();
42
+ }
79
43
  }
80
44
 
81
45
  export { timer };
@@ -1 +1 @@
1
- {"version":3,"file":"timer.mjs","sources":["../../../src/core/create/timer.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;MACU,KAAK,GAAG,CACnB,YAAoB,EACpB,OAEE,KAEF,IAAI,oBAAoB,CAAC,YAAY,EAAE,OAAO,EAAE,aAAa,IAAI,KAAK;AAExE,MAAM,oBACJ,SAAQ,mBAAsB,CAAA;AAGrB,IAAA,aAAa;AACtB,IAAA,YAAY;AACZ,IAAA,cAAc;IAEd,WAAA,CAAY,YAAoB,EAAE,aAAsB,EAAA;QACtD,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,aAAa,GAAG,YAAY;AAEjC,QAAA,IAAI,CAAC,YAAY,GAAG,SAAS;AAE7B,QAAA,IAAI,CAAC,cAAc,GAAG,KAAK;QAE3B,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CAAC,KAAK,EAAE;QACd;IACF;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACvB,YAAA,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC;YAElC;QACF;AAEA,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI;AAE1B,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC;YAEtD;QACF;AAEA,QAAA,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,MAAK;AAClC,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;YAEnB,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC;IACxB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS,EAAE;AACnC,YAAA,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC;QACjC;IACF;IAES,QAAQ,GAAA;QACf,IAAI,CAAC,WAAW,EAAE;QAElB,KAAK,CAAC,QAAQ,EAAE;IAClB;AACD;;;;"}
1
+ {"version":3,"file":"timer.mjs","sources":["../../../src/core/create/timer.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { RootObservableClass } from '../class/index.mjs';\nimport { type TimerId, type TimerObservable } from '../types/index.mjs';\n\n/**\n * Creates an observable that emits 0 after a specified delay and then completes.\n *\n * @param milliSeconds - The delay in milliseconds before emission\n * @param startManually - If true, waits for manual start (default: false)\n * @returns An observable that emits after delay\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // Time(ms) 0 ... 1000\n * // delayed$ X (emits and completes)\n * //\n * // Explanation:\n * // - timer emits once after the specified delay, then completes\n * // - Useful for delayed actions or timeouts\n *\n * const delayed$ = timer(100);\n *\n * const valueHistory: number[] = [];\n *\n * await new Promise<void>((resolve) => {\n * delayed$.subscribe(\n * () => {\n * valueHistory.push(1);\n * },\n * () => {\n * resolve();\n * },\n * );\n * });\n *\n * assert.deepStrictEqual(valueHistory, [1]);\n * ```\n */\nexport const timer = (\n milliSeconds: number,\n options?: Readonly<{\n startManually?: boolean;\n }>,\n): TimerObservable =>\n new TimerObservableClass(milliSeconds, options?.startManually ?? false);\n\nclass TimerObservableClass\n extends RootObservableClass<0>\n implements TimerObservable\n{\n readonly #milliSeconds: number;\n #mut_timerId: TimerId | undefined;\n #mut_isStarted: boolean;\n\n constructor(milliSeconds: number, startManually: boolean) {\n super({ initialValue: Optional.none });\n\n this.#milliSeconds = milliSeconds;\n\n this.#mut_timerId = undefined;\n\n this.#mut_isStarted = false;\n\n if (!startManually) {\n this.start();\n }\n }\n\n #resetTimer(): void {\n if (this.#mut_timerId !== undefined) {\n clearTimeout(this.#mut_timerId);\n }\n }\n\n start(): void {\n if (this.#mut_isStarted) {\n console.warn('cannot start twice');\n\n return;\n }\n\n this.#mut_isStarted = true;\n\n if (this.isCompleted) {\n console.warn('cannot restart stopped TimerObservable');\n\n return;\n }\n\n this.#mut_timerId = setTimeout(() => {\n this.startUpdate(0);\n\n this.complete();\n }, this.#milliSeconds);\n }\n\n override complete(): void {\n this.#resetTimer();\n\n super.complete();\n }\n}\n"],"names":[],"mappings":";;;;AAwCO,MAAM,KAAA,GAAQ,CACnB,YAAA,EACA,OAAA,KAIA,IAAI,oBAAA,CAAqB,YAAA,EAAc,OAAA,EAAS,aAAA,IAAiB,KAAK;AAExE,MAAM,6BACI,mBAAA,CAEV;AAAA,EACW,aAAA;AAAA,EACT,YAAA;AAAA,EACA,cAAA;AAAA,EAEA,WAAA,CAAY,cAAsB,aAAA,EAAwB;AACxD,IAAA,KAAA,CAAM,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,EAAM,CAAA;AAErC,IAAA,IAAA,CAAK,aAAA,GAAgB,YAAA;AAErB,IAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AAEpB,IAAA,IAAA,CAAK,cAAA,GAAiB,KAAA;AAEtB,IAAA,IAAI,CAAC,aAAA,EAAe;AAClB,MAAA,IAAA,CAAK,KAAA,EAAM;AAAA,IACb;AAAA,EACF;AAAA,EAEA,WAAA,GAAoB;AAClB,IAAA,IAAI,IAAA,CAAK,iBAAiB,MAAA,EAAW;AACnC,MAAA,YAAA,CAAa,KAAK,YAAY,CAAA;AAAA,IAChC;AAAA,EACF;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,KAAK,cAAA,EAAgB;AACvB,MAAA,OAAA,CAAQ,KAAK,oBAAoB,CAAA;AAEjC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAA;AAEtB,IAAA,IAAI,KAAK,WAAA,EAAa;AACpB,MAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA;AAErD,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,YAAA,GAAe,WAAW,MAAM;AACnC,MAAA,IAAA,CAAK,YAAY,CAAC,CAAA;AAElB,MAAA,IAAA,CAAK,QAAA,EAAS;AAAA,IAChB,CAAA,EAAG,KAAK,aAAa,CAAA;AAAA,EACvB;AAAA,EAES,QAAA,GAAiB;AACxB,IAAA,IAAA,CAAK,WAAA,EAAY;AAEjB,IAAA,KAAA,CAAM,QAAA,EAAS;AAAA,EACjB;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"audit.d.mts","sourceRoot":"","sources":["../../../src/core/operators/audit.mts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,EACrB,cAAc,MAAM,KACnB,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
1
+ {"version":3,"file":"audit.d.mts","sourceRoot":"","sources":["../../../src/core/operators/audit.mts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6FG;AACH,eAAO,MAAM,KAAK,GAAI,CAAC,gBACP,MAAM,KACnB,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}