-
-
Notifications
You must be signed in to change notification settings - Fork 813
Expand file tree
/
Copy pathhandler.ts
More file actions
130 lines (116 loc) · 2.99 KB
/
handler.ts
File metadata and controls
130 lines (116 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
import type { HTTPError, HTTPMethod, HTTPEvent, HTTPHandler } from "h3";
import type { PresetName } from "../presets/index.ts";
import type { OperationObject, OpenAPI3, Extensable } from "../types/openapi-ts.ts";
type MaybeArray<T> = T | T[];
/**
* Route-level metadata attached to event handlers.
*
* @experimental
* @see https://nitro.build/docs/routing
*/
export interface NitroRouteMeta {
openAPI?: OperationObject & {
$global?: Pick<OpenAPI3, "components"> & Extensable;
};
}
interface NitroHandlerCommon {
/**
* HTTP pathname pattern to match.
*
* @example "/test", "/api/:id", "/blog/**"
*/
route: string;
/**
* HTTP method to match.
*/
method?: HTTPMethod;
/**
* Run handler as a middleware before other route handlers.
*/
middleware?: boolean;
/**
* Route metadata (e.g. OpenAPI operation info).
*/
meta?: NitroRouteMeta;
}
/**
* Handler module format.
*
* - `"web"` — standard Web API handler (default).
* - `"node"` — Node.js-style handler, automatically converted to web-compatible.
*/
export type EventHandlerFormat = "web" | "node";
/**
* Event handler registration for build-time bundling.
*
* Handlers are file references that the bundler imports and transforms.
* For runtime-only handlers in development, use {@link NitroDevEventHandler}.
*
* @see https://nitro.build/config#handlers
* @see https://nitro.build/docs/routing
*/
export interface NitroEventHandler extends NitroHandlerCommon {
/**
* Use lazy loading to import handler.
*/
lazy?: boolean;
/**
* Path to event handler.
*/
handler: string;
/**
* Event handler type.
*
* Default is `"web"`. If set to `"node"`, the handler will be converted into a web compatible handler.
*/
format?: EventHandlerFormat;
/**
* Environments to include and bundle this handler.
*
* @example
* ```ts
* env: ["dev", "prod"]
* env: "prerender"
* ```
*/
env?: MaybeArray<"dev" | "prod" | "prerender" | PresetName | (string & {})>;
}
/**
* Development-only event handler with an inline handler function.
*
* These handlers are available only during `nitro dev` and are not
* included in production builds.
*
* @see https://nitro.build/config#devhandlers
*/
export interface NitroDevEventHandler extends NitroHandlerCommon {
/**
* Event handler function.
*/
handler: HTTPHandler;
}
type MaybePromise<T> = T | Promise<T>;
/**
* Custom error handler function signature.
*
* Receives the error, the H3 event, and a helper object containing the
* `defaultHandler` for fallback rendering.
*
* @see https://nitro.build/config#errorhandler
*/
export type NitroErrorHandler = (
error: HTTPError,
event: HTTPEvent,
_: {
defaultHandler: (
error: HTTPError,
event: HTTPEvent,
opts?: { silent?: boolean; json?: boolean }
) => MaybePromise<{
status?: number;
statusText?: string;
headers?: HeadersInit;
body?: string | Record<string, any>;
}>;
}
) => MaybePromise<Response | void>;