1 |
|
2 |
|
3 | import type { ServerResponse } from 'worktop/response';
|
4 | import type { ServerRequest, Params, Method } from 'worktop/request';
|
5 |
|
6 | type Promisable<T> = Promise<T> | T;
|
7 |
|
8 | type CronHandler = (event: CronEvent) => void;
|
9 | export type ResponseHandler = (event: FetchEvent) => Promisable<Response>;
|
10 | export type FetchHandler = (event: FetchEvent, request?: Request | string) => void;
|
11 |
|
12 | interface CronEvent {
|
13 | type: 'scheduled';
|
14 | |
15 |
|
16 |
|
17 |
|
18 | cron: string;
|
19 | |
20 |
|
21 |
|
22 |
|
23 | scheduledTime: number;
|
24 | |
25 |
|
26 |
|
27 | waitUntil(f: Promisable<any>): void;
|
28 | }
|
29 |
|
30 | declare global {
|
31 | function addEventListener(type: 'fetch', handler: FetchHandler): void;
|
32 | function addEventListener(type: 'scheduled', handler: CronHandler): void;
|
33 | }
|
34 |
|
35 |
|
36 |
|
37 |
|
38 |
|
39 | export function reply(handler: ResponseHandler): FetchHandler;
|
40 |
|
41 |
|
42 |
|
43 |
|
44 |
|
45 |
|
46 | export function listen(handler: ResponseHandler): void;
|
47 |
|
48 | export type Handler<P extends Params = Params> = (req: ServerRequest<P>, res: ServerResponse) => Promisable<Response|void>;
|
49 |
|
50 | export type RouteParams<T extends string> =
|
51 | T extends `${infer Prev}/*/${infer Rest}`
|
52 | ? RouteParams<Prev> & { wild: string } & RouteParams<Rest>
|
53 | : T extends `${string}:${infer P}?/${infer Rest}`
|
54 | ? { [K in P]?: string } & RouteParams<Rest>
|
55 | : T extends `${string}:${infer P}/${infer Rest}`
|
56 | ? { [K in P]: string } & RouteParams<Rest>
|
57 | : T extends `${string}:${infer P}?`
|
58 | ? { [K in P]?: string }
|
59 | : T extends `${string}:${infer P}`
|
60 | ? { [K in P]: string }
|
61 | : T extends `${string}*`
|
62 | ? { wild: string }
|
63 | : {};
|
64 |
|
65 | export declare class Router {
|
66 | add<T extends RegExp>(method: Method, route: T, handler: Handler<Params>): void;
|
67 | add<T extends string>(method: Method, route: T, handler: Handler<RouteParams<T>>): void;
|
68 | run(event: FetchEvent): Promise<Response>;
|
69 | onerror(req: ServerRequest, res: ServerResponse, status?: number, error?: Error): Promisable<Response>;
|
70 | prepare?(req: Omit<ServerRequest, 'params'>, res: ServerResponse): Promisable<Response|void>;
|
71 | }
|
72 |
|
73 |
|
74 | export declare var STATUS_CODES: Record<string|number, string>;
|
75 |
|
76 |
|
77 |
|
78 |
|
79 | export function compose<P extends Params = Params>(...handlers: Handler<P>[]): Handler<P>;
|