nitro-nightly 4.0.0-20251030-091344-d4418b98 → 4.0.0-20251030-121649-98b56dfe

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 (334) hide show
  1. package/dist/_build/common.mjs +763 -0
  2. package/dist/_build/rolldown.mjs +216 -0
  3. package/dist/_build/rollup.mjs +359 -0
  4. package/dist/_build/vite.build.mjs +67 -0
  5. package/dist/_build/vite.plugin.mjs +747 -0
  6. package/dist/_chunks/B-7HiF0V.mjs +1303 -0
  7. package/dist/_chunks/B3asVbT4.mjs +151 -0
  8. package/dist/_chunks/B5ooyfLk.mjs +372 -0
  9. package/dist/_chunks/DXMHy5ca.mjs +43 -0
  10. package/dist/_dev.d.mts +12 -0
  11. package/dist/_dev.mjs +675 -0
  12. package/dist/_libs/acorn.mjs +5034 -0
  13. package/dist/_libs/c12.mjs +2798 -0
  14. package/dist/_libs/chokidar.mjs +1560 -0
  15. package/dist/_libs/citty.mjs +333 -0
  16. package/dist/_libs/commondir.mjs +22 -0
  17. package/dist/_libs/compatx.mjs +46 -0
  18. package/dist/_libs/confbox.mjs +2920 -0
  19. package/dist/_libs/debug.mjs +848 -0
  20. package/dist/_libs/deepmerge.mjs +86 -0
  21. package/dist/_libs/depd.mjs +314 -0
  22. package/dist/_libs/dot-prop.mjs +138 -0
  23. package/dist/_libs/duplexer.mjs +71 -0
  24. package/dist/_libs/ee-first.mjs +68 -0
  25. package/dist/_libs/encodeurl.mjs +49 -0
  26. package/dist/_libs/escape-html.mjs +58 -0
  27. package/dist/_libs/escape-string-regexp.mjs +8 -0
  28. package/dist/_libs/estree-walker.mjs +330 -0
  29. package/dist/_libs/etag.mjs +75 -0
  30. package/dist/{_chunks/_deps → _libs}/fdir.mjs +49 -104
  31. package/dist/_libs/fresh.mjs +85 -0
  32. package/dist/_libs/function-bind.mjs +63 -0
  33. package/dist/_libs/gen-mapping.mjs +612 -0
  34. package/dist/_libs/giget.mjs +19076 -0
  35. package/dist/_libs/gzip-size.mjs +21 -0
  36. package/dist/_libs/hasown.mjs +14 -0
  37. package/dist/_libs/http-errors.mjs +436 -0
  38. package/dist/_libs/httpxy.mjs +410 -0
  39. package/dist/_libs/is-core-module.mjs +220 -0
  40. package/dist/_libs/is-module.mjs +13 -0
  41. package/dist/_libs/is-reference.mjs +32 -0
  42. package/dist/{_chunks/_deps → _libs}/js-tokens.mjs +83 -112
  43. package/dist/_libs/klona.mjs +90 -0
  44. package/dist/_libs/knitwork.mjs +124 -0
  45. package/dist/_libs/local-pkg.mjs +1686 -0
  46. package/dist/{_chunks/_deps → _libs}/magic-string.mjs +272 -629
  47. package/dist/_libs/mime-db.mjs +7642 -0
  48. package/dist/_libs/mime-types.mjs +162 -0
  49. package/dist/_libs/mime.mjs +1391 -0
  50. package/dist/_libs/node-fetch-native.mjs +173 -0
  51. package/dist/_libs/on-finished.mjs +170 -0
  52. package/dist/_libs/parseurl.mjs +103 -0
  53. package/dist/_libs/path-parse.mjs +47 -0
  54. package/dist/_libs/pathe.mjs +41 -0
  55. package/dist/_libs/picomatch.mjs +1673 -0
  56. package/dist/_libs/plugin-alias.mjs +64 -0
  57. package/dist/_libs/plugin-commonjs.mjs +1489 -0
  58. package/dist/_libs/plugin-inject.mjs +135 -0
  59. package/dist/_libs/plugin-json.mjs +36 -0
  60. package/dist/_libs/plugin-node-resolve.mjs +1553 -0
  61. package/dist/_libs/plugin-replace.mjs +104 -0
  62. package/dist/_libs/pretty-bytes.mjs +116 -0
  63. package/dist/_libs/range-parser.mjs +102 -0
  64. package/dist/_libs/remapping.mjs +117 -0
  65. package/dist/{_chunks/_deps → _libs}/rou3.mjs +7 -22
  66. package/dist/_libs/send.mjs +857 -0
  67. package/dist/_libs/serve-static.mjs +124 -0
  68. package/dist/_libs/std-env.mjs +158 -0
  69. package/dist/_libs/strip-literal.mjs +51 -0
  70. package/dist/{_chunks/_deps → _libs}/tinyglobby.mjs +32 -33
  71. package/dist/_libs/ultrahtml.mjs +138 -0
  72. package/dist/_libs/unimport.mjs +3520 -0
  73. package/dist/_libs/untyped.mjs +271 -0
  74. package/dist/_libs/unwasm.mjs +5825 -0
  75. package/dist/{_chunks/_deps/@pi0 → _libs}/vite-plugin-fullstack.mjs +28 -42
  76. package/dist/_presets.mjs +1723 -0
  77. package/dist/builder.d.mts +37 -35
  78. package/dist/builder.mjs +45 -117
  79. package/dist/cli/_chunks/build.mjs +43 -0
  80. package/dist/cli/_chunks/common.mjs +15 -0
  81. package/dist/cli/_chunks/detect-acorn.mjs +12 -0
  82. package/dist/cli/_chunks/dev.mjs +79 -0
  83. package/dist/cli/_chunks/dist.mjs +3 -0
  84. package/dist/cli/_chunks/dist2.mjs +4 -0
  85. package/dist/cli/_chunks/esm.mjs +3 -0
  86. package/dist/cli/_chunks/json5.mjs +4 -0
  87. package/dist/cli/_chunks/jsonc.mjs +4 -0
  88. package/dist/cli/_chunks/list.mjs +27 -0
  89. package/dist/cli/_chunks/multipart-parser.mjs +6 -0
  90. package/dist/cli/_chunks/prepare.mjs +19 -0
  91. package/dist/cli/_chunks/run.mjs +55 -0
  92. package/dist/cli/_chunks/task.mjs +16 -0
  93. package/dist/cli/_chunks/toml.mjs +4 -0
  94. package/dist/cli/_chunks/yaml.mjs +4 -0
  95. package/dist/cli/index.d.mts +1 -1
  96. package/dist/cli/index.mjs +19 -18
  97. package/dist/presets/_nitro/runtime/nitro-dev.d.mts +1 -0
  98. package/dist/presets/_nitro/runtime/nitro-dev.mjs +42 -33
  99. package/dist/presets/_nitro/runtime/nitro-prerenderer.d.mts +2 -2
  100. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +4 -8
  101. package/dist/presets/_nitro/runtime/service-worker.d.mts +1 -0
  102. package/dist/presets/_nitro/runtime/service-worker.mjs +14 -11
  103. package/dist/presets/aws-amplify/runtime/aws-amplify.d.mts +1 -0
  104. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +6 -5
  105. package/dist/presets/aws-lambda/runtime/_utils.d.mts +8 -13
  106. package/dist/presets/aws-lambda/runtime/_utils.mjs +95 -81
  107. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.d.mts +1 -2
  108. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +25 -27
  109. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +7 -7
  110. package/dist/presets/azure/runtime/_utils.mjs +43 -43
  111. package/dist/presets/azure/runtime/azure-swa.d.mts +2 -2
  112. package/dist/presets/azure/runtime/azure-swa.mjs +22 -21
  113. package/dist/presets/bun/runtime/bun.d.mts +1 -0
  114. package/dist/presets/bun/runtime/bun.mjs +18 -17
  115. package/dist/presets/cloudflare/runtime/_module-handler.d.mts +10 -7
  116. package/dist/presets/cloudflare/runtime/_module-handler.mjs +78 -87
  117. package/dist/presets/cloudflare/runtime/cloudflare-durable.d.mts +6 -14
  118. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +53 -58
  119. package/dist/presets/cloudflare/runtime/cloudflare-module.d.mts +1 -7
  120. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +12 -14
  121. package/dist/presets/cloudflare/runtime/cloudflare-pages.d.mts +12 -12
  122. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +35 -39
  123. package/dist/presets/cloudflare/runtime/plugin.dev.d.mts +2 -2
  124. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +86 -76
  125. package/dist/presets/deno/runtime/deno-deploy.d.mts +1 -0
  126. package/dist/presets/deno/runtime/deno-deploy.mjs +12 -11
  127. package/dist/presets/deno/runtime/deno-server.d.mts +2 -1
  128. package/dist/presets/deno/runtime/deno-server.mjs +31 -39
  129. package/dist/presets/netlify/runtime/netlify-edge.d.mts +2 -1
  130. package/dist/presets/netlify/runtime/netlify-edge.mjs +14 -11
  131. package/dist/presets/netlify/runtime/netlify.mjs +11 -17
  132. package/dist/presets/node/runtime/node-cluster.mjs +49 -48
  133. package/dist/presets/node/runtime/node-middleware.d.mts +3 -2
  134. package/dist/presets/node/runtime/node-middleware.mjs +7 -6
  135. package/dist/presets/node/runtime/node-server.mjs +33 -23
  136. package/dist/presets/standard/runtime/server.d.mts +1 -3
  137. package/dist/presets/standard/runtime/server.mjs +1 -3
  138. package/dist/presets/stormkit/runtime/stormkit.d.mts +13 -13
  139. package/dist/presets/stormkit/runtime/stormkit.mjs +20 -20
  140. package/dist/presets/vercel/runtime/vercel.d.mts +3 -3
  141. package/dist/presets/vercel/runtime/vercel.mjs +15 -14
  142. package/dist/presets/winterjs/runtime/winterjs.d.mts +2 -0
  143. package/dist/presets/winterjs/runtime/winterjs.mjs +72 -68
  144. package/dist/presets/zeabur/runtime/zeabur.d.mts +1 -1
  145. package/dist/runtime/index.d.mts +12 -1
  146. package/dist/runtime/index.mjs +12 -7
  147. package/dist/runtime/internal/app.mjs +175 -162
  148. package/dist/runtime/internal/cache.d.mts +10 -4
  149. package/dist/runtime/internal/cache.mjs +247 -216
  150. package/dist/runtime/internal/context.d.mts +9 -9
  151. package/dist/runtime/internal/context.mjs +17 -10
  152. package/dist/runtime/internal/database.mjs +8 -10
  153. package/dist/runtime/internal/error/dev.d.mts +5 -4
  154. package/dist/runtime/internal/error/dev.mjs +106 -105
  155. package/dist/runtime/internal/error/prod.d.mts +2 -2
  156. package/dist/runtime/internal/error/prod.mjs +48 -52
  157. package/dist/runtime/internal/error/utils.d.mts +4 -4
  158. package/dist/runtime/internal/error/utils.mjs +1 -1
  159. package/dist/runtime/internal/index.d.mts +2 -0
  160. package/dist/runtime/internal/index.mjs +2 -0
  161. package/dist/runtime/internal/lib/http-graceful-shutdown.d.mts +14 -14
  162. package/dist/runtime/internal/lib/http-graceful-shutdown.mjs +248 -209
  163. package/dist/runtime/internal/meta.d.mts +1 -1
  164. package/dist/runtime/internal/meta.mjs +1 -1
  165. package/dist/runtime/internal/plugin.d.mts +2 -2
  166. package/dist/runtime/internal/plugin.mjs +1 -1
  167. package/dist/runtime/internal/renderer.mjs +39 -31
  168. package/dist/runtime/internal/route-rules.d.mts +8 -8
  169. package/dist/runtime/internal/route-rules.mjs +53 -51
  170. package/dist/runtime/internal/routes/dev-tasks.d.mts +1 -30
  171. package/dist/runtime/internal/routes/dev-tasks.mjs +15 -17
  172. package/dist/runtime/internal/routes/openapi.d.mts +1 -0
  173. package/dist/runtime/internal/routes/openapi.mjs +81 -87
  174. package/dist/runtime/internal/routes/renderer-template.d.mts +1 -1
  175. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +1 -2
  176. package/dist/runtime/internal/routes/renderer-template.dev.mjs +10 -17
  177. package/dist/runtime/internal/routes/renderer-template.mjs +1 -1
  178. package/dist/runtime/internal/routes/scalar.d.mts +1 -0
  179. package/dist/runtime/internal/routes/scalar.mjs +22 -23
  180. package/dist/runtime/internal/routes/swagger.d.mts +1 -0
  181. package/dist/runtime/internal/routes/swagger.mjs +9 -11
  182. package/dist/runtime/internal/runtime-config.d.mts +4 -4
  183. package/dist/runtime/internal/runtime-config.mjs +40 -35
  184. package/dist/runtime/internal/shutdown.d.mts +2 -7
  185. package/dist/runtime/internal/shutdown.mjs +30 -29
  186. package/dist/runtime/internal/static.mjs +63 -74
  187. package/dist/runtime/internal/storage.mjs +2 -2
  188. package/dist/runtime/internal/task.d.mts +6 -6
  189. package/dist/runtime/internal/task.mjs +56 -59
  190. package/dist/runtime/internal/utils.d.mts +1 -1
  191. package/dist/runtime/internal/utils.mjs +4 -10
  192. package/dist/types/index.d.mts +2566 -3851
  193. package/dist/types/index.mjs +1 -1
  194. package/dist/vite.d.mts +56 -52
  195. package/dist/vite.mjs +55 -132
  196. package/package.json +10 -10
  197. package/dist/_build/build.mjs +0 -368
  198. package/dist/_build/build2.mjs +0 -556
  199. package/dist/_build/info.mjs +0 -1002
  200. package/dist/_build/prepare.mjs +0 -1511
  201. package/dist/_build/snapshot.mjs +0 -185
  202. package/dist/_build/vite.mjs +0 -959
  203. package/dist/_build/vite2.mjs +0 -149
  204. package/dist/_chunks/_deps/@jridgewell/gen-mapping.mjs +0 -189
  205. package/dist/_chunks/_deps/@jridgewell/remapping.mjs +0 -137
  206. package/dist/_chunks/_deps/@jridgewell/resolve-uri.mjs +0 -231
  207. package/dist/_chunks/_deps/@jridgewell/sourcemap-codec.mjs +0 -173
  208. package/dist/_chunks/_deps/@jridgewell/trace-mapping.mjs +0 -170
  209. package/dist/_chunks/_deps/@rollup/plugin-alias.mjs +0 -89
  210. package/dist/_chunks/_deps/@rollup/plugin-commonjs.mjs +0 -2376
  211. package/dist/_chunks/_deps/@rollup/plugin-inject.mjs +0 -212
  212. package/dist/_chunks/_deps/@rollup/plugin-json.mjs +0 -37
  213. package/dist/_chunks/_deps/@rollup/plugin-node-resolve.mjs +0 -1386
  214. package/dist/_chunks/_deps/@rollup/plugin-replace.mjs +0 -133
  215. package/dist/_chunks/_deps/@rollup/pluginutils.mjs +0 -346
  216. package/dist/_chunks/_deps/acorn.mjs +0 -6225
  217. package/dist/_chunks/_deps/c12.mjs +0 -510
  218. package/dist/_chunks/_deps/chokidar.mjs +0 -1428
  219. package/dist/_chunks/_deps/citty.mjs +0 -460
  220. package/dist/_chunks/_deps/commondir.mjs +0 -77
  221. package/dist/_chunks/_deps/compatx.mjs +0 -76
  222. package/dist/_chunks/_deps/confbox.mjs +0 -300
  223. package/dist/_chunks/_deps/debug.mjs +0 -885
  224. package/dist/_chunks/_deps/deepmerge.mjs +0 -147
  225. package/dist/_chunks/_deps/depd.mjs +0 -550
  226. package/dist/_chunks/_deps/dot-prop.mjs +0 -282
  227. package/dist/_chunks/_deps/dotenv.mjs +0 -555
  228. package/dist/_chunks/_deps/duplexer.mjs +0 -1
  229. package/dist/_chunks/_deps/ee-first.mjs +0 -104
  230. package/dist/_chunks/_deps/encodeurl.mjs +0 -69
  231. package/dist/_chunks/_deps/escape-html.mjs +0 -87
  232. package/dist/_chunks/_deps/escape-string-regexp.mjs +0 -13
  233. package/dist/_chunks/_deps/estree-walker.mjs +0 -433
  234. package/dist/_chunks/_deps/etag.mjs +0 -147
  235. package/dist/_chunks/_deps/exsolve.mjs +0 -1416
  236. package/dist/_chunks/_deps/fresh.mjs +0 -145
  237. package/dist/_chunks/_deps/function-bind.mjs +0 -106
  238. package/dist/_chunks/_deps/giget.mjs +0 -451
  239. package/dist/_chunks/_deps/gzip-size.mjs +0 -19
  240. package/dist/_chunks/_deps/hasown.mjs +0 -19
  241. package/dist/_chunks/_deps/http-errors.mjs +0 -307
  242. package/dist/_chunks/_deps/httpxy.mjs +0 -580
  243. package/dist/_chunks/_deps/inherits.mjs +0 -57
  244. package/dist/_chunks/_deps/is-core-module.mjs +0 -596
  245. package/dist/_chunks/_deps/is-module.mjs +0 -25
  246. package/dist/_chunks/_deps/is-reference.mjs +0 -31
  247. package/dist/_chunks/_deps/klona.mjs +0 -137
  248. package/dist/_chunks/_deps/knitwork.mjs +0 -172
  249. package/dist/_chunks/_deps/local-pkg.mjs +0 -163
  250. package/dist/_chunks/_deps/mime-db.mjs +0 -11685
  251. package/dist/_chunks/_deps/mime-types.mjs +0 -287
  252. package/dist/_chunks/_deps/mime.mjs +0 -1172
  253. package/dist/_chunks/_deps/mlly.mjs +0 -2413
  254. package/dist/_chunks/_deps/ms.mjs +0 -172
  255. package/dist/_chunks/_deps/node-fetch-native.mjs +0 -3
  256. package/dist/_chunks/_deps/nypm.mjs +0 -219
  257. package/dist/_chunks/_deps/on-finished.mjs +0 -246
  258. package/dist/_chunks/_deps/parseurl.mjs +0 -168
  259. package/dist/_chunks/_deps/path-parse.mjs +0 -85
  260. package/dist/_chunks/_deps/pathe.mjs +0 -251
  261. package/dist/_chunks/_deps/perfect-debounce.mjs +0 -88
  262. package/dist/_chunks/_deps/picomatch.mjs +0 -2144
  263. package/dist/_chunks/_deps/pkg-types.mjs +0 -247
  264. package/dist/_chunks/_deps/pretty-bytes.mjs +0 -180
  265. package/dist/_chunks/_deps/quansync.mjs +0 -99
  266. package/dist/_chunks/_deps/range-parser.mjs +0 -171
  267. package/dist/_chunks/_deps/rc9.mjs +0 -219
  268. package/dist/_chunks/_deps/readdirp.mjs +0 -245
  269. package/dist/_chunks/_deps/resolve.mjs +0 -1260
  270. package/dist/_chunks/_deps/send.mjs +0 -1022
  271. package/dist/_chunks/_deps/serve-static.mjs +0 -228
  272. package/dist/_chunks/_deps/setprototypeof.mjs +0 -26
  273. package/dist/_chunks/_deps/statuses.mjs +0 -457
  274. package/dist/_chunks/_deps/std-env.mjs +0 -3
  275. package/dist/_chunks/_deps/strip-literal.mjs +0 -67
  276. package/dist/_chunks/_deps/supports-color.mjs +0 -44
  277. package/dist/_chunks/_deps/tinyexec.mjs +0 -552
  278. package/dist/_chunks/_deps/toidentifier.mjs +0 -41
  279. package/dist/_chunks/_deps/ultrahtml.mjs +0 -3
  280. package/dist/_chunks/_deps/unimport.mjs +0 -2267
  281. package/dist/_chunks/_deps/unplugin-utils.mjs +0 -65
  282. package/dist/_chunks/_deps/unplugin.mjs +0 -1294
  283. package/dist/_chunks/_deps/untyped.mjs +0 -375
  284. package/dist/_chunks/_deps/unwasm.mjs +0 -6959
  285. package/dist/_chunks/_deps/webpack-virtual-modules.mjs +0 -360
  286. package/dist/_chunks/_presets/_all.mjs +0 -59
  287. package/dist/_chunks/_presets/_nitro.mjs +0 -74
  288. package/dist/_chunks/_presets/_resolve.mjs +0 -64
  289. package/dist/_chunks/_presets/_static.mjs +0 -69
  290. package/dist/_chunks/_presets/_types.mjs +0 -3
  291. package/dist/_chunks/_presets/_utils.mjs +0 -31
  292. package/dist/_chunks/_presets/alwaysdata.mjs +0 -17
  293. package/dist/_chunks/_presets/aws-amplify.mjs +0 -111
  294. package/dist/_chunks/_presets/aws-lambda.mjs +0 -23
  295. package/dist/_chunks/_presets/azure.mjs +0 -162
  296. package/dist/_chunks/_presets/bun.mjs +0 -19
  297. package/dist/_chunks/_presets/cleavr.mjs +0 -15
  298. package/dist/_chunks/_presets/cloudflare.mjs +0 -608
  299. package/dist/_chunks/_presets/deno.mjs +0 -196
  300. package/dist/_chunks/_presets/digitalocean.mjs +0 -14
  301. package/dist/_chunks/_presets/firebase.mjs +0 -47
  302. package/dist/_chunks/_presets/flightcontrol.mjs +0 -14
  303. package/dist/_chunks/_presets/genezio.mjs +0 -13
  304. package/dist/_chunks/_presets/heroku.mjs +0 -14
  305. package/dist/_chunks/_presets/iis.mjs +0 -194
  306. package/dist/_chunks/_presets/index.mjs +0 -62
  307. package/dist/_chunks/_presets/koyeb.mjs +0 -14
  308. package/dist/_chunks/_presets/netlify.mjs +0 -241
  309. package/dist/_chunks/_presets/node.mjs +0 -54
  310. package/dist/_chunks/_presets/platform.mjs +0 -14
  311. package/dist/_chunks/_presets/render.mjs +0 -14
  312. package/dist/_chunks/_presets/standard.mjs +0 -23
  313. package/dist/_chunks/_presets/stormkit.mjs +0 -18
  314. package/dist/_chunks/_presets/vercel.mjs +0 -375
  315. package/dist/_chunks/_presets/winterjs.mjs +0 -22
  316. package/dist/_chunks/_presets/zeabur.mjs +0 -69
  317. package/dist/_chunks/_presets/zerops.mjs +0 -27
  318. package/dist/_chunks/app.mjs +0 -600
  319. package/dist/_chunks/builder.mjs +0 -648
  320. package/dist/_chunks/server.mjs +0 -256
  321. package/dist/_cli/build.mjs +0 -49
  322. package/dist/_cli/common.mjs +0 -13
  323. package/dist/_cli/dev.mjs +0 -121
  324. package/dist/_cli/index.mjs +0 -16
  325. package/dist/_cli/list.mjs +0 -33
  326. package/dist/_cli/prepare.mjs +0 -23
  327. package/dist/_cli/run.mjs +0 -59
  328. package/dist/presets/cloudflare/runtime/shims/workers.dev.d.mts +0 -21
  329. package/dist/runtime/internal/empty.d.mts +0 -0
  330. package/dist/runtime/internal/vite/dev-entry.d.mts +0 -1
  331. package/dist/runtime/internal/vite/dev-worker.d.mts +0 -1
  332. package/dist/runtime/internal/vite/prod-setup.d.mts +0 -4
  333. package/dist/runtime/internal/vite/ssr-renderer.d.mts +0 -4
  334. /package/lib/{indexd.mts → index.d.mts} +0 -0
