{"ast":null,"code":"import { Observable } from '../Observable';\nimport { async } from '../scheduler/async';\nimport { isNumeric } from '../util/isNumeric';\nimport { isScheduler } from '../util/isScheduler';\nexport function timer() {\n  var dueTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n  var periodOrScheduler = arguments.length > 1 ? arguments[1] : undefined;\n  var scheduler = arguments.length > 2 ? arguments[2] : undefined;\n  var period = -1;\n\n  if (isNumeric(periodOrScheduler)) {\n    period = Number(periodOrScheduler) < 1 && 1 || Number(periodOrScheduler);\n  } else if (isScheduler(periodOrScheduler)) {\n    scheduler = periodOrScheduler;\n  }\n\n  if (!isScheduler(scheduler)) {\n    scheduler = async;\n  }\n\n  return new Observable(function (subscriber) {\n    var due = isNumeric(dueTime) ? dueTime : +dueTime - scheduler.now();\n    return scheduler.schedule(dispatch, due, {\n      index: 0,\n      period: period,\n      subscriber: subscriber\n    });\n  });\n}\n\nfunction dispatch(state) {\n  var index = state.index,\n      period = state.period,\n      subscriber = state.subscriber;\n  subscriber.next(index);\n\n  if (subscriber.closed) {\n    return;\n  } else if (period === -1) {\n    return subscriber.complete();\n  }\n\n  state.index = index + 1;\n  this.schedule(state, period);\n} //# sourceMappingURL=timer.js.map","map":null,"metadata":{},"sourceType":"module"}