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,47 +1,45 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
3
- import { runCronTasks } from "nitro/runtime/internal";
4
- import { isPublicAssetURL } from "#nitro-internal-virtual/public-assets";
5
2
  import wsAdapter from "crossws/adapters/cloudflare";
3
+ import { useNitroApp } from "nitro/app";
4
+ import { isPublicAssetURL } from "#nitro-internal-virtual/public-assets";
5
+ import { runCronTasks } from "nitro/~internal/runtime/task";
6
+ import { resolveWebsocketHooks } from "nitro/~internal/runtime/app";
7
+ import { hasWebSocket } from "#nitro-internal-virtual/feature-flags";
6
8
  const nitroApp = useNitroApp();
7
- const ws = import.meta._websocket ? (
8
- // @ts-expect-error
9
- wsAdapter(nitroApp.h3App.websocket)
10
- ) : void 0;
9
+ const ws = hasWebSocket ? wsAdapter({ resolve: resolveWebsocketHooks }) : undefined;
11
10
  export default {
12
- async fetch(cfReq, env, context) {
13
- const req = cfReq;
14
- req.runtime ??= { name: "cloudflare" };
15
- req.runtime.cloudflare ??= { context, env };
16
- req.waitUntil = context.waitUntil.bind(context);
17
- if (import.meta._websocket && cfReq.headers.get("upgrade") === "websocket") {
18
- return ws.handleUpgrade(
19
- cfReq,
20
- env,
21
- context
22
- );
23
- }
24
- const url = new URL(cfReq.url);
25
- if (env.ASSETS && isPublicAssetURL(url.pathname)) {
26
- return env.ASSETS.fetch(cfReq);
27
- }
28
- globalThis.__env__ = env;
29
- return nitroApp.fetch(req);
30
- },
31
- scheduled(event, env, context) {
32
- if (import.meta._tasks) {
33
- globalThis.__env__ = env;
34
- context.waitUntil(
35
- runCronTasks(event.cron, {
36
- context: {
37
- cloudflare: {
38
- env,
39
- context
40
- }
41
- },
42
- payload: {}
43
- })
44
- );
45
- }
46
- }
11
+ async fetch(cfReq, env, context) {
12
+ // srvx compatibility
13
+ const req = cfReq;
14
+ req.runtime ??= { name: "cloudflare" };
15
+ req.runtime.cloudflare ??= {
16
+ context,
17
+ env
18
+ };
19
+ req.waitUntil = context.waitUntil.bind(context);
20
+ // Websocket upgrade
21
+ // https://crossws.unjs.io/adapters/cloudflare
22
+ if (hasWebSocket && cfReq.headers.get("upgrade") === "websocket") {
23
+ return ws.handleUpgrade(cfReq, env, context);
24
+ }
25
+ const url = new URL(cfReq.url);
26
+ if (env.ASSETS && isPublicAssetURL(url.pathname)) {
27
+ return env.ASSETS.fetch(cfReq);
28
+ }
29
+ // Expose latest env to the global context
30
+ globalThis.__env__ = env;
31
+ return nitroApp.fetch(req);
32
+ },
33
+ scheduled(event, env, context) {
34
+ if (import.meta._tasks) {
35
+ globalThis.__env__ = env;
36
+ context.waitUntil(runCronTasks(event.cron, {
37
+ context: { cloudflare: {
38
+ env,
39
+ context
40
+ } },
41
+ payload: {}
42
+ }));
43
+ }
44
+ }
47
45
  };
@@ -1,3 +1,3 @@
1
1
  import type { NitroAppPlugin } from "nitro/types";
