'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = DeferredSink; var _task = require('../task'); function DeferredSink(sink) { this.sink = sink; this.events = []; this.active = true; } /** @license MIT License (c) copyright 2010-2016 original author or authors */ /** @author Brian Cavalier */ /** @author John Hann */ DeferredSink.prototype.event = function (t, x) { if (!this.active) { return; } if (this.events.length === 0) { (0, _task.defer)(new PropagateAllTask(this.sink, t, this.events)); } this.events.push({ time: t, value: x }); }; DeferredSink.prototype.end = function (t, x) { if (!this.active) { return; } this._end(new EndTask(t, x, this.sink)); }; DeferredSink.prototype.error = function (t, e) { this._end(new ErrorTask(t, e, this.sink)); }; DeferredSink.prototype._end = function (task) { this.active = false; (0, _task.defer)(task); }; function PropagateAllTask(sink, time, events) { this.sink = sink; this.events = events; this.time = time; } PropagateAllTask.prototype.run = function () { var this$1 = this; var events = this.events; var sink = this.sink; var event; for (var i = 0, l = events.length; i < l; ++i) { event = events[i]; this$1.time = event.time; sink.event(event.time, event.value); } events.length = 0; }; PropagateAllTask.prototype.error = function (e) { this.sink.error(this.time, e); }; function EndTask(t, x, sink) { this.time = t; this.value = x; this.sink = sink; } EndTask.prototype.run = function () { this.sink.end(this.time, this.value); }; EndTask.prototype.error = function (e) { this.sink.error(this.time, e); }; function ErrorTask(t, e, sink) { this.time = t; this.value = e; this.sink = sink; } ErrorTask.prototype.run = function () { this.sink.error(this.time, this.value); }; ErrorTask.prototype.error = function (e) { throw e; };