--- /dev/null
+import { Observable } from '../Observable';
+import { async } from '../scheduler/async';
+import { isNumeric } from '../util/isNumeric';
+import { isScheduler } from '../util/isScheduler';
+export function timer(dueTime = 0, periodOrScheduler, scheduler) {
+ let period = -1;
+ if (isNumeric(periodOrScheduler)) {
+ period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);
+ }
+ else if (isScheduler(periodOrScheduler)) {
+ scheduler = periodOrScheduler;
+ }
+ if (!isScheduler(scheduler)) {
+ scheduler = async;
+ }
+ return new Observable(subscriber => {
+ const due = isNumeric(dueTime)
+ ? dueTime
+ : (+dueTime - scheduler.now());
+ return scheduler.schedule(dispatch, due, {
+ index: 0, period, subscriber
+ });
+ });
+}
+function dispatch(state) {
+ const { index, period, subscriber } = state;
+ subscriber.next(index);
+ if (subscriber.closed) {
+ return;
+ }
+ else if (period === -1) {
+ return subscriber.complete();
+ }
+ state.index = index + 1;
+ this.schedule(state, period);
+}
+//# sourceMappingURL=timer.js.map
\ No newline at end of file