UNPKG

trpc-browser

Version:

tRPC adapters and links for everywhere in the browser

46 lines 1.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.windowLink = void 0; const base_1 = require("./internal/base"); const windowLink = (opts) => { var _a; const handlerMap = new Map(); const listenWindow = opts.window; const postWindow = (_a = opts.postWindow) !== null && _a !== void 0 ? _a : listenWindow; const safeEventListener = (action, event, handler) => { try { listenWindow[`${action}EventListener`](event, handler); } catch (err) { console.error(`Failed to ${action} ${event} listener:`, err); } }; return (0, base_1.createBaseLink)({ postMessage(message) { postWindow.postMessage(message, { targetOrigin: opts.postOrigin, }); }, addMessageListener(listener) { const handler = (ev) => { listener(ev.data); }; handlerMap.set(listener, handler); safeEventListener('add', 'message', handler); }, removeMessageListener(listener) { const handler = handlerMap.get(listener); if (handler) { safeEventListener('remove', 'message', handler); } }, addCloseListener(listener) { safeEventListener('add', 'beforeunload', listener); }, removeCloseListener(listener) { safeEventListener('remove', 'beforeunload', listener); }, }); }; exports.windowLink = windowLink; //# sourceMappingURL=window.js.map