UNPKG

mongodb-stitch

Version:

[![Join the chat at https://gitter.im/mongodb/stitch](https://badges.gitter.im/mongodb/stitch.svg)](https://gitter.im/mongodb/stitch?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

128 lines 5.44 kB
var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; (function (factory) { if (typeof module === "object" && typeof module.exports === "object") { var v = factory(require, exports); if (v !== undefined) module.exports = v; } else if (typeof define === "function" && define.amd) { define(["require", "exports", "./Event", "./StitchEvent", "../../StitchError", "../../StitchRequestError"], factory); } })(function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Event_1 = __importDefault(require("./Event")); var StitchEvent_1 = __importDefault(require("./StitchEvent")); var StitchError_1 = __importDefault(require("../../StitchError")); var StitchRequestError_1 = __importDefault(require("../../StitchRequestError")); var BaseEventStream = (function () { function BaseEventStream(reconnecter) { this.reconnecter = reconnecter; this.closed = false; this.events = []; this.listeners = []; this.lastErr = undefined; } BaseEventStream.prototype.reconnect = function (error) { var _this = this; if (!this.reconnecter) { if (!this.closed) { this.closed = true; this.events.push(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, "stream closed: " + error)); this.poll(); } return; } this.reconnecter() .then(function (next) { _this.onReconnect(next); }) .catch(function (e) { if (!(e instanceof StitchError_1.default) || !(e instanceof StitchRequestError_1.default)) { _this.closed = true; _this.events.push(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, "stream closed: " + error)); _this.poll(); return; } setTimeout(function () { return _this.reconnect(e); }, BaseEventStream.RETRY_TIMEOUT_MILLIS); }); }; BaseEventStream.prototype.poll = function () { while (this.events.length !== 0) { var event = this.events.pop(); for (var _i = 0, _a = this.listeners; _i < _a.length; _i++) { var listener = _a[_i]; if (listener.onEvent) { listener.onEvent(event); } } } }; BaseEventStream.prototype.addListener = function (listener) { var _this = this; if (this.closed) { setTimeout(function () { return listener.onEvent(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, "stream closed")); }, 0); return; } if (this.lastErr !== undefined) { setTimeout(function () { return listener.onEvent(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, _this.lastErr)); }, 0); return; } this.listeners.push(listener); this.poll(); }; BaseEventStream.prototype.removeListener = function (listener) { var index = this.listeners.indexOf(listener); if (index === -1) { return; } this.listeners.splice(index, 1); }; BaseEventStream.prototype.listenOnce = function (listener) { var _this = this; if (this.closed) { setTimeout(function () { return listener.onEvent(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, "stream closed")); }, 0); return; } if (this.lastErr !== undefined) { setTimeout(function () { return listener.onEvent(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, _this.lastErr)); }, 0); return; } var wrapper = { onEvent: function (e) { _this.removeListener(wrapper); listener.onEvent(e); } }; this.addListener(wrapper); }; BaseEventStream.prototype.nextEvent = function () { var _this = this; if (this.closed) { return Promise.reject(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, "stream closed")); } if (this.lastErr !== undefined) { return Promise.reject(new Event_1.default(StitchEvent_1.default.ERROR_EVENT_NAME, this.lastErr)); } return new Promise(function (resolve, reject) { _this.listenOnce({ onEvent: function (e) { resolve(e); } }); }); }; BaseEventStream.prototype.close = function () { if (this.closed) { return; } this.closed = true; this.afterClose(); }; BaseEventStream.RETRY_TIMEOUT_MILLIS = 5000; return BaseEventStream; }()); exports.default = BaseEventStream; }); //# sourceMappingURL=BaseEventStream.js.map