h3 0.7.17 → 0.7.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -2,230 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- const ufo = require('ufo');
6
- const radix3 = require('radix3');
7
- const destr = require('destr');
8
- const cookieEs = require('cookie-es');
9
-
10
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e["default"] : e; }
11
-
12
- const destr__default = /*#__PURE__*/_interopDefaultLegacy(destr);
13
-
14
- function getQuery(event) {
15
- return ufo.getQuery(event.req.url || "");
16
- }
17
- const useQuery = getQuery;
18
- function getRouterParams(event) {
19
- return event.context.params || {};
20
- }
21
- function getRouterParam(event, name) {
22
- const params = getRouterParams(event);
23
- return params[name];
24
- }
25
- function getMethod(event, defaultMethod = "GET") {
26
- return (event.req.method || defaultMethod).toUpperCase();
27
- }
28
- const useMethod = getMethod;
29
- function isMethod(event, expected, allowHead) {
30
- const method = getMethod(event);
31
- if (allowHead && method === "HEAD") {
32
- return true;
33
- }
34
- if (typeof expected === "string") {
35
- if (method === expected) {
36
- return true;
37
- }
38
- } else if (expected.includes(method)) {
39
- return true;
40
- }
41
- return false;
42
- }
43
- function assertMethod(event, expected, allowHead) {
44
- if (!isMethod(event, expected, allowHead)) {
45
- throw createError({
46
- statusCode: 405,
47
- statusMessage: "HTTP method is not allowed."
48
- });
49
- }
50
- }
51
- function getRequestHeaders(event) {
52
- return event.req.headers;
53
- }
54
- const getHeaders = getRequestHeaders;
55
- function getRequestHeader(event, name) {
56
- const headers = getRequestHeaders(event);
57
- const value = headers[name.toLowerCase()];
58
- return value;
59
- }
60
- const getHeader = getRequestHeader;
61
-
62
- const RawBodySymbol = Symbol("h3RawBody");
63
- const ParsedBodySymbol = Symbol("h3RawBody");
64
- const PayloadMethods = ["PATCH", "POST", "PUT", "DELETE"];
65
- function readRawBody(event, encoding = "utf-8") {
66
- assertMethod(event, PayloadMethods);
67
- if (RawBodySymbol in event.req) {
68
- const promise2 = Promise.resolve(event.req[RawBodySymbol]);
69
- return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
70
- }
71
- if ("body" in event.req) {
72
- return Promise.resolve(event.req.body);
73
- }
74
- const promise = event.req[RawBodySymbol] = new Promise((resolve, reject) => {
75
- const bodyData = [];
76
- event.req.on("error", (err) => {
77
- reject(err);
78
- }).on("data", (chunk) => {
79
- bodyData.push(chunk);
80
- }).on("end", () => {
81
- resolve(Buffer.concat(bodyData));
82
- });
83
- });
84
- return encoding ? promise.then((buff) => buff.toString(encoding)) : promise;
85
- }
86
- const useRawBody = readRawBody;
87
- async function readBody(event) {
88
- if (ParsedBodySymbol in event.req) {
89
- return event.req[ParsedBodySymbol];
90
- }
91
- const body = await readRawBody(event);
92
- if (event.req.headers["content-type"] === "application/x-www-form-urlencoded") {
93
- const parsedForm = Object.fromEntries(new URLSearchParams(body));
94
- return parsedForm;
95
- }
96
- const json = destr__default(body);
97
- event.req[ParsedBodySymbol] = json;
98
- return json;
99
- }
100
- const useBody = readBody;
101
-
102
- function handleCacheHeaders(event, opts) {
103
- const cacheControls = ["public"].concat(opts.cacheControls || []);
104
- let cacheMatched = false;
105
- if (opts.maxAge !== void 0) {
106
- cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
107
- }
108
- if (opts.modifiedTime) {
109
- const modifiedTime = new Date(opts.modifiedTime);
110
- const ifModifiedSince = event.req.headers["if-modified-since"];
111
- event.res.setHeader("Last-Modified", modifiedTime.toUTCString());
112
- if (ifModifiedSince) {
113
- if (new Date(ifModifiedSince) >= opts.modifiedTime) {
114
- cacheMatched = true;
115
- }
116
- }
117
- }
118
- if (opts.etag) {
119
- event.res.setHeader("Etag", opts.etag);
120
- const ifNonMatch = event.req.headers["if-none-match"];
121
- if (ifNonMatch === opts.etag) {
122
- cacheMatched = true;
123
- }
124
- }
125
- event.res.setHeader("Cache-Control", cacheControls.join(", "));
126
- if (cacheMatched) {
127
- event.res.statusCode = 304;
128
- event.res.end("");
129
- return true;
130
- }
131
- return false;
132
- }
133
-
134
- const MIMES = {
135
- html: "text/html",
136
- json: "application/json"
137
- };
138
-
139
- const defer = typeof setImmediate !== "undefined" ? setImmediate : (fn) => fn();
140
- function send(event, data, type) {
141
- if (type) {
142
- defaultContentType(event, type);
143
- }
144
- return new Promise((resolve) => {
145
- defer(() => {
146
- event.res.end(data);
147
- resolve(void 0);
148
- });
149
- });
150
- }
151
- function defaultContentType(event, type) {
152
- if (type && !event.res.getHeader("Content-Type")) {
153
- event.res.setHeader("Content-Type", type);
154
- }
155
- }
156
- function sendRedirect(event, location, code = 302) {
157
- const encodedLoc = encodeURI(location);
158
- event.res.statusCode = code;
159
- event.res.setHeader("Location", encodedLoc);
160
- const html = `<!DOCTYPE html>
161
- <html>
162
- <head><meta http-equiv="refresh" content="0; url=${encodedLoc}"></head>
163
- <body>Redirecting to <a href=${JSON.stringify(encodedLoc)}>${encodedLoc}</a></body>
164
- </html>`;
165
- return send(event, html, MIMES.html);
166
- }
167
- function getResponseHeaders(event) {
168
- return event.res.getHeaders();
169
- }
170
- function getResponseHeader(event, name) {
171
- return event.res.getHeader(name);
172
- }
173
- function setResponseHeaders(event, headers) {
174
- Object.entries(headers).forEach(([name, value]) => event.res.setHeader(name, value));
175
- }
176
- const setHeaders = setResponseHeaders;
177
- function setResponseHeader(event, name, value) {
178
- event.res.setHeader(name, value);
179
- }
180
- const setHeader = setResponseHeader;
181
- function appendResponseHeaders(event, headers) {
182
- Object.entries(headers).forEach(([name, value]) => appendResponseHeader(event, name, value));
183
- }
184
- const appendHeaders = appendResponseHeaders;
185
- function appendResponseHeader(event, name, value) {
186
- let current = event.res.getHeader(name);
187
- if (!current) {
188
- event.res.setHeader(name, value);
189
- return;
190
- }
191
- if (!Array.isArray(current)) {
192
- current = [current.toString()];
193
- }
194
- event.res.setHeader(name, current.concat(value));
195
- }
196
- const appendHeader = appendResponseHeader;
197
- function isStream(data) {
198
- return data && typeof data === "object" && typeof data.pipe === "function" && typeof data.on === "function";
199
- }
200
- function sendStream(event, data) {
201
- return new Promise((resolve, reject) => {
202
- data.pipe(event.res);
203
- data.on("end", () => resolve(void 0));
204
- data.on("error", (error) => reject(createError(error)));
205
- });
206
- }
207
-
208
- function parseCookies(event) {
209
- return cookieEs.parse(event.req.headers.cookie || "");
210
- }
211
- const useCookies = parseCookies;
212
- function getCookie(event, name) {
213
- return parseCookies(event)[name];
214
- }
215
- const useCookie = getCookie;
216
- function setCookie(event, name, value, serializeOptions) {
217
- const cookieStr = cookieEs.serialize(name, value, {
218
- path: "/",
219
- ...serializeOptions
220
- });
221
- appendHeader(event, "Set-Cookie", cookieStr);
222
- }
223
- function deleteCookie(event, name, serializeOptions) {
224
- setCookie(event, name, "", {
225
- ...serializeOptions,
226
- maxAge: 0
227
- });
228
- }
5
+ require('destr');
6
+ require('ufo');
7
+ require('cookie-es');
229
8
 
