UNPKG

4.96 kBTypeScriptView Raw
1/// <reference types="bun-types" />
2var Request$1 = Request;
3
4var Response$1 = Response;
5
6var ResponseInit$1 = ResponseInit;
7
8var Headers$1 = Headers;
9
10declare type StaticFileOptions = {
11 /** Max age (in seconds) for the Cache-Control header */
12 maxAge?: number | undefined;
13 /** Include ETag and Last-Modified headers automatically (default: true) */
14 cachingHeaders?: boolean | undefined;
15};
16declare type StaticFileInit = ResponseInit$1 & StaticFileOptions;
17declare class StaticFile {
18 readonly filePath: string;
19 readonly responseInit: ResponseInit$1;
20 readonly options: StaticFileOptions;
21 constructor(filePath: string, init?: StaticFileInit);
22}
23
24declare type BodyStream = Request$1 extends {
25 body: infer T;
26}
27 ? Exclude<T, null>
28 : never;
29declare type BodyAccessorArgs<M> = M extends MethodNoBody
30 ? [ERROR: 'NO_BODY_ALLOWED_FOR_METHOD']
31 : [];
32declare class CustomRequest<M extends string, Params extends string> {
33 request: Request$1;
34 readonly method: M;
35 readonly url: string;
36 readonly headers: Headers$1;
37 readonly path: string;
38 readonly search: string;
39 readonly query: URLSearchParams;
40 readonly params: {
41 [K in Params]: string;
42 };
43 _fallbackBody: BodyStream | undefined;
44 constructor(request: Request$1);
45 get body(): M extends MethodNoBody ? null : BodyStream;
46 get bodyUsed(): boolean;
47 arrayBuffer(..._: BodyAccessorArgs<M>): Promise<ArrayBuffer>;
48 text(..._: BodyAccessorArgs<M>): Promise<string>;
49 json<T = JSONValue>(..._: BodyAccessorArgs<M>): Promise<T>;
50}
51
52declare type MaybePromise<T> = T | Promise<T>;
53declare type MaybeIntersect<T, U> = U extends undefined ? T : T & U;
54declare type JsonPayload = Record<string, unknown> | Array<unknown>;
55declare type ExtractParams<T extends string> = string extends T
56 ? never
57 : T extends `${infer _Start}:${infer Param}/${infer Rest}`
58 ? Param | ExtractParams<Rest>
59 : T extends `${infer _Start}:${infer Param}`
60 ? Param
61 : never;
62declare type Method = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS';
63declare type MethodNoBody = Exclude<Method, 'POST' | 'PUT'>;
64declare type Handler<M extends string, P extends string, RequestContext> = (
65 request: MaybeIntersect<CustomRequest<M, ExtractParams<P>>, RequestContext>,
66) => MaybePromise<
67 Response$1 | StaticFile | JsonPayload | null | undefined | void
68>;
69declare type Route<RequestContext> = [
70 string,
71 string,
72 Handler<string, string, RequestContext>,
73];
74
75declare type JSONValue =
76 | null
77 | boolean
78 | number
79 | string
80 | Array<JSONValue>
81 | {
82 [key: string]: JSONValue;
83 };
84
85declare type HttpErrorInit = {
86 status: number;
87 message?: string;
88};
89declare class HttpError extends Error {
90 readonly status: number;
91 constructor(status: number, message?: string, options?: ErrorOptions);
92 constructor(init: HttpErrorInit, options?: ErrorOptions);
93 get name(): string;
94 get [Symbol.toStringTag](): string;
95}
96
97declare class CustomResponse extends Response$1 {
98 static file(filePath: string, init?: StaticFileInit): StaticFile;
99}
100
101declare const createApplication: <
102 CtxGetter extends (request: Request) => object | undefined = (
103 request: Request,
104 ) => undefined,
105>(applicationOptions?: {
106 bodyParserMaxBufferSize?: number;
107 errorHandler?: (error: Error) => MaybePromise<Response>;
108 root?: string;
109 allowStaticFrom?: string[];
110 serveFile?: (params: {
111 filePath: string;
112 fullFilePath: string;
113 status: number;
114 statusText: string;
115 headers: Headers;
116 options: StaticFileOptions;
117 }) => Promise<Response | null>;
118 getContext?: CtxGetter;
119}) => {
120 defineRoutes: (
121 fn: (app: {
122 get: <P extends string>(
123 path: P,
124 handler: Handler<'GET', P, ReturnType<CtxGetter>>,
125 ) => Route<ReturnType<CtxGetter>>;
126 post: <P_1 extends string>(
127 path: P_1,
128 handler: Handler<'POST', P_1, ReturnType<CtxGetter>>,
129 ) => Route<ReturnType<CtxGetter>>;
130 put: <P_2 extends string>(
131 path: P_2,
132 handler: Handler<'PUT', P_2, ReturnType<CtxGetter>>,
133 ) => Route<ReturnType<CtxGetter>>;
134 delete: <P_3 extends string>(
135 path: P_3,
136 handler: Handler<'DELETE', P_3, ReturnType<CtxGetter>>,
137 ) => Route<ReturnType<CtxGetter>>;
138 route: <
139 M extends
140 | (string & {})
141 | ('GET' | 'POST' | 'PUT' | 'DELETE' | 'HEAD' | 'OPTIONS' | '*'),
142 P_4 extends string,
143 >(
144 method: M,
145 path: P_4,
146 handler: Handler<Uppercase<M>, P_4, ReturnType<CtxGetter>>,
147 ) => Route<ReturnType<CtxGetter>>;
148 }) => Route<ReturnType<CtxGetter>>[],
149 ) => Route<ReturnType<CtxGetter>>[];
150 createRequestHandler: (
151 ...routeLists: Route<ReturnType<CtxGetter>>[][]
152 ) => (request: Request) => Promise<Response>;
153 attachRoutes: (
154 ...routeLists: Route<ReturnType<CtxGetter>>[][]
155 ) => (request: Request) => Promise<Response>;
156};
157
158export {
159 HttpError,
160 Request$1 as Request,
161 CustomResponse as Response,
162 createApplication,
163};
164
\No newline at end of file