h3 0.5.2 → 0.5.5
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 +146 -111
- package/dist/index.d.ts +11 -3
- package/dist/index.mjs +145 -113
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -11,114 +11,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
|
|
|
11
11
|
|
|
12
12
|
const destr__default = /*#__PURE__*/_interopDefaultLegacy(destr);
|
|
13
13
|
|
|
14
|
-
const defineHandler = (handler) => handler;
|
|
15
|
-
const defineHandle = defineHandler;
|
|
16
|
-
const defineMiddleware = (middleware) => middleware;
|
|
17
|
-
function promisifyHandler(handler) {
|
|
18
|
-
return function(req, res) {
|
|
19
|
-
return callHandler(handler, req, res);
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
const promisifyHandle = promisifyHandler;
|
|
23
|
-
function callHandler(handler, req, res) {
|
|
24
|
-
return new Promise((resolve, reject) => {
|
|
25
|
-
const next = (err) => err ? reject(err) : resolve(void 0);
|
|
26
|
-
try {
|
|
27
|
-
return resolve(handler(req, res, next));
|
|
28
|
-
} catch (err) {
|
|
29
|
-
next(err);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
function defineLazyHandler(handler, promisify) {
|
|
34
|
-
let _promise;
|
|
35
|
-
const resolve = () => {
|
|
36
|
-
if (!_promise) {
|
|
37
|
-
_promise = Promise.resolve(handler()).then((r) => promisify ? promisifyHandler(r.default || r) : r.default || r);
|
|
38
|
-
}
|
|
39
|
-
return _promise;
|
|
40
|
-
};
|
|
41
|
-
return function(req, res) {
|
|
42
|
-
return resolve().then((h) => h(req, res));
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
const lazyHandle = defineLazyHandler;
|
|
46
|
-
function useBase(base, handler) {
|
|
47
|
-
base = ufo.withoutTrailingSlash(base);
|
|
48
|
-
if (!base) {
|
|
49
|
-
return handler;
|
|
50
|
-
}
|
|
51
|
-
return function(req, res) {
|
|
52
|
-
req.originalUrl = req.originalUrl || req.url || "/";
|
|
53
|
-
req.url = ufo.withoutBase(req.url || "/", base);
|
|
54
|
-
return handler(req, res);
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
function defineEventHandler(handler) {
|
|
59
|
-
handler.__is_handler__ = true;
|
|
60
|
-
return handler;
|
|
61
|
-
}
|
|
62
|
-
function defineLazyEventHandler(factory) {
|
|
63
|
-
let _promise;
|
|
64
|
-
let _resolved;
|
|
65
|
-
const resolveHandler = () => {
|
|
66
|
-
if (_resolved) {
|
|
67
|
-
return Promise.resolve(_resolved);
|
|
68
|
-
}
|
|
69
|
-
if (!_promise) {
|
|
70
|
-
_promise = Promise.resolve(factory()).then((r) => {
|
|
71
|
-
const handler = r.default || r;
|
|
72
|
-
if (typeof handler !== "function") {
|
|
73
|
-
throw new TypeError("Invalid lazy handler result. It should be a function:", handler);
|
|
74
|
-
}
|
|
75
|
-
_resolved = toEventHandler(r.default || r);
|
|
76
|
-
return _resolved;
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
return _promise;
|
|
80
|
-
};
|
|
81
|
-
return defineEventHandler((event) => {
|
|
82
|
-
if (_resolved) {
|
|
83
|
-
return _resolved(event);
|
|
84
|
-
}
|
|
85
|
-
return resolveHandler().then((handler) => handler(event));
|
|
86
|
-
});
|
|
87
|
-
}
|
|
88
|
-
function isEventHandler(input) {
|
|
89
|
-
return "__is_handler__" in input;
|
|
90
|
-
}
|
|
91
|
-
function toEventHandler(handler) {
|
|
92
|
-
if (isEventHandler(handler)) {
|
|
93
|
-
return handler;
|
|
94
|
-
}
|
|
95
|
-
if (typeof handler !== "function") {
|
|
96
|
-
throw new TypeError("Invalid handler. It should be a function:", handler);
|
|
97
|
-
}
|
|
98
|
-
return defineEventHandler((event) => {
|
|
99
|
-
return callHandler(handler, event.req, event.res);
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
function createEvent(req, res) {
|
|
103
|
-
const event = {
|
|
104
|
-
__is_event__: true,
|
|
105
|
-
req,
|
|
106
|
-
res
|
|
107
|
-
};
|
|
108
|
-
event.event = event;
|
|
109
|
-
req.event = event;
|
|
110
|
-
req.req = req;
|
|
111
|
-
req.res = res;
|
|
112
|
-
res.event = event;
|
|
113
|
-
res.res = res;
|
|
114
|
-
res.req.res = res;
|
|
115
|
-
res.req.req = req;
|
|
116
|
-
return event;
|
|
117
|
-
}
|
|
118
|
-
function isEvent(input) {
|
|
119
|
-
return "__is_event__" in input;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
14
|
function useQuery(event) {
|
|
123
15
|
return ufo.getQuery(event.req.url || "");
|
|
124
16
|
}
|
|
@@ -177,6 +69,10 @@ async function useBody(event) {
|
|
|
177
69
|
return event.req[ParsedBodySymbol];
|
|
178
70
|
}
|
|
179
71
|
const body = await useRawBody(event);
|
|
72
|
+
if (event.req.headers["content-type"] === "application/x-www-form-urlencoded") {
|
|
73
|
+
const parsedForm = Object.fromEntries(new URLSearchParams(body));
|
|
74
|
+
return parsedForm;
|
|
75
|
+
}
|
|
180
76
|
const json = destr__default(body);
|
|
181
77
|
event.req[ParsedBodySymbol] = json;
|
|
182
78
|
return json;
|
|
@@ -297,6 +193,142 @@ function isError(input) {
|
|
|
297
193
|
return input instanceof H3Error;
|
|
298
194
|
}
|
|
299
195
|
|
|
196
|
+
const defineHandler = (handler) => handler;
|
|
197
|
+
const defineHandle = defineHandler;
|
|
198
|
+
const defineMiddleware = (middleware) => middleware;
|
|
199
|
+
function promisifyHandler(handler) {
|
|
200
|
+
return function(req, res) {
|
|
201
|
+
return callHandler(handler, req, res);
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
const promisifyHandle = promisifyHandler;
|
|
205
|
+
function callHandler(handler, req, res) {
|
|
206
|
+
const isMiddleware = handler.length > 2;
|
|
207
|
+
return new Promise((resolve, reject) => {
|
|
208
|
+
const next = (err) => {
|
|
209
|
+
if (isMiddleware) {
|
|
210
|
+
res.off("close", next);
|
|
211
|
+
res.off("error", next);
|
|
212
|
+
}
|
|
213
|
+
return err ? reject(createError(err)) : resolve(void 0);
|
|
214
|
+
};
|
|
215
|
+
try {
|
|
216
|
+
const returned = handler(req, res, next);
|
|
217
|
+
if (isMiddleware && returned === void 0) {
|
|
218
|
+
res.once("close", next);
|
|
219
|
+
res.once("error", next);
|
|
220
|
+
} else {
|
|
221
|
+
resolve(returned);
|
|
222
|
+
}
|
|
223
|
+
} catch (err) {
|
|
224
|
+
next(err);
|
|
225
|
+
}
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
function defineLazyHandler(handler, promisify) {
|
|
229
|
+
let _promise;
|
|
230
|
+
const resolve = () => {
|
|
231
|
+
if (!_promise) {
|
|
232
|
+
_promise = Promise.resolve(handler()).then((r) => promisify ? promisifyHandler(r.default || r) : r.default || r);
|
|
233
|
+
}
|
|
234
|
+
return _promise;
|
|
235
|
+
};
|
|
236
|
+
return function(req, res) {
|
|
237
|
+
return resolve().then((h) => h(req, res));
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
const lazyHandle = defineLazyHandler;
|
|
241
|
+
function useBase(base, handler) {
|
|
242
|
+
base = ufo.withoutTrailingSlash(base);
|
|
243
|
+
if (!base) {
|
|
244
|
+
return handler;
|
|
245
|
+
}
|
|
246
|
+
return function(req, res) {
|
|
247
|
+
req.originalUrl = req.originalUrl || req.url || "/";
|
|
248
|
+
req.url = ufo.withoutBase(req.url || "/", base);
|
|
249
|
+
return handler(req, res);
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
function eventHandler(handler) {
|
|
254
|
+
handler.__is_handler__ = true;
|
|
255
|
+
return handler;
|
|
256
|
+
}
|
|
257
|
+
const defineEventHandler = eventHandler;
|
|
258
|
+
function lazyEventHandler(factory) {
|
|
259
|
+
let _promise;
|
|
260
|
+
let _resolved;
|
|
261
|
+
const resolveHandler = () => {
|
|
262
|
+
if (_resolved) {
|
|
263
|
+
return Promise.resolve(_resolved);
|
|
264
|
+
}
|
|
265
|
+
if (!_promise) {
|
|
266
|
+
_promise = Promise.resolve(factory()).then((r) => {
|
|
267
|
+
const handler = r.default || r;
|
|
268
|
+
if (typeof handler !== "function") {
|
|
269
|
+
throw new TypeError("Invalid lazy handler result. It should be a function:", handler);
|
|
270
|
+
}
|
|
271
|
+
_resolved = toEventHandler(r.default || r);
|
|
272
|
+
return _resolved;
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
return _promise;
|
|
276
|
+
};
|
|
277
|
+
return eventHandler((event) => {
|
|
278
|
+
if (_resolved) {
|
|
279
|
+
return _resolved(event);
|
|
280
|
+
}
|
|
281
|
+
return resolveHandler().then((handler) => handler(event));
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
const defineLazyEventHandler = lazyEventHandler;
|
|
285
|
+
function dynamicEventHandler(initial) {
|
|
286
|
+
let current = initial;
|
|
287
|
+
const wrapper = eventHandler((event) => {
|
|
288
|
+
if (current) {
|
|
289
|
+
return current(event);
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
wrapper.set = (handler) => {
|
|
293
|
+
current = handler;
|
|
294
|
+
};
|
|
295
|
+
return wrapper;
|
|
296
|
+
}
|
|
297
|
+
function isEventHandler(input) {
|
|
298
|
+
return "__is_handler__" in input;
|
|
299
|
+
}
|
|
300
|
+
function toEventHandler(handler) {
|
|
301
|
+
if (isEventHandler(handler)) {
|
|
302
|
+
return handler;
|
|
303
|
+
}
|
|
304
|
+
if (typeof handler !== "function") {
|
|
305
|
+
throw new TypeError("Invalid handler. It should be a function:", handler);
|
|
306
|
+
}
|
|
307
|
+
return eventHandler((event) => {
|
|
308
|
+
return callHandler(handler, event.req, event.res);
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
function createEvent(req, res) {
|
|
312
|
+
const event = {
|
|
313
|
+
__is_event__: true,
|
|
314
|
+
req,
|
|
315
|
+
res
|
|
316
|
+
};
|
|
317
|
+
event.event = event;
|
|
318
|
+
req.event = event;
|
|
319
|
+
req.req = req;
|
|
320
|
+
req.res = res;
|
|
321
|
+
res.event = event;
|
|
322
|
+
res.res = res;
|
|
323
|
+
res.req = res.req || {};
|
|
324
|
+
res.req.res = res;
|
|
325
|
+
res.req.req = req;
|
|
326
|
+
return event;
|
|
327
|
+
}
|
|
328
|
+
function isEvent(input) {
|
|
329
|
+
return "__is_event__" in input;
|
|
330
|
+
}
|
|
331
|
+
|
|
300
332
|
function createApp(options = {}) {
|
|
301
333
|
const stack = [];
|
|
302
334
|
const handler = createAppEventHandler(stack, options);
|
|
@@ -338,7 +370,7 @@ function use(app, arg1, arg2, arg3) {
|
|
|
338
370
|
}
|
|
339
371
|
function createAppEventHandler(stack, options) {
|
|
340
372
|
const spacing = options.debug ? 2 : void 0;
|
|
341
|
-
return
|
|
373
|
+
return eventHandler(async (event) => {
|
|
342
374
|
event.req.originalUrl = event.req.originalUrl || event.req.url || "/";
|
|
343
375
|
const reqUrl = event.req.url || "/";
|
|
344
376
|
for (const layer of stack) {
|
|
@@ -383,7 +415,7 @@ function normalizeLayer(input) {
|
|
|
383
415
|
handler = handler.handler;
|
|
384
416
|
}
|
|
385
417
|
if (input.lazy) {
|
|
386
|
-
handler =
|
|
418
|
+
handler = lazyEventHandler(handler);
|
|
387
419
|
} else if (!isEventHandler(handler)) {
|
|
388
420
|
handler = toEventHandler(handler);
|
|
389
421
|
}
|
|
@@ -412,7 +444,7 @@ function createRouter() {
|
|
|
412
444
|
for (const method of RouterMethods) {
|
|
413
445
|
router[method] = (path, handle) => router.add(path, handle, method);
|
|
414
446
|
}
|
|
415
|
-
router.handler =
|
|
447
|
+
router.handler = eventHandler((event) => {
|
|
416
448
|
let path = event.req.url || "/";
|
|
417
449
|
const queryUrlIndex = path.lastIndexOf("?");
|
|
418
450
|
if (queryUrlIndex > -1) {
|
|
@@ -460,11 +492,14 @@ exports.defineLazyEventHandler = defineLazyEventHandler;
|
|
|
460
492
|
exports.defineLazyHandler = defineLazyHandler;
|
|
461
493
|
exports.defineMiddleware = defineMiddleware;
|
|
462
494
|
exports.deleteCookie = deleteCookie;
|
|
495
|
+
exports.dynamicEventHandler = dynamicEventHandler;
|
|
496
|
+
exports.eventHandler = eventHandler;
|
|
463
497
|
exports.isError = isError;
|
|
464
498
|
exports.isEvent = isEvent;
|
|
465
499
|
exports.isEventHandler = isEventHandler;
|
|
466
500
|
exports.isMethod = isMethod;
|
|
467
501
|
exports.isStream = isStream;
|
|
502
|
+
exports.lazyEventHandler = lazyEventHandler;
|
|
468
503
|
exports.lazyHandle = lazyHandle;
|
|
469
504
|
exports.promisifyHandle = promisifyHandle;
|
|
470
505
|
exports.promisifyHandler = promisifyHandler;
|
package/dist/index.d.ts
CHANGED
|
@@ -20,9 +20,17 @@ interface EventHandler {
|
|
|
20
20
|
'__is_handler__'?: true;
|
|
21
21
|
(event: CompatibilityEvent): H3Response | Promise<H3Response>;
|
|
22
22
|
}
|
|
23
|
-
declare function
|
|
23
|
+
declare function eventHandler(handler: EventHandler): EventHandler;
|
|
24
|
+
/** @deprecated Use eventHandler() */
|
|
25
|
+
declare const defineEventHandler: typeof eventHandler;
|
|
24
26
|
declare type LazyEventHandler = () => EventHandler | Promise<EventHandler>;
|
|
25
|
-
declare function
|
|
27
|
+
declare function lazyEventHandler(factory: LazyEventHandler): EventHandler;
|
|
28
|
+
/** @deprecated use lazyEventHandler() */
|
|
29
|
+
declare const defineLazyEventHandler: typeof lazyEventHandler;
|
|
30
|
+
interface DynamicEventHandler extends EventHandler {
|
|
31
|
+
set: (handler: EventHandler) => void;
|
|
32
|
+
}
|
|
33
|
+
declare function dynamicEventHandler(initial?: EventHandler): DynamicEventHandler;
|
|
26
34
|
declare function isEventHandler(input: any): input is EventHandler;
|
|
27
35
|
declare type CompatibilityEventHandler = EventHandler | Handler | Middleware;
|
|
28
36
|
declare function toEventHandler(handler: CompatibilityEventHandler): EventHandler;
|
|
@@ -225,4 +233,4 @@ interface Router extends AddRouteShortcuts {
|
|
|
225
233
|
}
|
|
226
234
|
declare function createRouter(): Router;
|
|
227
235
|
|
|
228
|
-
export { AddRouteShortcuts, App, AppOptions, AppUse, CompatibilityEvent, CompatibilityEventHandler, Encoding, EventHandler, H3Error, H3Event, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, JSONValue, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, _JSONValue, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, isError, isEvent, isEventHandler, isMethod, isStream, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|
|
236
|
+
export { AddRouteShortcuts, App, AppOptions, AppUse, CompatibilityEvent, CompatibilityEventHandler, DynamicEventHandler, Encoding, EventHandler, H3Error, H3Event, H3Response, HTTPMethod, Handler, IncomingMessage, InputLayer, InputStack, JSONValue, Layer, LazyEventHandler, LazyHandler, MIMES, Matcher, Middleware, NodeHandler, PromisifiedHandler, Router, RouterMethod, RouterUse, ServerResponse, Stack, _JSONValue, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|
package/dist/index.mjs
CHANGED
|
@@ -1,116 +1,8 @@
|
|
|
1
|
-
import { withoutTrailingSlash, withoutBase
|
|
1
|
+
import { getQuery, withoutTrailingSlash, withoutBase } from 'ufo';
|
|
2
2
|
import { createRouter as createRouter$1 } from 'radix3';
|
|
3
3
|
import destr from 'destr';
|
|
4
4
|
import { parse, serialize } from 'cookie-es';
|
|
5
5
|
|
|
6
|
-
const defineHandler = (handler) => handler;
|
|
7
|
-
const defineHandle = defineHandler;
|
|
8
|
-
const defineMiddleware = (middleware) => middleware;
|
|
9
|
-
function promisifyHandler(handler) {
|
|
10
|
-
return function(req, res) {
|
|
11
|
-
return callHandler(handler, req, res);
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
const promisifyHandle = promisifyHandler;
|
|
15
|
-
function callHandler(handler, req, res) {
|
|
16
|
-
return new Promise((resolve, reject) => {
|
|
17
|
-
const next = (err) => err ? reject(err) : resolve(void 0);
|
|
18
|
-
try {
|
|
19
|
-
return resolve(handler(req, res, next));
|
|
20
|
-
} catch (err) {
|
|
21
|
-
next(err);
|
|
22
|
-
}
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
function defineLazyHandler(handler, promisify) {
|
|
26
|
-
let _promise;
|
|
27
|
-
const resolve = () => {
|
|
28
|
-
if (!_promise) {
|
|
29
|
-
_promise = Promise.resolve(handler()).then((r) => promisify ? promisifyHandler(r.default || r) : r.default || r);
|
|
30
|
-
}
|
|
31
|
-
return _promise;
|
|
32
|
-
};
|
|
33
|
-
return function(req, res) {
|
|
34
|
-
return resolve().then((h) => h(req, res));
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
const lazyHandle = defineLazyHandler;
|
|
38
|
-
function useBase(base, handler) {
|
|
39
|
-
base = withoutTrailingSlash(base);
|
|
40
|
-
if (!base) {
|
|
41
|
-
return handler;
|
|
42
|
-
}
|
|
43
|
-
return function(req, res) {
|
|
44
|
-
req.originalUrl = req.originalUrl || req.url || "/";
|
|
45
|
-
req.url = withoutBase(req.url || "/", base);
|
|
46
|
-
return handler(req, res);
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
function defineEventHandler(handler) {
|
|
51
|
-
handler.__is_handler__ = true;
|
|
52
|
-
return handler;
|
|
53
|
-
}
|
|
54
|
-
function defineLazyEventHandler(factory) {
|
|
55
|
-
let _promise;
|
|
56
|
-
let _resolved;
|
|
57
|
-
const resolveHandler = () => {
|
|
58
|
-
if (_resolved) {
|
|
59
|
-
return Promise.resolve(_resolved);
|
|
60
|
-
}
|
|
61
|
-
if (!_promise) {
|
|
62
|
-
_promise = Promise.resolve(factory()).then((r) => {
|
|
63
|
-
const handler = r.default || r;
|
|
64
|
-
if (typeof handler !== "function") {
|
|
65
|
-
throw new TypeError("Invalid lazy handler result. It should be a function:", handler);
|
|
66
|
-
}
|
|
67
|
-
_resolved = toEventHandler(r.default || r);
|
|
68
|
-
return _resolved;
|
|
69
|
-
});
|
|
70
|
-
}
|
|
71
|
-
return _promise;
|
|
72
|
-
};
|
|
73
|
-
return defineEventHandler((event) => {
|
|
74
|
-
if (_resolved) {
|
|
75
|
-
return _resolved(event);
|
|
76
|
-
}
|
|
77
|
-
return resolveHandler().then((handler) => handler(event));
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
function isEventHandler(input) {
|
|
81
|
-
return "__is_handler__" in input;
|
|
82
|
-
}
|
|
83
|
-
function toEventHandler(handler) {
|
|
84
|
-
if (isEventHandler(handler)) {
|
|
85
|
-
return handler;
|
|
86
|
-
}
|
|
87
|
-
if (typeof handler !== "function") {
|
|
88
|
-
throw new TypeError("Invalid handler. It should be a function:", handler);
|
|
89
|
-
}
|
|
90
|
-
return defineEventHandler((event) => {
|
|
91
|
-
return callHandler(handler, event.req, event.res);
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
function createEvent(req, res) {
|
|
95
|
-
const event = {
|
|
96
|
-
__is_event__: true,
|
|
97
|
-
req,
|
|
98
|
-
res
|
|
99
|
-
};
|
|
100
|
-
event.event = event;
|
|
101
|
-
req.event = event;
|
|
102
|
-
req.req = req;
|
|
103
|
-
req.res = res;
|
|
104
|
-
res.event = event;
|
|
105
|
-
res.res = res;
|
|
106
|
-
res.req.res = res;
|
|
107
|
-
res.req.req = req;
|
|
108
|
-
return event;
|
|
109
|
-
}
|
|
110
|
-
function isEvent(input) {
|
|
111
|
-
return "__is_event__" in input;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
6
|
function useQuery(event) {
|
|
115
7
|
return getQuery(event.req.url || "");
|
|
116
8
|
}
|
|
@@ -169,6 +61,10 @@ async function useBody(event) {
|
|
|
169
61
|
return event.req[ParsedBodySymbol];
|
|
170
62
|
}
|
|
171
63
|
const body = await useRawBody(event);
|
|
64
|
+
if (event.req.headers["content-type"] === "application/x-www-form-urlencoded") {
|
|
65
|
+
const parsedForm = Object.fromEntries(new URLSearchParams(body));
|
|
66
|
+
return parsedForm;
|
|
67
|
+
}
|
|
172
68
|
const json = destr(body);
|
|
173
69
|
event.req[ParsedBodySymbol] = json;
|
|
174
70
|
return json;
|
|
@@ -289,6 +185,142 @@ function isError(input) {
|
|
|
289
185
|
return input instanceof H3Error;
|
|
290
186
|
}
|
|
291
187
|
|
|
188
|
+
const defineHandler = (handler) => handler;
|
|
189
|
+
const defineHandle = defineHandler;
|
|
190
|
+
const defineMiddleware = (middleware) => middleware;
|
|
191
|
+
function promisifyHandler(handler) {
|
|
192
|
+
return function(req, res) {
|
|
193
|
+
return callHandler(handler, req, res);
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
const promisifyHandle = promisifyHandler;
|
|
197
|
+
function callHandler(handler, req, res) {
|
|
198
|
+
const isMiddleware = handler.length > 2;
|
|
199
|
+
return new Promise((resolve, reject) => {
|
|
200
|
+
const next = (err) => {
|
|
201
|
+
if (isMiddleware) {
|
|
202
|
+
res.off("close", next);
|
|
203
|
+
res.off("error", next);
|
|
204
|
+
}
|
|
205
|
+
return err ? reject(createError(err)) : resolve(void 0);
|
|
206
|
+
};
|
|
207
|
+
try {
|
|
208
|
+
const returned = handler(req, res, next);
|
|
209
|
+
if (isMiddleware && returned === void 0) {
|
|
210
|
+
res.once("close", next);
|
|
211
|
+
res.once("error", next);
|
|
212
|
+
} else {
|
|
213
|
+
resolve(returned);
|
|
214
|
+
}
|
|
215
|
+
} catch (err) {
|
|
216
|
+
next(err);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
function defineLazyHandler(handler, promisify) {
|
|
221
|
+
let _promise;
|
|
222
|
+
const resolve = () => {
|
|
223
|
+
if (!_promise) {
|
|
224
|
+
_promise = Promise.resolve(handler()).then((r) => promisify ? promisifyHandler(r.default || r) : r.default || r);
|
|
225
|
+
}
|
|
226
|
+
return _promise;
|
|
227
|
+
};
|
|
228
|
+
return function(req, res) {
|
|
229
|
+
return resolve().then((h) => h(req, res));
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
const lazyHandle = defineLazyHandler;
|
|
233
|
+
function useBase(base, handler) {
|
|
234
|
+
base = withoutTrailingSlash(base);
|
|
235
|
+
if (!base) {
|
|
236
|
+
return handler;
|
|
237
|
+
}
|
|
238
|
+
return function(req, res) {
|
|
239
|
+
req.originalUrl = req.originalUrl || req.url || "/";
|
|
240
|
+
req.url = withoutBase(req.url || "/", base);
|
|
241
|
+
return handler(req, res);
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
function eventHandler(handler) {
|
|
246
|
+
handler.__is_handler__ = true;
|
|
247
|
+
return handler;
|
|
248
|
+
}
|
|
249
|
+
const defineEventHandler = eventHandler;
|
|
250
|
+
function lazyEventHandler(factory) {
|
|
251
|
+
let _promise;
|
|
252
|
+
let _resolved;
|
|
253
|
+
const resolveHandler = () => {
|
|
254
|
+
if (_resolved) {
|
|
255
|
+
return Promise.resolve(_resolved);
|
|
256
|
+
}
|
|
257
|
+
if (!_promise) {
|
|
258
|
+
_promise = Promise.resolve(factory()).then((r) => {
|
|
259
|
+
const handler = r.default || r;
|
|
260
|
+
if (typeof handler !== "function") {
|
|
261
|
+
throw new TypeError("Invalid lazy handler result. It should be a function:", handler);
|
|
262
|
+
}
|
|
263
|
+
_resolved = toEventHandler(r.default || r);
|
|
264
|
+
return _resolved;
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
return _promise;
|
|
268
|
+
};
|
|
269
|
+
return eventHandler((event) => {
|
|
270
|
+
if (_resolved) {
|
|
271
|
+
return _resolved(event);
|
|
272
|
+
}
|
|
273
|
+
return resolveHandler().then((handler) => handler(event));
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
const defineLazyEventHandler = lazyEventHandler;
|
|
277
|
+
function dynamicEventHandler(initial) {
|
|
278
|
+
let current = initial;
|
|
279
|
+
const wrapper = eventHandler((event) => {
|
|
280
|
+
if (current) {
|
|
281
|
+
return current(event);
|
|
282
|
+
}
|
|
283
|
+
});
|
|
284
|
+
wrapper.set = (handler) => {
|
|
285
|
+
current = handler;
|
|
286
|
+
};
|
|
287
|
+
return wrapper;
|
|
288
|
+
}
|
|
289
|
+
function isEventHandler(input) {
|
|
290
|
+
return "__is_handler__" in input;
|
|
291
|
+
}
|
|
292
|
+
function toEventHandler(handler) {
|
|
293
|
+
if (isEventHandler(handler)) {
|
|
294
|
+
return handler;
|
|
295
|
+
}
|
|
296
|
+
if (typeof handler !== "function") {
|
|
297
|
+
throw new TypeError("Invalid handler. It should be a function:", handler);
|
|
298
|
+
}
|
|
299
|
+
return eventHandler((event) => {
|
|
300
|
+
return callHandler(handler, event.req, event.res);
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
function createEvent(req, res) {
|
|
304
|
+
const event = {
|
|
305
|
+
__is_event__: true,
|
|
306
|
+
req,
|
|
307
|
+
res
|
|
308
|
+
};
|
|
309
|
+
event.event = event;
|
|
310
|
+
req.event = event;
|
|
311
|
+
req.req = req;
|
|
312
|
+
req.res = res;
|
|
313
|
+
res.event = event;
|
|
314
|
+
res.res = res;
|
|
315
|
+
res.req = res.req || {};
|
|
316
|
+
res.req.res = res;
|
|
317
|
+
res.req.req = req;
|
|
318
|
+
return event;
|
|
319
|
+
}
|
|
320
|
+
function isEvent(input) {
|
|
321
|
+
return "__is_event__" in input;
|
|
322
|
+
}
|
|
323
|
+
|
|
292
324
|
function createApp(options = {}) {
|
|
293
325
|
const stack = [];
|
|
294
326
|
const handler = createAppEventHandler(stack, options);
|
|
@@ -330,7 +362,7 @@ function use(app, arg1, arg2, arg3) {
|
|
|
330
362
|
}
|
|
331
363
|
function createAppEventHandler(stack, options) {
|
|
332
364
|
const spacing = options.debug ? 2 : void 0;
|
|
333
|
-
return
|
|
365
|
+
return eventHandler(async (event) => {
|
|
334
366
|
event.req.originalUrl = event.req.originalUrl || event.req.url || "/";
|
|
335
367
|
const reqUrl = event.req.url || "/";
|
|
336
368
|
for (const layer of stack) {
|
|
@@ -375,7 +407,7 @@ function normalizeLayer(input) {
|
|
|
375
407
|
handler = handler.handler;
|
|
376
408
|
}
|
|
377
409
|
if (input.lazy) {
|
|
378
|
-
handler =
|
|
410
|
+
handler = lazyEventHandler(handler);
|
|
379
411
|
} else if (!isEventHandler(handler)) {
|
|
380
412
|
handler = toEventHandler(handler);
|
|
381
413
|
}
|
|
@@ -404,7 +436,7 @@ function createRouter() {
|
|
|
404
436
|
for (const method of RouterMethods) {
|
|
405
437
|
router[method] = (path, handle) => router.add(path, handle, method);
|
|
406
438
|
}
|
|
407
|
-
router.handler =
|
|
439
|
+
router.handler = eventHandler((event) => {
|
|
408
440
|
let path = event.req.url || "/";
|
|
409
441
|
const queryUrlIndex = path.lastIndexOf("?");
|
|
410
442
|
if (queryUrlIndex > -1) {
|
|
@@ -434,4 +466,4 @@ function createRouter() {
|
|
|
434
466
|
return router;
|
|
435
467
|
}
|
|
436
468
|
|
|
437
|
-
export { H3Error, MIMES, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, isError, isEvent, isEventHandler, isMethod, isStream, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|
|
469
|
+
export { H3Error, MIMES, appendHeader, assertMethod, callHandler, createApp, createAppEventHandler, createError, createEvent, createRouter, defaultContentType, defineEventHandler, defineHandle, defineHandler, defineLazyEventHandler, defineLazyHandler, defineMiddleware, deleteCookie, dynamicEventHandler, eventHandler, isError, isEvent, isEventHandler, isMethod, isStream, lazyEventHandler, lazyHandle, promisifyHandle, promisifyHandler, send, sendError, sendRedirect, sendStream, setCookie, toEventHandler, use, useBase, useBody, useCookie, useCookies, useMethod, useQuery, useRawBody };
|