@orpc/server
Version:
<div align="center"> <image align="center" src="https://orpc.dev/logo.webp" width=280 alt="oRPC logo" /> </div>
58 lines (54 loc) • 2.87 kB
text/typescript
import { SupportedMessagePort } from '@orpc/client/message-port';
import { Value, Promisable, MaybeOptionalOptions } from '@orpc/shared';
import { DecodedResponseMessage } from '@orpc/standard-server-peer';
import { C as Context, R as Router } from '../../shared/server.qKsRrdxW.mjs';
import { f as StandardHandler } from '../../shared/server.BqadksTP.mjs';
import { HandleStandardServerPeerMessageOptions } from '../standard-peer/index.mjs';
import { S as StandardRPCHandlerOptions } from '../../shared/server.ChUyt5-i.mjs';
import '@orpc/client';
import '@orpc/contract';
import '@orpc/standard-server';
import '../../shared/server.B8gYOD5g.mjs';
import '@orpc/client/standard';
import '../../shared/server.C8_sRzQB.mjs';
interface MessagePortHandlerOptions<_T extends Context> {
/**
* By default, oRPC serializes request/response messages to string/binary data before sending over message port.
* If needed, you can define the this option to utilize full power of [MessagePort: postMessage() method](https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage),
* such as transferring ownership of objects to the other side or support unserializable objects like `OffscreenCanvas`.
*
* @remarks
* - return null | undefined to disable this feature
*
* @warning Make sure your message port supports `transfer` before using this feature.
* @example
* ```ts
* experimental_transfer: (message, port) => {
* const transfer = deepFindTransferableObjects(message) // implement your own logic
* return transfer.length ? transfer : null // only enable when needed
* }
* ```
*
* @see {@link https://orpc.dev/docs/adapters/message-port#transfer Message Port Transfer Docs}
*/
experimental_transfer?: Value<Promisable<object[] | null | undefined>, [message: DecodedResponseMessage, port: SupportedMessagePort]>;
}
declare class MessagePortHandler<T extends Context> {
private readonly standardHandler;
private readonly transfer;
constructor(standardHandler: StandardHandler<T>, options?: NoInfer<MessagePortHandlerOptions<T>>);
upgrade(port: SupportedMessagePort, ...rest: MaybeOptionalOptions<HandleStandardServerPeerMessageOptions<T>>): void;
}
interface RPCHandlerOptions<T extends Context> extends StandardRPCHandlerOptions<T>, MessagePortHandlerOptions<T> {
}
/**
* RPC Handler for common message port implementations.
*
* @see {@link https://orpc.dev/docs/rpc-handler RPC Handler Docs}
* @see {@link https://orpc.dev/docs/adapters/message-port Message Port Adapter Docs}
*/
declare class RPCHandler<T extends Context> extends MessagePortHandler<T> {
constructor(router: Router<any, T>, options?: NoInfer<RPCHandlerOptions<T>>);
}
export { MessagePortHandler, RPCHandler };
export type { MessagePortHandlerOptions, RPCHandlerOptions };