@orpc/client
Version:
<div align="center"> <image align="center" src="https://orpc.unnoq.com/logo.webp" width=280 alt="oRPC logo" /> </div>
72 lines (67 loc) • 2.09 kB
JavaScript
import { ClientPeer } from '@orpc/standard-server-peer';
import '@orpc/shared';
import { c as StandardRPCLink } from '../../shared/client.DKmRtVO2.mjs';
import '@orpc/standard-server';
import '../../shared/client.txdq_i5V.mjs';
function postMessagePortMessage(port, data) {
port.postMessage(data);
}
function onMessagePortMessage(port, callback) {
if ("addEventListener" in port) {
port.addEventListener("message", (event) => {
callback(event.data);
});
} else if ("on" in port) {
port.on("message", (event) => {
callback(event?.data);
});
} else if ("onMessage" in port) {
port.onMessage.addListener((data) => {
callback(data);
});
} else {
throw new Error("Cannot find a addEventListener/on/onMessage method on the port");
}
}
function onMessagePortClose(port, callback) {
if ("addEventListener" in port) {
port.addEventListener("close", async () => {
callback();
});
} else if ("on" in port) {
port.on("close", async () => {
callback();
});
} else if ("onDisconnect" in port) {
port.onDisconnect.addListener(() => {
callback();
});
} else {
throw new Error("Cannot find a addEventListener/on/onDisconnect method on the port");
}
}
class LinkMessagePortClient {
peer;
constructor(options) {
this.peer = new ClientPeer((message) => {
return postMessagePortMessage(options.port, message);
});
onMessagePortMessage(options.port, async (message) => {
await this.peer.message(message);
});
onMessagePortClose(options.port, () => {
this.peer.close();
});
}
async call(request, _options, _path, _input) {
const response = await this.peer.request(request);
return { ...response, body: () => Promise.resolve(response.body) };
}
}
class RPCLink extends StandardRPCLink {
constructor(options) {
const linkClient = new LinkMessagePortClient(options);
super(linkClient, { ...options, url: "orpc:/" });
}
}
export { LinkMessagePortClient, RPCLink, onMessagePortClose, onMessagePortMessage, postMessagePortMessage };