synstate 2.0.2 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/README.md +2 -2
  2. package/dist/core/base/create-child-observable.d.mts +65 -0
  3. package/dist/core/base/create-child-observable.d.mts.map +1 -0
  4. package/dist/core/base/create-child-observable.mjs +181 -0
  5. package/dist/core/base/create-child-observable.mjs.map +1 -0
  6. package/dist/core/base/create-observable-base.d.mts +82 -0
  7. package/dist/core/base/create-observable-base.d.mts.map +1 -0
  8. package/dist/core/base/create-observable-base.mjs +156 -0
  9. package/dist/core/base/create-observable-base.mjs.map +1 -0
  10. package/dist/core/base/create-root-observable.d.mts +37 -0
  11. package/dist/core/base/create-root-observable.d.mts.map +1 -0
  12. package/dist/core/base/create-root-observable.mjs +50 -0
  13. package/dist/core/base/create-root-observable.mjs.map +1 -0
  14. package/dist/core/base/index.d.mts +3 -0
  15. package/dist/core/base/index.d.mts.map +1 -0
  16. package/dist/core/base/index.mjs +3 -0
  17. package/dist/core/base/index.mjs.map +1 -0
  18. package/dist/core/combine/combine.d.mts.map +1 -1
  19. package/dist/core/combine/combine.mjs +132 -39
  20. package/dist/core/combine/combine.mjs.map +1 -1
  21. package/dist/core/combine/index.mjs +4 -4
  22. package/dist/core/combine/index.mjs.map +1 -1
  23. package/dist/core/combine/merge.d.mts.map +1 -1
  24. package/dist/core/combine/merge.mjs +78 -29
  25. package/dist/core/combine/merge.mjs.map +1 -1
  26. package/dist/core/combine/zip.d.mts.map +1 -1
  27. package/dist/core/combine/zip.mjs +124 -42
  28. package/dist/core/combine/zip.mjs.map +1 -1
  29. package/dist/core/create/counter.d.mts.map +1 -1
  30. package/dist/core/create/counter.mjs +82 -57
  31. package/dist/core/create/counter.mjs.map +1 -1
  32. package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
  33. package/dist/core/create/from-abortable-promise.mjs +62 -36
  34. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  35. package/dist/core/create/from-promise.d.mts.map +1 -1
  36. package/dist/core/create/from-promise.mjs +67 -25
  37. package/dist/core/create/from-promise.mjs.map +1 -1
  38. package/dist/core/create/from-subscribable.d.mts.map +1 -1
  39. package/dist/core/create/from-subscribable.mjs +72 -28
  40. package/dist/core/create/from-subscribable.mjs.map +1 -1
  41. package/dist/core/create/index.mjs +8 -8
  42. package/dist/core/create/index.mjs.map +1 -1
  43. package/dist/core/create/just.d.mts.map +1 -1
  44. package/dist/core/create/just.mjs +36 -12
  45. package/dist/core/create/just.mjs.map +1 -1
  46. package/dist/core/create/source.mjs +15 -20
  47. package/dist/core/create/source.mjs.map +1 -1
  48. package/dist/core/create/timer.d.mts.map +1 -1
  49. package/dist/core/create/timer.mjs +67 -44
  50. package/dist/core/create/timer.mjs.map +1 -1
  51. package/dist/core/index.d.mts +0 -1
  52. package/dist/core/index.d.mts.map +1 -1
  53. package/dist/core/index.mjs +6 -44
  54. package/dist/core/index.mjs.map +1 -1
  55. package/dist/core/operators/audit.d.mts.map +1 -1
  56. package/dist/core/operators/audit.mjs +127 -48
  57. package/dist/core/operators/audit.mjs.map +1 -1
  58. package/dist/core/operators/debounce.d.mts.map +1 -1
  59. package/dist/core/operators/debounce.mjs +115 -45
  60. package/dist/core/operators/debounce.mjs.map +1 -1
  61. package/dist/core/operators/filter.d.mts.map +1 -1
  62. package/dist/core/operators/filter.mjs +43 -32
  63. package/dist/core/operators/filter.mjs.map +1 -1
  64. package/dist/core/operators/index.mjs +18 -18
  65. package/dist/core/operators/index.mjs.map +1 -1
  66. package/dist/core/operators/map.d.mts.map +1 -1
  67. package/dist/core/operators/map.mjs +79 -38
  68. package/dist/core/operators/map.mjs.map +1 -1
  69. package/dist/core/operators/merge-map.d.mts.map +1 -1
  70. package/dist/core/operators/merge-map.mjs +131 -47
  71. package/dist/core/operators/merge-map.mjs.map +1 -1
  72. package/dist/core/operators/pairwise.d.mts.map +1 -1
  73. package/dist/core/operators/pairwise.mjs +79 -31
  74. package/dist/core/operators/pairwise.mjs.map +1 -1
  75. package/dist/core/operators/scan.d.mts.map +1 -1
  76. package/dist/core/operators/scan.mjs +64 -25
  77. package/dist/core/operators/scan.mjs.map +1 -1
  78. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  79. package/dist/core/operators/skip-if-no-change.mjs +93 -39
  80. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  81. package/dist/core/operators/skip-until.d.mts.map +1 -1
  82. package/dist/core/operators/skip-until.mjs +73 -32
  83. package/dist/core/operators/skip-until.mjs.map +1 -1
  84. package/dist/core/operators/skip-while.d.mts.map +1 -1
  85. package/dist/core/operators/skip-while.mjs +85 -38
  86. package/dist/core/operators/skip-while.mjs.map +1 -1
  87. package/dist/core/operators/switch-map.d.mts.map +1 -1
  88. package/dist/core/operators/switch-map.mjs +121 -40
  89. package/dist/core/operators/switch-map.mjs.map +1 -1
  90. package/dist/core/operators/take-until.d.mts.map +1 -1
  91. package/dist/core/operators/take-until.mjs +71 -36
  92. package/dist/core/operators/take-until.mjs.map +1 -1
  93. package/dist/core/operators/take-while.d.mts.map +1 -1
  94. package/dist/core/operators/take-while.mjs +103 -35
  95. package/dist/core/operators/take-while.mjs.map +1 -1
  96. package/dist/core/operators/throttle.d.mts.map +1 -1
  97. package/dist/core/operators/throttle.mjs +109 -47
  98. package/dist/core/operators/throttle.mjs.map +1 -1
  99. package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
  100. package/dist/core/operators/with-buffered-from.mjs +93 -46
  101. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  102. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  103. package/dist/core/operators/with-current-value-from.mjs +84 -34
  104. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  105. package/dist/core/operators/with-initial-value.d.mts.map +1 -1
  106. package/dist/core/operators/with-initial-value.mjs +68 -21
  107. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  108. package/dist/core/predefined/index.mjs +2 -12
  109. package/dist/core/predefined/index.mjs.map +1 -1
  110. package/dist/core/predefined/operators/attach-index.mjs +55 -7
  111. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  112. package/dist/core/predefined/operators/index.mjs +12 -12
  113. package/dist/core/predefined/operators/index.mjs.map +1 -1
  114. package/dist/core/predefined/operators/map-optional.mjs +48 -5
  115. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  116. package/dist/core/predefined/operators/map-result-err.mjs +48 -5
  117. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  118. package/dist/core/predefined/operators/map-result-ok.mjs +48 -5
  119. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  120. package/dist/core/predefined/operators/map-to.mjs +41 -6
  121. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  122. package/dist/core/predefined/operators/pluck.mjs +45 -7
  123. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  124. package/dist/core/predefined/operators/skip.mjs +49 -6
  125. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  126. package/dist/core/predefined/operators/take.mjs +42 -6
  127. package/dist/core/predefined/operators/take.mjs.map +1 -1
  128. package/dist/core/predefined/operators/unwrap-optional.mjs +43 -8
  129. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  130. package/dist/core/predefined/operators/unwrap-result-err.mjs +41 -5
  131. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  132. package/dist/core/predefined/operators/unwrap-result-ok.mjs +43 -8
  133. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  134. package/dist/core/types/id.mjs +2 -2
  135. package/dist/core/types/id.mjs.map +1 -1
  136. package/dist/core/types/index.mjs +7 -3
  137. package/dist/core/types/index.mjs.map +1 -1
  138. package/dist/core/types/observable-family.mjs +14 -2
  139. package/dist/core/types/observable-family.mjs.map +1 -1
  140. package/dist/core/types/observable-kind.mjs +2 -2
  141. package/dist/core/types/observable-kind.mjs.map +1 -1
  142. package/dist/core/types/observable.mjs +14 -6
  143. package/dist/core/types/observable.mjs.map +1 -1
  144. package/dist/core/types/timer.mjs +2 -2
  145. package/dist/core/types/timer.mjs.map +1 -1
  146. package/dist/core/types/types.mjs +9 -2
  147. package/dist/core/types/types.mjs.map +1 -1
  148. package/dist/core/utils/id-maker.mjs +10 -11
  149. package/dist/core/utils/id-maker.mjs.map +1 -1
  150. package/dist/core/utils/index.mjs +5 -5
  151. package/dist/core/utils/index.mjs.map +1 -1
  152. package/dist/core/utils/max-depth.mjs +7 -4
  153. package/dist/core/utils/max-depth.mjs.map +1 -1
  154. package/dist/core/utils/observable-utils.mjs +4 -7
  155. package/dist/core/utils/observable-utils.mjs.map +1 -1
  156. package/dist/core/utils/utils.mjs +32 -28
  157. package/dist/core/utils/utils.mjs.map +1 -1
  158. package/dist/entry-point.mjs +2 -49
  159. package/dist/entry-point.mjs.map +1 -1
  160. package/dist/index.mjs +3 -49
  161. package/dist/index.mjs.map +1 -1
  162. package/dist/utils/collect-to-array.mjs +8 -13
  163. package/dist/utils/collect-to-array.mjs.map +1 -1
  164. package/dist/utils/create-boolean-state.mjs +47 -22
  165. package/dist/utils/create-boolean-state.mjs.map +1 -1
  166. package/dist/utils/create-event-emitter.mjs +67 -19
  167. package/dist/utils/create-event-emitter.mjs.map +1 -1
  168. package/dist/utils/create-reducer.mjs +54 -16
  169. package/dist/utils/create-reducer.mjs.map +1 -1
  170. package/dist/utils/create-state.mjs +54 -27
  171. package/dist/utils/create-state.mjs.map +1 -1
  172. package/dist/utils/index.mjs +6 -6
  173. package/dist/utils/index.mjs.map +1 -1
  174. package/package.json +17 -19
  175. package/src/core/{class → base}/circular-dependency-comparison.test.mts +28 -18
  176. package/src/core/base/circular-dependency.test.mts +322 -0
  177. package/src/core/base/create-child-observable.mts +340 -0
  178. package/src/core/base/create-observable-base.mts +358 -0
  179. package/src/core/base/create-root-observable.mts +102 -0
  180. package/src/core/base/index.mts +2 -0
  181. package/src/core/{class/observable.class.test.mts → base/observable-base.test.mts} +25 -17
  182. package/src/core/combine/combine.mts +51 -53
  183. package/src/core/combine/merge.mts +21 -23
  184. package/src/core/combine/zip.mts +54 -58
  185. package/src/core/create/counter.mts +42 -59
  186. package/src/core/create/from-abortable-promise.mts +38 -45
  187. package/src/core/create/from-promise.mts +25 -28
  188. package/src/core/create/from-subscribable.mts +23 -27
  189. package/src/core/create/just.mts +5 -4
  190. package/src/core/create/source.mts +11 -17
  191. package/src/core/create/timer.mts +32 -47
  192. package/src/core/index.mts +0 -1
  193. package/src/core/operators/audit.mts +43 -57
  194. package/src/core/operators/debounce.mts +35 -45
  195. package/src/core/operators/filter.mts +31 -39
  196. package/src/core/operators/map.mts +32 -40
  197. package/src/core/operators/merge-map.mts +44 -59
  198. package/src/core/operators/pairwise.mts +30 -33
  199. package/src/core/operators/scan.mts +24 -35
  200. package/src/core/operators/skip-if-no-change.mts +31 -36
  201. package/src/core/operators/skip-until.mts +32 -35
  202. package/src/core/operators/skip-while.mts +31 -40
  203. package/src/core/operators/switch-map.mts +36 -48
  204. package/src/core/operators/take-until.mts +31 -29
  205. package/src/core/operators/take-while.mts +33 -41
  206. package/src/core/operators/throttle.mts +37 -51
  207. package/src/core/operators/with-buffered-from.mts +35 -30
  208. package/src/core/operators/with-current-value-from.mts +23 -28
  209. package/src/core/operators/with-initial-value.mts +21 -22
  210. package/dist/core/class/child-observable-class.d.mts +0 -39
  211. package/dist/core/class/child-observable-class.d.mts.map +0 -1
  212. package/dist/core/class/child-observable-class.mjs +0 -173
  213. package/dist/core/class/child-observable-class.mjs.map +0 -1
  214. package/dist/core/class/index.d.mts +0 -4
  215. package/dist/core/class/index.d.mts.map +0 -1
  216. package/dist/core/class/index.mjs +0 -4
  217. package/dist/core/class/index.mjs.map +0 -1
  218. package/dist/core/class/observable-base-class.d.mts +0 -28
  219. package/dist/core/class/observable-base-class.d.mts.map +0 -1
  220. package/dist/core/class/observable-base-class.mjs +0 -120
  221. package/dist/core/class/observable-base-class.mjs.map +0 -1
  222. package/dist/core/class/root-observable-class.d.mts +0 -14
  223. package/dist/core/class/root-observable-class.d.mts.map +0 -1
  224. package/dist/core/class/root-observable-class.mjs +0 -43
  225. package/dist/core/class/root-observable-class.mjs.map +0 -1
  226. package/src/core/class/child-observable-class.mts +0 -286
  227. package/src/core/class/circular-dependency.test.mts +0 -251
  228. package/src/core/class/index.mts +0 -3
  229. package/src/core/class/observable-base-class.mts +0 -187
  230. package/src/core/class/root-observable-class.mts +0 -73
