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
@@ -0,0 +1,304 @@
1
+ import { i as __toESM } from "./Bqks5huO.mjs";
2
+ import { C as isAbsolute, O as relative, h as resolveModulePath, k as resolve, w as join, x as dirname } from "../_libs/c12.mjs";
3
+ import { c as parseNodeModulePath, s as lookupNodeModuleSubpath } from "../_libs/local-pkg.mjs";
4
+ import { o as toExports } from "../_libs/unimport.mjs";
5
+ import { t as glob } from "../_libs/tinyglobby.mjs";
6
+ import { i as writeFile, r as resolveNitroPath, t as isDirectory } from "./C7CbzoI1.mjs";
7
+ import { t as resolveAlias } from "../_libs/pathe.mjs";
8
+ import { n as resolveSchema, t as generateTypes } from "../_libs/untyped.mjs";
9
+ import { existsSync, promises } from "node:fs";
10
+ import { withBase, withLeadingSlash, withoutTrailingSlash } from "ufo";
11
+ import { defu } from "defu";
12
+ import { runtimeDir } from "nitro/meta";
13
+
14
+ //#region src/scan.ts
15
+ const GLOB_SCAN_PATTERN = "**/*.{js,mjs,cjs,ts,mts,cts,tsx,jsx}";
16
+ const suffixRegex = /(\.(?<method>connect|delete|get|head|options|patch|post|put|trace))?(\.(?<env>dev|prod|prerender))?$/;
17
+ async function scanAndSyncOptions(nitro) {
18
+ const scannedPlugins = await scanPlugins(nitro);
19
+ for (const plugin of scannedPlugins) if (!nitro.options.plugins.includes(plugin)) nitro.options.plugins.push(plugin);
20
+ if (nitro.options.experimental.tasks) {
21
+ const scannedTasks = await scanTasks(nitro);
22
+ for (const scannedTask of scannedTasks) if (scannedTask.name in nitro.options.tasks) {
23
+ if (!nitro.options.tasks[scannedTask.name].handler) nitro.options.tasks[scannedTask.name].handler = scannedTask.handler;
24
+ } else nitro.options.tasks[scannedTask.name] = {
25
+ handler: scannedTask.handler,
26
+ description: ""
27
+ };
28
+ }
29
+ const scannedModules = await scanModules(nitro);
30
+ nitro.options.modules = nitro.options.modules || [];
31
+ for (const modPath of scannedModules) if (!nitro.options.modules.includes(modPath)) nitro.options.modules.push(modPath);
32
+ }
33
+ async function scanHandlers(nitro) {
34
+ const middleware = await scanMiddleware(nitro);
35
+ const handlers = await Promise.all([scanServerRoutes(nitro, nitro.options.apiDir || "api", nitro.options.apiBaseURL || "/api"), scanServerRoutes(nitro, nitro.options.routesDir || "routes")]).then((r) => r.flat());
36
+ nitro.scannedHandlers = [...middleware, ...handlers.filter((h, index, array) => {
37
+ return array.findIndex((h2) => h.route === h2.route && h.method === h2.method && h.env === h2.env) === index;
38
+ })];
39
+ return handlers;
40
+ }
41
+ async function scanMiddleware(nitro) {
42
+ return (await scanFiles(nitro, "middleware")).map((file) => {
43
+ return {
44
+ route: "/**",
45
+ middleware: true,
46
+ handler: file.fullPath
47
+ };
48
+ });
49
+ }
50
+ async function scanServerRoutes(nitro, dir, prefix = "/") {
51
+ return (await scanFiles(nitro, dir)).map((file) => {
52
+ let route = file.path.replace(/\.[A-Za-z]+$/, "").replace(/\(([^(/\\]+)\)[/\\]/g, "").replace(/\[\.{3}]/g, "**").replace(/\[\.{3}(\w+)]/g, "**:$1").replace(/\[([^/\]]+)]/g, ":$1");
53
+ route = withLeadingSlash(withoutTrailingSlash(withBase(route, prefix)));
54
+ const suffixMatch = route.match(suffixRegex);
55
+ let method;
56
+ let env;
57
+ if (suffixMatch?.index && suffixMatch?.index >= 0) {
58
+ route = route.slice(0, suffixMatch.index);
59
+ method = suffixMatch.groups?.method;
60
+ env = suffixMatch.groups?.env;
61
+ }
62
+ route = route.replace(/\/index$/, "") || "/";
63
+ return {
64
+ handler: file.fullPath,
65
+ lazy: true,
66
+ middleware: false,
67
+ route,
68
+ method,
69
+ env
70
+ };
71
+ });
72
+ }
73
+ async function scanPlugins(nitro) {
74
+ return (await scanFiles(nitro, "plugins")).map((f) => f.fullPath);
75
+ }
76
+ async function scanTasks(nitro) {
77
+ return (await scanFiles(nitro, "tasks")).map((f) => {
78
+ return {
79
+ name: f.path.replace(/\/index$/, "").replace(/\.[A-Za-z]+$/, "").replace(/\//g, ":"),
80
+ handler: f.fullPath
81
+ };
82
+ });
83
+ }
84
+ async function scanModules(nitro) {
85
+ return (await scanFiles(nitro, "modules")).map((f) => f.fullPath);
86
+ }
87
+ async function scanFiles(nitro, name) {
88
+ return await Promise.all(nitro.options.scanDirs.map((dir) => scanDir(nitro, dir, name))).then((r) => r.flat());
89
+ }
90
+ async function scanDir(nitro, dir, name) {
91
+ return (await glob(join(name, GLOB_SCAN_PATTERN), {
92
+ cwd: dir,
93
+ dot: true,
94
+ ignore: nitro.options.ignore,
95
+ absolute: true
96
+ }).catch((error) => {
97
+ if (error?.code === "ENOTDIR") {
98
+ nitro.logger.warn(`Ignoring \`${join(dir, name)}\`. It must be a directory.`);
99
+ return [];
100
+ }
101
+ throw error;
102
+ })).map((fullPath) => {
103
+ return {
104
+ fullPath,
105
+ path: relative(join(dir, name), fullPath)
106
+ };
107
+ }).sort((a, b) => a.path.localeCompare(b.path));
108
+ }
109
+
110
+ //#endregion
111
+ //#region src/build/types.ts
112
+ async function writeTypes(nitro) {
113
+ const types = { routes: {} };
114
+ const generatedTypesDir = resolve(nitro.options.rootDir, nitro.options.typescript.generatedTypesDir || "node_modules/.nitro/types");
115
+ const middleware = [...nitro.scannedHandlers, ...nitro.options.handlers];
116
+ for (const mw of middleware) {
117
+ if (typeof mw.handler !== "string" || !mw.route) continue;
118
+ const relativePath = relative(generatedTypesDir, resolveNitroPath(mw.handler, nitro.options)).replace(/\.(js|mjs|cjs|ts|mts|cts|tsx|jsx)$/, "");
119
+ const method = mw.method || "default";
120
+ types.routes[mw.route] ??= {};
121
+ types.routes[mw.route][method] ??= [];
122
+ types.routes[mw.route][method].push(`Simplify<Serialize<Awaited<ReturnType<typeof import('${relativePath}').default>>>>`);
123
+ }
124
+ let autoImportedTypes = [];
125
+ let autoImportExports = "";
126
+ if (nitro.unimport) {
127
+ await nitro.unimport.init();
128
+ const allImports = await nitro.unimport.getImports();
129
+ autoImportExports = toExports(allImports).replace(/#internal\/nitro/g, relative(generatedTypesDir, runtimeDir));
130
+ const resolvedImportPathMap = /* @__PURE__ */ new Map();
131
+ for (const i of allImports) {
132
+ const from = i.typeFrom || i.from;
133
+ if (resolvedImportPathMap.has(from)) continue;
134
+ let path = resolveAlias(from, nitro.options.alias);
135
+ if (!isAbsolute(path)) {
136
+ const resolvedPath = resolveModulePath(from, {
137
+ try: true,
138
+ from: nitro.options.nodeModulesDirs,
139
+ conditions: [
140
+ "type",
141
+ "node",
142
+ "import"
143
+ ],
144
+ suffixes: ["", "/index"],
145
+ extensions: [
146
+ ".mjs",
147
+ ".cjs",
148
+ ".js",
149
+ ".mts",
150
+ ".cts",
151
+ ".ts"
152
+ ]
153
+ });
154
+ if (resolvedPath) {
155
+ const { dir, name } = parseNodeModulePath(resolvedPath);
156
+ if (!dir || !name) path = resolvedPath;
157
+ else path = join(dir, name, await lookupNodeModuleSubpath(resolvedPath) || "");
158
+ }
159
+ }
160
+ if (existsSync(path) && !await isDirectory(path)) path = path.replace(/\.[a-z]+$/, "");
161
+ if (isAbsolute(path)) path = relative(generatedTypesDir, path);
162
+ resolvedImportPathMap.set(from, path);
163
+ }
164
+ autoImportedTypes = [nitro.options.imports && nitro.options.imports.autoImport !== false ? (await nitro.unimport.generateTypeDeclarations({
165
+ exportHelper: false,
166
+ resolvePath: (i) => {
167
+ const from = i.typeFrom || i.from;
168
+ return resolvedImportPathMap.get(from) ?? from;
169
+ }
170
+ })).trim() : ""];
171
+ }
172
+ const generateRoutes = () => [
173
+ "// Generated by nitro",
174
+ "import type { Serialize, Simplify } from \"nitro/types\";",
175
+ "declare module \"nitro/types\" {",
176
+ " type Awaited<T> = T extends PromiseLike<infer U> ? Awaited<U> : T",
177
+ " interface InternalApi {",
178
+ ...Object.entries(types.routes).map(([path, methods]) => [
179
+ ` '${path}': {`,
180
+ ...Object.entries(methods).map(([method, types$1]) => ` '${method}': ${types$1.join(" | ")}`),
181
+ " }"
182
+ ].join("\n")),
183
+ " }",
184
+ "}",
185
+ "export {}"
186
+ ];
187
+ const config = [
188
+ "// Generated by nitro",
189
+ `declare module "nitro/types" {`,
190
+ nitro.options.typescript.generateRuntimeConfigTypes ? generateTypes(await resolveSchema(Object.fromEntries(Object.entries(nitro.options.runtimeConfig).filter(([key]) => !["app", "nitro"].includes(key)))), {
191
+ interfaceName: "NitroRuntimeConfig",
192
+ addExport: false,
193
+ addDefaults: false,
194
+ allowExtraKeys: false,
195
+ indentation: 2
196
+ }) : "",
197
+ `}`,
198
+ "export {}"
199
+ ];
200
+ const declarations = [
201
+ "/// <reference path=\"./nitro-routes.d.ts\" />",
202
+ "/// <reference path=\"./nitro-config.d.ts\" />",
203
+ "/// <reference path=\"./nitro-imports.d.ts\" />"
204
+ ];
205
+ const buildFiles = [];
206
+ buildFiles.push({
207
+ path: join(generatedTypesDir, "nitro-routes.d.ts"),
208
+ contents: () => generateRoutes().join("\n")
209
+ });
210
+ buildFiles.push({
211
+ path: join(generatedTypesDir, "nitro-config.d.ts"),
212
+ contents: config.join("\n")
213
+ });
214
+ buildFiles.push({
215
+ path: join(generatedTypesDir, "nitro-imports.d.ts"),
216
+ contents: [...autoImportedTypes, autoImportExports || "export {}"].join("\n")
217
+ });
218
+ buildFiles.push({
219
+ path: join(generatedTypesDir, "nitro.d.ts"),
220
+ contents: declarations.join("\n")
221
+ });
222
+ if (nitro.options.typescript.generateTsConfig) {
223
+ const tsConfigPath = resolve(generatedTypesDir, nitro.options.typescript.tsconfigPath);
224
+ const tsconfigDir = dirname(tsConfigPath);
225
+ const tsConfig = defu(nitro.options.typescript.tsConfig, {
226
+ compilerOptions: {
227
+ esModuleInterop: true,
228
+ allowSyntheticDefaultImports: true,
229
+ skipLibCheck: true,
230
+ target: "ESNext",
231
+ allowJs: true,
232
+ resolveJsonModule: true,
233
+ moduleDetection: "force",
234
+ isolatedModules: true,
235
+ verbatimModuleSyntax: true,
236
+ allowImportingTsExtensions: true,
237
+ strict: nitro.options.typescript.strict,
238
+ noUncheckedIndexedAccess: true,
239
+ noImplicitOverride: true,
240
+ forceConsistentCasingInFileNames: true,
241
+ module: "Preserve",
242
+ jsx: "preserve",
243
+ jsxFactory: "h",
244
+ jsxFragmentFactory: "Fragment",
245
+ paths: { "#imports": [relativeWithDot(tsconfigDir, join(generatedTypesDir, "nitro-imports"))] }
246
+ },
247
+ include: [
248
+ relativeWithDot(tsconfigDir, join(generatedTypesDir, "nitro.d.ts")).replace(/^(?=[^.])/, "./"),
249
+ join(relativeWithDot(tsconfigDir, nitro.options.rootDir), "**/*"),
250
+ ...!nitro.options.serverDir || nitro.options.serverDir === nitro.options.rootDir ? [] : [join(relativeWithDot(tsconfigDir, nitro.options.serverDir), "**/*")]
251
+ ]
252
+ });
253
+ for (const alias in tsConfig.compilerOptions.paths) {
254
+ const paths = await Promise.all(tsConfig.compilerOptions.paths[alias].map(async (path) => {
255
+ if (!isAbsolute(path)) return path;
256
+ return relativeWithDot(tsconfigDir, (await promises.stat(path).catch(() => null))?.isFile() ? path.replace(/(?<=\w)\.\w+$/g, "") : path);
257
+ }));
258
+ tsConfig.compilerOptions.paths[alias] = [...new Set(paths)];
259
+ }
260
+ tsConfig.include = [...new Set(tsConfig.include.map((p) => isAbsolute(p) ? relativeWithDot(tsconfigDir, p) : p))];
261
+ if (tsConfig.exclude) tsConfig.exclude = [...new Set(tsConfig.exclude.map((p) => isAbsolute(p) ? relativeWithDot(tsconfigDir, p) : p))];
262
+ types.tsConfig = tsConfig;
263
+ buildFiles.push({
264
+ path: tsConfigPath,
265
+ contents: () => JSON.stringify(tsConfig, null, 2)
266
+ });
267
+ }
268
+ await nitro.hooks.callHook("types:extend", types);
269
+ await Promise.all(buildFiles.map(async (file) => {
270
+ await writeFile(resolve(generatedTypesDir, file.path), typeof file.contents === "string" ? file.contents : file.contents());
271
+ }));
272
+ }
273
+ const RELATIVE_RE = /^\.{1,2}\//;
274
+ function relativeWithDot(from, to) {
275
+ const rel = relative(from, to);
276
+ return RELATIVE_RE.test(rel) ? rel : "./" + rel;
277
+ }
278
+
279
+ //#endregion
280
+ //#region src/utils/parallel.ts
281
+ async function runParallel(inputs, cb, opts) {
282
+ const tasks = /* @__PURE__ */ new Set();
283
+ function queueNext() {
284
+ const route = inputs.values().next().value;
285
+ if (!route) return;
286
+ inputs.delete(route);
287
+ const task = (opts.interval ? new Promise((resolve$1) => setTimeout(resolve$1, opts.interval)) : Promise.resolve()).then(() => cb(route)).catch((error) => {
288
+ console.error(error);
289
+ });
290
+ tasks.add(task);
291
+ return task.then(() => {
292
+ tasks.delete(task);
293
+ if (inputs.size > 0) return refillQueue();
294
+ });
295
+ }
296
+ function refillQueue() {
297
+ const workers = Math.min(opts.concurrency - tasks.size, inputs.size);
298
+ return Promise.all(Array.from({ length: workers }, () => queueNext()));
299
+ }
300
+ await refillQueue();
301
+ }
302
+
303
+ //#endregion
304
+ export { scanHandlers as i, writeTypes as n, scanAndSyncOptions as r, runParallel as t };