trpc-browser
Version:
tRPC adapters and links for everywhere in the browser
39 lines • 1.38 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.relay = void 0;
// can relay messages between two links
const trpcMessage_1 = require("../shared/trpcMessage");
function relay(window, port, windowPostOrigin) {
function relayToWindow(message) {
if (message.relayed)
return;
const relayedMessage = Object.assign(Object.assign({}, message), { relayed: true });
window.postMessage(relayedMessage, {
targetOrigin: windowPostOrigin,
});
}
function relayToPort(message) {
if (message.relayed)
return;
const relayedMessage = Object.assign(Object.assign({}, message), { relayed: true });
port.postMessage(relayedMessage);
}
const onWindowMessage = (event) => {
if (!(0, trpcMessage_1.isTRPCMessage)(event.data))
return;
relayToPort(event.data);
};
const onPortMessage = (message) => {
if (!(0, trpcMessage_1.isTRPCMessage)(message))
return;
relayToWindow(message);
};
window.addEventListener('message', onWindowMessage);
port.onMessage.addListener(onPortMessage);
return () => {
window.removeEventListener('message', onWindowMessage);
port.onMessage.removeListener(onPortMessage);
};
}
exports.relay = relay;
//# sourceMappingURL=index.js.map
;