@@ -1,42 +1,123 @@
1
1
  import { Optional } from 'ts-data-forge';
2
- import { AsyncChildObservableClass } from '../class/child-observable-class.mjs';
3
- import '../utils/id-maker.mjs';
4
-
5
- const switchMap = (mapToObservable) => (parentObservable) => new SwitchMapObservableClass(parentObservable, mapToObservable);
6
- class SwitchMapObservableClass extends AsyncChildObservableClass {
7
- #mapToObservable;
8
- #mut_observable;
9
- #mut_subscription;
10
- constructor(parentObservable, mapToObservable) {
11
- super({
12
- parents: [parentObservable],
13
- initialValue: Optional.none
14
- });
15
- this.#mapToObservable = mapToObservable;
16
- this.#mut_observable = void 0;
17
- this.#mut_subscription = void 0;
18
- }
19
- tryUpdate(updateToken) {
20
- const par = this.parents[0];
21
- const sn = par.getSnapshot();
22
- if (par.updateToken !== updateToken || Optional.isNone(sn)) {
23
- return;
24
- }
25
- this.#mut_observable?.complete();
26
- this.#mut_subscription?.unsubscribe();
27
- const observable = this.#mapToObservable(sn.value);
28
- this.#mut_observable = observable;
29
- const subscription = observable.subscribe((curr) => {
30
- this.startUpdate(curr);
2
+ import { createAsyncChildObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+ export const switchMap = (mapToObservable) => (parentObservable) => createSwitchMapObservable(parentObservable, mapToObservable);
97
+ const createSwitchMapObservable = (parentObservable, mapToObservable) => {
98
+ let mut_observable = undefined;
99
+ let mut_subscription = undefined;
100
+ return createAsyncChildObservable({
101
+ parents: [parentObservable],
102
+ initialValue: Optional.none,
103
+ onComplete: () => {
104
+ mut_subscription?.unsubscribe();
105
+ mut_observable?.complete();
106
+ },
107
+ }, ({ startUpdate }) => (updateToken) => {
108
+ const sn = parentObservable.getSnapshot();
109
+ if (parentObservable.updateToken !== updateToken ||
110
+ Optional.isNone(sn)) {
111
+ return;
112
+ }
113
+ mut_observable?.complete();
114
+ mut_subscription?.unsubscribe();
115
+ const observable = mapToObservable(sn.value);
116
+ mut_observable = observable;
117
+ const subscription = observable.subscribe((curr) => {
118
+ startUpdate(curr);
119
+ });
120
+ mut_subscription = subscription;
31
121
  });
32
- this.#mut_subscription = subscription;
33
- }
34
- complete() {
35
- this.#mut_subscription?.unsubscribe();
36
- this.#mut_observable?.complete();
37
- super.complete();
38
- }
39
- }
40
-
41
- export { switchMap };
42
- //# sourceMappingURL=switch-map.mjs.map
122
+ };
123
+ //# sourceMappingURL=switch-map.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"switch-map.mjs","sources":["../../../src/core/operators/switch-map.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { AsyncChildObservableClass } from '../class/index.mjs';\nimport {\n type DropInitialValueOperator,\n type Observable,\n type Subscription,\n type SwitchMapOperatorObservable,\n type UpdateToken,\n} from '../types/index.mjs';\n\n/**\n * Projects each source value to an observable, subscribes to it, and emits its values.\n * When a new value arrives from the source, the previous inner observable is unsubscribed.\n *\n * @template A - The type of values from the source\n * @template B - The type of values from the projected observable\n * @param mapToObservable - A function that maps each source value to an observable\n * @returns An operator that switches to new observables\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // input$ A B C\n * // inner A A1 A2 A3\n * // inner B B1 B2 (switched!)\n * // inner C C1 C2 C3\n * // result$ A1 A2 A3 B1 B2 C1 C2 C3\n * //\n * // Explanation:\n * // - switchMap creates an inner observable for each source value\n * // - When a new source value arrives, the previous inner is unsubscribed\n * // - A's inner completes normally (all 3 values emitted)\n * // - B's inner is interrupted by C (only 2 values emitted)\n * // - C's inner completes normally (all 3 values emitted)\n *\n * const input$ = source<string>();\n *\n * const result$ = input$.pipe(\n * switchMap((letter) => {\n * const inner$ = source<string>();\n *\n * setTimeout(() => {\n * inner$.next(`${letter}1`);\n * }, 10);\n *\n * setTimeout(() => {\n * inner$.next(`${letter}2`);\n * }, 110);\n *\n * setTimeout(() => {\n * inner$.next(`${letter}3`);\n * }, 210);\n *\n * return inner$;\n * }),\n * );\n *\n * const valueHistory: string[] = [];\n *\n * result$.subscribe((value) => {\n * valueHistory.push(value);\n * });\n *\n * const sleep = (ms: number): Promise<void> =>\n * new Promise((resolve) => {\n * setTimeout(resolve, ms);\n * });\n *\n * // Emit A - inner emits A1, A2, A3 at 10ms, 110ms, 210ms\n * input$.next('A');\n *\n * await sleep(250);\n *\n * assert.deepStrictEqual(valueHistory, ['A1', 'A2', 'A3']);\n *\n * // Emit B - inner starts emitting B1, B2 at 10ms, 110ms\n * input$.next('B');\n *\n * await sleep(150);\n *\n * assert.deepStrictEqual(valueHistory, ['A1', 'A2', 'A3', 'B1', 'B2']);\n *\n * // Emit C - switches away from B (B3 cancelled), C's inner starts\n * input$.next('C');\n *\n * await sleep(250);\n *\n * assert.deepStrictEqual(valueHistory, [\n * 'A1',\n * 'A2',\n * 'A3',\n * 'B1',\n * 'B2',\n * 'C1',\n * 'C2',\n * 'C3',\n * ]);\n * ```\n *\n * @note To improve code readability, consider using `createState` instead of `switchMap`,\n * subscribe to `parentObservable` and call `setState` within it.\n */\nexport const switchMap =\n <A, B>(\n mapToObservable: (curr: A) => Observable<B>,\n ): DropInitialValueOperator<A, B> =>\n (parentObservable) =>\n new SwitchMapObservableClass(parentObservable, mapToObservable);\n\nclass SwitchMapObservableClass<A, B>\n extends AsyncChildObservableClass<B, readonly [A]>\n implements SwitchMapOperatorObservable<A, B>\n{\n readonly #mapToObservable: (curr: A) => Observable<B>;\n #mut_observable: Observable<B> | undefined;\n #mut_subscription: Subscription | undefined;\n\n constructor(\n parentObservable: Observable<A>,\n mapToObservable: (curr: A) => Observable<B>,\n ) {\n super({\n parents: [parentObservable],\n initialValue: Optional.none,\n });\n\n this.#mapToObservable = mapToObservable;\n\n this.#mut_observable = undefined;\n\n this.#mut_subscription = undefined;\n }\n\n override tryUpdate(updateToken: UpdateToken): void {\n const par = this.parents[0];\n\n const sn = par.getSnapshot();\n\n if (par.updateToken !== updateToken || Optional.isNone(sn)) {\n return; // skip update\n }\n\n this.#mut_observable?.complete();\n\n this.#mut_subscription?.unsubscribe();\n\n const observable = this.#mapToObservable(sn.value);\n\n this.#mut_observable = observable;\n\n const subscription = observable.subscribe((curr) => {\n this.startUpdate(curr);\n });\n\n this.#mut_subscription = subscription;\n }\n\n override complete(): void {\n this.#mut_subscription?.unsubscribe();\n\n this.#mut_observable?.complete();\n\n super.complete();\n }\n}\n"],"names":[],"mappings":";;;;AAuGO,MAAM,SAAA,GACX,CACE,eAAA,KAEF,CAAC,qBACC,IAAI,wBAAA,CAAyB,kBAAkB,eAAe;AAElE,MAAM,iCACI,yBAAA,CAEV;AAAA,EACW,gBAAA;AAAA,EACT,eAAA;AAAA,EACA,iBAAA;AAAA,EAEA,WAAA,CACE,kBACA,eAAA,EACA;AACA,IAAA,KAAA,CAAM;AAAA,MACJ,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,MAC1B,cAAc,QAAA,CAAS;AAAA,KACxB,CAAA;AAED,IAAA,IAAA,CAAK,gBAAA,GAAmB,eAAA;AAExB,IAAA,IAAA,CAAK,eAAA,GAAkB,MAAA;AAEvB,IAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA;AAAA,EAC3B;AAAA,EAES,UAAU,WAAA,EAAgC;AACjD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAE1B,IAAA,MAAM,EAAA,GAAK,IAAI,WAAA,EAAY;AAE3B,IAAA,IAAI,IAAI,WAAA,KAAgB,WAAA,IAAe,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA,EAAG;AAC1D,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,iBAAiB,QAAA,EAAS;AAE/B,IAAA,IAAA,CAAK,mBAAmB,WAAA,EAAY;AAEpC,IAAA,MAAM,UAAA,GAAa,IAAA,CAAK,gBAAA,CAAiB,EAAA,CAAG,KAAK,CAAA;AAEjD,IAAA,IAAA,CAAK,eAAA,GAAkB,UAAA;AAEvB,IAAA,MAAM,YAAA,GAAe,UAAA,CAAW,SAAA,CAAU,CAAC,IAAA,KAAS;AAClD,MAAA,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IACvB,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,iBAAA,GAAoB,YAAA;AAAA,EAC3B;AAAA,EAES,QAAA,GAAiB;AACxB,IAAA,IAAA,CAAK,mBAAmB,WAAA,EAAY;AAEpC,IAAA,IAAA,CAAK,iBAAiB,QAAA,EAAS;AAE/B,IAAA,KAAA,CAAM,QAAA,EAAS;AAAA,EACjB;AACF;;;;"}
1
+ {"version":3,"file":"switch-map.mjs","sourceRoot":"","sources":["../../../src/core/operators/switch-map.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAQ/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4FG;AACH,MAAM,CAAC,MAAM,SAAS,GACpB,CACE,eAA2C,EACX,EAAE,CACpC,CAAC,gBAAgB,EAAE,EAAE,CACnB,yBAAyB,CAAC,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAEjE,MAAM,yBAAyB,GAAG,CAChC,gBAA+B,EAC/B,eAA2C,EACR,EAAE;IACrC,IAAI,cAAc,GAA8B,SAAS,CAAC;IAE1D,IAAI,gBAAgB,GAA6B,SAAS,CAAC;IAE3D,OAAO,0BAA0B,CAC/B;QACE,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,YAAY,EAAE,QAAQ,CAAC,IAAI;QAC3B,UAAU,EAAE,GAAG,EAAE;YACf,gBAAgB,EAAE,WAAW,EAAE,CAAC;YAEhC,cAAc,EAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;KACF,EACD,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAClB,CAAC,WAAW,EAAE,EAAE;QACd,MAAM,EAAE,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE1C,IACE,gBAAgB,CAAC,WAAW,KAAK,WAAW;YAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EACnB,CAAC;YACD,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,cAAc,EAAE,QAAQ,EAAE,CAAC;QAE3B,gBAAgB,EAAE,WAAW,EAAE,CAAC;QAEhC,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAE7C,cAAc,GAAG,UAAU,CAAC;QAE5B,MAAM,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE;YACjD,WAAW,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,gBAAgB,GAAG,YAAY,CAAC;IAClC,CAAC,CACJ,CAAC;AACJ,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"take-until.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-until.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAGhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,YACf,UAAU,CAAC,OAAO,CAAC,KAC5B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
1
+ {"version":3,"file":"take-until.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-until.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAC7B,KAAK,UAAU,EAEhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,YACf,UAAU,CAAC,OAAO,CAAC,KAC5B,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
@@ -1,38 +1,73 @@
1
1
  import { Optional } from 'ts-data-forge';
2
- import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
3
- import '../utils/id-maker.mjs';
4
-
5
- const takeUntil = (notifier) => (
6
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
7
- ((parentObservable) => new TakeUntilObservableClass(
8
- parentObservable,
9
- notifier
10
- ))
11
- );
12
- class TakeUntilObservableClass extends SyncChildObservableClass {
13
- constructor(parentObservable, notifier) {
14
- super({
15
- parents: [parentObservable],
16
- initialValue: parentObservable.getSnapshot()
2
+ import { createSyncChildObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+ export const takeUntil = (notifier) =>
52
+
53
+ ((parentObservable) => createTakeUntilObservable(parentObservable, notifier));
54
+ const createTakeUntilObservable = (parentObservable, notifier) => {
55
+ const observable = createSyncChildObservable({
56
+ parents: [parentObservable],
57
+ initialValue: parentObservable.getSnapshot(),
58
+ }, ({ setNext }) => (updateToken) => {
59
+ const sn = parentObservable.getSnapshot();
60
+ if (parentObservable.updateToken !== updateToken ||
61
+ Optional.isNone(sn)) {
62
+ return;
63
+ }
64
+ setNext(sn.value, updateToken);
65
+ });
66
+ notifier.subscribe(() => {
67
+ observable.complete();
68
+ }, () => {
69
+ observable.complete();
17
70
  });
18
- notifier.subscribe(
19
- () => {
20
- this.complete();
21
- },
22
- () => {
23
- this.complete();
24
- }
25
- );
26
- }
27
- tryUpdate(updateToken) {
28
- const par = this.parents[0];
29
- const sn = par.getSnapshot();
30
- if (par.updateToken !== updateToken || Optional.isNone(sn)) {
31
- return;
32
- }
33
- this.setNext(sn.value, updateToken);
34
- }
35
- }
36
-
37
- export { takeUntil };
38
- //# sourceMappingURL=take-until.mjs.map
71
+ return observable;
72
+ };
73
+ //# sourceMappingURL=take-until.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"take-until.mjs","sources":["../../../src/core/operators/take-until.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { SyncChildObservableClass } from '../class/index.mjs';\nimport {\n type KeepInitialValueOperator,\n type Observable,\n type TakeUntilOperatorObservable,\n type UpdateToken,\n} from '../types/index.mjs';\n\n/**\n * Emits values from the source until the notifier observable emits.\n * When the notifier emits, this observable completes.\n *\n * @template A - The type of values from the source\n * @param notifier - An observable that signals when to complete\n * @returns An operator that takes values until notifier emits\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // num$ 1 2 stop 3 (ignored)\n * // stopNotifier X\n * // limited$ 1 2 |------- (completed)\n * //\n * // Explanation:\n * // - takeUntil completes the observable when the notifier emits\n * // - After stop() is called, no further values are emitted\n * // - Useful for cleanup and cancellation patterns\n *\n * const num$ = source<number>();\n *\n * const [stopNotifier, stop_] = createEventEmitter();\n *\n * const limited$ = num$.pipe(takeUntil(stopNotifier));\n *\n * const valueHistory: number[] = [];\n *\n * limited$.subscribe((x) => {\n * valueHistory.push(x);\n * });\n *\n * num$.next(1); // logs: 1\n *\n * assert.deepStrictEqual(valueHistory, [1]);\n *\n * num$.next(2); // logs: 2\n *\n * assert.deepStrictEqual(valueHistory, [1, 2]);\n *\n * stop_();\n *\n * num$.next(3); // nothing logged (completed)\n *\n * assert.deepStrictEqual(valueHistory, [1, 2]);\n * ```\n */\nexport const takeUntil = <A,>(\n notifier: Observable<unknown>,\n): KeepInitialValueOperator<A, A> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n ((parentObservable) =>\n new TakeUntilObservableClass(\n parentObservable,\n notifier,\n )) as KeepInitialValueOperator<A, A>;\n\nclass TakeUntilObservableClass<A>\n extends SyncChildObservableClass<A, readonly [A]>\n implements TakeUntilOperatorObservable<A>\n{\n constructor(parentObservable: Observable<A>, notifier: Observable<unknown>) {\n super({\n parents: [parentObservable],\n initialValue: parentObservable.getSnapshot(),\n });\n\n notifier.subscribe(\n () => {\n this.complete();\n },\n () => {\n this.complete();\n },\n );\n }\n\n override tryUpdate(updateToken: UpdateToken): void {\n const par = this.parents[0];\n\n const sn = par.getSnapshot();\n\n if (par.updateToken !== updateToken || Optional.isNone(sn)) {\n return; // skip update\n }\n\n this.setNext(sn.value, updateToken);\n }\n}\n"],"names":[],"mappings":";;;;AAyDO,MAAM,YAAY,CACvB,QAAA;AAAA;AAAA,GAGC,CAAC,qBACA,IAAI,wBAAA;AAAA,IACF,gBAAA;AAAA,IACA;AAAA,GACF;AAAA;AAEJ,MAAM,iCACI,wBAAA,CAEV;AAAA,EACE,WAAA,CAAY,kBAAiC,QAAA,EAA+B;AAC1E,IAAA,KAAA,CAAM;AAAA,MACJ,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,MAC1B,YAAA,EAAc,iBAAiB,WAAA;AAAY,KAC5C,CAAA;AAED,IAAA,QAAA,CAAS,SAAA;AAAA,MACP,MAAM;AACJ,QAAA,IAAA,CAAK,QAAA,EAAS;AAAA,MAChB,CAAA;AAAA,MACA,MAAM;AACJ,QAAA,IAAA,CAAK,QAAA,EAAS;AAAA,MAChB;AAAA,KACF;AAAA,EACF;AAAA,EAES,UAAU,WAAA,EAAgC;AACjD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAE1B,IAAA,MAAM,EAAA,GAAK,IAAI,WAAA,EAAY;AAE3B,IAAA,IAAI,IAAI,WAAA,KAAgB,WAAA,IAAe,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA,EAAG;AAC1D,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,WAAW,CAAA;AAAA,EACpC;AACF;;;;"}
1
+ {"version":3,"file":"take-until.mjs","sourceRoot":"","sources":["../../../src/core/operators/take-until.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAO9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,CACvB,QAA6B,EACG,EAAE;AAClC,oEAAoE;AACpE,CAAC,CAAC,gBAAgB,EAAE,EAAE,CACpB,yBAAyB,CACvB,gBAAgB,EAChB,QAAQ,CACT,CAAmC,CAAC;AAEzC,MAAM,yBAAyB,GAAG,CAChC,gBAA+B,EAC/B,QAA6B,EACG,EAAE;IAClC,MAAM,UAAU,GAAG,yBAAyB,CAC1C;QACE,OAAO,EAAE,CAAC,gBAAgB,CAAC;QAC3B,YAAY,EAAE,gBAAgB,CAAC,WAAW,EAAE;KAC7C,EACD,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACd,CAAC,WAAW,EAAE,EAAE;QACd,MAAM,EAAE,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE1C,IACE,gBAAgB,CAAC,WAAW,KAAK,WAAW;YAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EACnB,CAAC;YACD,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACjC,CAAC,CACJ,CAAC;IAEF,QAAQ,CAAC,SAAS,CAChB,GAAG,EAAE;QACH,UAAU,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC,EACD,GAAG,EAAE;QACH,UAAU,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC,CACF,CAAC;IAEF,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"take-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-while.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAIT,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,KAAK,wBAAwB,EAK9B,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,aACW,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,OAAO,KACrD,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAE2B,CAAC"}
1
+ {"version":3,"file":"take-while.d.mts","sourceRoot":"","sources":["../../../src/core/operators/take-while.mts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EAIT,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAG5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,eAAO,MAAM,SAAS,GACnB,CAAC,aACW,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,CAAC,KAAK,OAAO,KACrD,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAEwB,CAAC"}
@@ -1,35 +1,103 @@
1
- import { pipe, Optional, asSafeUint, SafeUint } from 'ts-data-forge';
2
- import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
3
- import '../utils/id-maker.mjs';
4
-
5
- const takeWhile = (predicate) => (parentObservable) => new TakeWhileObservableClass(parentObservable, predicate);
6
- class TakeWhileObservableClass extends SyncChildObservableClass {
7
- #predicate;
8
- #mut_index;
9
- constructor(parentObservable, predicate) {
10
- super({
11
- parents: [parentObservable],
12
- initialValue: pipe(parentObservable.getSnapshot()).map(
13
- (par) => Optional.isNone(par) ? Optional.none : predicate(par.value, -1) ? par : Optional.none
14
- ).value
15
- });
16
- this.#mut_index = -1;
17
- this.#predicate = predicate;
18
- }
19
- tryUpdate(updateToken) {
20
- const par = this.parents[0];
21
- const sn = par.getSnapshot();
22
- if (par.updateToken !== updateToken || Optional.isNone(sn)) {
23
- return;
24
- }
25
- this.#mut_index = this.#mut_index === -1 ? asSafeUint(0) : SafeUint.add(1, this.#mut_index);
26
- if (this.#predicate(sn.value, this.#mut_index)) {
27
- this.setNext(sn.value, updateToken);
28
- } else {
29
- this.complete();
30
- }
31
- }
32
- }
33
-
34
- export { takeWhile };
35
- //# sourceMappingURL=take-while.mjs.map
1
+ import { Optional, SafeUint, asSafeUint, pipe, } from 'ts-data-forge';
2
+ import { createSyncChildObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+ export const takeWhile = (predicate) => (parentObservable) => createTakeWhileObservable(parentObservable, predicate);
61
+
62
+ const createTakeWhileObservable = (parentObservable, predicate) => createSyncChildObservable({
63
+ parents: [parentObservable],
64
+ initialValue: pipe(parentObservable.getSnapshot()).map((par) => Optional.isNone(par)
65
+ ? Optional.none
66
+ : predicate(par.value, -1)
67
+ ? par
68
+ : Optional.none).value,
69
+ }, ({ setNext, complete }) => {
70
+ let mut_index = -1;
71
+ return (updateToken) => {
72
+ const sn = parentObservable.getSnapshot();
73
+ if (parentObservable.updateToken !== updateToken ||
74
+ Optional.isNone(sn)) {
75
+ return;
76
+ }
77
+ mut_index =
78
+ mut_index === -1 ? asSafeUint(0) : SafeUint.add(1, mut_index);
79
+ if (predicate(sn.value, mut_index)) {
80
+ setNext(sn.value, updateToken);
81
+ }
82
+ else {
83
+ complete();
84
+ }
85
+ };
86
+ });
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+ //# sourceMappingURL=take-while.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"take-while.mjs","sources":["../../../src/core/operators/take-while.mts"],"sourcesContent":["import {\n Optional,\n SafeUint,\n asSafeUint,\n expectType,\n pipe,\n} from 'ts-data-forge';\nimport { SyncChildObservableClass } from '../class/index.mjs';\nimport { source } from '../create/index.mjs';\nimport {\n type DropInitialValueOperator,\n type InitializedObservable,\n type Observable,\n type TakeWhileOperatorObservable,\n type UpdateToken,\n} from '../types/index.mjs';\nimport { withInitialValue } from './with-initial-value.mjs';\n\n/**\n * Emits values from the source observable while the predicate returns true.\n * Completes immediately when the predicate returns false.\n *\n * @template A - The type of values from the source\n * @param predicate - Function to test each value\n * @returns An operator that takes values while the predicate is true\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // num$ 1 2 3 4 5 6 1 2 (ignored)\n * // taken$ 1 2 3 4 | (completes)\n * //\n * // Explanation:\n * // - takeWhile emits values while the predicate returns true\n * // - Completes immediately when the predicate returns false\n * // - No further values are emitted after completion\n *\n * const num$ = source<number>();\n *\n * const taken$ = num$.pipe(takeWhile((x) => x < 5));\n *\n * const valueHistory: number[] = [];\n *\n * taken$.subscribe((x) => {\n * valueHistory.push(x);\n * });\n *\n * num$.next(1); // logs: 1\n *\n * assert.deepStrictEqual(valueHistory, [1]);\n *\n * num$.next(2); // logs: 2\n *\n * num$.next(3); // logs: 3\n *\n * num$.next(4); // logs: 4\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);\n *\n * num$.next(5); // nothing logged (completes)\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);\n *\n * num$.next(6); // nothing logged (already completed)\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);\n *\n * num$.next(1); // logs: 1\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3, 4]);\n * ```\n */\nexport const takeWhile =\n <A,>(\n predicate: (value: A, index: SafeUint | -1) => boolean,\n ): DropInitialValueOperator<A, A> =>\n (parentObservable) =>\n new TakeWhileObservableClass(parentObservable, predicate);\n\n/* implementation */\n\nclass TakeWhileObservableClass<A>\n extends SyncChildObservableClass<A, readonly [A]>\n implements TakeWhileOperatorObservable<A>\n{\n readonly #predicate: (value: A, index: SafeUint | -1) => boolean;\n #mut_index: SafeUint | -1;\n\n constructor(\n parentObservable: Observable<A>,\n predicate: (value: A, index: SafeUint | -1) => boolean,\n ) {\n super({\n parents: [parentObservable],\n initialValue: pipe(parentObservable.getSnapshot()).map((par) =>\n Optional.isNone(par)\n ? Optional.none\n : predicate(par.value, -1)\n ? par\n : Optional.none,\n ).value,\n });\n\n this.#mut_index = -1;\n\n this.#predicate = predicate;\n }\n\n override tryUpdate(updateToken: UpdateToken): void {\n const par = this.parents[0];\n\n const sn = par.getSnapshot();\n\n if (par.updateToken !== updateToken || Optional.isNone(sn)) {\n return; // skip update\n }\n\n this.#mut_index =\n this.#mut_index === -1 ? asSafeUint(0) : SafeUint.add(1, this.#mut_index);\n\n if (this.#predicate(sn.value, this.#mut_index)) {\n this.setNext(sn.value, updateToken);\n } else {\n this.complete();\n }\n }\n}\n\nif (import.meta.vitest !== undefined) {\n test('type test', () => {\n expect(1).toBe(1); // dummy\n });\n\n {\n const s: Observable<number> = source<number>();\n\n const _d1 = s.pipe(takeWhile((_, index) => index + 1 <= 3));\n\n expectType<typeof _d1, Observable<number>>('=');\n }\n\n {\n const s = source<number>();\n\n const m: InitializedObservable<number> = s.pipe(withInitialValue(0));\n\n const _d = m.pipe(takeWhile((_, index) => index + 1 <= 3));\n\n expectType<typeof _d, Observable<number>>('=');\n }\n}\n"],"names":[],"mappings":";;;;AAyEO,MAAM,SAAA,GACX,CACE,SAAA,KAEF,CAAC,qBACC,IAAI,wBAAA,CAAyB,kBAAkB,SAAS;AAI5D,MAAM,iCACI,wBAAA,CAEV;AAAA,EACW,UAAA;AAAA,EACT,UAAA;AAAA,EAEA,WAAA,CACE,kBACA,SAAA,EACA;AACA,IAAA,KAAA,CAAM;AAAA,MACJ,OAAA,EAAS,CAAC,gBAAgB,CAAA;AAAA,MAC1B,YAAA,EAAc,IAAA,CAAK,gBAAA,CAAiB,WAAA,EAAa,CAAA,CAAE,GAAA;AAAA,QAAI,CAAC,GAAA,KACtD,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,GACf,QAAA,CAAS,IAAA,GACT,SAAA,CAAU,GAAA,CAAI,KAAA,EAAO,EAAE,CAAA,GACrB,MACA,QAAA,CAAS;AAAA,OACjB,CAAE;AAAA,KACH,CAAA;AAED,IAAA,IAAA,CAAK,UAAA,GAAa,EAAA;AAElB,IAAA,IAAA,CAAK,UAAA,GAAa,SAAA;AAAA,EAAA;AACpB,EAES,UAAU,WAAA,EAAgC;AACjD,IAAA,MAAM,GAAA,GAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA;AAE1B,IAAA,MAAM,EAAA,GAAK,IAAI,WAAA,EAAY;AAE3B,IAAA,IAAI,IAAI,WAAA,KAAgB,WAAA,IAAe,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA,EAAG;AAC1D,MAAA;AAAA,IAAA;AAGF,IAAA,IAAA,CAAK,UAAA,GACH,IAAA,CAAK,UAAA,KAAe,EAAA,GAAK,UAAA,CAAW,CAAC,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,UAAU,CAAA;AAE1E,IAAA,IAAI,KAAK,UAAA,CAAW,EAAA,CAAG,KAAA,EAAO,IAAA,CAAK,UAAU,CAAA,EAAG;AAC9C,MAAA,IAAA,CAAK,OAAA,CAAQ,EAAA,CAAG,KAAA,EAAO,WAAW,CAAA;AAAA,IAAA,CACpC,MAAO;AACL,MAAA,IAAA,CAAK,QAAA,EAAS;AAAA,IAAA;AAChB,EAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"take-while.mjs","sourceRoot":"","sources":["../../../src/core/operators/take-while.mts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,UAAU,EACV,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAO7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,CAAC,MAAM,SAAS,GACpB,CACE,SAAsD,EACtB,EAAE,CACpC,CAAC,gBAAgB,EAAE,EAAE,CACnB,yBAAyB,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAE3D,oBAAoB;AAEpB,MAAM,yBAAyB,GAAG,CAChC,gBAA+B,EAC/B,SAAsD,EACtB,EAAE,CAClC,yBAAyB,CACvB;IACE,OAAO,EAAE,CAAC,gBAAgB,CAAC;IAC3B,YAAY,EAAE,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAC7D,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;QAClB,CAAC,CAAC,QAAQ,CAAC,IAAI;QACf,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,GAAG;YACL,CAAC,CAAC,QAAQ,CAAC,IAAI,CACpB,CAAC,KAAK;CACR,EACD,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IACxB,IAAI,SAAS,GAAkB,CAAC,CAAC,CAAC;IAElC,OAAO,CAAC,WAAW,EAAE,EAAE;QACrB,MAAM,EAAE,GAAG,gBAAgB,CAAC,WAAW,EAAE,CAAC;QAE1C,IACE,gBAAgB,CAAC,WAAW,KAAK,WAAW;YAC5C,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EACnB,CAAC;YACD,OAAO,CAAC,cAAc;QACxB,CAAC;QAED,SAAS;YACP,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAEhE,IAAI,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CACF,CAAC;AAEJ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;IAC7B,CAAC,CAAC,CAAC;IAEH,CAAC;QACC,MAAM,CAAC,GAAuB,MAAM,EAAU,CAAC;QAE/C,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5D,UAAU,CAAiC,GAAG,CAAC,CAAC;IAClD,CAAC;IAED,CAAC;QACC,MAAM,CAAC,GAAG,MAAM,EAAU,CAAC;QAE3B,MAAM,CAAC,GAAkC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;QAErE,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE3D,UAAU,CAAgC,GAAG,CAAC,CAAC;IACjD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"throttle.d.mts","sourceRoot":"","sources":["../../../src/core/operators/throttle.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAK9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,gBACV,MAAM,KACnB,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
1
+ {"version":3,"file":"throttle.d.mts","sourceRoot":"","sources":["../../../src/core/operators/throttle.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,wBAAwB,EAI9B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6EG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,gBACV,MAAM,KACnB,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAMQ,CAAC"}
@@ -1,49 +1,111 @@
1
1
  import { Optional } from 'ts-data-forge';
2
- import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
3
- import '../utils/id-maker.mjs';
4
-
5
- const throttle = (milliSeconds) => (
6
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
7
- ((parentObservable) => new ThrottleObservableClass(
8
- parentObservable,
9
- milliSeconds
10
- ))
11
- );
12
- class ThrottleObservableClass extends SyncChildObservableClass {
13
- #milliSeconds;
14
- #mut_timerId;
15
- #mut_isSkipping;
16
- constructor(parentObservable, milliSeconds) {
17
- super({
18
- parents: [parentObservable],
19
- initialValue: parentObservable.getSnapshot()
2
+ import { createSyncChildObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+ export const throttle = (milliSeconds) =>
82
+
83
+ ((parentObservable) => createThrottleObservable(parentObservable, milliSeconds));
84
+ const createThrottleObservable = (parentObservable, milliSeconds) => {
85
+ let mut_timerId = undefined;
86
+ let mut_isSkipping = false;
87
+ const resetTimer = () => {
88
+ if (mut_timerId !== undefined) {
89
+ clearTimeout(mut_timerId);
90
+ }
91
+ };
92
+ return createSyncChildObservable({
93
+ parents: [parentObservable],
94
+ initialValue: parentObservable.getSnapshot(),
95
+ onComplete: resetTimer,
96
+ }, ({ setNext }) => (updateToken) => {
97
+ const sn = parentObservable.getSnapshot();
98
+ if (mut_isSkipping ||
99
+ parentObservable.updateToken !== updateToken ||
100
+ Optional.isNone(sn)) {
101
+ return;
102
+ }
103
+ setNext(sn.value, updateToken);
104
+ mut_isSkipping = true;
105
+
106
+ mut_timerId = setTimeout(() => {
107
+ mut_isSkipping = false;
108
+ }, milliSeconds);
20
109
  });
21
- this.#mut_timerId = void 0;
22
- this.#mut_isSkipping = false;
23
- this.#milliSeconds = milliSeconds;
24
- }
25
- #resetTimer() {
26
- if (this.#mut_timerId !== void 0) {
27
- clearTimeout(this.#mut_timerId);
28
- }
29
- }
30
- tryUpdate(updateToken) {
31
- const par = this.parents[0];
32
- const sn = par.getSnapshot();
33
- if (par.updateToken !== updateToken || Optional.isNone(sn) || this.#mut_isSkipping) {
34
- return;
35
- }
36
- this.setNext(sn.value, updateToken);
37
- this.#mut_isSkipping = true;
38
- this.#mut_timerId = setTimeout(() => {
39
- this.#mut_isSkipping = false;
40
- }, this.#milliSeconds);
41
- }
42
- complete() {
43
- this.#resetTimer();
44
- super.complete();
45
- }
46
- }
47
-
48
- export { throttle };
49
- //# sourceMappingURL=throttle.mjs.map
110
+ };
111
+ //# sourceMappingURL=throttle.mjs.map