synstate 0.1.0 → 0.1.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 (154) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +124 -350
  3. package/assets/synstate-icon.png +0 -0
  4. package/dist/core/combine/combine.d.mts +32 -2
  5. package/dist/core/combine/combine.d.mts.map +1 -1
  6. package/dist/core/combine/combine.mjs +32 -2
  7. package/dist/core/combine/combine.mjs.map +1 -1
  8. package/dist/core/combine/merge.d.mts +30 -4
  9. package/dist/core/combine/merge.d.mts.map +1 -1
  10. package/dist/core/combine/merge.mjs +30 -4
  11. package/dist/core/combine/merge.mjs.map +1 -1
  12. package/dist/core/combine/zip.d.mts +28 -3
  13. package/dist/core/combine/zip.d.mts.map +1 -1
  14. package/dist/core/combine/zip.mjs +28 -3
  15. package/dist/core/combine/zip.mjs.map +1 -1
  16. package/dist/core/create/from-array.d.mts +21 -3
  17. package/dist/core/create/from-array.d.mts.map +1 -1
  18. package/dist/core/create/from-array.mjs +21 -3
  19. package/dist/core/create/from-array.mjs.map +1 -1
  20. package/dist/core/create/from-promise.d.mts +29 -7
  21. package/dist/core/create/from-promise.d.mts.map +1 -1
  22. package/dist/core/create/from-promise.mjs +29 -7
  23. package/dist/core/create/from-promise.mjs.map +1 -1
  24. package/dist/core/create/from-subscribable.d.mts +58 -0
  25. package/dist/core/create/from-subscribable.d.mts.map +1 -1
  26. package/dist/core/create/from-subscribable.mjs +58 -0
  27. package/dist/core/create/from-subscribable.mjs.map +1 -1
  28. package/dist/core/create/interval.d.mts +29 -4
  29. package/dist/core/create/interval.d.mts.map +1 -1
  30. package/dist/core/create/interval.mjs +29 -4
  31. package/dist/core/create/interval.mjs.map +1 -1
  32. package/dist/core/create/of.d.mts +22 -3
  33. package/dist/core/create/of.d.mts.map +1 -1
  34. package/dist/core/create/of.mjs +22 -3
  35. package/dist/core/create/of.mjs.map +1 -1
  36. package/dist/core/create/source.d.mts +20 -1
  37. package/dist/core/create/source.d.mts.map +1 -1
  38. package/dist/core/create/source.mjs.map +1 -1
  39. package/dist/core/create/timer.d.mts +23 -4
  40. package/dist/core/create/timer.d.mts.map +1 -1
  41. package/dist/core/create/timer.mjs +23 -4
  42. package/dist/core/create/timer.mjs.map +1 -1
  43. package/dist/core/operators/audit-time.d.mts +59 -0
  44. package/dist/core/operators/audit-time.d.mts.map +1 -1
  45. package/dist/core/operators/audit-time.mjs +59 -0
  46. package/dist/core/operators/audit-time.mjs.map +1 -1
  47. package/dist/core/operators/debounce-time.d.mts +22 -2
  48. package/dist/core/operators/debounce-time.d.mts.map +1 -1
  49. package/dist/core/operators/debounce-time.mjs +22 -2
  50. package/dist/core/operators/debounce-time.mjs.map +1 -1
  51. package/dist/core/operators/filter.d.mts +26 -1
  52. package/dist/core/operators/filter.d.mts.map +1 -1
  53. package/dist/core/operators/filter.mjs.map +1 -1
  54. package/dist/core/operators/map-with-index.d.mts +19 -4
  55. package/dist/core/operators/map-with-index.d.mts.map +1 -1
  56. package/dist/core/operators/map-with-index.mjs +19 -4
  57. package/dist/core/operators/map-with-index.mjs.map +1 -1
  58. package/dist/core/operators/merge-map.d.mts +47 -5
  59. package/dist/core/operators/merge-map.d.mts.map +1 -1
  60. package/dist/core/operators/merge-map.mjs +47 -5
  61. package/dist/core/operators/merge-map.mjs.map +1 -1
  62. package/dist/core/operators/pairwise.d.mts +30 -1
  63. package/dist/core/operators/pairwise.d.mts.map +1 -1
  64. package/dist/core/operators/pairwise.mjs +30 -1
  65. package/dist/core/operators/pairwise.mjs.map +1 -1
  66. package/dist/core/operators/scan.d.mts +23 -1
  67. package/dist/core/operators/scan.d.mts.map +1 -1
  68. package/dist/core/operators/scan.mjs +23 -1
  69. package/dist/core/operators/scan.mjs.map +1 -1
  70. package/dist/core/operators/skip-if-no-change.d.mts +25 -1
  71. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  72. package/dist/core/operators/skip-if-no-change.mjs +25 -1
  73. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  74. package/dist/core/operators/skip-until.d.mts +50 -0
  75. package/dist/core/operators/skip-until.d.mts.map +1 -1
  76. package/dist/core/operators/skip-until.mjs +50 -0
  77. package/dist/core/operators/skip-until.mjs.map +1 -1
  78. package/dist/core/operators/skip-while.d.mts +48 -0
  79. package/dist/core/operators/skip-while.d.mts.map +1 -1
  80. package/dist/core/operators/skip-while.mjs +48 -0
  81. package/dist/core/operators/skip-while.mjs.map +1 -1
  82. package/dist/core/operators/switch-map.d.mts +39 -5
  83. package/dist/core/operators/switch-map.d.mts.map +1 -1
  84. package/dist/core/operators/switch-map.mjs +39 -5
  85. package/dist/core/operators/switch-map.mjs.map +1 -1
  86. package/dist/core/operators/take-until.d.mts +20 -1
  87. package/dist/core/operators/take-until.d.mts.map +1 -1
  88. package/dist/core/operators/take-until.mjs +20 -1
  89. package/dist/core/operators/take-until.mjs.map +1 -1
  90. package/dist/core/operators/take-while.d.mts +47 -0
  91. package/dist/core/operators/take-while.d.mts.map +1 -1
  92. package/dist/core/operators/take-while.mjs +47 -0
  93. package/dist/core/operators/take-while.mjs.map +1 -1
  94. package/dist/core/operators/throttle-time.d.mts +44 -5
  95. package/dist/core/operators/throttle-time.d.mts.map +1 -1
  96. package/dist/core/operators/throttle-time.mjs +44 -5
  97. package/dist/core/operators/throttle-time.mjs.map +1 -1
  98. package/dist/core/operators/with-buffered-from.d.mts +53 -0
  99. package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
  100. package/dist/core/operators/with-buffered-from.mjs +53 -0
  101. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  102. package/dist/core/operators/with-current-value-from.d.mts +55 -0
  103. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  104. package/dist/core/operators/with-current-value-from.mjs +55 -0
  105. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  106. package/dist/core/operators/with-initial-value.d.mts +24 -2
  107. package/dist/core/operators/with-initial-value.d.mts.map +1 -1
  108. package/dist/core/operators/with-initial-value.mjs +24 -2
  109. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  110. package/dist/core/types/observable-family.d.mts +7 -7
  111. package/dist/utils/create-event-emitter.d.mts +20 -2
  112. package/dist/utils/create-event-emitter.d.mts.map +1 -1
  113. package/dist/utils/create-event-emitter.mjs +20 -2
  114. package/dist/utils/create-event-emitter.mjs.map +1 -1
  115. package/dist/utils/create-reducer.d.mts +13 -1
  116. package/dist/utils/create-reducer.d.mts.map +1 -1
  117. package/dist/utils/create-reducer.mjs +13 -1
  118. package/dist/utils/create-reducer.mjs.map +1 -1
  119. package/dist/utils/create-state.d.mts +24 -4
  120. package/dist/utils/create-state.d.mts.map +1 -1
  121. package/dist/utils/create-state.mjs +24 -4
  122. package/dist/utils/create-state.mjs.map +1 -1
  123. package/package.json +13 -12
  124. package/src/core/combine/combine.mts +32 -2
  125. package/src/core/combine/merge.mts +30 -4
  126. package/src/core/combine/zip.mts +28 -3
  127. package/src/core/create/from-array.mts +21 -3
  128. package/src/core/create/from-promise.mts +29 -7
  129. package/src/core/create/from-subscribable.mts +58 -0
  130. package/src/core/create/interval.mts +29 -4
  131. package/src/core/create/of.mts +22 -3
  132. package/src/core/create/source.mts +20 -1
  133. package/src/core/create/timer.mts +23 -4
  134. package/src/core/operators/audit-time.mts +59 -0
  135. package/src/core/operators/debounce-time.mts +22 -2
  136. package/src/core/operators/filter.mts +26 -1
  137. package/src/core/operators/map-with-index.mts +19 -4
  138. package/src/core/operators/merge-map.mts +47 -5
  139. package/src/core/operators/pairwise.mts +30 -1
  140. package/src/core/operators/scan.mts +23 -1
  141. package/src/core/operators/skip-if-no-change.mts +25 -1
  142. package/src/core/operators/skip-until.mts +50 -0
  143. package/src/core/operators/skip-while.mts +48 -0
  144. package/src/core/operators/switch-map.mts +39 -5
  145. package/src/core/operators/take-until.mts +20 -1
  146. package/src/core/operators/take-while.mts +47 -0
  147. package/src/core/operators/throttle-time.mts +44 -5
  148. package/src/core/operators/with-buffered-from.mts +53 -0
  149. package/src/core/operators/with-current-value-from.mts +55 -0
  150. package/src/core/operators/with-initial-value.mts +24 -2
  151. package/src/core/types/observable-family.mts +7 -7
  152. package/src/utils/create-event-emitter.mts +20 -2
  153. package/src/utils/create-reducer.mts +13 -1
  154. package/src/utils/create-state.mts +24 -4