@@ -7,53 +7,62 @@ import { parentPort, threadId } from "node:worker_threads";
7
7
  import wsAdapter from "crossws/adapters/node";
8
8
  import { toNodeHandler } from "srvx/node";
9
9
  import { getSocketAddress, isSocketSupported } from "get-port-please";
10
+ // Trap unhandled errors
10
11
  trapUnhandledNodeErrors();
12
+ // Listen for shutdown signal from runner
11
13
  parentPort?.on("message", (msg) => {
12
- if (msg && msg.event === "shutdown") {
13
- shutdown();
14
- }
14
+ if (msg && msg.event === "shutdown") {
15
+ shutdown();
16
+ }
15
17
  });
16
18
  const nitroApp = useNitroApp();
17
19
  const nitroHooks = useNitroHooks();
18
20
  const server = new Server(toNodeHandler(nitroApp.fetch));
19
21
  let listener;
20
22
  listen().catch((error) => {
21
- console.error("Dev worker failed to listen:", error);
22
- return shutdown();
23
+ console.error("Dev worker failed to listen:", error);
24
+ return shutdown();
23
25
  });
26
+ // https://crossws.unjs.io/adapters/node
24
27
  if (import.meta._websocket) {
25
- const { handleUpgrade } = wsAdapter(nitroApp.h3App.websocket);
26
- server.on("upgrade", handleUpgrade);
28
+ // @ts-expect-error
29
+ const { handleUpgrade } = wsAdapter(nitroApp.h3App.websocket);
30
+ server.on("upgrade", handleUpgrade);
27
31
  }
