diff options
Diffstat (limited to 'node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js')
| -rw-r--r-- | node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js b/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js new file mode 100644 index 0000000..607ced6 --- /dev/null +++ b/node_modules/rxjs/dist/esm/internal/scheduler/VirtualTimeScheduler.js @@ -0,0 +1,89 @@ +import { AsyncAction } from './AsyncAction'; +import { Subscription } from '../Subscription'; +import { AsyncScheduler } from './AsyncScheduler'; +export class VirtualTimeScheduler extends AsyncScheduler { + constructor(schedulerActionCtor = VirtualAction, maxFrames = Infinity) { + super(schedulerActionCtor, () => this.frame); + this.maxFrames = maxFrames; + this.frame = 0; + this.index = -1; + } + flush() { + const { actions, maxFrames } = this; + let error; + let action; + while ((action = actions[0]) && action.delay <= maxFrames) { + actions.shift(); + this.frame = action.delay; + if ((error = action.execute(action.state, action.delay))) { + break; + } + } + if (error) { + while ((action = actions.shift())) { + action.unsubscribe(); + } + throw error; + } + } +} +VirtualTimeScheduler.frameTimeFactor = 10; +export class VirtualAction extends AsyncAction { + constructor(scheduler, work, index = (scheduler.index += 1)) { + super(scheduler, work); + this.scheduler = scheduler; + this.work = work; + this.index = index; + this.active = true; + this.index = scheduler.index = index; + } + schedule(state, delay = 0) { + if (Number.isFinite(delay)) { + if (!this.id) { + return super.schedule(state, delay); + } + this.active = false; + const action = new VirtualAction(this.scheduler, this.work); + this.add(action); + return action.schedule(state, delay); + } + else { + return Subscription.EMPTY; + } + } + requestAsyncId(scheduler, id, delay = 0) { + this.delay = scheduler.frame + delay; + const { actions } = scheduler; + actions.push(this); + actions.sort(VirtualAction.sortActions); + return 1; + } + recycleAsyncId(scheduler, id, delay = 0) { + return undefined; + } + _execute(state, delay) { + if (this.active === true) { + return super._execute(state, delay); + } + } + static sortActions(a, b) { + if (a.delay === b.delay) { + if (a.index === b.index) { + return 0; + } + else if (a.index > b.index) { + return 1; + } + else { + return -1; + } + } + else if (a.delay > b.delay) { + return 1; + } + else { + return -1; + } + } +} +//# sourceMappingURL=VirtualTimeScheduler.js.map
\ No newline at end of file |