@@ -15,21 +15,51 @@ import { withInitialValue } from '../operators/with-initial-value.mjs';
15
15
  *
16
16
  * @example
17
17
  * ```ts
18
+ * // Timeline:
19
+ * //
20
+ * // name$ "Alice" "Bob"
21
+ * // age$ 25 30
22
+ * // user$ ["Alice",25] ["Bob",25] ["Bob",30]
23
+ * //
24
+ * // Explanation:
25
+ * // - combine waits for all sources to emit at least once
26
+ * // - Then emits the latest value from all sources whenever any source emits
27
+ * // - Always emits an array with the latest values from each source
28
+ *
18
29
  * const name$ = source<string>();
19
30
  *
20
31
  * const age$ = source<number>();
21
32
  *
22
33
  * const user$ = combine([name$, age$]);
23
34
  *
35
+ * const mut_history: (readonly [string, number])[] = [];
36
+ *
24
37
  * user$.subscribe(([name_, age]) => {
25
- * console.log({ name: name_, age });
38
+ * mut_history.push([name_, age]);
26
39
  * });
27
40
  *
28
- * name$.next('Alice');
41
+ * name$.next('Alice'); // nothing logged (age$ hasn't emitted yet)
42
+ *
43
+ * assert.deepStrictEqual(mut_history, []);
29
44
  *
30
45
  * age$.next(25); // logs: { name: 'Alice', age: 25 }
31
46
  *
47
+ * assert.deepStrictEqual(mut_history, [['Alice', 25]]);
48
+ *
32
49
  * name$.next('Bob'); // logs: { name: 'Bob', age: 25 }
50
+ *
51
+ * assert.deepStrictEqual(mut_history, [
52
+ * ['Alice', 25],
53
+ * ['Bob', 25],
54
+ * ]);
55
+ *
56
+ * age$.next(30); // logs: { name: 'Bob', age: 30 }
57
+ *
58
+ * assert.deepStrictEqual(mut_history, [
59
+ * ['Alice', 25],
60
+ * ['Bob', 25],
61
+ * ['Bob', 30],
62
+ * ]);
33
63
  * ```
