synstate 3.0.0 → 3.0.2

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 (148) hide show
  1. package/README.md +1 -1
  2. package/dist/core/base/create-child-observable.d.mts.map +1 -1
  3. package/dist/core/base/create-child-observable.mjs +169 -140
  4. package/dist/core/base/create-child-observable.mjs.map +1 -1
  5. package/dist/core/base/create-observable-base.d.mts.map +1 -1
  6. package/dist/core/base/create-observable-base.mjs +155 -152
  7. package/dist/core/base/create-observable-base.mjs.map +1 -1
  8. package/dist/core/base/create-root-observable.mjs +48 -34
  9. package/dist/core/base/create-root-observable.mjs.map +1 -1
  10. package/dist/core/base/index.mjs +3 -3
  11. package/dist/core/base/index.mjs.map +1 -1
  12. package/dist/core/combine/combine.mjs +129 -37
  13. package/dist/core/combine/combine.mjs.map +1 -1
  14. package/dist/core/combine/index.mjs +4 -4
  15. package/dist/core/combine/index.mjs.map +1 -1
  16. package/dist/core/combine/merge.mjs +75 -24
  17. package/dist/core/combine/merge.mjs.map +1 -1
  18. package/dist/core/combine/zip.mjs +120 -39
  19. package/dist/core/combine/zip.mjs.map +1 -1
  20. package/dist/core/create/counter.mjs +81 -45
  21. package/dist/core/create/counter.mjs.map +1 -1
  22. package/dist/core/create/from-abortable-promise.mjs +63 -38
  23. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  24. package/dist/core/create/from-promise.mjs +67 -25
  25. package/dist/core/create/from-promise.mjs.map +1 -1
  26. package/dist/core/create/from-subscribable.mjs +70 -26
  27. package/dist/core/create/from-subscribable.mjs.map +1 -1
  28. package/dist/core/create/index.mjs +8 -8
  29. package/dist/core/create/index.mjs.map +1 -1
  30. package/dist/core/create/just.mjs +36 -13
  31. package/dist/core/create/just.mjs.map +1 -1
  32. package/dist/core/create/source.mjs +15 -19
  33. package/dist/core/create/source.mjs.map +1 -1
  34. package/dist/core/create/timer.mjs +66 -37
  35. package/dist/core/create/timer.mjs.map +1 -1
  36. package/dist/core/index.mjs +6 -41
  37. package/dist/core/index.mjs.map +1 -1
  38. package/dist/core/operators/audit.mjs +126 -39
  39. package/dist/core/operators/audit.mjs.map +1 -1
  40. package/dist/core/operators/debounce.mjs +114 -37
  41. package/dist/core/operators/debounce.mjs.map +1 -1
  42. package/dist/core/operators/filter.mjs +39 -24
  43. package/dist/core/operators/filter.mjs.map +1 -1
  44. package/dist/core/operators/index.mjs +18 -18
  45. package/dist/core/operators/index.mjs.map +1 -1
  46. package/dist/core/operators/map.mjs +74 -26
  47. package/dist/core/operators/map.mjs.map +1 -1
  48. package/dist/core/operators/merge-map.mjs +128 -35
  49. package/dist/core/operators/merge-map.mjs.map +1 -1
  50. package/dist/core/operators/pairwise.mjs +73 -23
  51. package/dist/core/operators/pairwise.mjs.map +1 -1
  52. package/dist/core/operators/scan.mjs +59 -15
  53. package/dist/core/operators/scan.mjs.map +1 -1
  54. package/dist/core/operators/skip-if-no-change.mjs +89 -31
  55. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  56. package/dist/core/operators/skip-until.mjs +71 -29
  57. package/dist/core/operators/skip-until.mjs.map +1 -1
  58. package/dist/core/operators/skip-while.mjs +79 -27
  59. package/dist/core/operators/skip-while.mjs.map +1 -1
  60. package/dist/core/operators/switch-map.mjs +118 -31
  61. package/dist/core/operators/switch-map.mjs.map +1 -1
  62. package/dist/core/operators/take-until.mjs +70 -35
  63. package/dist/core/operators/take-until.mjs.map +1 -1
  64. package/dist/core/operators/take-while.mjs +97 -25
  65. package/dist/core/operators/take-while.mjs.map +1 -1
  66. package/dist/core/operators/throttle.mjs +108 -38
  67. package/dist/core/operators/throttle.mjs.map +1 -1
  68. package/dist/core/operators/with-buffered-from.mjs +94 -47
  69. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  70. package/dist/core/operators/with-current-value-from.mjs +78 -23
  71. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  72. package/dist/core/operators/with-initial-value.mjs +64 -14
  73. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  74. package/dist/core/predefined/index.mjs +2 -12
  75. package/dist/core/predefined/index.mjs.map +1 -1
  76. package/dist/core/predefined/operators/attach-index.mjs +55 -7
  77. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  78. package/dist/core/predefined/operators/index.mjs +12 -12
  79. package/dist/core/predefined/operators/index.mjs.map +1 -1
  80. package/dist/core/predefined/operators/map-optional.mjs +48 -5
  81. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  82. package/dist/core/predefined/operators/map-result-err.mjs +48 -5
  83. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  84. package/dist/core/predefined/operators/map-result-ok.mjs +48 -5
  85. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  86. package/dist/core/predefined/operators/map-to.mjs +41 -6
  87. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  88. package/dist/core/predefined/operators/pluck.mjs +45 -7
  89. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  90. package/dist/core/predefined/operators/skip.mjs +49 -6
  91. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  92. package/dist/core/predefined/operators/take.mjs +42 -6
  93. package/dist/core/predefined/operators/take.mjs.map +1 -1
  94. package/dist/core/predefined/operators/unwrap-optional.mjs +43 -8
  95. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  96. package/dist/core/predefined/operators/unwrap-result-err.mjs +41 -5
  97. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  98. package/dist/core/predefined/operators/unwrap-result-ok.mjs +43 -8
  99. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  100. package/dist/core/types/id.mjs +2 -2
  101. package/dist/core/types/id.mjs.map +1 -1
  102. package/dist/core/types/index.mjs +7 -3
  103. package/dist/core/types/index.mjs.map +1 -1
  104. package/dist/core/types/observable-family.d.mts +2 -2
  105. package/dist/core/types/observable-family.d.mts.map +1 -1
  106. package/dist/core/types/observable-family.mjs +10 -2
  107. package/dist/core/types/observable-family.mjs.map +1 -1
  108. package/dist/core/types/observable-kind.mjs +2 -2
  109. package/dist/core/types/observable-kind.mjs.map +1 -1
  110. package/dist/core/types/observable.mjs +14 -6
  111. package/dist/core/types/observable.mjs.map +1 -1
  112. package/dist/core/types/timer.d.mts +11 -1
  113. package/dist/core/types/timer.d.mts.map +1 -1
  114. package/dist/core/types/timer.mjs +2 -2
  115. package/dist/core/types/timer.mjs.map +1 -1
  116. package/dist/core/types/types.mjs +9 -2
  117. package/dist/core/types/types.mjs.map +1 -1
  118. package/dist/core/utils/id-maker.mjs +10 -11
  119. package/dist/core/utils/id-maker.mjs.map +1 -1
  120. package/dist/core/utils/index.mjs +5 -5
  121. package/dist/core/utils/index.mjs.map +1 -1
  122. package/dist/core/utils/max-depth.mjs +7 -4
  123. package/dist/core/utils/max-depth.mjs.map +1 -1
  124. package/dist/core/utils/observable-utils.mjs +4 -7
  125. package/dist/core/utils/observable-utils.mjs.map +1 -1
  126. package/dist/core/utils/utils.mjs +32 -28
  127. package/dist/core/utils/utils.mjs.map +1 -1
  128. package/dist/entry-point.mjs +2 -46
  129. package/dist/entry-point.mjs.map +1 -1
  130. package/dist/index.mjs +3 -46
  131. package/dist/index.mjs.map +1 -1
  132. package/dist/utils/collect-to-array.mjs +8 -13
  133. package/dist/utils/collect-to-array.mjs.map +1 -1
  134. package/dist/utils/create-boolean-state.mjs +47 -22
  135. package/dist/utils/create-boolean-state.mjs.map +1 -1
  136. package/dist/utils/create-event-emitter.mjs +67 -19
  137. package/dist/utils/create-event-emitter.mjs.map +1 -1
  138. package/dist/utils/create-reducer.mjs +54 -16
  139. package/dist/utils/create-reducer.mjs.map +1 -1
  140. package/dist/utils/create-state.mjs +54 -27
  141. package/dist/utils/create-state.mjs.map +1 -1
  142. package/dist/utils/index.mjs +6 -6
  143. package/dist/utils/index.mjs.map +1 -1
  144. package/package.json +14 -12
  145. package/src/core/base/create-child-observable.mts +6 -1
  146. package/src/core/base/create-observable-base.mts +8 -1
  147. package/src/core/types/observable-family.mts +53 -34
  148. package/src/core/types/timer.mts +11 -2
@@ -1,27 +1,69 @@
1
- import { Result, Optional } from 'ts-data-forge';
2
- import '../utils/id-maker.mjs';
3
- import { createRootObservable } from '../base/create-root-observable.mjs';
4
-
5
- const fromPromise = (promise) => createRootObservable(
6
- { initialValue: Optional.none },
7
- ({ startUpdate, isCompleted, complete }) => {
8
- promise.then((value) => {
9
- if (isCompleted()) return;
10
- startUpdate(Result.ok(value));
11
- }).catch((error) => {
12
- if (isCompleted()) return;
13
- startUpdate(
14
- Result.err(
15
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
16
- error
17
- )
18
- );
19
- }).finally(() => {
20
- complete();
1
+ import { Optional, Result } from 'ts-data-forge';
2
+ import { createRootObservable } 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
+ export const fromPromise = (promise) => createRootObservable({ initialValue: Optional.none }, ({ startUpdate, isCompleted, complete }) => {
51
+ promise
52
+ .then((value) => {
53
+ if (isCompleted())
54
+ return;
55
+ startUpdate(Result.ok(value));
56
+ })
57
+ .catch((error) => {
58
+ if (isCompleted())
59
+ return;
60
+ startUpdate(Result.err(
61
+
62
+ error));
63
+ })
64
+ .finally(() => {
65
+ complete();
21
66
  });
22
67
  return {};
23
- }
24
- );
25
-
26
- export { fromPromise };
27
- //# sourceMappingURL=from-promise.mjs.map
68
+ });
69
+ //# sourceMappingURL=from-promise.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-promise.mjs","sources":["../../../src/core/create/from-promise.mts"],"sourcesContent":["import { Optional, Result } from 'ts-data-forge';\nimport { createRootObservable } from '../base/index.mjs';\nimport { type FromPromiseObservable } from '../types/index.mjs';\n\n/**\n * Creates an observable from a Promise.\n * Emits Result.ok when the promise resolves, or Result.err when it rejects.\n *\n * @template A - The type of the resolved value\n * @template E - The type of the error\n * @param promise - The promise to convert to observable\n * @returns An observable that emits the promise result\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // promise [pending...] -> resolved/rejected\n * // data$ Ok(value) or Err(error)\n * //\n * // Explanation:\n * // - fromPromise converts a Promise into an observable\n * // - Emits a Result type: Ok(value) on success, Err(error) on failure\n * // - Completes after emitting the result\n * // - Useful for integrating async operations into reactive flows\n *\n * const fetchData = async (): Promise<Readonly<{ value: number }>> =>\n * ({\n * value: 42,\n * }) as const;\n *\n * const data$ = fromPromise(fetchData());\n *\n * const valueHistory: Readonly<{ value: number }>[] = [];\n *\n * await new Promise<void>((resolve) => {\n * data$.subscribe(\n * (result) => {\n * if (Result.isOk(result)) {\n * valueHistory.push(result.value);\n * }\n * },\n * () => {\n * resolve();\n * },\n * );\n * });\n *\n * assert.deepStrictEqual(valueHistory, [{ value: 42 }]);\n * ```\n */\nexport const fromPromise = <A, E = unknown>(\n promise: Promise<A>,\n): FromPromiseObservable<A, E> =>\n createRootObservable<Result<A, E>>(\n { initialValue: Optional.none },\n ({ startUpdate, isCompleted, complete }) => {\n promise\n .then((value) => {\n if (isCompleted()) return;\n\n startUpdate(Result.ok(value));\n })\n .catch((error: unknown) => {\n if (isCompleted()) return;\n\n startUpdate(\n Result.err(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n error as E,\n ),\n );\n })\n .finally(() => {\n complete();\n });\n\n return {};\n },\n );\n"],"names":[],"mappings":";;;;AAmDO,MAAM,WAAA,GAAc,CACzB,OAAA,KAEA,oBAAA;AAAA,EACE,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,EAAK;AAAA,EAC9B,CAAC,EAAE,WAAA,EAAa,WAAA,EAAa,UAAS,KAAM;AAC1C,IAAA,OAAA,CACG,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,IAAI,aAAY,EAAG;AAEnB,MAAA,WAAA,CAAY,MAAA,CAAO,EAAA,CAAG,KAAK,CAAC,CAAA;AAAA,IAC9B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAmB;AACzB,MAAA,IAAI,aAAY,EAAG;AAEnB,MAAA,WAAA;AAAA,QACE,MAAA,CAAO,GAAA;AAAA;AAAA,UAEL;AAAA;AACF,OACF;AAAA,IACF,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,QAAA,EAAS;AAAA,IACX,CAAC,CAAA;AAEH,IAAA,OAAO,EAAC;AAAA,EACV;AACF;;;;"}
1
+ {"version":3,"file":"from-promise.mjs","sourceRoot":"","sources":["../../../src/core/create/from-promise.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,OAAmB,EACU,EAAE,CAC/B,oBAAoB,CAClB,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,EAC/B,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;IACzC,OAAO;SACJ,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QACd,IAAI,WAAW,EAAE;YAAE,OAAO;QAE1B,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChC,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,IAAI,WAAW,EAAE;YAAE,OAAO;QAE1B,WAAW,CACT,MAAM,CAAC,GAAG;QACR,oEAAoE;QACpE,KAAU,CACX,CACF,CAAC;IACJ,CAAC,CAAC;SACD,OAAO,CAAC,GAAG,EAAE;QACZ,QAAQ,EAAE,CAAC;IACb,CAAC,CAAC,CAAC;IAEL,OAAO,EAAE,CAAC;AACZ,CAAC,CACF,CAAC"}
@@ -1,29 +1,73 @@
1
- import { Result, Optional } from 'ts-data-forge';
2
- import '../utils/id-maker.mjs';
3
- import { createRootObservable } from '../base/create-root-observable.mjs';
4
-
5
- const fromSubscribable = (subscribable) => createRootObservable(
6
- { initialValue: Optional.none },
7
- ({ startUpdate, complete }) => {
8
- subscribable.subscribe(
9
- (nextValue) => {
1
+ import { Optional, Result } from 'ts-data-forge';
2
+ import { createRootObservable } 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
+ export const fromSubscribable = (subscribable) => createRootObservable({ initialValue: Optional.none }, ({ startUpdate, complete }) => {
62
+ subscribable.subscribe((nextValue) => {
10
63
  startUpdate(Result.ok(nextValue));
11
- },
12
- (error) => {
13
- startUpdate(
14
- Result.err(
15
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
16
- error
17
- )
18
- );
19
- },
20
- () => {
64
+ }, (error) => {
65
+ startUpdate(Result.err(
66
+
67
+ error));
68
+ }, () => {
21
69
  complete();
22
- }
23
- );
70
+ });
24
71
  return {};
25
- }
26
- );
27
-
28
- export { fromSubscribable };
29
- //# sourceMappingURL=from-subscribable.mjs.map
72
+ });
73
+ //# sourceMappingURL=from-subscribable.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"from-subscribable.mjs","sources":["../../../src/core/create/from-subscribable.mts"],"sourcesContent":["import { Optional, Result } from 'ts-data-forge';\nimport { createRootObservable } from '../base/index.mjs';\nimport {\n type FromSubscribableObservable,\n type Subscribable,\n} from '../types/index.mjs';\n\n/**\n * Converts any subscribable object into a SynState Observable.\n * Works with objects that have a subscribe(onNext, onError, onComplete) method.\n *\n * @template A - The type of values from the subscribable\n * @template E - The type of errors from the subscribable\n * @param subscribable - An object with a subscribe method\n * @returns An observable that wraps values in Result type\n *\n * @example\n * ```ts\n * // Explanation:\n * // - fromSubscribable converts any subscribable object into a SynState Observable\n * // - Works with objects that have a subscribe(onNext, onError, onComplete) method\n * // - Wraps values in Result type for error handling\n * // - Useful for integrating with other reactive libraries or custom subscribables\n *\n * // Example: Converting a custom subscribable\n * const customSubscribable = {\n * subscribe: (\n * onNext: (value: number) => void,\n * _onError?: (error: unknown) => void,\n * onComplete?: () => void,\n * ) => {\n * setTimeout(() => {\n * onNext(1);\n *\n * onNext(2);\n *\n * onNext(3);\n *\n * onComplete?.();\n * }, 0);\n *\n * return { unsubscribe: () => {} };\n * },\n * } as const;\n *\n * const observable$ = fromSubscribable<number>(customSubscribable);\n *\n * const valueHistory: number[] = [];\n *\n * await new Promise<void>((resolve) => {\n * observable$.subscribe(\n * (result) => {\n * if (Result.isOk(result)) {\n * valueHistory.push(result.value);\n * }\n * },\n * () => {\n * resolve();\n * },\n * );\n * });\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3]);\n * ```\n */\nexport const fromSubscribable = <A, E = unknown>(\n subscribable: Subscribable<A>,\n): FromSubscribableObservable<A, E> =>\n createRootObservable<Result<A, E>>(\n { initialValue: Optional.none },\n ({ startUpdate, complete }) => {\n subscribable.subscribe(\n (nextValue) => {\n startUpdate(Result.ok(nextValue));\n },\n (error?: unknown) => {\n startUpdate(\n Result.err(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n error as E,\n ),\n );\n },\n () => {\n complete();\n },\n );\n\n return {};\n },\n );\n"],"names":[],"mappings":";;;;AAiEO,MAAM,gBAAA,GAAmB,CAC9B,YAAA,KAEA,oBAAA;AAAA,EACE,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,EAAK;AAAA,EAC9B,CAAC,EAAE,WAAA,EAAa,QAAA,EAAS,KAAM;AAC7B,IAAA,YAAA,CAAa,SAAA;AAAA,MACX,CAAC,SAAA,KAAc;AACb,QAAA,WAAA,CAAY,MAAA,CAAO,EAAA,CAAG,SAAS,CAAC,CAAA;AAAA,MAClC,CAAA;AAAA,MACA,CAAC,KAAA,KAAoB;AACnB,QAAA,WAAA;AAAA,UACE,MAAA,CAAO,GAAA;AAAA;AAAA,YAEL;AAAA;AACF,SACF;AAAA,MACF,CAAA;AAAA,MACA,MAAM;AACJ,QAAA,QAAA,EAAS;AAAA,MACX;AAAA,KACF;AAEA,IAAA,OAAO,EAAC;AAAA,EACV;AACF;;;;"}
1
+ {"version":3,"file":"from-subscribable.mjs","sourceRoot":"","sources":["../../../src/core/create/from-subscribable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAMzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,YAA6B,EACK,EAAE,CACpC,oBAAoB,CAClB,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,EAC/B,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC5B,YAAY,CAAC,SAAS,CACpB,CAAC,SAAS,EAAE,EAAE;QACZ,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IACpC,CAAC,EACD,CAAC,KAAe,EAAE,EAAE;QAClB,WAAW,CACT,MAAM,CAAC,GAAG;QACR,oEAAoE;QACpE,KAAU,CACX,CACF,CAAC;IACJ,CAAC,EACD,GAAG,EAAE;QACH,QAAQ,EAAE,CAAC;IACb,CAAC,CACF,CAAC;IAEF,OAAO,EAAE,CAAC;AACZ,CAAC,CACF,CAAC"}
@@ -1,8 +1,8 @@
1
- export { counter } from './counter.mjs';
2
- export { fromAbortablePromise } from './from-abortable-promise.mjs';
3
- export { fromPromise } from './from-promise.mjs';
4
- export { fromSubscribable } from './from-subscribable.mjs';
5
- export { just } from './just.mjs';
6
- export { source } from './source.mjs';
7
- export { timer } from './timer.mjs';
8
- //# sourceMappingURL=index.mjs.map
1
+ export * from './counter.mjs';
2
+ export * from './from-abortable-promise.mjs';
3
+ export * from './from-promise.mjs';
4
+ export * from './from-subscribable.mjs';
5
+ export * from './just.mjs';
6
+ export * from './source.mjs';
7
+ export * from './timer.mjs';
8
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/core/create/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,yBAAyB,CAAC;AACxC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -1,15 +1,38 @@
1
1
  import { Optional } from 'ts-data-forge';
2
- import '../utils/id-maker.mjs';
3
- import { createRootObservable } from '../base/create-root-observable.mjs';
4
-
5
- const just = (value) => {
6
- const obs = createRootObservable(
7
- { initialValue: Optional.some(value) },
8
- () => ({})
9
- );
10
- obs.complete();
11
- return obs;
12
- };
2
+ import { createRootObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
13
18
 
14
- export { just };
15
- //# sourceMappingURL=just.mjs.map
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+ export const just = (value) => {
33
+ const obs = createRootObservable({ initialValue: Optional.some(value) }, () => ({}));
34
+ obs.complete();
35
+
36
+ return obs;
37
+ };
38
+ //# sourceMappingURL=just.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"just.mjs","sources":["../../../src/core/create/just.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { createRootObservable } from '../base/index.mjs';\nimport { type InitializedRootObservable } from '../types/index.mjs';\n\n/**\n * Creates an Observable that holds a single static value and immediately\n * completes. Useful inside `switchMap` to emit a fallback value when no\n * asynchronous work is needed.\n *\n * @template A - The type of the value\n * @param value - The value to emit\n * @returns An initialized Observable that holds the value and is already completed\n *\n * @example\n * ```ts\n * const greeting$ = just('hello');\n *\n * const valueHistory: string[] = [];\n *\n * greeting$.subscribe(\n * (value) => {\n * valueHistory.push(value);\n * },\n * () => {\n * // onComplete — called immediately since just() completes right away\n * },\n * );\n *\n * assert.deepStrictEqual(valueHistory, ['hello']);\n *\n * assert.strictEqual(greeting$.isCompleted, true);\n * ```\n */\nexport const just = <const A,>(value: A): InitializedRootObservable<A> => {\n const obs = createRootObservable<A>(\n { initialValue: Optional.some(value) },\n () => ({}),\n );\n\n obs.complete();\n\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n return obs as InitializedRootObservable<A>;\n};\n"],"names":[],"mappings":";;;;AAiCO,MAAM,IAAA,GAAO,CAAW,KAAA,KAA2C;AACxE,EAAA,MAAM,GAAA,GAAM,oBAAA;AAAA,IACV,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,CAAK,KAAK,CAAA,EAAE;AAAA,IACrC,OAAO,EAAC;AAAA,GACV;AAEA,EAAA,GAAA,CAAI,QAAA,EAAS;AAGb,EAAA,OAAO,GAAA;AACT;;;;"}
1
+ {"version":3,"file":"just.mjs","sourceRoot":"","sources":["../../../src/core/create/just.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAW,KAAQ,EAAgC,EAAE;IACvE,MAAM,GAAG,GAAG,oBAAoB,CAC9B,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EACtC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CACX,CAAC;IAEF,GAAG,CAAC,QAAQ,EAAE,CAAC;IAEf,oEAAoE;IACpE,OAAO,GAAmC,CAAC;AAC7C,CAAC,CAAC"}
@@ -1,20 +1,16 @@
1
- import { Optional, Arr } from 'ts-data-forge';
2
- import '../utils/id-maker.mjs';
3
- import { createRootObservable } from '../base/create-root-observable.mjs';
4
-
5
- function source(...args) {
6
- return createRootObservable(
7
- {
8
- initialValue: Arr.isNonEmpty(args) ? Optional.some(args[0]) : Optional.none
9
- },
10
- ({ startUpdate, isCompleted }) => ({
11
- next: (nextValue) => {
12
- if (isCompleted()) return;
13
- startUpdate(nextValue);
14
- }
15
- })
16
- );
1
+ import { Arr, Optional } from 'ts-data-forge';
2
+ import { createRootObservable } from '../base/index.mjs';
3
+ export function source(...args) {
4
+ return createRootObservable({
5
+ initialValue: Arr.isNonEmpty(args)
6
+ ? Optional.some(args[0])
7
+ : Optional.none,
8
+ }, ({ startUpdate, isCompleted }) => ({
9
+ next: (nextValue) => {
10
+ if (isCompleted())
11
+ return;
12
+ startUpdate(nextValue);
13
+ },
14
+ }));
17
15
  }
18
-
19
- export { source };
20
- //# sourceMappingURL=source.mjs.map
16
+ //# sourceMappingURL=source.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"source.mjs","sources":["../../../src/core/create/source.mts"],"sourcesContent":["import { Arr, Optional } from 'ts-data-forge';\nimport { createRootObservable } from '../base/index.mjs';\nimport {\n type InitializedSourceObservable,\n type SourceObservable,\n} from '../types/index.mjs';\n\n/**\n * Creates a new Observable source that can manually emit values.\n * This is the primary way to create root observables that start reactive chains.\n *\n * @template A - The type of values emitted by the source\n * @returns A SourceObservable that can emit values via `.next()` method\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // count$ 1 2 3 ...\n * //\n * // Explanation:\n * // - source creates a new observable that you can manually emit values to\n * // - Use .next() to emit values\n * // - Foundation for building custom observables\n *\n * const count$ = source<number>();\n *\n * const valueHistory: number[] = [];\n *\n * count$.subscribe((value) => {\n * valueHistory.push(value);\n * });\n *\n * count$.next(1); // logs: 1\n *\n * assert.deepStrictEqual(valueHistory, [1]);\n *\n * count$.next(2); // logs: 2\n *\n * assert.deepStrictEqual(valueHistory, [1, 2]);\n *\n * count$.next(3); // logs: 3\n *\n * assert.deepStrictEqual(valueHistory, [1, 2, 3]);\n * ```\n */\nexport function source<const A>(\n initialValue: A,\n): InitializedSourceObservable<A>;\n\nexport function source<const A>(): SourceObservable<A>;\n\nexport function source<const A>(...args: readonly A[]): SourceObservable<A> {\n return createRootObservable<A, Readonly<{ next: (nextValue: A) => void }>>(\n {\n initialValue: Arr.isNonEmpty(args)\n ? Optional.some(args[0])\n : Optional.none,\n },\n ({ startUpdate, isCompleted }) => ({\n next: (nextValue: A) => {\n if (isCompleted()) return;\n\n startUpdate(nextValue);\n },\n }),\n );\n}\n"],"names":[],"mappings":";;;;AAoDO,SAAS,UAAmB,IAAA,EAAyC;AAC1E,EAAA,OAAO,oBAAA;AAAA,IACL;AAAA,MACE,YAAA,EAAc,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,GAC7B,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,GACrB,QAAA,CAAS;AAAA,KACf;AAAA,IACA,CAAC,EAAE,WAAA,EAAa,WAAA,EAAY,MAAO;AAAA,MACjC,IAAA,EAAM,CAAC,SAAA,KAAiB;AACtB,QAAA,IAAI,aAAY,EAAG;AAEnB,QAAA,WAAA,CAAY,SAAS,CAAA;AAAA,MACvB;AAAA,KACF;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"source.mjs","sourceRoot":"","sources":["../../../src/core/create/source.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAmDzD,MAAM,UAAU,MAAM,CAAU,GAAG,IAAkB;IACnD,OAAO,oBAAoB,CACzB;QACE,YAAY,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;YAChC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,CAAC,QAAQ,CAAC,IAAI;KAClB,EACD,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI,EAAE,CAAC,SAAY,EAAE,EAAE;YACrB,IAAI,WAAW,EAAE;gBAAE,OAAO;YAE1B,WAAW,CAAC,SAAS,CAAC,CAAC;QACzB,CAAC;KACF,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -1,40 +1,69 @@
1
1
  import { Optional } from 'ts-data-forge';
2
- import '../utils/id-maker.mjs';
3
- import { createRootObservable } from '../base/create-root-observable.mjs';
4
-
5
- const timer = (milliSeconds, options) => {
6
- let mut_timerId = void 0;
7
- let mut_isStarted = false;
8
- const resetTimer = () => {
9
- if (mut_timerId !== void 0) {
10
- clearTimeout(mut_timerId);
11
- }
12
- };
13
- const observable = createRootObservable(
14
- { initialValue: Optional.none, onComplete: resetTimer },
15
- ({ startUpdate, isCompleted, complete }) => ({
16
- start: () => {
17
- if (mut_isStarted) {
18
- console.warn("cannot start twice");
19
- return;
20
- }
21
- mut_isStarted = true;
22
- if (isCompleted()) {
23
- console.warn("cannot restart stopped TimerObservable");
24
- return;
2
+ import { createRootObservable } 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
+ export const timer = (milliSeconds, options) => {
40
+ let mut_timerId = undefined;
41
+ let mut_isStarted = false;
42
+ const resetTimer = () => {
43
+ if (mut_timerId !== undefined) {
44
+ clearTimeout(mut_timerId);
25
45
  }
26
- mut_timerId = setTimeout(() => {
27
- startUpdate(0);
28
- complete();
29
- }, milliSeconds);
30
- }
31
- })
32
- );
33
- if (!(options?.startManually ?? false)) {
34
- observable.start();
35
- }
36
- return observable;
46
+ };
47
+ const observable = createRootObservable({ initialValue: Optional.none, onComplete: resetTimer }, ({ startUpdate, isCompleted, complete }) => ({
48
+ start: () => {
49
+ if (mut_isStarted) {
50
+ console.warn('cannot start twice');
51
+ return;
52
+ }
53
+ mut_isStarted = true;
54
+ if (isCompleted()) {
55
+ console.warn('cannot restart stopped TimerObservable');
56
+ return;
57
+ }
58
+ mut_timerId = setTimeout(() => {
59
+ startUpdate(0);
60
+ complete();
61
+ }, milliSeconds);
62
+ },
63
+ }));
64
+ if (!(options?.startManually ?? false)) {
65
+ observable.start();
66
+ }
67
+ return observable;
37
68
  };
38
-
39
- export { timer };
40
- //# sourceMappingURL=timer.mjs.map
69
+ //# sourceMappingURL=timer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"timer.mjs","sources":["../../../src/core/create/timer.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { createRootObservable } from '../base/index.mjs';\nimport { type TimerId, type TimerObservable } from '../types/index.mjs';\n\n/**\n * Creates an observable that emits 0 after a specified delay and then completes.\n *\n * @param milliSeconds - The delay in milliseconds before emission\n * @param startManually - If true, waits for manual start (default: false)\n * @returns An observable that emits after delay\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // Time(ms) 0 ... 1000\n * // delayed$ X (emits and completes)\n * //\n * // Explanation:\n * // - timer emits once after the specified delay, then completes\n * // - Useful for delayed actions or timeouts\n *\n * const delayed$ = timer(100);\n *\n * const valueHistory: number[] = [];\n *\n * await new Promise<void>((resolve) => {\n * delayed$.subscribe(\n * () => {\n * valueHistory.push(1);\n * },\n * () => {\n * resolve();\n * },\n * );\n * });\n *\n * assert.deepStrictEqual(valueHistory, [1]);\n * ```\n */\nexport const timer = (\n milliSeconds: number,\n options?: Readonly<{\n startManually?: boolean;\n }>,\n): TimerObservable => {\n let mut_timerId: TimerId | undefined = undefined;\n\n let mut_isStarted = false;\n\n const resetTimer = (): void => {\n if (mut_timerId !== undefined) {\n clearTimeout(mut_timerId);\n }\n };\n\n const observable = createRootObservable<0, Readonly<{ start: () => void }>>(\n { initialValue: Optional.none, onComplete: resetTimer },\n ({ startUpdate, isCompleted, complete }) => ({\n start: () => {\n if (mut_isStarted) {\n console.warn('cannot start twice');\n\n return;\n }\n\n mut_isStarted = true;\n\n if (isCompleted()) {\n console.warn('cannot restart stopped TimerObservable');\n\n return;\n }\n\n mut_timerId = setTimeout(() => {\n startUpdate(0);\n\n complete();\n }, milliSeconds);\n },\n }),\n );\n\n if (!(options?.startManually ?? false)) {\n observable.start();\n }\n\n return observable;\n};\n"],"names":[],"mappings":";;;;AAwCO,MAAM,KAAA,GAAQ,CACnB,YAAA,EACA,OAAA,KAGoB;AACpB,EAAA,IAAI,WAAA,GAAmC,MAAA;AAEvC,EAAA,IAAI,aAAA,GAAgB,KAAA;AAEpB,EAAA,MAAM,aAAa,MAAY;AAC7B,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,MAAA,YAAA,CAAa,WAAW,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,oBAAA;AAAA,IACjB,EAAE,YAAA,EAAc,QAAA,CAAS,IAAA,EAAM,YAAY,UAAA,EAAW;AAAA,IACtD,CAAC,EAAE,WAAA,EAAa,WAAA,EAAa,UAAS,MAAO;AAAA,MAC3C,OAAO,MAAM;AACX,QAAA,IAAI,aAAA,EAAe;AACjB,UAAA,OAAA,CAAQ,KAAK,oBAAoB,CAAA;AAEjC,UAAA;AAAA,QACF;AAEA,QAAA,aAAA,GAAgB,IAAA;AAEhB,QAAA,IAAI,aAAY,EAAG;AACjB,UAAA,OAAA,CAAQ,KAAK,wCAAwC,CAAA;AAErD,UAAA;AAAA,QACF;AAEA,QAAA,WAAA,GAAc,WAAW,MAAM;AAC7B,UAAA,WAAA,CAAY,CAAC,CAAA;AAEb,UAAA,QAAA,EAAS;AAAA,QACX,GAAG,YAAY,CAAA;AAAA,MACjB;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,EAAE,OAAA,EAAS,aAAA,IAAiB,KAAA,CAAA,EAAQ;AACtC,IAAA,UAAA,CAAW,KAAA,EAAM;AAAA,EACnB;AAEA,EAAA,OAAO,UAAA;AACT;;;;"}
1
+ {"version":3,"file":"timer.mjs","sourceRoot":"","sources":["../../../src/core/create/timer.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,YAAoB,EACpB,OAEE,EACe,EAAE;IACnB,IAAI,WAAW,GAAwB,SAAS,CAAC;IAEjD,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,MAAM,UAAU,GAAG,GAAS,EAAE;QAC5B,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,YAAY,CAAC,WAAW,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,oBAAoB,CACrC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,EACvD,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QAC3C,KAAK,EAAE,GAAG,EAAE;YACV,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAEnC,OAAO;YACT,CAAC;YAED,aAAa,GAAG,IAAI,CAAC;YAErB,IAAI,WAAW,EAAE,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;gBAEvD,OAAO;YACT,CAAC;YAED,WAAW,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,WAAW,CAAC,CAAC,CAAC,CAAC;gBAEf,QAAQ,EAAE,CAAC;YACb,CAAC,EAAE,YAAY,CAAC,CAAC;QACnB,CAAC;KACF,CAAC,CACH,CAAC;IAEF,IAAI,CAAC,CAAC,OAAO,EAAE,aAAa,IAAI,KAAK,CAAC,EAAE,CAAC;QACvC,UAAU,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC"}
@@ -1,41 +1,6 @@
1
- export { combine, combineLatest } from './combine/combine.mjs';
2
- export { merge } from './combine/merge.mjs';
3
- export { zip } from './combine/zip.mjs';
4
- export { counter } from './create/counter.mjs';
5
- export { fromAbortablePromise } from './create/from-abortable-promise.mjs';
6
- export { fromPromise } from './create/from-promise.mjs';
7
- export { fromSubscribable } from './create/from-subscribable.mjs';
8
- export { just } from './create/just.mjs';
9
- export { source } from './create/source.mjs';
10
- export { timer } from './create/timer.mjs';
11
- export { audit } from './operators/audit.mjs';
12
- export { debounce } from './operators/debounce.mjs';
13
- export { filter } from './operators/filter.mjs';
14
- export { map } from './operators/map.mjs';
15
- export { flatMap, mergeMap } from './operators/merge-map.mjs';
16
- export { pairwise } from './operators/pairwise.mjs';
17
- export { scan } from './operators/scan.mjs';
18
- export { distinctUntilChanged, skipIfNoChange } from './operators/skip-if-no-change.mjs';
19
- export { skipUntil } from './operators/skip-until.mjs';
20
- export { skipWhile } from './operators/skip-while.mjs';
21
- export { switchMap } from './operators/switch-map.mjs';
22
- export { takeUntil } from './operators/take-until.mjs';
23
- export { takeWhile } from './operators/take-while.mjs';
24
- export { throttle } from './operators/throttle.mjs';
25
- export { withBuffered, withBufferedFrom } from './operators/with-buffered-from.mjs';
26
- export { withCurrentValueFrom, withLatestFrom } from './operators/with-current-value-from.mjs';
27
- export { withInitialValue } from './operators/with-initial-value.mjs';
28
- export { attachIndex, withIndex } from './predefined/operators/attach-index.mjs';
29
- export { mapOptional } from './predefined/operators/map-optional.mjs';
30
- export { mapResultErr } from './predefined/operators/map-result-err.mjs';
31
- export { mapResultOk } from './predefined/operators/map-result-ok.mjs';
32
- export { mapTo } from './predefined/operators/map-to.mjs';
33
- export { getKey, pluck } from './predefined/operators/pluck.mjs';
34
- export { skip } from './predefined/operators/skip.mjs';
35
- export { take } from './predefined/operators/take.mjs';
36
- export { unwrapOptional } from './predefined/operators/unwrap-optional.mjs';
37
- export { unwrapResultErr } from './predefined/operators/unwrap-result-err.mjs';
38
- export { unwrapResultOk } from './predefined/operators/unwrap-result-ok.mjs';
39
- import 'ts-data-forge';
40
- export { isChildObservable, isManagerObservable, isRootObservable } from './types/observable.mjs';
41
- //# sourceMappingURL=index.mjs.map
1
+ export * from './combine/index.mjs';
2
+ export * from './create/index.mjs';
3
+ export * from './operators/index.mjs';
4
+ export * from './predefined/index.mjs';
5
+ export * from './types/index.mjs';
6
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/core/index.mts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC"}