synstate 1.0.2 → 2.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 (194) hide show
  1. package/README.md +16 -17
  2. package/dist/core/class/child-observable-class.d.mts.map +1 -1
  3. package/dist/core/class/child-observable-class.mjs +148 -140
  4. package/dist/core/class/child-observable-class.mjs.map +1 -1
  5. package/dist/core/class/observable-base-class.d.mts.map +1 -1
  6. package/dist/core/class/observable-base-class.mjs +111 -107
  7. package/dist/core/class/observable-base-class.mjs.map +1 -1
  8. package/dist/core/class/root-observable-class.d.mts.map +1 -1
  9. package/dist/core/class/root-observable-class.mjs +32 -24
  10. package/dist/core/class/root-observable-class.mjs.map +1 -1
  11. package/dist/core/combine/combine.d.mts +3 -3
  12. package/dist/core/combine/combine.d.mts.map +1 -1
  13. package/dist/core/combine/combine.mjs +31 -113
  14. package/dist/core/combine/combine.mjs.map +1 -1
  15. package/dist/core/combine/merge.d.mts +2 -2
  16. package/dist/core/combine/merge.d.mts.map +1 -1
  17. package/dist/core/combine/merge.mjs +21 -69
  18. package/dist/core/combine/merge.mjs.map +1 -1
  19. package/dist/core/combine/zip.d.mts +2 -2
  20. package/dist/core/combine/zip.d.mts.map +1 -1
  21. package/dist/core/combine/zip.mjs +34 -79
  22. package/dist/core/combine/zip.mjs.map +1 -1
  23. package/dist/core/create/counter.d.mts +1 -1
  24. package/dist/core/create/counter.d.mts.map +1 -1
  25. package/dist/core/create/counter.mjs +45 -84
  26. package/dist/core/create/counter.mjs.map +1 -1
  27. package/dist/core/create/from-abortable-promise.d.mts.map +1 -1
  28. package/dist/core/create/from-abortable-promise.mjs +29 -61
  29. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  30. package/dist/core/create/from-promise.d.mts.map +1 -1
  31. package/dist/core/create/from-promise.mjs +17 -66
  32. package/dist/core/create/from-promise.mjs.map +1 -1
  33. package/dist/core/create/from-subscribable.d.mts.map +1 -1
  34. package/dist/core/create/from-subscribable.mjs +18 -69
  35. package/dist/core/create/from-subscribable.mjs.map +1 -1
  36. package/dist/core/create/just.d.mts.map +1 -1
  37. package/dist/core/create/just.mjs +5 -35
  38. package/dist/core/create/just.mjs.map +1 -1
  39. package/dist/core/create/source.mjs +10 -13
  40. package/dist/core/create/source.mjs.map +1 -1
  41. package/dist/core/create/timer.d.mts.map +1 -1
  42. package/dist/core/create/timer.mjs +32 -68
  43. package/dist/core/create/timer.mjs.map +1 -1
  44. package/dist/core/operators/audit.d.mts.map +1 -1
  45. package/dist/core/operators/audit.mjs +39 -133
  46. package/dist/core/operators/audit.mjs.map +1 -1
  47. package/dist/core/operators/debounce.d.mts.map +1 -1
  48. package/dist/core/operators/debounce.mjs +36 -119
  49. package/dist/core/operators/debounce.mjs.map +1 -1
  50. package/dist/core/operators/filter.mjs +22 -25
  51. package/dist/core/operators/filter.mjs.map +1 -1
  52. package/dist/core/operators/map.d.mts.map +1 -1
  53. package/dist/core/operators/map.mjs +28 -61
  54. package/dist/core/operators/map.mjs.map +1 -1
  55. package/dist/core/operators/merge-map.d.mts +1 -1
  56. package/dist/core/operators/merge-map.d.mts.map +1 -1
  57. package/dist/core/operators/merge-map.mjs +34 -130
  58. package/dist/core/operators/merge-map.mjs.map +1 -1
  59. package/dist/core/operators/pairwise.d.mts +3 -2
  60. package/dist/core/operators/pairwise.d.mts.map +1 -1
  61. package/dist/core/operators/pairwise.mjs +19 -75
  62. package/dist/core/operators/pairwise.mjs.map +1 -1
  63. package/dist/core/operators/scan.d.mts.map +1 -1
  64. package/dist/core/operators/scan.mjs +16 -67
  65. package/dist/core/operators/scan.mjs.map +1 -1
  66. package/dist/core/operators/skip-if-no-change.d.mts +1 -1
  67. package/dist/core/operators/skip-if-no-change.d.mts.map +1 -1
  68. package/dist/core/operators/skip-if-no-change.mjs +28 -92
  69. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  70. package/dist/core/operators/skip-until.d.mts.map +1 -1
  71. package/dist/core/operators/skip-until.mjs +23 -72
  72. package/dist/core/operators/skip-until.mjs.map +1 -1
  73. package/dist/core/operators/skip-while.d.mts.map +1 -1
  74. package/dist/core/operators/skip-while.mjs +26 -88
  75. package/dist/core/operators/skip-while.mjs.map +1 -1
  76. package/dist/core/operators/switch-map.d.mts.map +1 -1
  77. package/dist/core/operators/switch-map.mjs +31 -124
  78. package/dist/core/operators/switch-map.mjs.map +1 -1
  79. package/dist/core/operators/take-until.d.mts.map +1 -1
  80. package/dist/core/operators/take-until.mjs +28 -69
  81. package/dist/core/operators/take-until.mjs.map +1 -1
  82. package/dist/core/operators/take-while.d.mts.map +1 -1
  83. package/dist/core/operators/take-while.mjs +23 -83
  84. package/dist/core/operators/take-while.mjs.map +1 -1
  85. package/dist/core/operators/throttle.d.mts.map +1 -1
  86. package/dist/core/operators/throttle.mjs +38 -115
  87. package/dist/core/operators/throttle.mjs.map +1 -1
  88. package/dist/core/operators/with-buffered-from.d.mts +1 -1
  89. package/dist/core/operators/with-buffered-from.d.mts.map +1 -1
  90. package/dist/core/operators/with-buffered-from.mjs +37 -90
  91. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  92. package/dist/core/operators/with-current-value-from.d.mts +1 -1
  93. package/dist/core/operators/with-current-value-from.d.mts.map +1 -1
  94. package/dist/core/operators/with-current-value-from.mjs +23 -84
  95. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  96. package/dist/core/operators/with-initial-value.d.mts.map +1 -1
  97. package/dist/core/operators/with-initial-value.mjs +13 -58
  98. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  99. package/dist/core/predefined/operators/attach-index.d.mts +1 -1
  100. package/dist/core/predefined/operators/attach-index.d.mts.map +1 -1
  101. package/dist/core/predefined/operators/attach-index.mjs +0 -53
  102. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  103. package/dist/core/predefined/operators/map-optional.d.mts.map +1 -1
  104. package/dist/core/predefined/operators/map-optional.mjs +1 -48
  105. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  106. package/dist/core/predefined/operators/map-result-err.d.mts.map +1 -1
  107. package/dist/core/predefined/operators/map-result-err.mjs +1 -48
  108. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  109. package/dist/core/predefined/operators/map-result-ok.d.mts.map +1 -1
  110. package/dist/core/predefined/operators/map-result-ok.mjs +1 -48
  111. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  112. package/dist/core/predefined/operators/map-to.d.mts.map +1 -1
  113. package/dist/core/predefined/operators/map-to.mjs +0 -40
  114. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  115. package/dist/core/predefined/operators/pluck.d.mts +1 -1
  116. package/dist/core/predefined/operators/pluck.d.mts.map +1 -1
  117. package/dist/core/predefined/operators/pluck.mjs +0 -43
  118. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  119. package/dist/core/predefined/operators/skip.d.mts.map +1 -1
  120. package/dist/core/predefined/operators/skip.mjs +0 -47
  121. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  122. package/dist/core/predefined/operators/take.d.mts.map +1 -1
  123. package/dist/core/predefined/operators/take.mjs +0 -41
  124. package/dist/core/predefined/operators/take.mjs.map +1 -1
  125. package/dist/core/predefined/operators/unwrap-optional.mjs +4 -43
  126. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  127. package/dist/core/predefined/operators/unwrap-result-err.mjs +0 -40
  128. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  129. package/dist/core/predefined/operators/unwrap-result-ok.mjs +4 -43
  130. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  131. package/dist/core/types/observable-family.d.mts +10 -10
  132. package/dist/core/types/observable-family.d.mts.map +1 -1
  133. package/dist/core/types/observable.d.mts.map +1 -1
  134. package/dist/core/types/observable.mjs +3 -5
  135. package/dist/core/types/observable.mjs.map +1 -1
  136. package/dist/core/types/types.d.mts +2 -1
  137. package/dist/core/types/types.d.mts.map +1 -1
  138. package/dist/core/utils/id-maker.mjs +5 -6
  139. package/dist/core/utils/id-maker.mjs.map +1 -1
  140. package/dist/core/utils/max-depth.d.mts.map +1 -1
  141. package/dist/core/utils/max-depth.mjs +1 -3
  142. package/dist/core/utils/max-depth.mjs.map +1 -1
  143. package/dist/core/utils/observable-utils.d.mts.map +1 -1
  144. package/dist/core/utils/observable-utils.mjs +3 -2
  145. package/dist/core/utils/observable-utils.mjs.map +1 -1
  146. package/dist/core/utils/utils.d.mts.map +1 -1
  147. package/dist/core/utils/utils.mjs +23 -30
  148. package/dist/core/utils/utils.mjs.map +1 -1
  149. package/dist/utils/collect-to-array.d.mts.map +1 -1
  150. package/dist/utils/collect-to-array.mjs +9 -6
  151. package/dist/utils/collect-to-array.mjs.map +1 -1
  152. package/dist/utils/create-boolean-state.d.mts +1 -1
  153. package/dist/utils/create-boolean-state.d.mts.map +1 -1
  154. package/dist/utils/create-boolean-state.mjs +18 -46
  155. package/dist/utils/create-boolean-state.mjs.map +1 -1
  156. package/dist/utils/create-event-emitter.mjs +10 -64
  157. package/dist/utils/create-event-emitter.mjs.map +1 -1
  158. package/dist/utils/create-reducer.d.mts +1 -1
  159. package/dist/utils/create-reducer.d.mts.map +1 -1
  160. package/dist/utils/create-reducer.mjs +8 -52
  161. package/dist/utils/create-reducer.mjs.map +1 -1
  162. package/dist/utils/create-state.d.mts +1 -1
  163. package/dist/utils/create-state.d.mts.map +1 -1
  164. package/dist/utils/create-state.mjs +23 -53
  165. package/dist/utils/create-state.mjs.map +1 -1
  166. package/package.json +42 -29
  167. package/src/core/class/child-observable-class.mts +1 -1
  168. package/src/core/class/observable-base-class.mts +16 -16
  169. package/src/core/combine/combine.mts +38 -16
  170. package/src/core/combine/merge.mts +3 -3
  171. package/src/core/combine/zip.mts +24 -13
  172. package/src/core/create/counter.mts +11 -9
  173. package/src/core/create/counter.test.mts +11 -0
  174. package/src/core/create/timer.mts +6 -6
  175. package/src/core/create/timer.test.mts +11 -0
  176. package/src/core/operators/audit-throttle-teardown.test.mts +21 -0
  177. package/src/core/operators/audit.mts +6 -6
  178. package/src/core/operators/debounce.mts +6 -6
  179. package/src/core/operators/pairwise.mts +10 -5
  180. package/src/core/operators/skip-while.mts +1 -5
  181. package/src/core/operators/skip-while.test.mts +20 -0
  182. package/src/core/operators/throttle.mts +6 -6
  183. package/src/core/operators/with-buffered-from.mts +4 -4
  184. package/src/core/predefined/operators/map-optional.mts +1 -2
  185. package/src/core/predefined/operators/map-result-err.mts +1 -1
  186. package/src/core/predefined/operators/map-result-ok.mts +1 -1
  187. package/src/core/types/observable-family.mts +12 -11
  188. package/src/core/types/observable.mts +5 -7
  189. package/src/core/types/types.mts +2 -1
  190. package/src/core/utils/max-depth.mts +5 -1
  191. package/src/core/utils/utils.mts +1 -1
  192. package/src/utils/create-boolean-state.mts +1 -1
  193. package/src/utils/create-reducer.mts +1 -1
  194. package/src/utils/create-state.mts +1 -1
