data-transport
Version:
A simple and responsive transport
125 lines • 15.1 kB
JavaScript
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==