elysia
Version:
Ergonomic Framework for Human
61 lines (60 loc) • 3.98 kB
TypeScript
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 {};