synstate 0.1.1 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/README.md +317 -298
  2. package/dist/core/class/child-observable-class.d.mts.map +1 -1
  3. package/dist/core/class/child-observable-class.mjs +43 -10
  4. package/dist/core/class/child-observable-class.mjs.map +1 -1
  5. package/dist/core/class/observable-base-class.d.mts +4 -4
  6. package/dist/core/class/observable-base-class.d.mts.map +1 -1
  7. package/dist/core/class/observable-base-class.mjs +8 -8
  8. package/dist/core/class/observable-base-class.mjs.map +1 -1
  9. package/dist/core/class/root-observable-class.d.mts +1 -1
  10. package/dist/core/class/root-observable-class.d.mts.map +1 -1
  11. package/dist/core/class/root-observable-class.mjs +9 -9
  12. package/dist/core/class/root-observable-class.mjs.map +1 -1
  13. package/dist/core/combine/combine.d.mts +7 -7
  14. package/dist/core/combine/combine.mjs +13 -14
  15. package/dist/core/combine/combine.mjs.map +1 -1
  16. package/dist/core/combine/merge.d.mts +6 -6
  17. package/dist/core/combine/merge.mjs +9 -9
  18. package/dist/core/combine/merge.mjs.map +1 -1
  19. package/dist/core/combine/zip.d.mts +20 -19
  20. package/dist/core/combine/zip.d.mts.map +1 -1
  21. package/dist/core/combine/zip.mjs +22 -21
  22. package/dist/core/combine/zip.mjs.map +1 -1
  23. package/dist/core/create/{interval.d.mts → counter.d.mts} +14 -12
  24. package/dist/core/create/counter.d.mts.map +1 -0
  25. package/dist/core/create/{interval.mjs → counter.mjs} +21 -23
  26. package/dist/core/create/counter.mjs.map +1 -0
  27. package/dist/core/create/from-abortable-promise.d.mts +29 -0
  28. package/dist/core/create/from-abortable-promise.d.mts.map +1 -0
  29. package/dist/core/create/from-abortable-promise.mjs +70 -0
  30. package/dist/core/create/from-abortable-promise.mjs.map +1 -0
  31. package/dist/core/create/from-promise.d.mts +9 -6
  32. package/dist/core/create/from-promise.d.mts.map +1 -1
  33. package/dist/core/create/from-promise.mjs +8 -5
  34. package/dist/core/create/from-promise.mjs.map +1 -1
  35. package/dist/core/create/from-subscribable.d.mts +4 -4
  36. package/dist/core/create/from-subscribable.mjs +4 -4
  37. package/dist/core/create/index.d.mts +3 -3
  38. package/dist/core/create/index.d.mts.map +1 -1
  39. package/dist/core/create/index.mjs +4 -4
  40. package/dist/core/create/just.d.mts +32 -0
  41. package/dist/core/create/just.d.mts.map +1 -0
  42. package/dist/core/create/just.mjs +44 -0
  43. package/dist/core/create/just.mjs.map +1 -0
  44. package/dist/core/create/source.d.mts +7 -12
  45. package/dist/core/create/source.d.mts.map +1 -1
  46. package/dist/core/create/source.mjs +1 -6
  47. package/dist/core/create/source.mjs.map +1 -1
  48. package/dist/core/create/timer.d.mts +6 -4
  49. package/dist/core/create/timer.d.mts.map +1 -1
  50. package/dist/core/create/timer.mjs +6 -7
  51. package/dist/core/create/timer.mjs.map +1 -1
  52. package/dist/core/index.d.mts +1 -1
  53. package/dist/core/index.d.mts.map +1 -1
  54. package/dist/core/index.mjs +21 -14
  55. package/dist/core/index.mjs.map +1 -1
  56. package/dist/core/operators/audit.d.mts +97 -0
  57. package/dist/core/operators/audit.d.mts.map +1 -0
  58. package/dist/core/operators/audit.mjs +144 -0
  59. package/dist/core/operators/audit.mjs.map +1 -0
  60. package/dist/core/operators/debounce.d.mts +88 -0
  61. package/dist/core/operators/debounce.d.mts.map +1 -0
  62. package/dist/core/operators/debounce.mjs +130 -0
  63. package/dist/core/operators/debounce.mjs.map +1 -0
  64. package/dist/core/operators/filter.d.mts +5 -5
  65. package/dist/core/operators/filter.mjs +3 -3
  66. package/dist/core/operators/filter.mjs.map +1 -1
  67. package/dist/core/operators/index.d.mts +4 -4
  68. package/dist/core/operators/index.d.mts.map +1 -1
  69. package/dist/core/operators/index.mjs +6 -6
  70. package/dist/core/operators/map.d.mts +41 -0
  71. package/dist/core/operators/map.d.mts.map +1 -0
  72. package/dist/core/operators/map.mjs +71 -0
  73. package/dist/core/operators/map.mjs.map +1 -0
  74. package/dist/core/operators/merge-map.d.mts +57 -30
  75. package/dist/core/operators/merge-map.d.mts.map +1 -1
  76. package/dist/core/operators/merge-map.mjs +59 -32
  77. package/dist/core/operators/merge-map.mjs.map +1 -1
  78. package/dist/core/operators/pairwise.d.mts +6 -6
  79. package/dist/core/operators/pairwise.mjs +9 -9
  80. package/dist/core/operators/pairwise.mjs.map +1 -1
  81. package/dist/core/operators/scan.d.mts +6 -6
  82. package/dist/core/operators/scan.mjs +9 -9
  83. package/dist/core/operators/scan.mjs.map +1 -1
  84. package/dist/core/operators/skip-if-no-change.d.mts +21 -9
  85. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  86. package/dist/core/operators/skip-if-no-change.mjs +25 -13
  87. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  88. package/dist/core/operators/skip-until.d.mts +5 -5
  89. package/dist/core/operators/skip-until.mjs +8 -8
  90. package/dist/core/operators/skip-until.mjs.map +1 -1
  91. package/dist/core/operators/skip-while.d.mts +18 -9
  92. package/dist/core/operators/skip-while.d.mts.map +1 -1
  93. package/dist/core/operators/skip-while.mjs +28 -16
  94. package/dist/core/operators/skip-while.mjs.map +1 -1
  95. package/dist/core/operators/switch-map.d.mts +57 -26
  96. package/dist/core/operators/switch-map.d.mts.map +1 -1
  97. package/dist/core/operators/switch-map.mjs +59 -28
  98. package/dist/core/operators/switch-map.mjs.map +1 -1
  99. package/dist/core/operators/take-until.d.mts +5 -5
  100. package/dist/core/operators/take-until.mjs +8 -8
  101. package/dist/core/operators/take-until.mjs.map +1 -1
  102. package/dist/core/operators/take-while.d.mts +15 -8
  103. package/dist/core/operators/take-while.d.mts.map +1 -1
  104. package/dist/core/operators/take-while.mjs +19 -13
  105. package/dist/core/operators/take-while.mjs.map +1 -1
  106. package/dist/core/operators/throttle.d.mts +81 -0
  107. package/dist/core/operators/throttle.d.mts.map +1 -0
  108. package/dist/core/operators/throttle.mjs +126 -0
  109. package/dist/core/operators/throttle.mjs.map +1 -0
  110. package/dist/core/operators/with-buffered-from.d.mts +13 -9
  111. package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
  112. package/dist/core/operators/with-buffered-from.mjs +17 -13
  113. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  114. package/dist/core/operators/with-current-value-from.d.mts +14 -9
  115. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  116. package/dist/core/operators/with-current-value-from.mjs +18 -13
  117. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  118. package/dist/core/operators/with-initial-value.d.mts +5 -5
  119. package/dist/core/operators/with-initial-value.mjs +8 -8
  120. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  121. package/dist/core/predefined/index.d.mts +2 -0
  122. package/dist/core/predefined/index.d.mts.map +1 -0
  123. package/dist/core/predefined/index.mjs +12 -0
  124. package/dist/core/predefined/index.mjs.map +1 -0
  125. package/dist/core/predefined/operators/attach-index.d.mts +57 -0
  126. package/dist/core/predefined/operators/attach-index.d.mts.map +1 -0
  127. package/dist/core/predefined/operators/attach-index.mjs +62 -0
  128. package/dist/core/predefined/operators/attach-index.mjs.map +1 -0
  129. package/dist/core/predefined/operators/index.d.mts +12 -0
  130. package/dist/core/predefined/operators/index.d.mts.map +1 -0
  131. package/dist/core/predefined/operators/index.mjs +12 -0
  132. package/dist/core/predefined/operators/index.mjs.map +1 -0
  133. package/dist/core/predefined/operators/map-optional.d.mts +51 -0
  134. package/dist/core/predefined/operators/map-optional.d.mts.map +1 -0
  135. package/dist/core/predefined/operators/map-optional.mjs +55 -0
  136. package/dist/core/predefined/operators/map-optional.mjs.map +1 -0
  137. package/dist/core/predefined/operators/map-result-err.d.mts +51 -0
  138. package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -0
  139. package/dist/core/predefined/operators/map-result-err.mjs +55 -0
  140. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -0
  141. package/dist/core/predefined/operators/map-result-ok.d.mts +51 -0
  142. package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -0
  143. package/dist/core/predefined/operators/map-result-ok.mjs +55 -0
  144. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -0
  145. package/dist/core/predefined/operators/map-to.d.mts +43 -0
  146. package/dist/core/predefined/operators/map-to.d.mts.map +1 -0
  147. package/dist/core/predefined/operators/map-to.mjs +48 -0
  148. package/dist/core/predefined/operators/map-to.mjs.map +1 -0
  149. package/dist/core/predefined/operators/pluck.d.mts +47 -0
  150. package/dist/core/predefined/operators/pluck.d.mts.map +1 -0
  151. package/dist/core/predefined/operators/pluck.mjs +52 -0
  152. package/dist/core/predefined/operators/pluck.mjs.map +1 -0
  153. package/dist/core/predefined/operators/skip.d.mts +50 -0
  154. package/dist/core/predefined/operators/skip.d.mts.map +1 -0
  155. package/dist/core/predefined/operators/skip.mjs +56 -0
  156. package/dist/core/predefined/operators/skip.mjs.map +1 -0
  157. package/dist/core/predefined/operators/take.d.mts +44 -0
  158. package/dist/core/predefined/operators/take.d.mts.map +1 -0
  159. package/dist/core/predefined/operators/take.mjs +49 -0
  160. package/dist/core/predefined/operators/take.mjs.map +1 -0
  161. package/dist/core/predefined/operators/unwrap-optional.d.mts +44 -0
  162. package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -0
  163. package/dist/core/predefined/operators/unwrap-optional.mjs +50 -0
  164. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -0
  165. package/dist/core/predefined/operators/unwrap-result-err.d.mts +44 -0
  166. package/dist/core/predefined/operators/unwrap-result-err.d.mts.map +1 -0
  167. package/dist/core/predefined/operators/unwrap-result-err.mjs +48 -0
  168. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -0
  169. package/dist/core/predefined/operators/unwrap-result-ok.d.mts +44 -0
  170. package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -0
  171. package/dist/core/predefined/operators/unwrap-result-ok.mjs +50 -0
  172. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -0
  173. package/dist/core/types/id.d.mts +1 -1
  174. package/dist/core/types/id.d.mts.map +1 -1
  175. package/dist/core/types/index.d.mts +1 -0
  176. package/dist/core/types/index.d.mts.map +1 -1
  177. package/dist/core/types/observable-family.d.mts +8 -14
  178. package/dist/core/types/observable-family.d.mts.map +1 -1
  179. package/dist/core/types/observable.d.mts +3 -3
  180. package/dist/core/types/observable.d.mts.map +1 -1
  181. package/dist/core/types/timer.d.mts +2 -0
  182. package/dist/core/types/timer.d.mts.map +1 -0
  183. package/dist/core/types/timer.mjs +2 -0
  184. package/dist/core/types/timer.mjs.map +1 -0
  185. package/dist/core/utils/id-maker.d.mts +2 -2
  186. package/dist/core/utils/id-maker.d.mts.map +1 -1
  187. package/dist/core/utils/id-maker.mjs +3 -3
  188. package/dist/core/utils/id-maker.mjs.map +1 -1
  189. package/dist/core/utils/index.mjs +1 -1
  190. package/dist/entry-point.mjs +24 -15
  191. package/dist/entry-point.mjs.map +1 -1
  192. package/dist/globals.d.mts +0 -3
  193. package/dist/index.mjs +24 -15
  194. package/dist/index.mjs.map +1 -1
  195. package/dist/utils/collect-to-array.d.mts +3 -0
  196. package/dist/utils/collect-to-array.d.mts.map +1 -0
  197. package/dist/utils/collect-to-array.mjs +11 -0
  198. package/dist/utils/collect-to-array.mjs.map +1 -0
  199. package/dist/utils/create-boolean-state.d.mts +40 -0
  200. package/dist/utils/create-boolean-state.d.mts.map +1 -0
  201. package/dist/utils/create-boolean-state.mjs +53 -0
  202. package/dist/utils/create-boolean-state.mjs.map +1 -0
  203. package/dist/utils/create-event-emitter.d.mts +4 -4
  204. package/dist/utils/create-event-emitter.mjs +4 -4
  205. package/dist/utils/create-reducer.d.mts +10 -7
  206. package/dist/utils/create-reducer.d.mts.map +1 -1
  207. package/dist/utils/create-reducer.mjs +7 -7
  208. package/dist/utils/create-reducer.mjs.map +1 -1
  209. package/dist/utils/create-state.d.mts +8 -48
  210. package/dist/utils/create-state.d.mts.map +1 -1
  211. package/dist/utils/create-state.mjs +10 -60
  212. package/dist/utils/create-state.mjs.map +1 -1
  213. package/dist/utils/index.d.mts +2 -0
  214. package/dist/utils/index.d.mts.map +1 -1
  215. package/dist/utils/index.mjs +3 -1
  216. package/dist/utils/index.mjs.map +1 -1
  217. package/package.json +17 -11
  218. package/src/core/class/child-observable-class.mts +65 -9
  219. package/src/core/class/circular-dependency-comparison.test.mts +142 -0
  220. package/src/core/class/circular-dependency.test.mts +251 -0
  221. package/src/core/class/observable-base-class.mts +9 -9
  222. package/src/core/class/root-observable-class.mts +14 -10
  223. package/src/core/combine/combine.mts +15 -15
  224. package/src/core/combine/merge.mts +13 -14
  225. package/src/core/combine/zip.mts +26 -25
  226. package/src/core/create/{interval.mts → counter.mts} +32 -30
  227. package/src/core/create/from-abortable-promise.mts +83 -0
  228. package/src/core/create/from-promise.mts +10 -7
  229. package/src/core/create/from-subscribable.mts +4 -4
  230. package/src/core/create/index.mts +3 -3
  231. package/src/core/create/just.mts +43 -0
  232. package/src/core/create/source.mts +10 -14
  233. package/src/core/create/timer.mts +12 -11
  234. package/src/core/index.mts +1 -1
  235. package/src/core/operators/audit.mts +172 -0
  236. package/src/core/operators/debounce.mts +154 -0
  237. package/src/core/operators/filter.mts +9 -9
  238. package/src/core/operators/index.mts +4 -4
  239. package/src/core/operators/map.mts +124 -0
  240. package/src/core/operators/merge-map.mts +60 -33
  241. package/src/core/operators/pairwise.mts +10 -10
  242. package/src/core/operators/scan.mts +10 -10
  243. package/src/core/operators/skip-if-no-change.mts +26 -14
  244. package/src/core/operators/skip-until.mts +9 -9
  245. package/src/core/operators/skip-while.mts +30 -28
  246. package/src/core/operators/switch-map.mts +60 -29
  247. package/src/core/operators/take-until.mts +9 -9
  248. package/src/core/operators/take-while.mts +21 -19
  249. package/src/core/operators/{throttle-time.mts → throttle.mts} +58 -38
  250. package/src/core/operators/with-buffered-from.mts +18 -14
  251. package/src/core/operators/with-current-value-from.mts +19 -14
  252. package/src/core/operators/with-initial-value.mts +9 -9
  253. package/src/core/predefined/index.mts +1 -0
  254. package/src/core/predefined/operators/attach-index.mts +62 -0
  255. package/src/core/predefined/operators/index.mts +11 -0
  256. package/src/core/predefined/operators/map-optional.mts +55 -0
  257. package/src/core/predefined/operators/map-result-err.mts +55 -0
  258. package/src/core/predefined/operators/map-result-ok.mts +55 -0
  259. package/src/core/predefined/operators/map-to.mts +45 -0
  260. package/src/core/predefined/operators/pluck.mts +51 -0
  261. package/src/core/predefined/operators/skip.mts +57 -0
  262. package/src/core/predefined/operators/take.mts +47 -0
  263. package/src/core/predefined/operators/unwrap-optional.mts +49 -0
  264. package/src/core/predefined/operators/unwrap-result-err.mts +48 -0
  265. package/src/core/predefined/operators/unwrap-result-ok.mts +49 -0
  266. package/src/core/types/id.mts +1 -1
  267. package/src/core/types/index.mts +1 -0
  268. package/src/core/types/observable-family.mts +8 -24
  269. package/src/core/types/observable.mts +3 -3
  270. package/src/core/types/timer.mts +2 -0
  271. package/src/core/utils/id-maker.mts +4 -4
  272. package/src/globals.d.mts +0 -3
  273. package/src/utils/collect-to-array.mts +17 -0
  274. package/src/utils/create-boolean-state.mts +68 -0
  275. package/src/utils/create-event-emitter.mts +4 -4
  276. package/src/utils/create-reducer.mts +11 -8
  277. package/src/utils/create-state.mts +10 -75
  278. package/src/utils/index.mts +2 -0
  279. package/dist/core/create/from-array.d.mts +0 -39
  280. package/dist/core/create/from-array.d.mts.map +0 -1
  281. package/dist/core/create/from-array.mjs +0 -65
  282. package/dist/core/create/from-array.mjs.map +0 -1
  283. package/dist/core/create/interval.d.mts.map +0 -1
  284. package/dist/core/create/interval.mjs.map +0 -1
  285. package/dist/core/create/of.d.mts +0 -39
  286. package/dist/core/create/of.d.mts.map +0 -1
  287. package/dist/core/create/of.mjs +0 -63
  288. package/dist/core/create/of.mjs.map +0 -1
  289. package/dist/core/operators/audit-time.d.mts +0 -62
  290. package/dist/core/operators/audit-time.d.mts.map +0 -1
  291. package/dist/core/operators/audit-time.mjs +0 -109
  292. package/dist/core/operators/audit-time.mjs.map +0 -1
  293. package/dist/core/operators/debounce-time.d.mts +0 -51
  294. package/dist/core/operators/debounce-time.d.mts.map +0 -1
  295. package/dist/core/operators/debounce-time.mjs +0 -93
  296. package/dist/core/operators/debounce-time.mjs.map +0 -1
  297. package/dist/core/operators/map-with-index.d.mts +0 -54
  298. package/dist/core/operators/map-with-index.d.mts.map +0 -1
  299. package/dist/core/operators/map-with-index.mjs +0 -88
  300. package/dist/core/operators/map-with-index.mjs.map +0 -1
  301. package/dist/core/operators/throttle-time.d.mts +0 -62
  302. package/dist/core/operators/throttle-time.d.mts.map +0 -1
  303. package/dist/core/operators/throttle-time.mjs +0 -107
  304. package/dist/core/operators/throttle-time.mjs.map +0 -1
  305. package/src/core/create/from-array.mts +0 -76
  306. package/src/core/create/of.mts +0 -73
  307. package/src/core/operators/audit-time.mts +0 -136
  308. package/src/core/operators/debounce-time.mts +0 -116
  309. package/src/core/operators/map-with-index.mts +0 -183
