import { EMPTY } from '../observable/empty'; import { operate } from '../util/lift'; import { createOperatorSubscriber } from './OperatorSubscriber'; import { innerFrom } from '../observable/innerFrom'; import { timer } from '../observable/timer'; export function repeat(countOrConfig) { let count = Infinity; let delay; if (countOrConfig != null) { if (typeof countOrConfig === 'object') { ({ count = Infinity, delay } = countOrConfig); } else { count = countOrConfig; } } return count <= 0 ? () => EMPTY : operate((source, subscriber) => { let soFar = 0; let sourceSub; const resubscribe = () => { sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe(); sourceSub = null; if (delay != null) { const notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(soFar)); const notifierSubscriber = createOperatorSubscriber(subscriber, () => { notifierSubscriber.unsubscribe(); subscribeToSource(); }); notifier.subscribe(notifierSubscriber); } else { subscribeToSource(); } }; const subscribeToSource = () => { let syncUnsub = false; sourceSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, () => { if (++soFar < count) { if (sourceSub) { resubscribe(); } else { syncUnsub = true; } } else { subscriber.complete(); } })); if (syncUnsub) { resubscribe(); } }; subscribeToSource(); }); } //# sourceMappingURL=repeat.js.map