h3-nightly 2.0.1-rc.5 → 2.0.1-rc.6

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/h3.d.mts CHANGED
@@ -426,7 +426,7 @@ interface TypedRequest<Body = unknown, Headers$1 extends Record<string, string>
426
426
  headers: TypedHeaders<Headers$1>;
427
427
  }
428
428
  type MaybePromise<T = unknown> = T | Promise<T>;
429
- type HTTPHandler = EventHandler | FetchableObject | H3Core$1;
429
+ type HTTPHandler = EventHandler | FetchableObject | H3Core;
430
430
  interface EventHandler<_RequestT extends EventHandlerRequest = EventHandlerRequest, _ResponseT extends EventHandlerResponse = EventHandlerResponse> {
431
431
  (event: H3Event<_RequestT>): _ResponseT;
432
432
  meta?: H3RouteMeta;
@@ -640,7 +640,7 @@ type MiddlewareOptions = {
640
640
  method?: string;
641
641
  match?: (event: H3Event) => boolean;
642
642
  };
643
- declare class H3Core {
643
+ declare class H3Core$1 {
644
644
  /**
645
645
  * H3 instance config.
646
646
  */
@@ -674,7 +674,7 @@ declare class H3Core {
674
674
  /** @internal */
675
675
  "~addRoute"(_route: H3Route): void;
676
676
  }
677
- declare class H3$1 extends H3Core {
677
+ declare class H3$1 extends H3Core$1 {
678
678
  /** @internal */
679
679
  "~rou3": RouterContext;
680
680
  /**
@@ -751,7 +751,7 @@ declare class H3Event<_RequestT extends EventHandlerRequest = EventHandlerReques
751
751
  /**
752
752
  * Access to the H3 application instance.
753
753
  */
754
- app?: H3Core$1;
754
+ app?: H3Core;
755
755
  /**
756
756
  * Incoming HTTP request info.
757
757
  *
@@ -772,7 +772,7 @@ declare class H3Event<_RequestT extends EventHandlerRequest = EventHandlerReques
772
772
  * @internal
773
773
  */
774
774
  static __is_event__: boolean;
775
- constructor(req: ServerRequest, context?: H3EventContext, app?: H3Core$1);
775
+ constructor(req: ServerRequest, context?: H3EventContext, app?: H3Core);
776
776
  /**
777
777
  * Prepared HTTP response.
778
778
  */
@@ -821,7 +821,7 @@ declare class H3EventResponse {
821
821
  statusText?: string;
822
822
  get headers(): Headers;
823
823
  }
824
- declare class H3Core$1 implements H3Core {
824
+ declare class H3Core implements H3Core$1 {
825
825
  readonly config: H3CoreConfig;
826
826
  "~middleware": Middleware[];
827
827
  "~routes": H3Route[];
@@ -1745,7 +1745,7 @@ declare function defineWebSocket(hooks: Partial<Hooks>): Partial<Hooks>;
1745
1745
  *
1746
1746
  * @see https://h3.dev/guide/websocket
1747
1747
  */
1748
- declare function defineWebSocketHandler(hooks: Partial<Hooks>): EventHandler;
1748
+ declare function defineWebSocketHandler(hooks: Partial<Hooks> | ((event: H3Event) => Partial<Hooks> | Promise<Partial<Hooks>>)): EventHandler;
1749
1749
  /** @deprecated Use `HTTPError` */
1750
1750
  type H3Error = HTTPError;
1751
1751
  /** @deprecated Use `HTTPError` */
@@ -1851,4 +1851,4 @@ declare const createApp: (config?: H3Config) => H3;
1851
1851
  declare const createRouter: (config?: H3Config) => H3;
1852
1852
  /** @deprecated Please use `withBase()` */
1853
1853
  declare const useBase: (base: string, input: EventHandler | H3) => EventHandler;
1854
- export { RequestFingerprintOptions as $, EventHandlerWithFetch as $n, getValidatedQuery as $t, readFormDataBody as A, H3EventContext as An, readValidatedBody as At, setHeader as B, RouteOptions as Bn, html as Bt, getResponseHeader as C, isEvent as Cn, getChunkedCookie as Ct, isError as D, H3Core$1 as Dn, setCookie as Dt, getResponseStatusText as E, H3 as En, setChunkedCookie as Et, sendNoContent as F, H3RouteMeta as Fn, proxyRequest as Ft, toNodeHandler as G, ErrorInput as Gn, assertMethod as Gt, setResponseHeader as H, definePlugin as Hn, noContent as Ht, sendProxy as I, HTTPMethod as In, bodyLimit as It, WebSocketHooks as J, EventHandler as Jn, getRequestIP as Jt, toNodeListener as K, HTTPError as Kn, getQuery as Kt, sendRedirect as L, MatchedRoute as Ln, onError as Lt, readRawBody as M, H3CoreConfig as Mn, fetchWithEvent as Mt, removeResponseHeader as N, H3Plugin as Nn, getProxyRequestHeaders as Nt, lazyEventHandler as O, H3Event as On, assertBodySize as Ot, sendIterable as P, H3Route as Pn, proxy as Pt, defineWebSocketHandler as Q, EventHandlerResponse as Qn, getRouterParams as Qt, sendStream as R, MiddlewareOptions as Rn, onRequest as Rt, getRequestWebStream as S, getEventContext as Sn, deleteCookie as St, getResponseStatus as T, mockEvent as Tn, parseCookies as Tt, setResponseHeaders as U, ErrorBody as Un, redirect as Ut, setHeaders as V, RouterContext as Vn, iterable as Vt, setResponseStatus as W, ErrorDetails as Wn, writeEarlyHints as Wt, WebSocketPeer as X, EventHandlerObject as Xn, getRequestURL as Xt, WebSocketMessage as Y, EventHandlerFetch as Yn, getRequestProtocol as Yt, defineWebSocket as Z, EventHandlerRequest as Zn, getRouterParam as Zt, getHeaders as _, defineHandler as _n, sanitizeStatusMessage as _t, appendResponseHeaders as a, NodeHandler as an, Middleware as ar, appendCorsHeaders as at, getRequestHeaders as b, dynamicEventHandler as bn, createEventStream as bt, createError as c, defineNodeMiddleware as cn, SessionConfig as cr, isPreflightRequest as ct, defineEventHandler as d, toWebHandler as dn, clearSession as dr, ServeStaticOptions as dt, getValidatedRouterParams as en, FetchHandler$1 as er, getRequestFingerprint as et, defineNodeListener as f, HTTPResponse as fn, getSession as fr, StaticAssetMeta as ft, getHeader as g, toMiddleware as gn, useSession as gr, sanitizeStatusCode as gt, getBodyStream as h, defineMiddleware as hn, updateSession as hr, handleCacheHeaders as ht, appendResponseHeader as i, defineRoute as in, LazyEventHandler as ir, CorsOptions as it, readMultipartFormData as j, H3Config as jn, ProxyOptions as jt, readFormData as k, HTTPEvent as kn, readBody as kt, createRouter as l, fromNodeHandler as ln, SessionData as lr, isCorsOriginAllowed as lt, fromNodeMiddleware as m, callMiddleware as mn, unsealSession as mr, CacheConditions as mt, appendHeader as n, toRequest as nn, HTTPHandler as nr, basicAuth as nt, clearResponseHeaders as o, NodeMiddleware as on, TypedServerRequest as or, appendCorsPreflightHeaders as ot, eventHandler as p, toResponse as pn, sealSession as pr, serveStatic as pt, useBase as q, DynamicEventHandler as qn, getRequestHost as qt, appendHeaders as r, RouteDefinition as rn, InferEventInput as rr, requireBasicAuth as rt, createApp as s, defineNodeHandler as sn, Session as sr, handleCors as st, H3Error as t, isMethod as tn, FetchableObject as tr, BasicAuthOptions as tt, defaultContentType as u, fromWebHandler as un, SessionManager as ur, withBase as ut, getMethod as v, defineLazyEventHandler as vn, EventStreamMessage as vt, getResponseHeaders as w, isHTTPEvent as wn, getCookie as wt, getRequestPath as x, toEventHandler as xn, deleteChunkedCookie as xt, getRequestHeader as y, defineValidatedHandler as yn, EventStreamOptions as yt, sendWebResponse as z, PreparedResponse as zn, onResponse as zt };
1854
+ export { RequestFingerprintOptions as $, EventHandlerWithFetch as $n, getValidatedQuery as $t, readFormDataBody as A, H3EventContext as An, readValidatedBody as At, setHeader as B, RouteOptions as Bn, html as Bt, getResponseHeader as C, isEvent as Cn, getChunkedCookie as Ct, isError as D, H3Core as Dn, setCookie as Dt, getResponseStatusText as E, H3 as En, setChunkedCookie as Et, sendNoContent as F, H3RouteMeta as Fn, proxyRequest as Ft, toNodeHandler as G, ErrorInput as Gn, assertMethod as Gt, setResponseHeader as H, definePlugin as Hn, noContent as Ht, sendProxy as I, HTTPMethod as In, bodyLimit as It, WebSocketHooks as J, EventHandler as Jn, getRequestIP as Jt, toNodeListener as K, HTTPError as Kn, getQuery as Kt, sendRedirect as L, MatchedRoute as Ln, onError as Lt, readRawBody as M, H3CoreConfig as Mn, fetchWithEvent as Mt, removeResponseHeader as N, H3Plugin as Nn, getProxyRequestHeaders as Nt, lazyEventHandler as O, H3Event as On, assertBodySize as Ot, sendIterable as P, H3Route as Pn, proxy as Pt, defineWebSocketHandler as Q, EventHandlerResponse as Qn, getRouterParams as Qt, sendStream as R, MiddlewareOptions as Rn, onRequest as Rt, getRequestWebStream as S, getEventContext as Sn, deleteCookie as St, getResponseStatus as T, mockEvent as Tn, parseCookies as Tt, setResponseHeaders as U, ErrorBody as Un, redirect as Ut, setHeaders as V, RouterContext as Vn, iterable as Vt, setResponseStatus as W, ErrorDetails as Wn, writeEarlyHints as Wt, WebSocketPeer as X, EventHandlerObject as Xn, getRequestURL as Xt, WebSocketMessage as Y, EventHandlerFetch as Yn, getRequestProtocol as Yt, defineWebSocket as Z, EventHandlerRequest as Zn, getRouterParam as Zt, getHeaders as _, defineHandler as _n, sanitizeStatusMessage as _t, appendResponseHeaders as a, NodeHandler as an, Middleware as ar, appendCorsHeaders as at, getRequestHeaders as b, dynamicEventHandler as bn, createEventStream as bt, createError as c, defineNodeMiddleware as cn, SessionConfig as cr, isPreflightRequest as ct, defineEventHandler as d, toWebHandler as dn, clearSession as dr, ServeStaticOptions as dt, getValidatedRouterParams as en, FetchHandler$1 as er, getRequestFingerprint as et, defineNodeListener as f, HTTPResponse as fn, getSession as fr, StaticAssetMeta as ft, getHeader as g, toMiddleware as gn, useSession as gr, sanitizeStatusCode as gt, getBodyStream as h, defineMiddleware as hn, updateSession as hr, handleCacheHeaders as ht, appendResponseHeader as i, defineRoute as in, LazyEventHandler as ir, CorsOptions as it, readMultipartFormData as j, H3Config as jn, ProxyOptions as jt, readFormData as k, HTTPEvent as kn, readBody as kt, createRouter as l, fromNodeHandler as ln, SessionData as lr, isCorsOriginAllowed as lt, fromNodeMiddleware as m, callMiddleware as mn, unsealSession as mr, CacheConditions as mt, appendHeader as n, toRequest as nn, HTTPHandler as nr, basicAuth as nt, clearResponseHeaders as o, NodeMiddleware as on, TypedServerRequest as or, appendCorsPreflightHeaders as ot, eventHandler as p, toResponse as pn, sealSession as pr, serveStatic as pt, useBase as q, DynamicEventHandler as qn, getRequestHost as qt, appendHeaders as r, RouteDefinition as rn, InferEventInput as rr, requireBasicAuth as rt, createApp as s, defineNodeHandler as sn, Session as sr, handleCors as st, H3Error as t, isMethod as tn, FetchableObject as tr, BasicAuthOptions as tt, defaultContentType as u, fromWebHandler as un, SessionManager as ur, withBase as ut, getMethod as v, defineLazyEventHandler as vn, EventStreamMessage as vt, getResponseHeaders as w, isHTTPEvent as wn, getCookie as wt, getRequestPath as x, toEventHandler as xn, deleteChunkedCookie as xt, getRequestHeader as y, defineValidatedHandler as yn, EventStreamOptions as yt, sendWebResponse as z, PreparedResponse as zn, onResponse as zt };
package/dist/h3.mjs CHANGED
@@ -231,6 +231,7 @@ function prepareResponse(val, event, config, nested) {
231
231
  }
232
232
  const preparedRes = event[kEventRes];
233
233
  const preparedHeaders = preparedRes?.[kEventResHeaders];
234
+ event[kEventRes] = void 0;
234
235
  if (!(val instanceof Response)) {
235
236
  const res = prepareResponseBody(val, event, config);
236
237
  const status = res.status || preparedRes?.status;
@@ -392,6 +393,7 @@ function is404(val) {
392
393
  return isUnhandledResponse(val) || val?.status === 404 && val instanceof Response;
393
394
  }
394
395
 
396
+
395
397
  const plusRegex = /\+/g;
396
398
  function parseQuery(input) {
397
399
  const params = new EmptyObject();
@@ -1241,8 +1243,7 @@ async function proxy(event, target, opts = {}) {
1241
1243
  const headers = new Headers();
1242
1244
  const cookies = [];
1243
1245
  for (const [key, value] of response.headers.entries()) {
1244
- if (key === "content-encoding") continue;
1245
- if (key === "content-length") continue;
1246
+ if (key === "content-encoding" || key === "content-length" || key === "transfer-encoding") continue;
1246
1247
  if (key === "set-cookie") {
1247
1248
  cookies.push(value);
1248
1249
  continue;
@@ -1832,6 +1833,7 @@ function withBase(base, input) {
1832
1833
  }
1833
1834
 
1834
1835
 
1836
+
1835
1837
  const defaults = /* @__PURE__ */ Object.freeze({
1836
1838
  ttl: 0,
1837
1839
  timestampSkewSec: 60,
@@ -2337,8 +2339,9 @@ function defineWebSocket(hooks) {
2337
2339
  }
2338
2340
 
2339
2341
  function defineWebSocketHandler(hooks) {
2340
- return defineHandler(function _webSocketHandler() {
2341
- return Object.assign(new Response("WebSocket upgrade is required.", { status: 426 }), { crossws: hooks });
2342
+ return defineHandler(function _webSocketHandler(event) {
2343
+ const crossws = typeof hooks === "function" ? hooks(event) : hooks;
2344
+ return Object.assign(new Response("WebSocket upgrade is required.", { status: 426 }), { crossws });
2342
2345
  });
2343
2346
  }
2344
2347
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "h3-nightly",
3
- "version": "2.0.1-rc.5",
3
+ "version": "2.0.1-rc.6",
4
4
  "description": "Minimal H(TTP) framework built for high performance and portability.",
5
5
  "homepage": "https://h3.dev",
6
6
  "repository": "h3js/h3",
@@ -48,45 +48,45 @@
48
48
  "h3": "link:."
49
49
  },
50
50
  "dependencies": {
51
- "rou3": "^0.7.9",
52
- "srvx": "^0.9.1"
51
+ "rou3": "^0.7.10",
52
+ "srvx": "^0.9.7"
53
53
  },
54
54
  "devDependencies": {
55
- "@happy-dom/global-registrator": "^20.0.8",
55
+ "@happy-dom/global-registrator": "^20.0.11",
56
56
  "@mitata/counters": "^0.0.8",
57
57
  "@types/connect": "^3.4.38",
58
- "@types/express": "^5.0.4",
59
- "@types/node": "^24.9.1",
60
- "@types/react": "^19.2.2",
61
- "@types/react-dom": "^19.2.2",
62
- "@vitest/coverage-v8": "^4.0.4",
58
+ "@types/express": "^5.0.6",
59
+ "@types/node": "^24.10.1",
60
+ "@types/react": "^19.2.7",
61
+ "@types/react-dom": "^19.2.3",
62
+ "@vitest/coverage-v8": "^4.0.15",
63
63
  "automd": "^0.4.2",
64
64
  "changelogen": "^0.6.2",
65
65
  "connect": "^3.7.0",
66
66
  "cookie-es": "^2.0.0",
67
67
  "crossws": "^0.4.1",
68
- "elysia": "^1.4.13",
69
- "esbuild": "^0.25.11",
70
- "eslint": "^9.38.0",
68
+ "elysia": "^1.4.18",
69
+ "esbuild": "^0.27.1",
70
+ "eslint": "^9.39.1",
71
71
  "eslint-config-unjs": "^0.5.0",
72
- "express": "^5.1.0",
72
+ "express": "^5.2.1",
73
73
  "fetchdts": "^0.1.7",
74
74
  "get-port-please": "^3.2.0",
75
- "h3-nightly": "^2.0.0-20251027-114947-241a45b",
76
- "happy-dom": "^20.0.8",
77
- "hono": "^4.10.3",
75
+ "h3-nightly": "^2.0.0-20251121-160644-d6475e1",
76
+ "happy-dom": "^20.0.11",
77
+ "hono": "^4.10.7",
78
78
  "magic-string": "^0.30.21",
79
79
  "memoirist": "^0.4.0",
80
80
  "mitata": "^1.0.34",
81
- "obuild": "^0.3.0",
82
- "oxc-parser": "^0.95.0",
83
- "prettier": "^3.6.2",
84
- "react": "^19.2.0",
85
- "react-dom": "^19.2.0",
81
+ "obuild": "^0.4.7",
82
+ "oxc-parser": "^0.101.0",
83
+ "prettier": "^3.7.4",
84
+ "react": "^19.2.1",
85
+ "react-dom": "^19.2.1",
86
86
  "typescript": "^5.9.3",
87
- "vite": "^7.1.12",
88
- "vitest": "^4.0.4",
89
- "zod": "^4.1.12"
87
+ "vite": "^7.2.7",
88
+ "vitest": "^4.0.15",
89
+ "zod": "^4.1.13"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "crossws": "^0.4.1"
@@ -96,7 +96,7 @@
96
96
  "optional": true
97
97
  }
98
98
  },
99
- "packageManager": "pnpm@10.19.0",
99
+ "packageManager": "pnpm@10.24.0",
100
100
  "engines": {
101
101
  "node": ">=20.11.1"
102
102
  }