32
+ // Scheduled tasks
28
33
  if (import.meta._tasks) {
29
- startScheduleRunner();
34
+ startScheduleRunner();
30
35
  }
36
+ // --- utils ---
31
37
  async function listen() {
32
- const listenAddr = await isSocketSupported() ? getSocketAddress({
33
- name: `nitro-dev-${threadId}`,
34
- pid: true,
35
- random: true
36
- }) : { port: 0, host: "localhost" };
37
- return new Promise((resolve, reject) => {
38
- try {
39
- listener = server.listen(listenAddr, () => {
40
- const address = server.address();
41
- parentPort?.postMessage({
42
- event: "listen",
43
- address: typeof address === "string" ? { socketPath: address } : { host: "localhost", port: address?.port }
44
- });
45
- resolve();
46
- });
47
- } catch (error) {
48
- reject(error);
49
- }
50
- });
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
+ });
51
63
  }
52
64
  async function shutdown() {
53
- server.closeAllConnections?.();
54
- await Promise.all([
55
- new Promise((resolve) => listener?.close(resolve)),
56
- nitroHooks.callHook("close")
57
- ]).catch(console.error);
58
- 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" });
59
68
  }
@@ -1,3 +1,3 @@
1
1
  import "#nitro-internal-pollyfills";
2
- export declare const appFetch: any;
3
- export declare const closePrerenderer: () => any;
2
+ export declare const appFetch: unknown;
3
+ export declare const closePrerenderer: unknown;
@@ -7,13 +7,9 @@ const nitroHooks = useNitroHooks();
7
7
  export const appFetch = nitroApp.request;
