trpc-bun-adapter
Version:
TRPC adapter for bun js runtime
48 lines (43 loc) • 2.96 kB
text/typescript
import { AnyRouter, inferRouterContext } from '@trpc/server';
import { FetchCreateContextFnOptions, FetchHandlerRequestOptions } from '@trpc/server/adapters/fetch';
import { Server, ServerWebSocket, WebSocketHandler, ServeOptions } from 'bun';
import { TRPCRequestInfo } from '@trpc/server/http';
import { CreateContextCallback } from '@trpc/server/src/@trpc/server';
import { BaseHandlerOptions } from '@trpc/server/src/@trpc/server/http';
import { NodeHTTPCreateContextFnOptions } from '@trpc/server/src/adapters/node-http';
import { MaybePromise } from '@trpc/server/src/unstable-core-do-not-import';
type CreateBunContextOptions = FetchCreateContextFnOptions;
type BunHttpHandlerOptions<TRouter extends AnyRouter> = Omit<FetchHandlerRequestOptions<TRouter>, "req"> & {
endpoint?: string;
createContext?: (opts: CreateBunContextOptions) => inferRouterContext<TRouter> | Promise<inferRouterContext<TRouter>>;
};
declare function createBunHttpHandler<TRouter extends AnyRouter>(opts: BunHttpHandlerOptions<TRouter> & {
emitWsUpgrades?: boolean;
}): (request: Request, server: Server) => Response | Promise<Response> | undefined;
type CreateBunWSSContextFnOptions<TRouter extends AnyRouter> = NodeHTTPCreateContextFnOptions<Request, ServerWebSocket<BunWSClientCtx<TRouter>>>;
type BunWSAdapterOptions<TRouter extends AnyRouter> = BaseHandlerOptions<TRouter, Request> & CreateContextCallback<inferRouterContext<TRouter>, (opts: CreateBunWSSContextFnOptions<TRouter>) => MaybePromise<inferRouterContext<TRouter>>>;
type BunWSClientCtx<TRouter extends AnyRouter> = {
req: Request;
abortController: AbortController;
abortControllers: Map<string | number, AbortController>;
ctx: Promise<inferRouterContext<TRouter>> | ((params: TRPCRequestInfo["connectionParams"]) => Promise<inferRouterContext<TRouter>>);
};
declare function createBunWSHandler<TRouter extends AnyRouter>(opts: BunWSAdapterOptions<TRouter>): WebSocketHandler<BunWSClientCtx<TRouter>>;
type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;
declare function createBunServeHandler<TRouter extends AnyRouter>(opts: BunHttpHandlerOptions<TRouter> & BunWSAdapterOptions<TRouter>, serveOptions?: Optional<ServeOptions, "fetch">): {
fetch(req: Request, server: Server): Promise<Response | undefined>;
websocket: Bun.WebSocketHandler<BunWSClientCtx<TRouter>>;
error?: (this: Server, error: Bun.ErrorLike) => Response | Promise<Response> | void | Promise<void>;
id?: string | null;
port?: string | number;
reusePort?: boolean;
ipv6Only?: boolean;
hostname?: string;
unix?: never;
idleTimeout?: number;
maxRequestBodySize?: number;
development?: boolean | {
hmr?: boolean;
};
};
export { type BunHttpHandlerOptions, type BunWSAdapterOptions, type BunWSClientCtx, type CreateBunContextOptions, type CreateBunWSSContextFnOptions, createBunHttpHandler, createBunServeHandler, createBunWSHandler };