synstate 0.1.2 → 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 (307) hide show
  1. package/README.md +199 -146
  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 +6 -6
  14. package/dist/core/combine/combine.mjs +11 -12
  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 +0 -1
  53. package/dist/core/index.d.mts.map +1 -1
  54. package/dist/core/index.mjs +8 -13
  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 +4 -4
  70. package/dist/core/operators/{map-with-index.d.mts → map.d.mts} +11 -11
  71. package/dist/core/operators/map.d.mts.map +1 -0
  72. package/dist/core/operators/{map-with-index.mjs → map.mjs} +17 -17
  73. package/dist/core/operators/map.mjs.map +1 -0
  74. package/dist/core/operators/merge-map.d.mts +56 -29
  75. package/dist/core/operators/merge-map.d.mts.map +1 -1
  76. package/dist/core/operators/merge-map.mjs +58 -31
  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 +20 -8
  85. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  86. package/dist/core/operators/skip-if-no-change.mjs +23 -11
  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 -8
  92. package/dist/core/operators/skip-while.d.mts.map +1 -1
  93. package/dist/core/operators/skip-while.mjs +26 -11
  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 -7
  103. package/dist/core/operators/take-while.d.mts.map +1 -1
  104. package/dist/core/operators/take-while.mjs +18 -10
  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 +9 -9
  111. package/dist/core/operators/with-buffered-from.mjs +12 -12
  112. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  113. package/dist/core/operators/with-current-value-from.d.mts +10 -9
  114. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  115. package/dist/core/operators/with-current-value-from.mjs +13 -12
  116. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  117. package/dist/core/operators/with-initial-value.d.mts +5 -5
  118. package/dist/core/operators/with-initial-value.mjs +8 -8
  119. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  120. package/dist/core/predefined/index.mjs +0 -1
  121. package/dist/core/predefined/index.mjs.map +1 -1
  122. package/dist/core/predefined/operators/attach-index.d.mts +49 -0
  123. package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
  124. package/dist/core/predefined/operators/attach-index.mjs +51 -2
  125. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  126. package/dist/core/predefined/operators/index.d.mts +0 -1
  127. package/dist/core/predefined/operators/index.d.mts.map +1 -1
  128. package/dist/core/predefined/operators/index.mjs +0 -1
  129. package/dist/core/predefined/operators/index.mjs.map +1 -1
  130. package/dist/core/predefined/operators/map-optional.d.mts +47 -0
  131. package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
  132. package/dist/core/predefined/operators/map-optional.mjs +49 -1
  133. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  134. package/dist/core/predefined/operators/map-result-err.d.mts +47 -0
  135. package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
  136. package/dist/core/predefined/operators/map-result-err.mjs +49 -1
  137. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  138. package/dist/core/predefined/operators/map-result-ok.d.mts +47 -0
  139. package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
  140. package/dist/core/predefined/operators/map-result-ok.mjs +49 -1
  141. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  142. package/dist/core/predefined/operators/map-to.d.mts +40 -0
  143. package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
  144. package/dist/core/predefined/operators/map-to.mjs +43 -1
  145. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  146. package/dist/core/predefined/operators/pluck.d.mts +39 -0
  147. package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
  148. package/dist/core/predefined/operators/pluck.mjs +42 -1
  149. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  150. package/dist/core/predefined/operators/skip.d.mts +47 -0
  151. package/dist/core/predefined/operators/skip.d.mts.map +1 -1
  152. package/dist/core/predefined/operators/skip.mjs +47 -0
  153. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  154. package/dist/core/predefined/operators/take.d.mts +41 -0
  155. package/dist/core/predefined/operators/take.d.mts.map +1 -1
  156. package/dist/core/predefined/operators/take.mjs +41 -0
  157. package/dist/core/predefined/operators/take.mjs.map +1 -1
  158. package/dist/core/predefined/operators/unwrap-optional.d.mts +40 -0
  159. package/dist/core/predefined/operators/unwrap-optional.d.mts.map +1 -1
  160. package/dist/core/predefined/operators/unwrap-optional.mjs +42 -1
  161. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  162. package/dist/core/predefined/operators/unwrap-result-err.d.mts +40 -0
  163. package/dist/core/predefined/operators/unwrap-result-err.d.mts.map +1 -1
  164. package/dist/core/predefined/operators/unwrap-result-err.mjs +42 -1
  165. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  166. package/dist/core/predefined/operators/unwrap-result-ok.d.mts +40 -0
  167. package/dist/core/predefined/operators/unwrap-result-ok.d.mts.map +1 -1
  168. package/dist/core/predefined/operators/unwrap-result-ok.mjs +42 -1
  169. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  170. package/dist/core/types/id.d.mts +1 -1
  171. package/dist/core/types/id.d.mts.map +1 -1
  172. package/dist/core/types/index.d.mts +1 -0
  173. package/dist/core/types/index.d.mts.map +1 -1
  174. package/dist/core/types/observable-family.d.mts +8 -14
  175. package/dist/core/types/observable-family.d.mts.map +1 -1
  176. package/dist/core/types/observable.d.mts +3 -3
  177. package/dist/core/types/observable.d.mts.map +1 -1
  178. package/dist/core/types/timer.d.mts +2 -0
  179. package/dist/core/types/timer.d.mts.map +1 -0
  180. package/dist/core/types/timer.mjs +2 -0
  181. package/dist/core/types/timer.mjs.map +1 -0
  182. package/dist/core/utils/id-maker.d.mts +2 -2
  183. package/dist/core/utils/id-maker.d.mts.map +1 -1
  184. package/dist/core/utils/id-maker.mjs +3 -3
  185. package/dist/core/utils/id-maker.mjs.map +1 -1
  186. package/dist/core/utils/index.mjs +1 -1
  187. package/dist/entry-point.mjs +11 -14
  188. package/dist/entry-point.mjs.map +1 -1
  189. package/dist/globals.d.mts +0 -3
  190. package/dist/index.mjs +11 -14
  191. package/dist/index.mjs.map +1 -1
  192. package/dist/utils/collect-to-array.d.mts +3 -0
  193. package/dist/utils/collect-to-array.d.mts.map +1 -0
  194. package/dist/utils/collect-to-array.mjs +11 -0
  195. package/dist/utils/collect-to-array.mjs.map +1 -0
  196. package/dist/utils/create-boolean-state.d.mts +40 -0
  197. package/dist/utils/create-boolean-state.d.mts.map +1 -0
  198. package/dist/utils/create-boolean-state.mjs +53 -0
  199. package/dist/utils/create-boolean-state.mjs.map +1 -0
  200. package/dist/utils/create-event-emitter.d.mts +4 -4
  201. package/dist/utils/create-event-emitter.mjs +4 -4
  202. package/dist/utils/create-reducer.d.mts +10 -7
  203. package/dist/utils/create-reducer.d.mts.map +1 -1
  204. package/dist/utils/create-reducer.mjs +7 -7
  205. package/dist/utils/create-reducer.mjs.map +1 -1
  206. package/dist/utils/create-state.d.mts +8 -48
  207. package/dist/utils/create-state.d.mts.map +1 -1
  208. package/dist/utils/create-state.mjs +10 -60
  209. package/dist/utils/create-state.mjs.map +1 -1
  210. package/dist/utils/index.d.mts +2 -0
  211. package/dist/utils/index.d.mts.map +1 -1
  212. package/dist/utils/index.mjs +3 -1
  213. package/dist/utils/index.mjs.map +1 -1
  214. package/package.json +17 -11
  215. package/src/core/class/child-observable-class.mts +65 -9
  216. package/src/core/class/circular-dependency-comparison.test.mts +142 -0
  217. package/src/core/class/circular-dependency.test.mts +251 -0
  218. package/src/core/class/observable-base-class.mts +9 -9
  219. package/src/core/class/root-observable-class.mts +14 -10
  220. package/src/core/combine/combine.mts +13 -13
  221. package/src/core/combine/merge.mts +13 -14
  222. package/src/core/combine/zip.mts +26 -25
  223. package/src/core/create/{interval.mts → counter.mts} +32 -30
  224. package/src/core/create/from-abortable-promise.mts +83 -0
  225. package/src/core/create/from-promise.mts +10 -7
  226. package/src/core/create/from-subscribable.mts +4 -4
  227. package/src/core/create/index.mts +3 -3
  228. package/src/core/create/just.mts +43 -0
  229. package/src/core/create/source.mts +10 -14
  230. package/src/core/create/timer.mts +12 -11
  231. package/src/core/index.mts +0 -1
  232. package/src/core/operators/audit.mts +172 -0
  233. package/src/core/operators/debounce.mts +154 -0
  234. package/src/core/operators/filter.mts +9 -9
  235. package/src/core/operators/index.mts +4 -4
  236. package/src/core/operators/{map-with-index.mts → map.mts} +20 -20
  237. package/src/core/operators/merge-map.mts +59 -32
  238. package/src/core/operators/pairwise.mts +10 -10
  239. package/src/core/operators/scan.mts +10 -10
  240. package/src/core/operators/skip-if-no-change.mts +24 -12
  241. package/src/core/operators/skip-until.mts +9 -9
  242. package/src/core/operators/skip-while.mts +29 -12
  243. package/src/core/operators/switch-map.mts +60 -29
  244. package/src/core/operators/take-until.mts +9 -9
  245. package/src/core/operators/take-while.mts +19 -11
  246. package/src/core/operators/{throttle-time.mts → throttle.mts} +58 -38
  247. package/src/core/operators/with-buffered-from.mts +13 -13
  248. package/src/core/operators/with-current-value-from.mts +14 -13
  249. package/src/core/operators/with-initial-value.mts +9 -9
  250. package/src/core/predefined/operators/attach-index.mts +51 -2
  251. package/src/core/predefined/operators/index.mts +0 -1
  252. package/src/core/predefined/operators/map-optional.mts +48 -1
  253. package/src/core/predefined/operators/map-result-err.mts +48 -1
  254. package/src/core/predefined/operators/map-result-ok.mts +48 -1
  255. package/src/core/predefined/operators/map-to.mts +41 -1
  256. package/src/core/predefined/operators/pluck.mts +40 -1
  257. package/src/core/predefined/operators/skip.mts +47 -0
  258. package/src/core/predefined/operators/take.mts +41 -0
  259. package/src/core/predefined/operators/unwrap-optional.mts +41 -1
  260. package/src/core/predefined/operators/unwrap-result-err.mts +41 -1
  261. package/src/core/predefined/operators/unwrap-result-ok.mts +41 -1
  262. package/src/core/types/id.mts +1 -1
  263. package/src/core/types/index.mts +1 -0
  264. package/src/core/types/observable-family.mts +8 -24
  265. package/src/core/types/observable.mts +3 -3
  266. package/src/core/types/timer.mts +2 -0
  267. package/src/core/utils/id-maker.mts +4 -4
  268. package/src/globals.d.mts +0 -3
  269. package/src/utils/collect-to-array.mts +17 -0
  270. package/src/utils/create-boolean-state.mts +68 -0
  271. package/src/utils/create-event-emitter.mts +4 -4
  272. package/src/utils/create-reducer.mts +11 -8
  273. package/src/utils/create-state.mts +10 -75
  274. package/src/utils/index.mts +2 -0
  275. package/dist/core/create/from-array.d.mts +0 -39
  276. package/dist/core/create/from-array.d.mts.map +0 -1
  277. package/dist/core/create/from-array.mjs +0 -65
  278. package/dist/core/create/from-array.mjs.map +0 -1
  279. package/dist/core/create/interval.d.mts.map +0 -1
  280. package/dist/core/create/interval.mjs.map +0 -1
  281. package/dist/core/create/of.d.mts +0 -39
  282. package/dist/core/create/of.d.mts.map +0 -1
  283. package/dist/core/create/of.mjs +0 -63
  284. package/dist/core/create/of.mjs.map +0 -1
  285. package/dist/core/operators/audit-time.d.mts +0 -62
  286. package/dist/core/operators/audit-time.d.mts.map +0 -1
  287. package/dist/core/operators/audit-time.mjs +0 -109
  288. package/dist/core/operators/audit-time.mjs.map +0 -1
  289. package/dist/core/operators/debounce-time.d.mts +0 -51
  290. package/dist/core/operators/debounce-time.d.mts.map +0 -1
  291. package/dist/core/operators/debounce-time.mjs +0 -93
  292. package/dist/core/operators/debounce-time.mjs.map +0 -1
  293. package/dist/core/operators/map-with-index.d.mts.map +0 -1
  294. package/dist/core/operators/map-with-index.mjs.map +0 -1
  295. package/dist/core/operators/throttle-time.d.mts +0 -62
  296. package/dist/core/operators/throttle-time.d.mts.map +0 -1
  297. package/dist/core/operators/throttle-time.mjs +0 -107
  298. package/dist/core/operators/throttle-time.mjs.map +0 -1
  299. package/dist/core/predefined/operators/map.d.mts +0 -3
  300. package/dist/core/predefined/operators/map.d.mts.map +0 -1
  301. package/dist/core/predefined/operators/map.mjs +0 -8
  302. package/dist/core/predefined/operators/map.mjs.map +0 -1
  303. package/src/core/create/from-array.mts +0 -76
  304. package/src/core/create/of.mts +0 -73
  305. package/src/core/operators/audit-time.mts +0 -136
  306. package/src/core/operators/debounce-time.mts +0 -116
  307. package/src/core/predefined/operators/map.mts +0 -5
