UNPKG

elysia

Version:

Ergonomic Framework for Human

61 lines (60 loc) 3.98 kB
import type { ElysiaWS } from './index'; import { WebSocketHandler } from './bun'; import type { Context } from '../context'; import { AfterResponseHandler, BaseMacro, DocumentDecoration, ErrorHandler, MapResponse, MaybeArray, MaybePromise, OptionalHandler, Prettify, RouteSchema, SingletonBase, TransformHandler } from '../types'; type TypedWebSocketMethod = 'open' | 'message' | 'drain' | 'close' | 'ping' | 'pong'; export type FlattenResponse<Response extends RouteSchema['response']> = {} extends Response ? unknown : Response[keyof Response]; interface TypedWebSocketHandler<in out Context, in out Route extends RouteSchema = {}> extends Omit<WebSocketHandler<Context>, TypedWebSocketMethod> { open?(ws: Prettify<ElysiaWS<Context, Omit<Route, 'body'> & { body: never; }>>): MaybePromise<FlattenResponse<Route['response']> | void>; message?(ws: Prettify<ElysiaWS<Context, Route>>, message: Route['body']): MaybePromise<FlattenResponse<Route['response']> | void | Generator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>> | AsyncGenerator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>>>; drain?(ws: Prettify<ElysiaWS<Context, Omit<Route, 'body'> & { body: never; }>>): MaybePromise<FlattenResponse<Route['response']> | void | Generator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>> | AsyncGenerator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>>>; close?(ws: Prettify<ElysiaWS<Context, Omit<Route, 'body'> & { body: never; }>>, code: number, reason: string): MaybePromise<FlattenResponse<Route['response']> | void | Generator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>> | AsyncGenerator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>>>; ping?(ws: Prettify<ElysiaWS<Context>>, message: Route['body']): MaybePromise<FlattenResponse<Route['response']> | void | Generator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>> | AsyncGenerator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>>>; pong?(ws: Prettify<ElysiaWS<Context>>, message: Route['body']): MaybePromise<FlattenResponse<Route['response']> | void | Generator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>> | AsyncGenerator<FlattenResponse<Route['response']>, void | FlattenResponse<Route['response']>>>; } export type WSParseHandler<Route extends RouteSchema, Context = {}> = (ws: Prettify<ElysiaWS<Context, Omit<Route, 'body'> & { body: unknown; }>>, message: unknown) => MaybePromise<Route['body'] | void | undefined>; export type AnyWSLocalHook = WSLocalHook<any, any, any>; export type WSLocalHook<Input extends BaseMacro, Schema extends RouteSchema, Singleton extends SingletonBase> = Prettify<Input> & { detail?: DocumentDecoration; /** * Headers to register to websocket before `upgrade` */ upgrade?: Record<string, unknown> | ((context: Context) => unknown); parse?: MaybeArray<WSParseHandler<Schema>>; /** * Transform context's value */ transform?: MaybeArray<TransformHandler<Schema, Singleton>>; /** * Execute before main handler */ beforeHandle?: MaybeArray<OptionalHandler<Schema, Singleton>>; /** * Execute after main handler */ afterHandle?: MaybeArray<OptionalHandler<Schema, Singleton>>; /** * Execute after main handler */ mapResponse?: MaybeArray<MapResponse<Schema, Singleton>>; /** * Execute after response is sent */ afterResponse?: MaybeArray<AfterResponseHandler<Schema, Singleton>>; /** * Catch error */ error?: MaybeArray<ErrorHandler<{}, Schema, Singleton>>; tags?: DocumentDecoration['tags']; } & TypedWebSocketHandler<Omit<Context<Schema, Singleton>, 'body'> & { body: never; }, Schema>; export {};