UNPKG

data-transport

Version:
110 lines 15.6 kB
import { __assign, __awaiter, __extends, __generator, __rest } from "tslib"; import { Transport } from '../transport'; import { detectSafari } from '../utils'; var DEFAULT_USE_ON_SAFARI = true; var decode = function (data, useOnSafari) { try { return useOnSafari && detectSafari() ? JSON.stringify(data) : data; } catch (e) { console.error("Failed to stringify:", data); throw e; } }; var encode = function (data, useOnSafari) { try { return typeof data === 'string' && useOnSafari && detectSafari() ? JSON.parse(data) : data; } catch (e) { console.error("Failed to parse:", data); } return data; }; var ServiceWorkerClientTransport = /** @class */ (function (_super) { __extends(ServiceWorkerClientTransport, _super); function ServiceWorkerClientTransport(_options) { var worker = _options.worker, _a = _options.useOnSafari, useOnSafari = _a === void 0 ? DEFAULT_USE_ON_SAFARI : _a, _b = _options.listener, listener = _b === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data; callback(encode(data, useOnSafari)); }; navigator.serviceWorker.addEventListener('message', handler); return function () { navigator.serviceWorker.removeEventListener('message', handler); }; } : _b, _c = _options.sender, sender = _c === void 0 ? function (message) { var _a; var transfer = (_a = message.transfer) !== null && _a !== void 0 ? _a : []; delete message.transfer; worker.postMessage(message, transfer); } : _c, options = __rest(_options, ["worker", "useOnSafari", "listener", "sender"]); return _super.call(this, __assign(__assign({}, options), { listener: listener, sender: sender })) || this; } return ServiceWorkerClientTransport; }(Transport)); export { ServiceWorkerClientTransport }; var ServiceWorkerServiceTransport = /** @class */ (function (_super) { __extends(ServiceWorkerServiceTransport, _super); function ServiceWorkerServiceTransport(_options) { if (_options === void 0) { _options = {}; } var _this = this; var _a = _options.useOnSafari, useOnSafari = _a === void 0 ? DEFAULT_USE_ON_SAFARI : _a, _b = _options.listener, listener = _b === void 0 ? function (callback) { var handler = function (_a) { var data = _a.data, source = _a.source; data._clientId = source.id; callback(data); }; self.addEventListener('message', handler); return function () { return self.removeEventListener('message', handler); }; } : _b, _c = _options.sender, sender = _c === void 0 ? function (message) { return __awaiter(_this, void 0, void 0, function () { var transfer, data, client_1, client; var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: transfer = message.transfer || []; delete message.transfer; data = decode(message, useOnSafari); if (!message._clientId) return [3 /*break*/, 2]; return [4 /*yield*/, self.clients.get(message._clientId)]; case 1: client_1 = _b.sent(); if (!client_1) { console.warn("The client \"".concat(message._clientId, "\" is closed.")); return [2 /*return*/]; } delete message._clientId; client_1.postMessage(data, transfer); return [2 /*return*/]; case 2: client = (_a = message._extra) === null || _a === void 0 ? void 0 : _a._client; if (client) { delete message._extra._client; client.postMessage(data, transfer); return [2 /*return*/]; } self.clients .matchAll() .then(function (all) { return all.map(function (client) { return client.postMessage(data, transfer); }); }); return [2 /*return*/]; } }); }); } : _c, options = __rest(_options, ["useOnSafari", "listener", "sender"]); _this = _super.call(this, __assign(__assign({}, options), { listener: listener, sender: sender })) || this; self.addEventListener('activate', function (event) { event.waitUntil(self.clients.claim()); }); return _this; } return ServiceWorkerServiceTransport; }(Transport)); export { ServiceWorkerServiceTransport }; export var ServiceWorkerTransport = { Client: ServiceWorkerClientTransport, Service: ServiceWorkerServiceTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZVdvcmtlclRyYW5zcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnRzL3NlcnZpY2VXb3JrZXJUcmFuc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQU1BLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQThCeEMsSUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUM7QUFFbkMsSUFBTSxNQUFNLEdBQUcsVUFBQyxJQUFTLEVBQUUsV0FBb0I7SUFDN0MsSUFBSSxDQUFDO1FBQ0gsT0FBTyxXQUFXLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsSUFBTSxNQUFNLEdBQUcsVUFBQyxJQUFTLEVBQUUsV0FBb0I7SUFDN0MsSUFBSSxDQUFDO1FBQ0gsT0FBTyxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksV0FBVyxJQUFJLFlBQVksRUFBRTtZQUM5RCxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFXLENBQUM7WUFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNYLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFRjtJQUVVLGdEQUFZO0lBQ3BCLHNDQUFZ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QUdILE1BQU0sR0FBRyxNQUFBLE9BQU8sQ0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQzt3QkFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFPLENBQUMsT0FBTyxDQUFDOzRCQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDbkMsc0JBQU87d0JBQ1QsQ0FBQzt3QkFDRCxJQUFJLENBQUMsT0FBTzs2QkFDVCxRQUFRLEVBQUU7NkJBQ1YsSUFBSSxDQUFDLFVBQUMsR0FBRzs0QkFDUixPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLElBQUssT0FBQSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBbEMsQ0FBa0MsQ0FBQzt3QkFBdkQsQ0FBdUQsQ0FDeEQsQ0FBQzs7OzthQUNMLEtBQUEsRUFDRSxPQUFPLFVBQ1IsUUFBUSxFQXRDTixxQ0FzQ0wsQ0FEVyxDQUNDO1FBQ2IsUUFBQSxNQUFLLGtDQUNBLE9BQU8sS0FDVixRQUFRLFVBQUEsRUFDUixNQUFNLFFBQUEsSUFDTixTQUFDO1FBQ0gsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxVQUFDLEtBQUs7WUFDdEMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7O0lBQ0wsQ0FBQztJQUNILG9DQUFDO0FBQUQsQ0FBQyxBQXBERCxDQUVVLFNBQVMsR0FrRGxCOztBQUVELE1BQU0sQ0FBQyxJQUFNLHNCQUFzQixHQUFHO0lBQ3BDLE1BQU0sRUFBRSw0QkFBNEI7SUFDcEMsT0FBTyxFQUFFLDZCQUE2QjtDQUN2QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgVHJhbnNwb3J0T3B0aW9ucyxcbiAgVHJhbnNmZXJhYmxlV29ya2VyLFxuICBMaXN0ZW5lck9wdGlvbnMsXG4gIEJhc2VJbnRlcmFjdGlvbixcbn0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IFRyYW5zcG9ydCB9IGZyb20gJy4uL3RyYW5zcG9ydCc7XG5pbXBvcnQgeyBkZXRlY3RTYWZhcmkgfSBmcm9tICcuLi91dGlscyc7XG5cbi8vIGZvbGxvdyBpc3N1ZTogaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yMDU5NVxuLy8gd29ya2Fyb3VuZDogYHRzYyAtLXNraXBMaWJDaGVja2AuXG5kZWNsYXJlIHZhciBzZWxmOiBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU7XG5cbmludGVyZmFjZSBTZXJ2aWNlV29ya2VyQ2xpZW50SWQgZXh0ZW5kcyBUcmFuc2ZlcmFibGVXb3JrZXIge1xuICBfY2xpZW50SWQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVdvcmtlckNsaWVudFRyYW5zcG9ydE9wdGlvbnNcbiAgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zcG9ydE9wdGlvbnM8VHJhbnNmZXJhYmxlV29ya2VyPj4ge1xuICAvKipcbiAgICogQSBzZXJ2aWNlIHdvcmtlciBpbnN0YW5jZSBmb3IgZGF0YSB0cmFuc3BvcnQuXG4gICAqL1xuICB3b3JrZXI6IFNlcnZpY2VXb3JrZXI7XG4gIC8qKlxuICAgKiBDb21wYXRpYmlsaXR5IHdpdGggdW5zdGFibGUgc2VyaWFsaXphdGlvbiBpbiBTYWZhcmlcbiAgICovXG4gIHVzZU9uU2FmYXJpPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXJ2aWNlV29ya2VyU2VydmljZVRyYW5zcG9ydE9wdGlvbnNcbiAgZXh0ZW5kcyBQYXJ0aWFsPFRyYW5zcG9ydE9wdGlvbnM8U2VydmljZVdvcmtlckNsaWVudElkPj4ge1xuICAvKipcbiAgICogQ29tcGF0aWJpbGl0eSB3aXRoIHVuc3RhYmxlIHNlcmlhbGl6YXRpb24gaW4gU2FmYXJpXG4gICAqL1xuICB1c2VPblNhZmFyaT86IGJvb2xlYW47XG59XG5cbmNvbnN0IERFRkFVTFRfVVNFX09OX1NBRkFSSSA9IHRydWU7XG5cbmNvbnN0IGRlY29kZSA9IChkYXRhOiBhbnksIHVzZU9uU2FmYXJpOiBib29sZWFuKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHVzZU9uU2FmYXJpICYmIGRldGVjdFNhZmFyaSgpID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiBkYXRhO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHN0cmluZ2lmeTpgLCBkYXRhKTtcbiAgICB0aHJvdyBlO1xuICB9XG59O1xuXG5jb25zdCBlbmNvZGUgPSAoZGF0YTogYW55LCB1c2VPblNhZmFyaTogYm9vbGVhbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycgJiYgdXNlT25TYWZhcmkgJiYgZGV0ZWN0U2FmYXJpKClcbiAgICAgID8gSlNPTi5wYXJzZShkYXRhIGFzIGFueSlcbiAgICAgIDogZGF0YTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZTpgLCBkYXRhKTtcbiAgfVxuICByZXR1cm4gZGF0YTtcbn07XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTZXJ2aWNlV29ya2VyQ2xpZW50VHJhbnNwb3J0PFxuICBUIGV4dGVuZHMgQmFzZUludGVyYWN0aW9uID0gYW55XG4+IGV4dGVuZHMgVHJhbnNwb3J0PFQ+IHtcbiAgY29uc3RydWN0b3IoX29wdGlvbnM6IFNlcnZpY2VXb3JrZXJDbGllbnRUcmFuc3BvcnRPcHRpb25zKSB7XG4gICAgY29uc3Qge1xuICAgICAgd29ya2VyLFxuICAgICAgdXNlT25TYWZhcmkgPSBERUZBVUxUX1VTRV9PTl9TQUZBUkksXG4gICAgICBsaXN0ZW5lciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKHtcbiAgICAgICAgICBkYXRhLFxuICAgICAgICB9OiBNZXNzYWdlRXZlbnQ8TGlzdGVuZXJPcHRpb25zPFRyYW5zZmVyYWJsZVdvcmtlcj4+KSA9PiB7XG4gICAgICAgICAgY2FsbGJhY2soZW5jb2RlKGRhdGEsIHVzZU9uU2FmYXJpKSk7XG4gICAgICAgIH07XG4gICAgICAgIG5hdmlnYXRvci5zZXJ2aWNlV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgc2VuZGVyID0gKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXIgPSBtZXNzYWdlLnRyYW5zZmVyID8/IFtdO1xuICAgICAgICBkZWxldGUgbWVzc2FnZS50cmFuc2ZlcjtcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKG1lc3NhZ2UsIHRyYW5zZmVyKTtcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IF9vcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHNlbmRlcixcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VydmljZVdvcmtlclNlcnZpY2VUcmFuc3BvcnQ8XG4gIFQgZXh0ZW5kcyBCYXNlSW50ZXJhY3Rpb24gPSBhbnlcbj4gZXh0ZW5kcyBUcmFuc3BvcnQ8VD4ge1xuICBjb25zdHJ1Y3Rvcihfb3B0aW9uczogU2VydmljZVdvcmtlclNlcnZpY2VUcmFuc3BvcnRPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCB7XG4gICAgICB1c2VPblNhZmFyaSA9IERFRkFVTFRfVVNFX09OX1NBRkFSSSxcbiAgICAgIGxpc3RlbmVyID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoeyBkYXRhLCBzb3VyY2UgfTogRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudCkgPT4ge1xuICAgICAgICAgIGRhdGEuX2NsaWVudElkID0gKHNvdXJjZSBhcyBDbGllbnQpLmlkIGFzIHN0cmluZztcbiAgICAgICAgICBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgfTtcbiAgICAgICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiBzZWxmLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBoYW5kbGVyKTtcbiAgICAgIH0sXG4gICAgICBzZW5kZXIgPSBhc3luYyAobWVzc2FnZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2ZlciA9IG1lc3NhZ2UudHJhbnNmZXIgfHwgW107XG4gICAgICAgIGRlbGV0ZSBtZXNzYWdlLnRyYW5zZmVyO1xuICAgICAgICBjb25zdCBkYXRhID0gZGVjb2RlKG1lc3NhZ2UsIHVzZU9uU2FmYXJpKTtcbiAgICAgICAgaWYgKG1lc3NhZ2UuX2NsaWVudElkKSB7XG4gICAgICAgICAgY29uc3QgY2xpZW50ID0gYXdhaXQgc2VsZi5jbGllbnRzLmdldChtZXNzYWdlLl9jbGllbnRJZCk7XG4gICAgICAgICAgaWYgKCFjbGllbnQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIGNsaWVudCBcIiR7bWVzc2FnZS5fY2xpZW50SWR9XCIgaXMgY2xvc2VkLmApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgbWVzc2FnZS5fY2xpZW50SWQ7XG4gICAgICAgICAgY2xpZW50LnBvc3RNZXNzYWdlKGRhdGEsIHRyYW5zZmVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjbGllbnQgPSBtZXNzYWdlLl9leHRyYT8uX2NsaWVudDtcbiAgICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICAgIGRlbGV0ZSBtZXNzYWdlLl9leHRyYSEuX2NsaWVudDtcbiAgICAgICAgICBjbGllbnQucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmNsaWVudHNcbiAgICAgICAgICAubWF0Y2hBbGwoKVxuICAgICAgICAgIC50aGVuKChhbGwpID0+XG4gICAgICAgICAgICBhbGwubWFwKChjbGllbnQpID0+IGNsaWVudC5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2ZlcikpXG4gICAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IF9vcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBsaXN0ZW5lcixcbiAgICAgIHNlbmRlcixcbiAgICB9KTtcbiAgICBzZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ2FjdGl2YXRlJywgKGV2ZW50KSA9PiB7XG4gICAgICBldmVudC53YWl0VW50aWwoc2VsZi5jbGllbnRzLmNsYWltKCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBTZXJ2aWNlV29ya2VyVHJhbnNwb3J0ID0ge1xuICBDbGllbnQ6IFNlcnZpY2VXb3JrZXJDbGllbnRUcmFuc3BvcnQsXG4gIFNlcnZpY2U6IFNlcnZpY2VXb3JrZXJTZXJ2aWNlVHJhbnNwb3J0LFxufTtcbiJdfQ==