UNPKG

data-transport

Version:
125 lines 15.1 kB
import { __assign, __awaiter, __extends, __generator, __rest } from "tslib"; import { Transport } from '../transport'; var connectEventName = 'worker-connect'; var WorkerMainTransport = /** @class */ (function (_super) { __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 = __rest(_options, ["worker", "listener", "sender"]); _this = _super.call(this, __assign(__assign({}, options), { listener: listener, sender: sender })) || this; _this._connected = false; _this._handleConnectCallbacks = function () { return __awaiter(_this, void 0, void 0, function () { return __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)); export { WorkerMainTransport }; var WorkerInternalTransport = /** @class */ (function (_super) { __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 = __rest(_options, ["listener", "sender"]); _this = _super.call(this, __assign(__assign({}, options), { listener: listener, sender: sender })) || this; _this._handleConnectCallbacks = function () { return __awaiter(_this, void 0, void 0, function () { return __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)); export { WorkerInternalTransport }; export var WorkerTransport = { Main: WorkerMainTransport, Worker: WorkerInternalTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2VyVHJhbnNwb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydHMvd29ya2VyVHJhbnNwb3J0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFNQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBUXpDLElBQU0sZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7QUFhMUM7SUFFVSx1Q0FBWTtJQUNwQiw2QkFBWSxRQUFvQztRQUFoRCxpQkFvQ0M7UUFsQ0csSUFBQSxNQUFNLEdBa0JKLFFBQVEsT0FsQkosRUFDTixLQWlCRSxRQUFRLFNBUFQsRUFWRCxRQUFRLG1CQUFHLFVBQUMsUUFBUTtZQUNsQixJQUFNLE9BQU8sR0FBRyxVQUFDLEVBRW1DO29CQURsRCxJQUFJLFVBQUE7Z0JBRUosUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQztZQUNGLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDNUMsT0FBTztnQkFDTCxNQUFNLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pELENBQUMsQ0FBQztRQUNKLENBQUMsS0FBQSxFQUNELEtBTUUsUUFBUSxPQUZULEVBSkQsTUFBTSxtQkFBRyxVQUFDLE9BQU87O1lBQ2YsSUFBTSxRQUFRLEdBQUcsTUFBQSxPQUFPLENBQUMsUUFBUSxtQ0FBSSxFQUFFLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3hCLE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsS0FBQSxFQUNFLE9BQU8sVUFDUixRQUFRLEVBbkJOLGdDQW1CTCxDQURXLENBQ0M7UUFDYixRQUFBLE1BQUssa0NBQ0EsT0FBTyxLQUNWLFFBQVEsVUFBQSxFQUNSLE1BQU0sUUFBQSxJQUNOLFNBQUM7UUFhRyxnQkFB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TSxnQkFBVSxHQUFHLEtBQUssQ0FBQztRQUVuQix3QkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQXhCckQsS0FBSSxDQUFDLElBQUksQ0FBQztZQUNSLGFBQWE7WUFDYixJQUFJLEVBQUUsZ0JBQWdCO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsTUFBTSxFQUFFLElBQUk7U0FDYixDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBRXRDLGFBQWE7UUFDYixLQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFLEtBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDOztJQUM5RCxDQUFDO0lBaUJELDJDQUFTLEdBQVQsVUFBVSxRQUF3QjtRQUFsQyxpQkFRQztRQVBDLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sUUFBUSxFQUFFLENBQUM7UUFDcEIsQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsT0FBTztZQUNMLEtBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNILDhCQUFDO0FBQUQsQ0FBQyxBQTlERCxDQUVVLFNBQVMsR0E0RGxCOztBQUVELE1BQU0sQ0FBQyxJQUFNLGVBQWUsR0FBRztJQUM3QixJQUFJLEVBQUUsbUJBQW1CO0lBQ3pCLE1BQU0sRUFBRSx1QkFBdUI7Q0FDaEMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtcbiAgVHJhbnNwb3J0T3B0aW9ucyxcbiAgVHJhbnNmZXJhYmxlV29ya2VyLFxuICBMaXN0ZW5lck9wdGlvbnMsXG4gIEJhc2VJbnRlcmFjdGlvbixcbn0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4uL3RyYW5zcG9ydCc7XG5cbi8vIGZvbGxvdyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yMDU5NVxuLy8gd29ya2Fyb3VuZDogYHRzYyAtLXNraXBMaWJDaGVja2AuXG5kZWNsYXJlIHZhciBzZWxmOiBXb3JrZXJHbG9iYWxTY29wZTtcblxudHlwZSBDbGllbnRDYWxsYmFjayA9ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuXG5jb25zdCBjb25uZWN0RXZlbnROYW1lID0gJ3dvcmtlci1jb25uZWN0JztcblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJNYWluVHJhbnNwb3J0T3B0aW9uc1xuICBleHRlbmRzIFBhcnRpYWw8VHJhbnNwb3J0T3B0aW9uczxUcmFuc2ZlcmFibGVXb3JrZXI+PiB7XG4gIC8qKlxuICAgKiBQYXNzIHdlYiB3b3JrZXIgdXNpbmcgZGF0YSB0cmFuc3BvcnQuXG4gICAqL1xuICB3b3JrZXI6IFdvcmtlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3JrZXJJbnRlcm5hbFRyYW5zcG9ydE9wdGlvbnNcbiAgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zcG9ydE9wdGlvbnM8VHJhbnNmZXJhYmxlV29ya2VyPj4ge31cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFdvcmtlck1haW5UcmFuc3BvcnQ8XG4gIFQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb24gPSBhbnlcbj4gZXh0ZW5kcyBUcmFuc3BvcnQ8VD4ge1xuICBjb25zdHJ1Y3Rvcihfb3B0aW9uczogV29ya2VyTWFpblRyYW5zcG9ydE9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICB3b3JrZXIsXG4gICAgICBsaXN0ZW5lciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9OiBNZXNzYWdlRXZlbnQ8TGlzdGVuZXJPcHRpb25zPFRyYW5zZmVyYWJsZVdvcmtlcj4+KSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH07XG4gICAgICAgIHdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgd29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICBzZW5kZXIgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IG1lc3NhZ2UudHJhbnNmZXIgPz8gW107XG4gICAgICAgIGRlbGV0ZSBtZXNzYWdlLnRyYW5zZmVyO1xuICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXIpO1xuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0gX29wdGlvbnM7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGxpc3RlbmVyLFxuICAgICAgc2VuZGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5hbWU6IGNvbm5lY3RFdmVudE5hbWUsXG4gICAgICByZXNwb25kOiB0cnVlLFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgIH0pLnRoZW4odGhpcy5faGFuZGxlQ29ubmVjdENhbGxiYWNrcyk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5saXN0ZW4oY29ubmVjdEV2ZW50TmFtZSwgdGhpcy5faGFuZGxlQ29ubmVjdENhbGxiYWNrcyk7XG4gIH1cblxuICBwcml2YXRlIF9jb25uZWN0ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9oYW5kbGVDb25uZWN0Q2FsbGJhY2tzID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY29ubmVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5jbGVhcigpO1xuICB9O1xuXG4gIHByaXZhdGUgX29uQ29ubmVjdENhbGxiYWNrID0gbmV3IFNldDxDbGllbnRDYWxsYmFjaz4oKTtcblxuICBvbkNvbm5lY3QoY2FsbGJhY2s6IENsaWVudENhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmFkZChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgV29ya2VySW50ZXJuYWxUcmFuc3BvcnQ8XG4gIFQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb24gPSBhbnlcbj4gZXh0ZW5kcyBUcmFuc3BvcnQ8VD4ge1xuICBjb25zdHJ1Y3Rvcihfb3B0aW9uczogV29ya2VySW50ZXJuYWxUcmFuc3BvcnRPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICBsaXN0ZW5lciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKCh7IGRhdGEgfTogTWVzc2FnZUV2ZW50PGFueT4pID0+IHtcbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfSkgYXMgRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdDtcbiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2VuZGVyID0gKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXIgPSBtZXNzYWdlLnRyYW5zZmVyID8/IFtdO1xuICAgICAgICBkZWxldGUgbWVzc2FnZS50cmFuc2ZlcjtcbiAgICAgICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgdHJhbnNmZXIpO1xuICAgICAgfSxcbiAgICAgIC4uLm9wdGlvbnNcbiAgICB9ID0gX29wdGlvbnM7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGxpc3RlbmVyLFxuICAgICAgc2VuZGVyLFxuICAgIH0pO1xuXG4gICAgdGhpcy5lbWl0KHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIG5hbWU6IGNvbm5lY3RFdmVudE5hbWUsXG4gICAgICByZXNwb25kOiB0cnVlLFxuICAgICAgc2lsZW50OiB0cnVlLFxuICAgIH0pLnRoZW4odGhpcy5faGFuZGxlQ29ubmVjdENhbGxiYWNrcyk7XG5cbiAgICAvLyBAdHMtaWdub3JlXG4gICAgdGhpcy5saXN0ZW4oY29ubmVjdEV2ZW50TmFtZSwgdGhpcy5faGFuZGxlQ29ubmVjdENhbGxiYWNrcyk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDb25uZWN0Q2FsbGJhY2tzID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICh0aGlzLl9jb25uZWN0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY29ubmVjdGVkID0gdHJ1ZTtcbiAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgICB0aGlzLl9vbkNvbm5lY3RDYWxsYmFjay5jbGVhcigpO1xuICB9O1xuXG4gIHByaXZhdGUgX2Nvbm5lY3RlZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX29uQ29ubmVjdENhbGxiYWNrID0gbmV3IFNldDxDbGllbnRDYWxsYmFjaz4oKTtcblxuICBvbkNvbm5lY3QoY2FsbGJhY2s6IENsaWVudENhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuX2Nvbm5lY3RlZCkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmFkZChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuX29uQ29ubmVjdENhbGxiYWNrLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgV29ya2VyVHJhbnNwb3J0ID0ge1xuICBNYWluOiBXb3JrZXJNYWluVHJhbnNwb3J0LFxuICBXb3JrZXI6IFdvcmtlckludGVybmFsVHJhbnNwb3J0LFxufTtcbiJdfQ==