nitro 3.0.0 → 3.0.1-alpha.1

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 (293) hide show
  1. package/dist/_build/common.mjs +68 -0
  2. package/dist/_build/common2.mjs +772 -0
  3. package/dist/_build/rolldown.mjs +206 -0
  4. package/dist/_build/rollup.mjs +289 -0
  5. package/dist/_build/vite.build.mjs +56 -0
  6. package/dist/_build/vite.plugin.mjs +768 -0
  7. package/dist/_chunks/ANM1K1bE.mjs +304 -0
  8. package/dist/_chunks/B-D1JOIz.mjs +1355 -0
  9. package/dist/_chunks/BX9-zVkM.mjs +59 -0
  10. package/dist/_chunks/Bqks5huO.mjs +31 -0
  11. package/dist/_chunks/C7CbzoI1.mjs +39 -0
  12. package/dist/_dev.d.mts +12 -0
  13. package/dist/_dev.mjs +705 -0
  14. package/dist/_libs/acorn.mjs +5034 -0
  15. package/dist/_libs/c12.mjs +2858 -0
  16. package/dist/_libs/chokidar.mjs +1561 -0
  17. package/dist/_libs/citty.mjs +333 -0
  18. package/dist/_libs/commondir.mjs +22 -0
  19. package/dist/_libs/compatx.mjs +46 -0
  20. package/dist/_libs/confbox.mjs +2920 -0
  21. package/dist/_libs/deepmerge.mjs +86 -0
  22. package/dist/_libs/dot-prop.mjs +138 -0
  23. package/dist/_libs/duplexer.mjs +71 -0
  24. package/dist/_libs/escape-string-regexp.mjs +8 -0
  25. package/dist/_libs/estree-walker.mjs +330 -0
  26. package/dist/_libs/etag.mjs +80 -0
  27. package/dist/_libs/fdir.mjs +514 -0
  28. package/dist/_libs/function-bind.mjs +63 -0
  29. package/dist/_libs/gen-mapping.mjs +612 -0
  30. package/dist/_libs/giget.mjs +19289 -0
  31. package/dist/_libs/gzip-size.mjs +21 -0
  32. package/dist/_libs/hasown.mjs +14 -0
  33. package/dist/_libs/httpxy.mjs +410 -0
  34. package/dist/_libs/is-core-module.mjs +220 -0
  35. package/dist/_libs/is-module.mjs +13 -0
  36. package/dist/_libs/is-reference.mjs +32 -0
  37. package/dist/_libs/js-tokens.mjs +382 -0
  38. package/dist/_libs/klona.mjs +38 -0
  39. package/dist/_libs/knitwork.mjs +124 -0
  40. package/dist/_libs/local-pkg.mjs +1686 -0
  41. package/dist/_libs/magic-string.mjs +939 -0
  42. package/dist/_libs/mime.mjs +1391 -0
  43. package/dist/_libs/node-fetch-native.mjs +173 -0
  44. package/dist/_libs/path-parse.mjs +47 -0
  45. package/dist/_libs/pathe.mjs +41 -0
  46. package/dist/_libs/picomatch.mjs +1673 -0
  47. package/dist/_libs/plugin-alias.mjs +64 -0
  48. package/dist/_libs/plugin-commonjs.mjs +1491 -0
  49. package/dist/_libs/plugin-inject.mjs +135 -0
  50. package/dist/_libs/plugin-json.mjs +36 -0
  51. package/dist/_libs/plugin-node-resolve.mjs +1553 -0
  52. package/dist/_libs/plugin-replace.mjs +104 -0
  53. package/dist/_libs/pretty-bytes.mjs +116 -0
  54. package/dist/_libs/remapping.mjs +117 -0
  55. package/dist/_libs/rou3.mjs +319 -0
  56. package/dist/_libs/std-env.mjs +158 -0
  57. package/dist/_libs/strip-literal.mjs +51 -0
  58. package/dist/_libs/tinyglobby.mjs +292 -0
  59. package/dist/_libs/tsconfck.mjs +832 -0
  60. package/dist/_libs/ultrahtml.mjs +138 -0
  61. package/dist/_libs/unimport.mjs +3520 -0
  62. package/dist/_libs/untyped.mjs +271 -0
  63. package/dist/_libs/unwasm.mjs +5836 -0
  64. package/dist/_libs/vite-plugin-fullstack.mjs +561 -0
  65. package/dist/_presets.mjs +1752 -0
  66. package/dist/builder.d.mts +63 -0
  67. package/dist/builder.mjs +33 -0
  68. package/dist/cli/_chunks/build.mjs +48 -0
  69. package/dist/cli/_chunks/common.mjs +15 -0
  70. package/dist/cli/_chunks/detect-acorn.mjs +12 -0
  71. package/dist/cli/_chunks/dev.mjs +68 -0
  72. package/dist/cli/_chunks/dist.mjs +3 -0
  73. package/dist/cli/_chunks/dist2.mjs +3 -0
  74. package/dist/cli/_chunks/dist3.mjs +3 -0
  75. package/dist/cli/_chunks/dist4.mjs +4 -0
  76. package/dist/cli/_chunks/dist5.mjs +4 -0
  77. package/dist/cli/_chunks/esm.mjs +3 -0
  78. package/dist/cli/_chunks/json5.mjs +4 -0
  79. package/dist/cli/_chunks/jsonc.mjs +4 -0
  80. package/dist/cli/_chunks/list.mjs +27 -0
  81. package/dist/cli/_chunks/multipart-parser.mjs +6 -0
  82. package/dist/cli/_chunks/prepare.mjs +19 -0
  83. package/dist/cli/_chunks/run.mjs +55 -0
  84. package/dist/cli/_chunks/task.mjs +16 -0
  85. package/dist/cli/_chunks/toml.mjs +4 -0
  86. package/dist/cli/_chunks/yaml.mjs +4 -0
  87. package/dist/cli/index.d.mts +1 -1
  88. package/dist/cli/index.mjs +20 -476
  89. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +1 -1
  90. package/dist/node_modules/@poppinss/dumper/package.json +1 -1
  91. package/dist/node_modules/@sindresorhus/is/distribution/index.js +1 -1
  92. package/dist/node_modules/@sindresorhus/is/package.json +1 -1
  93. package/dist/node_modules/@speed-highlight/core/dist/index.js +2 -2
  94. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -2
  95. package/dist/node_modules/@speed-highlight/core/package.json +7 -3
  96. package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
  97. package/dist/node_modules/cookie-es/package.json +37 -0
  98. package/dist/node_modules/hookable/dist/index.mjs +243 -266
  99. package/dist/node_modules/hookable/package.json +29 -26
  100. package/dist/node_modules/rendu/dist/index.mjs +380 -0
  101. package/dist/node_modules/rendu/package.json +47 -0
  102. package/dist/node_modules/youch/build/{chunk-VE4LENUR.js → chunk-F4I6KX4R.js} +2 -1
  103. package/dist/node_modules/youch/build/{chunk-JAN2TFI2.js → chunk-YYEJ3AGB.js} +4 -1
  104. package/dist/node_modules/youch/build/index.js +16 -8
  105. package/dist/node_modules/youch/build/public/error_stack/script.js +20 -22
  106. package/dist/node_modules/youch/build/public/header/script.js +0 -2
  107. package/dist/node_modules/youch/build/public/layout/script.js +0 -8
  108. package/dist/node_modules/youch/build/public/layout/style.css +4 -0
  109. package/dist/node_modules/youch/package.json +16 -17
  110. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
  111. package/dist/presets/_nitro/runtime/nitro-dev.mjs +48 -42
  112. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
  113. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +10 -14
  114. package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
  115. package/dist/presets/_nitro/runtime/service-worker.mjs +15 -12
  116. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
  117. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +7 -6
  118. package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
  119. package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
  120. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
  121. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +26 -28
  122. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +8 -8
  123. package/dist/presets/azure/runtime/_utils.mjs +43 -43
  124. package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
  125. package/dist/presets/azure/runtime/azure-swa.mjs +24 -22
  126. package/dist/presets/bun/runtime/bun.d.mts +2 -0
  127. package/dist/presets/bun/runtime/bun.mjs +34 -21
  128. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
  129. package/dist/presets/cloudflare/runtime/_module-handler.mjs +80 -88
  130. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
  131. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +60 -63
  132. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
  133. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +14 -16
  134. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
  135. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +40 -42
  136. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
  137. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +89 -82
  138. package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
  139. package/dist/presets/deno/runtime/deno-deploy.d.mts +4 -0
  140. package/dist/presets/deno/runtime/deno-deploy.mjs +15 -12
  141. package/dist/presets/deno/runtime/deno-server.d.mts +0 -3
  142. package/dist/presets/deno/runtime/deno-server.mjs +32 -52
  143. package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
  144. package/dist/presets/netlify/runtime/netlify-edge.mjs +15 -12
  145. package/dist/presets/netlify/runtime/netlify.mjs +12 -18
  146. package/dist/presets/node/runtime/node-cluster.d.mts +3 -1
  147. package/dist/presets/node/runtime/node-cluster.mjs +50 -54
  148. package/dist/presets/node/runtime/node-middleware.d.mts +2 -3
  149. package/dist/presets/node/runtime/node-middleware.mjs +9 -8
  150. package/dist/presets/node/runtime/node-server.mjs +37 -34
  151. package/dist/presets/standard/runtime/server.d.mts +1 -3
  152. package/dist/presets/standard/runtime/server.mjs +2 -4
  153. package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
  154. package/dist/presets/stormkit/runtime/stormkit.mjs +21 -21
  155. package/dist/presets/vercel/runtime/vercel.node.d.mts +3 -0
  156. package/dist/presets/vercel/runtime/vercel.node.mjs +15 -0
  157. package/dist/presets/vercel/runtime/{vercel.d.mts → vercel.web.d.mts} +3 -3
  158. package/dist/presets/vercel/runtime/vercel.web.mjs +20 -0
  159. package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
  160. package/dist/presets/winterjs/runtime/winterjs.mjs +73 -69
  161. package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
  162. package/dist/presets/zeabur/runtime/zeabur.mjs +1 -1
  163. package/dist/runtime/app.d.mts +1 -0
  164. package/dist/runtime/app.mjs +1 -0
  165. package/dist/runtime/cache.d.mts +1 -0
  166. package/dist/runtime/cache.mjs +1 -0
  167. package/dist/runtime/config.d.mts +3 -0
  168. package/dist/runtime/config.mjs +4 -0
  169. package/dist/runtime/context.d.mts +1 -0
  170. package/dist/runtime/context.mjs +1 -0
  171. package/dist/runtime/database.d.mts +1 -0
  172. package/dist/runtime/database.mjs +1 -0
  173. package/dist/runtime/internal/app.d.mts +11 -1
  174. package/dist/runtime/internal/app.mjs +188 -140
  175. package/dist/runtime/internal/cache.d.mts +9 -5
  176. package/dist/runtime/internal/cache.mjs +248 -219
  177. package/dist/runtime/internal/context.d.mts +9 -9
  178. package/dist/runtime/internal/context.mjs +17 -10
  179. package/dist/runtime/internal/database.mjs +8 -10
  180. package/dist/runtime/internal/error/dev.d.mts +5 -4
  181. package/dist/runtime/internal/error/dev.mjs +106 -105
  182. package/dist/runtime/internal/error/hooks.d.mts +1 -0
  183. package/dist/runtime/internal/error/hooks.mjs +9 -0
  184. package/dist/runtime/internal/error/prod.d.mts +5 -4
  185. package/dist/runtime/internal/error/prod.mjs +51 -59
  186. package/dist/runtime/internal/error/utils.d.mts +4 -4
  187. package/dist/runtime/internal/error/utils.mjs +1 -1
  188. package/dist/runtime/internal/meta.d.mts +1 -1
  189. package/dist/runtime/internal/meta.mjs +1 -1
  190. package/dist/runtime/internal/plugin.d.mts +2 -2
  191. package/dist/runtime/internal/plugin.mjs +1 -1
  192. package/dist/runtime/internal/route-rules.d.mts +8 -8
  193. package/dist/runtime/internal/route-rules.mjs +54 -52
  194. package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -2
  195. package/dist/runtime/internal/routes/dev-tasks.mjs +16 -18
  196. package/dist/runtime/internal/routes/openapi.d.mts +1 -0
  197. package/dist/runtime/internal/routes/openapi.mjs +81 -87
  198. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  199. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
  200. package/dist/runtime/internal/routes/renderer-template.dev.mjs +15 -17
  201. package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
  202. package/dist/runtime/internal/routes/scalar.d.mts +1 -0
  203. package/dist/runtime/internal/routes/scalar.mjs +22 -23
  204. package/dist/runtime/internal/routes/swagger.d.mts +1 -0
  205. package/dist/runtime/internal/routes/swagger.mjs +9 -11
  206. package/dist/runtime/internal/runtime-config.d.mts +4 -4
  207. package/dist/runtime/internal/runtime-config.mjs +40 -35
  208. package/dist/runtime/internal/static.mjs +63 -74
  209. package/dist/runtime/internal/storage.mjs +2 -2
  210. package/dist/runtime/internal/task.d.mts +6 -6
  211. package/dist/runtime/internal/task.mjs +56 -60
  212. package/dist/runtime/internal/vite/dev-entry.mjs +11 -1
  213. package/dist/runtime/internal/vite/dev-worker.mjs +9 -57
  214. package/dist/runtime/internal/vite/ssr-renderer.mjs +3 -1
  215. package/{lib/runtime-meta.d.mts → dist/runtime/meta.d.mts} +1 -1
  216. package/dist/runtime/meta.mjs +26 -0
  217. package/dist/runtime/nitro.d.mts +12 -0
  218. package/dist/runtime/nitro.mjs +32 -0
  219. package/dist/runtime/runtime-config.d.mts +1 -0
  220. package/dist/runtime/runtime-config.mjs +1 -0
  221. package/dist/runtime/storage.d.mts +1 -0
  222. package/dist/runtime/storage.mjs +1 -0
  223. package/dist/runtime/task.d.mts +1 -0
  224. package/dist/runtime/task.mjs +1 -0
  225. package/dist/runtime/vite-runtime.d.mts +8 -0
  226. package/dist/runtime/vite-runtime.mjs +9 -0
  227. package/dist/types/index.d.mts +2625 -2297
  228. package/dist/types/index.mjs +1 -1
  229. package/dist/vite.d.mts +49 -51
  230. package/dist/vite.mjs +44 -68
  231. package/lib/tsconfig.json +27 -0
  232. package/package.json +86 -76
  233. package/dist/_chunks/app.mjs +0 -19797
  234. package/dist/_chunks/build.mjs +0 -84
  235. package/dist/_chunks/build2.mjs +0 -318
  236. package/dist/_chunks/build3.mjs +0 -6452
  237. package/dist/_chunks/detect-acorn.mjs +0 -503
  238. package/dist/_chunks/index.mjs +0 -22242
  239. package/dist/_chunks/index2.mjs +0 -297
  240. package/dist/_chunks/index3.mjs +0 -1058
  241. package/dist/_chunks/index4.mjs +0 -1206
  242. package/dist/_chunks/info.mjs +0 -11157
  243. package/dist/_chunks/json5.mjs +0 -68
  244. package/dist/_chunks/jsonc.mjs +0 -51
  245. package/dist/_chunks/pathe.M-eThtNZ.mjs +0 -204
  246. package/dist/_chunks/plugin.mjs +0 -960
  247. package/dist/_chunks/server.mjs +0 -254
  248. package/dist/_chunks/snapshot.mjs +0 -284
  249. package/dist/_chunks/toml.mjs +0 -259
  250. package/dist/_chunks/yaml.mjs +0 -86
  251. package/dist/cli/build.mjs +0 -54
  252. package/dist/cli/common.mjs +0 -13
  253. package/dist/cli/dev.mjs +0 -95
  254. package/dist/cli/index2.mjs +0 -17
  255. package/dist/cli/list.mjs +0 -34
  256. package/dist/cli/prepare.mjs +0 -24
  257. package/dist/cli/run.mjs +0 -60
  258. package/dist/index.d.mts +0 -52
  259. package/dist/index.mjs +0 -55
  260. package/dist/node_modules/cookie/dist/index.js +0 -239
  261. package/dist/node_modules/cookie/package.json +0 -42
  262. package/dist/node_modules/klona/dist/index.mjs +0 -81
  263. package/dist/node_modules/klona/full/index.mjs +0 -53
  264. package/dist/node_modules/klona/package.json +0 -74
  265. package/dist/node_modules/std-env/dist/index.mjs +0 -1
  266. package/dist/node_modules/std-env/package.json +0 -46
  267. package/dist/presets/vercel/runtime/vercel.mjs +0 -17
  268. package/dist/presets.mjs +0 -2460
  269. package/dist/runtime/index.d.mts +0 -11
  270. package/dist/runtime/index.mjs +0 -17
  271. package/dist/runtime/internal/debug.d.mts +0 -2
  272. package/dist/runtime/internal/debug.mjs +0 -5
  273. package/dist/runtime/internal/empty.d.mts +0 -0
  274. package/dist/runtime/internal/index.d.mts +0 -3
  275. package/dist/runtime/internal/index.mjs +0 -3
  276. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +0 -16
  277. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +0 -213
  278. package/dist/runtime/internal/renderer.d.mts +0 -3
  279. package/dist/runtime/internal/renderer.mjs +0 -36
  280. package/dist/runtime/internal/shutdown.d.mts +0 -9
  281. package/dist/runtime/internal/shutdown.mjs +0 -34
  282. package/dist/runtime/internal/utils.d.mts +0 -1
  283. package/dist/runtime/internal/utils.mjs +0 -15
  284. package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
  285. package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
  286. package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
  287. package/dist/runtime/internal/vite/prod-setup.mjs +0 -55
  288. package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
  289. package/lib/config.d.mts +0 -9
  290. package/lib/config.mjs +0 -5
  291. package/lib/meta.d.mts +0 -5
  292. package/lib/meta.mjs +0 -21
  293. package/lib/runtime-meta.mjs +0 -38
