UNPKG

trpc-chrome

Version:
76 lines 3.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.chromeLink = void 0; const client_1 = require("@trpc/client"); const observable_1 = require("@trpc/server/observable"); const chromeLink = (opts) => { return (runtime) => { const { port } = opts; return ({ op }) => { return (0, observable_1.observable)((observer) => { const listeners = []; const { id, type, path } = op; try { const input = runtime.transformer.serialize(op.input); const onDisconnect = () => { observer.error(new client_1.TRPCClientError('Port disconnected prematurely')); }; port.onDisconnect.addListener(onDisconnect); listeners.push(() => port.onDisconnect.removeListener(onDisconnect)); const onMessage = (message) => { if (!('trpc' in message)) return; const { trpc } = message; if (!trpc) return; if (!('id' in trpc) || trpc.id === null || trpc.id === undefined) return; if (id !== trpc.id) return; if ('error' in trpc) { const error = runtime.transformer.deserialize(trpc.error); observer.error(client_1.TRPCClientError.from(Object.assign(Object.assign({}, trpc), { error }))); return; } observer.next({ result: Object.assign(Object.assign({}, trpc.result), ((!trpc.result.type || trpc.result.type === 'data') && { type: 'data', data: runtime.transformer.deserialize(trpc.result.data), })), }); if (type !== 'subscription' || trpc.result.type === 'stopped') { observer.complete(); } }; port.onMessage.addListener(onMessage); listeners.push(() => port.onMessage.removeListener(onMessage)); port.postMessage({ trpc: { id, jsonrpc: undefined, method: type, params: { path, input }, }, }); } catch (cause) { observer.error(new client_1.TRPCClientError(cause instanceof Error ? cause.message : 'Unknown error')); } return () => { listeners.forEach((unsub) => unsub()); if (type === 'subscription') { port.postMessage({ trpc: { id, jsonrpc: undefined, method: 'subscription.stop', }, }); } }; }); }; }; }; exports.chromeLink = chromeLink; //# sourceMappingURL=index.js.map