{"version":3,"sources":["scheduler.ts"],"names":[],"mappings":"AAQA,MAAM,kBAAkB;IAItB,YAAY,MAAkB;QAHvB,mBAAc,GAAG,KAAK,CAAC;QAI5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;IACxB,CAAC;IAED,WAAW;QACT,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,OAAO,EAAE,CAAC;SAChB;IACH,CAAC;CACF;AAED,MAAM,OAAO,gBAAgB;IAC3B,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,OAAO,IAAI,OAAO,CAAO,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,MAAkB,EAAE,OAAe;QAC1C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,IAAI,kBAAkB,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC;CACF","file":"scheduler.js","sourcesContent":["import { Subscription } from './subscription';\n\nexport interface Scheduler {\n  readonly now: number;\n  delay(time: number): Promise<void>;\n  schedule(action: () => void, dueTime: number): Subscription;\n}\n\nclass ActionSubscription implements Subscription {\n  public isUnsubscribed = false;\n  private _action: () => void;\n\n  constructor(action: () => void) {\n    this._action = action;\n  }\n\n  unsubscribe() {\n    if (!this.isUnsubscribed) {\n      this.isUnsubscribed = true;\n      this._action();\n    }\n  }\n}\n\nexport class DefaultScheduler implements Scheduler {\n  get now() {\n    return Date.now();\n  }\n\n  delay(dueTime: number) {\n    return new Promise<void>(res => setTimeout(res, dueTime));\n  }\n\n  schedule(action: () => void, dueTime: number): Subscription {\n    const id = setTimeout(() => action(), dueTime);\n    return new ActionSubscription(() => clearTimeout(id));\n  }\n}\n"]}