@@ -1 +1,2 @@
1
1
  import "#nitro-internal-pollyfills";
2
+ export {};
@@ -1,62 +1,68 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
3
- import { trapUnhandledNodeErrors } from "nitro/runtime/internal";
4
- import { startScheduleRunner } from "nitro/runtime/internal";
5
2
  import { Server } from "node:http";
6
- import nodeCrypto from "node:crypto";
7
3
  import { parentPort, threadId } from "node:worker_threads";
8
4
  import wsAdapter from "crossws/adapters/node";
9
5
  import { toNodeHandler } from "srvx/node";
10
6
  import { getSocketAddress, isSocketSupported } from "get-port-please";
11
- if (!globalThis.crypto) {
12
- globalThis.crypto = nodeCrypto;
13
- }
14
- trapUnhandledNodeErrors();
7
+ import { useNitroApp, useNitroHooks } from "nitro/app";
8
+ import { startScheduleRunner } from "nitro/~internal/runtime/task";
9
+ import { trapUnhandledErrors } from "nitro/~internal/runtime/error/hooks";
10
+ import { resolveWebsocketHooks } from "nitro/~internal/runtime/app";
11
+ import { hasWebSocket } from "#nitro-internal-virtual/feature-flags";
12
+ // Listen for shutdown signal from runner
15
13
  parentPort?.on("message", (msg) => {
16
- if (msg && msg.event === "shutdown") {
17
- shutdown();
18
- }
14
+ if (msg && msg.event === "shutdown") {
15
+ shutdown();
16
+ }
19
17
  });
