| 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) { |
| var _a; |
| var count = Infinity; |
| var delay; |
| if (countOrConfig != null) { |
| if (typeof countOrConfig === 'object') { |
| (_a = countOrConfig.count, count = _a === void 0 ? Infinity : _a, delay = countOrConfig.delay); |
| } |
| else { |
| count = countOrConfig; |
| } |
| } |
| return count <= 0 |
| ? function () { return EMPTY; } |
| : operate(function (source, subscriber) { |
| var soFar = 0; |
| var sourceSub; |
| var resubscribe = function () { |
| sourceSub === null || sourceSub === void 0 ? void 0 : sourceSub.unsubscribe(); |
| sourceSub = null; |
| if (delay != null) { |
| var notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(soFar)); |
| var notifierSubscriber_1 = createOperatorSubscriber(subscriber, function () { |
| notifierSubscriber_1.unsubscribe(); |
| subscribeToSource(); |
| }); |
| notifier.subscribe(notifierSubscriber_1); |
| } |
| else { |
| subscribeToSource(); |
| } |
| }; |
| var subscribeToSource = function () { |
| var syncUnsub = false; |
| sourceSub = source.subscribe(createOperatorSubscriber(subscriber, undefined, function () { |
| if (++soFar < count) { |
| if (sourceSub) { |
| resubscribe(); |
| } |
| else { |
| syncUnsub = true; |
| } |
| } |
| else { |
| subscriber.complete(); |
| } |
| })); |
| if (syncUnsub) { |
| resubscribe(); |
| } |
| }; |
| subscribeToSource(); |
| }); |
| } |
| //# sourceMappingURL=repeat.js.map |