synstate 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/dist/core/base/create-child-observable.mjs +164 -140
  2. package/dist/core/base/create-child-observable.mjs.map +1 -1
  3. package/dist/core/base/create-observable-base.mjs +148 -152
  4. package/dist/core/base/create-observable-base.mjs.map +1 -1
  5. package/dist/core/base/create-root-observable.mjs +48 -34
  6. package/dist/core/base/create-root-observable.mjs.map +1 -1
  7. package/dist/core/base/index.mjs +3 -3
  8. package/dist/core/base/index.mjs.map +1 -1
  9. package/dist/core/combine/combine.mjs +129 -37
  10. package/dist/core/combine/combine.mjs.map +1 -1
  11. package/dist/core/combine/index.mjs +4 -4
  12. package/dist/core/combine/index.mjs.map +1 -1
  13. package/dist/core/combine/merge.mjs +75 -24
  14. package/dist/core/combine/merge.mjs.map +1 -1
  15. package/dist/core/combine/zip.mjs +120 -39
  16. package/dist/core/combine/zip.mjs.map +1 -1
  17. package/dist/core/create/counter.mjs +81 -45
  18. package/dist/core/create/counter.mjs.map +1 -1
  19. package/dist/core/create/from-abortable-promise.mjs +63 -38
  20. package/dist/core/create/from-abortable-promise.mjs.map +1 -1
  21. package/dist/core/create/from-promise.mjs +67 -25
  22. package/dist/core/create/from-promise.mjs.map +1 -1
  23. package/dist/core/create/from-subscribable.mjs +70 -26
  24. package/dist/core/create/from-subscribable.mjs.map +1 -1
  25. package/dist/core/create/index.mjs +8 -8
  26. package/dist/core/create/index.mjs.map +1 -1
  27. package/dist/core/create/just.mjs +36 -13
  28. package/dist/core/create/just.mjs.map +1 -1
  29. package/dist/core/create/source.mjs +15 -19
  30. package/dist/core/create/source.mjs.map +1 -1
  31. package/dist/core/create/timer.mjs +66 -37
  32. package/dist/core/create/timer.mjs.map +1 -1
  33. package/dist/core/index.mjs +6 -41
  34. package/dist/core/index.mjs.map +1 -1
  35. package/dist/core/operators/audit.mjs +126 -39
  36. package/dist/core/operators/audit.mjs.map +1 -1
  37. package/dist/core/operators/debounce.mjs +114 -37
  38. package/dist/core/operators/debounce.mjs.map +1 -1
  39. package/dist/core/operators/filter.mjs +39 -24
  40. package/dist/core/operators/filter.mjs.map +1 -1
  41. package/dist/core/operators/index.mjs +18 -18
  42. package/dist/core/operators/index.mjs.map +1 -1
  43. package/dist/core/operators/map.mjs +74 -26
  44. package/dist/core/operators/map.mjs.map +1 -1
  45. package/dist/core/operators/merge-map.mjs +128 -35
  46. package/dist/core/operators/merge-map.mjs.map +1 -1
  47. package/dist/core/operators/pairwise.mjs +73 -23
  48. package/dist/core/operators/pairwise.mjs.map +1 -1
  49. package/dist/core/operators/scan.mjs +59 -15
  50. package/dist/core/operators/scan.mjs.map +1 -1
  51. package/dist/core/operators/skip-if-no-change.mjs +89 -31
  52. package/dist/core/operators/skip-if-no-change.mjs.map +1 -1
  53. package/dist/core/operators/skip-until.mjs +71 -29
  54. package/dist/core/operators/skip-until.mjs.map +1 -1
  55. package/dist/core/operators/skip-while.mjs +79 -27
  56. package/dist/core/operators/skip-while.mjs.map +1 -1
  57. package/dist/core/operators/switch-map.mjs +118 -31
  58. package/dist/core/operators/switch-map.mjs.map +1 -1
  59. package/dist/core/operators/take-until.mjs +70 -35
  60. package/dist/core/operators/take-until.mjs.map +1 -1
  61. package/dist/core/operators/take-while.mjs +97 -25
  62. package/dist/core/operators/take-while.mjs.map +1 -1
  63. package/dist/core/operators/throttle.mjs +108 -38
  64. package/dist/core/operators/throttle.mjs.map +1 -1
  65. package/dist/core/operators/with-buffered-from.mjs +94 -47
  66. package/dist/core/operators/with-buffered-from.mjs.map +1 -1
  67. package/dist/core/operators/with-current-value-from.mjs +78 -23
  68. package/dist/core/operators/with-current-value-from.mjs.map +1 -1
  69. package/dist/core/operators/with-initial-value.mjs +64 -14
  70. package/dist/core/operators/with-initial-value.mjs.map +1 -1
  71. package/dist/core/predefined/index.mjs +2 -12
  72. package/dist/core/predefined/index.mjs.map +1 -1
  73. package/dist/core/predefined/operators/attach-index.mjs +55 -7
  74. package/dist/core/predefined/operators/attach-index.mjs.map +1 -1
  75. package/dist/core/predefined/operators/index.mjs +12 -12
  76. package/dist/core/predefined/operators/index.mjs.map +1 -1
  77. package/dist/core/predefined/operators/map-optional.mjs +48 -5
  78. package/dist/core/predefined/operators/map-optional.mjs.map +1 -1
  79. package/dist/core/predefined/operators/map-result-err.mjs +48 -5
  80. package/dist/core/predefined/operators/map-result-err.mjs.map +1 -1
  81. package/dist/core/predefined/operators/map-result-ok.mjs +48 -5
  82. package/dist/core/predefined/operators/map-result-ok.mjs.map +1 -1
  83. package/dist/core/predefined/operators/map-to.mjs +41 -6
  84. package/dist/core/predefined/operators/map-to.mjs.map +1 -1
  85. package/dist/core/predefined/operators/pluck.mjs +45 -7
  86. package/dist/core/predefined/operators/pluck.mjs.map +1 -1
  87. package/dist/core/predefined/operators/skip.mjs +49 -6
  88. package/dist/core/predefined/operators/skip.mjs.map +1 -1
  89. package/dist/core/predefined/operators/take.mjs +42 -6
  90. package/dist/core/predefined/operators/take.mjs.map +1 -1
  91. package/dist/core/predefined/operators/unwrap-optional.mjs +43 -8
  92. package/dist/core/predefined/operators/unwrap-optional.mjs.map +1 -1
  93. package/dist/core/predefined/operators/unwrap-result-err.mjs +41 -5
  94. package/dist/core/predefined/operators/unwrap-result-err.mjs.map +1 -1
  95. package/dist/core/predefined/operators/unwrap-result-ok.mjs +43 -8
  96. package/dist/core/predefined/operators/unwrap-result-ok.mjs.map +1 -1
  97. package/dist/core/types/id.mjs +2 -2
  98. package/dist/core/types/id.mjs.map +1 -1
  99. package/dist/core/types/index.mjs +7 -3
  100. package/dist/core/types/index.mjs.map +1 -1
  101. package/dist/core/types/observable-family.mjs +14 -2
  102. package/dist/core/types/observable-family.mjs.map +1 -1
  103. package/dist/core/types/observable-kind.mjs +2 -2
  104. package/dist/core/types/observable-kind.mjs.map +1 -1
  105. package/dist/core/types/observable.mjs +14 -6
  106. package/dist/core/types/observable.mjs.map +1 -1
  107. package/dist/core/types/timer.mjs +2 -2
  108. package/dist/core/types/timer.mjs.map +1 -1
  109. package/dist/core/types/types.mjs +9 -2
  110. package/dist/core/types/types.mjs.map +1 -1
  111. package/dist/core/utils/id-maker.mjs +10 -11
  112. package/dist/core/utils/id-maker.mjs.map +1 -1
  113. package/dist/core/utils/index.mjs +5 -5
  114. package/dist/core/utils/index.mjs.map +1 -1
  115. package/dist/core/utils/max-depth.mjs +7 -4
  116. package/dist/core/utils/max-depth.mjs.map +1 -1
  117. package/dist/core/utils/observable-utils.mjs +4 -7
  118. package/dist/core/utils/observable-utils.mjs.map +1 -1
  119. package/dist/core/utils/utils.mjs +32 -28
  120. package/dist/core/utils/utils.mjs.map +1 -1
  121. package/dist/entry-point.mjs +2 -46
  122. package/dist/entry-point.mjs.map +1 -1
  123. package/dist/index.mjs +3 -46
  124. package/dist/index.mjs.map +1 -1
  125. package/dist/utils/collect-to-array.mjs +8 -13
  126. package/dist/utils/collect-to-array.mjs.map +1 -1
  127. package/dist/utils/create-boolean-state.mjs +47 -22
  128. package/dist/utils/create-boolean-state.mjs.map +1 -1
  129. package/dist/utils/create-event-emitter.mjs +67 -19
  130. package/dist/utils/create-event-emitter.mjs.map +1 -1
  131. package/dist/utils/create-reducer.mjs +54 -16
  132. package/dist/utils/create-reducer.mjs.map +1 -1
  133. package/dist/utils/create-state.mjs +54 -27
  134. package/dist/utils/create-state.mjs.map +1 -1
  135. package/dist/utils/index.mjs +6 -6
  136. package/dist/utils/index.mjs.map +1 -1
  137. package/package.json +11 -12