@@ -15,38 +15,39 @@ import '../utils/id-maker.mjs';
15
15
  * ```ts
16
16
  * // Timeline:
17
17
  * //
18
- * // letters$ 'a' 'b' 'c'
18
+ * // letters$ 'A' 'B' 'C'
19
19
  * // numbers$ 1 2 3
20
- * // zipped$ ['a',1] ['b',2] ['c',3]
20
+ * // zipped$ ['A',1] ['B',2] ['C',3]
21
21
  * //
22
22
  * // Explanation:
23
23
  * // - zip pairs values by their index from multiple sources
24
24
  * // - Waits for all sources to emit at the same index
25
25
  * // - Completes when any source completes
26
26
  *
27
- * const letters$ = fromArray(['a', 'b', 'c']);
27
+ * const [letters$, setLetter] = createState<string>('A');
28
28
  *
29
- * const numbers$ = fromArray([1, 2, 3]);
29
+ * const [numbers$, setNumber] = createState<number>(1);
30
30
  *
31
31
  * const zipped$ = zip([letters$, numbers$]);
32
32
  *
33
- * const mut_history: (readonly [string, number])[] = [];
33
+ * const valueHistory: (readonly [string, number])[] = [];
34
34
  *
35
- * await new Promise<void>((resolve) => {
36
- * zipped$.subscribe(
37
- * ([letter, num]) => {
38
- * mut_history.push([letter, num]);
39
- * },
40
- * () => {
41
- * resolve();
42
- * },
43
- * );
35
+ * zipped$.subscribe(([letter, num]) => {
36
+ * valueHistory.push([letter, num]);
44
37
  * });
45
38
  *
46
- * assert.deepStrictEqual(mut_history, [
47
- * ['a', 1],
48
- * ['b', 2],
49
- * ['c', 3],
39
+ * for (const letter of ['B', 'C']) {
40
+ * setLetter(letter);
41
+ * }
42
+ *
43
+ * for (const num of [2, 3]) {
44
+ * setNumber(num);
45
+ * }
46
+ *
47
+ * assert.deepStrictEqual(valueHistory, [
48
+ * ['A', 1],
49
+ * ['B', 2],
50
+ * ['C', 3],
50
51
  * ]);
51
52
  * ```
