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.
Files changed (268) hide show
  1. package/README.md +878 -0
  2. package/dist/core/class/child-observable-class.d.mts +37 -0
  3. package/dist/core/class/child-observable-class.d.mts.map +1 -0
  4. package/dist/core/class/child-observable-class.mjs +134 -0
  5. package/dist/core/class/child-observable-class.mjs.map +1 -0
  6. package/dist/core/class/index.d.mts +4 -0
  7. package/dist/core/class/index.d.mts.map +1 -0
  8. package/dist/core/class/index.mjs +4 -0
  9. package/dist/core/class/index.mjs.map +1 -0
  10. package/dist/core/class/observable-base-class.d.mts +28 -0
  11. package/dist/core/class/observable-base-class.d.mts.map +1 -0
  12. package/dist/core/class/observable-base-class.mjs +116 -0
  13. package/dist/core/class/observable-base-class.mjs.map +1 -0
  14. package/dist/core/class/root-observable-class.d.mts +12 -0
  15. package/dist/core/class/root-observable-class.d.mts.map +1 -0
  16. package/dist/core/class/root-observable-class.mjs +35 -0
  17. package/dist/core/class/root-observable-class.mjs.map +1 -0
  18. package/dist/core/combine/combine.d.mts +35 -0
  19. package/dist/core/combine/combine.d.mts.map +1 -0
  20. package/dist/core/combine/combine.mjs +94 -0
  21. package/dist/core/combine/combine.mjs.map +1 -0
  22. package/dist/core/combine/index.d.mts +4 -0
  23. package/dist/core/combine/index.d.mts.map +1 -0
  24. package/dist/core/combine/index.mjs +4 -0
  25. package/dist/core/combine/index.mjs.map +1 -0
  26. package/dist/core/combine/merge.d.mts +28 -0
  27. package/dist/core/combine/merge.d.mts.map +1 -0
  28. package/dist/core/combine/merge.mjs +52 -0
  29. package/dist/core/combine/merge.mjs.map +1 -0
  30. package/dist/core/combine/zip.d.mts +26 -0
  31. package/dist/core/combine/zip.d.mts.map +1 -0
  32. package/dist/core/combine/zip.mjs +63 -0
  33. package/dist/core/combine/zip.mjs.map +1 -0
  34. package/dist/core/create/from-array.d.mts +21 -0
  35. package/dist/core/create/from-array.d.mts.map +1 -0
  36. package/dist/core/create/from-array.mjs +47 -0
  37. package/dist/core/create/from-array.mjs.map +1 -0
  38. package/dist/core/create/from-promise.d.mts +25 -0
  39. package/dist/core/create/from-promise.d.mts.map +1 -0
  40. package/dist/core/create/from-promise.mjs +51 -0
  41. package/dist/core/create/from-promise.mjs.map +1 -0
  42. package/dist/core/create/from-subscribable.d.mts +3 -0
  43. package/dist/core/create/from-subscribable.d.mts.map +1 -0
  44. package/dist/core/create/from-subscribable.mjs +22 -0
  45. package/dist/core/create/from-subscribable.mjs.map +1 -0
  46. package/dist/core/create/index.d.mts +8 -0
  47. package/dist/core/create/index.d.mts.map +1 -0
  48. package/dist/core/create/index.mjs +8 -0
  49. package/dist/core/create/index.mjs.map +1 -0
  50. package/dist/core/create/interval.d.mts +21 -0
  51. package/dist/core/create/interval.d.mts.map +1 -0
  52. package/dist/core/create/interval.mjs +74 -0
  53. package/dist/core/create/interval.mjs.map +1 -0
  54. package/dist/core/create/of.d.mts +20 -0
  55. package/dist/core/create/of.d.mts.map +1 -0
  56. package/dist/core/create/of.mjs +44 -0
  57. package/dist/core/create/of.mjs.map +1 -0
  58. package/dist/core/create/source.d.mts +29 -0
  59. package/dist/core/create/source.d.mts.map +1 -0
  60. package/dist/core/create/source.mjs +29 -0
  61. package/dist/core/create/source.mjs.map +1 -0
  62. package/dist/core/create/timer.d.mts +20 -0
  63. package/dist/core/create/timer.d.mts.map +1 -0
  64. package/dist/core/create/timer.mjs +64 -0
  65. package/dist/core/create/timer.mjs.map +1 -0
  66. package/dist/core/index.d.mts +7 -0
  67. package/dist/core/index.d.mts.map +1 -0
  68. package/dist/core/index.mjs +37 -0
  69. package/dist/core/index.mjs.map +1 -0
  70. package/dist/core/operators/audit-time.d.mts +3 -0
  71. package/dist/core/operators/audit-time.d.mts.map +1 -0
  72. package/dist/core/operators/audit-time.mjs +50 -0
  73. package/dist/core/operators/audit-time.mjs.map +1 -0
  74. package/dist/core/operators/debounce-time.d.mts +31 -0
  75. package/dist/core/operators/debounce-time.d.mts.map +1 -0
  76. package/dist/core/operators/debounce-time.mjs +73 -0
  77. package/dist/core/operators/debounce-time.mjs.map +1 -0
  78. package/dist/core/operators/filter.d.mts +28 -0
  79. package/dist/core/operators/filter.d.mts.map +1 -0
  80. package/dist/core/operators/filter.mjs +38 -0
  81. package/dist/core/operators/filter.mjs.map +1 -0
  82. package/dist/core/operators/index.d.mts +18 -0
  83. package/dist/core/operators/index.d.mts.map +1 -0
  84. package/dist/core/operators/index.mjs +18 -0
  85. package/dist/core/operators/index.mjs.map +1 -0
  86. package/dist/core/operators/map-with-index.d.mts +39 -0
  87. package/dist/core/operators/map-with-index.d.mts.map +1 -0
  88. package/dist/core/operators/map-with-index.mjs +73 -0
  89. package/dist/core/operators/map-with-index.mjs.map +1 -0
  90. package/dist/core/operators/merge-map.d.mts +34 -0
  91. package/dist/core/operators/merge-map.d.mts.map +1 -0
  92. package/dist/core/operators/merge-map.mjs +75 -0
  93. package/dist/core/operators/merge-map.mjs.map +1 -0
  94. package/dist/core/operators/pairwise.d.mts +27 -0
  95. package/dist/core/operators/pairwise.d.mts.map +1 -0
  96. package/dist/core/operators/pairwise.mjs +59 -0
  97. package/dist/core/operators/pairwise.mjs.map +1 -0
  98. package/dist/core/operators/scan.d.mts +30 -0
  99. package/dist/core/operators/scan.d.mts.map +1 -0
  100. package/dist/core/operators/scan.mjs +56 -0
  101. package/dist/core/operators/scan.mjs.map +1 -0
  102. package/dist/core/operators/skip-if-no-change.d.mts +33 -0
  103. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -0
  104. package/dist/core/operators/skip-if-no-change.mjs +68 -0
  105. package/dist/core/operators/skip-if-no-change.mjs.map +1 -0
  106. package/dist/core/operators/skip-until.d.mts +3 -0
  107. package/dist/core/operators/skip-until.d.mts.map +1 -0
  108. package/dist/core/operators/skip-until.mjs +33 -0
  109. package/dist/core/operators/skip-until.mjs.map +1 -0
  110. package/dist/core/operators/skip-while.d.mts +4 -0
  111. package/dist/core/operators/skip-while.d.mts.map +1 -0
  112. package/dist/core/operators/skip-while.mjs +40 -0
  113. package/dist/core/operators/skip-while.mjs.map +1 -0
  114. package/dist/core/operators/switch-map.d.mts +31 -0
  115. package/dist/core/operators/switch-map.d.mts.map +1 -0
  116. package/dist/core/operators/switch-map.mjs +70 -0
  117. package/dist/core/operators/switch-map.mjs.map +1 -0
  118. package/dist/core/operators/take-until.d.mts +32 -0
  119. package/dist/core/operators/take-until.d.mts.map +1 -0
  120. package/dist/core/operators/take-until.mjs +60 -0
  121. package/dist/core/operators/take-until.mjs.map +1 -0
  122. package/dist/core/operators/take-while.d.mts +4 -0
  123. package/dist/core/operators/take-while.d.mts.map +1 -0
  124. package/dist/core/operators/take-while.mjs +42 -0
  125. package/dist/core/operators/take-while.mjs.map +1 -0
  126. package/dist/core/operators/throttle-time.d.mts +23 -0
  127. package/dist/core/operators/throttle-time.d.mts.map +1 -0
  128. package/dist/core/operators/throttle-time.mjs +68 -0
  129. package/dist/core/operators/throttle-time.mjs.map +1 -0
  130. package/dist/core/operators/with-buffered-from.d.mts +4 -0
  131. package/dist/core/operators/with-buffered-from.d.mts.map +1 -0
  132. package/dist/core/operators/with-buffered-from.mjs +45 -0
  133. package/dist/core/operators/with-buffered-from.mjs.map +1 -0
  134. package/dist/core/operators/with-current-value-from.d.mts +4 -0
  135. package/dist/core/operators/with-current-value-from.d.mts.map +1 -0
  136. package/dist/core/operators/with-current-value-from.mjs +37 -0
  137. package/dist/core/operators/with-current-value-from.mjs.map +1 -0
  138. package/dist/core/operators/with-initial-value.d.mts +26 -0
  139. package/dist/core/operators/with-initial-value.d.mts.map +1 -0
  140. package/dist/core/operators/with-initial-value.mjs +47 -0
  141. package/dist/core/operators/with-initial-value.mjs.map +1 -0
  142. package/dist/core/types/id.d.mts +4 -0
  143. package/dist/core/types/id.d.mts.map +1 -0
  144. package/dist/core/types/id.mjs +2 -0
  145. package/dist/core/types/id.mjs.map +1 -0
  146. package/dist/core/types/index.d.mts +6 -0
  147. package/dist/core/types/index.d.mts.map +1 -0
  148. package/dist/core/types/index.mjs +3 -0
  149. package/dist/core/types/index.mjs.map +1 -0
  150. package/dist/core/types/observable-family.d.mts +68 -0
  151. package/dist/core/types/observable-family.d.mts.map +1 -0
  152. package/dist/core/types/observable-family.mjs +2 -0
  153. package/dist/core/types/observable-family.mjs.map +1 -0
  154. package/dist/core/types/observable-kind.d.mts +4 -0
  155. package/dist/core/types/observable-kind.d.mts.map +1 -0
  156. package/dist/core/types/observable-kind.mjs +2 -0
  157. package/dist/core/types/observable-kind.mjs.map +1 -0
  158. package/dist/core/types/observable.d.mts +83 -0
  159. package/dist/core/types/observable.d.mts.map +1 -0
  160. package/dist/core/types/observable.mjs +10 -0
  161. package/dist/core/types/observable.mjs.map +1 -0
  162. package/dist/core/types/types.d.mts +16 -0
  163. package/dist/core/types/types.d.mts.map +1 -0
  164. package/dist/core/types/types.mjs +2 -0
  165. package/dist/core/types/types.mjs.map +1 -0
  166. package/dist/core/utils/id-maker.d.mts +5 -0
  167. package/dist/core/utils/id-maker.d.mts.map +1 -0
  168. package/dist/core/utils/id-maker.mjs +17 -0
  169. package/dist/core/utils/id-maker.mjs.map +1 -0
  170. package/dist/core/utils/index.d.mts +5 -0
  171. package/dist/core/utils/index.d.mts.map +1 -0
  172. package/dist/core/utils/index.mjs +5 -0
  173. package/dist/core/utils/index.mjs.map +1 -0
  174. package/dist/core/utils/max-depth.d.mts +3 -0
  175. package/dist/core/utils/max-depth.d.mts.map +1 -0
  176. package/dist/core/utils/max-depth.mjs +8 -0
  177. package/dist/core/utils/max-depth.mjs.map +1 -0
  178. package/dist/core/utils/observable-utils.d.mts +3 -0
  179. package/dist/core/utils/observable-utils.d.mts.map +1 -0
  180. package/dist/core/utils/observable-utils.mjs +7 -0
  181. package/dist/core/utils/observable-utils.mjs.map +1 -0
  182. package/dist/core/utils/utils.d.mts +4 -0
  183. package/dist/core/utils/utils.d.mts.map +1 -0
  184. package/dist/core/utils/utils.mjs +38 -0
  185. package/dist/core/utils/utils.mjs.map +1 -0
  186. package/dist/entry-point.d.mts +2 -0
  187. package/dist/entry-point.d.mts.map +1 -0
  188. package/dist/entry-point.mjs +40 -0
  189. package/dist/entry-point.mjs.map +1 -0
  190. package/dist/globals.d.mts +4 -0
  191. package/dist/index.d.mts +3 -0
  192. package/dist/index.d.mts.map +1 -0
  193. package/dist/index.mjs +40 -0
  194. package/dist/index.mjs.map +1 -0
  195. package/dist/tsconfig.json +1 -0
  196. package/dist/types.d.mts +2 -0
  197. package/dist/utils/create-event-emitter.d.mts +39 -0
  198. package/dist/utils/create-event-emitter.d.mts.map +1 -0
  199. package/dist/utils/create-event-emitter.mjs +57 -0
  200. package/dist/utils/create-event-emitter.mjs.map +1 -0
  201. package/dist/utils/create-reducer.d.mts +34 -0
  202. package/dist/utils/create-reducer.d.mts.map +1 -0
  203. package/dist/utils/create-reducer.mjs +49 -0
  204. package/dist/utils/create-reducer.mjs.map +1 -0
  205. package/dist/utils/create-state.d.mts +61 -0
  206. package/dist/utils/create-state.d.mts.map +1 -0
  207. package/dist/utils/create-state.mjs +92 -0
  208. package/dist/utils/create-state.mjs.map +1 -0
  209. package/dist/utils/index.d.mts +4 -0
  210. package/dist/utils/index.d.mts.map +1 -0
  211. package/dist/utils/index.mjs +4 -0
  212. package/dist/utils/index.mjs.map +1 -0
  213. package/package.json +71 -0
  214. package/src/core/class/child-observable-class.mts +232 -0
  215. package/src/core/class/index.mts +3 -0
  216. package/src/core/class/observable-base-class.mts +186 -0
  217. package/src/core/class/observable.class.test.mts +89 -0
  218. package/src/core/class/root-observable-class.mts +68 -0
  219. package/src/core/combine/combine.mts +144 -0
  220. package/src/core/combine/index.mts +3 -0
  221. package/src/core/combine/merge.mts +84 -0
  222. package/src/core/combine/zip.mts +149 -0
  223. package/src/core/create/from-array.mts +58 -0
  224. package/src/core/create/from-promise.mts +58 -0
  225. package/src/core/create/from-subscribable.mts +37 -0
  226. package/src/core/create/index.mts +7 -0
  227. package/src/core/create/interval.mts +99 -0
  228. package/src/core/create/of.mts +54 -0
  229. package/src/core/create/source.mts +59 -0
  230. package/src/core/create/timer.mts +84 -0
  231. package/src/core/index.mts +6 -0
  232. package/src/core/operators/audit-time.mts +77 -0
  233. package/src/core/operators/debounce-time.mts +96 -0
  234. package/src/core/operators/filter.mts +125 -0
  235. package/src/core/operators/index.mts +17 -0
  236. package/src/core/operators/map-with-index.mts +168 -0
  237. package/src/core/operators/merge-map.mts +108 -0
  238. package/src/core/operators/pairwise.mts +77 -0
  239. package/src/core/operators/scan.mts +81 -0
  240. package/src/core/operators/skip-if-no-change.mts +91 -0
  241. package/src/core/operators/skip-until.mts +54 -0
  242. package/src/core/operators/skip-while.mts +77 -0
  243. package/src/core/operators/switch-map.mts +101 -0
  244. package/src/core/operators/take-until.mts +80 -0
  245. package/src/core/operators/take-while.mts +103 -0
  246. package/src/core/operators/throttle-time.mts +95 -0
  247. package/src/core/operators/with-buffered-from.mts +68 -0
  248. package/src/core/operators/with-current-value-from.mts +58 -0
  249. package/src/core/operators/with-initial-value.mts +76 -0
  250. package/src/core/types/id.mts +5 -0
  251. package/src/core/types/index.mts +5 -0
  252. package/src/core/types/observable-family.mts +259 -0
  253. package/src/core/types/observable-kind.mts +5 -0
  254. package/src/core/types/observable.mts +218 -0
  255. package/src/core/types/types.mts +40 -0
  256. package/src/core/utils/id-maker.mts +31 -0
  257. package/src/core/utils/index.mts +4 -0
  258. package/src/core/utils/max-depth.mts +7 -0
  259. package/src/core/utils/observable-utils.mts +10 -0
  260. package/src/core/utils/utils.mts +51 -0
  261. package/src/core/utils/utils.test.mts +88 -0
  262. package/src/entry-point.mts +1 -0
  263. package/src/globals.d.mts +4 -0
  264. package/src/index.mts +2 -0
  265. package/src/utils/create-event-emitter.mts +62 -0
  266. package/src/utils/create-reducer.mts +55 -0
  267. package/src/utils/create-state.mts +138 -0
  268. 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,3 @@
1
+ import { type FromSubscribableObservable, type Subscribable } from '../types/index.mjs';
2
+ export declare const fromSubscribable: <A, E = unknown>(subscribable: Subscribable<A>) => FromSubscribableObservable<A, E>;
3
+ //# sourceMappingURL=from-subscribable.d.mts.map
@@ -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