UNPKG

elysia

Version:

Ergonomic Framework for Human

135 lines (134 loc) 5.01 kB
import type { Server } from 'bun'; import type { Cookie, ElysiaCookie } from './cookies'; import type { StatusMap, InvertedStatusMap, redirect as Redirect } from './utils'; import { ElysiaCustomStatusResponse, error } from './error'; import type { RouteSchema, Prettify, ResolvePath, SingletonBase, HTTPHeaders } from './types'; type InvertedStatusMapKey = keyof InvertedStatusMap; type WithoutNullableKeys<Type> = { [Key in keyof Type]-?: NonNullable<Type[Key]>; }; export type ErrorContext<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = { decorator: {}; store: {}; derive: {}; resolve: {}; }, Path extends string | undefined = undefined> = Prettify<{ body: Route['body']; query: undefined extends Route['query'] ? Record<string, string | undefined> : Route['query']; params: undefined extends Route['params'] ? Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : { [key in string]: string; } : Route['params']; headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers']; cookie: undefined extends Route['cookie'] ? Record<string, Cookie<string | undefined>> : Record<string, Cookie<string | undefined>> & Prettify<WithoutNullableKeys<{ [key in keyof Route['cookie']]: Cookie<Route['cookie'][key]>; }>>; server: Server | null; redirect: Redirect; set: { headers: HTTPHeaders; status?: number | keyof StatusMap; redirect?: string; /** * ! Internal Property * * Use `Context.cookie` instead */ cookie?: Record<string, ElysiaCookie>; }; /** * Path extracted from incoming URL * * Represent a value extracted from URL * * @example '/id/9' */ path: string; /** * Path as registered to router * * Represent a path registered to a router, not a URL * * @example '/id/:id' */ route: string; request: Request; store: Singleton['store']; response: Route['response']; } & Singleton['decorator'] & Singleton['derive'] & Singleton['resolve']>; export type Context<in out Route extends RouteSchema = {}, in out Singleton extends SingletonBase = { decorator: {}; store: {}; derive: {}; resolve: {}; }, Path extends string | undefined = undefined> = Prettify<{ body: Route['body']; query: undefined extends Route['query'] ? Record<string, string> : Route['query']; params: undefined extends Route['params'] ? undefined extends Path ? Record<string, string> : Path extends `${string}/${':' | '*'}${string}` ? ResolvePath<Path> : never : Route['params']; headers: undefined extends Route['headers'] ? Record<string, string | undefined> : Route['headers']; cookie: undefined extends Route['cookie'] ? Record<string, Cookie<string | undefined>> : Record<string, Cookie<string | undefined>> & Prettify<WithoutNullableKeys<{ [key in keyof Route['cookie']]: Cookie<Route['cookie'][key]>; }>>; server: Server | null; redirect: Redirect; set: { headers: HTTPHeaders; status?: number | keyof StatusMap; /** * @deprecated Use inline redirect instead * * @example Migration example * ```ts * new Elysia() * .get(({ redirect }) => redirect('/')) * ``` */ redirect?: string; /** * ! Internal Property * * Use `Context.cookie` instead */ cookie?: Record<string, ElysiaCookie>; }; /** * Path extracted from incoming URL * * Represent a value extracted from URL * * @example '/id/9' */ path: string; /** * Path as registered to router * * Represent a path registered to a router, not a URL * * @example '/id/:id' */ route: string; request: Request; store: Singleton['store']; response?: never extends keyof Route['response'] ? unknown : Route['response'][keyof Route['response']]; } & ({} extends Route['response'] ? { error: typeof error; } : { error: <const Code extends keyof Route['response'] | InvertedStatusMap[Extract<InvertedStatusMapKey, keyof Route['response']>], const T extends Code extends keyof Route['response'] ? Route['response'][Code] : Code extends keyof StatusMap ? Route['response'][StatusMap[Code]] : never>(code: Code, response: T) => ElysiaCustomStatusResponse<Code, T>; }) & Singleton['decorator'] & Singleton['derive'] & Singleton['resolve']>; export type PreContext<in out Singleton extends SingletonBase = { decorator: {}; store: {}; derive: {}; resolve: {}; }> = Prettify<{ store: Singleton['store']; request: Request; redirect: Redirect; server: Server | null; set: { headers: HTTPHeaders; status?: number; redirect?: string; }; error: typeof error; } & Singleton['decorator']>; export {};