230
9
  class H3Error extends Error {
231
10
  constructor() {
@@ -274,41 +53,142 @@ function createError(input) {
274
53
  }
275
54
  return err;
276
55
  }
277
- function sendError(event, error, debug) {
278
- if (event.res.writableEnded) {
279
- return;
56
+ function isError(input) {
57
+ return input?.constructor?.__h3_error__ === true;
58
+ }
59
+
60
+ const MIMES = {
61
+ html: "text/html",
62
+ json: "application/json"
63
+ };
64
+
65
+ typeof setImmediate !== "undefined" ? setImmediate : (fn) => fn();
66
+
67
+ class H3Headers {
68
+ constructor(init) {
69
+ if (!init) {
70
+ this._headers = {};
71
+ } else if (Array.isArray(init)) {
72
+ this._headers = Object.fromEntries(init.map(([key, value]) => [key.toLowerCase(), value]));
73
+ } else if (init && "append" in init) {
74
+ this._headers = Object.fromEntries([...init.entries()]);
75
+ } else {
76
+ this._headers = Object.fromEntries(Object.entries(init).map(([key, value]) => [key.toLowerCase(), value]));
77
+ }
280
78
  }
281
- const h3Error = isError(error) ? error : createError(error);
282
- const responseBody = {
283
- statusCode: h3Error.statusCode,
284
- statusMessage: h3Error.statusMessage,
285
- stack: [],
286
- data: h3Error.data
287
- };
288
- if (debug) {
289
- responseBody.stack = (h3Error.stack || "").split("\n").map((l) => l.trim());
79
+ append(name, value) {
80
+ const _name = name.toLowerCase();
81
+ this.set(_name, [this.get(_name), value].filter(Boolean).join(", "));
82
+ }
83
+ delete(name) {
84
+ delete this._headers[name.toLowerCase()];
85
+ }
86
+ get(name) {
87
+ return this._headers[name.toLowerCase()];
88
+ }
89
+ has(name) {
90
+ return name.toLowerCase() in this._headers;
91
+ }
92
+ set(name, value) {
93
+ this._headers[name.toLowerCase()] = String(value);
290
94
  }
291
- if (event.res.writableEnded) {
292
- return;
95
+ forEach(callbackfn) {
96
+ Object.entries(this._headers).forEach(([key, value]) => callbackfn(value, key, this));
293
97
  }
294
- event.res.statusCode = h3Error.statusCode;
295
- event.res.statusMessage = h3Error.statusMessage;
296
- event.res.setHeader("Content-Type", MIMES.json);
297
- event.res.end(JSON.stringify(responseBody, null, 2));
298
98
  }
299
- function isError(input) {
300
- return input?.constructor?.__h3_error__ === true;
99
+
100
+ class H3Response {
101
+ constructor(body = null, init = {}) {
102
+ this.body = null;
103
+ this.type = "default";
104
+ this.bodyUsed = false;
105
+ this.headers = new H3Headers(init.headers);
106
+ this.status = init.status ?? 200;
107
+ this.statusText = init.statusText || "";
108
+ this.redirected = !!init.status && [301, 302, 307, 308].includes(init.status);
109
+ this._body = body;
110
+ this.url = "";
111
+ this.ok = this.status < 300 && this.status > 199;
112
+ }
113
+ clone() {
114
+ return new H3Response(this.body, {
115
+ headers: this.headers,
116
+ status: this.status,
117
+ statusText: this.statusText
118
+ });
119
+ }
120
+ arrayBuffer() {
121
+ return Promise.resolve(this._body);
122
+ }
123
+ blob() {
124
+ return Promise.resolve(this._body);
125
+ }
126
+ formData() {
127
+ return Promise.resolve(this._body);
128
+ }
129
+ json() {
130
+ return Promise.resolve(this._body);
131
+ }
132
+ text() {
133
+ return Promise.resolve(this._body);
134
+ }
301
135
  }
302
136
 
303
- const defineHandler = (handler) => handler;
304
- const defineHandle = defineHandler;
305
- const defineMiddleware = (middleware) => middleware;
306
- function promisifyHandler(handler) {
307
- return function(req, res) {
308
- return callHandler(handler, req, res);
309
- };
137
+ class H3Event {
138
+ constructor(req, res) {
139
+ this["__is_event__"] = true;
140
+ this.context = {};
141
+ this.req = req;
142
+ this.res = res;
143
+ this.event = this;
144
+ req.event = this;
145
+ req.context = this.context;
146
+ req.req = req;
147
+ req.res = res;
148
+ res.event = this;
149
+ res.res = res;
150
+ res.req = res.req || {};
151
+ res.req.res = res;
152
+ res.req.req = req;
153
+ }
154
+ respondWith(r) {
155
+ Promise.resolve(r).then((_response) => {
156
+ if (this.res.writableEnded) {
157
+ return;
158
+ }
159
+ const response = _response instanceof H3Response ? _response : new H3Response(_response);
160
+ response.headers.forEach((value, key) => {
161
+ this.res.setHeader(key, value);
162
+ });
163
+ if (response.status) {
164
+ this.res.statusCode = response.status;
165
+ }
166
+ if (response.statusText) {
167
+ this.res.statusMessage = response.statusText;
168
+ }
169
+ if (response.redirected) {
170
+ this.res.setHeader("Location", response.url);
171
+ }
172
+ if (!response._body) {
173
+ return this.res.end();
174
+ }
175
+ if (typeof response._body === "string" || "buffer" in response._body || "byteLength" in response._body) {
176
+ return this.res.end(response._body);
177
+ }
178
+ if (!response.headers.has("content-type")) {
179
+ response.headers.set("content-type", MIMES.json);
180
+ }
181
+ this.res.end(JSON.stringify(response._body));
182
+ });
183
+ }
184
+ }
185
+ function isEvent(input) {
186
+ return "__is_event__" in input;
187
+ }
188
+ function createEvent(req, res) {
189
+ return new H3Event(req, res);
310
190
  }
311
- const promisifyHandle = promisifyHandler;
191
+
312
192
  function callHandler(handler, req, res) {
313
193
  const isMiddleware = handler.length > 2;
314
194
  return new Promise((resolve, reject) => {
@@ -332,36 +212,38 @@ function callHandler(handler, req, res) {
332
212
  }
333
213
  });
334
214
  }
335
- function defineLazyHandler(handler, promisify) {
336
- let _promise;
337
- const resolve = () => {
338
- if (!_promise) {
339
- _promise = Promise.resolve(handler()).then((r) => promisify ? promisifyHandler(r.default || r) : r.default || r);
340
- }
341
- return _promise;
342
- };
343
- return function(req, res) {
344
- return resolve().then((h) => h(req, res));
345
- };
346
- }
347
- const lazyHandle = defineLazyHandler;
348
- function useBase(base, handler) {
349
- base = ufo.withoutTrailingSlash(base);
350
- if (!base) {
351
- return handler;
352
- }
353
- return function(req, res) {
354
- req.originalUrl = req.originalUrl || req.url || "/";
355
- req.url = ufo.withoutBase(req.url || "/", base);
356
- return handler(req, res);
357
- };
358
- }
359
215
 
360
216
  function defineEventHandler(handler) {
361
217
  handler.__is_handler__ = true;
362
218
  return handler;
363
219
  }
364
220
  const eventHandler = defineEventHandler;
221
+ function isEventHandler(input) {
222
+ return "__is_handler__" in input;
223
+ }
224
+ function toEventHandler(handler) {
225
+ if (isEventHandler(handler)) {
226
+ return handler;
227
+ }
228
+ if (typeof handler !== "function") {
229
+ throw new TypeError("Invalid handler. It should be a function:", handler);
230
+ }
231
+ return eventHandler((event) => {
232
+ return callHandler(handler, event.req, event.res);
233
+ });
234
+ }
235
+ function dynamicEventHandler(initial) {
236
+ let current = initial;
237
+ const wrapper = eventHandler((event) => {
238
+ if (current) {
239
+ return current(event);
240
+ }
241
+ });
242
+ wrapper.set = (handler) => {
243
+ current = handler;
244
+ };
245
+ return wrapper;
246
+ }
365
247
  function defineLazyEventHandler(factory) {
366
248
  let _promise;
367
249
  let _resolved;
@@ -389,274 +271,16 @@ function defineLazyEventHandler(factory) {
389
271
  });
390
272
  }
391
273
  const lazyEventHandler = defineLazyEventHandler;
392
- function dynamicEventHandler(initial) {
393
- let current = initial;
394
- const wrapper = eventHandler((event) => {
395
- if (current) {
396
- return current(event);
397
- }
398
- });
399
- wrapper.set = (handler) => {
400
- current = handler;
401
- };
402
- return wrapper;
403
- }
404
- function isEventHandler(input) {
405
- return "__is_handler__" in input;
406
- }
407
- function toEventHandler(handler) {
408
- if (isEventHandler(handler)) {
409
- return handler;
410
- }
411
- if (typeof handler !== "function") {
412
- throw new TypeError("Invalid handler. It should be a function:", handler);
413
- }
414
- return eventHandler((event) => {
415
- return callHandler(handler, event.req, event.res);
416
- });
417
- }
418
- function createEvent(req, res) {
419
- const event = {
420
- __is_event__: true,
421
- req,
422
- res,
423
- context: {}
424
- };
425
- event.event = event;
426
- req.event = event;
427
- req.context = event.context;
428
- req.req = req;
429
- req.res = res;
430
- res.event = event;
431
- res.res = res;
432
- res.req = res.req || {};
433
- res.req.res = res;
434
- res.req.req = req;
435
- return event;
436
- }
437
- function isEvent(input) {
438
- return "__is_event__" in input;
439
- }
440
-
441
- function createApp(options = {}) {
442
- const stack = [];
443
- const handler = createAppEventHandler(stack, options);
444
- const nodeHandler = async function(req, res) {
445
- const event = createEvent(req, res);
446
- try {
447
- await handler(event);
448
- } catch (_error) {
449
- const error = createError(_error);
450
- if (!isError(_error)) {
451
- error.unhandled = true;
452
- }
453
- if (options.onError) {
454
- await options.onError(error, event);
455
- } else {
456
- if (error.unhandled || error.fatal) {
457
- console.error("[h3]", error.fatal ? "[fatal]" : "[unhandled]", error);
458
- }
459
- await sendError(event, error, !!options.debug);
460
- }
461
- }
462
- };
463
- const app = nodeHandler;
464
- app.nodeHandler = nodeHandler;
465
- app.stack = stack;
466
- app.handler = handler;
467
- app.use = (arg1, arg2, arg3) => use(app, arg1, arg2, arg3);
468
- return app;
469
- }
470
- function use(app, arg1, arg2, arg3) {
471
- if (Array.isArray(arg1)) {
472
- arg1.forEach((i) => use(app, i, arg2, arg3));
473
- } else if (Array.isArray(arg2)) {
474
- arg2.forEach((i) => use(app, arg1, i, arg3));
475
- } else if (typeof arg1 === "string") {
476
- app.stack.push(normalizeLayer({ ...arg3, route: arg1, handler: arg2 }));
477
- } else if (typeof arg1 === "function") {
478
- app.stack.push(normalizeLayer({ ...arg2, route: "/", handler: arg1 }));
479
- } else {
480
- app.stack.push(normalizeLayer({ ...arg1 }));
481
- }
482
- return app;
483
- }
484
- function createAppEventHandler(stack, options) {
485
- const spacing = options.debug ? 2 : void 0;
486
- return eventHandler(async (event) => {
487
- event.req.originalUrl = event.req.originalUrl || event.req.url || "/";
488
- const reqUrl = event.req.url || "/";
489
- for (const layer of stack) {
490
- if (layer.route.length > 1) {
491
- if (!reqUrl.startsWith(layer.route)) {
492
- continue;
493
- }
494
- event.req.url = reqUrl.slice(layer.route.length) || "/";
495
- } else {
496
- event.req.url = reqUrl;
497
- }
498
- if (layer.match && !layer.match(event.req.url, event)) {
499
- continue;
500
- }
501
- const val = await layer.handler(event);
502
- if (event.res.writableEnded) {
503
- return;
504
- }
505
- const type = typeof val;
506
- if (type === "string") {
507
- return send(event, val, MIMES.html);
508
- } else if (isStream(val)) {
509
- return sendStream(event, val);
510
- } else if (val === null) {
511
- event.res.statusCode = 204;
512
- return send(event);
513
- } else if (type === "object" || type === "boolean" || type === "number") {
514
- if (val.buffer) {
515
- return send(event, val);
516
- } else if (val instanceof Error) {
517
- throw createError(val);
518
- } else {
519
- return send(event, JSON.stringify(val, null, spacing), MIMES.json);
520
- }
521
- }
522
- }
523
- if (!event.res.writableEnded) {
524
- throw createError({ statusCode: 404, statusMessage: "Not Found" });
525
- }
526
- });
527
- }
528
- function normalizeLayer(input) {
529
- let handler = input.handler || input.handle;
530
- if (handler.handler) {
531
- handler = handler.handler;
532
- }
533
- if (input.lazy) {
534
- handler = lazyEventHandler(handler);
535
- } else if (!isEventHandler(handler)) {
536
- handler = toEventHandler(handler);
537
- }
538
- return {
539
- route: ufo.withoutTrailingSlash(input.route),
540
- match: input.match,
541
- handler
542
- };
543
- }
544
-
545
- const RouterMethods = ["connect", "delete", "get", "head", "options", "post", "put", "trace", "patch"];
546
- function createRouter() {
547
- const _router = radix3.createRouter({});
548
- const routes = {};
549
- const router = {};
550
- const addRoute = (path, handler, method) => {
551
- let route = routes[path];
552
- if (!route) {
553
- routes[path] = route = { handlers: {} };
554
- _router.insert(path, route);
555
- }
556
- if (Array.isArray(method)) {
557
- method.forEach((m) => addRoute(path, handler, m));
558
- } else {
559
- route.handlers[method] = toEventHandler(handler);
560
- }
561
- return router;
562
- };
563
- router.use = router.add = (path, handler, method) => addRoute(path, handler, method || "all");
564
- for (const method of RouterMethods) {
565
- router[method] = (path, handle) => router.add(path, handle, method);
566
- }
567
- router.handler = eventHandler((event) => {
568
- let path = event.req.url || "/";
569
- const queryUrlIndex = path.lastIndexOf("?");
570
- if (queryUrlIndex > -1) {
571
- path = path.substring(0, queryUrlIndex);
572
- }
573
- const matched = _router.lookup(path);
574
- if (!matched) {
575
- throw createError({
576
- statusCode: 404,
577
- name: "Not Found",
578
- statusMessage: `Cannot find any route matching ${event.req.url || "/"}.`
579
- });
580
- }
581
- const method = (event.req.method || "get").toLowerCase();
582
- const handler = matched.handlers[method] || matched.handlers.all;
583
- if (!handler) {
584
- throw createError({
585
- statusCode: 405,
586
- name: "Method Not Allowed",
587
- statusMessage: `Method ${method} is not allowed on this route.`
588
- });
589
- }
590
- const params = matched.params || {};
591
- event.event.context.params = params;
592
- event.req.context.params = params;
593
- return handler(event);
594
- });
595
- return router;
596
- }
597
274
 
598
- exports.H3Error = H3Error;
599
- exports.MIMES = MIMES;
600
- exports.appendHeader = appendHeader;
601
- exports.appendHeaders = appendHeaders;
602
- exports.appendResponseHeader = appendResponseHeader;
603
- exports.appendResponseHeaders = appendResponseHeaders;
604
- exports.assertMethod = assertMethod;
605
- exports.callHandler = callHandler;
606
- exports.createApp = createApp;
607
- exports.createAppEventHandler = createAppEventHandler;
608
- exports.createError = createError;
275
+ exports.H3Event = H3Event;
276
+ exports.H3Headers = H3Headers;
277
+ exports.H3Response = H3Response;
609
278
  exports.createEvent = createEvent;
610
- exports.createRouter = createRouter;
611
- exports.defaultContentType = defaultContentType;
612
279
  exports.defineEventHandler = defineEventHandler;
613
- exports.defineHandle = defineHandle;
614
- exports.defineHandler = defineHandler;
615
280
  exports.defineLazyEventHandler = defineLazyEventHandler;
616
- exports.defineLazyHandler = defineLazyHandler;
617
- exports.defineMiddleware = defineMiddleware;
618
- exports.deleteCookie = deleteCookie;
619
281
  exports.dynamicEventHandler = dynamicEventHandler;
620
282
  exports.eventHandler = eventHandler;
621
- exports.getCookie = getCookie;
622
- exports.getHeader = getHeader;
623
- exports.getHeaders = getHeaders;
624
- exports.getMethod = getMethod;
625
- exports.getQuery = getQuery;
626
- exports.getRequestHeader = getRequestHeader;
627
- exports.getRequestHeaders = getRequestHeaders;
628
- exports.getResponseHeader = getResponseHeader;
629
- exports.getResponseHeaders = getResponseHeaders;
630
- exports.getRouterParam = getRouterParam;
631
- exports.getRouterParams = getRouterParams;
632
- exports.handleCacheHeaders = handleCacheHeaders;
633
- exports.isError = isError;
634
283
  exports.isEvent = isEvent;
635
284
  exports.isEventHandler = isEventHandler;
636
- exports.isMethod = isMethod;
637
- exports.isStream = isStream;
638
285
  exports.lazyEventHandler = lazyEventHandler;
639
- exports.lazyHandle = lazyHandle;
640
- exports.parseCookies = parseCookies;
641
- exports.promisifyHandle = promisifyHandle;
642
- exports.promisifyHandler = promisifyHandler;
643
- exports.readBody = readBody;
644
- exports.readRawBody = readRawBody;
645
- exports.send = send;
646
- exports.sendError = sendError;
647
- exports.sendRedirect = sendRedirect;
648
- exports.sendStream = sendStream;
649
- exports.setCookie = setCookie;
650
- exports.setHeader = setHeader;
651
- exports.setHeaders = setHeaders;
652
- exports.setResponseHeader = setResponseHeader;
653
- exports.setResponseHeaders = setResponseHeaders;
654
286
  exports.toEventHandler = toEventHandler;
655
- exports.use = use;
656
- exports.useBase = useBase;
657
- exports.useBody = useBody;
658
- exports.useCookie = useCookie;
659
- exports.useCookies = useCookies;
660
- exports.useMethod = useMethod;
661
- exports.useQuery = useQuery;
662
- exports.useRawBody = useRawBody;