@depup/h3 2.0.1-depup.0

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.
Files changed (73) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/bin/h3.mjs +36 -0
  4. package/changes.json +5 -0
  5. package/dist/THIRD-PARTY-LICENSES.md +70 -0
  6. package/dist/_entries/bun.d.mts +6 -0
  7. package/dist/_entries/bun.mjs +16 -0
  8. package/dist/_entries/cloudflare.d.mts +6 -0
  9. package/dist/_entries/cloudflare.mjs +16 -0
  10. package/dist/_entries/deno.d.mts +6 -0
  11. package/dist/_entries/deno.mjs +16 -0
  12. package/dist/_entries/generic.d.mts +6 -0
  13. package/dist/_entries/generic.mjs +16 -0
  14. package/dist/_entries/node.d.mts +10 -0
  15. package/dist/_entries/node.mjs +19 -0
  16. package/dist/_entries/service-worker.d.mts +6 -0
  17. package/dist/_entries/service-worker.mjs +16 -0
  18. package/dist/_utils.mjs +240 -0
  19. package/dist/cache.mjs +599 -0
  20. package/dist/cache2.mjs +50 -0
  21. package/dist/cors.mjs +292 -0
  22. package/dist/docs/0.guide/0.index/index.md +117 -0
  23. package/dist/docs/0.guide/1.basics/0.lifecycle.md +68 -0
  24. package/dist/docs/0.guide/1.basics/1.routing.md +167 -0
  25. package/dist/docs/0.guide/1.basics/2.middleware.md +97 -0
  26. package/dist/docs/0.guide/1.basics/3.handler.md +165 -0
  27. package/dist/docs/0.guide/1.basics/4.response.md +171 -0
  28. package/dist/docs/0.guide/1.basics/5.error.md +117 -0
  29. package/dist/docs/0.guide/1.basics/6.nested-apps.md +57 -0
  30. package/dist/docs/0.guide/2.rules.md +698 -0
  31. package/dist/docs/0.guide/3.api/0.h3.md +144 -0
  32. package/dist/docs/0.guide/3.api/1.h3event.md +160 -0
  33. package/dist/docs/0.guide/4.advanced/0.plugins.md +50 -0
  34. package/dist/docs/0.guide/4.advanced/1.websocket.md +176 -0
  35. package/dist/docs/0.guide/4.advanced/2.nightly.md +13 -0
  36. package/dist/docs/1.utils/0.index/index.md +46 -0
  37. package/dist/docs/1.utils/1.request.md +447 -0
  38. package/dist/docs/1.utils/2.response.md +172 -0
  39. package/dist/docs/1.utils/3.cookie.md +33 -0
  40. package/dist/docs/1.utils/4.security.md +175 -0
  41. package/dist/docs/1.utils/5.proxy.md +57 -0
  42. package/dist/docs/1.utils/6.mcp.md +75 -0
  43. package/dist/docs/1.utils/7.more.md +117 -0
  44. package/dist/docs/1.utils/8.community.md +48 -0
  45. package/dist/docs/2.examples/0.index/index.md +17 -0
  46. package/dist/docs/2.examples/1.handle-cookie.md +67 -0
  47. package/dist/docs/2.examples/2.handle-query.md +76 -0
  48. package/dist/docs/2.examples/3.handle-session.md +210 -0
  49. package/dist/docs/2.examples/4.serve-static-assets.md +66 -0
  50. package/dist/docs/2.examples/5.stream-response.md +76 -0
  51. package/dist/docs/2.examples/6.validate-data.md +193 -0
  52. package/dist/docs/3.migration/0.index/index.md +204 -0
  53. package/dist/docs/README.md +37 -0
  54. package/dist/h3.d.mts +1669 -0
  55. package/dist/h3.mjs +1809 -0
  56. package/dist/index.d.mts +1634 -0
  57. package/dist/match.d.mts +123 -0
  58. package/dist/middleware.mjs +123 -0
  59. package/dist/normalize.mjs +645 -0
  60. package/dist/path.mjs +42 -0
  61. package/dist/proxy.mjs +254 -0
  62. package/dist/response.mjs +465 -0
  63. package/dist/rules/cache.d.mts +29 -0
  64. package/dist/rules/cache.mjs +163 -0
  65. package/dist/rules/compiler.d.mts +94 -0
  66. package/dist/rules/compiler.mjs +173 -0
  67. package/dist/rules/index.d.mts +77 -0
  68. package/dist/rules/index.mjs +34 -0
  69. package/dist/rules/proxy.d.mts +3 -0
  70. package/dist/rules/proxy.mjs +14 -0
  71. package/dist/tracing.d.mts +33 -0
  72. package/dist/tracing.mjs +89 -0
  73. package/package.json +148 -0