20
18
  const nitroApp = useNitroApp();
19
+ const nitroHooks = useNitroHooks();
20
+ trapUnhandledErrors();
21
21
  const server = new Server(toNodeHandler(nitroApp.fetch));
22
22
  let listener;
23
23
  listen().catch((error) => {
24
- console.error("Dev worker failed to listen:", error);
25
- return shutdown();
24
+ console.error("Dev worker failed to listen:", error);
25
+ return shutdown();
26
26
  });
27
- if (import.meta._websocket) {
28
- const { handleUpgrade } = wsAdapter(nitroApp.h3App.websocket);
29
- server.on("upgrade", handleUpgrade);
27
+ // https://crossws.unjs.io/adapters/node
28
+ if (hasWebSocket) {
29
+ const { handleUpgrade } = wsAdapter({ resolve: resolveWebsocketHooks });
30
+ server.on("upgrade", handleUpgrade);
30
31
  }
32
+ // Scheduled tasks
31
33
  if (import.meta._tasks) {
32
- startScheduleRunner();
34
+ startScheduleRunner();
33
35
  }
36
+ // --- utils ---
34
37
  async function listen() {
35
- const listenAddr = await isSocketSupported() ? getSocketAddress({
36
- name: `nitro-dev-${threadId}`,
37
- pid: true,
38
- random: true
39
- }) : { port: 0, host: "localhost" };
40
- return new Promise((resolve, reject) => {
41
- try {
42
- listener = server.listen(listenAddr, () => {
43
- const address = server.address();
44
- parentPort?.postMessage({
45
- event: "listen",
46
- address: typeof address === "string" ? { socketPath: address } : { host: "localhost", port: address?.port }
47
- });
48
- resolve();
49
- });
50
- } catch (error) {
51
- reject(error);
52
- }
53
- });
38
+ const listenAddr = await isSocketSupported() ? getSocketAddress({
39
+ name: `nitro-dev-${threadId}`,
40
+ pid: true,
41
+ random: true
42
+ }) : {
43
+ port: 0,
44
+ host: "localhost"
45
+ };
46
+ return new Promise((resolve, reject) => {
47
+ try {
48
+ listener = server.listen(listenAddr, () => {
49
+ const address = server.address();
50
+ parentPort?.postMessage({
51
+ event: "listen",
52
+ address: typeof address === "string" ? { socketPath: address } : {
53
+ host: "localhost",
54
+ port: address?.port
55
+ }
56
+ });
57
+ resolve();
58
+ });
59
+ } catch (error) {
60
+ reject(error);
61
+ }
62
+ });
54
63
  }
55
64
  async function shutdown() {
56
- server.closeAllConnections?.();
57
- await Promise.all([
58
- new Promise((resolve) => listener?.close(resolve)),
59
- nitroApp.hooks.callHook("close").catch(console.error)
60
- ]);
61
- parentPort?.postMessage({ event: "exit" });
65
+ server.closeAllConnections?.();
66
+ await Promise.all([new Promise((resolve) => listener?.close(resolve)), nitroHooks.callHook("close")]).catch(console.error);
67
+ parentPort?.postMessage({ event: "exit" });
62
68
  }
@@ -1,3 +1,3 @@
1
1
  import "#nitro-internal-pollyfills";
2
- export declare const appFetch: any;
3
- export declare const closePrerenderer: () => any;
2
+ declare const _default: {};
3
+ export default _default;
@@ -1,18 +1,14 @@
1
1
  import "#nitro-internal-pollyfills";
2
2
  import consola from "consola";
3
- import { useNitroApp } from "nitro/runtime";
4
- import { trapUnhandledNodeErrors } from "nitro/runtime/internal";
3
+ import { useNitroApp, useNitroHooks } from "nitro/app";
5
4
  const nitroApp = useNitroApp();
6
- export const appFetch = nitroApp.fetch;
7
- export const closePrerenderer = () => nitroApp.hooks.callHook("close");
8
- nitroApp.hooks.hook("error", (error, context) => {
9
- if (!error.unhandled && error.status >= 500 && context.event?.req?.headers instanceof Headers && context.event.req.headers.get("x-nitro-prerender")) {
10
- consola.error(
11
- `[prerender error]`,
12
- `[${context.event.req.method}]`,
13
- `[${context.event.req.url}]`,
14
- error
15
- );
16
- }
5
+ const nitroHooks = useNitroHooks();
6
+ export default {
7
+ fetch: nitroApp.fetch,
8
+ close: () => nitroHooks.callHook("close")
9
+ };
10
+ nitroHooks.hook("error", (error, context) => {
11
+ if (!error.unhandled && error.status >= 500 && context.event?.req?.headers instanceof Headers && context.event.req.headers.get("x-nitro-prerender")) {
12
+ consola.error(`[prerender error]`, `[${context.event.req.method}]`, `[${context.event.req.url}]`, error);
13
+ }
17
14
  });
18
- trapUnhandledNodeErrors();
@@ -1 +1,2 @@
1
1
  import "#nitro-internal-pollyfills";
2
+ export {};
@@ -1,21 +1,24 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
2
+ import { useNitroApp } from "nitro/app";
3
3
  import { isPublicAssetURL } from "#nitro-internal-virtual/public-assets";
4
4
  const nitroApp = useNitroApp();
5
+ // @ts-expect-error
5
6
  addEventListener("fetch", (event) => {
6
- const url = new URL(event.request.url);
7
- if (isPublicAssetURL(url.pathname) || url.pathname.includes("/_server/")) {
8
- return;
9
- }
10
- const req = event.request;
11
- req.runtime ??= { name: "service-worker" };
12
- req.runtime.serviceWorker ??= { event };
13
- req.waitUntil = event.waitUntil.bind(event);
14
- event.respondWith(nitroApp.fetch(req));
7
+ const url = new URL(event.request.url);
8
+ if (isPublicAssetURL(url.pathname) || url.pathname.includes("/_server/")) {
9
+ return;
10
+ }
11
+ // srvx compatibility
12
+ const req = event.request;
13
+ req.runtime ??= { name: "service-worker" };
14
+ // @ts-expect-error (add to srvx types)
15
+ req.runtime.serviceWorker ??= { event };
16
+ req.waitUntil = event.waitUntil.bind(event);
17
+ event.respondWith(nitroApp.fetch(req));
15
18
  });
16
19
  self.addEventListener("install", () => {
17
- self.skipWaiting();
20
+ self.skipWaiting();
18
21
  });
19
22
  self.addEventListener("activate", (event) => {
20
- event.waitUntil(self.clients.claim());
23
+ event.waitUntil(self.clients.claim());
21
24
  });
@@ -1 +1,2 @@
1
1
  import "#nitro-internal-pollyfills";
2
+ export {};
@@ -1,13 +1,14 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
2
+ import { useNitroApp } from "nitro/app";
3
3
  import { Server } from "node:http";
4
4
  import { toNodeHandler } from "srvx/node";
5
5
  const nitroApp = useNitroApp();
6
6
  const server = new Server(toNodeHandler(nitroApp.fetch));
7
+ // @ts-ignore
7
8
  server.listen(3e3, (err) => {
8
- if (err) {
9
- console.error(err);
10
- } else {
11
- console.log(`Listening on http://localhost:3000 (AWS Amplify Hosting)`);
12
- }
9
+ if (err) {
10
+ console.error(err);
11
+ } else {
12
+ console.log(`Listening on http://localhost:3000 (AWS Amplify Hosting)`);
13
+ }
13
14
  });
@@ -1,18 +1,13 @@
1
1
  import type { APIGatewayProxyEvent, APIGatewayProxyEventV2 } from "aws-lambda";
2
2
  import type { ServerRequest } from "srvx";
3
+ // Incoming (AWS => Web)
3
4
  export declare function awsRequest(event: APIGatewayProxyEvent | APIGatewayProxyEventV2, context: unknown): ServerRequest;
4
- export declare function awsResponseHeaders(response: Response): {
5
- headers: any;
6
- cookies: string[];
7
- multiValueHeaders: {
8
- "set-cookie": string[];
9
- };
10
- } | {
11
- headers: any;
12
- cookies?: undefined;
13
- multiValueHeaders?: undefined;
14
- };
5
+ // Outgoing (Web => AWS)
6
+ export declare function awsResponseHeaders(response: Response);
7
+ // AWS Lambda proxy integrations requires base64 encoded buffers
8
+ // binaryMediaTypes should be */*
9
+ // see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html
15
10
  export declare function awsResponseBody(response: Response): Promise<{
16
- body: string;
17
- isBase64Encoded?: boolean;
11
+ body: string;
12
+ isBase64Encoded?: boolean;
18
13
  }>;
@@ -1,102 +1,116 @@
1
1
  import { stringifyQuery } from "ufo";
2
+ // Incoming (AWS => Web)
2
3
  export function awsRequest(event, context) {
3
- const method = awsEventMethod(event);
4
- const url = awsEventURL(event);
5
- const headers = awsEventHeaders(event);
6
- const body = awsEventBody(event);
7
- const req = new Request(url, { method, headers, body });
8
- req.runtime ??= { name: "aws-lambda" };
9
- req.runtime.aws ??= { event, context };
10
- return new Request(url, { method, headers, body });
4
+ const method = awsEventMethod(event);
5
+ const url = awsEventURL(event);
6
+ const headers = awsEventHeaders(event);
7
+ const body = awsEventBody(event);
8
+ const req = new Request(url, {
9
+ method,
10
+ headers,
11
+ body
12
+ });
13
+ // srvx compatibility
14
+ req.runtime ??= { name: "aws-lambda" };
15
+ // @ts-expect-error (add to srvx types)
16
+ req.runtime.aws ??= {
17
+ event,
18
+ context
19
+ };
20
+ return new Request(url, {
21
+ method,
22
+ headers,
23
+ body
24
+ });
11
25
  }
12
26
  function awsEventMethod(event) {
13
- return event.httpMethod || event.requestContext?.http?.method || "GET";
27
+ return event.httpMethod || event.requestContext?.http?.method || "GET";
14
28
  }
15
29
  function awsEventURL(event) {
16
- const hostname = event.headers.host || event.headers.Host || event.requestContext?.domainName || ".";
17
- const path = event.path || event.rawPath;
18
- const query = awsEventQuery(event);
19
- const protocol = (event.headers["X-Forwarded-Proto"] || event.headers["x-forwarded-proto"]) === "http" ? "http" : "https";
20
- return new URL(
21
- `${path}${query ? `?${query}` : ""}`,
22
- `${protocol}://${hostname}`
23
- );
30
+ const hostname = event.headers.host || event.headers.Host || event.requestContext?.domainName || ".";
31
+ const path = event.path || event.rawPath;
32
+ const query = awsEventQuery(event);
33
+ const protocol = (event.headers["X-Forwarded-Proto"] || event.headers["x-forwarded-proto"]) === "http" ? "http" : "https";
34
+ return new URL(`${path}${query ? `?${query}` : ""}`, `${protocol}://${hostname}`);
24
35
  }
25
36
  function awsEventQuery(event) {
26
- if (typeof event.rawQueryString === "string") {
27
- return event.rawQueryString;
28
- }
29
- const queryObj = {
30
- ...event.queryStringParameters,
31
- ...event.multiValueQueryStringParameters
32
- };
33
- return stringifyQuery(queryObj);
37
+ if (typeof event.rawQueryString === "string") {
38
+ return event.rawQueryString;
39
+ }
40
+ const queryObj = {
41
+ ...event.queryStringParameters,
42
+ ...event.multiValueQueryStringParameters
43
+ };
44
+ return stringifyQuery(queryObj);
34
45
  }
35
46
  function awsEventHeaders(event) {
36
- const headers = new Headers();
37
- for (const [key, value] of Object.entries(event.headers)) {
38
- if (value) {
39
- headers.set(key, value);
40
- }
41
- }
42
- if ("cookies" in event && event.cookies) {
43
- for (const cookie of event.cookies) {
44
- headers.append("cookie", cookie);
45
- }
46
- }
47
- return headers;
47
+ const headers = new Headers();
48
+ for (const [key, value] of Object.entries(event.headers)) {
49
+ if (value) {
50
+ headers.set(key, value);
51
+ }
52
+ }
53
+ if ("cookies" in event && event.cookies) {
54
+ for (const cookie of event.cookies) {
55
+ headers.append("cookie", cookie);
56
+ }
57
+ }
58
+ return headers;
48
59
  }
49
60
  function awsEventBody(event) {
50
- if (!event.body) {
51
- return void 0;
52
- }
53
- if (event.isBase64Encoded) {
54
- return Buffer.from(event.body || "", "base64");
55
- }
56
- return event.body;
61
+ if (!event.body) {
62
+ return undefined;
63
+ }
64
+ if (event.isBase64Encoded) {
65
+ return Buffer.from(event.body || "", "base64");
66
+ }
67
+ return event.body;
57
68
  }
69
+ // Outgoing (Web => AWS)
58
70
  export function awsResponseHeaders(response) {
59
- const headers = /* @__PURE__ */ Object.create(null);
60
- for (const [key, value] of response.headers) {
61
- if (value) {
62
- headers[key] = Array.isArray(value) ? value.join(",") : String(value);
63
- }
64
- }
65
- const cookies = response.headers.getSetCookie();
66
- return cookies.length > 0 ? {
67
- headers,
68
- cookies,
69
- // ApiGateway v2
70
- multiValueHeaders: { "set-cookie": cookies }
71
- // ApiGateway v1
72
- } : { headers };
71
+ const headers = Object.create(null);
72
+ for (const [key, value] of response.headers) {
73
+ if (value) {
74
+ headers[key] = Array.isArray(value) ? value.join(",") : String(value);
75
+ }
76
+ }
77
+ const cookies = response.headers.getSetCookie();
78
+ return cookies.length > 0 ? {
79
+ headers,
80
+ cookies,
81
+ multiValueHeaders: { "set-cookie": cookies }
82
+ } : { headers };
73
83
  }
84
+ // AWS Lambda proxy integrations requires base64 encoded buffers
85
+ // binaryMediaTypes should be */*
86
+ // see https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-payload-encodings.html
74
87
  export async function awsResponseBody(response) {
75
- if (!response.body) {
76
- return { body: "" };
77
- }
78
- const buffer = await toBuffer(response.body);
79
- const contentType = response.headers.get("content-type") || "";
80
- return isTextType(contentType) ? { body: buffer.toString("utf8") } : { body: buffer.toString("base64"), isBase64Encoded: true };
88
+ if (!response.body) {
89
+ return { body: "" };
90
+ }
91
+ const buffer = await toBuffer(response.body);
92
+ const contentType = response.headers.get("content-type") || "";
93
+ return isTextType(contentType) ? { body: buffer.toString("utf8") } : {
94
+ body: buffer.toString("base64"),
95
+ isBase64Encoded: true
96
+ };
81
97
  }
82
98
  function isTextType(contentType = "") {
83
- return /^text\/|\/(javascript|json|xml)|utf-?8/i.test(contentType);
99
+ return /^text\/|\/(javascript|json|xml)|utf-?8/i.test(contentType);
84
100
  }
85
101
  function toBuffer(data) {
86
- return new Promise((resolve, reject) => {
87
- const chunks = [];
88
- data.pipeTo(
89
- new WritableStream({
90
- write(chunk) {
91
- chunks.push(chunk);
92
- },
93
- close() {
94
- resolve(Buffer.concat(chunks));
95
- },
96
- abort(reason) {
97
- reject(reason);
98
- }
99
- })
100
- ).catch(reject);
101
- });
102
+ return new Promise((resolve, reject) => {
103
+ const chunks = [];
104
+ data.pipeTo(new WritableStream({
105
+ write(chunk) {
106
+ chunks.push(chunk);
107
+ },
108
+ close() {
109
+ resolve(Buffer.concat(chunks));
110
+ },
111
+ abort(reason) {
112
+ reject(reason);
113
+ }
114
+ })).catch(reject);
115
+ });
102
116
  }
@@ -1,3 +1,2 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import type { APIGatewayProxyEventV2 } from "aws-lambda";
3
- export declare const handler: import("aws-lambda").StreamifyHandler<APIGatewayProxyEventV2, void>;
2
+ export declare const handler: unknown;
@@ -1,33 +1,31 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
2
+ import { useNitroApp } from "nitro/app";
3
3
  import { awsRequest, awsResponseHeaders } from "./_utils.mjs";
4
4
  const nitroApp = useNitroApp();
5
- export const handler = awslambda.streamifyResponse(
6
- async (event, responseStream, context) => {
7
- const request = awsRequest(event, context);
8
- const response = await nitroApp.fetch(request);
9
- response.headers.set("transfer-encoding", "chunked");
10
- const httpResponseMetadata = {
11
- statusCode: response.status,
12
- ...awsResponseHeaders(response)
13
- };
14
- if (response.body) {
15
- const writer = awslambda.HttpResponseStream.from(
16
- // @ts-expect-error TODO: IMPORTANT! It should be a Writable according to the aws-lambda types
17
- responseStream,
18
- httpResponseMetadata
19
- );
20
- const reader = response.body.getReader();
21
- await streamToNodeStream(reader, responseStream);
22
- writer.end();
23
- }
24
- }
25
- );
5
+ export const handler = awslambda.streamifyResponse(async (event, responseStream, context) => {
6
+ const request = awsRequest(event, context);
7
+ const response = await nitroApp.fetch(request);
8
+ response.headers.set("transfer-encoding", "chunked");
9
+ const httpResponseMetadata = {
10
+ statusCode: response.status,
11
+ ...awsResponseHeaders(response)
12
+ };
13
+ if (response.body) {
14
+ const writer = awslambda.HttpResponseStream.from(
15
+ // @ts-expect-error TODO: IMPORTANT! It should be a Writable according to the aws-lambda types
16
+ responseStream,
17
+ httpResponseMetadata
18
+ );
19
+ const reader = response.body.getReader();
20
+ await streamToNodeStream(reader, responseStream);
21
+ writer.end();
22
+ }
23
+ });
26
24
  async function streamToNodeStream(reader, writer) {
27
- let readResult = await reader.read();
28
- while (!readResult.done) {
29
- writer.write(readResult.value);
30
- readResult = await reader.read();
31
- }
32
- writer.end();
25
+ let readResult = await reader.read();
26
+ while (!readResult.done) {
27
+ writer.write(readResult.value);
28
+ readResult = await reader.read();
29
+ }
30
+ writer.end();
33
31
  }
@@ -1,13 +1,13 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
2
+ import { useNitroApp } from "nitro/app";
3
3
  import { awsRequest, awsResponseHeaders, awsResponseBody } from "./_utils.mjs";
4
4
  const nitroApp = useNitroApp();
5
5
  export async function handler(event, context) {
6
- const request = awsRequest(event, context);
7
- const response = await nitroApp.fetch(request);
8
- return {
9
- statusCode: response.status,
10
- ...awsResponseHeaders(response),
11
- ...await awsResponseBody(response)
12
- };
6
+ const request = awsRequest(event, context);
7
+ const response = await nitroApp.fetch(request);
8
+ return {
9
+ statusCode: response.status,
10
+ ...awsResponseHeaders(response),
11
+ ...await awsResponseBody(response)
12
+ };
13
13
  }
@@ -1,50 +1,50 @@
1
1
  import { parse } from "cookie-es";
2
2
  export function getAzureParsedCookiesFromHeaders(headers) {
3
- const setCookieHeader = headers.getSetCookie();
4
- if (setCookieHeader.length === 0) {
5
- return [];
6
- }
7
- const azureCookies = [];
8
- for (const setCookieStr of setCookieHeader) {
9
- const setCookie = Object.entries(parse(setCookieStr));
10
- if (setCookie.length === 0) {
11
- continue;
12
- }
13
- const [[key, value], ..._setCookieOptions] = setCookie;
14
- const setCookieOptions = Object.fromEntries(
15
- _setCookieOptions.map(([k, v]) => [k.toLowerCase(), v])
16
- );
17
- const cookieObject = {
18
- name: key,
19
- value,
20
- domain: setCookieOptions.domain,
21
- path: setCookieOptions.path,
22
- expires: parseNumberOrDate(setCookieOptions.expires),
23
- sameSite: setCookieOptions.samesite,
24
- maxAge: parseNumber(setCookieOptions["max-age"]),
25
- secure: setCookieStr.includes("Secure") ? true : void 0,
26
- httpOnly: setCookieStr.includes("HttpOnly") ? true : void 0
27
- };
28
- azureCookies.push(cookieObject);
29
- }
30
- return azureCookies;
3
+ const setCookieHeader = headers.getSetCookie();
4
+ if (setCookieHeader.length === 0) {
5
+ return [];
6
+ }
7
+ const azureCookies = [];
8
+ for (const setCookieStr of setCookieHeader) {
9
+ const setCookie = Object.entries(parse(setCookieStr));
10
+ if (setCookie.length === 0) {
11
+ continue;
12
+ }
13
+ const [[key, value], ..._setCookieOptions] = setCookie;
14
+ const setCookieOptions = Object.fromEntries(_setCookieOptions.map(([k, v]) => [k.toLowerCase(), v]));
15
+ const cookieObject = {
16
+ name: key,
17
+ value,
18
+ domain: setCookieOptions.domain,
19
+ path: setCookieOptions.path,
20
+ expires: parseNumberOrDate(setCookieOptions.expires),
21
+ sameSite: setCookieOptions.samesite,
22
+ maxAge: parseNumber(setCookieOptions["max-age"]),
23
+ secure: setCookieStr.includes("Secure") ? true : undefined,
24
+ httpOnly: setCookieStr.includes("HttpOnly") ? true : undefined
25
+ };
26
+ azureCookies.push(cookieObject);
27
+ }
28
+ return azureCookies;
31
29
  }
32
30
  function parseNumberOrDate(expires) {
33
- const expiresAsNumber = parseNumber(expires);
34
- if (expiresAsNumber !== void 0) {
35
- return expiresAsNumber;
36
- }
37
- const expiresAsDate = new Date(expires);
38
- if (!Number.isNaN(expiresAsDate.getTime())) {
39
- return expiresAsDate;
40
- }
31
+ const expiresAsNumber = parseNumber(expires);
32
+ if (expiresAsNumber !== undefined) {
33
+ return expiresAsNumber;
34
+ }
35
+ // Convert to Date if possible
36
+ const expiresAsDate = new Date(expires);
37
+ if (!Number.isNaN(expiresAsDate.getTime())) {
38
+ return expiresAsDate;
39
+ }
41
40
  }
42
41
  function parseNumber(maxAge) {
43
- if (!maxAge) {
44
- return void 0;
45
- }
46
- const maxAgeAsNumber = Number(maxAge);
47
- if (!Number.isNaN(maxAgeAsNumber)) {
48
- return maxAgeAsNumber;
49
- }
42
+ if (!maxAge) {
43
+ return undefined;
44
+ }
45
+ // Convert to number if possible
46
+ const maxAgeAsNumber = Number(maxAge);
47
+ if (!Number.isNaN(maxAgeAsNumber)) {
48
+ return maxAgeAsNumber;
49
+ }
50
50
  }
@@ -1,5 +1,5 @@
1
1
  import "#nitro-internal-pollyfills";
2
2
  import type { HttpRequest, HttpResponse } from "@azure/functions";
3
3
  export declare function handle(context: {
4
- res: HttpResponse;
5
- }, req: HttpRequest): Promise<void>;
4
+ res: HttpResponse;
5
+ }, req: HttpRequest);