52
53
  */
@@ -67,11 +68,11 @@ class ZipObservableClass extends SyncChildObservableClass {
67
68
  });
68
69
  this.#queues = Arr.map(parents, () => createQueue());
69
70
  }
70
- tryUpdate(updaterSymbol) {
71
+ tryUpdate(updateToken) {
71
72
  const queues = this.#queues;
72
73
  for (const [index, par] of this.parents.entries()) {
73
74
  const sn = par.getSnapshot();
74
- if (par.updaterSymbol === updaterSymbol && Optional.isSome(sn)) {
75
+ if (par.updateToken === updateToken && Optional.isSome(sn)) {
75
76
  queues[index]?.enqueue(sn.value);
76
77
  }
77
78
  }
@@ -79,7 +80,7 @@ class ZipObservableClass extends SyncChildObservableClass {
79
80
  const nextValue =
80
81
  // eslint-disable-next-line total-functions/no-unsafe-type-assertion
81
82
  Arr.map(queues, (q) => Optional.unwrap(q.dequeue()));
82
- this.setNext(nextValue, updaterSymbol);
83
+ this.setNext(nextValue, updateToken);
83
84
  }
84
85
  }
85
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"zip.mjs","sources":["../../../src/core/combine/zip.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;AACI,MAAM,GAAG,GAAG,CACjB,OAAW;AAEX;AACA,IAAI,kBAAkB,CAAC,OAAO;AAEhC,MAAM,kBACJ,SAAQ,wBAA8B,CAAA;AAG7B,IAAA,OAAO;AAEhB,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAEzD,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;kBAC7C,QAAQ,CAAC,IAAI;;AAEX,gBAAA,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;kBAE7C,QAAQ,CAAC,IAAI;AAClB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAC9B,WAAW,EAAE,CACiB;;AAGzB,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAE3B,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,YAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC9D,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;;;AAIpC,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,MAAM,SAAS;;YAEb,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAM;AAE3D,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAG3C;;;;"}
1
+ {"version":3,"file":"zip.mjs","sources":["../../../src/core/combine/zip.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDG;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,WAAwB,EAAA;AACzC,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,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC1D,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,WAAW,CAAC;;;AAGzC;;;;"}
@@ -1,9 +1,9 @@
1
- import { type IntervalObservable } from '../types/index.mjs';
1
+ import { type CounterObservable } from '../types/index.mjs';
2
2
  /**
3
3
  * Creates an observable that emits incremental numbers at a specified interval.
4
4
  * Starts with 0 immediately after subscription, then emits 1, 2, 3, ... every interval.
5
5
  *
6
- * @param milliSeconds - The interval duration in milliseconds
6
+ * @param intervalMilliSeconds - The interval duration in milliseconds
7
7
  * @param startManually - If true, waits for manual start (default: false)
8
8
  * @returns An observable that emits sequential numbers
9
9
  *
@@ -15,16 +15,16 @@ import { type IntervalObservable } from '../types/index.mjs';
15
15
  * // tick$ 0 1 2 3 4 5 ...
16
16
  * //
17
17
  * // Explanation:
18
- * // - interval emits incrementing numbers at specified intervals
18
+ * // - counter emits incrementing numbers at specified intervals
19
19
  * // - Starts at 0 and continues indefinitely
20
20
  * // - Useful for periodic tasks or animations
21
21
  *
22
- * const tick$ = interval(100);
22
+ * const tick$ = counter(100);
23
23
  *
24
- * const mut_history: number[] = [];
24
+ * const valueHistory: number[] = [];
25
25
  *
26
26
  * const subscription = tick$.subscribe((count) => {
27
- * mut_history.push(count);
27
+ * valueHistory.push(count);
28
28
  * });
29
29
  *
30
30
  * await new Promise((resolve) => {
@@ -33,14 +33,16 @@ import { type IntervalObservable } from '../types/index.mjs';
33
33
  *
34
34
  * subscription.unsubscribe();
35
35
  *
36
- * assert.isTrue(Arr.isArrayAtLeastLength(mut_history, 3));
36
+ * assert.isTrue(Arr.isArrayAtLeastLength(valueHistory, 3));
37
37
  *
38
- * assert.deepStrictEqual(mut_history[0], 0);
38
+ * assert.deepStrictEqual(valueHistory[0], 0);
39
39
  *
40
- * assert.deepStrictEqual(mut_history[1], 1);
40
+ * assert.deepStrictEqual(valueHistory[1], 1);
41
41
  *
42
- * assert.deepStrictEqual(mut_history[2], 2);
42
+ * assert.deepStrictEqual(valueHistory[2], 2);
43
43
  * ```
44
44
  */
45
- export declare const interval: (milliSeconds: number, startManually?: boolean) => IntervalObservable;
46
- //# sourceMappingURL=interval.d.mts.map
45
+ export declare const counter: (intervalMilliSeconds: number, options?: Readonly<{
46
+ startManually?: boolean;
47
+ }>) => CounterObservable;
48
+ //# sourceMappingURL=counter.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter.d.mts","sourceRoot":"","sources":["../../../src/core/create/counter.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAgB,MAAM,oBAAoB,CAAC;AAE1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,OAAO,GAClB,sBAAsB,MAAM,EAC5B,UAAU,QAAQ,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC,KACD,iBAIA,CAAC"}
@@ -6,7 +6,7 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
6
6
  * Creates an observable that emits incremental numbers at a specified interval.
7
7
  * Starts with 0 immediately after subscription, then emits 1, 2, 3, ... every interval.
8
8
  *
9
- * @param milliSeconds - The interval duration in milliseconds
9
+ * @param intervalMilliSeconds - The interval duration in milliseconds
10
10
  * @param startManually - If true, waits for manual start (default: false)
11
11
  * @returns An observable that emits sequential numbers
12
12
  *
@@ -18,16 +18,16 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
18
18
  * // tick$ 0 1 2 3 4 5 ...
19
19
  * //
20
20
  * // Explanation:
21
- * // - interval emits incrementing numbers at specified intervals
21
+ * // - counter emits incrementing numbers at specified intervals
22
22
  * // - Starts at 0 and continues indefinitely
23
23
  * // - Useful for periodic tasks or animations
24
24
  *
25
- * const tick$ = interval(100);
25
+ * const tick$ = counter(100);
26
26
  *
27
- * const mut_history: number[] = [];
27
+ * const valueHistory: number[] = [];
28
28
  *
29
29
  * const subscription = tick$.subscribe((count) => {
30
- * mut_history.push(count);
30
+ * valueHistory.push(count);
31
31
  * });
32
32
  *
33
33
  * await new Promise((resolve) => {
@@ -36,52 +36,50 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
36
36
  *
37
37
  * subscription.unsubscribe();
38
38
  *
39
- * assert.isTrue(Arr.isArrayAtLeastLength(mut_history, 3));
39
+ * assert.isTrue(Arr.isArrayAtLeastLength(valueHistory, 3));
40
40
  *
41
- * assert.deepStrictEqual(mut_history[0], 0);
41
+ * assert.deepStrictEqual(valueHistory[0], 0);
42
42
  *
43
- * assert.deepStrictEqual(mut_history[1], 1);
43
+ * assert.deepStrictEqual(valueHistory[1], 1);
44
44
  *
45
- * assert.deepStrictEqual(mut_history[2], 2);
45
+ * assert.deepStrictEqual(valueHistory[2], 2);
46
46
  * ```
47
47
  */
48
- const interval = (milliSeconds, startManually) => new IntervalObservableClass(milliSeconds, startManually);
49
- class IntervalObservableClass extends RootObservableClass {
50
- #milliSeconds;
48
+ const counter = (intervalMilliSeconds, options) => new CounterObservableClass(intervalMilliSeconds, options?.startManually ?? false);
49
+ class CounterObservableClass extends RootObservableClass {
50
+ #intervalMilliSeconds;
51
51
  #mut_counter;
52
52
  #mut_timerId0;
53
53
  #mut_timerId;
54
54
  #mut_isStarted;
55
- constructor(milliSeconds, startManually) {
55
+ constructor(intervalMilliSeconds, startManually) {
56
56
  super({ initialValue: Optional.none });
57
- this.#milliSeconds = milliSeconds;
57
+ this.#intervalMilliSeconds = intervalMilliSeconds;
58
58
  this.#mut_counter = asSafeUint(0);
59
59
  this.#mut_timerId0 = undefined;
60
60
  this.#mut_timerId = undefined;
61
61
  this.#mut_isStarted = false;
62
- if (startManually !== true) {
62
+ if (!startManually) {
63
63
  this.start();
64
64
  }
65
65
  }
66
66
  start() {
67
67
  if (this.#mut_isStarted) {
68
68
  console.warn('cannot start twice');
69
- return this;
69
+ return;
70
70
  }
71
71
  this.#mut_isStarted = true;
72
72
  if (this.isCompleted) {
73
- console.warn('cannot restart stopped IntervalObservable');
74
- return this;
73
+ console.warn('cannot restart stopped CounterObservable');
74
+ return;
75
75
  }
76
- // emit zero
77
76
  this.#mut_timerId0 = setTimeout(() => {
78
77
  this.startUpdate(this.#mut_counter);
79
78
  }, 0);
80
79
  this.#mut_timerId = setInterval(() => {
81
80
  this.#mut_counter = SafeUint.add(1, this.#mut_counter);
82
81
  this.startUpdate(this.#mut_counter);
83
- }, this.#milliSeconds);
84
- return this;
82
+ }, this.#intervalMilliSeconds);
85
83
  }
86
84
  #resetTimer() {
87
85
  if (this.#mut_timerId0 !== undefined && this.#mut_timerId !== undefined) {
@@ -95,5 +93,5 @@ class IntervalObservableClass extends RootObservableClass {
95
93
  }
96
94
  }
97
95
 
98
- export { interval };
99
- //# sourceMappingURL=interval.mjs.map
96
+ export { counter };
97
+ //# sourceMappingURL=counter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"counter.mjs","sources":["../../../src/core/create/counter.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CG;MACU,OAAO,GAAG,CACrB,oBAA4B,EAC5B,OAEE,KAEF,IAAI,sBAAsB,CACxB,oBAAoB,EACpB,OAAO,EAAE,aAAa,IAAI,KAAK;AAGnC,MAAM,sBACJ,SAAQ,mBAA6B,CAAA;AAG5B,IAAA,qBAAqB;AAC9B,IAAA,YAAY;AACZ,IAAA,aAAa;AACb,IAAA,YAAY;AACZ,IAAA,cAAc;IAEd,WAAA,CAAY,oBAA4B,EAAE,aAAsB,EAAA;QAC9D,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,qBAAqB,GAAG,oBAAoB;AAEjD,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;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,0CAA0C,CAAC;YAExD;QACF;AAEA,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,qBAAqB,CAAC;IAChC;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,29 @@
1
+ import { type FromPromiseObservable } from '../types/index.mjs';
2
+ /**
3
+ * Creates an observable from a Promise factory that receives an `AbortSignal`.
4
+ * When the observable is completed (e.g., by `switchMap` switching to a new
5
+ * inner observable), the `AbortController` is automatically aborted, cancelling
6
+ * the in-flight request.
7
+ *
8
+ * Emits `Result.ok(value)` when the promise resolves, or `Result.err(error)`
9
+ * when it rejects. Rejections caused by abort (`AbortError`) are silently
10
+ * ignored and do not emit.
11
+ *
12
+ * @template A - The type of the resolved value
13
+ * @template E - The type of the error (excluding AbortError)
14
+ * @param factory - A function that receives an `AbortSignal` and returns a Promise
15
+ * @returns An observable that emits the promise result
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * const results$ = query.pipe(
20
+ * switchMap((q) =>
21
+ * fromAbortablePromise((signal) =>
22
+ * fetch(`/api/search?q=${q}`, { signal }).then((r) => r.json()),
23
+ * ),
24
+ * ),
25
+ * );
26
+ * ```
27
+ */
28
+ export declare const fromAbortablePromise: <A, E = unknown>(factory: (signal: AbortSignal) => Promise<A>) => FromPromiseObservable<A, E>;
29
+ //# sourceMappingURL=from-abortable-promise.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-abortable-promise.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-abortable-promise.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAEjD,SAAS,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,KAC3C,qBAAqB,CAAC,CAAC,EAAE,CAAC,CACqB,CAAC"}
@@ -0,0 +1,70 @@
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 factory that receives an `AbortSignal`.
7
+ * When the observable is completed (e.g., by `switchMap` switching to a new
8
+ * inner observable), the `AbortController` is automatically aborted, cancelling
9
+ * the in-flight request.
10
+ *
11
+ * Emits `Result.ok(value)` when the promise resolves, or `Result.err(error)`
12
+ * when it rejects. Rejections caused by abort (`AbortError`) are silently
13
+ * ignored and do not emit.
14
+ *
15
+ * @template A - The type of the resolved value
16
+ * @template E - The type of the error (excluding AbortError)
17
+ * @param factory - A function that receives an `AbortSignal` and returns a Promise
18
+ * @returns An observable that emits the promise result
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * const results$ = query.pipe(
23
+ * switchMap((q) =>
24
+ * fromAbortablePromise((signal) =>
25
+ * fetch(`/api/search?q=${q}`, { signal }).then((r) => r.json()),
26
+ * ),
27
+ * ),
28
+ * );
29
+ * ```
30
+ */
31
+ const fromAbortablePromise = (
32
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
33
+ factory) => new FromAbortablePromiseObservableClass(factory);
34
+ class FromAbortablePromiseObservableClass extends RootObservableClass {
35
+ #abortController;
36
+ // eslint-disable-next-line @typescript-eslint/prefer-readonly-parameter-types
37
+ constructor(factory) {
38
+ super({ initialValue: Optional.none });
39
+ this.#abortController = new AbortController();
40
+ const promise = factory(this.#abortController.signal);
41
+ promise
42
+ .then((value) => {
43
+ if (this.isCompleted)
44
+ return;
45
+ this.startUpdate(Result.ok(value));
46
+ })
47
+ .catch((error) => {
48
+ if (this.isCompleted)
49
+ return;
50
+ // Silently ignore AbortError — it means the observable was
51
+ // intentionally completed (e.g., by switchMap).
52
+ if (error instanceof DOMException && error.name === 'AbortError') {
53
+ return;
54
+ }
55
+ this.startUpdate(Result.err(
56
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
57
+ error));
58
+ })
59
+ .finally(() => {
60
+ this.complete();
61
+ });
62
+ }
63
+ complete() {
64
+ this.#abortController.abort();
65
+ super.complete();
66
+ }
67
+ }
68
+
69
+ export { fromAbortablePromise };
70
+ //# sourceMappingURL=from-abortable-promise.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"from-abortable-promise.mjs","sources":["../../../src/core/create/from-abortable-promise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACI,MAAM,oBAAoB,GAAG;AAClC;AACA,OAA4C,KAE5C,IAAI,mCAAmC,CAAC,OAAO;AAEjD,MAAM,mCACJ,SAAQ,mBAAiC,CAAA;AAGhC,IAAA,gBAAgB;;AAGzB,IAAA,WAAA,CAAY,OAA4C,EAAA;QACtD,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,eAAe,EAAE;QAE7C,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC;QAErD;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;;;YAItB,IAAI,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE;gBAChE;YACF;AAEA,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;IAES,QAAQ,GAAA;AACf,QAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE;QAE7B,KAAK,CAAC,QAAQ,EAAE;IAClB;AACD;;;;"}
@@ -13,7 +13,7 @@ import { type FromPromiseObservable } from '../types/index.mjs';
13
13
  * // Timeline:
14
14
  * //
15
15
  * // promise [pending...] -> resolved/rejected
16
- * // data$ Ok(value) or Err(error)
16
+ * // data$ Ok(value) or Err(error)
17
17
  * //
18
18
  * // Explanation:
19
19
  * // - fromPromise converts a Promise into an observable
@@ -21,17 +21,20 @@ import { type FromPromiseObservable } from '../types/index.mjs';
21
21
  * // - Completes after emitting the result
22
22
  * // - Useful for integrating async operations into reactive flows
23
23
  *
24
- * const fetchData = async (): Promise<{ value: number }> => ({ value: 42 });
24
+ * const fetchData = async (): Promise<Readonly<{ value: number }>> =>
25
+ * ({
26
+ * value: 42,
27
+ * }) as const;
25
28
  *
26
29
  * const data$ = fromPromise(fetchData());
27
30
  *
28
- * const mut_history: { value: number }[] = [];
31
+ * const valueHistory: Readonly<{ value: number }>[] = [];
29
32
  *
30
33
  * await new Promise<void>((resolve) => {
31
34
  * data$.subscribe(
32
35
  * (result) => {
33
36
  * if (Result.isOk(result)) {
34
- * mut_history.push(result.value);
37
+ * valueHistory.push(result.value);
35
38
  * }
36
39
  * },
37
40
  * () => {
@@ -40,8 +43,8 @@ import { type FromPromiseObservable } from '../types/index.mjs';
40
43
  * );
41
44
  * });
42
45
  *
43
- * assert.deepStrictEqual(mut_history, [{ value: 42 }]);
46
+ * assert.deepStrictEqual(valueHistory, [{ value: 42 }]);
44
47
  * ```
45
48
  */
46
- export declare const fromPromise: <A, E = unknown>(promise: Readonly<Promise<A>>) => FromPromiseObservable<A, E>;
49
+ export declare const fromPromise: <A, E = unknown>(promise: Promise<A>) => FromPromiseObservable<A, E>;
47
50
  //# sourceMappingURL=from-promise.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-promise.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-promise.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAEhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EACxC,SAAS,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAC5B,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAA4C,CAAC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EACxC,SAAS,OAAO,CAAC,CAAC,CAAC,KAClB,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAA4C,CAAC"}
@@ -16,7 +16,7 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
16
16
  * // Timeline:
17
17
  * //
18
18
  * // promise [pending...] -> resolved/rejected
19
- * // data$ Ok(value) or Err(error)
19
+ * // data$ Ok(value) or Err(error)
20
20
  * //
21
21
  * // Explanation:
22
22
  * // - fromPromise converts a Promise into an observable
@@ -24,17 +24,20 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
24
24
  * // - Completes after emitting the result
25
25
  * // - Useful for integrating async operations into reactive flows
26
26
  *
27
- * const fetchData = async (): Promise<{ value: number }> => ({ value: 42 });
27
+ * const fetchData = async (): Promise<Readonly<{ value: number }>> =>
28
+ * ({
29
+ * value: 42,
30
+ * }) as const;
28
31
  *
29
32
  * const data$ = fromPromise(fetchData());
30
33
  *
31
- * const mut_history: { value: number }[] = [];
34
+ * const valueHistory: Readonly<{ value: number }>[] = [];
32
35
  *
33
36
  * await new Promise<void>((resolve) => {
34
37
  * data$.subscribe(
35
38
  * (result) => {
36
39
  * if (Result.isOk(result)) {
37
- * mut_history.push(result.value);
40
+ * valueHistory.push(result.value);
38
41
  * }
39
42
  * },
40
43
  * () => {
@@ -43,7 +46,7 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
43
46
  * );
44
47
  * });
45
48
  *
46
- * assert.deepStrictEqual(mut_history, [{ value: 42 }]);
49
+ * assert.deepStrictEqual(valueHistory, [{ value: 42 }]);
47
50
  * ```
48
51
  */
49
52
  const fromPromise = (promise) => new FromPromiseObservableClass(promise);
@@ -1 +1 @@
1
- {"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;AACI,MAAM,WAAW,GAAG,CACzB,OAA6B,KACG,IAAI,0BAA0B,CAAC,OAAO;AAExE,MAAM,0BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,OAA6B,EAAA;QACvC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC;AACG,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;YACd,IAAI,IAAI,CAAC,WAAW;gBAAE;YAEtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAc,KAAI;YACxB,IAAI,IAAI,CAAC,WAAW;gBAAE;AAEtB,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,GAAG;;YAER,KAAU,CACX,CACF;AACH,QAAA,CAAC;aACA,OAAO,CAAC,MAAK;YACZ,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;AACD;;;;"}
1
+ {"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;;;;"}
@@ -35,17 +35,17 @@ import { type FromSubscribableObservable, type Subscribable } from '../types/ind
35
35
  *
36
36
  * return { unsubscribe: () => {} };
37
37
  * },
38
- * };
38
+ * } as const;
39
39
  *
40
40
  * const observable$ = fromSubscribable<number>(customSubscribable);
41
41
  *
42
- * const mut_history: number[] = [];
42
+ * const valueHistory: number[] = [];
43
43
  *
44
44
  * await new Promise<void>((resolve) => {
45
45
  * observable$.subscribe(
46
46
  * (result) => {
47
47
  * if (Result.isOk(result)) {
48
- * mut_history.push(result.value);
48
+ * valueHistory.push(result.value);
49
49
  * }
50
50
  * },
51
51
  * () => {
@@ -54,7 +54,7 @@ import { type FromSubscribableObservable, type Subscribable } from '../types/ind
54
54
  * );
55
55
  * });
56
56
  *
57
- * assert.deepStrictEqual(mut_history, [1, 2, 3]);
57
+ * assert.deepStrictEqual(valueHistory, [1, 2, 3]);
58
58
  * ```
59
59
  */
60
60
  export declare const fromSubscribable: <A, E = unknown>(subscribable: Subscribable<A>) => FromSubscribableObservable<A, E>;
@@ -38,17 +38,17 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
38
38
  *
39
39
  * return { unsubscribe: () => {} };
40
40
  * },
41
- * };
41
+ * } as const;
42
42
  *
43
43
  * const observable$ = fromSubscribable<number>(customSubscribable);
44
44
  *
45
- * const mut_history: number[] = [];
45
+ * const valueHistory: number[] = [];
46
46
  *
47
47
  * await new Promise<void>((resolve) => {
48
48
  * observable$.subscribe(
49
49
  * (result) => {
50
50
  * if (Result.isOk(result)) {
51
- * mut_history.push(result.value);
51
+ * valueHistory.push(result.value);
52
52
  * }
53
53
  * },
54
54
  * () => {
@@ -57,7 +57,7 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
57
57
  * );
58
58
  * });
59
59
  *
60
- * assert.deepStrictEqual(mut_history, [1, 2, 3]);
60
+ * assert.deepStrictEqual(valueHistory, [1, 2, 3]);
61
61
  * ```
62
62
  */
63
63
  const fromSubscribable = (subscribable) => new FromSubscribableObservableClass(subscribable);
@@ -1,8 +1,8 @@
1
- export * from './from-array.mjs';
1
+ export * from './counter.mjs';
2
+ export * from './from-abortable-promise.mjs';
2
3
  export * from './from-promise.mjs';
3
4
  export * from './from-subscribable.mjs';
4
- export * from './interval.mjs';
5
- export * from './of.mjs';
5
+ export * from './just.mjs';
6
6
  export * from './source.mjs';
7
7
  export * from './timer.mjs';
8
8
  //# sourceMappingURL=index.d.mts.map
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/core/create/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -1,8 +1,8 @@
1
- export { fromArray } from './from-array.mjs';
1
+ export { counter } from './counter.mjs';
2
+ export { fromAbortablePromise } from './from-abortable-promise.mjs';
2
3
  export { fromPromise } from './from-promise.mjs';
3
4
  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';
5
+ export { just } from './just.mjs';
6
+ export { source } from './source.mjs';
7
7
  export { timer } from './timer.mjs';
8
8
  //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,32 @@
1
+ import { type InitializedRootObservable } from '../types/index.mjs';
2
+ /**
3
+ * Creates an Observable that holds a single static value and immediately
4
+ * completes. Useful inside `switchMap` to emit a fallback value when no
5
+ * asynchronous work is needed.
6
+ *
7
+ * @template A - The type of the value
8
+ * @param value - The value to emit
9
+ * @returns An initialized Observable that holds the value and is already completed
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const greeting$ = just('hello');
14
+ *
15
+ * const valueHistory: string[] = [];
16
+ *
17
+ * greeting$.subscribe(
18
+ * (value) => {
19
+ * valueHistory.push(value);
20
+ * },
21
+ * () => {
22
+ * // onComplete — called immediately since just() completes right away
23
+ * },
24
+ * );
25
+ *
26
+ * assert.deepStrictEqual(valueHistory, ['hello']);
27
+ *
28
+ * assert.strictEqual(greeting$.isCompleted, true);
29
+ * ```
30
+ */
31
+ export declare const just: <const A>(value: A) => InitializedRootObservable<A>;
32
+ //# sourceMappingURL=just.d.mts.map
@@ -0,0 +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"}
@@ -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 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
+ 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;
41
+ };
42
+
43
+ export { just };
44
+ //# sourceMappingURL=just.mjs.map
@@ -0,0 +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;;;;"}