UNPKG

data-transport

Version:
128 lines 15.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.WorkerTransport = exports.WorkerInternalTransport = exports.WorkerMainTransport = void 0; var tslib_1 = require("tslib"); var transport_1 = require("../transport"); var connectEventName = 'worker-connect'; var WorkerMainTransport = /** @class */ (function (_super) { tslib_1.__extends(WorkerMainTransport, _super); function WorkerMainTransport(_options) { var _this = this; var worker = _options.worker, _a = _options.listener, listener = _a === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data; callback(data); }; worker.addEventListener('message', handler); return function () { worker.removeEventListener('message', handler); }; } : _a, _b = _options.sender, sender = _b === void 0 ? function (message) { var _a; var transfer = (_a = message.transfer) !== null && _a !== void 0 ? _a : []; delete message.transfer; worker.postMessage(message, transfer); } : _b, options = tslib_1.__rest(_options, ["worker", "listener", "sender"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; _this._connected = false; _this._handleConnectCallbacks = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { if (this._connected) { return [2 /*return*/]; } this._connected = true; this._onConnectCallback.forEach(function (callback) { callback(); }); this._onConnectCallback.clear(); return [2 /*return*/]; }); }); }; _this._onConnectCallback = new Set(); _this.emit({ // @ts-ignore name: connectEventName, respond: true, silent: true, }).then(_this._handleConnectCallbacks); // @ts-ignore _this.listen(connectEventName, _this._handleConnectCallbacks); return _this; } WorkerMainTransport.prototype.onConnect = function (callback) { var _this = this; if (this._connected) { return callback(); } this._onConnectCallback.add(callback); return function () { _this._onConnectCallback.delete(callback); }; }; return WorkerMainTransport; }(transport_1.Transport)); exports.WorkerMainTransport = WorkerMainTransport; var WorkerInternalTransport = /** @class */ (function (_super) { tslib_1.__extends(WorkerInternalTransport, _super); function WorkerInternalTransport(_options) { if (_options === void 0) { _options = {}; } var _this = this; var _a = _options.listener, listener = _a === void 0 ? function (callback) { var handler = (function (_a) { var data = _a.data; callback(data); }); self.addEventListener('message', handler); return function () { self.removeEventListener('message', handler); }; } : _a, _b = _options.sender, sender = _b === void 0 ? function (message) { var _a; var transfer = (_a = message.transfer) !== null && _a !== void 0 ? _a : []; delete message.transfer; postMessage(message, transfer); } : _b, options = tslib_1.__rest(_options, ["listener", "sender"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; _this._handleConnectCallbacks = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { if (this._connected) { return [2 /*return*/]; } this._connected = true; this._onConnectCallback.forEach(function (callback) { callback(); }); this._onConnectCallback.clear(); return [2 /*return*/]; }); }); }; _this._connected = false; _this._onConnectCallback = new Set(); _this.emit({ // @ts-ignore name: connectEventName, respond: true, silent: true, }).then(_this._handleConnectCallbacks); // @ts-ignore _this.listen(connectEventName, _this._handleConnectCallbacks); return _this; } WorkerInternalTransport.prototype.onConnect = function (callback) { var _this = this; if (this._connected) { return callback(); } this._onConnectCallback.add(callback); return function () { _this._onConnectCallback.delete(callback); }; }; return WorkerInternalTransport; }(transport_1.Transport)); exports.WorkerInternalTransport = WorkerInternalTransport; exports.WorkerTransport = { Main: WorkerMainTransport, Worker: WorkerInternalTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyVHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydHMvd29ya2VyVHJhbnNwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFNQSwwQ0FBeUM7QUFRekMsSUFBTSxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztBQWExQztJQUVVLCtDQUFZO0lBQ3BCLDZCQUFZLFFBQW9DO1FBQWhELGlCQW9DQztRQWxDRyxJQUFBLE1BQU0sR0FrQkosUUFBUSxPQWxCSixFQUNOLEtBaUJFLFFBQVEsU0FQVCxFQVZELFFBQVEsbUJBQUcsVUFBQyxRQUFRO1lBQ2xCLElBQU0sT0FBTyxHQUFHLFVBQUMsRUFFbUM7b0JBRGxELElBQUksVUFBQTtnQkFFSixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFDO1lBQ0YsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUM1QyxPQUFPO2dCQUNMLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxLQUFBLEVBQ0QsS0FNRSxRQUFRLE9BRlQsRUFKRCxNQUFNLG1CQUFHLFVBQUMsT0FBTzs7WUFDZixJQUFNLFFBQVEsR0FBRyxNQUFBLE9BQU8sQ0FBQyxRQUFRLG1DQUFJLEVBQUUsQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQyxRQUFRLENBQUM7WUFDeEIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxLQUFBLEVBQ0UsT0FBTyxrQkFDUixRQUFRLEVBbkJOLGdDQW1CTCxDQURXLENBQ0M7UUFDYixRQUFBLE1BQUssa0RBQ0EsT0FBTyxLQUNWLFFBQVEsVUFBQSxFQUNSLE1BQU0sUUFBQSxJQUNOLFNBQUM7UUFhRyxnQkFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQiw2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LEdBQUcsS0FBSyxDQUFDO1FBRW5CLHdCQUFrQixHQUFHLElBQUksR0FBRyxFQUFrQixDQUFDO1FBeEJyRCxLQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1IsYUFBYTtZQUNiLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsT0FBTyxFQUFFLElBQUk7WUFDYixNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFFdEMsYUFBYTtRQUNiLEtBQUksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsS0FBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7O0lBQzlELENBQUM7SUFpQkQsMkNBQVMsR0FBVCxVQUFVLFFBQXdCO1FBQWxDLGlCQVFDO1FBUEMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDcEIsT0FBTyxRQUFRLEVBQUUsQ0FBQztRQUNwQixDQUFDO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxPQUFPO1lBQ0wsS0FBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0gsOEJBQUM7QUFBRCxDQUFDLEFBOURELENBRVUscUJBQVMsR0E0RGxCO0FBOURxQiwwREFBdUI7QUFnRWhDLFFBQUEsZUFBZSxHQUFHO0lBQzdCLElBQUksRUFBRSxtQkFBbUI7SUFDekIsTUFBTSxFQUFFLHVCQUF1QjtDQUNoQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuICBUcmFuc3BvcnRPcHRpb25zLFxuICBUcmFuc2ZlcmFibGVXb3JrZXIsXG4gIExpc3RlbmVyT3B0aW9ucyxcbiAgQmFzZUludGVyYWN0aW9uLFxufSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgVHJhbnNwb3J0IH0gZnJvbSAnLi4vdHJhbnNwb3J0JztcblxuLy8gZm9sbG93IGlzc3VlOiBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzIwNTk1XG4vLyB3b3JrYXJvdW5kOiBgdHNjIC0tc2tpcExpYkNoZWNrYC5cbmRlY2xhcmUgdmFyIHNlbGY6IFdvcmtlckdsb2JhbFNjb3BlO1xuXG50eXBlIENsaWVudENhbGxiYWNrID0gKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG5cbmNvbnN0IGNvbm5lY3RFdmVudE5hbWUgPSAnd29ya2VyLWNvbm5lY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlck1haW5UcmFuc3BvcnRPcHRpb25zXG4gIGV4dGVuZHMgUGFydGlhbDxUcmFuc3BvcnRPcHRpb25zPFRyYW5zZmVyYWJsZVdvcmtlcj4+IHtcbiAgLyoqXG4gICAqIFBhc3Mgd2ViIHdvcmtlciB1c2luZyBkYXRhIHRyYW5zcG9ydC5cbiAgICovXG4gIHdvcmtlcjogV29ya2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtlckludGVybmFsVHJhbnNwb3J0T3B0aW9uc1xuICBleHRlbmRzIFBhcnRpYWw8VHJhbnNwb3J0T3B0aW9uczxUcmFuc2ZlcmFibGVXb3JrZXI+PiB7fVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2VyTWFpblRyYW5zcG9ydDxcbiAgVCBleHRlbmRzIEJhc2VJbnRlcmFjdGlvbiA9IGFueVxuPiBleHRlbmRzIFRyYW5zcG9ydDxUPiB7XG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zOiBXb3JrZXJNYWluVHJhbnNwb3J0T3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHdvcmtlcixcbiAgICAgIGxpc3RlbmVyID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgICAgICAgIGRhdGEsXG4gICAgICAgIH06IE1lc3NhZ2VFdmVudDxMaXN0ZW5lck9wdGlvbnM8VHJhbnNmZXJhYmxlV29ya2VyPj4pID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgd29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICB3b3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNlbmRlciA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0gbWVzc2FnZS50cmFuc2ZlciA/PyBbXTtcbiAgICAgICAgZGVsZXRlIG1lc3NhZ2UudHJhbnNmZXI7XG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2Zlcik7XG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSBfb3B0aW9ucztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBzZW5kZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmVtaXQoe1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbmFtZTogY29ubmVjdEV2ZW50TmFtZSxcbiAgICAgIHJlc3BvbmQ6IHRydWUsXG4gICAgICBzaWxlbnQ6IHRydWUsXG4gICAgfSkudGhlbih0aGlzLl9oYW5kbGVDb25uZWN0Q2FsbGJhY2tzKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmxpc3Rlbihjb25uZWN0RXZlbnROYW1lLCB0aGlzLl9oYW5kbGVDb25uZWN0Q2FsbGJhY2tzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Nvbm5lY3RlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2hhbmRsZUNvbm5lY3RDYWxsYmFja3MgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jb25uZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmNsZWFyKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBfb25Db25uZWN0Q2FsbGJhY2sgPSBuZXcgU2V0PENsaWVudENhbGxiYWNrPigpO1xuXG4gIG9uQ29ubmVjdChjYWxsYmFjazogQ2xpZW50Q2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgdGhpcy5fb25Db25uZWN0Q2FsbGJhY2suYWRkKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5fb25Db25uZWN0Q2FsbGJhY2suZGVsZXRlKGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBXb3JrZXJJbnRlcm5hbFRyYW5zcG9ydDxcbiAgVCBleHRlbmRzIEJhc2VJbnRlcmFjdGlvbiA9IGFueVxuPiBleHRlbmRzIFRyYW5zcG9ydDxUPiB7XG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zOiBXb3JrZXJJbnRlcm5hbFRyYW5zcG9ydE9wdGlvbnMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGxpc3RlbmVyID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoKHsgZGF0YSB9OiBNZXNzYWdlRXZlbnQ8YW55PikgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICB9KSBhcyBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0O1xuICAgICAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzZW5kZXIgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IG1lc3NhZ2UudHJhbnNmZXIgPz8gW107XG4gICAgICAgIGRlbGV0ZSBtZXNzYWdlLnRyYW5zZmVyO1xuICAgICAgICBwb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2Zlcik7XG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSBfb3B0aW9ucztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBzZW5kZXIsXG4gICAgfSk7XG5cbiAgICB0aGlzLmVtaXQoe1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgbmFtZTogY29ubmVjdEV2ZW50TmFtZSxcbiAgICAgIHJlc3BvbmQ6IHRydWUsXG4gICAgICBzaWxlbnQ6IHRydWUsXG4gICAgfSkudGhlbih0aGlzLl9oYW5kbGVDb25uZWN0Q2FsbGJhY2tzKTtcblxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICB0aGlzLmxpc3Rlbihjb25uZWN0RXZlbnROYW1lLCB0aGlzLl9oYW5kbGVDb25uZWN0Q2FsbGJhY2tzKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNvbm5lY3RDYWxsYmFja3MgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jb25uZWN0ZWQgPSB0cnVlO1xuICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmNsZWFyKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBfY29ubmVjdGVkID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfb25Db25uZWN0Q2FsbGJhY2sgPSBuZXcgU2V0PENsaWVudENhbGxiYWNrPigpO1xuXG4gIG9uQ29ubmVjdChjYWxsYmFjazogQ2xpZW50Q2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5fY29ubmVjdGVkKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICB9XG4gICAgdGhpcy5fb25Db25uZWN0Q2FsbGJhY2suYWRkKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5fb25Db25uZWN0Q2FsbGJhY2suZGVsZXRlKGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBXb3JrZXJUcmFuc3BvcnQgPSB7XG4gIE1haW46IFdvcmtlck1haW5UcmFuc3BvcnQsXG4gIFdvcmtlcjogV29ya2VySW50ZXJuYWxUcmFuc3BvcnQsXG59O1xuIl19