UNPKG

pnpm

Version:

Fast, disk space efficient package manager

52 lines (42 loc) 1.42 kB
/** @license MIT License (c) copyright 2010-2016 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ import Stream from '../Stream' import Pipe from '../sink/Pipe' import * as dispose from '../disposable/dispose' import PropagateTask from '../scheduler/PropagateTask' /** * @param {Number} delayTime milliseconds to delay each item * @param {Stream} stream * @returns {Stream} new stream containing the same items, but delayed by ms */ export function delay (delayTime, stream) { return delayTime <= 0 ? stream : new Stream(new Delay(delayTime, stream.source)) } function Delay (dt, source) { this.dt = dt this.source = source } Delay.prototype.run = function (sink, scheduler) { var delaySink = new DelaySink(this.dt, sink, scheduler) return dispose.all([delaySink, this.source.run(delaySink, scheduler)]) } function DelaySink (dt, sink, scheduler) { this.dt = dt this.sink = sink this.scheduler = scheduler } DelaySink.prototype.dispose = function () { var self = this this.scheduler.cancelAll(function (scheduledTask) { return scheduledTask.task.sink === self.sink }) } DelaySink.prototype.event = function (t, x) { this.scheduler.delay(this.dt, PropagateTask.event(x, this.sink)) } DelaySink.prototype.end = function (t, x) { this.scheduler.delay(this.dt, PropagateTask.end(x, this.sink)) } DelaySink.prototype.error = Pipe.prototype.error