trpc-browser
Version:
tRPC adapters and links for everywhere in the browser
46 lines • 1.58 kB
JavaScript
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
;