aboutsummaryrefslogtreecommitdiffstats
path: root/node_modules/rxjs/src/internal/observable/merge.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/rxjs/src/internal/observable/merge.ts')
-rw-r--r--node_modules/rxjs/src/internal/observable/merge.ts100
1 files changed, 100 insertions, 0 deletions
diff --git a/node_modules/rxjs/src/internal/observable/merge.ts b/node_modules/rxjs/src/internal/observable/merge.ts
new file mode 100644
index 0000000..de8ac13
--- /dev/null
+++ b/node_modules/rxjs/src/internal/observable/merge.ts
@@ -0,0 +1,100 @@
+import { Observable } from '../Observable';
+import { ObservableInput, ObservableInputTuple, SchedulerLike } from '../types';
+import { mergeAll } from '../operators/mergeAll';
+import { innerFrom } from './innerFrom';
+import { EMPTY } from './empty';
+import { popNumber, popScheduler } from '../util/args';
+import { from } from './from';
+
+export function merge<A extends readonly unknown[]>(...sources: [...ObservableInputTuple<A>]): Observable<A[number]>;
+export function merge<A extends readonly unknown[]>(...sourcesAndConcurrency: [...ObservableInputTuple<A>, number?]): Observable<A[number]>;
+/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */
+export function merge<A extends readonly unknown[]>(
+ ...sourcesAndScheduler: [...ObservableInputTuple<A>, SchedulerLike?]
+): Observable<A[number]>;
+/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */
+export function merge<A extends readonly unknown[]>(
+ ...sourcesAndConcurrencyAndScheduler: [...ObservableInputTuple<A>, number?, SchedulerLike?]
+): Observable<A[number]>;
+
+/**
+ * Creates an output Observable which concurrently emits all values from every
+ * given input Observable.
+ *
+ * <span class="informal">Flattens multiple Observables together by blending
+ * their values into one Observable.</span>
+ *
+ * ![](merge.png)
+ *
+ * `merge` subscribes to each given input Observable (as arguments), and simply
+ * forwards (without doing any transformation) all the values from all the input
+ * Observables to the output Observable. The output Observable only completes
+ * once all input Observables have completed. Any error delivered by an input
+ * Observable will be immediately emitted on the output Observable.
+ *
+ * ## Examples
+ *
+ * Merge together two Observables: 1s interval and clicks
+ *
+ * ```ts
+ * import { merge, fromEvent, interval } from 'rxjs';
+ *
+ * const clicks = fromEvent(document, 'click');
+ * const timer = interval(1000);
+ * const clicksOrTimer = merge(clicks, timer);
+ * clicksOrTimer.subscribe(x => console.log(x));
+ *
+ * // Results in the following:
+ * // timer will emit ascending values, one every second(1000ms) to console
+ * // clicks logs MouseEvents to console every time the "document" is clicked
+ * // Since the two streams are merged you see these happening
+ * // as they occur.
+ * ```
+ *
+ * Merge together 3 Observables, but run only 2 concurrently
+ *
+ * ```ts
+ * import { interval, take, merge } from 'rxjs';
+ *
+ * const timer1 = interval(1000).pipe(take(10));
+ * const timer2 = interval(2000).pipe(take(6));
+ * const timer3 = interval(500).pipe(take(10));
+ *
+ * const concurrent = 2; // the argument
+ * const merged = merge(timer1, timer2, timer3, concurrent);
+ * merged.subscribe(x => console.log(x));
+ *
+ * // Results in the following:
+ * // - First timer1 and timer2 will run concurrently
+ * // - timer1 will emit a value every 1000ms for 10 iterations
+ * // - timer2 will emit a value every 2000ms for 6 iterations
+ * // - after timer1 hits its max iteration, timer2 will
+ * // continue, and timer3 will start to run concurrently with timer2
+ * // - when timer2 hits its max iteration it terminates, and
+ * // timer3 will continue to emit a value every 500ms until it is complete
+ * ```
+ *
+ * @see {@link mergeAll}
+ * @see {@link mergeMap}
+ * @see {@link mergeMapTo}
+ * @see {@link mergeScan}
+ *
+ * @param args `ObservableInput`s to merge together. If the last parameter
+ * is of type number, `merge` will use it to limit number of concurrently
+ * subscribed `ObservableInput`s. If the last parameter is {@link SchedulerLike},
+ * it will be used for scheduling the emission of values.
+ * @return An Observable that emits items that are the result of every input Observable.
+ */
+export function merge(...args: (ObservableInput<unknown> | number | SchedulerLike)[]): Observable<unknown> {
+ const scheduler = popScheduler(args);
+ const concurrent = popNumber(args, Infinity);
+ const sources = args as ObservableInput<unknown>[];
+ return !sources.length
+ ? // No source provided
+ EMPTY
+ : sources.length === 1
+ ? // One source? Just return it.
+ innerFrom(sources[0])
+ : // Merge all sources
+ mergeAll(concurrent)(from(sources, scheduler));
+}
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage