data-transport
Version:
A simple and responsive transport
128 lines • 15.4 kB
JavaScript
;
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