/** * @license Use of this source code is governed by an MIT-style license that * can be found in the LICENSE file at https://github.com/cartant/rxjs-etc */ import { concat, MonoTypeOperatorFunction, Observable, OperatorFunction, } from "rxjs"; import { publish, take } from "rxjs/operators"; export function subsequent( count: number, operator: (source: Observable) => Observable ): OperatorFunction; export function subsequent( count: number, operator: (source: Observable) => Observable ): MonoTypeOperatorFunction; export function subsequent( operator: (source: Observable) => Observable ): OperatorFunction; export function subsequent( operator: (source: Observable) => Observable ): MonoTypeOperatorFunction; export function subsequent( countOrOperator: number | ((source: Observable) => Observable), operator?: (source: Observable) => Observable ): OperatorFunction { let count: number; if (typeof countOrOperator === "number") { count = countOrOperator; } else { count = 1; operator = countOrOperator; } return (source) => source.pipe( publish((published) => concat(published.pipe(take(count)), published.pipe(operator!)) ) ); }