import { type TObject, type TSchema, type TModule, type TRef, type TAnySchema } from '@sinclair/typebox'; import type { Context } from './context'; import { type Sucrose } from './sucrose'; import type { WSLocalHook } from './ws/types'; import type { ElysiaAdapter } from './adapter/types'; import type { ListenCallback, Serve, Server } from './universal/server'; import { PromiseGroup } from './utils'; import { ValidationError, type ParseError, type NotFoundError, type InternalServerError, type ElysiaCustomStatusResponse } from './error'; import type { TraceHandler } from './trace'; import type { ElysiaConfig, SingletonBase, DefinitionBase, Handler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, PreHandler, BodyHandler, OptionalHandler, ErrorHandler, LifeCycleStore, MaybePromise, Prettify, AddPrefix, AddSuffix, AddPrefixCapitalize, AddSuffixCapitalize, MaybeArray, GracefulHandler, MapResponse, MacroToProperty, TransformHandler, MetadataBase, RouteBase, CreateEden, ComposeElysiaResponse, InlineHandler, HookContainer, LifeCycleType, EphemeralType, ExcludeElysiaResponse, ModelValidator, ContextAppendType, Reconcile, AfterResponseHandler, HigherOrderFunction, ResolvePath, JoinPath, ValidatorLayer, MergeElysiaInstances, Macro, MacroToContext, StandaloneValidator, GuardSchemaType, Or, DocumentDecoration, AfterHandler, NonResolvableMacroKey, StandardSchemaV1Like, ElysiaHandlerToResponseSchema, ElysiaHandlerToResponseSchemas, ExtractErrorFromHandle, ElysiaHandlerToResponseSchemaAmbiguous, GuardLocalHook, PickIfExists, SimplifyToSchema, UnionResponseStatus, CreateEdenResponse, MacroProperty, MaybeValueOrVoidFunction, IntersectIfObjectSchema, UnknownRouteSchema, MaybeFunction, InlineHandlerNonMacro, Router } from './types'; export type AnyElysia = Elysia; /** * ### Elysia Server * Main instance to create web server using Elysia * * --- * @example * ```typescript * import { Elysia } from 'elysia' * * new Elysia() * .get("/", () => "Hello") * .listen(3000) * ``` */ export default class Elysia { config: ElysiaConfig; server: Server | null; private dependencies; '~Prefix': BasePath; '~Singleton': Singleton; '~Definitions': Definitions; '~Metadata': Metadata; '~Ephemeral': Ephemeral; '~Volatile': Volatile; '~Routes': Routes; protected singleton: SingletonBase; get store(): Singleton['store']; get decorator(): Singleton['decorator']; protected definitions: { typebox: TModule<{}, {}>; type: Record; error: Record; }; protected extender: { macro: Macro; higherOrderFunctions: HookContainer[]; }; protected validator: ValidatorLayer; protected standaloneValidator: StandaloneValidator; event: Partial; protected telemetry: undefined | { stack: string | undefined; }; router: Router; protected routeTree: Record; get routes(): InternalRoute[]; protected getGlobalRoutes(): InternalRoute[]; protected getGlobalDefinitions(): { typebox: TModule<{}, {}>; type: Record; error: Record; }; protected inference: Sucrose.Inference; private getServer; private getParent; '~parser': { [K: string]: BodyHandler; }; private _promisedModules; private get promisedModules(); constructor(config?: ElysiaConfig); '~adapter': ElysiaAdapter; env(model: TObject, _env?: NodeJS.ProcessEnv): this; /** * @private DO_NOT_USE_OR_YOU_WILL_BE_FIRED * @version 1.1.0 * * ! Do not use unless you know exactly what you are doing * ? Add Higher order function to Elysia.fetch */ wrap(fn: HigherOrderFunction): this; get models(): { [K in keyof Definitions['typebox']]: ModelValidator; } & { modules: TModule> | Extract; }; private add; private setHeaders?; headers(header: Context['set']['headers'] | undefined): this; /** * ### start | Life cycle event * Called after server is ready for serving * * --- * @example * ```typescript * new Elysia() * .onStart(({ server }) => { * console.log("Running at ${server?.url}:${server?.port}") * }) * .listen(3000) * ``` */ onStart(handler: MaybeArray>): this; /** * ### request | Life cycle event * Called on every new request is accepted * * --- * @example * ```typescript * new Elysia() * .onRequest(({ method, url }) => { * saveToAnalytic({ method, url }) * }) * ``` */ onRequest>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], { decorator: Singleton['decorator']; store: Singleton['store']; derive: {}; resolve: {}; }>>(handler: Handler): Elysia>; }>; /** * ### request | Life cycle event * Called on every new request is accepted * * --- * @example * ```typescript * new Elysia() * .onRequest(({ method, url }) => { * saveToAnalytic({ method, url }) * }) * ``` */ onRequest>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], { decorator: Singleton['decorator']; store: Singleton['store']; derive: {}; resolve: {}; }>[]>(handler: Handlers): Elysia>; }>; /** * ### parse | Life cycle event * Callback function to handle body parsing * * If truthy value is returned, will be assigned to `context.body` * Otherwise will skip the callback and look for the next one. * * Equivalent to Express's body parser * * --- * @example * ```typescript * new Elysia() * .onParse((request, contentType) => { * if(contentType === "application/json") * return request.json() * }) * ``` */ onParse(parser: MaybeArray>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: {}; }>>): this; /** * ### parse | Life cycle event * Callback function to handle body parsing * * If truthy value is returned, will be assigned to `context.body` * Otherwise will skip the callback and look for the next one. * * Equivalent to Express's body parser * * --- * @example * ```typescript * new Elysia() * .onParse((request, contentType) => { * if(contentType === "application/json") * return request.json() * }) * ``` */ onParse(options: { as: Type; }, parser: MaybeArray>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, 'global' extends Type ? { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Partial; resolve: {}; } : 'scoped' extends Type ? { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Partial; resolve: {}; } : { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: {}; }>>): this; onParse(parser: Parsers): this; /** * ### parse | Life cycle event * Callback function to handle body parsing * * If truthy value is returned, will be assigned to `context.body` * Otherwise will skip the callback and look for the next one. * * Equivalent to Express's body parser * * --- * @example * ```typescript * new Elysia() * .onParse((request, contentType) => { * if(contentType === "application/json") * return request.json() * }) * ``` */ parser>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: {}; }>>(name: Parser, parser: Handler): Elysia; /** * ### transform | Life cycle event * Assign or transform anything related to context before validation. * * --- * @example * ```typescript * new Elysia() * .onTransform(({ params }) => { * if(params.id) * params.id = +params.id * }) * ``` */ onTransform(handler: MaybeArray>, { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: {}; }>>): this; /** * ### transform | Life cycle event * Assign or transform anything related to context before validation. * * --- * @example * ```typescript * new Elysia() * .onTransform(({ params }) => { * if(params.id) * params.id = +params.id * }) * ``` */ onTransform(options: { as: Type; }, handler: MaybeArray>, 'global' extends Type ? { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: {}; } : 'scoped' extends Type ? { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Ephemeral['derive'] & Partial; resolve: {}; } : { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive'] & Partial; resolve: {}; }>>): this; /** * Derive new property for each request with access to `Context`. * * If error is thrown, the scope will skip to handling error instead. * * --- * @example * new Elysia() * .state('counter', 1) * .derive(({ store }) => ({ * increase() { * store.counter++ * } * })) */ resolve | ElysiaCustomStatusResponse, const Type extends LifeCycleType>(options: { as: Type; }, resolver: (context: Context, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; })>) => MaybePromise): Type extends 'global' ? Elysia; }, Definitions, { schema: Metadata['schema']; standaloneSchema: Metadata['standaloneSchema']; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: UnionResponseStatus>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: UnionResponseStatus>; }, Volatile> : Elysia; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; /** * Derive new property for each request with access to `Context`. * * If error is thrown, the scope will skip to handling error instead. * * --- * @example * new Elysia() * .state('counter', 1) * .derive(({ store }) => ({ * increase() { * store.counter++ * } * })) */ resolve | ElysiaCustomStatusResponse | void>(resolver: (context: Context, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, BasePath>) => MaybePromise): Elysia; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; mapResolve | ElysiaCustomStatusResponse>(mapper: (context: Context> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, BasePath>) => MaybePromise): Elysia; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; mapResolve | ElysiaCustomStatusResponse, const Type extends LifeCycleType>(options: { as: Type; }, mapper: (context: Context> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; })>) => MaybePromise): Type extends 'global' ? Elysia; }, Definitions, { schema: Metadata['schema']; standaloneSchema: Metadata['standaloneSchema']; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: UnionResponseStatus>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: UnionResponseStatus>; }, Volatile> : Elysia; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; /** * ### Before Handle | Life cycle event * Execute after validation and before the main route handler. * * If truthy value is returned, will be assigned as `Response` and skip the main handler * * --- * @example * ```typescript * new Elysia() * .onBeforeHandle(({ params: { id }, status }) => { * if(id && !isExisted(id)) { * status(401) * * return "Unauthorized" * } * }) * ``` */ onBeforeHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>>(handler: Handler): Elysia>; }>; /** * ### Before Handle | Life cycle event * Execute after validation and before the main route handler. * * If truthy value is returned, will be assigned as `Response` and skip the main handler * * --- * @example * ```typescript * new Elysia() * .onBeforeHandle(({ params: { id }, status }) => { * if(id && !isExisted(id)) { * status(401) * * return "Unauthorized" * } * }) * ``` */ onBeforeHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>[]>(handlers: Handlers): Elysia>; }>; /** * ### Before Handle | Life cycle event * Execute after validation and before the main route handler. * * If truthy value is returned, will be assigned as `Response` and skip the main handler * * --- * @example * ```typescript * new Elysia() * .onBeforeHandle(({ params: { id }, status }) => { * if(id && !isExisted(id)) { * status(401) * * return "Unauthorized" * } * }) * ``` */ onBeforeHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }), BasePath>>(options: { as: Type; }, handler: Handler): Type extends 'global' ? Elysia>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia>; }, Volatile> : Elysia>; }>; /** * ### Before Handle | Life cycle event * Execute after validation and before the main route handler. * * If truthy value is returned, will be assigned as `Response` and skip the main handler * * --- * @example * ```typescript * new Elysia() * .onBeforeHandle(({ params: { id }, status }) => { * if(id && !isExisted(id)) { * status(401) * * return "Unauthorized" * } * }) * ``` */ onBeforeHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }), BasePath>[]>(options: { as: Type; }, handlers: Handlers): Type extends 'global' ? Elysia>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia>; }, Volatile> : Elysia>; }>; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .onAfterHandle((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ onAfterHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>>(handler: Handler): Elysia>; }>; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .onAfterHandle((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ onAfterHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>[]>(handlers: Handlers): Elysia>; }>; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .onAfterHandle((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ onAfterHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; })>>(options: { as: Type; }, handler: Handler): Type extends 'global' ? Elysia>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia>; }, Volatile> : Elysia>; }>; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .onAfterHandle((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ onAfterHandle>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; })>[]>(options: { as: Type; }, handler: Handlers): Type extends 'global' ? Elysia>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia>; }, Volatile> : Elysia>; }>; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .mapResponse((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ mapResponse(handler: MaybeArray>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>>): this; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .mapResponse((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ mapResponse(options: { as: Type; }, handler: MaybeArray>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; })>>): this; /** * ### response | Life cycle event * Call AFTER main handler is executed * Good for analytic metrics * --- * @example * ```typescript * new Elysia() * .onAfterResponse(() => { * cleanup() * }) * ``` */ onAfterResponse(handler: MaybeArray>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>>): this; /** * ### response | Life cycle event * Call AFTER main handler is executed * Good for analytic metrics * * --- * @example * ```typescript * new Elysia() * .onAfterResponse(() => { * cleanup() * }) * ``` */ onAfterResponse(options: { as: Type; }, handler: MaybeArray>, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; })>>): this; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .onAfterHandle((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ trace(handler: MaybeArray>): this; /** * ### After Handle | Life cycle event * Intercept request **after** main handler is called. * * If truthy value is returned, will be assigned as `Response` * * --- * @example * ```typescript * new Elysia() * .onAfterHandle((context, response) => { * if(typeof response === "object") * return JSON.stringify(response) * }) * ``` */ trace(options: { as: LifeCycleType; }, handler: MaybeArray>): this; /** * Register errors * * --- * @example * ```typescript * class CustomError extends Error { * constructor() { * super() * } * } * * new Elysia() * .error('CUSTOM_ERROR', CustomError) * ``` */ error>(errors: Errors): Elysia; /** * Register errors * * --- * @example * ```typescript * class CustomError extends Error { * constructor() { * super() * } * } * * new Elysia() * .error({ * CUSTOM_ERROR: CustomError * }) * ``` */ error(name: Name, errors: CustomError): Elysia; /** * Register errors * * --- * @example * ```typescript * class CustomError extends Error { * constructor() { * super() * } * } * * new Elysia() * .error('CUSTOM_ERROR', CustomError) * ``` */ error>(mapper: (decorators: Definitions['error']) => NewErrors): Elysia; /** * ### Error | Life cycle event * Called when error is thrown during processing request * * --- * @example * ```typescript * new Elysia() * .onError(({ code }) => { * if(code === "NOT_FOUND") * return "Path not found :(" * }) * ``` */ onError>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton, Ephemeral, Volatile>>(handler: Handler): Elysia>; }>; /** * ### Error | Life cycle event * Called when error is thrown during processing request * * --- * @example * ```typescript * new Elysia() * .onError(({ code }) => { * if(code === "NOT_FOUND") * return "Path not found :(" * }) * ``` */ onError>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton, Ephemeral, Volatile>[]>(handler: Handlers): Elysia>; }>; /** * ### Error | Life cycle event * Called when error is thrown during processing request * * --- * @example * ```typescript * new Elysia() * .onError(({ code }) => { * if(code === "NOT_FOUND") * return "Path not found :(" * }) * ``` */ onError>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Type extends 'global' ? { store: Singleton['store']; decorator: Singleton['decorator']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: Singleton['resolve'] & Ephemeral['resolve'] & Volatile['resolve']; } : Type extends 'scoped' ? { store: Singleton['store']; decorator: Singleton['decorator']; derive: Singleton['derive'] & Ephemeral['derive']; resolve: Singleton['resolve'] & Ephemeral['resolve']; } : Singleton, Type extends 'global' ? Ephemeral : { derive: Partial; resolve: Partial; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: Ephemeral['response']; }, Type extends 'global' ? Ephemeral : Type extends 'scoped' ? Ephemeral : { derive: Partial; resolve: Partial; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: Ephemeral['response']; }>>(options: { as: Type; }, handler: Handler): Type extends 'global' ? Elysia>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia>; }, Volatile> : Elysia>; }>; /** * ### Error | Life cycle event * Called when error is thrown during processing request * * --- * @example * ```typescript * new Elysia() * .onError(({ code }) => { * if(code === "NOT_FOUND") * return "Path not found :(" * }) * ``` */ onError>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Type extends 'global' ? { store: Singleton['store']; decorator: Singleton['decorator']; derive: Singleton['derive'] & Ephemeral['derive'] & Volatile['derive']; resolve: Singleton['resolve'] & Ephemeral['resolve'] & Volatile['resolve']; } : Type extends 'scoped' ? { store: Singleton['store']; decorator: Singleton['decorator']; derive: Singleton['derive'] & Ephemeral['derive']; resolve: Singleton['resolve'] & Ephemeral['resolve']; } : Singleton, Type extends 'global' ? Ephemeral : { derive: Partial; resolve: Partial; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: Ephemeral['response']; }, Type extends 'global' ? Ephemeral : Type extends 'scoped' ? Ephemeral : { derive: Partial; resolve: Partial; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: Ephemeral['response']; }>[]>(options: { as: Type; }, handler: Handlers): Type extends 'global' ? Elysia>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia>; }, Volatile> : Elysia>; }>; /** * ### stop | Life cycle event * Called after server stop serving request * * --- * @example * ```typescript * new Elysia() * .onStop((app) => { * cleanup() * }) * ``` */ onStop(handler: MaybeArray>): this; /** * ### on * Syntax sugar for attaching life cycle event by name * * Does the exact same thing as `.on[Event]()` * * --- * @example * ```typescript * new Elysia() * .on('error', ({ code }) => { * if(code === "NOT_FOUND") * return "Path not found :(" * }) * ``` */ on(type: Event, handlers: MaybeArray[0]['fn']>): this; /** * ### on * Syntax sugar for attaching life cycle event by name * * Does the exact same thing as `.on[Event]()` * * --- * @example * ```typescript * new Elysia() * .on('error', ({ code }) => { * if(code === "NOT_FOUND") * return "Path not found :(" * }) * ``` */ on(options: { as: LifeCycleType; }, type: Event, handlers: MaybeArray[0]>): this; as(type: 'global'): Elysia, Metadata['schema']>; standaloneSchema: Metadata['standaloneSchema'] & Volatile['standaloneSchema'] & Ephemeral['standaloneSchema']; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: Metadata['response'] & Ephemeral['response'] & Volatile['response']; }, Routes, { derive: {}; resolve: {}; schema: {}; standaloneSchema: {}; response: {}; }, { derive: {}; resolve: {}; schema: {}; standaloneSchema: {}; response: {}; }>; as(type: 'scoped'): Elysia; standaloneSchema: Volatile['standaloneSchema'] & Ephemeral['standaloneSchema']; response: Volatile['response'] & Ephemeral['response']; }, { derive: {}; resolve: {}; schema: {}; standaloneSchema: {}; response: {}; }>; group(prefix: Prefix, run: (group: Elysia, Singleton, Definitions, { schema: MergeSchema, Metadata['schema']>; standaloneSchema: UnwrapRoute<{}, Definitions['typebox']> & Metadata['standaloneSchema']; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: Metadata['response']; }, {}, Ephemeral, Volatile>) => NewElysia): Elysia; group, const Schema extends MergeSchema>, MergeSchema>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const BeforeHandle extends MaybeArray>, const AfterHandle extends MaybeArray>, const ErrorHandle extends MaybeArray>, const NewElysia extends AnyElysia>(prefix: Prefix, schema: GuardLocalHook, run: (group: Elysia, { decorator: Singleton['decorator']; store: Singleton['store']; derive: Singleton['derive']; resolve: Singleton['resolve'] & MacroContext['resolve']; }, Definitions, { schema: Schema; standaloneSchema: Metadata['standaloneSchema'] & Schema & MacroContext; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: Metadata['response'] & MacroContext['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous; }, {}, Ephemeral, Volatile>) => NewElysia): Elysia; /** * ### guard * Encapsulate and pass hook into all child handler * * --- * @example * ```typescript * import { t } from 'elysia' * * new Elysia() * .guard({ * body: t.Object({ * username: t.String(), * password: t.String() * }) * }) * ``` */ guard, const Schema extends MergeSchema, Metadata['schema']>, const MacroContext extends MacroToContext, Definitions['typebox']>, const GuardType extends GuardSchemaType, const AsType extends LifeCycleType, const BeforeHandle extends MaybeArray>, const AfterHandle extends MaybeArray>, const ErrorHandle extends MaybeArray>>(hook: GuardLocalHook): Or extends true ? Or extends true ? Elysia ? Volatile['schema'] : MergeSchema, Metadata['schema']>; standaloneSchema: Volatile['standaloneSchema'] & SimplifyToSchema; response: Volatile['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & MacroContext['return']; }> : AsType extends 'global' ? Elysia ? Metadata['schema'] : MergeSchema, Metadata['schema']>; standaloneSchema: Metadata['standaloneSchema'] & SimplifyToSchema; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: Metadata['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & MacroContext['return']; }, Routes, Ephemeral, Volatile> : Elysia ? EphemeralType['schema'] : MergeSchema, Metadata['schema'] & Ephemeral['schema']>; standaloneSchema: Ephemeral['standaloneSchema'] & SimplifyToSchema; response: Ephemeral['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & MacroContext['return']; }, Volatile> : Or extends true ? Elysia & ({} extends PickIfExists ? Volatile['standaloneSchema'] : Volatile['standaloneSchema'] & UnwrapRoute); response: Volatile['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & MacroContext['return']; }> : AsType extends 'global' ? Elysia & ({} extends PickIfExists ? Metadata['standaloneSchema'] : UnwrapRoute & Metadata['standaloneSchema']); macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: Metadata['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & MacroContext['return']; }, Routes, Ephemeral, Volatile> : Elysia & ({} extends PickIfExists ? Ephemeral['standaloneSchema'] : Ephemeral['standaloneSchema'] & UnwrapRoute); response: Ephemeral['response'] & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous & MacroContext['return']; }, Volatile>; guard, const Schema extends MergeSchema, MergeSchema>> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const BeforeHandle extends MaybeArray>, const AfterHandle extends MaybeArray>, const ErrorHandle extends MaybeArray>, const NewElysia extends AnyElysia>(schema: GuardLocalHook, run: (group: Elysia & ElysiaHandlerToResponseSchemaAmbiguous & ElysiaHandlerToResponseSchemaAmbiguous; }, {}, Ephemeral, Volatile>) => NewElysia): Elysia; /** * Entire Instance **/ use(instance: MaybePromise): Elysia; derive: Singleton['derive'] & NewElysia['~Singleton']['derive']; resolve: Singleton['resolve'] & NewElysia['~Singleton']['resolve']; }, Definitions & NewElysia['~Definitions'], Metadata & NewElysia['~Metadata'], BasePath extends `` ? Routes & NewElysia['~Routes'] : Routes & CreateEden, Ephemeral, Volatile & NewElysia['~Ephemeral']>; /** * Entire multiple Instance **/ use(instance: MaybePromise): MergeElysiaInstances; /** * Import fn */ use(plugin: Promise<{ default: (elysia: AnyElysia) => MaybePromise; }>): Elysia; derive: Singleton['derive'] & NewElysia['~Singleton']['derive']; resolve: Singleton['resolve'] & NewElysia['~Singleton']['resolve']; }, Definitions & NewElysia['~Definitions'], Metadata & NewElysia['~Metadata'], BasePath extends `` ? Routes & NewElysia['~Routes'] : Routes & CreateEden, Ephemeral & NewElysia['~Ephemeral'], Volatile & NewElysia['~Volatile']>; /** * Import entire instance */ use(plugin: Promise<{ default: LazyLoadElysia; }>): Elysia; store: Prettify>; derive: Singleton['derive'] & Partial; resolve: Singleton['resolve'] & Partial; }, Definitions & LazyLoadElysia['~Definitions'], Metadata & LazyLoadElysia['~Metadata'], BasePath extends `` ? Routes & LazyLoadElysia['~Routes'] : Routes & CreateEden, Ephemeral, { schema: Volatile['schema'] & Partial; standaloneSchema: Volatile['standaloneSchema'] & Partial; resolve: Volatile['resolve'] & Partial; derive: Volatile['derive'] & Partial; response: Volatile['response'] & LazyLoadElysia['~Ephemeral']['response']; }>; /** * Inline fn */ use(plugin: (app: Param) => NewElysia): Elysia; derive: Singleton['derive'] & NewElysia['~Singleton']['derive']; resolve: Singleton['resolve'] & NewElysia['~Singleton']['resolve']; }, Definitions & NewElysia['~Definitions'], Metadata & NewElysia['~Metadata'], BasePath extends `` ? Routes & NewElysia['~Routes'] : Routes & CreateEden, Ephemeral & NewElysia['~Ephemeral'], Volatile & NewElysia['~Volatile']>; /** * Inline async fn */ use(plugin: ((app: Param) => Promise) | Promise<(app: Param) => NewElysia>): Elysia; store: Prettify>; derive: Singleton['derive'] & Partial; resolve: Singleton['resolve'] & Partial; }, Definitions & NewElysia['~Definitions'], Metadata & NewElysia['~Metadata'], BasePath extends `` ? Routes & NewElysia['~Routes'] : Routes & CreateEden, { schema: Ephemeral['schema'] & Partial; standaloneSchema: Ephemeral['standaloneSchema'] & Partial; resolve: Ephemeral['resolve'] & Partial; derive: Ephemeral['derive'] & Partial; response: Ephemeral['response'] & NewElysia['~Ephemeral']['response']; }, { schema: Volatile['schema'] & Partial; standaloneSchema: Volatile['standaloneSchema'] & Partial; resolve: Volatile['resolve'] & Partial; derive: Volatile['derive'] & Partial; response: Volatile['response'] & NewElysia['~Volatile']['response']; }>; /** * conditional undefined ignore type */ use(instance: MaybeArray> | MaybePromise MaybePromise)> | Promise<{ default: AnyElysia | ((app: AnyElysia) => MaybePromise); }> | undefined | false): this; private propagatePromiseModules; private _use; macro, const Schema extends MergeSchema, MergeSchema> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Property extends MaybeValueOrVoidFunction & { [name in Name]?: boolean; }, Schema & MacroContext, Singleton & { derive: Partial; resolve: Partial & MacroContext['resolve']; }, Definitions['error']>>>(name: Name, macro: (Input extends any ? Input : Prettify) & Property): Elysia any ? Params : boolean; }; macroFn: Metadata['macroFn'] & { [name in Name]: Property; }; parser: Metadata['parser']; response: Metadata['response']; }, Routes, Ephemeral, Volatile>; macro, const NewMacro extends Macro, Input, IntersectIfObjectSchema, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, Singleton & { derive: Partial; resolve: Partial; }, Definitions['error']>>(macro: NewMacro): Elysia>; macroFn: Metadata['macroFn'] & NewMacro; parser: Metadata['parser']; response: Metadata['response']; }, Routes, Ephemeral, Volatile>; macro, const NewMacro extends MaybeFunction, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, Singleton & { derive: Partial; resolve: Partial; }, Definitions['error']>>>(macro: NewMacro): Elysia>; macroFn: Metadata['macroFn'] & NewMacro; parser: Metadata['parser']; response: Metadata['response']; }, Routes, Ephemeral, Volatile>; private applyMacro; mount(handle: ((request: Request) => MaybePromise) | AnyElysia, detail?: { detail?: DocumentDecoration; }): this; mount(path: string, handle: ((request: Request) => MaybePromise) | AnyElysia, detail?: { detail?: DocumentDecoration; }): this; /** * ### get * Register handler for path with method [GET] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .get('/', () => 'hi') * .get('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ get, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends {} extends MacroContext ? InlineHandlerNonMacro, NoInfer> : InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { get: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### post * Register handler for path with method [POST] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .post('/', () => 'hi') * .post('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ post, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends {} extends MacroContext ? InlineHandlerNonMacro, NoInfer> : InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { post: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### put * Register handler for path with method [PUT] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .put('/', () => 'hi') * .put('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ put, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends {} extends MacroContext ? InlineHandlerNonMacro, NoInfer> : InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { put: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### patch * Register handler for path with method [PATCH] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .patch('/', () => 'hi') * .patch('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ patch, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { patch: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### delete * Register handler for path with method [DELETE] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .delete('/', () => 'hi') * .delete('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ delete, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { delete: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### options * Register handler for path with method [POST] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .options('/', () => 'hi') * .options('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ options, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { options: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### all * Register handler for path with method [ALL] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .all('/', () => 'hi') * .all('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ all, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { [method in string]: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### head * Register handler for path with method [HEAD] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .head('/', () => 'hi') * .head('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ head, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { head: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### connect * Register handler for path with method [CONNECT] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .connect('/', () => 'hi') * .connect('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ connect, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(path: Path, handler: Handle, hook?: LocalHook): Elysia, { connect: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### route * Register handler for path with method [ROUTE] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .route('/', () => 'hi') * .route('/with-hook', () => 'hi', { * response: t.String() * }) * ``` */ route, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const Decorator extends Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, const MacroContext extends {} extends Metadata['macroFn'] ? {} : MacroToContext, Definitions['typebox']>, const Handle extends InlineHandler, NoInfer, MacroContext>>(method: Method, path: Path, handler: Handle, hook?: LocalHook & { config?: { allowMeta?: boolean; mount?: Function; }; }): Elysia, { [method in Method]: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### ws * Register handler for path with method [ws] * * --- * @example * ```typescript * import { Elysia, t } from 'elysia' * * new Elysia() * .ws('/', { * message(ws, message) { * ws.send(message) * } * }) * ``` */ ws, const Schema extends IntersectIfObjectSchema>, MergeSchema>>, Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema']>, const MacroContext extends MacroToContext>>(path: Path, options: WSLocalHook): Elysia, { subscribe: CreateEdenResponse>>>>; }>, Ephemeral, Volatile>; /** * ### state * Assign global mutatable state accessible for all handler * * --- * @example * ```typescript * new Elysia() * .state('counter', 0) * .get('/', (({ counter }) => ++counter) * ``` */ state(name: Name, value: Value): Elysia; derive: Singleton['derive']; resolve: Singleton['resolve']; }, Definitions, Metadata, Routes, Ephemeral, Volatile>; /** * ### state * Assign global mutatable state accessible for all handler * * --- * @example * ```typescript * new Elysia() * .state({ counter: 0 }) * .get('/', (({ counter }) => ++counter) * ``` */ state>(store: Store): Elysia; derive: Singleton['derive']; resolve: Singleton['resolve']; }, Definitions, Metadata, Routes, Ephemeral, Volatile>; /** * ### state * Assign global mutatable state accessible for all handler * * --- * @example * ```typescript * new Elysia() * .state('counter', 0) * .get('/', (({ counter }) => ++counter) * ``` */ state(options: { as: Type; }, name: Name, value: Value): Elysia : Prettify; derive: Singleton['derive']; resolve: Singleton['resolve']; }, Definitions, Metadata, Routes, Ephemeral, Volatile>; /** * ### state * Assign global mutatable state accessible for all handler * * --- * @example * ```typescript * new Elysia() * .state({ counter: 0 }) * .get('/', (({ counter }) => ++counter) * ``` */ state>(options: { as: Type; }, store: Store): Elysia : Prettify; derive: Singleton['derive']; resolve: Singleton['resolve']; }, Definitions, Metadata, Routes, Ephemeral, Volatile>; state>(mapper: (decorators: Singleton['store']) => NewStore): Elysia; /** * ### decorate * Define custom method to `Context` accessible for all handler * * --- * @example * ```typescript * new Elysia() * .decorate('getDate', () => Date.now()) * .get('/', (({ getDate }) => getDate()) * ``` */ decorate(name: Name, value: Value): Elysia; /** * ### decorate * Define custom method to `Context` accessible for all handler * * --- * @example * ```typescript * new Elysia() * .decorate('getDate', () => Date.now()) * .get('/', (({ getDate }) => getDate()) * ``` */ decorate>(decorators: NewDecorators): Elysia; decorate>(mapper: (decorators: Singleton['decorator']) => NewDecorators): Elysia; /** * ### decorate * Define custom method to `Context` accessible for all handler * * --- * @example * ```typescript * new Elysia() * .decorate({ as: 'override' }, 'getDate', () => Date.now()) * .get('/', (({ getDate }) => getDate()) * ``` */ decorate(options: { as: Type; }, name: Name, value: Value): Elysia : Singleton['decorator'] & { [name in Name]: Value; }; store: Singleton['store']; derive: Singleton['derive']; resolve: Singleton['resolve']; }, Definitions, Metadata, Routes, Ephemeral, Volatile>; /** * ### decorate * Define custom method to `Context` accessible for all handler * * --- * @example * ```typescript * new Elysia() * .decorate('getDate', () => Date.now()) * .get('/', (({ getDate }) => getDate()) * ``` */ decorate>(options: { as: Type; }, decorators: NewDecorators): Elysia : Singleton['decorator'] & NewDecorators; store: Singleton['store']; derive: Singleton['derive']; resolve: Singleton['resolve']; }, Definitions, Metadata, Routes, Ephemeral, Volatile>; /** * Derive new property for each request with access to `Context`. * * If error is thrown, the scope will skip to handling error instead. * * --- * @example * new Elysia() * .state('counter', 1) * .derive(({ store }) => ({ * increase() { * store.counter++ * } * })) */ derive | ElysiaCustomStatusResponse | void>(transform: (context: Context, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'], Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }>) => MaybePromise): Elysia; resolve: Volatile['resolve']; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; /** * Derive new property for each request with access to `Context`. * * If error is thrown, the scope will skip to handling error instead. * * --- * @example * new Elysia() * .state('counter', 1) * .derive(({ store }) => ({ * increase() { * store.counter++ * } * })) */ derive | ElysiaCustomStatusResponse | void, const Type extends LifeCycleType>(options: { as: Type; }, transform: (context: Context, BasePath> & Metadata['standaloneSchema'] & Ephemeral['standaloneSchema'] & Volatile['standaloneSchema'] & 'global' extends Type ? { params: { [name: string]: string | undefined; }; } : 'scoped' extends Type ? { params: { [name: string]: string | undefined; }; } : {}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }), BasePath>) => MaybePromise): Type extends 'global' ? Elysia; resolve: Singleton['resolve']; }, Definitions, { schema: Metadata['schema']; standaloneSchema: Metadata['standaloneSchema']; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: UnionResponseStatus>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia; resolve: Ephemeral['resolve']; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: UnionResponseStatus>; }, Volatile> : Elysia; resolve: Ephemeral['resolve']; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; model(name: Name, model: Model): Elysia; model>(record: Recorder): Elysia; model>(mapper: (decorators: Definitions['typebox'] extends infer Models ? { [Name in keyof Models]: Models[Name] extends TSchema ? TRef : Models[Name]; } : {}) => NewType): Elysia ? Definitions['typebox'][Name] : NewType[Name]; }; error: Definitions['error']; }, Metadata, Routes, Ephemeral, Volatile>; Ref & string>(key: K): TRef; mapDerive | ElysiaCustomStatusResponse>(mapper: (context: Context<{}, Singleton & { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }, BasePath>) => MaybePromise): Elysia; resolve: Volatile['resolve']; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; mapDerive | ElysiaCustomStatusResponse, const Type extends LifeCycleType>(options: { as: Type; }, mapper: (context: Context<{}, Singleton & ('global' extends Type ? { derive: Partial; resolve: Partial; } : 'scoped' extends Type ? { derive: Ephemeral['derive'] & Partial; resolve: Ephemeral['resolve'] & Partial; } : { derive: Ephemeral['derive'] & Volatile['derive']; resolve: Ephemeral['resolve'] & Volatile['resolve']; }), BasePath>) => MaybePromise): Type extends 'global' ? Elysia; resolve: Singleton['resolve']; }, Definitions, { schema: Metadata['schema']; standaloneSchema: Metadata['standaloneSchema']; macro: Metadata['macro']; macroFn: Metadata['macroFn']; parser: Metadata['parser']; response: UnionResponseStatus>; }, Routes, Ephemeral, Volatile> : Type extends 'scoped' ? Elysia; resolve: Ephemeral['resolve']; schema: Ephemeral['schema']; standaloneSchema: Ephemeral['standaloneSchema']; response: UnionResponseStatus>; }, Volatile> : Elysia; schema: Volatile['schema']; standaloneSchema: Volatile['standaloneSchema']; response: UnionResponseStatus>; }>; affix(base: Base, type: Type, word: Word): Elysia : AddPrefixCapitalize : AddSuffixCapitalize : Singleton['decorator']; store: Type extends 'state' | 'all' ? 'prefix' extends Base ? Word extends `${string}${'_' | '-' | ' '}` ? AddPrefix : AddPrefixCapitalize : AddSuffix : Singleton['store']; derive: Type extends 'decorator' | 'all' ? 'prefix' extends Base ? Word extends `${string}${'_' | '-' | ' '}` ? AddPrefix : AddPrefixCapitalize : AddSuffixCapitalize : Singleton['derive']; resolve: Type extends 'decorator' | 'all' ? 'prefix' extends Base ? Word extends `${string}${'_' | '-' | ' '}` ? AddPrefix : AddPrefixCapitalize : AddSuffixCapitalize : Singleton['resolve']; }, { typebox: Type extends 'model' | 'all' ? 'prefix' extends Base ? Word extends `${string}${'_' | '-' | ' '}` ? AddPrefix : AddPrefixCapitalize : AddSuffixCapitalize : Definitions['typebox']; error: Type extends 'error' | 'all' ? 'prefix' extends Base ? Word extends `${string}${'_' | '-' | ' '}` ? AddPrefix : AddPrefixCapitalize : AddSuffixCapitalize : Definitions['error']; }, Metadata, Routes, Ephemeral, Volatile>; prefix(type: Type, word: Word): Elysia : AddPrefixCapitalize : Singleton["decorator"]; store: Type extends "all" | "state" ? Word extends `${string} ` | `${string}-` | `${string}_` ? AddPrefix : AddPrefixCapitalize : Singleton["store"]; derive: Type extends "decorator" | "all" ? Word extends `${string} ` | `${string}-` | `${string}_` ? AddPrefix : AddPrefixCapitalize : Singleton["derive"]; resolve: Type extends "decorator" | "all" ? Word extends `${string} ` | `${string}-` | `${string}_` ? AddPrefix : AddPrefixCapitalize : Singleton["resolve"]; }, { typebox: Type extends "all" | "model" ? Word extends `${string} ` | `${string}-` | `${string}_` ? AddPrefix : AddPrefixCapitalize : Definitions["typebox"]; error: Type extends "error" | "all" ? Word extends `${string} ` | `${string}-` | `${string}_` ? AddPrefix : AddPrefixCapitalize : Definitions["error"]; }, Metadata, Routes, Ephemeral, Volatile>; suffix(type: Type, word: Word): Elysia : Singleton["decorator"]; store: Type extends "all" | "state" ? AddSuffix : Singleton["store"]; derive: Type extends "decorator" | "all" ? AddSuffixCapitalize : Singleton["derive"]; resolve: Type extends "decorator" | "all" ? AddSuffixCapitalize : Singleton["resolve"]; }, { typebox: Type extends "all" | "model" ? AddSuffixCapitalize : Definitions["typebox"]; error: Type extends "error" | "all" ? AddSuffixCapitalize : Definitions["error"]; }, Metadata, Routes, Ephemeral, Volatile>; compile(): this; handle: (request: Request) => Promise; /** * Use handle can be either sync or async to save performance. * * Beside benchmark purpose, please use 'handle' instead. */ get fetch(): (request: Request) => MaybePromise; /** * Custom handle written by adapter */ protected _handle?(...a: unknown[]): unknown; protected handleError: (context: Partial> & Metadata["standaloneSchema"] & Ephemeral["standaloneSchema"] & Volatile["standaloneSchema"], Singleton & { derive: Ephemeral["derive"] & Volatile["derive"]; resolve: Ephemeral["resolve"] & Volatile["resolve"]; }, BasePath>> & { request: Request; }, error: Error | ValidationError | ParseError | NotFoundError | InternalServerError) => Promise; /** * ### listen * Assign current instance to port and start serving * * --- * @example * ```typescript * new Elysia() * .get("/", () => 'hi') * .listen(3000) * ``` */ listen: (options: string | number | Partial, callback?: ListenCallback) => this; /** * ### stop * Stop server from serving * * --- * @example * ```typescript * const app = new Elysia() * .get("/", () => 'hi') * .listen(3000) * * // Sometime later * app.stop() * ``` * * @example * ```typescript * const app = new Elysia() * .get("/", () => 'hi') * .listen(3000) * * app.stop(true) // Abruptly any requests inflight * ``` */ stop: (closeActiveConnections?: boolean) => Promise; [Symbol.dispose]: () => void; /** * Wait until all lazy loaded modules all load is fully */ get modules(): PromiseGroup; } export { Elysia }; export { t } from './type-system'; export { validationDetail, fileType } from './type-system/utils'; export type { ElysiaTypeCustomError, ElysiaTypeCustomErrorCallback } from './type-system/types'; export { serializeCookie, Cookie, type CookieOptions } from './cookies'; export type { Context, PreContext, ErrorContext } from './context'; export { ELYSIA_TRACE, type TraceEvent, type TraceListener, type TraceHandler, type TraceProcess, type TraceStream } from './trace'; export { getSchemaValidator, getResponseSchemaValidator } from './schema'; export { replaceSchemaTypeFromManyOptions as replaceSchemaType } from './replace-schema'; export { mergeHook, mergeObjectArray, redirect, StatusMap, InvertedStatusMap, form, replaceUrlPath, checksum, cloneInference, deduplicateChecksum, ELYSIA_FORM_DATA, ELYSIA_REQUEST_ID, sse } from './utils'; export { status, mapValueError, ParseError, NotFoundError, ValidationError, InvalidFileType, InternalServerError, InvalidCookieSignature, ERROR_CODE, ElysiaStatus, ElysiaCustomStatusResponse, type SelectiveStatus } from './error'; export type { EphemeralType, CreateEden, ComposeElysiaResponse, ElysiaConfig, SingletonBase, DefinitionBase, RouteBase, Handler, ComposedHandler, InputSchema, LocalHook, MergeSchema, RouteSchema, UnwrapRoute, InternalRoute, HTTPMethod, SchemaValidator, VoidHandler, PreHandler, BodyHandler, OptionalHandler, AfterResponseHandler, ErrorHandler, LifeCycleEvent, LifeCycleStore, LifeCycleType, MaybePromise, UnwrapSchema, AnySchema, ModelsToTypes, Checksum, DocumentDecoration, InferContext, InferHandler, ResolvePath, MapResponse, BaseMacro, MacroManager, MacroToProperty, MergeElysiaInstances, MaybeArray, ModelValidator, MetadataBase, UnwrapBodySchema, UnwrapGroupGuardRoute, ModelValidatorError, ExcludeElysiaResponse, SSEPayload, StandaloneInputSchema, MergeStandaloneSchema, MergeTypeModule, GracefulHandler, AfterHandler, InlineHandler, ResolveHandler, TransformHandler, HTTPHeaders, EmptyRouteSchema, ExtractErrorFromHandle } from './types'; export { env } from './universal/env'; export { file, ElysiaFile } from './universal/file'; export type { ElysiaAdapter } from './adapter'; export { TypeSystemPolicy } from '@sinclair/typebox/system'; export type { Static, TSchema } from '@sinclair/typebox';