import { Source } from "../_core" import { Transaction } from "../_tx" import { EventStream } from "../EventStream" import { Observable } from "../Observable" import { handleActivations } from "../scheduler/index" import { makeMultiSourceStream, MultiSource, MultiSourceNode } from "./_multisource" export function concat(...observables: Array>): EventStream { return concatAll(observables) } export function concatAll(observables: Array>): EventStream { return makeMultiSourceStream(observables, Concat) } export class Concat extends MultiSource { constructor(sources: Array>) { super(sources, 1) } public mEnd(tx: Transaction, node: MultiSourceNode): void { node.h !== null ? (node.h.t = node.t) : (this.head = node.t) node.t !== null && (node.t.h = node.h) node.dispose() const { head } = this if (head === null) { this.sink.end(tx) } else { head.subscribe(this.ord) head.activate(true) handleActivations() } } }