2
- declare const _default: NitroAppPlugin;
3
- export default _default;
2
+ declare const cloudflareDevPlugin: NitroAppPlugin;
3
+ export default cloudflareDevPlugin;
@@ -1,89 +1,96 @@
1
- const _proxy = _getPlatformProxy().catch((error) => {
2
- console.error("Failed to initialize wrangler bindings proxy", error);
3
- return _createStubProxy();
4
- }).then((proxy) => {
5
- globalThis.__env__ = proxy.env;
6
- return proxy;
7
- });
8
- globalThis.__env__ = _proxy.then((proxy) => proxy.env);
9
- export default (function(nitroApp) {
10
- nitroApp.hooks.hook("request", async (event) => {
11
- event.req.context ??= {};
12
- const proxy = await _proxy;
13
- event.req.context.cf = proxy.cf;
14
- event.req.context.waitUntil = proxy.ctx.waitUntil.bind(proxy.ctx);
15
- const request = new Request(event.req.url);
16
- request.cf = proxy.cf;
17
- event.req.context.cloudflare = {
18
- ...event.req.context.cloudflare,
19
- request,
20
- env: proxy.env,
21
- context: proxy.ctx
22
- };
23
- });
24
- nitroApp.hooks._hooks.request.unshift(nitroApp.hooks._hooks.request.pop());
25
- nitroApp.hooks.hook("close", () => {
26
- return _proxy?.then((proxy) => proxy.dispose);
27
- });
1
+ import { useRuntimeConfig } from "nitro/runtime-config";
2
+ const proxy = await _getPlatformProxy().catch((error) => {
3
+ console.error("Failed to initialize wrangler bindings proxy", error);
4
+ return _createStubProxy();
28
5
  });
6
+ globalThis.__env__ = proxy.env;
7
+ globalThis.__wait_until__ = proxy.ctx.waitUntil.bind(proxy.ctx);
8
+ const cloudflareDevPlugin = function(nitroApp) {
9
+ nitroApp.hooks.hook("request", async (event) => {
10
+ event.req.context ??= {};
11
+ // Inject the various cf values from the proxy in event and event.context
12
+ event.req.context.cf = proxy.cf;
13
+ event.req.context.waitUntil = proxy.ctx.waitUntil.bind(proxy.ctx);
14
+ const request = event.req;
15
+ request.cf = proxy.cf;
16
+ event.req.context.cloudflare = {
17
+ ...event.req.context.cloudflare,
18
+ request,
19
+ env: proxy.env,
20
+ context: proxy.ctx
21
+ };
22
+ // Replicate Nitro production behavior
23
+ // https://github.com/unjs/nitro/blob/main/src/runtime/entries/cloudflare-pages.ts#L55
24
+ // https://github.com/unjs/nitro/blob/main/src/runtime/app.ts#L120
25
+ // TODO: Update for v3
26
+ // (event.node.req as any).__unenv__ = {
27
+ // ...(event.node.req as any).__unenv__,
28
+ // waitUntil: event.context.waitUntil,
29
+ // };
30
+ });
31
+ // https://github.com/pi0/nitro-cloudflare-dev/issues/5
32
+ // https://github.com/unjs/hookable/issues/98
33
+ // @ts-expect-error
34
+ nitroApp.hooks._hooks.request.unshift(nitroApp.hooks._hooks.request.pop());
35
+ // Dispose proxy when Nitro is closed
36
+ nitroApp.hooks.hook("close", () => {
37
+ return proxy?.dispose();
38
+ });
39
+ };
40
+ export default cloudflareDevPlugin;
29
41
  async function _getPlatformProxy() {
30
- const { useRuntimeConfig } = await import("nitro/runtime");
31
- const pkg = "wrangler";
32
- const { getPlatformProxy } = await import(
33
- /* @vite-ignore */
34
- pkg
35
- ).catch(
36
- () => {
37
- throw new Error(
38
- "Package `wrangler` not found, please install it with: `npx nypm@latest add -D wrangler`"
39
- );
40
- }
41
- );
42
- const runtimeConfig = useRuntimeConfig();
43
- const proxyOptions = {
44
- configPath: runtimeConfig.wrangler.configPath,
45
- persist: { path: runtimeConfig.wrangler.persistDir }
46
- };
47
- if (runtimeConfig.wrangler.environment) {
48
- proxyOptions.environment = runtimeConfig.wrangler.environment;
49
- }
50
- const proxy = await getPlatformProxy(proxyOptions);
51
- return proxy;
42
+ const pkg = "wrangler";
43
+ const { getPlatformProxy } = await import(
44
+ /* @vite-ignore */
45
+ pkg
46
+ ).catch(() => {
47
+ throw new Error("Package `wrangler` not found, please install it with: `npx nypm@latest add -D wrangler`");
48
+ });
49
+ const runtimeConfig = useRuntimeConfig();
50
+ const proxyOptions = {
51
+ configPath: runtimeConfig.wrangler.configPath,
52
+ persist: { path: runtimeConfig.wrangler.persistDir }
53
+ };
54
+ // TODO: investigate why
55
+ // https://github.com/pi0/nitro-cloudflare-dev/issues/51
56
+ if (runtimeConfig.wrangler.environment) {
57
+ proxyOptions.environment = runtimeConfig.wrangler.environment;
58
+ }
59
+ const proxy = await getPlatformProxy(proxyOptions);
60
+ return proxy;
52
61
  }
53
62
  function _createStubProxy() {
54
- return {
55
- env: {},
56
- cf: {},
57
- ctx: {
58
- waitUntil() {
59
- },
60
- passThroughOnException() {
61
- },
62
- props: {}
63
- },
64
- caches: {
65
- open() {
66
- const result = Promise.resolve(new _CacheStub());
67
- return result;
68
- },
69
- get default() {
70
- return new _CacheStub();
71
- }
72
- },
73
- dispose: () => Promise.resolve()
74
- };
63
+ return {
64
+ env: {},
65
+ cf: {},
66
+ ctx: {
67
+ waitUntil() {},
68
+ passThroughOnException() {},
69
+ props: {}
70
+ },
71
+ caches: {
72
+ open() {
73
+ const result = Promise.resolve(new _CacheStub());
74
+ return result;
75
+ },
76
+ get default() {
77
+ return new _CacheStub();
78
+ }
79
+ },
80
+ dispose: () => Promise.resolve()
81
+ };
75
82
  }
76
83
  class _CacheStub {
77
- delete() {
78
- const result = Promise.resolve(false);
79
- return result;
80
- }
81
- match() {
82
- const result = Promise.resolve(void 0);
83
- return result;
84
- }
85
- put() {
86
- const result = Promise.resolve();
87
- return result;
88
- }
84
+ delete() {
85
+ const result = Promise.resolve(false);
86
+ return result;
87
+ }
88
+ match() {
89
+ const result = Promise.resolve(undefined);
90
+ return result;
91
+ }
92
+ put() {
93
+ const result = Promise.resolve();
94
+ return result;
95
+ }
89
96
  }
@@ -0,0 +1,27 @@
1
+ // Shim for "cloudflare:workers" import in dev environment
2
+
3
+ // unenv shim respects __env__
4
+ export { env } from "unenv/node/internal/process/env";
5
+
6
+ export async function waitUntil(promise) {
7
+ await globalThis.__wait_until__?.(promise);
8
+ }
9
+
10
+ export function withEnv(newEnv, fn) {
11
+ throw new Error("cf.withEnv is not implemented in dev env currently.");
12
+ }
13
+
14
+ class NotImplemented {
15
+ constructor() {
16
+ throw new Error("Not implemented in dev env currently.");
17
+ }
18
+ }
19
+
20
+ export class DurableObject extends NotImplemented {}
21
+ export class RpcPromise extends NotImplemented {}
22
+ export class RpcProperty extends NotImplemented {}
23
+ export class RpcStub extends NotImplemented {}
24
+ export class RpcTarget extends NotImplemented {}
25
+ export class ServiceStub extends NotImplemented {}
26
+ export class WorkerEntrypoint extends NotImplemented {}
27
+ export class WorkflowEntrypoint extends NotImplemented {}
@@ -1 +1,5 @@
1
1
  import "#nitro-internal-pollyfills";
2
+ import type { Deno as _Deno } from "@deno/types";
3
+ declare global {
4
+ var Deno: typeof _Deno;
5
+ }
@@ -1,17 +1,20 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
3
2
  import wsAdapter from "crossws/adapters/deno";
3
+ import { useNitroApp } from "nitro/app";
4
+ import { resolveWebsocketHooks } from "nitro/~internal/runtime/app";
5
+ import { hasWebSocket } from "#nitro-internal-virtual/feature-flags";
4
6
  const nitroApp = useNitroApp();
5
- const ws = import.meta._websocket ? (
6
- // @ts-expect-error
7
- wsAdapter(nitroApp.h3App.websocket)
8
- ) : void 0;
7
+ const ws = hasWebSocket ? wsAdapter({ resolve: resolveWebsocketHooks }) : undefined;
8
+ // TODO: Migrate to srvx to provide request IP
9
9
  Deno.serve((denoReq, info) => {
10
- const req = denoReq;
11
- req.runtime ??= { name: "deno" };
12
- req.runtime.deno ??= { info };
13
- if (import.meta._websocket && req.headers.get("upgrade") === "websocket") {
14
- return ws.handleUpgrade(req, info);
15
- }
16
- return nitroApp.fetch(req);
10
+ // srvx compatibility
11
+ const req = denoReq;
12
+ req.runtime ??= { name: "deno" };
13
+ req.runtime.deno ??= { info };
14
+ // TODO: Support remoteAddr
15
+ // https://crossws.unjs.io/adapters/deno
16
+ if (hasWebSocket && req.headers.get("upgrade") === "websocket") {
17
+ return ws.handleUpgrade(req, info);
18
+ }
19
+ return nitroApp.fetch(req);
17
20
  });
@@ -1,6 +1,3 @@
1
1
  import "#nitro-internal-pollyfills";
2
- declare global {
3
- const Deno: typeof import("@deno/types").Deno;
4
- }
5
2
  declare const _default: {};
6
3
  export default _default;
@@ -1,59 +1,39 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
3
- import { useRuntimeConfig } from "nitro/runtime";
4
- import { startScheduleRunner } from "nitro/runtime/internal";
2
+ import { serve } from "srvx/deno";
5
3
  import wsAdapter from "crossws/adapters/deno";
6
- import destr from "destr";
4
+ import { useNitroApp } from "nitro/app";
5
+ import { startScheduleRunner } from "nitro/~internal/runtime/task";
6
+ import { trapUnhandledErrors } from "nitro/~internal/runtime/error/hooks";
7
+ import { resolveWebsocketHooks } from "nitro/~internal/runtime/app";
8
+ import { hasWebSocket } from "#nitro-internal-virtual/feature-flags";
9
+ const port = Number.parseInt(process.env.NITRO_PORT || process.env.PORT || "") || 3e3;
10
+ const host = process.env.NITRO_HOST || process.env.HOST;
11
+ const cert = process.env.NITRO_SSL_CERT;
12
+ const key = process.env.NITRO_SSL_KEY;
13
+ // const socketPath = process.env.NITRO_UNIX_SOCKET; // TODO
7
14
  const nitroApp = useNitroApp();
8
- if (Deno.env.get("DEBUG")) {
9
- addEventListener(
10
- "unhandledrejection",
11
- (event) => console.error("[unhandledRejection]", event.reason)
12
- );
13
- addEventListener(
14
- "error",
15
- (event) => console.error("[uncaughtException]", event.error)
16
- );
17
- } else {
18
- addEventListener(
19
- "unhandledrejection",
20
- (err) => console.error("[unhandledRejection] " + err)
21
- );
22
- addEventListener(
23
- "error",
24
- (event) => console.error("[uncaughtException] " + event.error)
25
- );
26
- }
27
- const serveOptions = {
28
- key: Deno.env.get("NITRO_SSL_KEY"),
29
- cert: Deno.env.get("NITRO_SSL_CERT"),
30
- port: destr(Deno.env.get("NITRO_PORT") || Deno.env.get("PORT")) || 3e3,
31
- hostname: Deno.env.get("NITRO_HOST") || Deno.env.get("HOST"),
32
- onListen: (opts) => {
33
- const baseURL = (useRuntimeConfig().app.baseURL || "").replace(/\/$/, "");
34
- const url = `${opts.hostname}:${opts.port}${baseURL}`;
35
- console.log(`Listening ${url}`);
36
- }
37
- };
38
- if (!serveOptions.key || !serveOptions.cert) {
39
- delete serveOptions.key;
40
- delete serveOptions.cert;
41
- }
42
- Deno.serve(serveOptions, handler);
43
- const ws = import.meta._websocket ? (
44
- // @ts-expect-error
45
- wsAdapter(nitroApp.h3App.websocket)
46
- ) : void 0;
47
- async function handler(denoReq, info) {
48
- const req = denoReq;
49
- req.runtime ??= { name: "deno" };
50
- req.runtime.deno ??= { info };
51
- if (import.meta._websocket && req.headers.get("upgrade") === "websocket") {
52
- return ws.handleUpgrade(req, info);
53
- }
54
- return nitroApp.fetch(req);
15
+ let _fetch = nitroApp.fetch;
16
+ if (hasWebSocket) {
17
+ const { handleUpgrade } = wsAdapter({ resolve: resolveWebsocketHooks });
18
+ _fetch = (req) => {
19
+ if (req.headers.get("upgrade") === "websocket") {
20
+ return handleUpgrade(req, req.runtime.deno.info);
21
+ }
22
+ return nitroApp.fetch(req);
23
+ };
55
24
  }
25
+ serve({
26
+ port,
27
+ hostname: host,
28
+ tls: cert && key ? {
29
+ cert,
30
+ key
31
+ } : undefined,
32
+ fetch: _fetch
33
+ });
34
+ trapUnhandledErrors();
35
+ // Scheduled tasks
56
36
  if (import.meta._tasks) {
57
- startScheduleRunner();
37
+ startScheduleRunner();
58
38
  }
59
39
  export default {};
@@ -1,3 +1,4 @@
1
1
  import "#nitro-internal-pollyfills";
2
2
  import type { Context } from "@netlify/edge-functions";
3
- export default function netlifyEdge(netlifyReq: Request, context: Context): Promise<any>;
3
+ // https://docs.netlify.com/edge-functions/api/
4
+ export default function netlifyEdge(netlifyReq: Request, context: Context);
@@ -1,17 +1,20 @@
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
+ // https://docs.netlify.com/edge-functions/api/
5
6
  export default async function netlifyEdge(netlifyReq, context) {
6
- const req = netlifyReq;
7
- req.runtime ??= { name: "netlify-edge" };
8
- req.runtime.netlify ??= { context };
9
- const url = new URL(req.url);
10
- if (isPublicAssetURL(url.pathname)) {
11
- return;
12
- }
13
- if (!req.headers.has("x-forwarded-proto") && url.protocol === "https:") {
14
- req.headers.set("x-forwarded-proto", "https");
15
- }
16
- return nitroApp.fetch(req);
7
+ // srvx compatibility
8
+ const req = netlifyReq;
9
+ req.runtime ??= { name: "netlify-edge" };
10
+ // @ts-expect-error (add to srvx types)
11
+ req.runtime.netlify ??= { context };
12
+ const url = new URL(req.url);
13
+ if (isPublicAssetURL(url.pathname)) {
14
+ return;
15
+ }
16
+ if (!req.headers.has("x-forwarded-proto") && url.protocol === "https:") {
17
+ req.headers.set("x-forwarded-proto", "https");
18
+ }
19
+ return nitroApp.fetch(req);
17
20
  }
@@ -1,24 +1,18 @@
1
1
  import "#nitro-internal-pollyfills";
2
- import { useNitroApp } from "nitro/runtime";
2
+ import { useNitroApp } from "nitro/app";
3
3
  const nitroApp = useNitroApp();
4
4
  const ONE_YEAR_IN_SECONDS = 365 * 24 * 60 * 60;
5
5
  const handler = async (req) => {
6
- const response = await nitroApp.fetch(req);
7
- const isr = (req.context?.routeRules || {})?.isr?.options;
8
- if (isr) {
9
- const maxAge = typeof isr === "number" ? isr : ONE_YEAR_IN_SECONDS;
10
- const revalidateDirective = typeof isr === "number" ? `stale-while-revalidate=${ONE_YEAR_IN_SECONDS}` : "must-revalidate";
11
- if (!response.headers.has("Cache-Control")) {
12
- response.headers.set(
13
- "Cache-Control",
14
- "public, max-age=0, must-revalidate"
15
- );
16
- }
17
- response.headers.set(
18
- "Netlify-CDN-Cache-Control",
19
- `public, max-age=${maxAge}, ${revalidateDirective}, durable`
20
- );
21
- }
22
- return response;
6
+ const response = await nitroApp.fetch(req);
7
+ const isr = (req.context?.routeRules || {})?.isr?.options;
8
+ if (isr) {
9
+ const maxAge = typeof isr === "number" ? isr : ONE_YEAR_IN_SECONDS;
10
+ const revalidateDirective = typeof isr === "number" ? `stale-while-revalidate=${ONE_YEAR_IN_SECONDS}` : "must-revalidate";
11
+ if (!response.headers.has("Cache-Control")) {
12
+ response.headers.set("Cache-Control", "public, max-age=0, must-revalidate");
13
+ }
14
+ response.headers.set("Netlify-CDN-Cache-Control", `public, max-age=${maxAge}, ${revalidateDirective}, durable`);
15
+ }
16
+ return response;
23
17
  };
24
18
  export default handler;
@@ -1 +1,3 @@
1
- export {};
1
+ import "#nitro-internal-pollyfills";
2
+ declare const _default: {};
3
+ export default _default;
@@ -1,58 +1,54 @@
1
+ import "#nitro-internal-pollyfills";
1
2
  import cluster from "node:cluster";
2
- import os from "node:os";
3
- import {
4
- getGracefulShutdownConfig,
5
- trapUnhandledNodeErrors
6
- } from "nitro/runtime/internal";
7
- function runMaster() {
8
- const numberOfWorkers = Number.parseInt(process.env.NITRO_CLUSTER_WORKERS || "") || (os.cpus().length > 0 ? os.cpus().length : 1);
9
- for (let i = 0; i < numberOfWorkers; i++) {
10
- cluster.fork();
11
- }
12
- let isShuttingDown = false;
13
- cluster.on("exit", () => {
14
- if (!isShuttingDown) {
15
- cluster.fork();
16
- }
17
- });
18
- const shutdownConfig = getGracefulShutdownConfig();
19
- if (!shutdownConfig.disabled) {
20
- async function onShutdown() {
21
- if (isShuttingDown) {
22
- return;
23
- }
24
- isShuttingDown = true;
25
- await new Promise((resolve) => {
26
- const timeout = setTimeout(() => {
27
- console.warn("Timeout reached for graceful shutdown. Forcing exit.");
28
- resolve();
29
- }, shutdownConfig.timeout);
30
- cluster.on("exit", () => {
31
- if (Object.values(cluster.workers || {}).every((w) => !w || w.isDead())) {
32
- clearTimeout(timeout);
33
- resolve();
34
- } else {
35
- }
36
- });
37
- });
38
- if (shutdownConfig.forceExit) {
39
- process.exit(0);
40
- }
41
- }
42
- for (const signal of shutdownConfig.signals) {
43
- process.once(signal, onShutdown);
44
- }
45
- }
3
+ import { NodeRequest, serve } from "srvx/node";
4
+ import wsAdapter from "crossws/adapters/node";
5
+ import { useNitroApp } from "nitro/app";
6
+ import { startScheduleRunner } from "nitro/~internal/runtime/task";
7
+ import { trapUnhandledErrors } from "nitro/~internal/runtime/error/hooks";
8
+ import { resolveWebsocketHooks } from "nitro/~internal/runtime/app";
9
+ import { hasWebSocket } from "#nitro-internal-virtual/feature-flags";
10
+ const port = Number.parseInt(process.env.NITRO_PORT || process.env.PORT || "") || 3e3;
11
+ const host = process.env.NITRO_HOST || process.env.HOST;
12
+ const cert = process.env.NITRO_SSL_CERT;
13
+ const key = process.env.NITRO_SSL_KEY;
14
+ // const socketPath = process.env.NITRO_UNIX_SOCKET; // TODO
15
+ const clusterId = cluster.isWorker && process.env.WORKER_ID;
16
+ if (clusterId) {
17
+ console.log(`Worker #${clusterId} started`);
46
18
  }
47
- function runWorker() {
48
- import("./node-server.mjs").catch((error) => {
49
- console.error(error);
50
- process.exit(1);
51
- });
19
+ const nitroApp = useNitroApp();
20
+ const server = serve({
21
+ port,
22
+ hostname: host,
23
+ tls: cert && key ? {
24
+ cert,
25
+ key
26
+ } : undefined,
27
+ node: { exclusive: false },
28
+ silent: clusterId ? clusterId !== "1" : undefined,
29
+ fetch: nitroApp.fetch
30
+ });
31
+ if (hasWebSocket) {
32
+ const { handleUpgrade } = wsAdapter({ resolve: resolveWebsocketHooks });
33
+ server.node.server.on("upgrade", (req, socket, head) => {
34
+ handleUpgrade(
35
+ req,
36
+ socket,
37
+ head,
38
+ // @ts-expect-error (upgrade is not typed)
39
+ new NodeRequest({
40
+ req,
41
+ upgrade: {
42
+ socket,
43
+ head
44
+ }
45
+ })
46
+ );
47
+ });
52
48
  }
53
- trapUnhandledNodeErrors();
54
- if (cluster.isPrimary) {
55
- runMaster();
56
- } else {
57
- runWorker();
49
+ trapUnhandledErrors();
50
+ // Scheduled tasks
51
+ if (import.meta._tasks) {
52
+ startScheduleRunner();
58
53
  }
54
+ export default {};
@@ -1,4 +1,3 @@
1
1
  import "#nitro-internal-pollyfills";
2
- export declare const middleware: any;
3
- /** @experimental */
4
- export declare const websocket: undefined;
2
+ export declare const middleware: unknown;
3
+ export declare const handleUpgrade: unknown;