@@ -0,0 +1,204 @@
1
+ # Migration guide for v1 to v2
2
+
3
+ H3 version 2 includes some behavior and API changes that you need to consider applying when migrating.
4
+
5
+ > [!NOTE]
6
+ > Currently H3 v2 in beta stage. You can try with [nightly channel](/guide/advanced/nightly).
7
+
8
+ > [!NOTE]
9
+ > This is an undergoing migration guide and might be updated.
10
+
11
+ > [!TIP]
12
+ > H3 has a brand new documentation rewrite. Head to the new [Guide](/guide) section to learn more!
13
+
14
+ ## Latest Node.js and ESM-only
15
+
16
+ > [!TIP]
17
+ > H3 v2 requires Node.js >= 20.19 (latest LTS recommended) .
18
+
19
+ If your application is currently using CommonJS modules (`require` and `module.exports`), You can still use `require("h3")` thanks to `require(esm)` supported in latest Node.js versions.
20
+
21
+ You can alternatively use other compatible runtimes [Bun](https://bun.sh/) or [Deno](https://deno.com/).
22
+
23
+ ## Web Standards
24
+
25
+ > [!TIP]
26
+ > H3 v2 is rewritten based on web standard primitives ([`URL`](https://developer.mozilla.org/en-US/docs/Web/API/URL), [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers), [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request), and [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response)).
27
+
28
+ When using Node.js, H3 uses a compatibility layer ([💥 srvx](https://srvx.h3.dev/guide/node)) and in other runtimes uses native web compatibility APIs.
29
+
30
+ Access to the native `event.node.{req,res}` is only available when running server in Node.js runtime.
31
+
32
+ `event.web` is renamed to `event.req` (instance of web [Request](https://developer.mozilla.org/en-US/docs/Web/API/Request)).
33
+
34
+ ## Response Handling
35
+
36
+ > [!TIP]
37
+ > You should always explicitly **return** the response body or **throw** an error.
38
+
39
+ If you were previously using methods below, you can replace them with `return` statements returning a text, JSON, stream, or web `Response` (h3 smartly detects and handles each):
40
+
41
+ - `send(event, value)`: Migrate to `return <value>`.
42
+ - `sendError(event, <error>)`: Migrate to `throw createError(<error>)`.
43
+ - `sendStream(event, <stream>)`: Migrate to `return <stream>`.
44
+ - `sendWebResponse(event, <response>)`: Migrate to `return <response>`.
45
+ Other send utils that are renamed and need explicit `return`:
46
+
47
+ - `sendNoContent(event)` / `return null`: Migrate to `return noContent()`.
48
+ - `sendIterable(event, <value>)`: Migrate to `return iterable(<value>)`.
49
+ - `sendProxy(event, target)`: Migrate to `return proxy(event, target)`.
50
+ - `handleCors(event)`: Check return value and early `return` if handled(not `false`).
51
+ - `serveStatic(event, content)`: Make sure to add `return` before.
52
+ - `sendRedirect(event, location, code)`: Migrate to `return redirect(location, code)`.
53
+ <read-more></read-more>
54
+
55
+ ## H3 and Router
56
+
57
+ > [!TIP]
58
+ > Router function is now integrated into the H3 core.
59
+ > Instead of `createApp()` and `createRouter()` you can use [`new H3()`](/guide/api/h3).
60
+
61
+ Any handler can return a response. If middleware don't return a response, next handlers will be tried and finally make a 404 if neither responses. Router handlers can return or not return any response, in this case, H3 will send a simple 200 with empty content.
62
+
63
+ <read-more></read-more>
64
+
65
+ H3 migrated to a brand new route-matching engine ([🌳 rou3](https://rou3.h3.dev/)). You might experience slight (but more intuitive) behavior changes for matching patterns.
66
+
67
+ **Other changes from v1:**
68
+
69
+ - Middleware added with `app.use("/path", handler)` only matches `/path` (not `/path/foo/bar`). For matching all subpaths like before, it should be updated to `app.use("/path/**", handler)`.
70
+ - The `event.path` received in each handler will have a full path without omitting the prefixes. use `withBase(base, handler)` utility to make prefixed app. (example: `withBase("/api", app.handler)`).
71
+ - **`router.add(path, method: Method | Method[]` signature is changed to `router.add(method: Method, path)`**
72
+ - `router.use(path, handler)` is deprecated. Use `router.all(path, handler)` instead.
73
+ - `app.use(() => handler, { lazy: true })` is no supported anymore. Instead you can use `app.use(defineLazyEventHandler(() => handler), { lazy: true })`.
74
+ - `app.use(["/path1", "/path2"], ...)` and `app.use("/path", [handler1, handler2])` are not supported anymore. Instead, use multiple `app.use()` calls.
75
+ - `app.resolve(path)` removed.
76
+ <read-more></read-more>
77
+
78
+ <read-more></read-more>
79
+
80
+ ## Request Body
81
+
82
+ > [!TIP]
83
+ > Most of request body utilities can now be replaced with native `event.req.*` methods which is based on web [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Response) interface.
84
+
85
+ `readBody(event)` utility will use [`JSON.parse`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse) or [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) for parsing requests with `application/x-www-form-urlencoded` content-type.
86
+
87
+ - For text: Use [event.req.text()](https://developer.mozilla.org/en-US/docs/Web/API/Request/text).
88
+ - For json: Use [event.req.json()](https://developer.mozilla.org/en-US/docs/Web/API/Request/json).
89
+ - For formData: Use [event.req.formData()](https://developer.mozilla.org/en-US/docs/Web/API/Request/formData).
90
+ - For stream: Use [event.req.body](https://developer.mozilla.org/en-US/docs/Web/API/Request/body).
91
+ **Behavior changes:**
92
+
93
+ - Body utils won't throw an error if the incoming request has no body (or is a `GET` method for example) but instead, return empty values.
94
+ - Native `request.json` and `readBody` does not use [unjs/destr](https://destr.unjs.io) anymore. You should always filter and sanitize data coming from user to avoid [prototype-poisoning](https://medium.com/intrinsic-blog/javascript-prototype-poisoning-vulnerabilities-in-the-wild-7bc15347c96).
95
+
96
+ ## Cookie and Headers
97
+
98
+ > [!TIP]
99
+ H3 now natively uses standard web [`Headers`](https://developer.mozilla.org/en-US/docs/Web/API/Headers) for all utils.
100
+
101
+ Header values are always a plain `string` now (no `null` or `undefined` or `number` or `string[]`).
102
+
103
+ For the [`Set-Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) header, you can use [`headers.getSetCookie`](https://developer.mozilla.org/en-US/docs/Web/API/Headers/getSetCookie) that always returns a string array.
104
+
105
+ ## Other Deprecations
106
+
107
+ H3 v2 deprecated some legacy and aliased utilities.
108
+
109
+ ### App and router utils
110
+
111
+ - `createApp` / `createRouter`: Migrate to `new H3()`.
112
+
113
+ ### Error utils
114
+
115
+ - `createError`/`H3Error`: Migrate to `HTTPError`
116
+ - `isError`: Migrate to `HTTPError.isError`
117
+
118
+ ### Handler utils
119
+
120
+ - `eventHandler`/`defineEventHandler`: Migrate to `defineHandler` (you can also directly use a function!).
121
+ - `lazyEventHandler`: Migrate to `defineLazyEventHandler`.
122
+ - `isEventHandler`: (removed) Any function can be an event handler.
123
+ - `useBase`: Migrate to `withBase`.
124
+ - `defineRequestMiddleware` and `defineResponseMiddleware` removed.
125
+
126
+ ### Request utils
127
+
128
+ - `getHeader` / `getRequestHeader`: Migrate to `event.req.headers.get(name)`.
129
+ - `getHeaders` / `getRequestHeaders`: Migrate to `Object.fromEntries(event.req.headers.entries())`.
130
+ - `getRequestPath`: Migrate to `event.url.pathname`.
131
+ - `getMethod`: Migrate to `event.req.method`.
132
+
133
+ > [!IMPORTANT]
134
+ `getRequestProtocol` (and `getRequestURL`) no longer trust the `x-forwarded-proto` header by default. To honor it (only behind a trusted reverse proxy or CDN), opt in with `{ xForwardedProto: true }`. This matches the existing opt-in behavior of `getRequestHost` (`xForwardedHost`) and `getRequestIP` (`xForwardedFor`).
135
+
136
+ > [!NOTE]
137
+ > The following `H3Event` properties are deprecated in v2 and might be removed in a future version:
138
+
139
+ > - `event.path` → use `event.url.pathname + event.url.search`
140
+ > - `event.method` → use `event.req.method`
141
+ > - `event.headers` → use `event.req.headers`
142
+ > - `event.node` → use `event.runtime.node`
143
+
144
+ ### Response utils
145
+
146
+ - `getResponseHeader` / `getResponseHeaders`: Migrate to `event.res.headers.get(name)`
147
+ - `setHeader` / `setResponseHeader` / `setHeaders` / `setResponseHeaders`: Migrate to `event.res.headers.set(name, value)`.
148
+ - `appendHeader` / `appendResponseHeader` / `appendResponseHeaders`: Migrate to `event.res.headers.append(name, value)`.
149
+ - `removeResponseHeader` / `clearResponseHeaders`: Migrate to `event.res.headers.delete(name)`
150
+ - `appendHeaders`: Migrate to `appendResponseHeaders`.
151
+ - `defaultContentType`: Migrate to `event.res.headers.set("content-type", type)`
152
+ - `getResponseStatus` / `getResponseStatusText` / `setResponseStatus`: Use `event.res.status` and `event.res.statusText`.
153
+
154
+ ### Node.js utils
155
+
156
+ - `defineNodeListener`: Migrate to `defineNodeHandler`.
157
+ - `fromNodeMiddleware`: Migrate to `fromNodeHandler`.
158
+ - `toNodeListener`: Migrate to `toNodeHandler`.
159
+ - `createEvent`: (removed): Use Node.js adapter (`toNodeHandler(app)`).
160
+ - `fromNodeRequest`: (removed): Use Node.js adapter (`toNodeHandler(app)`).
161
+ - `promisifyNodeListener` (removed).
162
+ - `callNodeListener`: (removed).
163
+
164
+ ### Web Utils
165
+
166
+ - `fromPlainHandler`: (removed) Migrate to Web API.
167
+ - `toPlainHandler`: (removed) Migrate to Web API.
168
+ - `fromPlainRequest` (removed) Migrate to Web API or use `mockEvent` util for testing.
169
+ - `callWithPlainRequest` (removed) Migrate to Web API.
170
+ - `fromWebRequest`: (removed) Migrate to Web API.
171
+ - `callWithWebRequest`: (removed).
172
+
173
+ ### Body Utils
174
+
175
+ - `readRawBody`: Migrate to `event.req.text()` or `event.req.arrayBuffer()`.
176
+ - `getBodyStream` / `getRequestWebStream`: Migrate to `event.req.body`.
177
+ - `readFormData` / `readMultipartFormData` / `readFormDataBody`: Migrate to `event.req.formData()`.
178
+
179
+ ### Other Utils
180
+
181
+ - `createEventStream`: Migrate to `new EventStream(event)`.
182
+ - `isStream`: Migrate to `instanceof ReadableStream`.
183
+ - `isWebResponse`: Migrate to `instanceof Response`.
184
+ - `splitCookiesString`: Use `splitSetCookieString` from [cookie-es](https://github.com/unjs/cookie-es).
185
+ - `MIMES`: (removed).
186
+
187
+ ### Type Exports
188
+
189
+ > [!NOTE]
190
+ There might be more type changes.
191
+
192
+ - `App`: Migrate to `H3`.
193
+ - `AppOptions`: Migrate to `H3Config`.
194
+ - `_RequestMiddleware`: Migrate to `RequestMiddleware`.
195
+ - `_ResponseMiddleware`: Migrate to `ResponseMiddleware`.
196
+ - `NodeListener`: Migrate to `NodeHandler`.
197
+ - `TypedHeaders`: Migrate to `RequestHeaders` and `ResponseHeaders`.
198
+ - `HTTPHeaderName`: Migrate to `RequestHeaderName` and `ResponseHeaderName`.
199
+ - `H3Headers`: Migrate to native `Headers`.
200
+ - `H3Response`: Migrate to native `Response`.
201
+ - `MultiPartData`: Migrate to native `FormData`.
202
+ - `RouteNode`: Migrate to `RouterEntry`.
203
+ `CreateRouterOptions`: Migrate to `RouterOptions`.
204
+ Removed type exports: `WebEventContext`, `NodeEventContext`, `NodePromisifiedHandler`, `AppUse`, `Stack`, `InputLayer`, `InputStack`, `Layer`, `Matcher`, `PlainHandler`, `PlainRequest`, `PlainResponse`, `WebHandler`.
@@ -0,0 +1,37 @@
1
+ # H3 Documentation
2
+
3
+ - [Guide](./0.guide/0.index/index.md)
4
+ - [Getting Started](./0.guide/0.index/index.md)
5
+ - [Request Lifecycle](./0.guide/1.basics/0.lifecycle.md)
6
+ - [Routing](./0.guide/1.basics/1.routing.md)
7
+ - [Middleware](./0.guide/1.basics/2.middleware.md)
8
+ - [Event Handlers](./0.guide/1.basics/3.handler.md)
9
+ - [Sending Response](./0.guide/1.basics/4.response.md)
10
+ - [Error Handling](./0.guide/1.basics/5.error.md)
11
+ - [Nested Apps](./0.guide/1.basics/6.nested-apps.md)
12
+ - [Route Rules](./0.guide/2.rules.md)
13
+ - [H3](./0.guide/3.api/0.h3.md)
14
+ - [H3Event](./0.guide/3.api/1.h3event.md)
15
+ - [Plugins](./0.guide/4.advanced/0.plugins.md)
16
+ - [WebSockets](./0.guide/4.advanced/1.websocket.md)
17
+ - [Nightly Builds](./0.guide/4.advanced/2.nightly.md)
18
+ - [Utils](./1.utils/0.index/index.md)
19
+ - [Community](./1.utils/0.index/index.md)
20
+ - [Request](./1.utils/1.request.md)
21
+ - [Response](./1.utils/2.response.md)
22
+ - [Cookie](./1.utils/3.cookie.md)
23
+ - [Security](./1.utils/4.security.md)
24
+ - [Proxy](./1.utils/5.proxy.md)
25
+ - [MCP](./1.utils/6.mcp.md)
26
+ - [More utils](./1.utils/7.more.md)
27
+ - [Community](./1.utils/8.community.md)
28
+ - [Examples](./2.examples/0.index/index.md)
29
+ - [Examples](./2.examples/0.index/index.md)
30
+ - [Cookies](./2.examples/1.handle-cookie.md)
31
+ - [HTTP QUERY Method](./2.examples/2.handle-query.md)
32
+ - [Sessions](./2.examples/3.handle-session.md)
33
+ - [Static Assets](./2.examples/4.serve-static-assets.md)
34
+ - [Stream Response](./2.examples/5.stream-response.md)
35
+ - [Validate Data](./2.examples/6.validate-data.md)
36
+ - [Migration](./3.migration/0.index/index.md)
37
+ - [Migration](./3.migration/0.index/index.md)