UNPKG

alm

Version:

The best IDE for TypeScript

113 lines (112 loc) 3.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var CompositeDisposible = /** @class */ (function () { function CompositeDisposible() { var _this = this; this.disposibles = []; this.add = function (disposible) { _this.disposibles.push(disposible); }; this.dispose = function () { _this.disposibles.forEach(function (d) { return d.dispose(); }); }; } return CompositeDisposible; }()); exports.CompositeDisposible = CompositeDisposible; /** passes through events as they happen. You will not get events from before you start listening */ var TypedEvent = /** @class */ (function () { function TypedEvent() { var _this = this; this.listeners = []; this.listenersOncer = []; this.on = function (listener) { _this.listeners.push(listener); return { dispose: function () { return _this.off(listener); } }; }; this.once = function (listener) { _this.listenersOncer.push(listener); }; this.off = function (listener) { var callbackIndex = _this.listeners.indexOf(listener); if (callbackIndex > -1) _this.listeners.splice(callbackIndex, 1); }; this.emit = function (event) { /** Update any `current` listeners */ _this._last = event; while (_this._currentQueue.length) { var item = _this._currentQueue.pop(); item.resolve(event); } /** Update any general listeners */ _this.listeners.forEach(function (listener) { return listener(event); }); /** Clear the `once` queue */ _this.listenersOncer.forEach(function (listener) { return listener(event); }); _this.listenersOncer = []; }; this.pipe = function (te) { return _this.on(function (e) { return te.emit(e); }); }; /** * A promise that is resolved on first event * ... or immediately with the last value */ this._currentQueue = []; this._last = null; this.current = function () { if (_this._last != null) { return Promise.resolve(_this._last); } else { var promise_1 = new Promise(function (resolve, reject) { _this._currentQueue.push({ promise: promise_1, resolve: resolve, reject: reject }); }); return promise_1; } }; /** * Allows you to join in with the last value * So you don't need to do .current + .on */ this.join = function (listener) { if (_this._last != null) { listener(_this._last); } return _this.on(listener); }; } return TypedEvent; }()); exports.TypedEvent = TypedEvent; /** single event listener queue */ var SingleListenerQueue = /** @class */ (function () { function SingleListenerQueue() { var _this = this; this.listener = null; this.pending = []; this.pendingCount = function () { return _this.pending.length; }; } SingleListenerQueue.prototype.on = function (listener) { var _this = this; this.listener = listener; // clear pending this.pending.forEach(function (evt) { return _this.listener(evt); }); this.pending = []; }; SingleListenerQueue.prototype.off = function () { this.listener = null; }; SingleListenerQueue.prototype.emit = function (event) { if (!this.listener) { this.pending.push(event); } else { this.listener(event); } }; return SingleListenerQueue; }()); exports.SingleListenerQueue = SingleListenerQueue;