h3 1.15.1 → 1.15.3
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 +38 -44
- package/dist/index.d.cts +3 -2
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.mjs +38 -44
- package/package.json +22 -22
package/dist/index.cjs
CHANGED
|
@@ -62,7 +62,7 @@ class H3Error extends Error {
|
|
|
62
62
|
if (this.statusMessage) {
|
|
63
63
|
obj.statusMessage = sanitizeStatusMessage(this.statusMessage);
|
|
64
64
|
}
|
|
65
|
-
if (this.data !==
|
|
65
|
+
if (this.data !== void 0) {
|
|
66
66
|
obj.data = this.data;
|
|
67
67
|
}
|
|
68
68
|
return obj;
|
|
@@ -114,10 +114,10 @@ function createError(input) {
|
|
|
114
114
|
);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
if (input.fatal !==
|
|
117
|
+
if (input.fatal !== void 0) {
|
|
118
118
|
err.fatal = input.fatal;
|
|
119
119
|
}
|
|
120
|
-
if (input.unhandled !==
|
|
120
|
+
if (input.unhandled !== void 0) {
|
|
121
121
|
err.unhandled = input.unhandled;
|
|
122
122
|
}
|
|
123
123
|
return err;
|
|
@@ -142,7 +142,7 @@ function sendError(event, error, debug) {
|
|
|
142
142
|
const _code = Number.parseInt(h3Error.statusCode);
|
|
143
143
|
setResponseStatus(event, _code, h3Error.statusMessage);
|
|
144
144
|
event.node.res.setHeader("content-type", MIMES.json);
|
|
145
|
-
event.node.res.end(JSON.stringify(responseBody,
|
|
145
|
+
event.node.res.end(JSON.stringify(responseBody, void 0, 2));
|
|
146
146
|
}
|
|
147
147
|
function isError(input) {
|
|
148
148
|
return input?.constructor?.__h3_error__ === true;
|
|
@@ -410,12 +410,15 @@ function readRawBody(event, encoding = "utf8") {
|
|
|
410
410
|
if (_resolved instanceof URLSearchParams) {
|
|
411
411
|
return Buffer.from(_resolved.toString());
|
|
412
412
|
}
|
|
413
|
+
if (_resolved instanceof FormData) {
|
|
414
|
+
return new Response(_resolved).bytes().then((uint8arr) => Buffer.from(uint8arr));
|
|
415
|
+
}
|
|
413
416
|
return Buffer.from(_resolved);
|
|
414
417
|
});
|
|
415
418
|
return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
|
|
416
419
|
}
|
|
417
420
|
if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !String(event.node.req.headers["transfer-encoding"] ?? "").split(",").map((e) => e.trim()).filter(Boolean).includes("chunked")) {
|
|
418
|
-
return Promise.resolve(
|
|
421
|
+
return Promise.resolve(void 0);
|
|
419
422
|
}
|
|
420
423
|
const promise = event.node.req[RawBodySymbol] = new Promise(
|
|
421
424
|
(resolve, reject) => {
|
|
@@ -510,7 +513,7 @@ function getRequestWebStream(event) {
|
|
|
510
513
|
}
|
|
511
514
|
function _parseJSON(body = "", strict) {
|
|
512
515
|
if (!body) {
|
|
513
|
-
return
|
|
516
|
+
return void 0;
|
|
514
517
|
}
|
|
515
518
|
try {
|
|
516
519
|
return destr__default(body, { strict });
|
|
@@ -541,14 +544,14 @@ function _parseURLEncodedBody(body) {
|
|
|
541
544
|
function handleCacheHeaders(event, opts) {
|
|
542
545
|
const cacheControls = ["public", ...opts.cacheControls || []];
|
|
543
546
|
let cacheMatched = false;
|
|
544
|
-
if (opts.maxAge !==
|
|
547
|
+
if (opts.maxAge !== void 0) {
|
|
545
548
|
cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
|
|
546
549
|
}
|
|
547
550
|
if (opts.modifiedTime) {
|
|
548
551
|
const modifiedTime = new Date(opts.modifiedTime);
|
|
549
552
|
const ifModifiedSince = event.node.req.headers["if-modified-since"];
|
|
550
553
|
event.node.res.setHeader("last-modified", modifiedTime.toUTCString());
|
|
551
|
-
if (ifModifiedSince && new Date(ifModifiedSince) >=
|
|
554
|
+
if (ifModifiedSince && new Date(ifModifiedSince) >= modifiedTime) {
|
|
552
555
|
cacheMatched = true;
|
|
553
556
|
}
|
|
554
557
|
}
|
|
@@ -593,14 +596,7 @@ function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
|
|
|
593
596
|
}
|
|
594
597
|
|
|
595
598
|
function getDistinctCookieKey(name, opts) {
|
|
596
|
-
return [
|
|
597
|
-
name,
|
|
598
|
-
opts.domain || "",
|
|
599
|
-
opts.path || "/",
|
|
600
|
-
Boolean(opts.secure),
|
|
601
|
-
Boolean(opts.httpOnly),
|
|
602
|
-
Boolean(opts.sameSite)
|
|
603
|
-
].join(";");
|
|
599
|
+
return [name, opts.domain || "", opts.path || "/"].join(";");
|
|
604
600
|
}
|
|
605
601
|
|
|
606
602
|
function parseCookies(event) {
|
|
@@ -708,7 +704,7 @@ function serializeIterableValue(value) {
|
|
|
708
704
|
}
|
|
709
705
|
case "function":
|
|
710
706
|
case "undefined": {
|
|
711
|
-
return
|
|
707
|
+
return void 0;
|
|
712
708
|
}
|
|
713
709
|
case "object": {
|
|
714
710
|
if (value instanceof Uint8Array) {
|
|
@@ -981,9 +977,9 @@ function sendIterable(event, iterable, options) {
|
|
|
981
977
|
new ReadableStream({
|
|
982
978
|
async pull(controller) {
|
|
983
979
|
const { value, done } = await iterator.next();
|
|
984
|
-
if (value !==
|
|
980
|
+
if (value !== void 0) {
|
|
985
981
|
const chunk = serializer(value);
|
|
986
|
-
if (chunk !==
|
|
982
|
+
if (chunk !== void 0) {
|
|
987
983
|
controller.enqueue(chunk);
|
|
988
984
|
}
|
|
989
985
|
}
|
|
@@ -1161,7 +1157,7 @@ async function proxyRequest(event, target, opts = {}) {
|
|
|
1161
1157
|
body = getRequestWebStream(event);
|
|
1162
1158
|
duplex = "half";
|
|
1163
1159
|
} else {
|
|
1164
|
-
body = await readRawBody(event, false).catch(() =>
|
|
1160
|
+
body = await readRawBody(event, false).catch(() => void 0);
|
|
1165
1161
|
}
|
|
1166
1162
|
}
|
|
1167
1163
|
const method = opts.fetchOptions?.method || event.method;
|
|
@@ -1241,7 +1237,7 @@ async function sendProxy(event, target, opts = {}) {
|
|
|
1241
1237
|
if (opts.onResponse) {
|
|
1242
1238
|
await opts.onResponse(event, response);
|
|
1243
1239
|
}
|
|
1244
|
-
if (response._data !==
|
|
1240
|
+
if (response._data !== void 0) {
|
|
1245
1241
|
return response._data;
|
|
1246
1242
|
}
|
|
1247
1243
|
if (event.handled) {
|
|
@@ -1315,8 +1311,9 @@ function mergeHeaders(defaults, ...inputs) {
|
|
|
1315
1311
|
}
|
|
1316
1312
|
const merged = new Headers(defaults);
|
|
1317
1313
|
for (const input of _inputs) {
|
|
1318
|
-
|
|
1319
|
-
|
|
1314
|
+
const entries = Array.isArray(input) ? input : typeof input.entries === "function" ? input.entries() : Object.entries(input);
|
|
1315
|
+
for (const [key, value] of entries) {
|
|
1316
|
+
if (value !== void 0) {
|
|
1320
1317
|
merged.set(key, value);
|
|
1321
1318
|
}
|
|
1322
1319
|
}
|
|
@@ -1433,7 +1430,7 @@ async function updateSession(event, config, update) {
|
|
|
1433
1430
|
const sealed = await sealSession(event, config);
|
|
1434
1431
|
setCookie(event, sessionName, sealed, {
|
|
1435
1432
|
...DEFAULT_COOKIE,
|
|
1436
|
-
expires: config.maxAge ? new Date(session.createdAt + config.maxAge * 1e3) :
|
|
1433
|
+
expires: config.maxAge ? new Date(session.createdAt + config.maxAge * 1e3) : void 0,
|
|
1437
1434
|
...config.cookie
|
|
1438
1435
|
});
|
|
1439
1436
|
}
|
|
@@ -1519,7 +1516,7 @@ function setEventStreamHeaders(event) {
|
|
|
1519
1516
|
setResponseHeaders(event, headers);
|
|
1520
1517
|
}
|
|
1521
1518
|
function isHttp2Request(event) {
|
|
1522
|
-
return getHeader(event, ":path") !==
|
|
1519
|
+
return getHeader(event, ":path") !== void 0 && getHeader(event, ":method") !== void 0;
|
|
1523
1520
|
}
|
|
1524
1521
|
|
|
1525
1522
|
class EventStream {
|
|
@@ -1609,7 +1606,7 @@ class EventStream {
|
|
|
1609
1606
|
}
|
|
1610
1607
|
if (this._unsentData?.length) {
|
|
1611
1608
|
await this._writer.write(this._encoder.encode(this._unsentData));
|
|
1612
|
-
this._unsentData =
|
|
1609
|
+
this._unsentData = void 0;
|
|
1613
1610
|
}
|
|
1614
1611
|
}
|
|
1615
1612
|
/**
|
|
@@ -1687,10 +1684,7 @@ async function serveStatic(event, options) {
|
|
|
1687
1684
|
}
|
|
1688
1685
|
if (!meta) {
|
|
1689
1686
|
if (!options.fallthrough) {
|
|
1690
|
-
throw createError({
|
|
1691
|
-
statusMessage: "Cannot find static asset " + id,
|
|
1692
|
-
statusCode: 404
|
|
1693
|
-
});
|
|
1687
|
+
throw createError({ statusCode: 404 });
|
|
1694
1688
|
}
|
|
1695
1689
|
return false;
|
|
1696
1690
|
}
|
|
@@ -1719,7 +1713,7 @@ async function serveStatic(event, options) {
|
|
|
1719
1713
|
if (meta.encoding && !getResponseHeader(event, "content-encoding")) {
|
|
1720
1714
|
setResponseHeader(event, "content-encoding", meta.encoding);
|
|
1721
1715
|
}
|
|
1722
|
-
if (meta.size !==
|
|
1716
|
+
if (meta.size !== void 0 && meta.size > 0 && !getResponseHeader(event, "content-length")) {
|
|
1723
1717
|
setResponseHeader(event, "content-length", meta.size);
|
|
1724
1718
|
}
|
|
1725
1719
|
if (event.method === "HEAD") {
|
|
@@ -1861,7 +1855,7 @@ function defineEventHandler(handler) {
|
|
|
1861
1855
|
return _handler;
|
|
1862
1856
|
}
|
|
1863
1857
|
function _normalizeArray(input) {
|
|
1864
|
-
return input ? Array.isArray(input) ? input : [input] :
|
|
1858
|
+
return input ? Array.isArray(input) ? input : [input] : void 0;
|
|
1865
1859
|
}
|
|
1866
1860
|
async function _callHandler(event, handler, hooks) {
|
|
1867
1861
|
if (hooks.onRequest) {
|
|
@@ -1991,7 +1985,7 @@ function use(app, arg1, arg2, arg3) {
|
|
|
1991
1985
|
return app;
|
|
1992
1986
|
}
|
|
1993
1987
|
function createAppEventHandler(stack, options) {
|
|
1994
|
-
const spacing = options.debug ? 2 :
|
|
1988
|
+
const spacing = options.debug ? 2 : void 0;
|
|
1995
1989
|
return eventHandler(async (event) => {
|
|
1996
1990
|
event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || "/";
|
|
1997
1991
|
const _reqPath = event._path || event.node.req.url || "/";
|
|
@@ -2014,8 +2008,8 @@ function createAppEventHandler(stack, options) {
|
|
|
2014
2008
|
event._path = _layerPath;
|
|
2015
2009
|
event.node.req.url = _layerPath;
|
|
2016
2010
|
const val = await layer.handler(event);
|
|
2017
|
-
const _body = val ===
|
|
2018
|
-
if (_body !==
|
|
2011
|
+
const _body = val === void 0 ? void 0 : await val;
|
|
2012
|
+
if (_body !== void 0) {
|
|
2019
2013
|
const _response = { body: _body };
|
|
2020
2014
|
if (options.onBeforeResponse) {
|
|
2021
2015
|
event._onBeforeResponseCalled = true;
|
|
@@ -2031,7 +2025,7 @@ function createAppEventHandler(stack, options) {
|
|
|
2031
2025
|
if (event.handled) {
|
|
2032
2026
|
if (options.onAfterResponse) {
|
|
2033
2027
|
event._onAfterResponseCalled = true;
|
|
2034
|
-
await options.onAfterResponse(event,
|
|
2028
|
+
await options.onAfterResponse(event, void 0);
|
|
2035
2029
|
}
|
|
2036
2030
|
return;
|
|
2037
2031
|
}
|
|
@@ -2044,7 +2038,7 @@ function createAppEventHandler(stack, options) {
|
|
|
2044
2038
|
}
|
|
2045
2039
|
if (options.onAfterResponse) {
|
|
2046
2040
|
event._onAfterResponseCalled = true;
|
|
2047
|
-
await options.onAfterResponse(event,
|
|
2041
|
+
await options.onAfterResponse(event, void 0);
|
|
2048
2042
|
}
|
|
2049
2043
|
});
|
|
2050
2044
|
}
|
|
@@ -2059,7 +2053,7 @@ function createResolver(stack) {
|
|
|
2059
2053
|
continue;
|
|
2060
2054
|
}
|
|
2061
2055
|
_layerPath = path.slice(layer.route.length) || "/";
|
|
2062
|
-
if (layer.match && !layer.match(_layerPath,
|
|
2056
|
+
if (layer.match && !layer.match(_layerPath, void 0)) {
|
|
2063
2057
|
continue;
|
|
2064
2058
|
}
|
|
2065
2059
|
let res = { route: layer.route, handler: layer.handler };
|
|
@@ -2086,7 +2080,7 @@ function normalizeLayer(input) {
|
|
|
2086
2080
|
if (input.lazy) {
|
|
2087
2081
|
handler = lazyEventHandler(handler);
|
|
2088
2082
|
} else if (!isEventHandler(handler)) {
|
|
2089
|
-
handler = toEventHandler(handler,
|
|
2083
|
+
handler = toEventHandler(handler, void 0, input.route);
|
|
2090
2084
|
}
|
|
2091
2085
|
return {
|
|
2092
2086
|
route: ufo.withoutTrailingSlash(input.route),
|
|
@@ -2125,7 +2119,7 @@ function handleHandlerResponse(event, val, jsonSpace) {
|
|
|
2125
2119
|
return send(event, val, MIMES.html);
|
|
2126
2120
|
}
|
|
2127
2121
|
if (valType === "object" || valType === "boolean" || valType === "number") {
|
|
2128
|
-
return send(event, JSON.stringify(val,
|
|
2122
|
+
return send(event, JSON.stringify(val, void 0, jsonSpace), MIMES.json);
|
|
2129
2123
|
}
|
|
2130
2124
|
if (valType === "bigint") {
|
|
2131
2125
|
return send(event, val.toString(), MIMES.json);
|
|
@@ -2183,7 +2177,7 @@ function createRouter(opts = {}) {
|
|
|
2183
2177
|
addRoute(path, handler, m);
|
|
2184
2178
|
}
|
|
2185
2179
|
} else {
|
|
2186
|
-
route.handlers[method] = toEventHandler(handler,
|
|
2180
|
+
route.handlers[method] = toEventHandler(handler, void 0, path);
|
|
2187
2181
|
}
|
|
2188
2182
|
return router;
|
|
2189
2183
|
};
|
|
@@ -2253,7 +2247,7 @@ function createRouter(opts = {}) {
|
|
|
2253
2247
|
const params = match.matched.params || {};
|
|
2254
2248
|
event.context.params = params;
|
|
2255
2249
|
return Promise.resolve(match.handler(event)).then((res) => {
|
|
2256
|
-
if (res ===
|
|
2250
|
+
if (res === void 0 && isPreemptive) {
|
|
2257
2251
|
return null;
|
|
2258
2252
|
}
|
|
2259
2253
|
return res;
|
|
@@ -2345,7 +2339,7 @@ function callNodeListener(handler, req, res) {
|
|
|
2345
2339
|
res.off("close", next);
|
|
2346
2340
|
res.off("error", next);
|
|
2347
2341
|
}
|
|
2348
|
-
return err ? reject(createError(err)) : resolve(
|
|
2342
|
+
return err ? reject(createError(err)) : resolve(void 0);
|
|
2349
2343
|
};
|
|
2350
2344
|
try {
|
|
2351
2345
|
const returned = handler(req, res, next);
|
|
@@ -2445,7 +2439,7 @@ function _normalizeUnenvHeaders(input) {
|
|
|
2445
2439
|
for (const _value of value) {
|
|
2446
2440
|
headers.push([key, _value]);
|
|
2447
2441
|
}
|
|
2448
|
-
} else if (value !==
|
|
2442
|
+
} else if (value !== void 0) {
|
|
2449
2443
|
headers.push([key, String(value)]);
|
|
2450
2444
|
}
|
|
2451
2445
|
}
|
package/dist/index.d.cts
CHANGED
|
@@ -331,7 +331,7 @@ declare class H3Error<DataT = unknown> extends Error {
|
|
|
331
331
|
constructor(message: string, opts?: {
|
|
332
332
|
cause?: unknown;
|
|
333
333
|
});
|
|
334
|
-
toJSON(): Pick<H3Error<DataT>, "
|
|
334
|
+
toJSON(): Pick<H3Error<DataT>, "message" | "statusCode" | "statusMessage" | "data">;
|
|
335
335
|
}
|
|
336
336
|
/**
|
|
337
337
|
* Creates a new `Error` that can be used to handle both internal and runtime errors.
|
|
@@ -1392,4 +1392,5 @@ declare function toPlainHandler(app: App): PlainHandler;
|
|
|
1392
1392
|
/** @experimental */
|
|
1393
1393
|
declare function fromPlainHandler(handler: PlainHandler): EventHandler<EventHandlerRequest, Promise<unknown>>;
|
|
1394
1394
|
|
|
1395
|
-
export {
|
|
1395
|
+
export { H3Error, H3Event, H3Headers, H3Response, MIMES, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createEventStream, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, defineWebSocketHandler, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, use, useBase, useSession, writeEarlyHints };
|
|
1396
|
+
export type { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CreateRouterOptions, Duplex, DynamicEventHandler, Encoding, EventHandler, EventHandlerObject, EventHandlerRequest, EventHandlerResolver, EventHandlerResponse, EventStream, EventStreamMessage, EventStreamOptions, H3CorsOptions, H3EventContext, HTTPHeaderName, HTTPMethod, InferEventInput, InputLayer, InputStack, Layer, LazyEventHandler, Matcher, MimeType, MultiPartData, NodeEventContext, NodeListener, NodeMiddleware, NodePromisifiedHandler, PlainHandler, PlainRequest, PlainResponse, ProxyOptions, RequestFingerprintOptions, RequestHeaders, RouteNode, Router, RouterMethod, RouterUse, ServeStaticOptions, Session, SessionConfig, SessionData, Stack, StaticAssetMeta, StatusCode, TypedHeaders, ValidateFunction, ValidateResult, WebEventContext, WebHandler, WebSocketOptions, _RequestMiddleware, _ResponseMiddleware };
|
package/dist/index.d.mts
CHANGED
|
@@ -331,7 +331,7 @@ declare class H3Error<DataT = unknown> extends Error {
|
|
|
331
331
|
constructor(message: string, opts?: {
|
|
332
332
|
cause?: unknown;
|
|
333
333
|
});
|
|
334
|
-
toJSON(): Pick<H3Error<DataT>, "
|
|
334
|
+
toJSON(): Pick<H3Error<DataT>, "message" | "statusCode" | "statusMessage" | "data">;
|
|
335
335
|
}
|
|
336
336
|
/**
|
|
337
337
|
* Creates a new `Error` that can be used to handle both internal and runtime errors.
|
|
@@ -1392,4 +1392,5 @@ declare function toPlainHandler(app: App): PlainHandler;
|
|
|
1392
1392
|
/** @experimental */
|
|
1393
1393
|
declare function fromPlainHandler(handler: PlainHandler): EventHandler<EventHandlerRequest, Promise<unknown>>;
|
|
1394
1394
|
|
|
1395
|
-
export {
|
|
1395
|
+
export { H3Error, H3Event, H3Headers, H3Response, MIMES, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createEventStream, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, defineWebSocketHandler, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, use, useBase, useSession, writeEarlyHints };
|
|
1396
|
+
export type { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CreateRouterOptions, Duplex, DynamicEventHandler, Encoding, EventHandler, EventHandlerObject, EventHandlerRequest, EventHandlerResolver, EventHandlerResponse, EventStream, EventStreamMessage, EventStreamOptions, H3CorsOptions, H3EventContext, HTTPHeaderName, HTTPMethod, InferEventInput, InputLayer, InputStack, Layer, LazyEventHandler, Matcher, MimeType, MultiPartData, NodeEventContext, NodeListener, NodeMiddleware, NodePromisifiedHandler, PlainHandler, PlainRequest, PlainResponse, ProxyOptions, RequestFingerprintOptions, RequestHeaders, RouteNode, Router, RouterMethod, RouterUse, ServeStaticOptions, Session, SessionConfig, SessionData, Stack, StaticAssetMeta, StatusCode, TypedHeaders, ValidateFunction, ValidateResult, WebEventContext, WebHandler, WebSocketOptions, _RequestMiddleware, _ResponseMiddleware };
|
package/dist/index.d.ts
CHANGED
|
@@ -331,7 +331,7 @@ declare class H3Error<DataT = unknown> extends Error {
|
|
|
331
331
|
constructor(message: string, opts?: {
|
|
332
332
|
cause?: unknown;
|
|
333
333
|
});
|
|
334
|
-
toJSON(): Pick<H3Error<DataT>, "
|
|
334
|
+
toJSON(): Pick<H3Error<DataT>, "message" | "statusCode" | "statusMessage" | "data">;
|
|
335
335
|
}
|
|
336
336
|
/**
|
|
337
337
|
* Creates a new `Error` that can be used to handle both internal and runtime errors.
|
|
@@ -1392,4 +1392,5 @@ declare function toPlainHandler(app: App): PlainHandler;
|
|
|
1392
1392
|
/** @experimental */
|
|
1393
1393
|
declare function fromPlainHandler(handler: PlainHandler): EventHandler<EventHandlerRequest, Promise<unknown>>;
|
|
1394
1394
|
|
|
1395
|
-
export {
|
|
1395
|
+
export { H3Error, H3Event, H3Headers, H3Response, MIMES, appendCorsHeaders, appendCorsPreflightHeaders, appendHeader, appendHeaders, appendResponseHeader, appendResponseHeaders, assertMethod, callNodeListener, clearResponseHeaders, clearSession, createApp, createAppEventHandler, createError, createEvent, createEventStream, createRouter, defaultContentType, defineEventHandler, defineLazyEventHandler, defineNodeListener, defineNodeMiddleware, defineRequestMiddleware, defineResponseMiddleware, defineWebSocket, defineWebSocketHandler, deleteCookie, dynamicEventHandler, eventHandler, fetchWithEvent, fromNodeMiddleware, fromPlainHandler, fromWebHandler, getCookie, getHeader, getHeaders, getMethod, getProxyRequestHeaders, getQuery, getRequestFingerprint, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestPath, getRequestProtocol, getRequestURL, getRequestWebStream, getResponseHeader, getResponseHeaders, getResponseStatus, getResponseStatusText, getRouterParam, getRouterParams, getSession, getValidatedQuery, getValidatedRouterParams, handleCacheHeaders, handleCors, isCorsOriginAllowed, isError, isEvent, isEventHandler, isMethod, isPreflightRequest, isStream, isWebResponse, lazyEventHandler, parseCookies, promisifyNodeListener, proxyRequest, readBody, readFormData, readMultipartFormData, readRawBody, readValidatedBody, removeResponseHeader, sanitizeStatusCode, sanitizeStatusMessage, sealSession, send, sendError, sendIterable, sendNoContent, sendProxy, sendRedirect, sendStream, sendWebResponse, serveStatic, setCookie, setHeader, setHeaders, setResponseHeader, setResponseHeaders, setResponseStatus, splitCookiesString, toEventHandler, toNodeListener, toPlainHandler, toWebHandler, toWebRequest, unsealSession, updateSession, use, useBase, useSession, writeEarlyHints };
|
|
1396
|
+
export type { AddRouteShortcuts, App, AppOptions, AppUse, CacheConditions, CreateRouterOptions, Duplex, DynamicEventHandler, Encoding, EventHandler, EventHandlerObject, EventHandlerRequest, EventHandlerResolver, EventHandlerResponse, EventStream, EventStreamMessage, EventStreamOptions, H3CorsOptions, H3EventContext, HTTPHeaderName, HTTPMethod, InferEventInput, InputLayer, InputStack, Layer, LazyEventHandler, Matcher, MimeType, MultiPartData, NodeEventContext, NodeListener, NodeMiddleware, NodePromisifiedHandler, PlainHandler, PlainRequest, PlainResponse, ProxyOptions, RequestFingerprintOptions, RequestHeaders, RouteNode, Router, RouterMethod, RouterUse, ServeStaticOptions, Session, SessionConfig, SessionData, Stack, StaticAssetMeta, StatusCode, TypedHeaders, ValidateFunction, ValidateResult, WebEventContext, WebHandler, WebSocketOptions, _RequestMiddleware, _ResponseMiddleware };
|
package/dist/index.mjs
CHANGED
|
@@ -55,7 +55,7 @@ class H3Error extends Error {
|
|
|
55
55
|
if (this.statusMessage) {
|
|
56
56
|
obj.statusMessage = sanitizeStatusMessage(this.statusMessage);
|
|
57
57
|
}
|
|
58
|
-
if (this.data !==
|
|
58
|
+
if (this.data !== void 0) {
|
|
59
59
|
obj.data = this.data;
|
|
60
60
|
}
|
|
61
61
|
return obj;
|
|
@@ -107,10 +107,10 @@ function createError(input) {
|
|
|
107
107
|
);
|
|
108
108
|
}
|
|
109
109
|
}
|
|
110
|
-
if (input.fatal !==
|
|
110
|
+
if (input.fatal !== void 0) {
|
|
111
111
|
err.fatal = input.fatal;
|
|
112
112
|
}
|
|
113
|
-
if (input.unhandled !==
|
|
113
|
+
if (input.unhandled !== void 0) {
|
|
114
114
|
err.unhandled = input.unhandled;
|
|
115
115
|
}
|
|
116
116
|
return err;
|
|
@@ -135,7 +135,7 @@ function sendError(event, error, debug) {
|
|
|
135
135
|
const _code = Number.parseInt(h3Error.statusCode);
|
|
136
136
|
setResponseStatus(event, _code, h3Error.statusMessage);
|
|
137
137
|
event.node.res.setHeader("content-type", MIMES.json);
|
|
138
|
-
event.node.res.end(JSON.stringify(responseBody,
|
|
138
|
+
event.node.res.end(JSON.stringify(responseBody, void 0, 2));
|
|
139
139
|
}
|
|
140
140
|
function isError(input) {
|
|
141
141
|
return input?.constructor?.__h3_error__ === true;
|
|
@@ -403,12 +403,15 @@ function readRawBody(event, encoding = "utf8") {
|
|
|
403
403
|
if (_resolved instanceof URLSearchParams) {
|
|
404
404
|
return Buffer.from(_resolved.toString());
|
|
405
405
|
}
|
|
406
|
+
if (_resolved instanceof FormData) {
|
|
407
|
+
return new Response(_resolved).bytes().then((uint8arr) => Buffer.from(uint8arr));
|
|
408
|
+
}
|
|
406
409
|
return Buffer.from(_resolved);
|
|
407
410
|
});
|
|
408
411
|
return encoding ? promise2.then((buff) => buff.toString(encoding)) : promise2;
|
|
409
412
|
}
|
|
410
413
|
if (!Number.parseInt(event.node.req.headers["content-length"] || "") && !String(event.node.req.headers["transfer-encoding"] ?? "").split(",").map((e) => e.trim()).filter(Boolean).includes("chunked")) {
|
|
411
|
-
return Promise.resolve(
|
|
414
|
+
return Promise.resolve(void 0);
|
|
412
415
|
}
|
|
413
416
|
const promise = event.node.req[RawBodySymbol] = new Promise(
|
|
414
417
|
(resolve, reject) => {
|
|
@@ -503,7 +506,7 @@ function getRequestWebStream(event) {
|
|
|
503
506
|
}
|
|
504
507
|
function _parseJSON(body = "", strict) {
|
|
505
508
|
if (!body) {
|
|
506
|
-
return
|
|
509
|
+
return void 0;
|
|
507
510
|
}
|
|
508
511
|
try {
|
|
509
512
|
return destr(body, { strict });
|
|
@@ -534,14 +537,14 @@ function _parseURLEncodedBody(body) {
|
|
|
534
537
|
function handleCacheHeaders(event, opts) {
|
|
535
538
|
const cacheControls = ["public", ...opts.cacheControls || []];
|
|
536
539
|
let cacheMatched = false;
|
|
537
|
-
if (opts.maxAge !==
|
|
540
|
+
if (opts.maxAge !== void 0) {
|
|
538
541
|
cacheControls.push(`max-age=${+opts.maxAge}`, `s-maxage=${+opts.maxAge}`);
|
|
539
542
|
}
|
|
540
543
|
if (opts.modifiedTime) {
|
|
541
544
|
const modifiedTime = new Date(opts.modifiedTime);
|
|
542
545
|
const ifModifiedSince = event.node.req.headers["if-modified-since"];
|
|
543
546
|
event.node.res.setHeader("last-modified", modifiedTime.toUTCString());
|
|
544
|
-
if (ifModifiedSince && new Date(ifModifiedSince) >=
|
|
547
|
+
if (ifModifiedSince && new Date(ifModifiedSince) >= modifiedTime) {
|
|
545
548
|
cacheMatched = true;
|
|
546
549
|
}
|
|
547
550
|
}
|
|
@@ -586,14 +589,7 @@ function sanitizeStatusCode(statusCode, defaultStatusCode = 200) {
|
|
|
586
589
|
}
|
|
587
590
|
|
|
588
591
|
function getDistinctCookieKey(name, opts) {
|
|
589
|
-
return [
|
|
590
|
-
name,
|
|
591
|
-
opts.domain || "",
|
|
592
|
-
opts.path || "/",
|
|
593
|
-
Boolean(opts.secure),
|
|
594
|
-
Boolean(opts.httpOnly),
|
|
595
|
-
Boolean(opts.sameSite)
|
|
596
|
-
].join(";");
|
|
592
|
+
return [name, opts.domain || "", opts.path || "/"].join(";");
|
|
597
593
|
}
|
|
598
594
|
|
|
599
595
|
function parseCookies(event) {
|
|
@@ -701,7 +697,7 @@ function serializeIterableValue(value) {
|
|
|
701
697
|
}
|
|
702
698
|
case "function":
|
|
703
699
|
case "undefined": {
|
|
704
|
-
return
|
|
700
|
+
return void 0;
|
|
705
701
|
}
|
|
706
702
|
case "object": {
|
|
707
703
|
if (value instanceof Uint8Array) {
|
|
@@ -974,9 +970,9 @@ function sendIterable(event, iterable, options) {
|
|
|
974
970
|
new ReadableStream({
|
|
975
971
|
async pull(controller) {
|
|
976
972
|
const { value, done } = await iterator.next();
|
|
977
|
-
if (value !==
|
|
973
|
+
if (value !== void 0) {
|
|
978
974
|
const chunk = serializer(value);
|
|
979
|
-
if (chunk !==
|
|
975
|
+
if (chunk !== void 0) {
|
|
980
976
|
controller.enqueue(chunk);
|
|
981
977
|
}
|
|
982
978
|
}
|
|
@@ -1154,7 +1150,7 @@ async function proxyRequest(event, target, opts = {}) {
|
|
|
1154
1150
|
body = getRequestWebStream(event);
|
|
1155
1151
|
duplex = "half";
|
|
1156
1152
|
} else {
|
|
1157
|
-
body = await readRawBody(event, false).catch(() =>
|
|
1153
|
+
body = await readRawBody(event, false).catch(() => void 0);
|
|
1158
1154
|
}
|
|
1159
1155
|
}
|
|
1160
1156
|
const method = opts.fetchOptions?.method || event.method;
|
|
@@ -1234,7 +1230,7 @@ async function sendProxy(event, target, opts = {}) {
|
|
|
1234
1230
|
if (opts.onResponse) {
|
|
1235
1231
|
await opts.onResponse(event, response);
|
|
1236
1232
|
}
|
|
1237
|
-
if (response._data !==
|
|
1233
|
+
if (response._data !== void 0) {
|
|
1238
1234
|
return response._data;
|
|
1239
1235
|
}
|
|
1240
1236
|
if (event.handled) {
|
|
@@ -1308,8 +1304,9 @@ function mergeHeaders(defaults, ...inputs) {
|
|
|
1308
1304
|
}
|
|
1309
1305
|
const merged = new Headers(defaults);
|
|
1310
1306
|
for (const input of _inputs) {
|
|
1311
|
-
|
|
1312
|
-
|
|
1307
|
+
const entries = Array.isArray(input) ? input : typeof input.entries === "function" ? input.entries() : Object.entries(input);
|
|
1308
|
+
for (const [key, value] of entries) {
|
|
1309
|
+
if (value !== void 0) {
|
|
1313
1310
|
merged.set(key, value);
|
|
1314
1311
|
}
|
|
1315
1312
|
}
|
|
@@ -1426,7 +1423,7 @@ async function updateSession(event, config, update) {
|
|
|
1426
1423
|
const sealed = await sealSession(event, config);
|
|
1427
1424
|
setCookie(event, sessionName, sealed, {
|
|
1428
1425
|
...DEFAULT_COOKIE,
|
|
1429
|
-
expires: config.maxAge ? new Date(session.createdAt + config.maxAge * 1e3) :
|
|
1426
|
+
expires: config.maxAge ? new Date(session.createdAt + config.maxAge * 1e3) : void 0,
|
|
1430
1427
|
...config.cookie
|
|
1431
1428
|
});
|
|
1432
1429
|
}
|
|
@@ -1512,7 +1509,7 @@ function setEventStreamHeaders(event) {
|
|
|
1512
1509
|
setResponseHeaders(event, headers);
|
|
1513
1510
|
}
|
|
1514
1511
|
function isHttp2Request(event) {
|
|
1515
|
-
return getHeader(event, ":path") !==
|
|
1512
|
+
return getHeader(event, ":path") !== void 0 && getHeader(event, ":method") !== void 0;
|
|
1516
1513
|
}
|
|
1517
1514
|
|
|
1518
1515
|
class EventStream {
|
|
@@ -1602,7 +1599,7 @@ class EventStream {
|
|
|
1602
1599
|
}
|
|
1603
1600
|
if (this._unsentData?.length) {
|
|
1604
1601
|
await this._writer.write(this._encoder.encode(this._unsentData));
|
|
1605
|
-
this._unsentData =
|
|
1602
|
+
this._unsentData = void 0;
|
|
1606
1603
|
}
|
|
1607
1604
|
}
|
|
1608
1605
|
/**
|
|
@@ -1680,10 +1677,7 @@ async function serveStatic(event, options) {
|
|
|
1680
1677
|
}
|
|
1681
1678
|
if (!meta) {
|
|
1682
1679
|
if (!options.fallthrough) {
|
|
1683
|
-
throw createError({
|
|
1684
|
-
statusMessage: "Cannot find static asset " + id,
|
|
1685
|
-
statusCode: 404
|
|
1686
|
-
});
|
|
1680
|
+
throw createError({ statusCode: 404 });
|
|
1687
1681
|
}
|
|
1688
1682
|
return false;
|
|
1689
1683
|
}
|
|
@@ -1712,7 +1706,7 @@ async function serveStatic(event, options) {
|
|
|
1712
1706
|
if (meta.encoding && !getResponseHeader(event, "content-encoding")) {
|
|
1713
1707
|
setResponseHeader(event, "content-encoding", meta.encoding);
|
|
1714
1708
|
}
|
|
1715
|
-
if (meta.size !==
|
|
1709
|
+
if (meta.size !== void 0 && meta.size > 0 && !getResponseHeader(event, "content-length")) {
|
|
1716
1710
|
setResponseHeader(event, "content-length", meta.size);
|
|
1717
1711
|
}
|
|
1718
1712
|
if (event.method === "HEAD") {
|
|
@@ -1854,7 +1848,7 @@ function defineEventHandler(handler) {
|
|
|
1854
1848
|
return _handler;
|
|
1855
1849
|
}
|
|
1856
1850
|
function _normalizeArray(input) {
|
|
1857
|
-
return input ? Array.isArray(input) ? input : [input] :
|
|
1851
|
+
return input ? Array.isArray(input) ? input : [input] : void 0;
|
|
1858
1852
|
}
|
|
1859
1853
|
async function _callHandler(event, handler, hooks) {
|
|
1860
1854
|
if (hooks.onRequest) {
|
|
@@ -1984,7 +1978,7 @@ function use(app, arg1, arg2, arg3) {
|
|
|
1984
1978
|
return app;
|
|
1985
1979
|
}
|
|
1986
1980
|
function createAppEventHandler(stack, options) {
|
|
1987
|
-
const spacing = options.debug ? 2 :
|
|
1981
|
+
const spacing = options.debug ? 2 : void 0;
|
|
1988
1982
|
return eventHandler(async (event) => {
|
|
1989
1983
|
event.node.req.originalUrl = event.node.req.originalUrl || event.node.req.url || "/";
|
|
1990
1984
|
const _reqPath = event._path || event.node.req.url || "/";
|
|
@@ -2007,8 +2001,8 @@ function createAppEventHandler(stack, options) {
|
|
|
2007
2001
|
event._path = _layerPath;
|
|
2008
2002
|
event.node.req.url = _layerPath;
|
|
2009
2003
|
const val = await layer.handler(event);
|
|
2010
|
-
const _body = val ===
|
|
2011
|
-
if (_body !==
|
|
2004
|
+
const _body = val === void 0 ? void 0 : await val;
|
|
2005
|
+
if (_body !== void 0) {
|
|
2012
2006
|
const _response = { body: _body };
|
|
2013
2007
|
if (options.onBeforeResponse) {
|
|
2014
2008
|
event._onBeforeResponseCalled = true;
|
|
@@ -2024,7 +2018,7 @@ function createAppEventHandler(stack, options) {
|
|
|
2024
2018
|
if (event.handled) {
|
|
2025
2019
|
if (options.onAfterResponse) {
|
|
2026
2020
|
event._onAfterResponseCalled = true;
|
|
2027
|
-
await options.onAfterResponse(event,
|
|
2021
|
+
await options.onAfterResponse(event, void 0);
|
|
2028
2022
|
}
|
|
2029
2023
|
return;
|
|
2030
2024
|
}
|
|
@@ -2037,7 +2031,7 @@ function createAppEventHandler(stack, options) {
|
|
|
2037
2031
|
}
|
|
2038
2032
|
if (options.onAfterResponse) {
|
|
2039
2033
|
event._onAfterResponseCalled = true;
|
|
2040
|
-
await options.onAfterResponse(event,
|
|
2034
|
+
await options.onAfterResponse(event, void 0);
|
|
2041
2035
|
}
|
|
2042
2036
|
});
|
|
2043
2037
|
}
|
|
@@ -2052,7 +2046,7 @@ function createResolver(stack) {
|
|
|
2052
2046
|
continue;
|
|
2053
2047
|
}
|
|
2054
2048
|
_layerPath = path.slice(layer.route.length) || "/";
|
|
2055
|
-
if (layer.match && !layer.match(_layerPath,
|
|
2049
|
+
if (layer.match && !layer.match(_layerPath, void 0)) {
|
|
2056
2050
|
continue;
|
|
2057
2051
|
}
|
|
2058
2052
|
let res = { route: layer.route, handler: layer.handler };
|
|
@@ -2079,7 +2073,7 @@ function normalizeLayer(input) {
|
|
|
2079
2073
|
if (input.lazy) {
|
|
2080
2074
|
handler = lazyEventHandler(handler);
|
|
2081
2075
|
} else if (!isEventHandler(handler)) {
|
|
2082
|
-
handler = toEventHandler(handler,
|
|
2076
|
+
handler = toEventHandler(handler, void 0, input.route);
|
|
2083
2077
|
}
|
|
2084
2078
|
return {
|
|
2085
2079
|
route: withoutTrailingSlash(input.route),
|
|
@@ -2118,7 +2112,7 @@ function handleHandlerResponse(event, val, jsonSpace) {
|
|
|
2118
2112
|
return send(event, val, MIMES.html);
|
|
2119
2113
|
}
|
|
2120
2114
|
if (valType === "object" || valType === "boolean" || valType === "number") {
|
|
2121
|
-
return send(event, JSON.stringify(val,
|
|
2115
|
+
return send(event, JSON.stringify(val, void 0, jsonSpace), MIMES.json);
|
|
2122
2116
|
}
|
|
2123
2117
|
if (valType === "bigint") {
|
|
2124
2118
|
return send(event, val.toString(), MIMES.json);
|
|
@@ -2176,7 +2170,7 @@ function createRouter(opts = {}) {
|
|
|
2176
2170
|
addRoute(path, handler, m);
|
|
2177
2171
|
}
|
|
2178
2172
|
} else {
|
|
2179
|
-
route.handlers[method] = toEventHandler(handler,
|
|
2173
|
+
route.handlers[method] = toEventHandler(handler, void 0, path);
|
|
2180
2174
|
}
|
|
2181
2175
|
return router;
|
|
2182
2176
|
};
|
|
@@ -2246,7 +2240,7 @@ function createRouter(opts = {}) {
|
|
|
2246
2240
|
const params = match.matched.params || {};
|
|
2247
2241
|
event.context.params = params;
|
|
2248
2242
|
return Promise.resolve(match.handler(event)).then((res) => {
|
|
2249
|
-
if (res ===
|
|
2243
|
+
if (res === void 0 && isPreemptive) {
|
|
2250
2244
|
return null;
|
|
2251
2245
|
}
|
|
2252
2246
|
return res;
|
|
@@ -2338,7 +2332,7 @@ function callNodeListener(handler, req, res) {
|
|
|
2338
2332
|
res.off("close", next);
|
|
2339
2333
|
res.off("error", next);
|
|
2340
2334
|
}
|
|
2341
|
-
return err ? reject(createError(err)) : resolve(
|
|
2335
|
+
return err ? reject(createError(err)) : resolve(void 0);
|
|
2342
2336
|
};
|
|
2343
2337
|
try {
|
|
2344
2338
|
const returned = handler(req, res, next);
|
|
@@ -2438,7 +2432,7 @@ function _normalizeUnenvHeaders(input) {
|
|
|
2438
2432
|
for (const _value of value) {
|
|
2439
2433
|
headers.push([key, _value]);
|
|
2440
2434
|
}
|
|
2441
|
-
} else if (value !==
|
|
2435
|
+
} else if (value !== void 0) {
|
|
2442
2436
|
headers.push([key, String(value)]);
|
|
2443
2437
|
}
|
|
2444
2438
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "h3",
|
|
3
|
-
"version": "1.15.
|
|
3
|
+
"version": "1.15.3",
|
|
4
4
|
"description": "Minimal H(TTP) framework built for high performance and portability.",
|
|
5
5
|
"repository": "unjs/h3",
|
|
6
6
|
"license": "MIT",
|
|
@@ -34,42 +34,42 @@
|
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"cookie-es": "^1.2.2",
|
|
37
|
-
"crossws": "^0.3.
|
|
37
|
+
"crossws": "^0.3.4",
|
|
38
38
|
"defu": "^6.1.4",
|
|
39
|
-
"destr": "^2.0.
|
|
39
|
+
"destr": "^2.0.5",
|
|
40
40
|
"iron-webcrypto": "^1.2.1",
|
|
41
41
|
"node-mock-http": "^1.0.0",
|
|
42
42
|
"radix3": "^1.1.2",
|
|
43
|
-
"ufo": "^1.
|
|
43
|
+
"ufo": "^1.6.1",
|
|
44
44
|
"uncrypto": "^0.1.3"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"0x": "^5.8.0",
|
|
48
|
-
"@types/express": "^5.0.
|
|
49
|
-
"@types/node": "^22.
|
|
50
|
-
"@types/supertest": "^6.0.
|
|
51
|
-
"@vitest/coverage-v8": "^3.
|
|
48
|
+
"@types/express": "^5.0.1",
|
|
49
|
+
"@types/node": "^22.15.2",
|
|
50
|
+
"@types/supertest": "^6.0.3",
|
|
51
|
+
"@vitest/coverage-v8": "^3.1.2",
|
|
52
52
|
"autocannon": "^8.0.0",
|
|
53
|
-
"automd": "^0.
|
|
54
|
-
"changelogen": "^0.
|
|
53
|
+
"automd": "^0.4.0",
|
|
54
|
+
"changelogen": "^0.6.1",
|
|
55
55
|
"connect": "^3.7.0",
|
|
56
|
-
"eslint": "^9.
|
|
56
|
+
"eslint": "^9.25.1",
|
|
57
57
|
"eslint-config-unjs": "^0.4.2",
|
|
58
|
-
"express": "^
|
|
58
|
+
"express": "^5.1.0",
|
|
59
59
|
"get-port": "^7.1.0",
|
|
60
|
-
"h3": "^1.
|
|
60
|
+
"h3": "^1.15.1",
|
|
61
61
|
"jiti": "^2.4.2",
|
|
62
62
|
"listhen": "^1.9.0",
|
|
63
63
|
"node-fetch-native": "^1.6.6",
|
|
64
|
-
"prettier": "^3.
|
|
65
|
-
"react": "^19.
|
|
66
|
-
"react-dom": "^19.
|
|
67
|
-
"supertest": "^7.
|
|
68
|
-
"typescript": "^5.
|
|
69
|
-
"unbuild": "^3.
|
|
70
|
-
"undici": "^7.
|
|
71
|
-
"vitest": "^3.
|
|
72
|
-
"zod": "^3.24.
|
|
64
|
+
"prettier": "^3.5.3",
|
|
65
|
+
"react": "^19.1.0",
|
|
66
|
+
"react-dom": "^19.1.0",
|
|
67
|
+
"supertest": "^7.1.0",
|
|
68
|
+
"typescript": "^5.8.3",
|
|
69
|
+
"unbuild": "^3.5.0",
|
|
70
|
+
"undici": "^7.8.0",
|
|
71
|
+
"vitest": "^3.1.2",
|
|
72
|
+
"zod": "^3.24.3"
|
|
73
73
|
},
|
|
74
74
|
"packageManager": "pnpm@10.2.0"
|
|
75
75
|
}
|