{"version":3,"file":"index.js","sources":["../src/ScheduledTask.js","../src/RelativeScheduler.js","../src/task.js","../src/Scheduler.js","../src/Timeline.js","../src/ClockTimer.js","../src/clock.js","../src/schedule.js","../src/relative.js","../src/index.js"],"sourcesContent":["/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\nexport default class ScheduledTask {\n constructor (time, localOffset, period, task, scheduler) {\n this.time = time\n this.localOffset = localOffset\n this.period = period\n this.task = task\n this.scheduler = scheduler\n this.active = true\n }\n\n run () {\n return this.task.run(this.time - this.localOffset)\n }\n\n error (e) {\n return this.task.error(this.time - this.localOffset, e)\n }\n\n dispose () {\n this.active = false\n this.scheduler.cancel(this)\n return this.task.dispose()\n }\n}\n","export default class RelativeScheduler {\n constructor (origin, scheduler) {\n this.origin = origin\n this.scheduler = scheduler\n }\n\n currentTime () {\n return this.scheduler.currentTime() - this.origin\n }\n\n scheduleTask (localOffset, delay, period, task) {\n return this.scheduler.scheduleTask(localOffset + this.origin, delay, period, task)\n }\n\n relative (origin) {\n return new RelativeScheduler(origin + this.origin, this.scheduler)\n }\n\n cancel (task) {\n return this.scheduler.cancel(task)\n }\n\n cancelAll (f) {\n return this.scheduler.cancelAll(f)\n }\n}\n","/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\nexport const defer = task =>\n Promise.resolve(task).then(runTask)\n\nexport function runTask (task) {\n try {\n return task.run()\n } catch (e) {\n return task.error(e)\n }\n}\n","/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\nimport ScheduledTask from './ScheduledTask'\nimport RelativeScheduler from './RelativeScheduler'\nimport { runTask } from './task'\n\nexport default class Scheduler {\n constructor (timer, timeline) {\n this.timer = timer\n this.timeline = timeline\n\n this._timer = null\n this._nextArrival = Infinity\n\n this._runReadyTasksBound = () => this._runReadyTasks(this.currentTime())\n }\n\n currentTime () {\n return this.timer.now()\n }\n\n scheduleTask (localOffset, delay, period, task) {\n const time = this.currentTime() + Math.max(0, delay)\n const st = new ScheduledTask(time, localOffset, period, task, this)\n\n this.timeline.add(st)\n this._scheduleNextRun()\n return st\n }\n\n relative (offset) {\n return new RelativeScheduler(offset, this)\n }\n\n cancel (task) {\n task.active = false\n if (this.timeline.remove(task)) {\n this._reschedule()\n }\n }\n\n // @deprecated\n cancelAll (f) {\n this.timeline.removeAll(f)\n this._reschedule()\n }\n\n _reschedule () {\n if (this.timeline.isEmpty()) {\n this._unschedule()\n } else {\n this._scheduleNextRun(this.currentTime())\n }\n }\n\n _unschedule () {\n this.timer.clearTimer(this._timer)\n this._timer = null\n }\n\n _scheduleNextRun () { // eslint-disable-line complexity\n if (this.timeline.isEmpty()) {\n return\n }\n\n const nextArrival = this.timeline.nextArrival()\n\n if (this._timer === null) {\n this._scheduleNextArrival(nextArrival)\n } else if (nextArrival < this._nextArrival) {\n this._unschedule()\n this._scheduleNextArrival(nextArrival)\n }\n }\n\n _scheduleNextArrival (nextArrival) {\n this._nextArrival = nextArrival\n const delay = Math.max(0, nextArrival - this.currentTime())\n this._timer = this.timer.setTimer(this._runReadyTasksBound, delay)\n }\n\n _runReadyTasks () {\n this._timer = null\n this.timeline.runTasks(this.currentTime(), runTask)\n this._scheduleNextRun()\n }\n}\n","/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\nimport { findIndex, removeAll } from '@most/prelude'\n\nexport default class Timeline {\n constructor () {\n this.tasks = []\n }\n\n nextArrival () {\n return this.isEmpty() ? Infinity : this.tasks[0].time\n }\n\n isEmpty () {\n return this.tasks.length === 0\n }\n\n add (st) {\n insertByTime(st, this.tasks)\n }\n\n remove (st) {\n const i = binarySearch(getTime(st), this.tasks)\n\n if (i >= 0 && i < this.tasks.length) {\n const events = this.tasks[i].events\n const at = findIndex(st, events)\n if (at >= 0) {\n events.splice(at, 1)\n if (events.length === 0) {\n this.tasks.splice(i, 1)\n }\n return true\n }\n }\n\n return false\n }\n\n // @deprecated\n removeAll (f) {\n for (let i = 0; i < this.tasks.length; ++i) {\n removeAllFrom(f, this.tasks[i])\n }\n }\n\n runTasks (t, runTask) {\n const tasks = this.tasks\n const l = tasks.length\n let i = 0\n\n while (i < l && tasks[i].time <= t) {\n ++i\n }\n\n this.tasks = tasks.slice(i)\n\n // Run all ready tasks\n for (let j = 0; j < i; ++j) {\n this.tasks = runReadyTasks(runTask, tasks[j].events, this.tasks)\n }\n }\n}\n\nfunction runReadyTasks (runTask, events, tasks) { // eslint-disable-line complexity\n for (let i = 0; i < events.length; ++i) {\n const task = events[i]\n\n if (task.active) {\n runTask(task)\n\n // Reschedule periodic repeating tasks\n // Check active again, since a task may have canceled itself\n if (task.period >= 0 && task.active) {\n task.time = task.time + task.period\n insertByTime(task, tasks)\n }\n }\n }\n\n return tasks\n}\n\nfunction insertByTime (task, timeslots) {\n const l = timeslots.length\n const time = getTime(task)\n\n if (l === 0) {\n timeslots.push(newTimeslot(time, [task]))\n return\n }\n\n const i = binarySearch(time, timeslots)\n\n if (i >= l) {\n timeslots.push(newTimeslot(time, [task]))\n } else {\n insertAtTimeslot(task, timeslots, time, i)\n }\n}\n\nfunction insertAtTimeslot (task, timeslots, time, i) {\n const timeslot = timeslots[i]\n if (time === timeslot.time) {\n addEvent(task, timeslot.events, time)\n } else {\n timeslots.splice(i, 0, newTimeslot(time, [task]))\n }\n}\n\nfunction addEvent (task, events) {\n if (events.length === 0 || task.time >= events[events.length - 1].time) {\n events.push(task)\n } else {\n spliceEvent(task, events)\n }\n}\n\nfunction spliceEvent (task, events) {\n for (let j = 0; j < events.length; j++) {\n if (task.time < events[j].time) {\n events.splice(j, 0, task)\n break\n }\n }\n}\n\nfunction getTime (scheduledTask) {\n return Math.floor(scheduledTask.time)\n}\n\n// @deprecated\nfunction removeAllFrom (f, timeslot) {\n timeslot.events = removeAll(f, timeslot.events)\n}\n\nfunction binarySearch (t, sortedArray) { // eslint-disable-line complexity\n let lo = 0\n let hi = sortedArray.length\n let mid, y\n\n while (lo < hi) {\n mid = Math.floor((lo + hi) / 2)\n y = sortedArray[mid]\n\n if (t === y.time) {\n return mid\n } else if (t < y.time) {\n hi = mid\n } else {\n lo = mid + 1\n }\n }\n return hi\n}\n\nconst newTimeslot = (t, events) => ({ time: t, events: events })\n","/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\nimport { defer } from './task'\n\n/* global setTimeout, clearTimeout */\n\nexport default class ClockTimer {\n constructor (clock) {\n this._clock = clock\n }\n\n now () {\n return this._clock.now()\n }\n\n setTimer (f, dt) {\n return dt <= 0 ? runAsap(f) : setTimeout(f, dt)\n }\n\n clearTimer (t) {\n return t instanceof Asap ? t.cancel() : clearTimeout(t)\n }\n}\n\nclass Asap {\n constructor (f) {\n this.f = f\n this.active = true\n }\n\n run () {\n return this.active && this.f()\n }\n\n error (e) {\n throw e\n }\n\n cancel () {\n this.active = false\n }\n}\n\nfunction runAsap (f) {\n const task = new Asap(f)\n defer(task)\n return task\n}\n","/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\n/* global performance, process */\n\nexport class RelativeClock {\n constructor (clock, origin) {\n this.origin = origin\n this.clock = clock\n }\n\n now () {\n return this.clock.now() - this.origin\n }\n}\n\nexport class HRTimeClock {\n constructor (hrtime, origin) {\n this.origin = origin\n this.hrtime = hrtime\n }\n\n now () {\n const hrt = this.hrtime(this.origin)\n return (hrt[0] * 1e9 + hrt[1]) / 1e6\n }\n}\n\nexport const clockRelativeTo = clock =>\n new RelativeClock(clock, clock.now())\n\nexport const newPerformanceClock = () =>\n clockRelativeTo(performance)\n\n// @deprecated will be removed in 2.0.0\n// Date.now is not monotonic, and performance.now is ubiquitous:\n// See https://caniuse.com/#search=performance.now\nexport const newDateClock = () =>\n clockRelativeTo(Date)\n\nexport const newHRTimeClock = () =>\n new HRTimeClock(process.hrtime, process.hrtime())\n\nexport const newPlatformClock = () => {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return newPerformanceClock()\n } else if (typeof process !== 'undefined' && typeof process.hrtime === 'function') {\n return newHRTimeClock()\n }\n\n return newDateClock()\n}\n","import { curry2, curry3 } from '@most/prelude'\n\n// Read the current time from the provided Scheduler\nexport const currentTime = scheduler =>\n scheduler.currentTime()\n\n// Schedule a task to run as soon as possible, but\n// not in the current call stack\nexport const asap = curry2((task, scheduler) =>\n scheduler.scheduleTask(0, 0, -1, task))\n\n// Schedule a task to run after a millisecond delay\nexport const delay = curry3((delay, task, scheduler) =>\n scheduler.scheduleTask(0, delay, -1, task))\n\n// Schedule a task to run periodically, with the\n// first run starting asap\nexport const periodic = curry3((period, task, scheduler) =>\n scheduler.scheduleTask(0, 0, period, task))\n\n// Cancel a scheduledTask\nexport const cancelTask = scheduledTask =>\n scheduledTask.dispose()\n\n// Cancel all ScheduledTasks for which a predicate\n// is true\n// @deprecated Will be removed in 2.0.0\nexport const cancelAllTasks = curry2((predicate, scheduler) => {\n console.warn(`DEPRECATED cancelAllTasks to be removed in 2.0.0`)\n return scheduler.cancelAll(predicate)\n})\n","import RelativeScheduler from './RelativeScheduler'\nimport { curry2 } from '@most/prelude'\n\nexport const schedulerRelativeTo = curry2((offset, scheduler) =>\n new RelativeScheduler(offset, scheduler))\n","/** @license MIT License (c) copyright 2010-2017 original author or authors */\n\nimport { curry2 } from '@most/prelude'\n\nimport Scheduler from './Scheduler'\nimport Timeline from './Timeline'\nimport ClockTimer from './ClockTimer'\nimport { newPlatformClock } from './clock'\n\nexport * from './clock'\nexport * from './schedule'\nexport * from './relative'\n\nexport const newScheduler = curry2((timer, timeline) => new Scheduler(timer, timeline))\n\nexport const newDefaultScheduler = () => new Scheduler(newDefaultTimer(), new Timeline())\n\nexport const newDefaultTimer = () => new ClockTimer(newPlatformClock())\nexport const newClockTimer = clock => new ClockTimer(clock)\n\nexport const newTimeline = () => new Timeline()\n"],"names":["ScheduledTask","time","localOffset","period","task","scheduler","active","run","error","e","dispose","cancel","RelativeScheduler","origin","currentTime","scheduleTask","delay","relative","cancelAll","f","defer","Promise","resolve","then","runTask","Scheduler","timer","timeline","_timer","_nextArrival","Infinity","_runReadyTasksBound","_runReadyTasks","now","Math","max","st","add","_scheduleNextRun","offset","remove","_reschedule","removeAll","isEmpty","_unschedule","clearTimer","nextArrival","_scheduleNextArrival","setTimer","runTasks","Timeline","tasks","length","i","binarySearch","getTime","events","at","findIndex","splice","t","l","slice","j","runReadyTasks","insertByTime","timeslots","push","newTimeslot","insertAtTimeslot","timeslot","addEvent","spliceEvent","scheduledTask","floor","removeAllFrom","sortedArray","lo","hi","mid","y","ClockTimer","clock","_clock","dt","runAsap","setTimeout","Asap","clearTimeout","RelativeClock","HRTimeClock","hrtime","hrt","clockRelativeTo","newPerformanceClock","performance","newDateClock","Date","newHRTimeClock","process","newPlatformClock","asap","curry2","curry3","periodic","cancelTask","cancelAllTasks","predicate","warn","schedulerRelativeTo","newScheduler","newDefaultScheduler","newDefaultTimer","newClockTimer","newTimeline"],"mappings":"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"}