pnpm
Version:
Fast, disk space efficient package manager
52 lines (42 loc) • 1.42 kB
JavaScript
/** @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