UNPKG

@orpc/server

Version:

<div align="center"> <image align="center" src="https://orpc.dev/logo.webp" width=280 alt="oRPC logo" /> </div>

56 lines (52 loc) 2.06 kB
import { postMessagePortMessage, onMessagePortMessage, onMessagePortClose } from '@orpc/client/message-port'; import { value, resolveMaybeOptionalOptions, isObject } from '@orpc/shared'; import { experimental_ServerPeerWithoutCodec, serializeResponseMessage, encodeResponseMessage, deserializeRequestMessage, decodeRequestMessage } from '@orpc/standard-server-peer'; import { c as createServerPeerHandleRequestFn } from '../../shared/server.UVMTOWrk.mjs'; import '@orpc/client'; import '@orpc/standard-server'; import '@orpc/contract'; import { b as StandardRPCHandler } from '../../shared/server.Bxx6tqNe.mjs'; import '@orpc/client/standard'; import '../../shared/server.DZ5BIITo.mjs'; import '../../shared/server.Ds4HPpvH.mjs'; class MessagePortHandler { constructor(standardHandler, options = {}) { this.standardHandler = standardHandler; this.transfer = options.experimental_transfer; } transfer; upgrade(port, ...rest) { const peer = new experimental_ServerPeerWithoutCodec(async (message) => { const [id, type, payload] = message; const transfer = await value(this.transfer, message, port); if (transfer) { postMessagePortMessage(port, serializeResponseMessage(id, type, payload), transfer); } else { postMessagePortMessage(port, await encodeResponseMessage(id, type, payload)); } }); onMessagePortMessage(port, async (message) => { const handleFn = createServerPeerHandleRequestFn(this.standardHandler, resolveMaybeOptionalOptions(rest)); if (isObject(message)) { await peer.message( deserializeRequestMessage(message), handleFn ); } else { await peer.message( await decodeRequestMessage(message), handleFn ); } }); onMessagePortClose(port, () => { peer.close(); }); } } class RPCHandler extends MessagePortHandler { constructor(router, options = {}) { super(new StandardRPCHandler(router, options), options); } } export { MessagePortHandler, RPCHandler };