@@ -3,113 +3,117 @@ import { issueObservableId, issueUpdateToken, issueSubscriberId } from '../utils
3
3
  import { toSubscriber } from '../utils/observable-utils.mjs';
4
4
 
5
5
  class ObservableBaseClass {
6
- id;
7
- kind;
8
- depth;
9
- #mut_children;
10
- #subscribers;
11
- #mut_currentValue;
12
- #mut_isCompleted;
13
- #mut_updateToken;
14
- constructor({ kind, depth, initialValue, }) {
15
- this.kind = kind;
16
- this.depth = depth;
17
- this.id = issueObservableId();
18
- this.#mut_currentValue = initialValue;
19
- this.#mut_children = [];
20
- this.#subscribers = new Map();
21
- this.#mut_isCompleted = false;
22
- this.#mut_updateToken = issueUpdateToken();
23
- }
24
- addChild(child) {
25
- this.#mut_children = Arr.toPushed(this.#mut_children, child);
26
- }
27
- getSnapshot() {
28
- return this.#mut_currentValue;
29
- }
30
- getCurrentValue() {
31
- return this.#mut_currentValue;
32
- }
33
- get isCompleted() {
34
- return this.#mut_isCompleted;
35
- }
36
- get updateToken() {
37
- return this.#mut_updateToken;
38
- }
39
- get hasSubscriber() {
40
- return this.#subscribers.size > 0;
41
- }
42
- get hasChild() {
43
- return Arr.isNonEmpty(this.#mut_children);
44
- }
45
- hasActiveChild() {
46
- return this.#mut_children.some((c) => !c.isCompleted);
47
- }
48
- setNext(nextValue, updateToken) {
49
- this.#mut_updateToken = updateToken;
50
- this.#mut_currentValue = Optional.some(nextValue);
51
- for (const s of this.#subscribers.values()) {
52
- s.onNext(nextValue);
53
- }
54
- }
55
- // eslint-disable-next-line @typescript-eslint/class-methods-use-this
56
- tryUpdate(_updateToken) {
57
- throw new Error('not implemented');
58
- }
59
- tryComplete() {
60
- if (!this.hasSubscriber && !this.hasActiveChild()) {
61
- this.complete();
62
- }
63
- }
64
- complete() {
65
- if (this.isCompleted)
66
- return; // terminate only once
67
- // change state
68
- this.#mut_isCompleted = true;
69
- // run subscribers for the current value
70
- for (const s of this.#subscribers.values()) {
71
- s.onComplete();
72
- }
73
- // remove all subscribers
74
- this.#subscribers.clear();
75
- // propagate to children
76
- for (const o of this.#mut_children) {
77
- o.tryComplete();
78
- }
79
- }
80
- pipe(operator) {
81
- return operator(
82
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
83
- this);
84
- }
85
- subscribe(onNext, onComplete) {
86
- // first emit
87
- const curr = this.getSnapshot();
88
- if (Optional.isSome(curr)) {
89
- onNext(curr.value);
90
- }
91
- if (this.isCompleted) {
92
- if (onComplete !== undefined) {
93
- onComplete();
94
- }
95
- return { unsubscribe: () => { } };
96
- }
97
- const id = this.#addSubscriber(toSubscriber(onNext, onComplete));
98
- return {
99
- unsubscribe: () => {
100
- this.#removeSubscriber(id);
101
- },
102
- };
103
- }
104
- #addSubscriber(s) {
105
- // return the id of added subscriber
106
- const id = issueSubscriberId();
107
- this.#subscribers.set(id, s);
108
- return id;
109
- }
110
- #removeSubscriber(id) {
111
- this.#subscribers.delete(id);
112
- }
6
+ #mut_children;
7
+ #subscribers;
8
+ #mut_currentValue;
9
+ #mut_isCompleted;
10
+ #mut_updateToken;
11
+ id;
12
+ kind;
13
+ depth;
14
+ constructor({
15
+ kind,
16
+ depth,
17
+ initialValue
18
+ }) {
19
+ this.kind = kind;
20
+ this.depth = depth;
21
+ this.id = issueObservableId();
22
+ this.#mut_currentValue = initialValue;
23
+ this.#mut_children = [];
24
+ this.#subscribers = /* @__PURE__ */ new Map();
25
+ this.#mut_isCompleted = false;
26
+ this.#mut_updateToken = issueUpdateToken();
27
+ }
28
+ #addSubscriber(s) {
29
+ const id = issueSubscriberId();
30
+ this.#subscribers.set(id, s);
31
+ return id;
32
+ }
33
+ #removeSubscriber(id) {
34
+ this.#subscribers.delete(id);
35
+ }
36
+ addChild(child) {
37
+ this.#mut_children = Arr.toPushed(
38
+ this.#mut_children,
39
+ child
40
+ );
41
+ }
42
+ getSnapshot() {
43
+ return this.#mut_currentValue;
44
+ }
45
+ getCurrentValue() {
46
+ return this.#mut_currentValue;
47
+ }
48
+ get isCompleted() {
49
+ return this.#mut_isCompleted;
50
+ }
51
+ get updateToken() {
52
+ return this.#mut_updateToken;
53
+ }
54
+ get hasSubscriber() {
55
+ return this.#subscribers.size > 0;
56
+ }
57
+ get hasChild() {
58
+ return Arr.isNonEmpty(this.#mut_children);
59
+ }
60
+ hasActiveChild() {
61
+ return this.#mut_children.some((c) => !c.isCompleted);
62
+ }
63
+ setNext(nextValue, updateToken) {
64
+ this.#mut_updateToken = updateToken;
65
+ this.#mut_currentValue = Optional.some(nextValue);
66
+ for (const s of this.#subscribers.values()) {
67
+ s.onNext(nextValue);
68
+ }
69
+ }
70
+ // eslint-disable-next-line @typescript-eslint/class-methods-use-this
71
+ tryUpdate(_updateToken) {
72
+ throw new Error("not implemented");
73
+ }
74
+ tryComplete() {
75
+ if (!this.hasSubscriber && !this.hasActiveChild()) {
76
+ this.complete();
77
+ }
78
+ }
79
+ complete() {
80
+ if (this.isCompleted) return;
81
+ this.#mut_isCompleted = true;
82
+ for (const s of this.#subscribers.values()) {
83
+ s.onComplete();
84
+ }
85
+ this.#subscribers.clear();
86
+ for (const o of this.#mut_children) {
87
+ o.tryComplete();
88
+ }
89
+ }
90
+ pipe(operator) {
91
+ return operator(
92
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
93
+ this
94
+ );
95
+ }
96
+ subscribe(onNext, onComplete) {
97
+ const curr = this.getSnapshot();
98
+ if (Optional.isSome(curr)) {
99
+ onNext(curr.value);
100
+ }
101
+ if (this.isCompleted) {
102
+ if (onComplete !== void 0) {
103
+ onComplete();
104
+ }
105
+ return { unsubscribe: () => {
106
+ } };
107
+ }
108
+ const id = this.#addSubscriber(
109
+ toSubscriber(onNext, onComplete)
110
+ );
111
+ return {
112
+ unsubscribe: () => {
113
+ this.#removeSubscriber(id);
114
+ }
115
+ };
116
+ }
113
117
  }
