"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Observable_1 = require("../Observable"); var async_1 = require("../scheduler/async"); var isNumeric_1 = require("../util/isNumeric"); var isScheduler_1 = require("../util/isScheduler"); function timer(dueTime, periodOrScheduler, scheduler) { if (dueTime === void 0) { dueTime = 0; } var period = -1; if (isNumeric_1.isNumeric(periodOrScheduler)) { period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler); } else if (isScheduler_1.isScheduler(periodOrScheduler)) { scheduler = periodOrScheduler; } if (!isScheduler_1.isScheduler(scheduler)) { scheduler = async_1.async; } return new Observable_1.Observable(function (subscriber) { var due = isNumeric_1.isNumeric(dueTime) ? dueTime : (+dueTime - scheduler.now()); return scheduler.schedule(dispatch, due, { index: 0, period: period, subscriber: subscriber }); }); } exports.timer = timer; function dispatch(state) { var index = state.index, period = state.period, subscriber = state.subscriber; 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