8
8
  export const closePrerenderer = () => nitroHooks.callHook("close");
9
9
  nitroHooks.hook("error", (error, context) => {
10
- if (!error.unhandled && error.status >= 500 && context.event?.req?.headers instanceof Headers && context.event.req.headers.get("x-nitro-prerender")) {
11
- consola.error(
12
- `[prerender error]`,
13
- `[${context.event.req.method}]`,
14
- `[${context.event.req.url}]`,
15
- error
16
- );
17
- }
10
+ if (!error.unhandled && error.status >= 500 && context.event?.req?.headers instanceof Headers && context.event.req.headers.get("x-nitro-prerender")) {
11
+ consola.error(`[prerender error]`, `[${context.event.req.method}]`, `[${context.event.req.url}]`, error);
12
+ }
18
13
  });
14
+ // Trap unhandled errors
19
15
  trapUnhandledNodeErrors();
@@ -1 +1,2 @@
1
1
  import "#nitro-internal-pollyfills";
2
+ export {};
@@ -2,20 +2,23 @@ import "#nitro-internal-pollyfills";
2
2
  import { useNitroApp } from "nitro/runtime";
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 {};
@@ -4,10 +4,11 @@ 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;
@@ -2,32 +2,30 @@ import "#nitro-internal-pollyfills";
2
2
  import { useNitroApp } from "nitro/runtime";
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
  }
