UNPKG

data-transport

Version:
190 lines 26.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.BrowserExtensionsTransport = exports.BrowserExtensionsClientTransport = exports.BrowserExtensionsMainTransport = exports.BrowserExtensionsGenericTransport = void 0; var tslib_1 = require("tslib"); var constant_1 = require("../constant"); var transport_1 = require("../transport"); var transportName = '__DATA_TRANSPORT_BROWSER_EXTENSIONS__'; var BrowserExtensionsGenericTransport = /** @class */ (function (_super) { tslib_1.__extends(BrowserExtensionsGenericTransport, _super); function BrowserExtensionsGenericTransport(_options) { if (_options === void 0) { _options = {}; } var _a; var _b = _options.browser, browser = _b === void 0 ? (_a = global.browser) !== null && _a !== void 0 ? _a : global.chrome : _b, _c = _options.listener, listener = _c === void 0 ? function (callback) { this[constant_1.callbackKey] = callback; var handler = function (data, sender, sendResponse) { data._sendResponse = sendResponse; callback(data); }; browser.runtime.onMessage.addListener(handler); return function () { browser.runtime.onMessage.removeListener(handler); }; } : _c, _d = _options.sender, sender = _d === void 0 ? function (message) { if (message._sendResponse) { var sendResponse = message._sendResponse; delete message._sendResponse; sendResponse(message); } else { // @ts-ignore browser.runtime.sendMessage(message, {}, this[constant_1.callbackKey]); } } : _d, options = tslib_1.__rest(_options, ["browser", "listener", "sender"]); return _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; } return BrowserExtensionsGenericTransport; }(transport_1.Transport)); exports.BrowserExtensionsGenericTransport = BrowserExtensionsGenericTransport; var connectEventName = 'sharedworker-connect'; var BrowserExtensionsMainTransport = /** @class */ (function (_super) { tslib_1.__extends(BrowserExtensionsMainTransport, _super); function BrowserExtensionsMainTransport(_options) { if (_options === void 0) { _options = {}; } var _this = this; var _a; var _b = _options.browser, browser = _b === void 0 ? (_a = global.browser) !== null && _a !== void 0 ? _a : global.chrome : _b, _c = _options.listener, listener = _c === void 0 ? function (callback) { var _this = this; this[constant_1.callbackKey] = callback; return function () { _this.ports.forEach(function (port) { port.disconnect(); }); }; } : _c, _d = _options.sender, sender = _d === void 0 ? function (message) { var _a; var port = (_a = message._extra) === null || _a === void 0 ? void 0 : _a._port; if (port) { delete message._port; port.postMessage(message); } else if (message.type === 'response' && // @ts-ignore this.ports.has(message.requestId)) { // @ts-ignore var port_1 = this.ports.get(message.requestId); port_1.postMessage(message); } else { this.ports.forEach(function (port) { try { port.postMessage(message); } catch (error) { console.error(error); } }); } } : _d, options = tslib_1.__rest(_options, ["browser", "listener", "sender"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; _this.ports = new Map(); _this._onConnectCallback = new Set(); _this._onDisconnectCallback = new Set(); browser.runtime.onConnect.addListener(function (port) { return tslib_1.__awaiter(_this, void 0, void 0, function () { var handler_1, id_1; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (!(port.name === transportName)) return [3 /*break*/, 2]; handler_1 = function (data) { var _a; data._extra = (_a = data._extra) !== null && _a !== void 0 ? _a : {}; data._extra._port = port; _this[constant_1.callbackKey](data); }; port.onMessage.addListener(handler_1); port.onDisconnect.addListener(function () { port.onMessage.removeListener(handler_1); _this.ports.forEach(function (_port, id) { if (_port === port) { _this.ports.delete(id); } }); _this._onDisconnectCallback.forEach(function (callback) { callback(id_1); }); }); return [4 /*yield*/, this.emit({ // @ts-ignore name: connectEventName, _extra: { _port: port }, })]; case 1: id_1 = _a.sent(); this.ports.set(id_1, port); this._onConnectCallback.forEach(function (callback) { callback(id_1); }); _a.label = 2; case 2: return [2 /*return*/]; } }); }); }); return _this; } BrowserExtensionsMainTransport.prototype.onConnect = function (callback) { var _this = this; this._onConnectCallback.add(callback); return function () { _this._onConnectCallback.delete(callback); }; }; BrowserExtensionsMainTransport.prototype.onDisconnect = function (callback) { var _this = this; this._onDisconnectCallback.add(callback); return function () { _this._onDisconnectCallback.delete(callback); }; }; return BrowserExtensionsMainTransport; }(transport_1.Transport)); exports.BrowserExtensionsMainTransport = BrowserExtensionsMainTransport; var BrowserExtensionsClientTransport = /** @class */ (function (_super) { tslib_1.__extends(BrowserExtensionsClientTransport, _super); function BrowserExtensionsClientTransport(_options) { if (_options === void 0) { _options = {}; } var _this = this; var _a; var _b = _options.browser, browser = _b === void 0 ? (_a = global.browser) !== null && _a !== void 0 ? _a : global.chrome : _b, _c = _options.port, port = _c === void 0 ? browser.runtime.connect({ name: transportName }) : _c, _d = _options.listener, listener = _d === void 0 ? function (callback) { var handler = function (options) { callback(options); }; port.onMessage.addListener(handler); return function () { port.onMessage.removeListener(handler); }; } : _d, _e = _options.sender, sender = _e === void 0 ? function (message) { port.postMessage(message); } : _e, options = tslib_1.__rest(_options, ["browser", "port", "listener", "sender"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; _this._onConnectCallback = new Set(); // @ts-ignore _this.listen(connectEventName, function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { Promise.resolve().then(function () { _this._onConnectCallback.forEach(function (callback) { callback(); }); }); return [2 /*return*/, this.id]; }); }); }); return _this; } BrowserExtensionsClientTransport.prototype.onConnect = function (callback) { var _this = this; this._onConnectCallback.add(callback); return function () { _this._onConnectCallback.delete(callback); }; }; return BrowserExtensionsClientTransport; }(transport_1.Transport)); exports.BrowserExtensionsClientTransport = BrowserExtensionsClientTransport; exports.BrowserExtensionsTransport = { Main: BrowserExtensionsMainTransport, Client: BrowserExtensionsClientTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3NlckV4dGVuc2lvbnNUcmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNwb3J0cy9icm93c2VyRXh0ZW5zaW9uc1RyYW5zcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsd0NBQTBDO0FBUTFDLDBDQUF5QztBQUV6QyxJQUFNLGFBQWEsR0FBRyx1Q0FBdUMsQ0FBQztBQTZDOUQ7SUFFVSw2REFBWTtJQUdwQiwyQ0FBWSxRQUF1RDtRQUF2RCx5QkFBQSxFQUFBLGFBQXVEOztRQUUvRCxJQUFBLEtBK0JFLFFBQVEsUUEvQitCLEVBQXpDLE9BQU8sbUJBQUcsTUFBQSxNQUFNLENBQUMsT0FBTyxtQ0FBSSxNQUFNLENBQUMsTUFBTSxLQUFBLEVBQ3pDLEtBOEJFLFFBQVEsU0FoQlQsRUFkRCxRQUFRLG1CQUFHLFVBQW1ELFFBQVE7WUFDcEUsSUFBSSxDQUFDLHNCQUFXLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDN0IsSUFBTSxPQUFPLEdBQUcsVUFDZCxJQUFtQyxFQUNuQyxNQUFvRSxFQUNwRSxZQUE0RDtnQkFFNUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7Z0JBQ2xDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqQixDQUFDLENBQUM7WUFDRixPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDL0MsT0FBTztnQkFDTCxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEQsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxLQUFBLEVBQ0QsS0FlRSxRQUFRLE9BRlQsRUFiRCxNQUFNLG1CQUFHLFVBQW1ELE9BQU87WUFDakUsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQzFCLElBQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUM7Z0JBQzNDLE9B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QyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0gsdUNBQUM7QUFBRCxDQUFDLEFBN0NELENBRVUscUJBQVMsR0EyQ2xCO0FBN0NxQiw0RUFBZ0M7QUErQ3pDLFFBQUEsMEJBQTBCLEdBQUc7SUFDeEMsSUFBSSxFQUFFLDhCQUE4QjtJQUNwQyxNQUFNLEVBQUUsZ0NBQWdDO0NBQ3pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYWxsYmFja0tleSB9IGZyb20gJy4uL2NvbnN0YW50JztcbmltcG9ydCB0eXBlIHtcbiAgQmFzZUludGVyYWN0aW9uLFxuICBJUmVxdWVzdCxcbiAgTGlzdGVuZXJPcHRpb25zLFxuICBTZW5kT3B0aW9ucyxcbiAgVHJhbnNwb3J0T3B0aW9ucyxcbn0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4uL3RyYW5zcG9ydCc7XG5cbmNvbnN0IHRyYW5zcG9ydE5hbWUgPSAnX19EQVRBX1RSQU5TUE9SVF9CUk9XU0VSX0VYVEVOU0lPTlNfXyc7XG5cbnR5cGUgQnJvd3NlciA9IHR5cGVvZiBnbG9iYWwuYnJvd3NlciB8IHR5cGVvZiBnbG9iYWwuY2hyb21lO1xuXG50eXBlIFBvcnQgPSBicm93c2VyLnJ1bnRpbWUuUG9ydCB8IGNocm9tZS5ydW50aW1lLlBvcnQ7XG5cbmludGVyZmFjZSBTZW5kUmVzcG9uc2Uge1xuICBfc2VuZFJlc3BvbnNlPzogKHJlc3BvbnNlPzogU2VuZE9wdGlvbnM8U2VuZFJlc3BvbnNlPikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCcm93c2VyRXh0ZW5zaW9uc0dlbmVyaWNUcmFuc3BvcnRPcHRpb25zXG4gIGV4dGVuZHMgUGFydGlhbDxUcmFuc3BvcnRPcHRpb25zPFNlbmRSZXNwb25zZT4+IHtcbiAgLyoqXG4gICAqIGJyb3dzZXIgZXh0ZW5zaW9uIEFQSS5cbiAgICovXG4gIGJyb3dzZXI/OiBCcm93c2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJFeHRlbnNpb25zTWFpblRyYW5zcG9ydE9wdGlvbnNcbiAgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zcG9ydE9wdGlvbnM8QnJvd3NlckV4dGVuc2lvbnNNYWluUG9ydD4+IHtcbiAgLyoqXG4gICAqIGJyb3dzZXIgZXh0ZW5zaW9uIEFQSS5cbiAgICovXG4gIGJyb3dzZXI/OiBCcm93c2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJFeHRlbnNpb25zQ2xpZW50VHJhbnNwb3J0T3B0aW9uc1xuICBleHRlbmRzIFBhcnRpYWw8VHJhbnNwb3J0T3B0aW9ucz4ge1xuICAvKipcbiAgICogYnJvd3NlciBleHRlbnNpb24gQVBJLlxuICAgKi9cbiAgYnJvd3Nlcj86IEJyb3dzZXI7XG4gIC8qKlxuICAgKiBicm93c2VyIGV4dGVuc2lvbiBjbGllbnQgcG9ydC5cbiAgICovXG4gIHBvcnQ/OiBQb3J0O1xufVxuXG5pbnRlcmZhY2UgQnJvd3NlckV4dGVuc2lvbnNNYWluUG9ydCB7XG4gIF9wb3J0PzogUG9ydDtcbn1cblxudHlwZSBDbGllbnRDYWxsYmFjayA9ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xudHlwZSBNYWluQ2FsbGJhY2sgPSAoY2xpZW50SWQ6IHN0cmluZykgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCcm93c2VyRXh0ZW5zaW9uc0dlbmVyaWNUcmFuc3BvcnQ8XG4gIFQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb24gPSBhbnlcbj4gZXh0ZW5kcyBUcmFuc3BvcnQ8VD4ge1xuICBwcml2YXRlIFtjYWxsYmFja0tleV0hOiAob3B0aW9uczogTGlzdGVuZXJPcHRpb25zPFNlbmRSZXNwb25zZT4pID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoX29wdGlvbnM6IEJyb3dzZXJFeHRlbnNpb25zR2VuZXJpY1RyYW5zcG9ydE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGJyb3dzZXIgPSBnbG9iYWwuYnJvd3NlciA/PyBnbG9iYWwuY2hyb21lLFxuICAgICAgbGlzdGVuZXIgPSBmdW5jdGlvbiAodGhpczogQnJvd3NlckV4dGVuc2lvbnNHZW5lcmljVHJhbnNwb3J0LCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzW2NhbGxiYWNrS2V5XSA9IGNhbGxiYWNrO1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKFxuICAgICAgICAgIGRhdGE6IExpc3RlbmVyT3B0aW9uczxTZW5kUmVzcG9uc2U+LFxuICAgICAgICAgIHNlbmRlcjogYnJvd3Nlci5ydW50aW1lLk1lc3NhZ2VTZW5kZXIgfCBjaHJvbWUucnVudGltZS5NZXNzYWdlU2VuZGVyLFxuICAgICAgICAgIHNlbmRSZXNwb25zZTogKHJlc3BvbnNlPzogU2VuZE9wdGlvbnM8U2VuZFJlc3BvbnNlPikgPT4gdm9pZFxuICAgICAgICApID0+IHtcbiAgICAgICAgICBkYXRhLl9zZW5kUmVzcG9uc2UgPSBzZW5kUmVzcG9uc2U7XG4gICAgICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH07XG4gICAgICAgIGJyb3dzZXIucnVudGltZS5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIoaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgYnJvd3Nlci5ydW50aW1lLm9uTWVzc2FnZS5yZW1vdmVMaXN0ZW5lcihoYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzZW5kZXIgPSBmdW5jdGlvbiAodGhpczogQnJvd3NlckV4dGVuc2lvbnNHZW5lcmljVHJhbnNwb3J0LCBtZXNzYWdlKSB7XG4gICAgICAgIGlmIChtZXNzYWdlLl9zZW5kUmVzcG9uc2UpIHtcbiAgICAgICAgICBjb25zdCBzZW5kUmVzcG9uc2UgPSBtZXNzYWdlLl9zZW5kUmVzcG9uc2U7XG4gICAgICAgICAgZGVsZXRlIG1lc3NhZ2UuX3NlbmRSZXNwb25zZTtcbiAgICAgICAgICBzZW5kUmVzcG9uc2UobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGJyb3dzZXIucnVudGltZS5zZW5kTWVzc2FnZShcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICB7fSxcbiAgICAgICAgICAgIHRoaXNbY2FsbGJhY2tLZXldIGFzIChyZXNwb25zZTogSVJlcXVlc3Q8U2VuZFJlc3BvbnNlPikgPT4gdm9pZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IF9vcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHNlbmRlcixcbiAgICB9KTtcbiAgfVxufVxuXG5jb25zdCBjb25uZWN0RXZlbnROYW1lID0gJ3NoYXJlZHdvcmtlci1jb25uZWN0JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJyb3dzZXJFeHRlbnNpb25zTWFpblRyYW5zcG9ydDxcbiAgVCBleHRlbmRzIEJhc2VJbnRlcmFjdGlvbiA9IGFueVxuPiBleHRlbmRzIFRyYW5zcG9ydDxUPiB7XG4gIHByb3RlY3RlZCBwb3J0cyA9IG5ldyBNYXA8c3RyaW5nLCBQb3J0PigpO1xuXG4gIHByaXZhdGUgW2NhbGxiYWNrS2V5XSE6IChcbiAgICBvcHRpb25zOiBMaXN0ZW5lck9wdGlvbnM8QnJvd3NlckV4dGVuc2lvbnNNYWluUG9ydD5cbiAgKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zOiBCcm93c2VyRXh0ZW5zaW9uc01haW5UcmFuc3BvcnRPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBicm93c2VyID0gZ2xvYmFsLmJyb3dzZXIgPz8gZ2xvYmFsLmNocm9tZSxcbiAgICAgIGxpc3RlbmVyID0gZnVuY3Rpb24gKHRoaXM6IEJyb3dzZXJFeHRlbnNpb25zTWFpblRyYW5zcG9ydCwgY2FsbGJhY2spIHtcbiAgICAgICAgdGhpc1tjYWxsYmFja0tleV0gPSBjYWxsYmFjaztcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBvcnRzLmZvckVhY2goKHBvcnQpID0+IHtcbiAgICAgICAgICAgIHBvcnQuZGlzY29ubmVjdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNlbmRlciA9IGZ1bmN0aW9uICh0aGlzOiBCcm93c2VyRXh0ZW5zaW9uc01haW5UcmFuc3BvcnQsIG1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgcG9ydCA9IG1lc3NhZ2UuX2V4dHJhPy5fcG9ydDtcbiAgICAgICAgaWYgKHBvcnQpIHtcbiAgICAgICAgICBkZWxldGUgbWVzc2FnZS5fcG9ydDtcbiAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIG1lc3NhZ2UudHlwZSA9PT0gJ3Jlc3BvbnNlJyAmJlxuICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICB0aGlzLnBvcnRzLmhhcyhtZXNzYWdlLnJlcXVlc3RJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGNvbnN0IHBvcnQgPSB0aGlzLnBvcnRzLmdldChtZXNzYWdlLnJlcXVlc3RJZCkhO1xuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wb3J0cy5mb3JFYWNoKChwb3J0KSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IF9vcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHNlbmRlcixcbiAgICB9KTtcbiAgICBicm93c2VyLnJ1bnRpbWUub25Db25uZWN0LmFkZExpc3RlbmVyKGFzeW5jIChwb3J0OiBQb3J0KSA9PiB7XG4gICAgICBpZiAocG9ydC5uYW1lID09PSB0cmFuc3BvcnROYW1lKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgZGF0YS5fZXh0cmEgPSBkYXRhLl9leHRyYSA/PyB7fTtcbiAgICAgICAgICBkYXRhLl9leHRyYS5fcG9ydCA9IHBvcnQ7XG4gICAgICAgICAgdGhpc1tjYWxsYmFja0tleV0oZGF0YSBhcyBMaXN0ZW5lck9wdGlvbnM8QnJvd3NlckV4dGVuc2lvbnNNYWluUG9ydD4pO1xuICAgICAgICB9O1xuICAgICAgICBwb3J0Lm9uTWVzc2FnZS5hZGRMaXN0ZW5lcihoYW5kbGVyKTtcbiAgICAgICAgcG9ydC5vbkRpc2Nvbm5lY3QuYWRkTGlzdGVuZXIoKCkgPT4ge1xuICAgICAgICAgIHBvcnQub25NZXNzYWdlLnJlbW92ZUxpc3RlbmVyKGhhbmRsZXIpO1xuICAgICAgICAgIHRoaXMucG9ydHMuZm9yRWFjaCgoX3BvcnQsIGlkKSA9PiB7XG4gICAgICAgICAgICBpZiAoX3BvcnQgPT09IHBvcnQpIHtcbiAgICAgICAgICAgICAgdGhpcy5wb3J0cy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuX29uRGlzY29ubmVjdENhbGxiYWNrLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhpZCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgaWQ6IHN0cmluZyA9IGF3YWl0IHRoaXMuZW1pdCh7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIG5hbWU6IGNvbm5lY3RFdmVudE5hbWUsXG4gICAgICAgICAgX2V4dHJhOiB7IF9wb3J0OiBwb3J0IH0sXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvcnRzLnNldChpZCwgcG9ydCk7XG4gICAgICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2soaWQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29uQ29ubmVjdENhbGxiYWNrID0gbmV3IFNldDxNYWluQ2FsbGJhY2s+KCk7XG5cbiAgb25Db25uZWN0KGNhbGxiYWNrOiBNYWluQ2FsbGJhY2spIHtcbiAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5hZGQoY2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5kZWxldGUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIF9vbkRpc2Nvbm5lY3RDYWxsYmFjayA9IG5ldyBTZXQ8TWFpbkNhbGxiYWNrPigpO1xuXG4gIG9uRGlzY29ubmVjdChjYWxsYmFjazogTWFpbkNhbGxiYWNrKSB7XG4gICAgdGhpcy5fb25EaXNjb25uZWN0Q2FsbGJhY2suYWRkKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5fb25EaXNjb25uZWN0Q2FsbGJhY2suZGVsZXRlKGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCcm93c2VyRXh0ZW5zaW9uc0NsaWVudFRyYW5zcG9ydDxcbiAgVCBleHRlbmRzIEJhc2VJbnRlcmFjdGlvbiA9IGFueVxuPiBleHRlbmRzIFRyYW5zcG9ydDxUPiB7XG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zOiBCcm93c2VyRXh0ZW5zaW9uc0NsaWVudFRyYW5zcG9ydE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGJyb3dzZXIgPSBnbG9iYWwuYnJvd3NlciA/PyBnbG9iYWwuY2hyb21lLFxuICAgICAgcG9ydCA9IGJyb3dzZXIucnVudGltZS5jb25uZWN0KHsgbmFtZTogdHJhbnNwb3J0TmFtZSB9KSxcbiAgICAgIGxpc3RlbmVyID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAob3B0aW9uczogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2sob3B0aW9ucyBhcyBMaXN0ZW5lck9wdGlvbnM8e30+KTtcbiAgICAgICAgfTtcbiAgICAgICAgcG9ydC5vbk1lc3NhZ2UuYWRkTGlzdGVuZXIoaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgcG9ydC5vbk1lc3NhZ2UucmVtb3ZlTGlzdGVuZXIoaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2VuZGVyID0gKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IF9vcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHNlbmRlcixcbiAgICB9KTtcbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5saXN0ZW4oY29ubmVjdEV2ZW50TmFtZSwgYXN5bmMgKCkgPT4ge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Db25uZWN0Q2FsbGJhY2sgPSBuZXcgU2V0PENsaWVudENhbGxiYWNrPigpO1xuXG4gIG9uQ29ubmVjdChjYWxsYmFjazogQ2xpZW50Q2FsbGJhY2spIHtcbiAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5hZGQoY2FsbGJhY2spO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5kZWxldGUoY2FsbGJhY2spO1xuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IEJyb3dzZXJFeHRlbnNpb25zVHJhbnNwb3J0ID0ge1xuICBNYWluOiBCcm93c2VyRXh0ZW5zaW9uc01haW5UcmFuc3BvcnQsXG4gIENsaWVudDogQnJvd3NlckV4dGVuc2lvbnNDbGllbnRUcmFuc3BvcnQsXG59O1xuIl19