@@ -1,76 +0,0 @@
1
- import { Optional } from 'ts-data-forge';
2
- import { RootObservableClass } from '../class/index.mjs';
3
- import { type FromArrayObservable } from '../types/index.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
- * // Timeline:
16
- * //
17
- * // nums$ 1 2 3 | (completes)
18
- * //
19
- * // Explanation:
20
- * // - fromArray creates an observable from an array
21
- * // - Emits all values synchronously, then completes
22
- *
23
- * const nums$ = fromArray([1, 2, 3]);
24
- *
25
- * const mut_history: number[] = [];
26
- *
27
- * await new Promise<void>((resolve) => {
28
- * nums$.subscribe(
29
- * (x) => {
30
- * mut_history.push(x);
31
- * },
32
- * () => {
33
- * resolve();
34
- * },
35
- * );
36
- * });
37
- *
38
- * assert.deepStrictEqual(mut_history, [1, 2, 3]);
39
- * ```
40
- */
41
- export const fromArray = <A,>(
42
- values: readonly A[],
43
- startManually: boolean = false,
44
- ): FromArrayObservable<A> =>
45
- new FromArrayObservableClass<A>(values, startManually);
46
-
47
- class FromArrayObservableClass<A>
48
- extends RootObservableClass<A>
49
- implements FromArrayObservable<A>
50
- {
51
- readonly #values: readonly A[];
52
-
53
- constructor(values: readonly A[], startManually: boolean = false) {
54
- super({ initialValue: Optional.none });
55
-
56
- this.#values = values;
57
-
58
- if (!startManually) {
59
- setTimeout(() => {
60
- this.emit();
61
- }, 0);
62
- }
63
- }
64
-
65
- emit(): this {
66
- if (this.isCompleted) return this;
67
-
68
- for (const v of this.#values) {
69
- this.startUpdate(v);
70
- }
71
-
72
- this.complete();
73
-
74
- return this;
75
- }
76
- }
@@ -1,73 +0,0 @@
1
- import { Optional } from 'ts-data-forge';
2
- import { RootObservableClass } from '../class/index.mjs';
3
- import { type OfObservable } from '../types/index.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
- * // Timeline:
16
- * //
17
- * // num$ 42 | (completes immediately)
18
- * //
19
- * // Explanation:
20
- * // - of creates an observable that emits a single value, then completes
21
- * // - Useful for converting a static value into an observable
22
- *
23
- * const num$ = of(42);
24
- *
25
- * const mut_history: number[] = [];
26
- *
27
- * await new Promise<void>((resolve) => {
28
- * num$.subscribe(
29
- * (x) => {
30
- * mut_history.push(x);
31
- * },
32
- * () => {
33
- * resolve();
34
- * },
35
- * );
36
- * });
37
- *
38
- * assert.deepStrictEqual(mut_history, [42]);
39
- * ```
40
- */
41
- export const of = <A,>(
42
- value: A,
43
- startManually: boolean = false,
44
- ): OfObservable<A> => new OfObservableClass<A>(value, startManually);
45
-
46
- class OfObservableClass<A>
47
- extends RootObservableClass<A>
48
- implements OfObservable<A>
49
- {
50
- readonly #value: A;
51
-
52
- constructor(value: A, startManually: boolean = false) {
53
- super({ initialValue: Optional.none });
54
-
55
- this.#value = value;
56
-
57
- if (!startManually) {
58
- setTimeout(() => {
59
- this.emit();
60
- }, 0);
61
- }
62
- }
63
-
64
- emit(): this {
65
- if (this.isCompleted) return this;
66
-
67
- this.startUpdate(this.#value);
68
-
69
- this.complete();
70
-
71
- return this;
72
- }
73
- }
@@ -1,136 +0,0 @@
1
- import { Optional } from 'ts-data-forge';
2
- import { AsyncChildObservableClass } from '../class/index.mjs';
3
- import {
4
- type AuditTimeOperatorObservable,
5
- type KeepInitialValueOperator,
6
- type Observable,
7
- type UpdaterSymbol,
8
- } from '../types/index.mjs';
9
-
10
- /**
11
- * Emits the last value from the source observable after a specified time window has passed.
12
- * Unlike throttleTime which emits the first value, auditTime emits the last value.
13
- *
14
- * @template A - The type of values from the source
15
- * @param milliSeconds - The audit time window in milliseconds
16
- * @returns An operator that audits emissions from the observable
17
- *
18
- * @example
19
- * ```ts
20
- * // Timeline (1000ms audit):
21
- * //
22
- * // Time(ms) 0 100 200 300 400 ... 1000 1100
23
- * // input$ e1 e2 e3 e4 e5
24
- * // audited$ e5 (emitted at end of window)
25
- * // |-------1000ms window------> ^
26
- * //
27
- * // Explanation:
28
- * // - auditTime emits the LAST value received during each time window
29
- * // - Unlike throttleTime (which emits the FIRST value), audit emits the LAST
30
- * // - At 0-1000ms: e1-e5 are received
31
- * // - At 1000ms: e5 (the last value in the window) is emitted
32
- * // - Useful when you want the most recent value after a burst of events
33
- *
34
- * const input$ = source<number>();
35
- *
36
- * const audited$ = input$.pipe(auditTime(200));
37
- *
38
- * const mut_history: number[] = [];
39
- *
40
- * audited$.subscribe((value) => {
41
- * mut_history.push(value);
42
- * });
43
- *
44
- * input$.next(1);
45
- *
46
- * input$.next(2);
47
- *
48
- * input$.next(3);
49
- *
50
- * assert.deepStrictEqual(mut_history, []);
51
- *
52
- * await new Promise((resolve) => {
53
- * setTimeout(resolve, 250);
54
- * });
55
- *
56
- * assert.deepStrictEqual(mut_history, [3]);
57
- *
58
- * input$.next(4);
59
- *
60
- * input$.next(5);
61
- *
62
- * await new Promise((resolve) => {
63
- * setTimeout(resolve, 250);
64
- * });
65
- *
66
- * assert.deepStrictEqual(mut_history, [3, 5]);
67
- * ```
68
- */
69
- export const auditTime = <A,>(
70
- milliSeconds: number,
71
- ): KeepInitialValueOperator<A, A> =>
72
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
73
- ((parentObservable) =>
74
- new AuditTimeObservableClass(
75
- parentObservable,
76
- milliSeconds,
77
- )) as KeepInitialValueOperator<A, A>;
78
-
79
- class AuditTimeObservableClass<A>
80
- extends AsyncChildObservableClass<A, readonly [A]>
81
- implements AuditTimeOperatorObservable<A>
82
- {
83
- readonly #milliSeconds: number;
84
- #mut_timerId: TimerId | undefined;
85
- #mut_isSkipping: boolean;
86
-
87
- constructor(parentObservable: Observable<A>, milliSeconds: number) {
88
- super({
89
- parents: [parentObservable],
90
- initialValue: parentObservable.getSnapshot(),
91
- });
92
-
93
- this.#mut_isSkipping = false;
94
-
95
- this.#mut_timerId = undefined;
96
-
97
- this.#milliSeconds = milliSeconds;
98
- }
99
-
100
- override tryUpdate(updaterSymbol: UpdaterSymbol): void {
101
- const par = this.parents[0];
102
-
103
- if (
104
- par.updaterSymbol !== updaterSymbol ||
105
- Optional.isNone(par.getSnapshot()) ||
106
- this.#mut_isSkipping
107
- ) {
108
- return; // skip update
109
- }
110
-
111
- // set timer
112
- this.#mut_isSkipping = true;
113
-
114
- this.#mut_timerId = setTimeout(() => {
115
- const sn = par.getSnapshot();
116
-
117
- if (Optional.isNone(sn)) return;
118
-
119
- this.startUpdate(sn.value);
120
-
121
- this.#mut_isSkipping = false;
122
- }, this.#milliSeconds);
123
- }
124
-
125
- #resetTimer(): void {
126
- if (this.#mut_timerId !== undefined) {
127
- clearTimeout(this.#mut_timerId);
128
- }
129
- }
130
-
131
- override complete(): void {
132
- this.#resetTimer();
133
-
134
- super.complete();
135
- }
136
- }
@@ -1,116 +0,0 @@
1
- import { Optional } from 'ts-data-forge';
2
- import { AsyncChildObservableClass } from '../class/index.mjs';
3
- import {
4
- type DebounceTimeOperatorObservable,
5
- type KeepInitialValueOperator,
6
- type Observable,
7
- type UpdaterSymbol,
8
- } from '../types/index.mjs';
9
-
10
- /**
11
- * Delays emissions from the source observable until a specified time has passed without another emission.
12
- * Useful for handling user input events like typing or scrolling.
13
- *
14
- * @template A - The type of values from the source
15
- * @param milliSeconds - The debounce duration in milliseconds
16
- * @returns An operator that debounces the observable
17
- *
18
- * @example
19
- * ```ts
20
- * // Timeline (300ms debounce):
21
- * //
22
- * // Time(ms) 0 100 200 300 400 500 600 ... 900 1000
23
- * // input$ 'h' 'he' 'hel' 'hello'
24
- * // debounced$ 'hello' (emitted after 300ms silence)
25
- * //
26
- * // Explanation:
27
- * // - At 0ms: 'h' is emitted, timer starts
28
- * // - At 100ms: 'he' is emitted, timer resets
29
- * // - At 200ms: 'hel' is emitted, timer resets
30
- * // - At 300ms: 'hello' is emitted, timer resets
31
- * // - At 600ms: No new emission for 300ms, 'hello' is finally emitted
32
- *
33
- * const input$ = source<string>();
34
- *
35
- * const debounced$ = input$.pipe(debounceTime(300));
36
- *
37
- * const mut_history: string[] = [];
38
- *
39
- * debounced$.subscribe((value) => {
40
- * mut_history.push(value);
41
- * });
42
- *
43
- * input$.next('h');
44
- *
45
- * input$.next('he');
46
- *
47
- * input$.next('hel');
48
- *
49
- * input$.next('hello');
50
- *
51
- * await new Promise((resolve) => {
52
- * setTimeout(resolve, 400);
53
- * });
54
- *
55
- * assert.deepStrictEqual(mut_history, ['hello']);
56
- * ```
57
- */
58
- export const debounceTime = <A,>(
59
- milliSeconds: number,
60
- ): KeepInitialValueOperator<A, A> =>
61
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
62
- ((parentObservable) =>
63
- new DebounceTimeObservableClass(
64
- parentObservable,
65
- milliSeconds,
66
- )) as KeepInitialValueOperator<A, A>;
67
-
68
- class DebounceTimeObservableClass<A>
69
- extends AsyncChildObservableClass<A, readonly [A]>
70
- implements DebounceTimeOperatorObservable<A>
71
- {
72
- readonly #milliSeconds: number;
73
- #mut_timerId: TimerId | undefined;
74
-
75
- constructor(parentObservable: Observable<A>, milliSeconds: number) {
76
- super({
77
- parents: [parentObservable],
78
- initialValue: parentObservable.getSnapshot(),
79
- });
80
-
81
- this.#mut_timerId = undefined;
82
-
83
- this.#milliSeconds = milliSeconds;
84
- }
85
-
86
- override tryUpdate(updaterSymbol: UpdaterSymbol): void {
87
- const par = this.parents[0];
88
-
89
- const sn = par.getSnapshot();
90
-
91
- if (par.updaterSymbol !== updaterSymbol || Optional.isNone(sn)) {
92
- return; // skip update
93
- }
94
-
95
- this.#resetTimer();
96
-
97
- // set timer
98
- this.#mut_timerId = setTimeout(() => {
99
- if (Optional.isNone(sn)) return;
100
-
101
- this.startUpdate(sn.value);
102
- }, this.#milliSeconds);
103
- }
104
-
105
- #resetTimer(): void {
106
- if (this.#mut_timerId !== undefined) {
107
- clearTimeout(this.#mut_timerId);
108
- }
109
- }
110
-
111
- override complete(): void {
112
- this.#resetTimer();
113
-
114
- super.complete();
115
- }
116
- }
@@ -1,5 +0,0 @@
1
- import { mapWithIndex } from '../../operators/index.mjs';
2
- import { type KeepInitialValueOperator } from '../../types/index.mjs';
3
-
4
- export const map = <A, B>(mapFn: (x: A) => B): KeepInitialValueOperator<A, B> =>
5
- mapWithIndex(mapFn);