34
64
  */
35
65
  const combine = (parents) =>
@@ -1 +1 @@
1
- {"version":3,"file":"combine.mjs","sources":["../../../src/core/combine/combine.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;AACI,MAAM,OAAO,GAAG,CACrB,OAAW;AAEX;AACA,IAAI,sBAAsB,CACxB,OAAO;AAGX;;;AAGG;AACI,MAAM,aAAa,GAAG,QAAQ;AAErC,MAAM,sBACJ,SAAQ,wBAA8B,CAAA;AAGtC,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;;AAGK,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC;AAAE,YAAA,OAAO;AAEzE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvC,YAAA,MAAM,SAAS;;AAEb,YAAA,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;AAE5C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAG3C;AAED;IACE;AACE,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;AAErC,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;QAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;IAO7B;AACE,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;QAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;IAO7B;AACE,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAE/D,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;;AAM7B,IAAA,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IAEf,OAAO,CAAC;AAClB,QAAA,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAA;AAQH;;;;"}
1
+ {"version":3,"file":"combine.mjs","sources":["../../../src/core/combine/combine.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDG;AACI,MAAM,OAAO,GAAG,CACrB,OAAW;AAEX;AACA,IAAI,sBAAsB,CACxB,OAAO;AAGX;;;AAGG;AACI,MAAM,aAAa,GAAG,QAAQ;AAErC,MAAM,sBACJ,SAAQ,wBAA8B,CAAA;AAGtC,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;;AAGK,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,KAAK,aAAa,CAAC;AAAE,YAAA,OAAO;AAEzE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;QAE7D,IAAI,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACvC,YAAA,MAAM,SAAS;;AAEb,YAAA,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;AAE5C,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAG3C;AAED;IACE;AACE,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;AAErC,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;QAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;IAO7B;AACE,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,MAAM,EAAE,GAAkB,MAAM,EAAK;QAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;IAO7B;AACE,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAE1E,QAAA,MAAM,EAAE,GAA6B,MAAM,EAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAE/D,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;;;AAM7B,IAAA,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAE/B,IAAA,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAE1B,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;IAEf,OAAO,CAAC;AAClB,QAAA,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC5B,QAAA,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;AAC7B,KAAA;AAQH;;;;"}
@@ -9,16 +9,42 @@ import { type MergeObservableRefined, type Observable } from '../types/index.mjs
9
9
  *
10
10
  * @example
11
11
  * ```ts
12
- * const clicks$ = source<MouseEvent>();
12
+ * // Timeline:
13
+ * //
14
+ * // clicks$ c1 c2 c3
15
+ * // keys$ k1 k2 k3
16
+ * // events$ c1 k1 c2 k2 c3 k3
17
+ * //
18
+ * // Explanation:
19
+ * // - merge combines multiple observables into one
20
+ * // - Emits values from any source as they arrive
21
+ * // - Order is preserved based on emission time
13
22
  *
14
- * const keys$ = source<KeyboardEvent>();
23
+ * const clicks$ = source<string>();
24
+ *
25
+ * const keys$ = source<string>();
15
26
  *
16
27
  * const events$ = merge([clicks$, keys$]);
17
28
  *
29
+ * const mut_history: string[] = [];
30
+ *
18
31
  * events$.subscribe((event_) => {
19
- * console.log(event_);
32
+ * mut_history.push(event_);
20
33
  * });
21
- * // Logs any mouse click or keyboard event
34
+ *
35
+ * clicks$.next('c1');
36
+ *
37
+ * assert.deepStrictEqual(mut_history, ['c1']);
38
+ *
39
+ * keys$.next('k1');
40
+ *
41
+ * assert.deepStrictEqual(mut_history, ['c1', 'k1']);
42
+ *
43
+ * clicks$.next('c2');
44
+ *
45
+ * keys$.next('k2');
46
+ *
47
+ * assert.deepStrictEqual(mut_history, ['c1', 'k1', 'c2', 'k2']);
22
48
  * ```
23
49
  *
24
50
  * @note To improve code readability, consider using `createState` instead of `merge`,
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.mts","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACvE,SAAS,EAAE,KACV,sBAAsB,CAAC,EAAE,CAEqC,CAAC"}
1
+ {"version":3,"file":"merge.d.mts","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AAGA,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,eAAO,MAAM,KAAK,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACvE,SAAS,EAAE,KACV,sBAAsB,CAAC,EAAE,CAEqC,CAAC"}
@@ -12,16 +12,42 @@ import '../utils/id-maker.mjs';
12
12
  *
13
13
  * @example
14
14
  * ```ts
15
- * const clicks$ = source<MouseEvent>();
15
+ * // Timeline:
16
+ * //
17
+ * // clicks$ c1 c2 c3
18
+ * // keys$ k1 k2 k3
19
+ * // events$ c1 k1 c2 k2 c3 k3
20
+ * //
21
+ * // Explanation:
22
+ * // - merge combines multiple observables into one
23
+ * // - Emits values from any source as they arrive
24
+ * // - Order is preserved based on emission time
16
25
  *
17
- * const keys$ = source<KeyboardEvent>();
26
+ * const clicks$ = source<string>();
27
+ *
28
+ * const keys$ = source<string>();
18
29
  *
19
30
  * const events$ = merge([clicks$, keys$]);
20
31
  *
32
+ * const mut_history: string[] = [];
33
+ *
21
34
  * events$.subscribe((event_) => {
22
- * console.log(event_);
35
+ * mut_history.push(event_);
23
36
  * });
24
- * // Logs any mouse click or keyboard event
37
+ *
38
+ * clicks$.next('c1');
39
+ *
40
+ * assert.deepStrictEqual(mut_history, ['c1']);
41
+ *
42
+ * keys$.next('k1');
43
+ *
44
+ * assert.deepStrictEqual(mut_history, ['c1', 'k1']);
45
+ *
46
+ * clicks$.next('c2');
47
+ *
48
+ * keys$.next('k2');
49
+ *
50
+ * assert.deepStrictEqual(mut_history, ['c1', 'k1', 'c2', 'k2']);
25
51
  * ```
26
52
  *
27
53
  * @note To improve code readability, consider using `createState` instead of `merge`,
@@ -1 +1 @@
1
- {"version":3,"file":"merge.mjs","sources":["../../../src/core/combine/merge.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAaA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACI,MAAM,KAAK,GAAG,CACnB,OAAW;AAEX;AACA,IAAI,oBAAoB,CAAC,OAAO;AAElC,MAAM,oBACJ,SAAQ,wBAA4C,CAAA;AAGpD,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;;AAGK,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,CAAC,KACA,CAAC,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACxE;QAED,IAAI,WAAW,KAAK,SAAS;YAAE;AAE/B,QAAA,MAAM,SAAS;;QAEb,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAoB;AAE/D,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;AAEzC;;;;"}
1
+ {"version":3,"file":"merge.mjs","sources":["../../../src/core/combine/merge.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDG;AACI,MAAM,KAAK,GAAG,CACnB,OAAW;AAEX;AACA,IAAI,oBAAoB,CAAC,OAAO;AAElC,MAAM,oBACJ,SAAQ,wBAA4C,CAAA;AAGpD,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,QAAQ,CAAC,IAAI;AAC5B,SAAA,CAAC;;AAGK,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,CAAC,KACA,CAAC,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACxE;QAED,IAAI,WAAW,KAAK,SAAS;YAAE;AAE/B,QAAA,MAAM,SAAS;;QAEb,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAoB;AAE/D,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;AAEzC;;;;"}
@@ -10,16 +10,41 @@ import { type Observable, type ZipObservableRefined } from '../types/index.mjs';
10
10
  *
11
11
  * @example
12
12
  * ```ts
13
+ * // Timeline:
14
+ * //
15
+ * // letters$ 'a' 'b' 'c'
16
+ * // numbers$ 1 2 3
17
+ * // zipped$ ['a',1] ['b',2] ['c',3]
18
+ * //
19
+ * // Explanation:
20
+ * // - zip pairs values by their index from multiple sources
21
+ * // - Waits for all sources to emit at the same index
22
+ * // - Completes when any source completes
23
+ *
13
24
  * const letters$ = fromArray(['a', 'b', 'c']);
14
25
  *
15
26
  * const numbers$ = fromArray([1, 2, 3]);
16
27
  *
17
28
  * const zipped$ = zip([letters$, numbers$]);
18
29
  *
19
- * zipped$.subscribe(([letter, num]) => {
20
- * console.log(letter, num);
30
+ * const mut_history: (readonly [string, number])[] = [];
31
+ *
32
+ * await new Promise<void>((resolve) => {
33
+ * zipped$.subscribe(
34
+ * ([letter, num]) => {
35
+ * mut_history.push([letter, num]);
36
+ * },
37
+ * () => {
38
+ * resolve();
39
+ * },
40
+ * );
21
41
  * });
22
- * // logs: a 1, b 2, c 3
42
+ *
43
+ * assert.deepStrictEqual(mut_history, [
44
+ * ['a', 1],
45
+ * ['b', 2],
46
+ * ['c', 3],
47
+ * ]);
23
48
  * ```
24
49
  */
25
50
  export declare const zip: <const OS extends NonEmptyArray<Observable<unknown>>>(parents: OS) => ZipObservableRefined<OS>;
@@ -1 +1 @@
1
- {"version":3,"file":"zip.d.mts","sourceRoot":"","sources":["../../../src/core/combine/zip.mts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,UAAU,EAMf,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACrE,SAAS,EAAE,KACV,oBAAoB,CAAC,EAAE,CAE8C,CAAC"}
1
+ {"version":3,"file":"zip.d.mts","sourceRoot":"","sources":["../../../src/core/combine/zip.mts"],"names":[],"mappings":"AAIA,OAAO,EAIL,KAAK,UAAU,EAMf,KAAK,oBAAoB,EAC1B,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,GAAG,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACrE,SAAS,EAAE,KACV,oBAAoB,CAAC,EAAE,CAE8C,CAAC"}
@@ -13,16 +13,41 @@ import '../utils/id-maker.mjs';
13
13
  *
14
14
  * @example
15
15
  * ```ts
16
+ * // Timeline:
17
+ * //
18
+ * // letters$ 'a' 'b' 'c'
19
+ * // numbers$ 1 2 3
20
+ * // zipped$ ['a',1] ['b',2] ['c',3]
21
+ * //
22
+ * // Explanation:
23
+ * // - zip pairs values by their index from multiple sources
24
+ * // - Waits for all sources to emit at the same index
25
+ * // - Completes when any source completes
26
+ *
16
27
  * const letters$ = fromArray(['a', 'b', 'c']);
17
28
  *
18
29
  * const numbers$ = fromArray([1, 2, 3]);
19
30
  *
20
31
  * const zipped$ = zip([letters$, numbers$]);
21
32
  *
22
- * zipped$.subscribe(([letter, num]) => {
23
- * console.log(letter, num);
33
+ * const mut_history: (readonly [string, number])[] = [];
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
+ * );
24
44
  * });
25
- * // logs: a 1, b 2, c 3
45
+ *
46
+ * assert.deepStrictEqual(mut_history, [
47
+ * ['a', 1],
48
+ * ['b', 2],
49
+ * ['c', 3],
50
+ * ]);
26
51
  * ```
27
52
  */
28
53
  const zip = (parents) =>
@@ -1 +1 @@
1
- {"version":3,"file":"zip.mjs","sources":["../../../src/core/combine/zip.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAiBA;;;;;;;;;;;;;;;;;;;;;;AAsBG;AACI,MAAM,GAAG,GAAG,CACjB,OAAW;AAEX;AACA,IAAI,kBAAkB,CAAC,OAAO;AAEhC,MAAM,kBACJ,SAAQ,wBAA8B,CAAA;AAG7B,IAAA,OAAO;AAEhB,IAAA,WAAA,CAAY,OAAgB,EAAA;AAC1B,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;AAEzD,QAAA,KAAK,CAAC;YACJ,OAAO;YACP,YAAY,EAAE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM;kBAC7C,QAAQ,CAAC,IAAI;;AAEX,gBAAA,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAM;kBAE7C,QAAQ,CAAC,IAAI;AAClB,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,MAC9B,WAAW,EAAE,CACiB;;AAGzB,IAAA,SAAS,CAAC,aAA4B,EAAA;AAC7C,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO;AAE3B,QAAA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE;AACjD,YAAA,MAAM,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE;AAE5B,YAAA,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC9D,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC;;;AAIpC,QAAA,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,YAAA,MAAM,SAAS;;YAEb,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAM;AAE3D,YAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC;;;AAG3C;;;;"}
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;;;;"}
@@ -9,12 +9,30 @@ import { type FromArrayObservable } from '../types/index.mjs';
9
9
  *
10
10
  * @example
11
11
  * ```ts
12
+ * // Timeline:
13
+ * //
14
+ * // nums$ 1 2 3 | (completes)
15
+ * //
16
+ * // Explanation:
17
+ * // - fromArray creates an observable from an array
18
+ * // - Emits all values synchronously, then completes
19
+ *
12
20
  * const nums$ = fromArray([1, 2, 3]);
13
21
  *
14
- * nums$.subscribe((x) => {
15
- * console.log(x);
22
+ * const mut_history: number[] = [];
23
+ *
24
+ * await new Promise<void>((resolve) => {
25
+ * nums$.subscribe(
26
+ * (x) => {
27
+ * mut_history.push(x);
28
+ * },
29
+ * () => {
30
+ * resolve();
31
+ * },
32
+ * );
16
33
  * });
17
- * // logs: 1, 2, 3
34
+ *
35
+ * assert.deepStrictEqual(mut_history, [1, 2, 3]);
18
36
  * ```
19
37
  */
20
38
  export declare const fromArray: <A>(values: readonly A[], startManually?: boolean) => FromArrayObservable<A>;
@@ -1 +1 @@
1
- {"version":3,"file":"from-array.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-array.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,QAAQ,SAAS,CAAC,EAAE,EACpB,gBAAe,OAAe,KAC7B,mBAAmB,CAAC,CAAC,CACgC,CAAC"}
1
+ {"version":3,"file":"from-array.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-array.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,SAAS,GAAI,CAAC,EACzB,QAAQ,SAAS,CAAC,EAAE,EACpB,gBAAe,OAAe,KAC7B,mBAAmB,CAAC,CAAC,CACgC,CAAC"}
@@ -12,12 +12,30 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
12
12
  *
13
13
  * @example
14
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
+ *
15
23
  * const nums$ = fromArray([1, 2, 3]);
16
24
  *
17
- * nums$.subscribe((x) => {
18
- * console.log(x);
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
+ * );
19
36
  * });
20
- * // logs: 1, 2, 3
37
+ *
38
+ * assert.deepStrictEqual(mut_history, [1, 2, 3]);
21
39
  * ```
22
40
  */
23
41
  const fromArray = (values, startManually = false) => new FromArrayObservableClass(values, startManually);
@@ -1 +1 @@
1
- {"version":3,"file":"from-array.mjs","sources":["../../../src/core/create/from-array.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;AAiBG;AACI,MAAM,SAAS,GAAG,CACvB,MAAoB,EACpB,aAAA,GAAyB,KAAK,KAE9B,IAAI,wBAAwB,CAAI,MAAM,EAAE,aAAa;AAEvD,MAAM,wBACJ,SAAQ,mBAAsB,CAAA;AAGrB,IAAA,OAAO;IAEhB,WAAA,CAAY,MAAoB,EAAE,aAAA,GAAyB,KAAK,EAAA;QAC9D,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QAErB,IAAI,CAAC,aAAa,EAAE;YAClB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,IAAI,EAAE;YACb,CAAC,EAAE,CAAC,CAAC;QACP;IACF;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAEjC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrB;QAEA,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,OAAO,IAAI;IACb;AACD;;;;"}
1
+ {"version":3,"file":"from-array.mjs","sources":["../../../src/core/create/from-array.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;AACI,MAAM,SAAS,GAAG,CACvB,MAAoB,EACpB,aAAA,GAAyB,KAAK,KAE9B,IAAI,wBAAwB,CAAI,MAAM,EAAE,aAAa;AAEvD,MAAM,wBACJ,SAAQ,mBAAsB,CAAA;AAGrB,IAAA,OAAO;IAEhB,WAAA,CAAY,MAAoB,EAAE,aAAA,GAAyB,KAAK,EAAA;QAC9D,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,IAAI,CAAC,OAAO,GAAG,MAAM;QAErB,IAAI,CAAC,aAAa,EAAE;YAClB,UAAU,CAAC,MAAK;gBACd,IAAI,CAAC,IAAI,EAAE;YACb,CAAC,EAAE,CAAC,CAAC;QACP;IACF;IAEA,IAAI,GAAA;QACF,IAAI,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,IAAI;AAEjC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE;AAC5B,YAAA,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACrB;QAEA,IAAI,CAAC,QAAQ,EAAE;AAEf,QAAA,OAAO,IAAI;IACb;AACD;;;;"}
@@ -10,15 +10,37 @@ import { type FromPromiseObservable } from '../types/index.mjs';
10
10
  *
11
11
  * @example
12
12
  * ```ts
13
- * const data$ = fromPromise(fetch('/api/data').then((r) => r.json()));
13
+ * // Timeline:
14
+ * //
15
+ * // promise [pending...] -> resolved/rejected
16
+ * // data$ Ok(value) or Err(error)
17
+ * //
18
+ * // Explanation:
19
+ * // - fromPromise converts a Promise into an observable
20
+ * // - Emits a Result type: Ok(value) on success, Err(error) on failure
21
+ * // - Completes after emitting the result
22
+ * // - Useful for integrating async operations into reactive flows
14
23
  *
15
- * data$.subscribe((result) => {
16
- * if (Result.isOk(result)) {
17
- * console.log('Data:', result.value);
18
- * } else {
19
- * console.error('Error:', result.value);
20
- * }
24
+ * const fetchData = async (): Promise<{ value: number }> => ({ value: 42 });
25
+ *
26
+ * const data$ = fromPromise(fetchData());
27
+ *
28
+ * const mut_history: { value: number }[] = [];
29
+ *
30
+ * await new Promise<void>((resolve) => {
31
+ * data$.subscribe(
32
+ * (result) => {
33
+ * if (Result.isOk(result)) {
34
+ * mut_history.push(result.value);
35
+ * }
36
+ * },
37
+ * () => {
38
+ * resolve();
39
+ * },
40
+ * );
21
41
  * });
42
+ *
43
+ * assert.deepStrictEqual(mut_history, [{ value: 42 }]);
22
44
  * ```
23
45
  */
24
46
  export declare const fromPromise: <A, E = unknown>(promise: Readonly<Promise<A>>) => FromPromiseObservable<A, E>;
@@ -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;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EACxC,SAAS,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAC5B,qBAAqB,CAAC,CAAC,EAAE,CAAC,CAA4C,CAAC"}
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"}
@@ -13,15 +13,37 @@ import { RootObservableClass } from '../class/root-observable-class.mjs';
13
13
  *
14
14
  * @example
15
15
  * ```ts
16
- * const data$ = fromPromise(fetch('/api/data').then((r) => r.json()));
16
+ * // Timeline:
17
+ * //
18
+ * // promise [pending...] -> resolved/rejected
19
+ * // data$ Ok(value) or Err(error)
20
+ * //
21
+ * // Explanation:
22
+ * // - fromPromise converts a Promise into an observable
23
+ * // - Emits a Result type: Ok(value) on success, Err(error) on failure
24
+ * // - Completes after emitting the result
25
+ * // - Useful for integrating async operations into reactive flows
17
26
  *
18
- * data$.subscribe((result) => {
19
- * if (Result.isOk(result)) {
20
- * console.log('Data:', result.value);
21
- * } else {
22
- * console.error('Error:', result.value);
23
- * }
27
+ * const fetchData = async (): Promise<{ value: number }> => ({ value: 42 });
28
+ *
29
+ * const data$ = fromPromise(fetchData());
30
+ *
31
+ * const mut_history: { value: number }[] = [];
32
+ *
33
+ * await new Promise<void>((resolve) => {
34
+ * data$.subscribe(
35
+ * (result) => {
36
+ * if (Result.isOk(result)) {
37
+ * mut_history.push(result.value);
38
+ * }
39
+ * },
40
+ * () => {
41
+ * resolve();
42
+ * },
43
+ * );
24
44
  * });
45
+ *
46
+ * assert.deepStrictEqual(mut_history, [{ value: 42 }]);
25
47
  * ```
26
48
  */
27
49
  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;;;;;;;;;;;;;;;;;;;;;AAqBG;AACI,MAAM,WAAW,GAAG,CACzB,OAA6B,KACG,IAAI,0BAA0B,CAAC,OAAO;AAExE,MAAM,0BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,OAA6B,EAAA;QACvC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC;AACG,aAAA,IAAI,CAAC,CAAC,KAAK,KAAI;YACd,IAAI,IAAI,CAAC,WAAW;gBAAE;YAEtB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AACpC,QAAA,CAAC;AACA,aAAA,KAAK,CAAC,CAAC,KAAc,KAAI;YACxB,IAAI,IAAI,CAAC,WAAW;gBAAE;AAEtB,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,GAAG;;YAER,KAAU,CACX,CACF;AACH,QAAA,CAAC;aACA,OAAO,CAAC,MAAK;YACZ,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CAAC;IACN;AACD;;;;"}
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,3 +1,61 @@
1
1
  import { type FromSubscribableObservable, type Subscribable } from '../types/index.mjs';
2
+ /**
3
+ * Converts any subscribable object into a SynState Observable.
4
+ * Works with objects that have a subscribe(onNext, onError, onComplete) method.
5
+ *
6
+ * @template A - The type of values from the subscribable
7
+ * @template E - The type of errors from the subscribable
8
+ * @param subscribable - An object with a subscribe method
9
+ * @returns An observable that wraps values in Result type
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * // Explanation:
14
+ * // - fromSubscribable converts any subscribable object into a SynState Observable
15
+ * // - Works with objects that have a subscribe(onNext, onError, onComplete) method
16
+ * // - Wraps values in Result type for error handling
17
+ * // - Useful for integrating with other reactive libraries or custom subscribables
18
+ *
19
+ * // Example: Converting a custom subscribable
20
+ * const customSubscribable = {
21
+ * subscribe: (
22
+ * onNext: (value: number) => void,
23
+ * _onError?: (error: unknown) => void,
24
+ * onComplete?: () => void,
25
+ * ) => {
26
+ * setTimeout(() => {
27
+ * onNext(1);
28
+ *
29
+ * onNext(2);
30
+ *
31
+ * onNext(3);
32
+ *
33
+ * onComplete?.();
34
+ * }, 0);
35
+ *
36
+ * return { unsubscribe: () => {} };
37
+ * },
38
+ * };
39
+ *
40
+ * const observable$ = fromSubscribable<number>(customSubscribable);
41
+ *
42
+ * const mut_history: number[] = [];
43
+ *
44
+ * await new Promise<void>((resolve) => {
45
+ * observable$.subscribe(
46
+ * (result) => {
47
+ * if (Result.isOk(result)) {
48
+ * mut_history.push(result.value);
49
+ * }
50
+ * },
51
+ * () => {
52
+ * resolve();
53
+ * },
54
+ * );
55
+ * });
56
+ *
57
+ * assert.deepStrictEqual(mut_history, [1, 2, 3]);
58
+ * ```
59
+ */
2
60
  export declare const fromSubscribable: <A, E = unknown>(subscribable: Subscribable<A>) => FromSubscribableObservable<A, E>;
3
61
  //# sourceMappingURL=from-subscribable.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-subscribable.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-subscribable.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAC7C,cAAc,YAAY,CAAC,CAAC,CAAC,KAC5B,0BAA0B,CAAC,CAAC,EAAE,CAAC,CACiB,CAAC"}
1
+ {"version":3,"file":"from-subscribable.d.mts","sourceRoot":"","sources":["../../../src/core/create/from-subscribable.mts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,0BAA0B,EAC/B,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAC7C,cAAc,YAAY,CAAC,CAAC,CAAC,KAC5B,0BAA0B,CAAC,CAAC,EAAE,CAAC,CACiB,CAAC"}
@@ -2,6 +2,64 @@ import { Optional, Result } from 'ts-data-forge';
2
2
  import '../utils/id-maker.mjs';
3
3
  import { RootObservableClass } from '../class/root-observable-class.mjs';
4
4
 
5
+ /**
6
+ * Converts any subscribable object into a SynState Observable.
7
+ * Works with objects that have a subscribe(onNext, onError, onComplete) method.
8
+ *
9
+ * @template A - The type of values from the subscribable
10
+ * @template E - The type of errors from the subscribable
11
+ * @param subscribable - An object with a subscribe method
12
+ * @returns An observable that wraps values in Result type
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * // Explanation:
17
+ * // - fromSubscribable converts any subscribable object into a SynState Observable
18
+ * // - Works with objects that have a subscribe(onNext, onError, onComplete) method
19
+ * // - Wraps values in Result type for error handling
20
+ * // - Useful for integrating with other reactive libraries or custom subscribables
21
+ *
22
+ * // Example: Converting a custom subscribable
23
+ * const customSubscribable = {
24
+ * subscribe: (
25
+ * onNext: (value: number) => void,
26
+ * _onError?: (error: unknown) => void,
27
+ * onComplete?: () => void,
28
+ * ) => {
29
+ * setTimeout(() => {
30
+ * onNext(1);
31
+ *
32
+ * onNext(2);
33
+ *
34
+ * onNext(3);
35
+ *
36
+ * onComplete?.();
37
+ * }, 0);
38
+ *
39
+ * return { unsubscribe: () => {} };
40
+ * },
41
+ * };
42
+ *
43
+ * const observable$ = fromSubscribable<number>(customSubscribable);
44
+ *
45
+ * const mut_history: number[] = [];
46
+ *
47
+ * await new Promise<void>((resolve) => {
48
+ * observable$.subscribe(
49
+ * (result) => {
50
+ * if (Result.isOk(result)) {
51
+ * mut_history.push(result.value);
52
+ * }
53
+ * },
54
+ * () => {
55
+ * resolve();
56
+ * },
57
+ * );
58
+ * });
59
+ *
60
+ * assert.deepStrictEqual(mut_history, [1, 2, 3]);
61
+ * ```
62
+ */
5
63
  const fromSubscribable = (subscribable) => new FromSubscribableObservableClass(subscribable);
6
64
  class FromSubscribableObservableClass extends RootObservableClass {
7
65
  constructor(subscribable) {
@@ -1 +1 @@
1
- {"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAOO,MAAM,gBAAgB,GAAG,CAC9B,YAA6B,KAE7B,IAAI,+BAA+B,CAAC,YAAY;AAElD,MAAM,+BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,YAA6B,EAAA;QACvC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,YAAY,CAAC,SAAS,CACpB,CAAC,SAAS,KAAI;YACZ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACxC,QAAA,CAAC,EACD,CAAC,KAAe,KAAI;AAClB,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,GAAG;;YAER,KAAU,CACX,CACF;QACH,CAAC,EACD,MAAK;YACH,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CACF;IACH;AACD;;;;"}
1
+ {"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAOA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyDG;AACI,MAAM,gBAAgB,GAAG,CAC9B,YAA6B,KAE7B,IAAI,+BAA+B,CAAC,YAAY;AAElD,MAAM,+BACJ,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,WAAA,CAAY,YAA6B,EAAA;QACvC,KAAK,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC;AAEtC,QAAA,YAAY,CAAC,SAAS,CACpB,CAAC,SAAS,KAAI;YACZ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AACxC,QAAA,CAAC,EACD,CAAC,KAAe,KAAI;AAClB,YAAA,IAAI,CAAC,WAAW,CACd,MAAM,CAAC,GAAG;;YAER,KAAU,CACX,CACF;QACH,CAAC,EACD,MAAK;YACH,IAAI,CAAC,QAAQ,EAAE;AACjB,QAAA,CAAC,CACF;IACH;AACD;;;;"}
@@ -9,12 +9,37 @@ import { type IntervalObservable } from '../types/index.mjs';
9
9
  *
10
10
  * @example
11
11
  * ```ts
12
- * const tick$ = interval(1000);
12
+ * // Timeline:
13
+ * //
14
+ * // Time(s) 0 1 2 3 4 5
15
+ * // tick$ 0 1 2 3 4 5 ...
16
+ * //
17
+ * // Explanation:
18
+ * // - interval emits incrementing numbers at specified intervals
19
+ * // - Starts at 0 and continues indefinitely
20
+ * // - Useful for periodic tasks or animations
13
21
  *
14
- * tick$.subscribe((count) => {
15
- * console.log(count);
22
+ * const tick$ = interval(100);
23
+ *
24
+ * const mut_history: number[] = [];
25
+ *
26
+ * const subscription = tick$.subscribe((count) => {
27
+ * mut_history.push(count);
16
28
  * });
17
- * // logs: 0, 1, 2, 3, ... every second
29
+ *
30
+ * await new Promise((resolve) => {
31
+ * setTimeout(resolve, 350);
32
+ * });
33
+ *
34
+ * subscription.unsubscribe();
35
+ *
36
+ * assert.isTrue(Arr.isArrayAtLeastLength(mut_history, 3));
37
+ *
38
+ * assert.deepStrictEqual(mut_history[0], 0);
39
+ *
40
+ * assert.deepStrictEqual(mut_history[1], 1);
41
+ *
42
+ * assert.deepStrictEqual(mut_history[2], 2);
18
43
  * ```
19
44
  */
20
45
  export declare const interval: (milliSeconds: number, startManually?: boolean) => IntervalObservable;
@@ -1 +1 @@
1
- {"version":3,"file":"interval.d.mts","sourceRoot":"","sources":["../../../src/core/create/interval.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,QAAQ,GACnB,cAAc,MAAM,EACpB,gBAAgB,OAAO,KACtB,kBACuD,CAAC"}
1
+ {"version":3,"file":"interval.d.mts","sourceRoot":"","sources":["../../../src/core/create/interval.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,eAAO,MAAM,QAAQ,GACnB,cAAc,MAAM,EACpB,gBAAgB,OAAO,KACtB,kBACuD,CAAC"}