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 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 !== undefined) {
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 !== undefined) {
117
+ if (input.fatal !== void 0) {
118
118
  err.fatal = input.fatal;
119
119
  }
120
- if (input.unhandled !== undefined) {
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, undefined, 2));
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(undefined);
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 undefined;
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 !== undefined) {
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) >= opts.modifiedTime) {
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 undefined;
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 !== undefined) {
980
+ if (value !== void 0) {
985
981
  const chunk = serializer(value);
986
- if (chunk !== undefined) {
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(() => undefined);
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 !== undefined) {
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
- for (const [key, value] of Object.entries(input)) {
1319
- if (value !== undefined) {
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) : undefined,
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") !== undefined && getHeader(event, ":method") !== undefined;
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 = undefined;
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 !== undefined && meta.size > 0 && !getResponseHeader(event, "content-length")) {
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] : undefined;
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 : undefined;
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 === undefined ? undefined : await val;
2018
- if (_body !== undefined) {
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, undefined);
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, undefined);
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, undefined)) {
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, undefined, input.route);
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, undefined, jsonSpace), MIMES.json);
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, undefined, path);
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 === undefined && isPreemptive) {
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(undefined);
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 !== undefined) {
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>, "data" | "statusCode" | "statusMessage" | "message">;
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 { type AddRouteShortcuts, type App, type AppOptions, type AppUse, type CacheConditions, type CreateRouterOptions, type Duplex, type DynamicEventHandler, type Encoding, type EventHandler, type EventHandlerObject, type EventHandlerRequest, type EventHandlerResolver, type EventHandlerResponse, type EventStream, type EventStreamMessage, type EventStreamOptions, type H3CorsOptions, H3Error, H3Event, type H3EventContext, H3Headers, H3Response, type HTTPHeaderName, type HTTPMethod, type InferEventInput, type InputLayer, type InputStack, type Layer, type LazyEventHandler, MIMES, type Matcher, type MimeType, type MultiPartData, type NodeEventContext, type NodeListener, type NodeMiddleware, type NodePromisifiedHandler, type PlainHandler, type PlainRequest, type PlainResponse, type ProxyOptions, type RequestFingerprintOptions, type RequestHeaders, type RouteNode, type Router, type RouterMethod, type RouterUse, type ServeStaticOptions, type Session, type SessionConfig, type SessionData, type Stack, type StaticAssetMeta, type StatusCode, type TypedHeaders, type ValidateFunction, type ValidateResult, type WebEventContext, type WebHandler, type WebSocketOptions, type _RequestMiddleware, type _ResponseMiddleware, 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 };
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>, "data" | "statusCode" | "statusMessage" | "message">;
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 { type AddRouteShortcuts, type App, type AppOptions, type AppUse, type CacheConditions, type CreateRouterOptions, type Duplex, type DynamicEventHandler, type Encoding, type EventHandler, type EventHandlerObject, type EventHandlerRequest, type EventHandlerResolver, type EventHandlerResponse, type EventStream, type EventStreamMessage, type EventStreamOptions, type H3CorsOptions, H3Error, H3Event, type H3EventContext, H3Headers, H3Response, type HTTPHeaderName, type HTTPMethod, type InferEventInput, type InputLayer, type InputStack, type Layer, type LazyEventHandler, MIMES, type Matcher, type MimeType, type MultiPartData, type NodeEventContext, type NodeListener, type NodeMiddleware, type NodePromisifiedHandler, type PlainHandler, type PlainRequest, type PlainResponse, type ProxyOptions, type RequestFingerprintOptions, type RequestHeaders, type RouteNode, type Router, type RouterMethod, type RouterUse, type ServeStaticOptions, type Session, type SessionConfig, type SessionData, type Stack, type StaticAssetMeta, type StatusCode, type TypedHeaders, type ValidateFunction, type ValidateResult, type WebEventContext, type WebHandler, type WebSocketOptions, type _RequestMiddleware, type _ResponseMiddleware, 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 };
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>, "data" | "statusCode" | "statusMessage" | "message">;
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 { type AddRouteShortcuts, type App, type AppOptions, type AppUse, type CacheConditions, type CreateRouterOptions, type Duplex, type DynamicEventHandler, type Encoding, type EventHandler, type EventHandlerObject, type EventHandlerRequest, type EventHandlerResolver, type EventHandlerResponse, type EventStream, type EventStreamMessage, type EventStreamOptions, type H3CorsOptions, H3Error, H3Event, type H3EventContext, H3Headers, H3Response, type HTTPHeaderName, type HTTPMethod, type InferEventInput, type InputLayer, type InputStack, type Layer, type LazyEventHandler, MIMES, type Matcher, type MimeType, type MultiPartData, type NodeEventContext, type NodeListener, type NodeMiddleware, type NodePromisifiedHandler, type PlainHandler, type PlainRequest, type PlainResponse, type ProxyOptions, type RequestFingerprintOptions, type RequestHeaders, type RouteNode, type Router, type RouterMethod, type RouterUse, type ServeStaticOptions, type Session, type SessionConfig, type SessionData, type Stack, type StaticAssetMeta, type StatusCode, type TypedHeaders, type ValidateFunction, type ValidateResult, type WebEventContext, type WebHandler, type WebSocketOptions, type _RequestMiddleware, type _ResponseMiddleware, 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 };
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 !== undefined) {
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 !== undefined) {
110
+ if (input.fatal !== void 0) {
111
111
  err.fatal = input.fatal;
112
112
  }
113
- if (input.unhandled !== undefined) {
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, undefined, 2));
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(undefined);
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 undefined;
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 !== undefined) {
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) >= opts.modifiedTime) {
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 undefined;
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 !== undefined) {
973
+ if (value !== void 0) {
978
974
  const chunk = serializer(value);
979
- if (chunk !== undefined) {
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(() => undefined);
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 !== undefined) {
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
- for (const [key, value] of Object.entries(input)) {
1312
- if (value !== undefined) {
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) : undefined,
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") !== undefined && getHeader(event, ":method") !== undefined;
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 = undefined;
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 !== undefined && meta.size > 0 && !getResponseHeader(event, "content-length")) {
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] : undefined;
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 : undefined;
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 === undefined ? undefined : await val;
2011
- if (_body !== undefined) {
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, undefined);
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, undefined);
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, undefined)) {
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, undefined, input.route);
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, undefined, jsonSpace), MIMES.json);
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, undefined, path);
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 === undefined && isPreemptive) {
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(undefined);
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 !== undefined) {
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.1",
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.3",
37
+ "crossws": "^0.3.4",
38
38
  "defu": "^6.1.4",
39
- "destr": "^2.0.3",
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.5.4",
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.0",
49
- "@types/node": "^22.13.1",
50
- "@types/supertest": "^6.0.2",
51
- "@vitest/coverage-v8": "^3.0.5",
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.3.12",
54
- "changelogen": "^0.5.7",
53
+ "automd": "^0.4.0",
54
+ "changelogen": "^0.6.1",
55
55
  "connect": "^3.7.0",
56
- "eslint": "^9.19.0",
56
+ "eslint": "^9.25.1",
57
57
  "eslint-config-unjs": "^0.4.2",
58
- "express": "^4.21.2",
58
+ "express": "^5.1.0",
59
59
  "get-port": "^7.1.0",
60
- "h3": "^1.14.0",
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.4.2",
65
- "react": "^19.0.0",
66
- "react-dom": "^19.0.0",
67
- "supertest": "^7.0.0",
68
- "typescript": "^5.7.3",
69
- "unbuild": "^3.3.1",
70
- "undici": "^7.3.0",
71
- "vitest": "^3.0.5",
72
- "zod": "^3.24.1"
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
  }