elysia
Version:
Ergonomic Framework for Human
131 lines (130 loc) • 4.33 kB
TypeScript
import type { Serve, ListenCallback } from '../universal/server';
import type { AnyElysia } from '..';
import type { Context } from '../context';
import type { Sucrose } from '../sucrose';
import type { Prettify, AnyLocalHook, MaybePromise } from '../types';
import type { AnyWSLocalHook } from '../ws/types';
export interface ElysiaAdapter {
name: string;
listen(app: AnyElysia): (options: string | number | Partial<Serve>, callback?: ListenCallback) => void;
/**
* Stop server from serving
*
* ---
* @example
* ```typescript
* app.stop()
* ```
*
* @example
* ```typescript
* app.stop(true) // Abruptly any requests inflight
* ```
*/
stop?(app: AnyElysia, closeActiveConnections?: boolean): Promise<void>;
isWebStandard?: boolean;
handler: {
/**
* Map return response on every case
*/
mapResponse(response: unknown, set: Context['set'], ...params: unknown[]): unknown;
/**
* Map response on truthy value
*/
mapEarlyResponse(response: unknown, set: Context['set'], ...params: unknown[]): unknown;
/**
* Map response without cookie, status or headers
*/
mapCompactResponse(response: unknown, ...params: unknown[]): unknown;
/**
* Compile inline to value
*
* @example
* ```ts
* Elysia().get('/', 'static')
* ```
*/
createStaticHandler?(handle: unknown, hooks: AnyLocalHook, setHeaders?: Context['set']['headers'], ...params: unknown[]): (() => unknown) | undefined;
/**
* If the runtime support cloning response
*
* eg. Bun.serve({ static })
*/
createNativeStaticHandler?(handle: unknown, hooks: AnyLocalHook, set?: Context['set']): (() => MaybePromise<Response>) | undefined;
};
composeHandler: {
mapResponseContext?: string;
/**
* Declare any variable that will be used in the general handler
*/
declare?(inference: Sucrose.Inference): string | undefined;
/**
* Inject variable to the general handler
*/
inject?: Record<string, unknown>;
/**
* Whether retriving headers should be using webstandard headers
*
* @default false
*/
preferWebstandardHeaders?: boolean;
/**
* fnLiteral for parsing request headers
*
* @declaration
* c.headers: Context headers
*/
headers: string;
/**
* fnLiteral for parsing the request body
*
* @declaration
* c.body: Context body
*/
parser: Prettify<Record<'json' | 'text' | 'urlencoded' | 'arrayBuffer' | 'formData', (isOptional: boolean) => string> & {
declare?: string;
}>;
};
composeGeneralHandler: {
parameters?: string;
error404(hasEventHook: boolean, hasErrorHook: boolean, afterResponseHandler?: string): {
declare: string;
code: string;
};
/**
* fnLiteral of the general handler
*
* @declaration
* c: Context
* p: pathname
*/
createContext(app: AnyElysia): string;
/**
* Inject variable to the general handler
*/
inject?: Record<string, unknown>;
};
composeError: {
declare?: string;
inject?: Record<string, unknown>;
mapResponseContext: string;
validationError: string;
/**
* Handle thrown error which is instance of Error
*
* Despite its name of `unknownError`, it also handle named error like `NOT_FOUND`, `VALIDATION_ERROR`
* It's named `unknownError` because it also catch unknown error
*/
unknownError: string;
};
ws?(app: AnyElysia, path: string, handler: AnyWSLocalHook): unknown;
/**
* Whether or not the runtime or framework the is built on top on has a router
* eg. Bun.serve.routes, uWebSocket
**/
createSystemRouterHandler?(method: string, path: string, hook: AnyLocalHook, app: AnyElysia): void;
/**
* Call thing before compile
*/
beforeCompile?(app: AnyElysia): void;
}