Repositorio del curso CCOM4030 el semestre B91 del proyecto Artesanías con el Instituto de Cultura

merge.ts 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import { Observable } from '../Observable';
  2. import { ObservableInput, SchedulerLike} from '../types';
  3. import { isScheduler } from '../util/isScheduler';
  4. import { mergeAll } from '../operators/mergeAll';
  5. import { fromArray } from './fromArray';
  6. /* tslint:disable:max-line-length */
  7. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  8. export function merge<T>(v1: ObservableInput<T>, scheduler: SchedulerLike): Observable<T>;
  9. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  10. export function merge<T>(v1: ObservableInput<T>, concurrent: number, scheduler: SchedulerLike): Observable<T>;
  11. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  12. export function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, scheduler: SchedulerLike): Observable<T | T2>;
  13. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  14. export function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2>;
  15. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  16. export function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, scheduler: SchedulerLike): Observable<T | T2 | T3>;
  17. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  18. export function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3>;
  19. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  20. export function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4>;
  21. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  22. export function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4>;
  23. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  24. export function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5>;
  25. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  26. export function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5>;
  27. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  28. export function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6>;
  29. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  30. export function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, concurrent: number, scheduler: SchedulerLike): Observable<T | T2 | T3 | T4 | T5 | T6>;
  31. export function merge<T>(v1: ObservableInput<T>): Observable<T>;
  32. export function merge<T>(v1: ObservableInput<T>, concurrent?: number): Observable<T>;
  33. export function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>): Observable<T | T2>;
  34. export function merge<T, T2>(v1: ObservableInput<T>, v2: ObservableInput<T2>, concurrent?: number): Observable<T | T2>;
  35. export function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>): Observable<T | T2 | T3>;
  36. export function merge<T, T2, T3>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, concurrent?: number): Observable<T | T2 | T3>;
  37. export function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>): Observable<T | T2 | T3 | T4>;
  38. export function merge<T, T2, T3, T4>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, concurrent?: number): Observable<T | T2 | T3 | T4>;
  39. export function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>): Observable<T | T2 | T3 | T4 | T5>;
  40. export function merge<T, T2, T3, T4, T5>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, concurrent?: number): Observable<T | T2 | T3 | T4 | T5>;
  41. export function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>): Observable<T | T2 | T3 | T4 | T5 | T6>;
  42. export function merge<T, T2, T3, T4, T5, T6>(v1: ObservableInput<T>, v2: ObservableInput<T2>, v3: ObservableInput<T3>, v4: ObservableInput<T4>, v5: ObservableInput<T5>, v6: ObservableInput<T6>, concurrent?: number): Observable<T | T2 | T3 | T4 | T5 | T6>;
  43. export function merge<T>(...observables: (ObservableInput<T> | number)[]): Observable<T>;
  44. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  45. export function merge<T>(...observables: (ObservableInput<T> | SchedulerLike | number)[]): Observable<T>;
  46. export function merge<T, R>(...observables: (ObservableInput<any> | number)[]): Observable<R>;
  47. /** @deprecated use {@link scheduled} and {@link mergeAll} (e.g. `scheduled([ob1, ob2, ob3], scheduled).pipe(mergeAll())*/
  48. export function merge<T, R>(...observables: (ObservableInput<any> | SchedulerLike | number)[]): Observable<R>;
  49. /* tslint:enable:max-line-length */
  50. /**
  51. * Creates an output Observable which concurrently emits all values from every
  52. * given input Observable.
  53. *
  54. * <span class="informal">Flattens multiple Observables together by blending
  55. * their values into one Observable.</span>
  56. *
  57. * ![](merge.png)
  58. *
  59. * `merge` subscribes to each given input Observable (as arguments), and simply
  60. * forwards (without doing any transformation) all the values from all the input
  61. * Observables to the output Observable. The output Observable only completes
  62. * once all input Observables have completed. Any error delivered by an input
  63. * Observable will be immediately emitted on the output Observable.
  64. *
  65. * ## Examples
  66. * ### Merge together two Observables: 1s interval and clicks
  67. * ```ts
  68. * import { merge, fromEvent, interval } from 'rxjs';
  69. *
  70. * const clicks = fromEvent(document, 'click');
  71. * const timer = interval(1000);
  72. * const clicksOrTimer = merge(clicks, timer);
  73. * clicksOrTimer.subscribe(x => console.log(x));
  74. *
  75. * // Results in the following:
  76. * // timer will emit ascending values, one every second(1000ms) to console
  77. * // clicks logs MouseEvents to console everytime the "document" is clicked
  78. * // Since the two streams are merged you see these happening
  79. * // as they occur.
  80. * ```
  81. *
  82. * ### Merge together 3 Observables, but only 2 run concurrently
  83. * ```ts
  84. * import { merge, interval } from 'rxjs';
  85. * import { take } from 'rxjs/operators';
  86. *
  87. * const timer1 = interval(1000).pipe(take(10));
  88. * const timer2 = interval(2000).pipe(take(6));
  89. * const timer3 = interval(500).pipe(take(10));
  90. * const concurrent = 2; // the argument
  91. * const merged = merge(timer1, timer2, timer3, concurrent);
  92. * merged.subscribe(x => console.log(x));
  93. *
  94. * // Results in the following:
  95. * // - First timer1 and timer2 will run concurrently
  96. * // - timer1 will emit a value every 1000ms for 10 iterations
  97. * // - timer2 will emit a value every 2000ms for 6 iterations
  98. * // - after timer1 hits its max iteration, timer2 will
  99. * // continue, and timer3 will start to run concurrently with timer2
  100. * // - when timer2 hits its max iteration it terminates, and
  101. * // timer3 will continue to emit a value every 500ms until it is complete
  102. * ```
  103. *
  104. * @see {@link mergeAll}
  105. * @see {@link mergeMap}
  106. * @see {@link mergeMapTo}
  107. * @see {@link mergeScan}
  108. *
  109. * @param {...ObservableInput} observables Input Observables to merge together.
  110. * @param {number} [concurrent=Number.POSITIVE_INFINITY] Maximum number of input
  111. * Observables being subscribed to concurrently.
  112. * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for managing
  113. * concurrency of input Observables.
  114. * @return {Observable} an Observable that emits items that are the result of
  115. * every input Observable.
  116. * @static true
  117. * @name merge
  118. * @owner Observable
  119. */
  120. export function merge<T, R>(...observables: Array<ObservableInput<any> | SchedulerLike | number>): Observable<R> {
  121. let concurrent = Number.POSITIVE_INFINITY;
  122. let scheduler: SchedulerLike = null;
  123. let last: any = observables[observables.length - 1];
  124. if (isScheduler(last)) {
  125. scheduler = <SchedulerLike>observables.pop();
  126. if (observables.length > 1 && typeof observables[observables.length - 1] === 'number') {
  127. concurrent = <number>observables.pop();
  128. }
  129. } else if (typeof last === 'number') {
  130. concurrent = <number>observables.pop();
  131. }
  132. if (scheduler === null && observables.length === 1 && observables[0] instanceof Observable) {
  133. return <Observable<R>>observables[0];
  134. }
  135. return mergeAll<R>(concurrent)(fromArray<any>(observables, scheduler));
  136. }