114
118
 
115
119
  export { ObservableBaseClass };
@@ -1 +1 @@
1
- {"version":3,"file":"observable-base-class.mjs","sources":["../../../src/core/class/observable-base-class.mts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observable-base-class.mjs","sources":["../../../src/core/class/observable-base-class.mts"],"sourcesContent":["import { Arr, Optional } from 'ts-data-forge';\nimport { type MutableMap } from 'ts-type-forge';\nimport {\n type ChildObservable,\n type InitializedObservable,\n type Observable,\n type ObservableBase,\n type Operator,\n type Subscriber,\n type SubscriberId,\n type Subscription,\n type UpdateToken,\n type WithInitialValueOperator,\n} from '../types/index.mjs';\nimport {\n issueObservableId,\n issueSubscriberId,\n issueUpdateToken,\n toSubscriber,\n} from '../utils/index.mjs';\n\nexport class ObservableBaseClass<\n A,\n Kind extends ObservableBase<A>['kind'],\n Depth extends ObservableBase<A>['depth'],\n> implements ObservableBase<A> {\n #mut_children: readonly ChildObservable<unknown>[];\n readonly #subscribers: MutableMap<SubscriberId, Subscriber<A>>;\n #mut_currentValue: ReturnType<ObservableBase<A>['getSnapshot']>;\n #mut_isCompleted: ObservableBase<A>['isCompleted'];\n #mut_updateToken: ObservableBase<A>['updateToken'];\n readonly id;\n readonly kind: Kind;\n readonly depth: Depth;\n\n constructor({\n kind,\n depth,\n initialValue,\n }: Readonly<{\n kind: Kind;\n depth: Depth;\n initialValue: ReturnType<ObservableBase<A>['getSnapshot']>;\n }>) {\n this.kind = kind;\n\n this.depth = depth;\n\n this.id = issueObservableId();\n\n this.#mut_currentValue = initialValue;\n\n this.#mut_children = [];\n\n this.#subscribers = new Map<SubscriberId, Subscriber<A>>();\n\n this.#mut_isCompleted = false;\n\n this.#mut_updateToken = issueUpdateToken();\n }\n\n #addSubscriber(s: Subscriber<A>): SubscriberId {\n // return the id of added subscriber\n const id = issueSubscriberId();\n\n this.#subscribers.set(id, s);\n\n return id;\n }\n\n #removeSubscriber(id: SubscriberId): void {\n this.#subscribers.delete(id);\n }\n\n addChild<B>(child: ChildObservable<B>): void {\n this.#mut_children = Arr.toPushed(\n this.#mut_children,\n\n child as ChildObservable<unknown>,\n );\n }\n\n getSnapshot(): ReturnType<ObservableBase<A>['getSnapshot']> {\n return this.#mut_currentValue;\n }\n\n protected getCurrentValue(): ReturnType<ObservableBase<A>['getSnapshot']> {\n return this.#mut_currentValue;\n }\n\n get isCompleted(): boolean {\n return this.#mut_isCompleted;\n }\n\n get updateToken(): UpdateToken {\n return this.#mut_updateToken;\n }\n\n get hasSubscriber(): boolean {\n return this.#subscribers.size > 0;\n }\n\n get hasChild(): boolean {\n return Arr.isNonEmpty(this.#mut_children);\n }\n\n hasActiveChild(): boolean {\n return this.#mut_children.some((c) => !c.isCompleted);\n }\n\n protected setNext(nextValue: A, updateToken: UpdateToken): void {\n this.#mut_updateToken = updateToken;\n\n this.#mut_currentValue = Optional.some(nextValue);\n\n for (const s of this.#subscribers.values()) {\n s.onNext(nextValue);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/class-methods-use-this\n tryUpdate(_updateToken: UpdateToken): void {\n throw new Error('not implemented');\n }\n\n tryComplete(): void {\n if (!this.hasSubscriber && !this.hasActiveChild()) {\n this.complete();\n }\n }\n\n complete(): void {\n if (this.isCompleted) return; // terminate only once\n\n // change state\n this.#mut_isCompleted = true;\n\n // run subscribers for the current value\n for (const s of this.#subscribers.values()) {\n s.onComplete();\n }\n\n // remove all subscribers\n this.#subscribers.clear();\n\n // propagate to children\n for (const o of this.#mut_children) {\n o.tryComplete();\n }\n }\n\n pipe<B>(operator: WithInitialValueOperator<A, B>): InitializedObservable<B>;\n pipe<B>(operator: Operator<A, B>): Observable<B>;\n pipe<B>(operator: Operator<A, B>): Observable<B> {\n return operator(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n this as unknown as InitializedObservable<A>,\n );\n }\n\n subscribe(onNext: (v: A) => void, onComplete?: () => void): Subscription {\n // first emit\n const curr = this.getSnapshot();\n\n if (Optional.isSome(curr)) {\n onNext(curr.value);\n }\n\n if (this.isCompleted) {\n if (onComplete !== undefined) {\n onComplete();\n }\n\n return { unsubscribe: () => {} };\n }\n\n const id: SubscriberId = this.#addSubscriber(\n toSubscriber(onNext, onComplete),\n );\n\n return {\n unsubscribe: () => {\n this.#removeSubscriber(id);\n },\n };\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"root-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/root-observable-class.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,qBAAa,mBAAmB,CAAC,CAAC,CAChC,SAAQ,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CACxC,YAAW,cAAc,CAAC,CAAC,CAAC;;IAG5B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;gBAEnD,EACV,YAAY,GACb,EAAE,QAAQ,CAAC;QACV,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC;IAYF,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAiBjD,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI;CAShC"}
1
+ {"version":3,"file":"root-observable-class.d.mts","sourceRoot":"","sources":["../../../src/core/class/root-observable-class.mts"],"names":[],"mappings":"AAAA,OAAO,EAAO,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,qBAAa,mBAAmB,CAAC,CAAC,CAChC,SAAQ,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CACxC,YAAW,cAAc,CAAC,CAAC,CAAC;;IAG5B,SAAS,CAAC,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IAE/D,YAAY,EACV,YAAY,GACb,EAAE,QAAQ,CAAC;QACV,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC3B,CAAC,EAUD;IAED,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAehD;IAED,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAQ9B;CACF"}
@@ -4,31 +4,39 @@ import { binarySearch } from '../utils/utils.mjs';
4
4
  import { ObservableBaseClass } from './observable-base-class.mjs';
5
5
 
6
6
  class RootObservableClass extends ObservableBaseClass {
7
- #mut_propagationOrder;
8
- _descendantsIdSet;
9
- constructor({ initialValue, }) {
10
- super({
11
- kind: 'root',
12
- depth: 0,
13
- initialValue,
14
- });
15
- this.#mut_propagationOrder = [];
16
- this._descendantsIdSet = new Set();
17
- }
18
- addDescendant(child) {
19
- if (this._descendantsIdSet.has(child.id))
20
- return;
21
- this._descendantsIdSet.add(child.id);
22
- const insertPos = binarySearch(this.#mut_propagationOrder.map((a) => a.depth), child.depth);
23
- this.#mut_propagationOrder = Arr.toInserted(this.#mut_propagationOrder, insertPos, child);
24
- }
25
- startUpdate(nextValue) {
26
- const updateToken = issueUpdateToken();
27
- this.setNext(nextValue, updateToken);
28
- for (const p of this.#mut_propagationOrder) {
29
- p.tryUpdate(updateToken);
30
- }
7
+ #mut_propagationOrder;
8
+ _descendantsIdSet;
9
+ constructor({
10
+ initialValue
11
+ }) {
12
+ super({
13
+ kind: "root",
14
+ depth: 0,
15
+ initialValue
16
+ });
17
+ this.#mut_propagationOrder = [];
18
+ this._descendantsIdSet = /* @__PURE__ */ new Set();
19
+ }
20
+ addDescendant(child) {
21
+ if (this._descendantsIdSet.has(child.id)) return;
22
+ this._descendantsIdSet.add(child.id);
23
+ const insertPos = binarySearch(
24
+ this.#mut_propagationOrder.map((a) => a.depth),
25
+ child.depth
26
+ );
27
+ this.#mut_propagationOrder = Arr.toInserted(
28
+ this.#mut_propagationOrder,
29
+ insertPos,
30
+ child
31
+ );
32
+ }
33
+ startUpdate(nextValue) {
34
+ const updateToken = issueUpdateToken();
35
+ this.setNext(nextValue, updateToken);
36
+ for (const p of this.#mut_propagationOrder) {
37
+ p.tryUpdate(updateToken);
31
38
  }
39
+ }
32
40
  }
33
41
 
34
42
  export { RootObservableClass };
@@ -1 +1 @@
1
- {"version":3,"file":"root-observable-class.mjs","sources":["../../../src/core/class/root-observable-class.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAWM,MAAO,mBACX,SAAQ,mBAAiC,CAAA;AAGzC,IAAA,qBAAqB;AACF,IAAA,iBAAiB;IAEpC,WAAA,CAAY,EACV,YAAY,GAGZ,EAAA;AACA,QAAA,KAAK,CAAC;AACJ,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,KAAK,EAAE,CAAC;YACR,YAAY;AACb,SAAA,CAAC;AAEF,QAAA,IAAI,CAAC,qBAAqB,GAAG,EAAE;AAE/B,QAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,GAAG,EAAgB;IAClD;AAEA,IAAA,aAAa,CAAI,KAAyB,EAAA;QACxC,IAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAAE;QAE1C,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QAEpC,MAAM,SAAS,GAAG,YAAY,CAC5B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,EAC9C,KAAK,CAAC,KAAK,CACZ;AAED,QAAA,IAAI,CAAC,qBAAqB,GAAG,GAAG,CAAC,UAAU,CACzC,IAAI,CAAC,qBAAqB,EAC1B,SAAS,EACT,KAAK,CACN;IACH;AAEA,IAAA,WAAW,CAAC,SAAY,EAAA;AACtB,QAAA,MAAM,WAAW,GAAG,gBAAgB,EAAE;AAEtC,QAAA,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC;AAEpC,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC1C,YAAA,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;QAC1B;IACF;AACD;;;;"}
1
+ {"version":3,"file":"root-observable-class.mjs","sources":["../../../src/core/class/root-observable-class.mts"],"sourcesContent":["import { Arr, Optional } from 'ts-data-forge';\nimport { type MutableSet } from 'ts-type-forge';\nimport {\n isRootObservable,\n type ChildObservable,\n type ObservableId,\n type RootObservable,\n} from '../types/index.mjs';\nimport { binarySearch, issueUpdateToken } from '../utils/index.mjs';\nimport { ObservableBaseClass } from './observable-base-class.mjs';\n\nexport class RootObservableClass<A>\n extends ObservableBaseClass<A, 'root', 0>\n implements RootObservable<A>\n{\n #mut_propagationOrder: readonly ChildObservable<unknown>[];\n protected readonly _descendantsIdSet: MutableSet<ObservableId>;\n\n constructor({\n initialValue,\n }: Readonly<{\n initialValue: Optional<A>;\n }>) {\n super({\n kind: 'root',\n depth: 0,\n initialValue,\n });\n\n this.#mut_propagationOrder = [];\n\n this._descendantsIdSet = new Set<ObservableId>();\n }\n\n addDescendant<B>(child: ChildObservable<B>): void {\n if (this._descendantsIdSet.has(child.id)) return;\n\n this._descendantsIdSet.add(child.id);\n\n const insertPos = binarySearch(\n this.#mut_propagationOrder.map((a) => a.depth),\n child.depth,\n );\n\n this.#mut_propagationOrder = Arr.toInserted(\n this.#mut_propagationOrder,\n insertPos,\n child,\n );\n }\n\n startUpdate(nextValue: A): void {\n const updateToken = issueUpdateToken();\n\n this.setNext(nextValue, updateToken);\n\n for (const p of this.#mut_propagationOrder) {\n p.tryUpdate(updateToken);\n }\n }\n}\n\nif (import.meta.vitest !== undefined) {\n test('isRootObservable', () => {\n assert.isTrue(\n isRootObservable(\n new RootObservableClass({\n initialValue: Optional.some(0),\n }),\n ),\n );\n });\n}\n"],"names":[],"mappings":";;;;;AAWO,MAAM,4BACH,mBAAA,CAEV;AAAA,EACE,qBAAA;AAAA,EACmB,iBAAA;AAAA,EAEnB,WAAA,CAAY;AAAA,IACV;AAAA,GACF,EAEI;AACF,IAAA,KAAA,CAAM;AAAA,MACJ,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP;AAAA,KACD,CAAA;AAED,IAAA,IAAA,CAAK,wBAAwB,EAAC;AAE9B,IAAA,IAAA,CAAK,iBAAA,uBAAwB,GAAA,EAAkB;AAAA,EACjD;AAAA,EAEA,cAAiB,KAAA,EAAiC;AAChD,IAAA,IAAI,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,EAAG;AAE1C,IAAA,IAAA,CAAK,iBAAA,CAAkB,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA;AAEnC,IAAA,MAAM,SAAA,GAAY,YAAA;AAAA,MAChB,KAAK,qBAAA,CAAsB,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAAA,MAC7C,KAAA,CAAM;AAAA,KACR;AAEA,IAAA,IAAA,CAAK,wBAAwB,GAAA,CAAI,UAAA;AAAA,MAC/B,IAAA,CAAK,qBAAA;AAAA,MACL,SAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAAA,EAEA,YAAY,SAAA,EAAoB;AAC9B,IAAA,MAAM,cAAc,gBAAA,EAAiB;AAErC,IAAA,IAAA,CAAK,OAAA,CAAQ,WAAW,WAAW,CAAA;AAEnC,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,qBAAA,EAAuB;AAC1C,MAAA,CAAA,CAAE,UAAU,WAAW,CAAA;AAAA,IACzB;AAAA,EACF;AACF;;;;"}
@@ -1,4 +1,4 @@
1
- import { type NonEmptyArray } from 'ts-type-forge';
1
+ import { type NonEmptyTuple } from 'ts-type-forge';
2
2
  import { type CombineObservableRefined, type Observable } from '../types/index.mjs';
3
3
  /**
4
4
  * Combines multiple observables into a single observable that emits an array of their latest values.
@@ -57,10 +57,10 @@ import { type CombineObservableRefined, type Observable } from '../types/index.m
57
57
  * ]);
58
58
  * ```
59
59
  */
60
- export declare const combine: <const OS extends NonEmptyArray<Observable<unknown>>>(parents: OS) => CombineObservableRefined<OS>;
60
+ export declare const combine: <const OS extends NonEmptyTuple<Observable<unknown>>>(parents: OS) => CombineObservableRefined<OS>;
61
61
  /**
62
62
  * Alias for `combine`.
63
63
  * @see combine
64
64
  */
65
- export declare const combineLatest: <const OS extends NonEmptyArray<Observable<unknown>>>(parents: OS) => CombineObservableRefined<OS>;
65
+ export declare const combineLatest: typeof combine;
66
66
  //# sourceMappingURL=combine.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"combine.d.mts","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,OAAO,EAEL,KAAK,wBAAwB,EAI7B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,OAAO,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EACzE,SAAS,EAAE,KACV,wBAAwB,CAAC,EAAE,CAIgB,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,aAAa,SAZI,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAChE,EAAE,KACV,wBAAwB,CAAC,EAAE,CAUM,CAAC"}
1
+ {"version":3,"file":"combine.d.mts","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,eAAe,CAAC;AAI/D,OAAO,EAEL,KAAK,wBAAwB,EAI7B,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAE5B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwDG;AACH,eAAO,MAAM,OAAO,GAAI,KAAK,CAAC,EAAE,SAAS,aAAa,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,WAChE,EAAE,KACV,wBAAwB,CAAC,EAAE,CAIgB,CAAC;AAE/C;;;GAGG;AACH,eAAO,MAAM,aAAa,gBAAU,CAAC"}
@@ -1,122 +1,40 @@
1
- import { Optional, Arr } from 'ts-data-forge';
1
+ import { Arr, Optional } from 'ts-data-forge';
2
2
  import { SyncChildObservableClass } from '../class/child-observable-class.mjs';
3
3
  import '../utils/id-maker.mjs';
4
- import { source } from '../create/source.mjs';
5
- import { withInitialValue } from '../operators/with-initial-value.mjs';
6
4
 
7
- /**
8
- * Combines multiple observables into a single observable that emits an array of their latest values.
9
- * Emits whenever any of the source observables emit, but only after all sources have emitted at least once.
10
- *
11
- * @template OS - Tuple type of source observables
12
- * @param parents - Array of observables to combine
13
- * @returns A combined observable emitting tuples of values
14
- *
15
- * @example
16
- * ```ts
17
- * // Timeline:
18
- * //
19
- * // name$ "Alice" "Bob"
20
- * // age$ 25 30
21
- * // user$ ["Alice",25] ["Bob",25] ["Bob",30]
22
- * //
23
- * // Explanation:
24
- * // - combine waits for all sources to emit at least once
25
- * // - Then emits the latest value from all sources whenever any source emits
26
- * // - Always emits an array with the latest values from each source
27
- *
28
- * const name$ = source<string>();
29
- *
30
- * const age$ = source<number>();
31
- *
32
- * const user$ = combine([name$, age$]);
33
- *
34
- * const userHistory: (readonly [string, number])[] = [];
35
- *
36
- * user$.subscribe(([name_, age]) => {
37
- * userHistory.push([name_, age]);
38
- * });
39
- *
40
- * name$.next('Alice'); // nothing logged (age$ hasn't emitted yet)
41
- *
42
- * assert.deepStrictEqual(userHistory, []);
43
- *
44
- * age$.next(25); // logs: { name: 'Alice', age: 25 }
45
- *
46
- * assert.deepStrictEqual(userHistory, [['Alice', 25]]);
47
- *
48
- * name$.next('Bob'); // logs: { name: 'Bob', age: 25 }
49
- *
50
- * assert.deepStrictEqual(userHistory, [
51
- * ['Alice', 25],
52
- * ['Bob', 25],
53
- * ]);
54
- *
55
- * age$.next(30); // logs: { name: 'Bob', age: 30 }
56
- *
57
- * assert.deepStrictEqual(userHistory, [
58
- * ['Alice', 25],
59
- * ['Bob', 25],
60
- * ['Bob', 30],
61
- * ]);
62
- * ```
63
- */
64
- const combine = (parents) =>
65
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
66
- new CombineObservableClass(parents);
67
- /**
68
- * Alias for `combine`.
69
- * @see combine
70
- */
5
+ const combine = (parents) => (
6
+ // eslint-disable-next-line total-functions/no-unsafe-type-assertion
7
+ new CombineObservableClass(
8
+ parents
9
+ )
10
+ );
71
11
  const combineLatest = combine;
72
12
  class CombineObservableClass extends SyncChildObservableClass {
73
- constructor(parents) {
74
- const parentsValues = parents.map((p) => p.getSnapshot());
75
- super({
76
- parents,
77
- initialValue: parentsValues.every(Optional.isSome)
78
- ? Optional.some(
79
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
80
- Arr.map(parentsValues, (c) => c.value))
81
- : Optional.none,
82
- });
13
+ constructor(parents) {
14
+ const parentsValues = Arr.map(
15
+ parents,
16
+ (p) => p.getSnapshot()
17
+ );
18
+ const initialValue = Arr.every(parentsValues, Optional.isSome) ? Optional.some(Arr.map(parentsValues, (c) => c.value)) : Optional.none;
19
+ super({
20
+ parents,
21
+ initialValue
22
+ });
23
+ }
24
+ tryUpdate(updateToken) {
25
+ if (this.parents.every((o) => o.updateToken !== updateToken)) return;
26
+ const parentValues = Arr.map(
27
+ this.parents,
28
+ (a) => a.getSnapshot()
29
+ );
30
+ if (Arr.every(parentValues, Optional.isSome)) {
31
+ const nextValue = Arr.map(
32
+ parentValues,
33
+ (a) => a.value
34
+ );
35
+ this.setNext(nextValue, updateToken);
83
36
  }
84
- tryUpdate(updateToken) {
85
- if (this.parents.every((o) => o.updateToken !== updateToken))
86
- return; // all parents are skipped
87
- const parentValues = this.parents.map((a) => a.getSnapshot());
88
- if (parentValues.every(Optional.isSome)) {
89
- const nextValue =
90
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
91
- Arr.map(parentValues, (a) => a.value);
92
- this.setNext(nextValue, updateToken);
93
- }
94
- }
95
- }
96
- {
97
- {
98
- const s1 = source();
99
- const s2 = source();
100
- combine([s1, s2]);
101
- }
102
- {
103
- const s1 = source().pipe(withInitialValue(1));
104
- const s2 = source();
105
- combine([s1, s2]);
106
- }
107
- {
108
- const s1 = source().pipe(withInitialValue(1));
109
- const s2 = source().pipe(withInitialValue(2));
110
- combine([s1, s2]);
111
- // Returns InitializedObservable if all OS are InitializedObservable
112
- }
113
- const r1 = source(1);
114
- const r2 = source('a');
115
- combine([r1, r2]);
116
- combine([
117
- r1.pipe(withInitialValue(0)),
118
- r2.pipe(withInitialValue(0)),
119
- ]);
37
+ }
120
38
  }
121
39
 
122
40
  export { combine, combineLatest };
@@ -1 +1 @@
1
- {"version":3,"file":"combine.mjs","sources":["../../../src/core/combine/combine.mts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwDG;AACI,MAAM,OAAO,GAAG,CACrB,OAAW;AAEX;AACA,IAAI,sBAAsB,CACxB,OAAO;AAGX;;;AAGG;AACI,MAAM,aAAa,GAAG;AAE7B,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,WAAwB,EAAA;AACzC,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,KAAK,WAAW,CAAC;AAAE,YAAA,OAAO;AAErE,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,WAAW,CAAC;;;AAGzC;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,MAAM,CAAC,CAAC,CAAC;AAEpB,IAAA,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;IAEX,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":["import { Arr, expectType, Optional } from 'ts-data-forge';\nimport { type NonEmptyTuple, type Tuple } from 'ts-type-forge';\nimport { SyncChildObservableClass } from '../class/index.mjs';\nimport { source } from '../create/index.mjs';\nimport { withInitialValue } from '../operators/index.mjs';\nimport {\n type CombineObservable,\n type CombineObservableRefined,\n type InitializedObservable,\n type InitializedSyncChildObservable,\n type NonEmptyUnknownList,\n type Observable,\n type SyncChildObservable,\n type UpdateToken,\n type Wrap,\n} from '../types/index.mjs';\n\n/**\n * Combines multiple observables into a single observable that emits an array of their latest values.\n * Emits whenever any of the source observables emit, but only after all sources have emitted at least once.\n *\n * @template OS - Tuple type of source observables\n * @param parents - Array of observables to combine\n * @returns A combined observable emitting tuples of values\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // name$ \"Alice\" \"Bob\"\n * // age$ 25 30\n * // user$ [\"Alice\",25] [\"Bob\",25] [\"Bob\",30]\n * //\n * // Explanation:\n * // - combine waits for all sources to emit at least once\n * // - Then emits the latest value from all sources whenever any source emits\n * // - Always emits an array with the latest values from each source\n *\n * const name$ = source<string>();\n *\n * const age$ = source<number>();\n *\n * const user$ = combine([name$, age$]);\n *\n * const userHistory: (readonly [string, number])[] = [];\n *\n * user$.subscribe(([name_, age]) => {\n * userHistory.push([name_, age]);\n * });\n *\n * name$.next('Alice'); // nothing logged (age$ hasn't emitted yet)\n *\n * assert.deepStrictEqual(userHistory, []);\n *\n * age$.next(25); // logs: { name: 'Alice', age: 25 }\n *\n * assert.deepStrictEqual(userHistory, [['Alice', 25]]);\n *\n * name$.next('Bob'); // logs: { name: 'Bob', age: 25 }\n *\n * assert.deepStrictEqual(userHistory, [\n * ['Alice', 25],\n * ['Bob', 25],\n * ]);\n *\n * age$.next(30); // logs: { name: 'Bob', age: 30 }\n *\n * assert.deepStrictEqual(userHistory, [\n * ['Alice', 25],\n * ['Bob', 25],\n * ['Bob', 30],\n * ]);\n * ```\n */\nexport const combine = <const OS extends NonEmptyTuple<Observable<unknown>>>(\n parents: OS,\n): CombineObservableRefined<OS> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n new CombineObservableClass(\n parents,\n ) as unknown as CombineObservableRefined<OS>;\n\n/**\n * Alias for `combine`.\n * @see combine\n */\nexport const combineLatest = combine;\n\nclass CombineObservableClass<const A extends NonEmptyUnknownList>\n extends SyncChildObservableClass<A, A>\n implements CombineObservable<A>\n{\n constructor(parents: Wrap<A>) {\n const parentsValues: Tuple.MapTo<Optional<A[number]>, A> = Arr.map(\n parents,\n (p) => p.getSnapshot(),\n );\n\n // The annotation on `initialValue` is what replaces the type assertion.\n // `Arr.map` carries a single result element type, so it reports `A[number]`\n // at every position, and `Tuple.MapTo<A[number], A>` — the uniform mapping\n // — is *not* assignable back to `A`. The positional\n // `Readonly<{ [K in keyof A]: A[K] }>` is, and TypeScript accepts the\n // uniform result into it because the two mapped types share `keyof A`. So\n // it is the annotation, not an assertion, that records the position-wise\n // fact the checker cannot derive on its own.\n const initialValue: Optional<Readonly<{ [K in keyof A]: A[K] }>> =\n Arr.every(parentsValues, Optional.isSome)\n ? Optional.some(Arr.map(parentsValues, (c) => c.value))\n : Optional.none;\n\n super({\n parents,\n initialValue,\n });\n }\n\n override tryUpdate(updateToken: UpdateToken): void {\n if (this.parents.every((o) => o.updateToken !== updateToken)) return; // all parents are skipped\n\n // Same shape-preserving chain as the constructor: `Arr.map` (not the\n // native one, which drops the tuple shape) into the uniform\n // `Tuple.MapTo`, then a positional annotation to get back to `A`.\n const parentValues: Tuple.MapTo<Optional<A[number]>, A> = Arr.map(\n this.parents,\n (a) => a.getSnapshot(),\n );\n\n if (Arr.every(parentValues, Optional.isSome)) {\n const nextValue: Readonly<{ [K in keyof A]: A[K] }> = Arr.map(\n parentValues,\n (a) => a.value,\n );\n\n this.setNext(nextValue, updateToken);\n }\n }\n}\n\nif (import.meta.vitest !== undefined) {\n test('type test', () => {\n expect(1).toBe(1); // dummy\n });\n\n {\n const s1: Observable<1> = source<1>();\n\n const s2: Observable<2> = source<2>();\n\n const _d = combine([s1, s2]);\n\n expectType<typeof _d, CombineObservable<readonly [1, 2]>>('=');\n\n expectType<typeof _d, Observable<readonly [1, 2]>>('<=');\n }\n\n {\n const s1: InitializedObservable<1> = source<1>().pipe(withInitialValue(1));\n\n const s2: Observable<2> = source<2>();\n\n const _d = combine([s1, s2]);\n\n expectType<typeof _d, CombineObservable<readonly [1, 2]>>('=');\n\n expectType<typeof _d, Observable<readonly [1, 2]>>('<=');\n }\n\n {\n const s1: InitializedObservable<1> = source<1>().pipe(withInitialValue(1));\n\n const s2: InitializedObservable<2> = source<2>().pipe(withInitialValue(2));\n\n const _d = combine([s1, s2]);\n\n // Returns InitializedObservable if all OS are InitializedObservable\n expectType<typeof _d, InitializedObservable<readonly [1, 2]>>('<=');\n }\n\n const r1 = source(1);\n\n const r2 = source('a');\n\n const _c = combine([r1, r2]);\n\n const _ci = combine([\n r1.pipe(withInitialValue(0)),\n r2.pipe(withInitialValue(0)),\n ]);\n\n expectType<typeof _c, SyncChildObservable<readonly [number, string]>>('<=');\n\n expectType<\n typeof _ci,\n InitializedSyncChildObservable<readonly [number, number | string]>\n >('<=');\n}\n"],"names":[],"mappings":";;;;AA0EO,MAAM,UAAU,CACrB,OAAA;AAAA;AAAA,EAGA,IAAI,sBAAA;AAAA,IACF;AAAA;AACF;AAMK,MAAM,aAAA,GAAgB;AAE7B,MAAM,+BACI,wBAAA,CAEV;AAAA,EACE,YAAY,OAAA,EAAkB;AAC5B,IAAA,MAAM,gBAAqD,GAAA,CAAI,GAAA;AAAA,MAC7D,OAAA;AAAA,MACA,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA;AAAY,KACvB;AAUA,IAAA,MAAM,eACJ,GAAA,CAAI,KAAA,CAAM,eAAe,QAAA,CAAS,MAAM,IACpC,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,eAAe,CAAC,CAAA,KAAM,EAAE,KAAK,CAAC,IACpD,QAAA,CAAS,IAAA;AAEf,IAAA,KAAA,CAAM;AAAA,MACJ,OAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EAAA;AACH,EAES,UAAU,WAAA,EAAgC;AACjD,IAAA,IAAI,IAAA,CAAK,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,WAAW,CAAA,EAAG;AAK9D,IAAA,MAAM,eAAoD,GAAA,CAAI,GAAA;AAAA,MAC5D,IAAA,CAAK,OAAA;AAAA,MACL,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA;AAAY,KACvB;AAEA,IAAA,IAAI,GAAA,CAAI,KAAA,CAAM,YAAA,EAAc,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5C,MAAA,MAAM,YAAgD,GAAA,CAAI,GAAA;AAAA,QACxD,YAAA;AAAA,QACA,CAAC,MAAM,CAAA,CAAE;AAAA,OACX;AAEA,MAAA,IAAA,CAAK,OAAA,CAAQ,WAAW,WAAW,CAAA;AAAA,IAAA;AACrC,EAAA;AAEJ;;;;"}
@@ -1,4 +1,4 @@
1
- import { type NonEmptyArray } from 'ts-type-forge';
1
+ import { type NonEmptyTuple } from 'ts-type-forge';
2
2
  import { type MergeObservableRefined, type Observable } from '../types/index.mjs';
3
3
  /**
4
4
  * Merges multiple observables into a single observable that emits all values from all sources.
@@ -51,5 +51,5 @@ import { type MergeObservableRefined, type Observable } from '../types/index.mjs
51
51
  * @note To improve code readability, consider using `createState` instead of `merge`,
52
52
  * subscribing to `parents` and calling `setState` within it.
53
53
  */
54
- export declare const merge: <const OS extends NonEmptyArray<Observable<unknown>>>(parents: OS) => MergeObservableRefined<OS>;
54
+ export declare const merge: <const OS extends NonEmptyTuple<Observable<unknown>>>(parents: OS) => MergeObservableRefined<OS>;
55
55
  //# sourceMappingURL=merge.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.d.mts","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGtE,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"}
1
+ {"version":3,"file":"merge.d.mts","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAGtE,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,WAC9D,EAAE,KACV,sBAAsB,CAAC,EAAE,CAEqC,CAAC"}