@@ -3,11 +3,11 @@ import { useNitroApp } from "nitro/runtime";
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);
@@ -4,25 +4,26 @@ import { useNitroApp } from "nitro/runtime";
4
4
  import { getAzureParsedCookiesFromHeaders } from "./_utils.mjs";
5
5
  const nitroApp = useNitroApp();
6
6
  export async function handle(context, req) {
7
- let url;
8
- if (req.headers["x-ms-original-url"]) {
9
- const parsedURL = parseURL(req.headers["x-ms-original-url"]);
10
- url = parsedURL.pathname + parsedURL.search;
11
- } else {
12
- url = "/api/" + (req.params.url || "");
13
- }
14
- const response = await nitroApp.request(url, {
15
- method: req.method || void 0,
16
- // https://github.com/Azure/azure-functions-nodejs-worker/issues/294
17
- // https://github.com/Azure/azure-functions-host/issues/293
18
- body: req.bufferBody ?? req.rawBody
19
- });
20
- context.res = {
21
- status: response.status,
22
- body: response.body,
23
- cookies: getAzureParsedCookiesFromHeaders(response.headers),
24
- headers: Object.fromEntries(
25
- [...response.headers.entries()].filter(([key]) => key !== "set-cookie")
26
- )
27
- };
7
+ let url;
8
+ if (req.headers["x-ms-original-url"]) {
9
+ // This URL has been proxied as there was no static file matching it.
10
+ const parsedURL = parseURL(req.headers["x-ms-original-url"]);
11
+ url = parsedURL.pathname + parsedURL.search;
12
+ } else {
13
+ // Because Azure SWA handles /api/* calls differently they
14
+ // never hit the proxy and we have to reconstitute the URL.
15
+ url = "/api/" + (req.params.url || "");
16
+ }
17
+ const response = await nitroApp.request(url, {
18
+ method: req.method || undefined,
19
+ body: req.bufferBody ?? req.rawBody
20
+ });
21
+ // (v3 - current) https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-node?tabs=typescript%2Cwindows%2Cazure-cli&pivots=nodejs-model-v3#http-response
22
+ // (v4) https://learn.microsoft.com/en-us/azure/azure-functions/functions-reference-node?tabs=typescript%2Cwindows%2Cazure-cli&pivots=nodejs-model-v4#http-response
23
+ context.res = {
24
+ status: response.status,
25
+ body: response.body,
26
+ cookies: getAzureParsedCookiesFromHeaders(response.headers),
27
+ headers: Object.fromEntries([...response.headers.entries()].filter(([key]) => key !== "set-cookie"))
28
+ };
28
29
  }