@@ -1 +1 @@
1
- {"version":3,"file":"create-observable-base.mjs","sources":["../../../src/core/base/create-observable-base.mts"],"sourcesContent":["import { Arr, Optional } from 'ts-data-forge';\nimport {\n type MutableMap,\n type MutableSet,\n type ReadonlyRecord,\n} from 'ts-type-forge';\nimport {\n type ChildObservable,\n type InitializedObservable,\n type Observable,\n type ObservableBase,\n type ObservableId,\n type ObservableKind,\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 binarySearch,\n issueObservableId,\n issueSubscriberId,\n issueUpdateToken,\n toSubscriber,\n} from '../utils/index.mjs';\n\n/**\n * The mutable core shared by every observable, expressed as closures instead of\n * a base class.\n *\n * The returned handle is the \"protected\" surface of the former\n * `ObservableBaseClass`: the layer factories (`createRootObservable`,\n * `createSyncChildObservable`, `createAsyncChildObservable`) build the public\n * object from it via {@link assembleObservable}, and leaf factories receive\n * only the narrow tools they need. Neither the handle nor its type is exported\n * from the package (`core/base/**` is excluded from index generation), so\n * `setNext` and friends stay internal, as `protected` kept them before.\n */\nexport type ObservableBaseHandle<A> = Readonly<{\n id: ObservableId;\n\n addChild: <B>(child: ChildObservable<B>) => void;\n\n getSnapshot: () => Optional<A>;\n\n isCompleted: () => boolean;\n\n updateToken: () => UpdateToken;\n\n hasSubscriber: () => boolean;\n\n hasChild: () => boolean;\n\n hasActiveChild: () => boolean;\n\n subscribe: (onNext: (v: A) => void, onComplete?: () => void) => Subscription;\n\n /** Stores `nextValue` as the current value and notifies subscribers. */\n setNext: (nextValue: A, updateToken: UpdateToken) => void;\n\n /**\n * The innermost part of `complete()` (what `ObservableBaseClass.complete`\n * used to do): marks this observable completed exactly once, notifies and\n * removes all subscribers, and propagates `tryComplete` to children. Layer\n * factories wrap this with leaf teardown and propagation to parents.\n */\n completeBase: () => void;\n}>;\n\nexport const createObservableBaseHandle = <A,>(\n initialValue: Optional<A>,\n): ObservableBaseHandle<A> => {\n const id = issueObservableId();\n\n let mut_children: readonly ChildObservable<unknown>[] = [];\n\n const mut_subscribers: MutableMap<SubscriberId, Subscriber<A>> = new Map();\n\n let mut_currentValue: Optional<A> = initialValue;\n\n let mut_isCompleted = false;\n\n let mut_updateToken: UpdateToken = issueUpdateToken();\n\n const addSubscriber = (s: Subscriber<A>): SubscriberId => {\n // return the id of added subscriber\n const subscriberId = issueSubscriberId();\n\n mut_subscribers.set(subscriberId, s);\n\n return subscriberId;\n };\n\n const removeSubscriber = (subscriberId: SubscriberId): void => {\n mut_subscribers.delete(subscriberId);\n };\n\n const addChild = <B,>(child: ChildObservable<B>): void => {\n mut_children = Arr.toPushed(\n mut_children,\n\n child as ChildObservable<unknown>,\n );\n };\n\n const getSnapshot = (): Optional<A> => mut_currentValue;\n\n const isCompleted = (): boolean => mut_isCompleted;\n\n const updateToken = (): UpdateToken => mut_updateToken;\n\n const hasSubscriber = (): boolean => mut_subscribers.size > 0;\n\n const hasChild = (): boolean => Arr.isNonEmpty(mut_children);\n\n const hasActiveChild = (): boolean =>\n mut_children.some((c) => !c.isCompleted);\n\n const setNext = (nextValue: A, nextUpdateToken: UpdateToken): void => {\n mut_updateToken = nextUpdateToken;\n\n mut_currentValue = Optional.some(nextValue);\n\n for (const s of mut_subscribers.values()) {\n s.onNext(nextValue);\n }\n };\n\n const completeBase = (): void => {\n if (mut_isCompleted) return; // terminate only once\n\n // change state\n mut_isCompleted = true;\n\n // run subscribers for the current value\n for (const s of mut_subscribers.values()) {\n s.onComplete();\n }\n\n // remove all subscribers\n mut_subscribers.clear();\n\n // propagate to children\n for (const o of mut_children) {\n o.tryComplete();\n }\n };\n\n const subscribe = (\n onNext: (v: A) => void,\n onComplete?: () => void,\n ): Subscription => {\n // first emit\n const curr = getSnapshot();\n\n if (Optional.isSome(curr)) {\n onNext(curr.value);\n }\n\n if (mut_isCompleted) {\n if (onComplete !== undefined) {\n onComplete();\n }\n\n return { unsubscribe: () => {} };\n }\n\n const subscriberId: SubscriberId = addSubscriber(\n toSubscriber(onNext, onComplete),\n );\n\n return {\n unsubscribe: () => {\n removeSubscriber(subscriberId);\n },\n };\n };\n\n return {\n id,\n addChild,\n getSnapshot,\n isCompleted,\n updateToken,\n hasSubscriber,\n hasChild,\n hasActiveChild,\n subscribe,\n setNext,\n completeBase,\n };\n};\n\n/**\n * The extra members every manager observable — a root or an async child — owns:\n * the depth-ordered descendant list and the update propagation that walks it.\n */\nexport type ManagerObservableParts<A> = Readonly<{\n addDescendant: <B>(child: ChildObservable<B>) => void;\n\n /** Emits `nextValue` and propagates the update to all descendants. */\n startUpdate: (nextValue: A) => void;\n}>;\n\n/**\n * Builds the manager half of a root or async-child observable. Both start their\n * own update propagation, so both keep a descendant set and a depth-ordered\n * propagation list; this is the single implementation of that pair (the class\n * version duplicated it across `RootObservableClass` and\n * `AsyncChildObservableClass`).\n */\nexport const createManagerObservableParts = <A,>(\n handle: ObservableBaseHandle<A>,\n): ManagerObservableParts<A> => {\n let mut_propagationOrder: readonly ChildObservable<unknown>[] = [];\n\n const mut_descendantsIdSet: MutableSet<ObservableId> = new Set();\n\n const addDescendant = <B,>(child: ChildObservable<B>): void => {\n if (mut_descendantsIdSet.has(child.id)) return;\n\n mut_descendantsIdSet.add(child.id);\n\n const insertPos = binarySearch(\n mut_propagationOrder.map((a) => a.depth),\n child.depth,\n );\n\n mut_propagationOrder = Arr.toInserted(\n mut_propagationOrder,\n insertPos,\n child,\n );\n };\n\n const startUpdate = (nextValue: A): void => {\n const updateToken = issueUpdateToken();\n\n handle.setNext(nextValue, updateToken);\n\n for (const p of mut_propagationOrder) {\n p.tryUpdate(updateToken);\n }\n };\n\n return { addDescendant, startUpdate };\n};\n\n/** Default `tryUpdate` for observables that never receive parent updates. */\nexport const createTryUpdateNotImplemented = (): ((\n _updateToken: UpdateToken,\n) => void) => tryUpdateNotImplemented;\n\nconst tryUpdateNotImplemented = (_updateToken: UpdateToken): void => {\n throw new Error('not implemented');\n};\n\ntype AssembleObservableArgs<\n A,\n Kind extends ObservableKind,\n Extra extends ReadonlyRecord<string, unknown>,\n> = Readonly<{\n kind: Kind;\n depth: number;\n handle: ObservableBaseHandle<A>;\n tryUpdate: (updateToken: UpdateToken) => void;\n tryComplete: () => void;\n complete: () => void;\n /**\n * Kind-specific public members (`parents`, `addDescendant`) and leaf\n * extensions (`next`, `start`). They are merged here, in the one place the\n * final object literal is created, because the public getters below must not\n * be copied by a spread (spreading would freeze their current values).\n */\n extra: Extra;\n}>;\n\n/**\n * Builds the public observable object from a base handle. This replaces the\n * implicit assembly a `class` performs: state stays in the handle's closures,\n * `isCompleted` / `updateToken` / `hasSubscriber` / `hasChild` become getters\n * delegating to the handle, and the kind-specific behavior (`tryUpdate`,\n * `tryComplete`, `complete`) is passed in already composed.\n */\nexport const assembleObservable = <\n A,\n Kind extends ObservableKind,\n Extra extends ReadonlyRecord<string, unknown>,\n>({\n kind,\n depth,\n handle,\n tryUpdate,\n tryComplete,\n complete,\n extra,\n}: AssembleObservableArgs<A, Kind, Extra>): Extra &\n ObservableBase<A> &\n Readonly<{ kind: Kind }> => {\n function pipe<B>(\n operator: WithInitialValueOperator<A, B>,\n ): InitializedObservable<B>;\n\n function pipe<B>(operator: Operator<A, B>): Observable<B>;\n\n function pipe<B>(operator: Operator<A, B>): Observable<B> {\n return operator(\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n observable as unknown as InitializedObservable<A>,\n );\n }\n\n const observable = {\n ...extra,\n\n id: handle.id,\n\n kind,\n\n depth,\n\n addChild: handle.addChild,\n\n getSnapshot: handle.getSnapshot,\n\n get isCompleted(): boolean {\n return handle.isCompleted();\n },\n\n get updateToken(): UpdateToken {\n return handle.updateToken();\n },\n\n get hasSubscriber(): boolean {\n return handle.hasSubscriber();\n },\n\n get hasChild(): boolean {\n return handle.hasChild();\n },\n\n hasActiveChild: handle.hasActiveChild,\n\n tryUpdate,\n\n tryComplete,\n\n complete,\n\n subscribe: handle.subscribe,\n\n pipe,\n } as const;\n\n return observable;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-observable-base.mjs","sourceRoot":"","sources":["../../../src/core/base/create-observable-base.mts"],"names":[],"mappings":"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"}
@@ -1,36 +1,50 @@
1
- import 'ts-data-forge';
2
- import { createObservableBaseHandle, createManagerObservableParts, assembleObservable, createTryUpdateNotImplemented } from './create-observable-base.mjs';
3
-
4
- const createRootObservable = ({ initialValue, onComplete }, init) => {
5
- const handle = createObservableBaseHandle(initialValue);
6
- const { addDescendant, startUpdate } = createManagerObservableParts(handle);
7
- const complete = () => {
8
- onComplete?.();
9
- handle.completeBase();
10
- };
11
- const tryComplete = () => {
12
- if (!handle.hasSubscriber() && !handle.hasActiveChild()) {
13
- complete();
14
- }
15
- };
16
- const extension = init({
17
- startUpdate,
18
- isCompleted: handle.isCompleted,
19
- complete
20
- });
21
- return assembleObservable({
22
- kind: "root",
23
- depth: 0,
24
- handle,
25
- tryUpdate: createTryUpdateNotImplemented,
26
- tryComplete,
27
- complete,
28
- extra: {
29
- ...extension,
30
- addDescendant
31
- }
32
- });
1
+
2
+
3
+ import { assembleObservable, createManagerObservableParts, createObservableBaseHandle, createTryUpdateNotImplemented, } from './create-observable-base.mjs';
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+ export const createRootObservable = ({ initialValue, onComplete }, init) => {
16
+ const handle = createObservableBaseHandle(initialValue);
17
+ const { addDescendant, startUpdate } = createManagerObservableParts(handle);
18
+ const complete = () => {
19
+ onComplete?.();
20
+ handle.completeBase();
21
+ };
22
+ const tryComplete = () => {
23
+ if (!handle.hasSubscriber() && !handle.hasActiveChild()) {
24
+ complete();
25
+ }
26
+ };
27
+ const extension = init({
28
+ startUpdate,
29
+ isCompleted: handle.isCompleted,
30
+ complete,
31
+ });
32
+ return assembleObservable({
33
+ kind: 'root',
34
+ depth: 0,
35
+ handle,
36
+ tryUpdate: createTryUpdateNotImplemented,
37
+ tryComplete,
38
+ complete,
39
+ extra: {
40
+ ...extension,
41
+ addDescendant,
42
+ },
43
+ });
33
44
  };
34
45
 
35
- export { createRootObservable };
36
- //# sourceMappingURL=create-root-observable.mjs.map
46
+
47
+
48
+
49
+
50
+ //# sourceMappingURL=create-root-observable.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-root-observable.mjs","sources":["../../../src/core/base/create-root-observable.mts"],"sourcesContent":["import { Optional } from 'ts-data-forge';\nimport { type ReadonlyRecord } from 'ts-type-forge';\nimport { isRootObservable, type RootObservable } from '../types/index.mjs';\nimport {\n assembleObservable,\n createManagerObservableParts,\n createObservableBaseHandle,\n createTryUpdateNotImplemented,\n} from './create-observable-base.mjs';\n\n/**\n * The internal tools a root leaf factory (`source`, `timer`, `fromPromise`, …)\n * receives — the replacement for the `protected` methods a subclass of\n * `RootObservableClass` used to inherit.\n */\nexport type RootObservableTools<A> = Readonly<{\n /** Emits `nextValue` and propagates the update to all descendants. */\n startUpdate: (nextValue: A) => void;\n\n isCompleted: () => boolean;\n\n /** Completes this observable (leaf teardown included). */\n complete: () => void;\n}>;\n\nexport type RootObservableConfig<A> = Readonly<{\n initialValue: Optional<A>;\n\n /**\n * Leaf teardown (clear timers, abort requests, …), run at the beginning of\n * `complete()` — the closure replacement for\n * `override complete() { teardown(); super.complete(); }`.\n */\n onComplete?: () => void;\n}>;\n\n/**\n * Creates a root observable — the classless replacement for extending\n * `RootObservableClass`.\n *\n * The optional `init` callback receives the internal tools and returns extra\n * public members to merge into the observable (e.g. `next` for `source`,\n * `start` for `timer`). `init` runs during construction; it may register\n * asynchronous callbacks that use the tools, and may call `complete`\n * synchronously, but the observable object itself does not exist yet at that\n * point.\n */\nexport const createRootObservable = <\n A,\n Extension extends ReadonlyRecord<string, unknown> = ReadonlyRecord<\n never,\n never\n >,\n>(\n { initialValue, onComplete }: RootObservableConfig<A>,\n init: (tools: RootObservableTools<A>) => Extension,\n): Extension & RootObservable<A> => {\n const handle = createObservableBaseHandle<A>(initialValue);\n\n const { addDescendant, startUpdate } = createManagerObservableParts(handle);\n\n const complete = (): void => {\n onComplete?.();\n\n handle.completeBase();\n };\n\n const tryComplete = (): void => {\n if (!handle.hasSubscriber() && !handle.hasActiveChild()) {\n complete();\n }\n };\n\n const extension: Extension = init({\n startUpdate,\n isCompleted: handle.isCompleted,\n complete,\n });\n\n return assembleObservable({\n kind: 'root',\n depth: 0,\n handle,\n tryUpdate: createTryUpdateNotImplemented,\n tryComplete,\n complete,\n extra: {\n ...extension,\n addDescendant,\n },\n });\n};\n\nif (import.meta.vitest !== undefined) {\n test('isRootObservable', () => {\n assert.isTrue(\n isRootObservable(\n createRootObservable({ initialValue: Optional.some(0) }, () => ({})),\n ),\n );\n });\n}\n"],"names":[],"mappings":";;;AA+CO,MAAM,uBAAuB,CAOlC,EAAE,YAAA,EAAc,UAAA,IAChB,IAAA,KACkC;AAClC,EAAA,MAAM,MAAA,GAAS,2BAA8B,YAAY,CAAA;AAEzD,EAAA,MAAM,EAAE,aAAA,EAAe,WAAA,EAAY,GAAI,6BAA6B,MAAM,CAAA;AAE1E,EAAA,MAAM,WAAW,MAAY;AAC3B,IAAA,UAAA,IAAa;AAEb,IAAA,MAAA,CAAO,YAAA,EAAa;AAAA,EACtB,CAAA;AAEA,EAAA,MAAM,cAAc,MAAY;AAC9B,IAAA,IAAI,CAAC,MAAA,CAAO,aAAA,MAAmB,CAAC,MAAA,CAAO,gBAAe,EAAG;AACvD,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAuB,IAAA,CAAK;AAAA,IAChC,WAAA;AAAA,IACA,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB;AAAA,GACD,CAAA;AAED,EAAA,OAAO,kBAAA,CAAmB;AAAA,IACxB,IAAA,EAAM,MAAA;AAAA,IACN,KAAA,EAAO,CAAA;AAAA,IACP,MAAA;AAAA,IACA,SAAA,EAAW,6BAAA;AAAA,IACX,WAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA,EAAO;AAAA,MACL,GAAG,SAAA;AAAA,MACH;AAAA;AACF,GACD,CAAA;AACH;;;;"}
1
+ {"version":3,"file":"create-root-observable.mjs","sourceRoot":"","sources":["../../../src/core/base/create-root-observable.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAuB,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,0BAA0B,EAC1B,6BAA6B,GAC9B,MAAM,8BAA8B,CAAC;AA4BtC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAOlC,EAAE,YAAY,EAAE,UAAU,EAA2B,EACrD,IAAkD,EACnB,EAAE;IACjC,MAAM,MAAM,GAAG,0BAA0B,CAAI,YAAY,CAAC,CAAC;IAE3D,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,4BAA4B,CAAC,MAAM,CAAC,CAAC;IAE5E,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,UAAU,EAAE,EAAE,CAAC;QAEf,MAAM,CAAC,YAAY,EAAE,CAAC;IACxB,CAAC,CAAC;IAEF,MAAM,WAAW,GAAG,GAAS,EAAE;QAC7B,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAAE,CAAC;YACxD,QAAQ,EAAE,CAAC;QACb,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,SAAS,GAAc,IAAI,CAAC;QAChC,WAAW;QACX,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC;QACxB,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,CAAC;QACR,MAAM;QACN,SAAS,EAAE,6BAA6B;QACxC,WAAW;QACX,QAAQ;QACR,KAAK,EAAE;YACL,GAAG,SAAS;YACZ,aAAa;SACd;KACF,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,MAAM,CACX,gBAAgB,CACd,oBAAoB,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CACrE,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +1,3 @@
1
- export { createAsyncChildObservable, createInitializedSyncChildObservable, createSyncChildObservable } from './create-child-observable.mjs';
2
- export { createRootObservable } from './create-root-observable.mjs';
3
- //# sourceMappingURL=index.mjs.map
1
+ export * from './create-child-observable.mjs';
2
+ export * from './create-root-observable.mjs';
3
+ //# 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/base/index.mts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC"}
@@ -1,42 +1,134 @@
1
1
  import { Arr, Optional } from 'ts-data-forge';
2
- import { createSyncChildObservable } from '../base/create-child-observable.mjs';
3
- import '../utils/id-maker.mjs';
4
-
5
- const combine = (parents) => (
6
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
7
- createCombineObservable(parents)
8
- );
9
- const combineLatest = combine;
2
+ import { createSyncChildObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+ export const combine = (parents) =>
63
+
64
+ createCombineObservable(parents);
65
+
66
+
67
+
68
+
69
+ export const combineLatest = combine;
10
70
  const createCombineObservable = (parents) => {
11
- const parentsValues = Arr.map(
12
- parents,
13
- (p) => p.getSnapshot()
14
- );
15
- const initialValue = Arr.every(
16
- parentsValues,
17
- Optional.isSome
18
- ) ? Optional.some(Arr.map(parentsValues, (c) => c.value)) : Optional.none;
19
- return createSyncChildObservable(
20
- {
21
- parents,
22
- initialValue
23
- },
24
- ({ setNext }) => (updateToken) => {
25
- if (parents.every((o) => o.updateToken !== updateToken)) return;
26
- const parentValues = Arr.map(
71
+ const parentsValues = Arr.map(parents, (p) => p.getSnapshot());
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+ const initialValue = Arr.every(parentsValues, Optional.isSome)
81
+ ? Optional.some(Arr.map(parentsValues, (c) => c.value))
82
+ : Optional.none;
83
+ return createSyncChildObservable({
27
84
  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
- setNext(nextValue, updateToken);
36
- }
37
- }
38
- );
85
+ initialValue,
86
+ }, ({ setNext }) => (updateToken) => {
87
+ if (parents.every((o) => o.updateToken !== updateToken))
88
+ return;
89
+
90
+
91
+
92
+ const parentValues = Arr.map(parents, (a) => a.getSnapshot());
93
+ if (Arr.every(parentValues, Optional.isSome)) {
94
+ const nextValue = Arr.map(parentValues, (a) => a.value);
95
+ setNext(nextValue, updateToken);
96
+ }
97
+ });
39
98
  };
40
99
 
41
- export { combine, combineLatest };
42
- //# sourceMappingURL=combine.mjs.map
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+
133
+
134
+ //# sourceMappingURL=combine.mjs.map
@@ -1 +1 @@
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 { createSyncChildObservable } from '../base/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 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 createCombineObservable(parents) as unknown as CombineObservableRefined<OS>;\n\n/**\n * Alias for `combine`.\n * @see combine\n */\nexport const combineLatest = combine;\n\nconst createCombineObservable = <const A extends NonEmptyUnknownList>(\n parents: Wrap<A>,\n): CombineObservable<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] }>> = Arr.every(\n parentsValues,\n Optional.isSome,\n )\n ? Optional.some(Arr.map(parentsValues, (c) => c.value))\n : Optional.none;\n\n return createSyncChildObservable<A, A>(\n {\n parents,\n initialValue,\n },\n ({ setNext }) =>\n (updateToken) => {\n if (parents.every((o) => o.updateToken !== updateToken)) return; // all parents are skipped\n\n // Same shape-preserving chain as the initial value: `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 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 setNext(nextValue, updateToken);\n }\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":";;;;AAyEO,MAAM,UAAU,CACrB,OAAA;AAAA;AAAA,EAGA,wBAAwB,OAAO;AAAA;AAM1B,MAAM,aAAA,GAAgB;AAE7B,MAAM,uBAAA,GAA0B,CAC9B,OAAA,KACyB;AACzB,EAAA,MAAM,gBAAqD,GAAA,CAAI,GAAA;AAAA,IAC7D,OAAA;AAAA,IACA,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA;AAAY,GACvB;AAUA,EAAA,MAAM,eAA6D,GAAA,CAAI,KAAA;AAAA,IACrE,aAAA;AAAA,IACA,QAAA,CAAS;AAAA,GACX,GACI,QAAA,CAAS,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,aAAA,EAAe,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAA,GACpD,QAAA,CAAS,IAAA;AAEb,EAAA,OAAO,yBAAA;AAAA,IACL;AAAA,MACE,OAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,CAAC,EAAE,OAAA,EAAQ,KACT,CAAC,WAAA,KAAgB;AACf,MAAA,IAAI,QAAQ,KAAA,CAAM,CAAC,MAAM,CAAA,CAAE,WAAA,KAAgB,WAAW,CAAA,EAAG;AAKzD,MAAA,MAAM,eAAoD,GAAA,CAAI,GAAA;AAAA,QAC5D,OAAA;AAAA,QACA,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA;AAAY,OACvB;AAEA,MAAA,IAAI,GAAA,CAAI,KAAA,CAAM,YAAA,EAAc,QAAA,CAAS,MAAM,CAAA,EAAG;AAC5C,QAAA,MAAM,YAAgD,GAAA,CAAI,GAAA;AAAA,UACxD,YAAA;AAAA,UACA,CAAC,MAAM,CAAA,CAAE;AAAA,SACX;AAEA,QAAA,OAAA,CAAQ,WAAW,WAAW,CAAA;AAAA,MAAA;AAChC,IAAA;AACF,GACJ;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"combine.mjs","sourceRoot":"","sources":["../../../src/core/combine/combine.mts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export { combine, combineLatest } from './combine.mjs';
2
- export { merge } from './merge.mjs';
3
- export { zip } from './zip.mjs';
4
- //# sourceMappingURL=index.mjs.map
1
+ export * from './combine.mjs';
2
+ export * from './merge.mjs';
3
+ export * from './zip.mjs';
4
+ //# 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/combine/index.mts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC"}
@@ -1,28 +1,79 @@
1
1
  import { Optional } from 'ts-data-forge';
2
- import { createSyncChildObservable } from '../base/create-child-observable.mjs';
3
- import '../utils/id-maker.mjs';
4
-
5
- const merge = (parents) => (
6
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
7
- createMergeObservable(parents)
8
- );
9
- const createMergeObservable = (parents) => createSyncChildObservable(
10
- {
2
+ import { createSyncChildObservable } from '../base/index.mjs';
3
+
4
+
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+
22
+
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+
31
+
32
+
33
+
34
+
35
+
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+ export const merge = (parents) =>
56
+
57
+ createMergeObservable(parents);
58
+ const createMergeObservable = (parents) => createSyncChildObservable({
11
59
  parents,
12
- initialValue: Optional.none
13
- },
14
- ({ setNext }) => (updateToken) => {
15
- const parentToUse = parents.find(
16
- (o) => o.updateToken === updateToken && Optional.isSome(o.getSnapshot())
17
- );
18
- if (parentToUse === void 0) return;
19
- const nextValue = (
20
- // eslint-disable-next-line total-functions/no-unsafe-type-assertion
21
- Optional.unwrap(parentToUse.getSnapshot())
22
- );
60
+ initialValue: Optional.none,
61
+ }, ({ setNext }) => (updateToken) => {
62
+ const parentToUse = parents.find((o) => o.updateToken === updateToken && Optional.isSome(o.getSnapshot()));
63
+ if (parentToUse === undefined)
64
+ return;
65
+ const nextValue =
66
+
67
+ Optional.unwrap(parentToUse.getSnapshot());
23
68
  setNext(nextValue, updateToken);
24
- }
25
- );
69
+ });
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
26
78
 
27
- export { merge };
28
- //# sourceMappingURL=merge.mjs.map
79
+ //# sourceMappingURL=merge.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"merge.mjs","sources":["../../../src/core/combine/merge.mts"],"sourcesContent":["import { Optional, expectType } from 'ts-data-forge';\nimport { type ArrayElement, type NonEmptyTuple } from 'ts-type-forge';\nimport { createSyncChildObservable } from '../base/index.mjs';\nimport { source } from '../create/index.mjs';\nimport {\n type MergeObservable,\n type MergeObservableRefined,\n type NonEmptyUnknownList,\n type Observable,\n type SyncChildObservable,\n type Wrap,\n} from '../types/index.mjs';\n\n/**\n * Merges multiple observables into a single observable that emits all values from all sources.\n * Emits whenever any source observable emits a value.\n *\n * @template OS - Tuple type of source observables\n * @param parents - Array of observables to merge\n * @returns A merged observable emitting values from any source\n *\n * @example\n * ```ts\n * // Timeline:\n * //\n * // clicks$ c1 c2 c3\n * // keys$ k1 k2 k3\n * // events$ c1 k1 c2 k2 c3 k3\n * //\n * // Explanation:\n * // - merge combines multiple observables into one\n * // - Emits values from any source as they arrive\n * // - Order is preserved based on emission time\n *\n * const clicks$ = source<string>();\n *\n * const keys$ = source<string>();\n *\n * const events$ = merge([clicks$, keys$]);\n *\n * const valueHistory: string[] = [];\n *\n * events$.subscribe((event_) => {\n * valueHistory.push(event_);\n * });\n *\n * clicks$.next('c1');\n *\n * assert.deepStrictEqual(valueHistory, ['c1']);\n *\n * keys$.next('k1');\n *\n * assert.deepStrictEqual(valueHistory, ['c1', 'k1']);\n *\n * clicks$.next('c2');\n *\n * keys$.next('k2');\n *\n * assert.deepStrictEqual(valueHistory, ['c1', 'k1', 'c2', 'k2']);\n * ```\n *\n * @note To improve code readability, consider using `createState` instead of `merge`,\n * subscribing to `parents` and calling `setState` within it.\n */\nexport const merge = <const OS extends NonEmptyTuple<Observable<unknown>>>(\n parents: OS,\n): MergeObservableRefined<OS> =>\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n createMergeObservable(parents) as MergeObservableRefined<OS>;\n\nconst createMergeObservable = <const P extends NonEmptyUnknownList>(\n parents: Wrap<P>,\n): MergeObservable<P> =>\n createSyncChildObservable<ArrayElement<P>, P>(\n {\n parents,\n initialValue: Optional.none,\n },\n ({ setNext }) =>\n (updateToken) => {\n const parentToUse = parents.find(\n (o) =>\n o.updateToken === updateToken && Optional.isSome(o.getSnapshot()),\n );\n\n if (parentToUse === undefined) return;\n\n const nextValue =\n // eslint-disable-next-line total-functions/no-unsafe-type-assertion\n Optional.unwrap(parentToUse.getSnapshot()) as ArrayElement<P>;\n\n setNext(nextValue, updateToken);\n },\n );\n\nif (import.meta.vitest !== undefined) {\n test('type test', () => {\n expect(1).toBe(1); // dummy\n });\n\n const r1 = source(1);\n\n const r2 = source('a');\n\n const _m = merge([r1, r2]);\n\n expectType<typeof _m, SyncChildObservable<number | string>>('<=');\n}\n"],"names":[],"mappings":";;;;AAgEO,MAAM,QAAQ,CACnB,OAAA;AAAA;AAAA,EAGA,sBAAsB,OAAO;AAAA;AAE/B,MAAM,qBAAA,GAAwB,CAC5B,OAAA,KAEA,yBAAA;AAAA,EACE;AAAA,IACE,OAAA;AAAA,IACA,cAAc,QAAA,CAAS;AAAA,GACzB;AAAA,EACA,CAAC,EAAE,OAAA,EAAQ,KACT,CAAC,WAAA,KAAgB;AACf,IAAA,MAAM,cAAc,OAAA,CAAQ,IAAA;AAAA,MAC1B,CAAC,MACC,CAAA,CAAE,WAAA,KAAgB,eAAe,QAAA,CAAS,MAAA,CAAO,CAAA,CAAE,WAAA,EAAa;AAAA,KACpE;AAEA,IAAA,IAAI,gBAAgB,MAAA,EAAW;AAE/B,IAAA,MAAM,SAAA;AAAA;AAAA,MAEJ,QAAA,CAAS,MAAA,CAAO,WAAA,CAAY,WAAA,EAAa;AAAA,KAAA;AAE3C,IAAA,OAAA,CAAQ,WAAW,WAAW,CAAA;AAAA,EAAA;AAEpC,CAAA;;;;"}
1
+ {"version":3,"file":"merge.mjs","sourceRoot":"","sources":["../../../src/core/combine/merge.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,EAAE,yBAAyB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAU7C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,OAAW,EACiB,EAAE;AAC9B,oEAAoE;AACpE,qBAAqB,CAAC,OAAO,CAA+B,CAAC;AAE/D,MAAM,qBAAqB,GAAG,CAC5B,OAAgB,EACI,EAAE,CACtB,yBAAyB,CACvB;IACE,OAAO;IACP,YAAY,EAAE,QAAQ,CAAC,IAAI;CAC5B,EACD,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CACd,CAAC,WAAW,EAAE,EAAE;IACd,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CACpE,CAAC;IAEF,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO;IAEtC,MAAM,SAAS;IACb,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,EAAE,CAAoB,CAAC;IAEhE,OAAO,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAClC,CAAC,CACJ,CAAC;AAEJ,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;IACrC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;QACrB,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;IAC7B,CAAC,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAErB,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IAEvB,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE3B,UAAU,CAAkD,IAAI,CAAC,CAAC;AACpE,CAAC"}