UNPKG

data-transport

Version:
113 lines 15.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ServiceWorkerTransport = exports.ServiceWorkerServiceTransport = exports.ServiceWorkerClientTransport = void 0; var tslib_1 = require("tslib"); var transport_1 = require("../transport"); var utils_1 = require("../utils"); var DEFAULT_USE_ON_SAFARI = true; var decode = function (data, useOnSafari) { try { return useOnSafari && (0, utils_1.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 && (0, utils_1.detectSafari)() ? JSON.parse(data) : data; } catch (e) { console.error("Failed to parse:", data); } return data; }; var ServiceWorkerClientTransport = /** @class */ (function (_super) { tslib_1.__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 = tslib_1.__rest(_options, ["worker", "useOnSafari", "listener", "sender"]); return _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; } return ServiceWorkerClientTransport; }(transport_1.Transport)); exports.ServiceWorkerClientTransport = ServiceWorkerClientTransport; var ServiceWorkerServiceTransport = /** @class */ (function (_super) { tslib_1.__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 tslib_1.__awaiter(_this, void 0, void 0, function () { var transfer, data, client_1, client; var _a; return tslib_1.__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 = tslib_1.__rest(_options, ["useOnSafari", "listener", "sender"]); _this = _super.call(this, tslib_1.__assign(tslib_1.__assign({}, options), { listener: listener, sender: sender })) || this; self.addEventListener('activate', function (event) { event.waitUntil(self.clients.claim()); }); return _this; } return ServiceWorkerServiceTransport; }(transport_1.Transport)); exports.ServiceWorkerServiceTransport = ServiceWorkerServiceTransport; exports.ServiceWorkerTransport = { Client: ServiceWorkerClientTransport, Service: ServiceWorkerServiceTransport, }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZVdvcmtlclRyYW5zcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnRzL3NlcnZpY2VXb3JrZXJUcmFuc3BvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQU1BLDBDQUF5QztBQUN6QyxrQ0FBd0M7QUE4QnhDLElBQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDO0FBRW5DLElBQU0sTUFBTSxHQUFHLFVBQUMsSUFBUyxFQUFFLFdBQW9CO0lBQzdDLElBQUksQ0FBQztRQUNILE9BQU8sV0FBVyxJQUFJLElBQUEsb0JBQVksR0FBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDckUsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztBQUNILENBQUMsQ0FBQztBQUVGLElBQU0sTUFBTSxHQUFHLFVBQUMsSUFBUyxFQUFFLFdBQW9CO0lBQzdDLElBQUksQ0FBQztRQUNILE9BQU8sT0FBTyxJQUFJLEtBQUssUUFBUSxJQUFJLFdBQVcsSUFBSSxJQUFBLG9CQUFZLEdBQUU7WUFDOUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBVyxDQUFDO1lBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDWCxDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLE9BQU8sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBRUY7SUFFVSx3REFBWTtJQUNwQixzQ0FBWSxRQUE2QztRQUVyRCxJQUFBLE1BQU0sR0FtQkosUUFBUSxPQW5CSixF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Q0FBQyxNQUFNLDBDQUFFLE9BQU8sQ0FBQzt3QkFDdkMsSUFBSSxNQUFNLEVBQUUsQ0FBQzs0QkFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFPLENBQUMsT0FBTyxDQUFDOzRCQUMvQixNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQzs0QkFDbkMsc0JBQU87d0JBQ1QsQ0FBQzt3QkFDRCxJQUFJLENBQUMsT0FBTzs2QkFDVCxRQUFRLEVBQUU7NkJBQ1YsSUFBSSxDQUFDLFVBQUMsR0FBRzs0QkFDUixPQUFBLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLElBQUssT0FBQSxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBbEMsQ0FBa0MsQ0FBQzt3QkFBdkQsQ0FBdUQsQ0FDeEQsQ0FBQzs7OzthQUNMLEtBQUEsRUFDRSxPQUFPLGtCQUNSLFFBQVEsRUF0Q04scUNBc0NMLENBRFcsQ0FDQztRQUNiLFFBQUEsTUFBSyxrREFDQSxPQUFPLEtBQ1YsUUFBUSxVQUFBLEVBQ1IsTUFBTSxRQUFBLElBQ04sU0FBQztRQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsVUFBQyxLQUFLO1lBQ3RDLEtBQUssQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDOztJQUNMLENBQUM7SUFDSCxvQ0FBQztBQUFELENBQUMsQUFwREQsQ0FFVSxxQkFBUyxHQWtEbEI7QUFwRHFCLHNFQUE2QjtBQXNEdEMsUUFBQSxzQkFBc0IsR0FBRztJQUNwQyxNQUFNLEVBQUUsNEJBQTRCO0lBQ3BDLE9BQU8sRUFBRSw2QkFBNkI7Q0FDdkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFRyYW5zcG9ydE9wdGlvbnMsXG4gIFRyYW5zZmVyYWJsZVdvcmtlcixcbiAgTGlzdGVuZXJPcHRpb25zLFxuICBCYXNlSW50ZXJhY3Rpb24sXG59IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBUcmFuc3BvcnQgfSBmcm9tICcuLi90cmFuc3BvcnQnO1xuaW1wb3J0IHsgZGV0ZWN0U2FmYXJpIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG4vLyBmb2xsb3cgaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjA1OTVcbi8vIHdvcmthcm91bmQ6IGB0c2MgLS1za2lwTGliQ2hlY2tgLlxuZGVjbGFyZSB2YXIgc2VsZjogU2VydmljZVdvcmtlckdsb2JhbFNjb3BlO1xuXG5pbnRlcmZhY2UgU2VydmljZVdvcmtlckNsaWVudElkIGV4dGVuZHMgVHJhbnNmZXJhYmxlV29ya2VyIHtcbiAgX2NsaWVudElkPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcnZpY2VXb3JrZXJDbGllbnRUcmFuc3BvcnRPcHRpb25zXG4gIGV4dGVuZHMgUGFydGlhbDxUcmFuc3BvcnRPcHRpb25zPFRyYW5zZmVyYWJsZVdvcmtlcj4+IHtcbiAgLyoqXG4gICAqIEEgc2VydmljZSB3b3JrZXIgaW5zdGFuY2UgZm9yIGRhdGEgdHJhbnNwb3J0LlxuICAgKi9cbiAgd29ya2VyOiBTZXJ2aWNlV29ya2VyO1xuICAvKipcbiAgICogQ29tcGF0aWJpbGl0eSB3aXRoIHVuc3RhYmxlIHNlcmlhbGl6YXRpb24gaW4gU2FmYXJpXG4gICAqL1xuICB1c2VPblNhZmFyaT86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VydmljZVdvcmtlclNlcnZpY2VUcmFuc3BvcnRPcHRpb25zXG4gIGV4dGVuZHMgUGFydGlhbDxUcmFuc3BvcnRPcHRpb25zPFNlcnZpY2VXb3JrZXJDbGllbnRJZD4+IHtcbiAgLyoqXG4gICAqIENvbXBhdGliaWxpdHkgd2l0aCB1bnN0YWJsZSBzZXJpYWxpemF0aW9uIGluIFNhZmFyaVxuICAgKi9cbiAgdXNlT25TYWZhcmk/OiBib29sZWFuO1xufVxuXG5jb25zdCBERUZBVUxUX1VTRV9PTl9TQUZBUkkgPSB0cnVlO1xuXG5jb25zdCBkZWNvZGUgPSAoZGF0YTogYW55LCB1c2VPblNhZmFyaTogYm9vbGVhbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB1c2VPblNhZmFyaSAmJiBkZXRlY3RTYWZhcmkoKSA/IEpTT04uc3RyaW5naWZ5KGRhdGEpIDogZGF0YTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBzdHJpbmdpZnk6YCwgZGF0YSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcblxuY29uc3QgZW5jb2RlID0gKGRhdGE6IGFueSwgdXNlT25TYWZhcmk6IGJvb2xlYW4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnICYmIHVzZU9uU2FmYXJpICYmIGRldGVjdFNhZmFyaSgpXG4gICAgICA/IEpTT04ucGFyc2UoZGF0YSBhcyBhbnkpXG4gICAgICA6IGRhdGE7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gcGFyc2U6YCwgZGF0YSk7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59O1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2VydmljZVdvcmtlckNsaWVudFRyYW5zcG9ydDxcbiAgVCBleHRlbmRzIEJhc2VJbnRlcmFjdGlvbiA9IGFueVxuPiBleHRlbmRzIFRyYW5zcG9ydDxUPiB7XG4gIGNvbnN0cnVjdG9yKF9vcHRpb25zOiBTZXJ2aWNlV29ya2VyQ2xpZW50VHJhbnNwb3J0T3B0aW9ucykge1xuICAgIGNvbnN0IHtcbiAgICAgIHdvcmtlcixcbiAgICAgIHVzZU9uU2FmYXJpID0gREVGQVVMVF9VU0VfT05fU0FGQVJJLFxuICAgICAgbGlzdGVuZXIgPSAoY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9ICh7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfTogTWVzc2FnZUV2ZW50PExpc3RlbmVyT3B0aW9uczxUcmFuc2ZlcmFibGVXb3JrZXI+PikgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKGVuY29kZShkYXRhLCB1c2VPblNhZmFyaSkpO1xuICAgICAgICB9O1xuICAgICAgICBuYXZpZ2F0b3Iuc2VydmljZVdvcmtlci5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgbmF2aWdhdG9yLnNlcnZpY2VXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgfSxcbiAgICAgIHNlbmRlciA9IChtZXNzYWdlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zZmVyID0gbWVzc2FnZS50cmFuc2ZlciA/PyBbXTtcbiAgICAgICAgZGVsZXRlIG1lc3NhZ2UudHJhbnNmZXI7XG4gICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZShtZXNzYWdlLCB0cmFuc2Zlcik7XG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSBfb3B0aW9ucztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBzZW5kZXIsXG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNlcnZpY2VXb3JrZXJTZXJ2aWNlVHJhbnNwb3J0PFxuICBUIGV4dGVuZHMgQmFzZUludGVyYWN0aW9uID0gYW55XG4+IGV4dGVuZHMgVHJhbnNwb3J0PFQ+IHtcbiAgY29uc3RydWN0b3IoX29wdGlvbnM6IFNlcnZpY2VXb3JrZXJTZXJ2aWNlVHJhbnNwb3J0T3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgdXNlT25TYWZhcmkgPSBERUZBVUxUX1VTRV9PTl9TQUZBUkksXG4gICAgICBsaXN0ZW5lciA9IChjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gKHsgZGF0YSwgc291cmNlIH06IEV4dGVuZGFibGVNZXNzYWdlRXZlbnQpID0+IHtcbiAgICAgICAgICBkYXRhLl9jbGllbnRJZCA9IChzb3VyY2UgYXMgQ2xpZW50KS5pZCBhcyBzdHJpbmc7XG4gICAgICAgICAgY2FsbGJhY2soZGF0YSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gKCkgPT4gc2VsZi5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgaGFuZGxlcik7XG4gICAgICB9LFxuICAgICAgc2VuZGVyID0gYXN5bmMgKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmZXIgPSBtZXNzYWdlLnRyYW5zZmVyIHx8IFtdO1xuICAgICAgICBkZWxldGUgbWVzc2FnZS50cmFuc2ZlcjtcbiAgICAgICAgY29uc3QgZGF0YSA9IGRlY29kZShtZXNzYWdlLCB1c2VPblNhZmFyaSk7XG4gICAgICAgIGlmIChtZXNzYWdlLl9jbGllbnRJZCkge1xuICAgICAgICAgIGNvbnN0IGNsaWVudCA9IGF3YWl0IHNlbGYuY2xpZW50cy5nZXQobWVzc2FnZS5fY2xpZW50SWQpO1xuICAgICAgICAgIGlmICghY2xpZW50KSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFRoZSBjbGllbnQgXCIke21lc3NhZ2UuX2NsaWVudElkfVwiIGlzIGNsb3NlZC5gKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZGVsZXRlIG1lc3NhZ2UuX2NsaWVudElkO1xuICAgICAgICAgIGNsaWVudC5wb3N0TWVzc2FnZShkYXRhLCB0cmFuc2Zlcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gbWVzc2FnZS5fZXh0cmE/Ll9jbGllbnQ7XG4gICAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgICBkZWxldGUgbWVzc2FnZS5fZXh0cmEhLl9jbGllbnQ7XG4gICAgICAgICAgY2xpZW50LnBvc3RNZXNzYWdlKGRhdGEsIHRyYW5zZmVyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5jbGllbnRzXG4gICAgICAgICAgLm1hdGNoQWxsKClcbiAgICAgICAgICAudGhlbigoYWxsKSA9PlxuICAgICAgICAgICAgYWxsLm1hcCgoY2xpZW50KSA9PiBjbGllbnQucG9zdE1lc3NhZ2UoZGF0YSwgdHJhbnNmZXIpKVxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gPSBfb3B0aW9ucztcbiAgICBzdXBlcih7XG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbGlzdGVuZXIsXG4gICAgICBzZW5kZXIsXG4gICAgfSk7XG4gICAgc2VsZi5hZGRFdmVudExpc3RlbmVyKCdhY3RpdmF0ZScsIChldmVudCkgPT4ge1xuICAgICAgZXZlbnQud2FpdFVudGlsKHNlbGYuY2xpZW50cy5jbGFpbSgpKTtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgU2VydmljZVdvcmtlclRyYW5zcG9ydCA9IHtcbiAgQ2xpZW50OiBTZXJ2aWNlV29ya2VyQ2xpZW50VHJhbnNwb3J0LFxuICBTZXJ2aWNlOiBTZXJ2aWNlV29ya2VyU2VydmljZVRyYW5zcG9ydCxcbn07XG4iXX0=