@depup/nitro 3.0.260311-beta-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (370) hide show
  1. package/LICENSE +27 -0
  2. package/README.md +32 -0
  3. package/changes.json +14 -0
  4. package/dist/THIRD-PARTY-LICENSES.md +1646 -0
  5. package/dist/_build/common.mjs +29361 -0
  6. package/dist/_build/rolldown.mjs +173 -0
  7. package/dist/_build/rollup.mjs +194 -0
  8. package/dist/_build/vite.build.mjs +18 -0
  9. package/dist/_chunks/nitro.mjs +1159 -0
  10. package/dist/_chunks/nitro2.mjs +102 -0
  11. package/dist/_chunks/nitro3.mjs +129 -0
  12. package/dist/_chunks/utils.mjs +272 -0
  13. package/dist/_common.mjs +35 -0
  14. package/dist/_dev.d.mts +12 -0
  15. package/dist/_dev.mjs +519 -0
  16. package/dist/_libs/_.mjs +3 -0
  17. package/dist/_libs/_2.mjs +2 -0
  18. package/dist/_libs/_3.mjs +3 -0
  19. package/dist/_libs/_4.mjs +2 -0
  20. package/dist/_libs/_5.mjs +3 -0
  21. package/dist/_libs/_6.mjs +4 -0
  22. package/dist/_libs/_7.mjs +5 -0
  23. package/dist/_libs/c12+rc9.mjs +812 -0
  24. package/dist/_libs/c12+readdirp+chokidar.d.mts +230 -0
  25. package/dist/_libs/citty.mjs +361 -0
  26. package/dist/_libs/commondir+is-reference.mjs +1311 -0
  27. package/dist/_libs/compatx.d.mts +47 -0
  28. package/dist/_libs/compatx.mjs +45 -0
  29. package/dist/_libs/esbuild.d.mts +20 -0
  30. package/dist/_libs/escape-string-regexp.mjs +7 -0
  31. package/dist/_libs/estree+pluginutils.d.mts +241 -0
  32. package/dist/_libs/estree-walker.mjs +184 -0
  33. package/dist/_libs/exsolve.d.mts +1 -0
  34. package/dist/_libs/hasown+resolve+deepmerge.mjs +1949 -0
  35. package/dist/_libs/httpxy.d.mts +82 -0
  36. package/dist/_libs/httpxy.mjs +671 -0
  37. package/dist/_libs/js-tokens.d.mts +1 -0
  38. package/dist/_libs/klona.mjs +37 -0
  39. package/dist/_libs/magic-string.d.mts +220 -0
  40. package/dist/_libs/mlly.d.mts +57 -0
  41. package/dist/_libs/nypm+tinyexec.mjs +845 -0
  42. package/dist/_libs/perfect-debounce.mjs +88 -0
  43. package/dist/_libs/pkg-types.d.mts +23 -0
  44. package/dist/_libs/plugin-alias.mjs +64 -0
  45. package/dist/_libs/plugin-inject.mjs +131 -0
  46. package/dist/_libs/plugin-json.mjs +34 -0
  47. package/dist/_libs/pluginutils.mjs +646 -0
  48. package/dist/_libs/readdirp+chokidar.mjs +1606 -0
  49. package/dist/_libs/remapping.mjs +115 -0
  50. package/dist/_libs/resolve-uri+gen-mapping.mjs +442 -0
  51. package/dist/_libs/rou3.d.mts +44 -0
  52. package/dist/_libs/rou3.mjs +496 -0
  53. package/dist/_libs/std-env.d.mts +12 -0
  54. package/dist/_libs/strip-literal.d.mts +1 -0
  55. package/dist/_libs/tsconfck.mjs +813 -0
  56. package/dist/_libs/ultrahtml.mjs +127 -0
  57. package/dist/_libs/unimport+unplugin.mjs +1684 -0
  58. package/dist/_libs/unplugin+unimport.d.mts +423 -0
  59. package/dist/_libs/unwasm.d.mts +29 -0
  60. package/dist/_presets.mjs +1759 -0
  61. package/dist/builder.d.mts +64 -0
  62. package/dist/builder.mjs +15 -0
  63. package/dist/cli/_chunks/build.mjs +47 -0
  64. package/dist/cli/_chunks/common.mjs +14 -0
  65. package/dist/cli/_chunks/deploy.mjs +40 -0
  66. package/dist/cli/_chunks/dev.mjs +62 -0
  67. package/dist/cli/_chunks/docs.mjs +30 -0
  68. package/dist/cli/_chunks/list.mjs +25 -0
  69. package/dist/cli/_chunks/prepare.mjs +17 -0
  70. package/dist/cli/_chunks/preview.mjs +51 -0
  71. package/dist/cli/_chunks/run.mjs +53 -0
  72. package/dist/cli/_chunks/task.mjs +14 -0
  73. package/dist/cli/index.d.mts +1 -0
  74. package/dist/cli/index.mjs +22 -0
  75. package/dist/node_modules/@poppinss/colors/build/index.js +139 -0
  76. package/dist/node_modules/@poppinss/colors/package.json +118 -0
  77. package/dist/node_modules/@poppinss/dumper/build/chunk-26HALFTP.js +602 -0
  78. package/dist/node_modules/@poppinss/dumper/build/formatters/console/main.js +441 -0
  79. package/dist/node_modules/@poppinss/dumper/build/formatters/html/main.js +725 -0
  80. package/dist/node_modules/@poppinss/dumper/package.json +122 -0
  81. package/dist/node_modules/@poppinss/exception/build/index.js +44 -0
  82. package/dist/node_modules/@poppinss/exception/package.json +109 -0
  83. package/dist/node_modules/@sindresorhus/is/distribution/index.js +1354 -0
  84. package/dist/node_modules/@sindresorhus/is/distribution/utilities.js +3 -0
  85. package/dist/node_modules/@sindresorhus/is/package.json +81 -0
  86. package/dist/node_modules/@speed-highlight/core/dist/index.js +4 -0
  87. package/dist/node_modules/@speed-highlight/core/dist/terminal.js +2 -0
  88. package/dist/node_modules/@speed-highlight/core/package.json +94 -0
  89. package/dist/node_modules/cookie-es/dist/index.mjs +262 -0
  90. package/dist/node_modules/cookie-es/package.json +37 -0
  91. package/dist/node_modules/croner/dist/croner.js +1 -0
  92. package/dist/node_modules/croner/package.json +73 -0
  93. package/dist/node_modules/defu/dist/defu.mjs +69 -0
  94. package/dist/node_modules/defu/package.json +43 -0
  95. package/dist/node_modules/destr/dist/index.mjs +72 -0
  96. package/dist/node_modules/destr/package.json +47 -0
  97. package/dist/node_modules/error-stack-parser-es/dist/index.mjs +38 -0
  98. package/dist/node_modules/error-stack-parser-es/dist/lite.mjs +167 -0
  99. package/dist/node_modules/error-stack-parser-es/package.json +83 -0
  100. package/dist/node_modules/get-port-please/dist/index.mjs +430 -0
  101. package/dist/node_modules/get-port-please/package.json +39 -0
  102. package/dist/node_modules/kleur/index.mjs +110 -0
  103. package/dist/node_modules/kleur/package.json +51 -0
  104. package/dist/node_modules/rendu/dist/index.mjs +380 -0
  105. package/dist/node_modules/rendu/package.json +47 -0
  106. package/dist/node_modules/scule/dist/index.mjs +80 -0
  107. package/dist/node_modules/scule/package.json +43 -0
  108. package/dist/node_modules/source-map/lib/array-set.js +100 -0
  109. package/dist/node_modules/source-map/lib/base64-vlq.js +94 -0
  110. package/dist/node_modules/source-map/lib/base64.js +19 -0
  111. package/dist/node_modules/source-map/lib/binary-search.js +113 -0
  112. package/dist/node_modules/source-map/lib/mapping-list.js +83 -0
  113. package/dist/node_modules/source-map/lib/mappings.wasm +0 -0
  114. package/dist/node_modules/source-map/lib/read-wasm.js +27 -0
  115. package/dist/node_modules/source-map/lib/source-map-consumer.js +1081 -0
  116. package/dist/node_modules/source-map/lib/source-map-generator.js +439 -0
  117. package/dist/node_modules/source-map/lib/source-node.js +430 -0
  118. package/dist/node_modules/source-map/lib/url.js +13 -0
  119. package/dist/node_modules/source-map/lib/util.js +444 -0
  120. package/dist/node_modules/source-map/lib/wasm.js +138 -0
  121. package/dist/node_modules/source-map/package.json +79 -0
  122. package/dist/node_modules/source-map/source-map.js +10 -0
  123. package/dist/node_modules/supports-color/index.js +202 -0
  124. package/dist/node_modules/supports-color/package.json +64 -0
  125. package/dist/node_modules/ufo/dist/index.mjs +645 -0
  126. package/dist/node_modules/ufo/package.json +48 -0
  127. package/dist/node_modules/unctx/dist/index.mjs +131 -0
  128. package/dist/node_modules/unctx/package.json +67 -0
  129. package/dist/node_modules/youch/build/helpers-B9BQYaS6.js +23 -0
  130. package/dist/node_modules/youch/build/index.js +212 -0
  131. package/dist/node_modules/youch/build/public/error_cause/style.css +5 -0
  132. package/dist/node_modules/youch/build/public/error_info/script.js +13 -0
  133. package/dist/node_modules/youch/build/public/error_info/style.css +145 -0
  134. package/dist/node_modules/youch/build/public/error_metadata/style.css +3 -0
  135. package/dist/node_modules/youch/build/public/error_stack/script.js +72 -0
  136. package/dist/node_modules/youch/build/public/error_stack/style.css +219 -0
  137. package/dist/node_modules/youch/build/public/error_stack_source/style.css +123 -0
  138. package/dist/node_modules/youch/build/public/header/script.js +14 -0
  139. package/dist/node_modules/youch/build/public/header/style.css +56 -0
  140. package/dist/node_modules/youch/build/public/layout/script.js +12 -0
  141. package/dist/node_modules/youch/build/public/layout/style.css +435 -0
  142. package/dist/node_modules/youch/build/public_dir-C5bujZKB.js +25 -0
  143. package/dist/node_modules/youch/build/src/templates/error_cause/main.js +44 -0
  144. package/dist/node_modules/youch/build/src/templates/error_info/main.js +72 -0
  145. package/dist/node_modules/youch/build/src/templates/error_metadata/main.js +65 -0
  146. package/dist/node_modules/youch/build/src/templates/error_stack/main.js +152 -0
  147. package/dist/node_modules/youch/build/src/templates/error_stack_source/main.js +46 -0
  148. package/dist/node_modules/youch/build/src/templates/header/main.js +24 -0
  149. package/dist/node_modules/youch/build/src/templates/layout/main.js +27 -0
  150. package/dist/node_modules/youch/package.json +135 -0
  151. package/dist/node_modules/youch-core/build/index.js +316 -0
  152. package/dist/node_modules/youch-core/package.json +124 -0
  153. package/dist/presets/_nitro/runtime/nitro-dev.mjs +20 -0
  154. package/dist/presets/_nitro/runtime/nitro-prerenderer.mjs +15 -0
  155. package/dist/presets/_nitro/runtime/service-worker.mjs +23 -0
  156. package/dist/presets/aws-amplify/runtime/aws-amplify.mjs +14 -0
  157. package/dist/presets/aws-lambda/runtime/_utils.mjs +116 -0
  158. package/dist/presets/aws-lambda/runtime/aws-lambda-streaming.mjs +31 -0
  159. package/dist/presets/aws-lambda/runtime/aws-lambda.mjs +13 -0
  160. package/dist/presets/azure/runtime/_utils.mjs +50 -0
  161. package/dist/presets/azure/runtime/azure-swa.mjs +30 -0
  162. package/dist/presets/bun/runtime/bun.mjs +40 -0
  163. package/dist/presets/cloudflare/runtime/_module-handler.mjs +87 -0
  164. package/dist/presets/cloudflare/runtime/cloudflare-durable.mjs +72 -0
  165. package/dist/presets/cloudflare/runtime/cloudflare-module.mjs +17 -0
  166. package/dist/presets/cloudflare/runtime/cloudflare-pages.mjs +39 -0
  167. package/dist/presets/cloudflare/runtime/plugin.dev.mjs +96 -0
  168. package/dist/presets/cloudflare/runtime/shims/workers.dev.mjs +27 -0
  169. package/dist/presets/deno/runtime/deno-deploy.mjs +19 -0
  170. package/dist/presets/deno/runtime/deno-server.mjs +39 -0
  171. package/dist/presets/netlify/runtime/netlify-edge.mjs +20 -0
  172. package/dist/presets/netlify/runtime/netlify.mjs +20 -0
  173. package/dist/presets/node/runtime/node-cluster.mjs +54 -0
  174. package/dist/presets/node/runtime/node-middleware.mjs +14 -0
  175. package/dist/presets/node/runtime/node-server.mjs +47 -0
  176. package/dist/presets/standard/runtime/server.mjs +4 -0
  177. package/dist/presets/stormkit/runtime/stormkit.mjs +27 -0
  178. package/dist/presets/vercel/runtime/cron-handler.mjs +25 -0
  179. package/dist/presets/vercel/runtime/isr.mjs +19 -0
  180. package/dist/presets/vercel/runtime/vercel.node.mjs +24 -0
  181. package/dist/presets/vercel/runtime/vercel.web.mjs +23 -0
  182. package/dist/presets/winterjs/runtime/winterjs.mjs +91 -0
  183. package/dist/presets/zeabur/runtime/zeabur.mjs +4 -0
  184. package/dist/presets/zephyr/runtime/server.mjs +3 -0
  185. package/dist/runtime/app.d.mts +1 -0
  186. package/dist/runtime/app.mjs +1 -0
  187. package/dist/runtime/cache.d.mts +1 -0
  188. package/dist/runtime/cache.mjs +1 -0
  189. package/dist/runtime/config.d.mts +3 -0
  190. package/dist/runtime/config.mjs +4 -0
  191. package/dist/runtime/context.d.mts +1 -0
  192. package/dist/runtime/context.mjs +1 -0
  193. package/dist/runtime/database.d.mts +1 -0
  194. package/dist/runtime/database.mjs +1 -0
  195. package/dist/runtime/internal/app.d.mts +16 -0
  196. package/dist/runtime/internal/app.mjs +208 -0
  197. package/dist/runtime/internal/cache.d.mts +7 -0
  198. package/dist/runtime/internal/cache.mjs +41 -0
  199. package/dist/runtime/internal/context.d.mts +14 -0
  200. package/dist/runtime/internal/context.mjs +24 -0
  201. package/dist/runtime/internal/database.d.mts +2 -0
  202. package/dist/runtime/internal/database.mjs +12 -0
  203. package/dist/runtime/internal/empty.mjs +0 -0
  204. package/dist/runtime/internal/error/dev.d.mts +10 -0
  205. package/dist/runtime/internal/error/dev.mjs +121 -0
  206. package/dist/runtime/internal/error/hooks.d.mts +1 -0
  207. package/dist/runtime/internal/error/hooks.mjs +9 -0
  208. package/dist/runtime/internal/error/prod.d.mts +6 -0
  209. package/dist/runtime/internal/error/prod.mjs +40 -0
  210. package/dist/runtime/internal/error/utils.d.mts +8 -0
  211. package/dist/runtime/internal/error/utils.mjs +3 -0
  212. package/dist/runtime/internal/meta.d.mts +2 -0
  213. package/dist/runtime/internal/meta.mjs +3 -0
  214. package/dist/runtime/internal/plugin.d.mts +3 -0
  215. package/dist/runtime/internal/plugin.mjs +4 -0
  216. package/dist/runtime/internal/route-rules.d.mts +9 -0
  217. package/dist/runtime/internal/route-rules.mjs +72 -0
  218. package/dist/runtime/internal/routes/dev-tasks.d.mts +3 -0
  219. package/dist/runtime/internal/routes/dev-tasks.mjs +25 -0
  220. package/dist/runtime/internal/routes/openapi.d.mts +3 -0
  221. package/dist/runtime/internal/routes/openapi.mjs +94 -0
  222. package/dist/runtime/internal/routes/renderer-template.d.mts +2 -0
  223. package/dist/runtime/internal/routes/renderer-template.dev.d.mts +3 -0
  224. package/dist/runtime/internal/routes/renderer-template.dev.mjs +19 -0
  225. package/dist/runtime/internal/routes/renderer-template.mjs +4 -0
  226. package/dist/runtime/internal/routes/scalar.d.mts +3 -0
  227. package/dist/runtime/internal/routes/scalar.mjs +193 -0
  228. package/dist/runtime/internal/routes/swagger.d.mts +3 -0
  229. package/dist/runtime/internal/routes/swagger.mjs +42 -0
  230. package/dist/runtime/internal/runtime-config.d.mts +9 -0
  231. package/dist/runtime/internal/runtime-config.mjs +54 -0
  232. package/dist/runtime/internal/static.d.mts +3 -0
  233. package/dist/runtime/internal/static.mjs +67 -0
  234. package/dist/runtime/internal/storage.d.mts +2 -0
  235. package/dist/runtime/internal/storage.mjs +6 -0
  236. package/dist/runtime/internal/task.d.mts +19 -0
  237. package/dist/runtime/internal/task.mjs +69 -0
  238. package/dist/runtime/internal/vite/dev-entry.mjs +18 -0
  239. package/dist/runtime/internal/vite/dev-worker.mjs +264 -0
  240. package/dist/runtime/internal/vite/ssr-renderer.mjs +6 -0
  241. package/dist/runtime/meta.d.mts +5 -0
  242. package/dist/runtime/meta.mjs +27 -0
  243. package/dist/runtime/nitro.d.mts +11 -0
  244. package/dist/runtime/nitro.mjs +34 -0
  245. package/dist/runtime/runtime-config.d.mts +1 -0
  246. package/dist/runtime/runtime-config.mjs +1 -0
  247. package/dist/runtime/storage.d.mts +1 -0
  248. package/dist/runtime/storage.mjs +1 -0
  249. package/dist/runtime/task.d.mts +1 -0
  250. package/dist/runtime/task.mjs +1 -0
  251. package/dist/runtime/virtual/_runtime_warn.d.mts +1 -0
  252. package/dist/runtime/virtual/_runtime_warn.mjs +5 -0
  253. package/dist/runtime/virtual/database.d.mts +8 -0
  254. package/dist/runtime/virtual/database.mjs +2 -0
  255. package/dist/runtime/virtual/error-handler.d.mts +6 -0
  256. package/dist/runtime/virtual/error-handler.mjs +9 -0
  257. package/dist/runtime/virtual/feature-flags.d.mts +7 -0
  258. package/dist/runtime/virtual/feature-flags.mjs +7 -0
  259. package/dist/runtime/virtual/plugins.d.mts +3 -0
  260. package/dist/runtime/virtual/plugins.mjs +2 -0
  261. package/dist/runtime/virtual/polyfills.d.mts +3 -0
  262. package/dist/runtime/virtual/polyfills.mjs +2 -0
  263. package/dist/runtime/virtual/public-assets.d.mts +9 -0
  264. package/dist/runtime/virtual/public-assets.mjs +8 -0
  265. package/dist/runtime/virtual/renderer-template.d.mts +4 -0
  266. package/dist/runtime/virtual/renderer-template.mjs +7 -0
  267. package/dist/runtime/virtual/routing-meta.d.mts +7 -0
  268. package/dist/runtime/virtual/routing-meta.mjs +2 -0
  269. package/dist/runtime/virtual/routing.d.mts +8 -0
  270. package/dist/runtime/virtual/routing.mjs +11 -0
  271. package/dist/runtime/virtual/runtime-config.d.mts +3 -0
  272. package/dist/runtime/virtual/runtime-config.mjs +5 -0
  273. package/dist/runtime/virtual/server-assets.d.mts +7 -0
  274. package/dist/runtime/virtual/server-assets.mjs +12 -0
  275. package/dist/runtime/virtual/storage.d.mts +3 -0
  276. package/dist/runtime/virtual/storage.mjs +5 -0
  277. package/dist/runtime/virtual/tasks.d.mts +10 -0
  278. package/dist/runtime/virtual/tasks.mjs +3 -0
  279. package/dist/runtime/vite.d.mts +8 -0
  280. package/dist/runtime/vite.mjs +9 -0
  281. package/dist/types/index.d.mts +3010 -0
  282. package/dist/types/index.mjs +1 -0
  283. package/dist/vite.d.mts +52 -0
  284. package/dist/vite.mjs +740 -0
  285. package/lib/h3.d.mts +1 -0
  286. package/lib/h3.mjs +1 -0
  287. package/lib/tsconfig.json +27 -0
  288. package/lib/vite.types.d.mts +26 -0
  289. package/lib/vite.types.mjs +2 -0
  290. package/package.json +256 -0
  291. package/skills/nitro/SKILL.md +10 -0
  292. package/skills/nitro/docs/TOC.md +83 -0
  293. package/skills/nitro/docs/_navigation.json +679 -0
  294. package/skills/nitro/docs/config/index.md +1147 -0
  295. package/skills/nitro/docs/deploy/index.md +64 -0
  296. package/skills/nitro/docs/deploy/providers/alwaysdata.md +50 -0
  297. package/skills/nitro/docs/deploy/providers/aws-amplify.md +81 -0
  298. package/skills/nitro/docs/deploy/providers/aws.md +47 -0
  299. package/skills/nitro/docs/deploy/providers/azure.md +72 -0
  300. package/skills/nitro/docs/deploy/providers/cleavr.md +33 -0
  301. package/skills/nitro/docs/deploy/providers/cloudflare.md +375 -0
  302. package/skills/nitro/docs/deploy/providers/deno-deploy.md +66 -0
  303. package/skills/nitro/docs/deploy/providers/digitalocean.md +46 -0
  304. package/skills/nitro/docs/deploy/providers/firebase.md +32 -0
  305. package/skills/nitro/docs/deploy/providers/flightcontrol.md +67 -0
  306. package/skills/nitro/docs/deploy/providers/genezio.md +67 -0
  307. package/skills/nitro/docs/deploy/providers/github-pages.md +68 -0
  308. package/skills/nitro/docs/deploy/providers/gitlab-pages.md +37 -0
  309. package/skills/nitro/docs/deploy/providers/heroku.md +84 -0
  310. package/skills/nitro/docs/deploy/providers/iis.md +38 -0
  311. package/skills/nitro/docs/deploy/providers/koyeb.md +109 -0
  312. package/skills/nitro/docs/deploy/providers/netlify.md +47 -0
  313. package/skills/nitro/docs/deploy/providers/platform-sh.md +37 -0
  314. package/skills/nitro/docs/deploy/providers/render.md +37 -0
  315. package/skills/nitro/docs/deploy/providers/stormkit.md +24 -0
  316. package/skills/nitro/docs/deploy/providers/vercel.md +179 -0
  317. package/skills/nitro/docs/deploy/providers/zeabur.md +19 -0
  318. package/skills/nitro/docs/deploy/providers/zephyr.md +99 -0
  319. package/skills/nitro/docs/deploy/providers/zerops.md +102 -0
  320. package/skills/nitro/docs/deploy/runtimes/bun.md +15 -0
  321. package/skills/nitro/docs/deploy/runtimes/deno.md +19 -0
  322. package/skills/nitro/docs/deploy/runtimes/node.md +63 -0
  323. package/skills/nitro/docs/docs/assets.md +166 -0
  324. package/skills/nitro/docs/docs/cache.md +408 -0
  325. package/skills/nitro/docs/docs/configuration.md +256 -0
  326. package/skills/nitro/docs/docs/database.md +185 -0
  327. package/skills/nitro/docs/docs/index.md +56 -0
  328. package/skills/nitro/docs/docs/lifecycle.md +204 -0
  329. package/skills/nitro/docs/docs/migration.md +215 -0
  330. package/skills/nitro/docs/docs/nightly.md +31 -0
  331. package/skills/nitro/docs/docs/plugins.md +164 -0
  332. package/skills/nitro/docs/docs/quick-start.md +110 -0
  333. package/skills/nitro/docs/docs/renderer.md +322 -0
  334. package/skills/nitro/docs/docs/routing.md +711 -0
  335. package/skills/nitro/docs/docs/server-entry.md +239 -0
  336. package/skills/nitro/docs/docs/storage.md +261 -0
  337. package/skills/nitro/docs/docs/tasks.md +277 -0
  338. package/skills/nitro/docs/examples/api-routes.md +145 -0
  339. package/skills/nitro/docs/examples/auto-imports.md +93 -0
  340. package/skills/nitro/docs/examples/cached-handler.md +81 -0
  341. package/skills/nitro/docs/examples/custom-error-handler.md +98 -0
  342. package/skills/nitro/docs/examples/database.md +157 -0
  343. package/skills/nitro/docs/examples/elysia.md +70 -0
  344. package/skills/nitro/docs/examples/express.md +78 -0
  345. package/skills/nitro/docs/examples/fastify.md +79 -0
  346. package/skills/nitro/docs/examples/hello-world.md +68 -0
  347. package/skills/nitro/docs/examples/hono.md +74 -0
  348. package/skills/nitro/docs/examples/import-alias.md +100 -0
  349. package/skills/nitro/docs/examples/index.md +3 -0
  350. package/skills/nitro/docs/examples/middleware.md +91 -0
  351. package/skills/nitro/docs/examples/mono-jsx.md +68 -0
  352. package/skills/nitro/docs/examples/nano-jsx.md +70 -0
  353. package/skills/nitro/docs/examples/plugins.md +91 -0
  354. package/skills/nitro/docs/examples/renderer.md +113 -0
  355. package/skills/nitro/docs/examples/runtime-config.md +97 -0
  356. package/skills/nitro/docs/examples/server-fetch.md +87 -0
  357. package/skills/nitro/docs/examples/shiki.md +198 -0
  358. package/skills/nitro/docs/examples/virtual-routes.md +74 -0
  359. package/skills/nitro/docs/examples/vite-nitro-plugin.md +79 -0
  360. package/skills/nitro/docs/examples/vite-rsc.md +1041 -0
  361. package/skills/nitro/docs/examples/vite-ssr-html.md +217 -0
  362. package/skills/nitro/docs/examples/vite-ssr-preact.md +247 -0
  363. package/skills/nitro/docs/examples/vite-ssr-react.md +226 -0
  364. package/skills/nitro/docs/examples/vite-ssr-solid.md +256 -0
  365. package/skills/nitro/docs/examples/vite-ssr-tsr-react.md +442 -0
  366. package/skills/nitro/docs/examples/vite-ssr-tss-react.md +444 -0
  367. package/skills/nitro/docs/examples/vite-ssr-vue-router.md +616 -0
  368. package/skills/nitro/docs/examples/vite-trpc.md +335 -0
  369. package/skills/nitro/docs/examples/websocket.md +282 -0
  370. package/skills/nitro/docs/index.md +121 -0
@@ -0,0 +1,1159 @@
1
+ import { i as loadConfig, s as watchConfig } from "../_libs/c12+rc9.mjs";
2
+ import { A as src_default, F as prettyPath, H as v, I as resolveNitroPath, K as findWorkspaceDir, L as writeFile$1, O as scanUnprefixedPublicAssets, ct as join, dt as resolve, j as build, k as compressPublicAssets, nt as resolveModulePath, p as runParallel, rt as resolveModuleURL, ut as relative, z as _ } from "../_build/common.mjs";
3
+ import { n as resolveCompatibilityDates, r as resolveCompatibilityDatesFromEnv } from "../_libs/compatx.mjs";
4
+ import { t as klona } from "../_libs/klona.mjs";
5
+ import { t as escapeStringRegexp } from "../_libs/escape-string-regexp.mjs";
6
+ import { n as parse, t as TSConfckCache } from "../_libs/tsconfck.mjs";
7
+ import { n as scanHandlers, t as scanAndSyncOptions } from "./nitro2.mjs";
8
+ import { a as findRoute, i as findAllRoutes, n as addRoute, r as createRouter, t as compileRouterToString } from "../_libs/rou3.mjs";
9
+ import { n as z, t as P } from "../_libs/ultrahtml.mjs";
10
+ import { createRequire } from "node:module";
11
+ import consola, { consola as consola$1 } from "consola";
12
+ import { Hookable, createDebugger } from "hookable";
13
+ import { existsSync, readFileSync } from "node:fs";
14
+ import { readFile } from "node:fs/promises";
15
+ import { pathToFileURL } from "node:url";
16
+ import { defu } from "defu";
17
+ import { runtimeDir, version } from "nitro/meta";
18
+ import { joinURL, parseURL, withBase, withLeadingSlash, withQuery, withTrailingSlash, withoutBase, withoutTrailingSlash } from "ufo";
19
+ import { colors } from "consola/utils";
20
+ import { hash } from "ohash";
21
+ import { toRequest } from "h3";
22
+ import http from "node:http";
23
+ //#region src/config/defaults.ts
24
+ const NitroDefaults = {
25
+ compatibilityDate: "latest",
26
+ debug: _,
27
+ logLevel: v ? 1 : 3,
28
+ runtimeConfig: {
29
+ app: {},
30
+ nitro: {}
31
+ },
32
+ serverDir: false,
33
+ scanDirs: [],
34
+ buildDir: `node_modules/.nitro`,
35
+ output: {
36
+ dir: "{{ rootDir }}/.output",
37
+ serverDir: "{{ output.dir }}/server",
38
+ publicDir: "{{ output.dir }}/public"
39
+ },
40
+ features: {},
41
+ experimental: {},
42
+ future: {},
43
+ storage: {},
44
+ devStorage: {},
45
+ publicAssets: [],
46
+ serverAssets: [],
47
+ plugins: [],
48
+ tasks: {},
49
+ scheduledTasks: {},
50
+ imports: false,
51
+ virtual: {},
52
+ compressPublicAssets: false,
53
+ ignore: [],
54
+ wasm: {},
55
+ dev: false,
56
+ devServer: { watch: [] },
57
+ watchOptions: { ignoreInitial: true },
58
+ devProxy: {},
59
+ logging: {
60
+ compressedSizes: true,
61
+ buildSuccess: true
62
+ },
63
+ baseURL: process.env.NITRO_APP_BASE_URL || "/",
64
+ handlers: [],
65
+ devHandlers: [],
66
+ errorHandler: void 0,
67
+ routes: {},
68
+ routeRules: {},
69
+ prerender: {
70
+ autoSubfolderIndex: true,
71
+ concurrency: 1,
72
+ interval: 0,
73
+ retry: 3,
74
+ retryDelay: 500,
75
+ failOnError: false,
76
+ crawlLinks: false,
77
+ ignore: [],
78
+ routes: []
79
+ },
80
+ builder: void 0,
81
+ moduleSideEffects: ["unenv/polyfill/"],
82
+ replace: {},
83
+ node: true,
84
+ sourcemap: false,
85
+ traceDeps: [],
86
+ typescript: {
87
+ strict: true,
88
+ generateRuntimeConfigTypes: false,
89
+ generateTsConfig: false,
90
+ tsconfigPath: "tsconfig.json",
91
+ tsConfig: void 0
92
+ },
93
+ hooks: {},
94
+ commands: {},
95
+ framework: {
96
+ name: "nitro",
97
+ version
98
+ }
99
+ };
100
+ //#endregion
101
+ //#region src/config/resolvers/assets.ts
102
+ async function resolveAssetsOptions(options) {
103
+ for (const publicAsset of options.publicAssets) {
104
+ publicAsset.dir = resolve(options.rootDir, publicAsset.dir);
105
+ publicAsset.baseURL = withLeadingSlash(withoutTrailingSlash(publicAsset.baseURL || "/"));
106
+ }
107
+ for (const dir of [options.rootDir, ...options.scanDirs]) {
108
+ const publicDir = resolve(dir, "public");
109
+ if (!existsSync(publicDir)) continue;
110
+ if (options.publicAssets.some((asset) => asset.dir === publicDir)) continue;
111
+ options.publicAssets.push({ dir: publicDir });
112
+ }
113
+ for (const serverAsset of options.serverAssets) serverAsset.dir = resolve(options.rootDir, serverAsset.dir);
114
+ options.serverAssets.push({
115
+ baseName: "server",
116
+ dir: resolve(options.rootDir, "assets")
117
+ });
118
+ for (const asset of options.publicAssets) {
119
+ asset.baseURL = asset.baseURL || "/";
120
+ const isTopLevel = asset.baseURL === "/";
121
+ asset.fallthrough = asset.fallthrough ?? isTopLevel;
122
+ const routeRule = options.routeRules[asset.baseURL + "/**"];
123
+ asset.maxAge = (routeRule?.cache)?.maxAge ?? asset.maxAge ?? 0;
124
+ if (asset.maxAge && !asset.fallthrough) options.routeRules[asset.baseURL + "/**"] = defu(routeRule, { headers: { "cache-control": `public, max-age=${asset.maxAge}, immutable` } });
125
+ }
126
+ }
127
+ //#endregion
128
+ //#region src/config/resolvers/compatibility.ts
129
+ async function resolveCompatibilityOptions(options) {
130
+ options.compatibilityDate = resolveCompatibilityDatesFromEnv(options.compatibilityDate);
131
+ }
132
+ //#endregion
133
+ //#region src/config/resolvers/database.ts
134
+ async function resolveDatabaseOptions(options) {
135
+ if (options.experimental.database && options.imports) {
136
+ options.imports.presets ??= [];
137
+ options.imports.presets.push({
138
+ from: "nitro/database",
139
+ imports: ["useDatabase"]
140
+ });
141
+ if (options.dev && !options.database && !options.devDatabase) options.devDatabase = { default: {
142
+ connector: "sqlite",
143
+ options: { cwd: options.rootDir }
144
+ } };
145
+ else if (options.node && !options.database) options.database = { default: {
146
+ connector: "sqlite",
147
+ options: {}
148
+ } };
149
+ }
150
+ }
151
+ //#endregion
152
+ //#region src/config/resolvers/export-conditions.ts
153
+ async function resolveExportConditionsOptions(options) {
154
+ options.exportConditions = _resolveExportConditions(options.exportConditions || [], {
155
+ dev: options.dev,
156
+ node: options.node,
157
+ wasm: options.wasm !== false
158
+ });
159
+ }
160
+ function _resolveExportConditions(userConditions, opts) {
161
+ const conditions = [...userConditions.filter((c) => !c.startsWith("!"))];
162
+ conditions.push(opts.dev ? "development" : "production");
163
+ if (opts.wasm) conditions.push("wasm", "unwasm");
164
+ if (opts.node) conditions.push("node");
165
+ const negated = new Set(userConditions.filter((c) => c.startsWith("!")).map((c) => c.slice(1)));
166
+ return [...new Set(conditions)].filter((c) => !negated.has(c));
167
+ }
168
+ //#endregion
169
+ //#region src/config/resolvers/imports.ts
170
+ async function resolveImportsOptions(options) {
171
+ if (options.imports === false) return;
172
+ options.imports.presets ??= [];
173
+ options.imports.dirs ??= [];
174
+ options.imports.dirs.push(...options.scanDirs.map((dir) => join(dir, "utils/**/*")));
175
+ if (Array.isArray(options.imports.exclude) && options.imports.exclude.length === 0) {
176
+ options.imports.exclude.push(/[/\\]\.git[/\\]/);
177
+ options.imports.exclude.push(options.buildDir);
178
+ const scanDirsInNodeModules = options.scanDirs.map((dir) => dir.match(/(?<=\/)node_modules\/(.+)$/)?.[1]).filter(Boolean);
179
+ options.imports.exclude.push(scanDirsInNodeModules.length > 0 ? new RegExp(`node_modules\\/(?!${scanDirsInNodeModules.map((dir) => escapeStringRegexp(dir)).join("|")})`) : /[/\\]node_modules[/\\]/);
180
+ }
181
+ }
182
+ //#endregion
183
+ //#region src/config/resolvers/open-api.ts
184
+ async function resolveOpenAPIOptions(options) {
185
+ if (!options.experimental.openAPI) return;
186
+ if (!options.dev && !options.openAPI?.production) return;
187
+ const shouldPrerender = !options.dev && options.openAPI?.production === "prerender";
188
+ const handlersEnv = shouldPrerender ? "prerender" : "";
189
+ const prerenderRoutes = [];
190
+ const jsonRoute = options.openAPI?.route || "/_openapi.json";
191
+ prerenderRoutes.push(jsonRoute);
192
+ options.handlers.push({
193
+ route: jsonRoute,
194
+ env: handlersEnv,
195
+ handler: join(runtimeDir, "internal/routes/openapi")
196
+ });
197
+ if (options.openAPI?.ui?.scalar !== false) {
198
+ const scalarRoute = options.openAPI?.ui?.scalar?.route || "/_scalar";
199
+ prerenderRoutes.push(scalarRoute);
200
+ options.handlers.push({
201
+ route: options.openAPI?.ui?.scalar?.route || "/_scalar",
202
+ env: handlersEnv,
203
+ handler: join(runtimeDir, "internal/routes/scalar")
204
+ });
205
+ }
206
+ if (options.openAPI?.ui?.swagger !== false) {
207
+ const swaggerRoute = options.openAPI?.ui?.swagger?.route || "/_swagger";
208
+ prerenderRoutes.push(swaggerRoute);
209
+ options.handlers.push({
210
+ route: swaggerRoute,
211
+ env: handlersEnv,
212
+ handler: join(runtimeDir, "internal/routes/swagger")
213
+ });
214
+ }
215
+ if (shouldPrerender) {
216
+ options.prerender ??= {};
217
+ options.prerender.routes ??= [];
218
+ options.prerender.routes.push(...prerenderRoutes);
219
+ }
220
+ }
221
+ //#endregion
222
+ //#region src/config/resolvers/tsconfig.ts
223
+ async function resolveTsconfig(options) {
224
+ const root = resolve(options.rootDir || ".") + "/";
225
+ if (!options.typescript.tsConfig) options.typescript.tsConfig = await loadTsconfig(root);
226
+ if (options.experimental.tsconfigPaths && options.typescript.tsConfig.compilerOptions?.paths) options.alias = {
227
+ ...tsConfigToAliasObj(options.typescript.tsConfig, root),
228
+ ...options.alias
229
+ };
230
+ }
231
+ async function loadTsconfig(root) {
232
+ const opts = {
233
+ root,
234
+ cache: loadTsconfig["__cache"] ??= new TSConfckCache(),
235
+ ignoreNodeModules: true
236
+ };
237
+ const parsed = await parse(join(root, "tsconfig.json"), opts).catch(() => void 0);
238
+ if (!parsed) return {};
239
+ const { tsconfig, tsconfigFile } = parsed;
240
+ tsconfig.compilerOptions ??= {};
241
+ if (!tsconfig.compilerOptions.baseUrl) tsconfig.compilerOptions.baseUrl = resolve(tsconfigFile, "..");
242
+ return tsconfig;
243
+ }
244
+ function tsConfigToAliasObj(tsconfig, root) {
245
+ const compilerOptions = tsconfig?.compilerOptions;
246
+ if (!compilerOptions?.paths) return {};
247
+ const paths = compilerOptions.paths;
248
+ const alias = {};
249
+ for (const [key, targets] of Object.entries(paths)) {
250
+ let source = key;
251
+ let target = targets?.[0];
252
+ if (!target) continue;
253
+ if (source.includes("*") || target.includes("*")) {
254
+ source = source.replace(/\/\*$/, "");
255
+ target = target.replace(/\/\*$/, "");
256
+ if (source.includes("*") || target.includes("*")) continue;
257
+ }
258
+ if (target.startsWith(".")) {
259
+ if (!compilerOptions.baseUrl) continue;
260
+ target = resolve(root, compilerOptions.baseUrl, target) + (key.endsWith("*") ? "/" : "");
261
+ }
262
+ alias[source] = target;
263
+ }
264
+ return alias;
265
+ }
266
+ //#endregion
267
+ //#region src/config/resolvers/paths.ts
268
+ const RESOLVE_EXTENSIONS = [
269
+ ".ts",
270
+ ".js",
271
+ ".mts",
272
+ ".mjs",
273
+ ".tsx",
274
+ ".jsx"
275
+ ];
276
+ async function resolvePathOptions(options) {
277
+ options.rootDir = resolve(options.rootDir || ".") + "/";
278
+ options.buildDir = resolve(options.rootDir, options.buildDir || ".") + "/";
279
+ options.workspaceDir ||= await findWorkspaceDir(options.rootDir).catch(() => options.rootDir) + "/";
280
+ if (options.srcDir) {
281
+ if (options.serverDir === void 0) options.serverDir = options.srcDir;
282
+ consola.warn(`"srcDir" option is deprecated. Please use "serverDir" instead.`);
283
+ }
284
+ if (options.serverDir !== false) {
285
+ if (options.serverDir === true) options.serverDir = "server";
286
+ options.serverDir = resolve(options.rootDir, options.serverDir || ".") + "/";
287
+ }
288
+ options.alias ??= {};
289
+ if (!options.static && !options.entry) throw new Error(`Nitro entry is missing! Is "${options.preset}" preset correct?`);
290
+ if (options.entry) options.entry = resolveNitroPath(options.entry, options);
291
+ options.output.dir = resolveNitroPath(options.output.dir || NitroDefaults.output.dir, options, options.rootDir) + "/";
292
+ options.output.publicDir = resolveNitroPath(options.output.publicDir || NitroDefaults.output.publicDir, options, options.rootDir) + "/";
293
+ options.output.serverDir = resolveNitroPath(options.output.serverDir || NitroDefaults.output.serverDir, options, options.rootDir) + "/";
294
+ options.plugins = options.plugins.map((p) => resolveNitroPath(p, options));
295
+ if (options.serverDir) options.scanDirs.unshift(options.serverDir);
296
+ options.scanDirs = options.scanDirs.map((dir) => resolve(options.rootDir, dir));
297
+ options.scanDirs = [...new Set(options.scanDirs.map((dir) => dir + "/"))];
298
+ options.handlers = options.handlers.map((h) => {
299
+ return {
300
+ ...h,
301
+ handler: resolveNitroPath(h.handler, options)
302
+ };
303
+ });
304
+ options.routes = Object.fromEntries(Object.entries(options.routes).map(([route, h]) => {
305
+ if (typeof h === "string") h = { handler: h };
306
+ h.handler = resolveNitroPath(h.handler, options);
307
+ return [route, h];
308
+ }));
309
+ if (options.serverEntry !== false) {
310
+ if (typeof options?.serverEntry === "string") options.serverEntry = { handler: options.serverEntry };
311
+ if (options.serverEntry?.handler) options.serverEntry.handler = resolveNitroPath(options.serverEntry.handler, options);
312
+ else {
313
+ const detected = resolveModulePath("./server", {
314
+ try: true,
315
+ from: options.rootDir,
316
+ extensions: RESOLVE_EXTENSIONS.flatMap((ext) => [ext, `.node${ext}`])
317
+ });
318
+ if (detected) {
319
+ options.serverEntry ??= { handler: "" };
320
+ options.serverEntry.handler = detected;
321
+ consola.info(`Detected \`${prettyPath(detected)}\` as server entry.`);
322
+ }
323
+ }
324
+ if (options.serverEntry?.handler && !options.serverEntry?.format) {
325
+ const isNode = /\.(node)\.\w+$/.test(options.serverEntry.handler);
326
+ options.serverEntry.format = isNode ? "node" : "web";
327
+ }
328
+ }
329
+ if (options.renderer === false) options.renderer = void 0;
330
+ else {
331
+ if (options.renderer?.handler) options.renderer.handler = resolveModulePath(resolveNitroPath(options.renderer?.handler, options), {
332
+ from: [options.rootDir, ...options.scanDirs],
333
+ extensions: RESOLVE_EXTENSIONS
334
+ });
335
+ if (options.renderer?.template) options.renderer.template = resolveModulePath(resolveNitroPath(options.renderer?.template, options), {
336
+ from: [options.rootDir, ...options.scanDirs],
337
+ extensions: [".html"]
338
+ });
339
+ else if (!options.renderer?.handler) {
340
+ const defaultIndex = resolveModulePath("./index.html", {
341
+ from: [options.rootDir, ...options.scanDirs],
342
+ extensions: [".html"],
343
+ try: true
344
+ });
345
+ if (defaultIndex) {
346
+ options.renderer ??= {};
347
+ options.renderer.template = defaultIndex;
348
+ consola.info(`Using \`${prettyPath(defaultIndex)}\` as renderer template.`);
349
+ }
350
+ }
351
+ if (options.renderer?.template && !options.renderer?.handler) {
352
+ options.renderer ??= {};
353
+ options.renderer.handler = join(runtimeDir, "internal/routes/renderer-template" + (options.dev ? ".dev" : ""));
354
+ }
355
+ }
356
+ }
357
+ //#endregion
358
+ //#region src/config/resolvers/route-rules.ts
359
+ async function resolveRouteRulesOptions(options) {
360
+ options.routeRules = normalizeRouteRules(options);
361
+ }
362
+ function normalizeRouteRules(config) {
363
+ const normalizedRules = {};
364
+ for (let path in config.routeRules) {
365
+ const routeConfig = config.routeRules[path];
366
+ path = withLeadingSlash(path);
367
+ const routeRules = {
368
+ ...routeConfig,
369
+ redirect: void 0,
370
+ proxy: void 0
371
+ };
372
+ if (routeConfig.redirect) {
373
+ routeRules.redirect = {
374
+ to: "/",
375
+ status: 307,
376
+ ...typeof routeConfig.redirect === "string" ? { to: routeConfig.redirect } : routeConfig.redirect
377
+ };
378
+ if (path.endsWith("/**")) routeRules.redirect._redirectStripBase = path.slice(0, -3);
379
+ }
380
+ if (routeConfig.proxy) {
381
+ routeRules.proxy = typeof routeConfig.proxy === "string" ? { to: routeConfig.proxy } : routeConfig.proxy;
382
+ if (path.endsWith("/**")) routeRules.proxy._proxyStripBase = path.slice(0, -3);
383
+ }
384
+ if (routeConfig.cors) routeRules.headers = {
385
+ "access-control-allow-origin": "*",
386
+ "access-control-allow-methods": "*",
387
+ "access-control-allow-headers": "*",
388
+ "access-control-max-age": "0",
389
+ ...routeRules.headers
390
+ };
391
+ if (routeConfig.swr) {
392
+ routeRules.cache = routeRules.cache || {};
393
+ routeRules.cache.swr = true;
394
+ if (typeof routeConfig.swr === "number") routeRules.cache.maxAge = routeConfig.swr;
395
+ }
396
+ if (routeConfig.cache === false) routeRules.cache = false;
397
+ normalizedRules[path] = routeRules;
398
+ }
399
+ return normalizedRules;
400
+ }
401
+ //#endregion
402
+ //#region src/config/resolvers/runtime-config.ts
403
+ async function resolveRuntimeConfigOptions(options) {
404
+ options.runtimeConfig = normalizeRuntimeConfig(options);
405
+ }
406
+ function normalizeRuntimeConfig(config) {
407
+ provideFallbackValues(config.runtimeConfig || {});
408
+ const runtimeConfig = defu(config.runtimeConfig, {
409
+ app: { baseURL: config.baseURL },
410
+ nitro: {
411
+ envExpansion: config.experimental?.envExpansion,
412
+ openAPI: config.openAPI
413
+ }
414
+ });
415
+ runtimeConfig.nitro ??= {};
416
+ runtimeConfig.nitro.routeRules = config.routeRules;
417
+ checkSerializableRuntimeConfig(runtimeConfig);
418
+ return runtimeConfig;
419
+ }
420
+ function provideFallbackValues(obj) {
421
+ for (const key in obj) if (obj[key] === void 0 || obj[key] === null) obj[key] = "";
422
+ else if (typeof obj[key] === "object") provideFallbackValues(obj[key]);
423
+ }
424
+ function checkSerializableRuntimeConfig(obj, path = []) {
425
+ if (isPrimitiveValue(obj)) return;
426
+ for (const key in obj) {
427
+ const value = obj[key];
428
+ if (value === null || value === void 0 || isPrimitiveValue(value)) continue;
429
+ if (Array.isArray(value)) for (const [index, item] of value.entries()) checkSerializableRuntimeConfig(item, [...path, `${key}[${index}]`]);
430
+ else if (typeof value === "object" && value.constructor === Object && (!value.constructor?.name || value.constructor.name === "Object")) checkSerializableRuntimeConfig(value, [...path, key]);
431
+ else console.warn(`Runtime config option \`${[...path, key].join(".")}\` may not be able to be serialized.`);
432
+ }
433
+ }
434
+ function isPrimitiveValue(value) {
435
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean";
436
+ }
437
+ //#endregion
438
+ //#region src/config/resolvers/storage.ts
439
+ async function resolveStorageOptions(options) {}
440
+ //#endregion
441
+ //#region src/config/resolvers/url.ts
442
+ async function resolveURLOptions(options) {
443
+ options.baseURL = withLeadingSlash(withTrailingSlash(options.baseURL));
444
+ }
445
+ //#endregion
446
+ //#region src/config/resolvers/error.ts
447
+ async function resolveErrorOptions(options) {
448
+ if (!options.errorHandler) options.errorHandler = [];
449
+ else if (!Array.isArray(options.errorHandler)) options.errorHandler = [options.errorHandler];
450
+ options.errorHandler = options.errorHandler.map((h) => resolveNitroPath(h, options));
451
+ options.errorHandler.push(join(runtimeDir, `internal/error/${options.dev ? "dev" : "prod"}`));
452
+ }
453
+ //#endregion
454
+ //#region src/config/resolvers/unenv.ts
455
+ const common = {
456
+ meta: {
457
+ name: "nitro-common",
458
+ url: import.meta.url
459
+ },
460
+ alias: {
461
+ "buffer/": "node:buffer",
462
+ "buffer/index": "node:buffer",
463
+ "buffer/index.js": "node:buffer",
464
+ "string_decoder/": "node:string_decoder",
465
+ "process/": "node:process"
466
+ }
467
+ };
468
+ const nodeless = {
469
+ meta: {
470
+ name: "nitro-nodeless",
471
+ url: import.meta.url
472
+ },
473
+ inject: {
474
+ global: "unenv/polyfill/globalthis",
475
+ process: "node:process",
476
+ Buffer: ["node:buffer", "Buffer"],
477
+ clearImmediate: ["node:timers", "clearImmediate"],
478
+ setImmediate: ["node:timers", "setImmediate"],
479
+ performance: "unenv/polyfill/performance",
480
+ PerformanceObserver: ["node:perf_hooks", "PerformanceObserver"],
481
+ BroadcastChannel: ["node:worker_threads", "BroadcastChannel"]
482
+ },
483
+ polyfill: [
484
+ "unenv/polyfill/globalthis-global",
485
+ "unenv/polyfill/process",
486
+ "unenv/polyfill/buffer",
487
+ "unenv/polyfill/timers"
488
+ ]
489
+ };
490
+ async function resolveUnenv(options) {
491
+ options.unenv ??= [];
492
+ if (!Array.isArray(options.unenv)) options.unenv = [options.unenv];
493
+ options.unenv = options.unenv.filter(Boolean);
494
+ if (!options.node) options.unenv.unshift(nodeless);
495
+ options.unenv.unshift(common);
496
+ }
497
+ //#endregion
498
+ //#region src/config/resolvers/builder.ts
499
+ const VALID_BUILDERS = [
500
+ "rolldown",
501
+ "rollup",
502
+ "vite"
503
+ ];
504
+ async function resolveBuilder(options) {
505
+ options.builder ??= process.env.NITRO_BUILDER;
506
+ if (options.builder) {
507
+ if (!VALID_BUILDERS.includes(options.builder)) throw new Error(`Invalid nitro builder "${options.builder}". Valid builders are: ${VALID_BUILDERS.join(", ")}.`);
508
+ const pkg = options.builder;
509
+ if (pkg !== "rolldown" && !isPkgInstalled(pkg, options.rootDir)) {
510
+ if (!await consola.prompt(`Nitro builder package \`${pkg}\` is not installed. Would you like to install it?`, {
511
+ type: "confirm",
512
+ default: true,
513
+ cancel: "null"
514
+ })) throw new Error(`Nitro builder package "${options.builder}" is not installed. Please install it in your project dependencies.`);
515
+ await installPkg(pkg, options.rootDir);
516
+ }
517
+ return;
518
+ }
519
+ if (isPkgInstalled("vite", options.rootDir) && hasNitroViteConfig(options)) {
520
+ options.builder = "vite";
521
+ return;
522
+ }
523
+ options.builder = "rolldown";
524
+ }
525
+ const _require = createRequire(import.meta.url);
526
+ function isPkgInstalled(pkg, root) {
527
+ try {
528
+ _require.resolve(pkg, { paths: [root] });
529
+ return true;
530
+ } catch {
531
+ return false;
532
+ }
533
+ }
534
+ async function installPkg(pkg, root) {
535
+ const { addDevDependency } = await import("../_libs/_5.mjs");
536
+ return addDevDependency(pkg, { cwd: root });
537
+ }
538
+ function hasNitroViteConfig(options) {
539
+ for (const ext of [
540
+ ".ts",
541
+ ".mts",
542
+ ".js",
543
+ ".mjs"
544
+ ]) {
545
+ const configPath = resolve(options.rootDir, `vite.config${ext}`);
546
+ if (existsSync(configPath)) try {
547
+ if (readFileSync(configPath, "utf8").includes("nitro(")) return true;
548
+ } catch {}
549
+ }
550
+ return false;
551
+ }
552
+ //#endregion
553
+ //#region src/config/loader.ts
554
+ const configResolvers = [
555
+ resolveCompatibilityOptions,
556
+ resolveTsconfig,
557
+ resolvePathOptions,
558
+ resolveImportsOptions,
559
+ resolveRouteRulesOptions,
560
+ resolveDatabaseOptions,
561
+ resolveExportConditionsOptions,
562
+ resolveRuntimeConfigOptions,
563
+ resolveOpenAPIOptions,
564
+ resolveURLOptions,
565
+ resolveAssetsOptions,
566
+ resolveStorageOptions,
567
+ resolveErrorOptions,
568
+ resolveUnenv,
569
+ resolveBuilder
570
+ ];
571
+ async function loadOptions(configOverrides = {}, opts = {}) {
572
+ const options = await _loadUserConfig(configOverrides, opts);
573
+ for (const resolver of configResolvers) await resolver(options);
574
+ return options;
575
+ }
576
+ async function _loadUserConfig(configOverrides = {}, opts = {}) {
577
+ configOverrides = klona(configOverrides);
578
+ globalThis.defineNitroConfig = globalThis.defineNitroConfig || ((c) => c);
579
+ let compatibilityDate = configOverrides.compatibilityDate || opts.compatibilityDate || process.env.NITRO_COMPATIBILITY_DATE || process.env.SERVER_COMPATIBILITY_DATE || process.env.COMPATIBILITY_DATE;
580
+ const { resolvePreset } = await import("../_presets.mjs");
581
+ let preset = configOverrides.preset || process.env.NITRO_PRESET || process.env.SERVER_PRESET;
582
+ const _dotenv = opts.dotenv ?? (configOverrides.dev && { fileName: [".env", ".env.local"] });
583
+ const envName = opts.c12?.envName ?? (configOverrides.dev ? "development" : "production");
584
+ const loadedConfig = await (opts.watch ? watchConfig : loadConfig)({
585
+ name: "nitro",
586
+ cwd: configOverrides.rootDir,
587
+ dotenv: _dotenv,
588
+ envName,
589
+ extend: { extendKey: ["extends", "preset"] },
590
+ defaults: NitroDefaults,
591
+ async overrides({ rawConfigs }) {
592
+ const getConf = (key) => configOverrides[key] ?? rawConfigs.main?.[key] ?? rawConfigs.rc?.[key] ?? rawConfigs.packageJson?.[key];
593
+ if (!compatibilityDate) compatibilityDate = getConf("compatibilityDate");
594
+ const framework = getConf("framework");
595
+ const isCustomFramework = framework?.name && framework.name !== "nitro";
596
+ if (!preset) preset = getConf("preset");
597
+ if (configOverrides.dev) preset = preset && preset !== "nitro-dev" ? await resolvePreset(preset, {
598
+ static: getConf("static"),
599
+ dev: true,
600
+ compatibilityDate: compatibilityDate || "latest"
601
+ }).then((p) => p?._meta?.name || "nitro-dev").catch(() => "nitro-dev") : "nitro-dev";
602
+ else if (!preset) preset = await resolvePreset("", {
603
+ static: getConf("static"),
604
+ dev: false,
605
+ compatibilityDate: compatibilityDate || "latest"
606
+ }).then((p) => p?._meta?.name);
607
+ return {
608
+ ...configOverrides,
609
+ preset,
610
+ typescript: {
611
+ generateRuntimeConfigTypes: !isCustomFramework,
612
+ ...getConf("typescript"),
613
+ ...configOverrides.typescript
614
+ }
615
+ };
616
+ },
617
+ async resolve(id) {
618
+ const preset = await resolvePreset(id, {
619
+ static: configOverrides.static,
620
+ compatibilityDate: compatibilityDate || "latest",
621
+ dev: configOverrides.dev
622
+ });
623
+ if (preset) return { config: klona(preset) };
624
+ },
625
+ ...opts.c12
626
+ });
627
+ const options = klona(loadedConfig.config);
628
+ options._config = configOverrides;
629
+ options._c12 = loadedConfig;
630
+ options.preset = (loadedConfig.layers || []).find((l) => l.config?._meta?.name)?.config?._meta?.name || preset;
631
+ options.compatibilityDate = resolveCompatibilityDates(compatibilityDate, options.compatibilityDate);
632
+ if (options.dev && options.preset !== "nitro-dev") consola.info(`Using \`${options.preset}\` emulation in development mode.`);
633
+ return options;
634
+ }
635
+ //#endregion
636
+ //#region src/config/update.ts
637
+ async function updateNitroConfig(nitro, config) {
638
+ nitro.options.routeRules = normalizeRouteRules(config.routeRules ? config : nitro.options);
639
+ nitro.options.runtimeConfig = normalizeRuntimeConfig(config.runtimeConfig ? config : nitro.options);
640
+ await nitro.hooks.callHook("rollup:reload");
641
+ consola.success("Nitro config hot reloaded!");
642
+ }
643
+ //#endregion
644
+ //#region src/module.ts
645
+ async function installModules(nitro) {
646
+ const _modules = [...nitro.options.modules || []];
647
+ const modules = await Promise.all(_modules.map((mod) => _resolveNitroModule(mod, nitro.options)));
648
+ const _installedURLs = /* @__PURE__ */ new Set();
649
+ for (const mod of modules) {
650
+ if (mod._url) {
651
+ if (_installedURLs.has(mod._url)) continue;
652
+ _installedURLs.add(mod._url);
653
+ }
654
+ await mod.setup(nitro);
655
+ }
656
+ }
657
+ async function _resolveNitroModule(mod, nitroOptions) {
658
+ let _url;
659
+ if (typeof mod === "string") {
660
+ _url = resolveModuleURL(mod, {
661
+ from: [nitroOptions.rootDir],
662
+ extensions: [
663
+ ".mjs",
664
+ ".cjs",
665
+ ".js",
666
+ ".mts",
667
+ ".cts",
668
+ ".ts"
669
+ ]
670
+ });
671
+ mod = await import(_url).then((m) => m.default || m);
672
+ }
673
+ if (typeof mod === "function") mod = { setup: mod };
674
+ if ("nitro" in mod) mod = mod.nitro;
675
+ if (!mod.setup) throw new Error("Invalid Nitro module: missing setup() function.");
676
+ return {
677
+ _url,
678
+ ...mod
679
+ };
680
+ }
681
+ //#endregion
682
+ //#region src/routing.ts
683
+ const isGlobalMiddleware = (h) => !h.method && (!h.route || h.route === "/**");
684
+ function initNitroRouting(nitro) {
685
+ const envConditions = new Set([
686
+ nitro.options.dev ? "dev" : "prod",
687
+ nitro.options.preset,
688
+ nitro.options.preset === "nitro-prerender" ? "prerender" : void 0
689
+ ].filter(Boolean));
690
+ const matchesEnv = (h) => {
691
+ const envs = (Array.isArray(h.env) ? h.env : [h.env]).filter(Boolean);
692
+ return envs.length === 0 || envs.some((env) => envConditions.has(env));
693
+ };
694
+ const routes = new Router(nitro.options.baseURL);
695
+ const routeRules = new Router(nitro.options.baseURL);
696
+ const globalMiddleware = [];
697
+ const routedMiddleware = new Router(nitro.options.baseURL);
698
+ const sync = () => {
699
+ routeRules._update(Object.entries(nitro.options.routeRules).map(([route, data]) => ({
700
+ route,
701
+ method: "",
702
+ data: {
703
+ ...data,
704
+ _route: route
705
+ }
706
+ })));
707
+ const _routes = [
708
+ ...Object.entries(nitro.options.routes).flatMap(([route, handler]) => {
709
+ if (typeof handler === "string") handler = { handler };
710
+ return {
711
+ ...handler,
712
+ route,
713
+ middleware: false
714
+ };
715
+ }),
716
+ ...nitro.options.handlers,
717
+ ...nitro.scannedHandlers
718
+ ].filter((h) => h && !h.middleware && matchesEnv(h));
719
+ if (nitro.options.serverEntry && nitro.options.serverEntry.handler) _routes.push({
720
+ route: "/**",
721
+ lazy: false,
722
+ format: nitro.options.serverEntry.format,
723
+ handler: nitro.options.serverEntry.handler
724
+ });
725
+ if (nitro.options.renderer?.handler) _routes.push({
726
+ route: "/**",
727
+ lazy: true,
728
+ handler: nitro.options.renderer?.handler
729
+ });
730
+ routes._update(_routes.map((h) => ({
731
+ ...h,
732
+ method: h.method || "",
733
+ data: handlerWithImportHash(h)
734
+ })), { merge: true });
735
+ const _middleware = [...nitro.scannedHandlers, ...nitro.options.handlers].filter((h) => h && h.middleware && matchesEnv(h));
736
+ if (nitro.options.serveStatic) _middleware.unshift({
737
+ route: "/**",
738
+ middleware: true,
739
+ handler: join(runtimeDir, "internal/static")
740
+ });
741
+ globalMiddleware.splice(0, globalMiddleware.length, ..._middleware.filter((h) => isGlobalMiddleware(h)).map((m) => handlerWithImportHash(m)));
742
+ routedMiddleware._update(_middleware.filter((h) => !isGlobalMiddleware(h)).map((h) => ({
743
+ ...h,
744
+ method: h.method || "",
745
+ data: handlerWithImportHash(h)
746
+ })));
747
+ };
748
+ nitro.routing = Object.freeze({
749
+ sync,
750
+ routes,
751
+ routeRules,
752
+ globalMiddleware,
753
+ routedMiddleware
754
+ });
755
+ }
756
+ function handlerWithImportHash(h) {
757
+ const id = (h.lazy ? "_lazy_" : "_") + hash(h.handler).replace(/-/g, "").slice(0, 6);
758
+ return {
759
+ ...h,
760
+ _importHash: id
761
+ };
762
+ }
763
+ var Router = class {
764
+ _routes;
765
+ _router;
766
+ _compiled;
767
+ _baseURL;
768
+ constructor(baseURL) {
769
+ this._update([]);
770
+ this._baseURL = baseURL || "";
771
+ if (this._baseURL.endsWith("/")) this._baseURL = this._baseURL.slice(0, -1);
772
+ }
773
+ get routes() {
774
+ return this._routes;
775
+ }
776
+ _update(routes, opts) {
777
+ this._routes = routes;
778
+ this._router = createRouter();
779
+ this._compiled = void 0;
780
+ for (const route of routes) addRoute(this._router, route.method, this._baseURL + route.route, route.data);
781
+ if (opts?.merge) mergeCatchAll(this._router);
782
+ }
783
+ hasRoutes() {
784
+ return this._routes.length > 0;
785
+ }
786
+ compileToString(opts) {
787
+ const key = opts ? hash(opts) : "";
788
+ this._compiled ||= {};
789
+ if (this._compiled[key]) return this._compiled[key];
790
+ this._compiled[key] = compileRouterToString(this._router, void 0, opts);
791
+ if (this.routes.length === 1 && this.routes[0].route === "/**" && this.routes[0].method === "") {
792
+ const data = (opts?.serialize || JSON.stringify)(this.routes[0].data);
793
+ let retCode = `{data,params:{"_":p.slice(1)}}`;
794
+ if (opts?.matchAll) retCode = `[${retCode}]`;
795
+ this._compiled[key] = `/* @__PURE__ */ (() => {const data=${data};return ((_m, p)=>{return ${retCode};})})()`;
796
+ }
797
+ return this._compiled[key];
798
+ }
799
+ match(method, path) {
800
+ return findRoute(this._router, method, path)?.data;
801
+ }
802
+ matchAll(method, path) {
803
+ return findAllRoutes(this._router, method, path).map((route) => route.data);
804
+ }
805
+ };
806
+ function mergeCatchAll(router) {
807
+ const handlers = router.root?.wildcard?.methods?.[""];
808
+ if (!handlers || handlers.length < 2) return;
809
+ handlers.splice(0, handlers.length, {
810
+ ...handlers[0],
811
+ data: handlers.map((h) => h.data)
812
+ });
813
+ }
814
+ //#endregion
815
+ //#region src/global.ts
816
+ const nitroInstances = globalThis.__nitro_instances__ ||= [];
817
+ const globalKey = "__nitro_builder__";
818
+ function registerNitroInstance(nitro) {
819
+ if (nitroInstances.includes(nitro)) return;
820
+ globalInit();
821
+ nitroInstances.unshift(nitro);
822
+ nitro.hooks.hookOnce("close", () => {
823
+ nitroInstances.splice(nitroInstances.indexOf(nitro), 1);
824
+ if (nitroInstances.length === 0) delete globalThis[globalKey];
825
+ });
826
+ }
827
+ function globalInit() {
828
+ if (globalThis[globalKey]) return;
829
+ globalThis[globalKey] = { async fetch(req) {
830
+ for (let r = 0; r < 10 && nitroInstances.length === 0; r++) await new Promise((resolve) => setTimeout(resolve, 300));
831
+ const nitro = nitroInstances[0];
832
+ if (!nitro) throw new Error("No Nitro instance is running.");
833
+ return nitro.fetch(req);
834
+ } };
835
+ }
836
+ //#endregion
837
+ //#region src/nitro.ts
838
+ async function createNitro(config = {}, opts = {}) {
839
+ const nitro = {
840
+ options: await loadOptions(config, opts),
841
+ hooks: new Hookable(),
842
+ vfs: /* @__PURE__ */ new Map(),
843
+ routing: {},
844
+ logger: consola$1.withTag("nitro"),
845
+ scannedHandlers: [],
846
+ fetch: () => {
847
+ throw new Error("no dev server attached!");
848
+ },
849
+ close: () => Promise.resolve(nitro.hooks.callHook("close")),
850
+ async updateConfig(config) {
851
+ updateNitroConfig(nitro, config);
852
+ }
853
+ };
854
+ registerNitroInstance(nitro);
855
+ initNitroRouting(nitro);
856
+ await scanAndSyncOptions(nitro);
857
+ if (nitro.options.debug) createDebugger(nitro.hooks, { tag: "nitro" });
858
+ if (nitro.options.logLevel !== void 0) nitro.logger.level = nitro.options.logLevel;
859
+ nitro.hooks.addHooks(nitro.options.hooks);
860
+ await installModules(nitro);
861
+ if (nitro.options.imports) {
862
+ const { createUnimport } = await import("../_build/common.mjs").then((n) => n.v);
863
+ nitro.unimport = createUnimport(nitro.options.imports);
864
+ await nitro.unimport.init();
865
+ nitro.options.virtual["#imports"] = () => nitro.unimport?.toExports() || "";
866
+ nitro.options.virtual["#nitro"] = "export * from \"#imports\"";
867
+ }
868
+ await scanHandlers(nitro);
869
+ nitro.routing.sync();
870
+ return nitro;
871
+ }
872
+ //#endregion
873
+ //#region src/prerender/utils.ts
874
+ const allowedExtensions = new Set(["", ".json"]);
875
+ const linkParents = /* @__PURE__ */ new Map();
876
+ const HTML_ENTITIES = {
877
+ "&lt;": "<",
878
+ "&gt;": ">",
879
+ "&amp;": "&",
880
+ "&apos;": "'",
881
+ "&quot;": "\""
882
+ };
883
+ function escapeHtml(text) {
884
+ return text.replace(/&(lt|gt|amp|apos|quot);/g, (ch) => HTML_ENTITIES[ch] || ch);
885
+ }
886
+ async function extractLinks(html, from, res, crawlLinks) {
887
+ const links = [];
888
+ const _links = [];
889
+ if (crawlLinks) await z(P(html), (node) => {
890
+ if (!node.attributes?.href) return;
891
+ const link = escapeHtml(node.attributes.href);
892
+ if (!decodeURIComponent(link).startsWith("#") && allowedExtensions.has(getExtension(link))) _links.push(link);
893
+ });
894
+ const header = res.headers.get("x-nitro-prerender") || "";
895
+ _links.push(...header.split(",").map((i) => decodeURIComponent(i.trim())));
896
+ for (const link of _links.filter(Boolean)) {
897
+ const _link = parseURL(link);
898
+ if (_link.protocol || _link.host) continue;
899
+ if (!_link.pathname.startsWith("/")) {
900
+ const fromURL = new URL(from, "http://localhost");
901
+ _link.pathname = new URL(_link.pathname, fromURL).pathname;
902
+ }
903
+ links.push(_link.pathname + _link.search);
904
+ }
905
+ for (const link of links) {
906
+ const _parents = linkParents.get(link);
907
+ if (_parents) _parents.add(from);
908
+ else linkParents.set(link, new Set([from]));
909
+ }
910
+ return links;
911
+ }
912
+ const EXT_REGEX = /\.[\da-z]+$/;
913
+ function getExtension(link) {
914
+ return (parseURL(link).pathname.match(EXT_REGEX) || [])[0] || "";
915
+ }
916
+ function formatPrerenderRoute(route) {
917
+ let str = ` ├─ ${route.route} (${route.generateTimeMS}ms)`;
918
+ if (route.error) {
919
+ const parents = linkParents.get(route.route);
920
+ const errorColor = colors[route.error.status === 404 ? "yellow" : "red"];
921
+ const errorLead = parents?.size ? "├──" : "└──";
922
+ str += `\n │ ${errorLead} ${errorColor(route.error.message || "unknown error")}`;
923
+ if (parents?.size) str += `\n${[...parents.values()].map((link) => ` │ └── Linked from ${link}`).join("\n")}`;
924
+ }
925
+ if (route.skip) str += colors.gray(" (skipped)");
926
+ return colors.gray(str);
927
+ }
928
+ function matchesIgnorePattern(path, pattern) {
929
+ if (typeof pattern === "string") return path.startsWith(pattern);
930
+ if (typeof pattern === "function") return pattern(path) === true;
931
+ if (pattern instanceof RegExp) return pattern.test(path);
932
+ return false;
933
+ }
934
+ //#endregion
935
+ //#region src/prerender/prerender.ts
936
+ const JsonSigRx = /^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/;
937
+ async function prerender(nitro) {
938
+ if (nitro.options.noPublicDir) {
939
+ nitro.logger.warn("Skipping prerender since `noPublicDir` option is enabled.");
940
+ return;
941
+ }
942
+ const routes = new Set(nitro.options.prerender.routes);
943
+ const prerenderRulePaths = Object.entries(nitro.options.routeRules).filter(([path, options]) => options.prerender && !path.includes("*")).map((e) => e[0]);
944
+ for (const route of prerenderRulePaths) routes.add(route);
945
+ await nitro.hooks.callHook("prerender:routes", routes);
946
+ if (routes.size === 0) if (nitro.options.prerender.crawlLinks) routes.add("/");
947
+ else return;
948
+ nitro.logger.info("Initializing prerenderer");
949
+ nitro._prerenderedRoutes = [];
950
+ nitro._prerenderMeta = nitro._prerenderMeta || {};
951
+ const prerendererConfig = {
952
+ ...nitro.options._config,
953
+ static: false,
954
+ rootDir: nitro.options.rootDir,
955
+ logLevel: 0,
956
+ preset: "nitro-prerender",
957
+ builder: nitro.options.builder === "vite" ? "rolldown" : nitro.options.builder
958
+ };
959
+ await nitro.hooks.callHook("prerender:config", prerendererConfig);
960
+ const nitroRenderer = await createNitro(prerendererConfig);
961
+ const prerenderStartTime = Date.now();
962
+ await nitro.hooks.callHook("prerender:init", nitroRenderer);
963
+ let path = relative(nitro.options.output.dir, nitro.options.output.publicDir);
964
+ if (!path.startsWith(".")) path = `./${path}`;
965
+ nitroRenderer.options.commands.preview = `npx serve ${path}`;
966
+ nitroRenderer.options.output.dir = nitro.options.output.dir;
967
+ await build(nitroRenderer);
968
+ const serverFilename = typeof nitroRenderer.options.rollupConfig?.output?.entryFileNames === "string" ? nitroRenderer.options.rollupConfig.output.entryFileNames : "index.mjs";
969
+ const prerenderer = await import(pathToFileURL(resolve(nitroRenderer.options.output.serverDir, serverFilename)).href).then((m) => m.default);
970
+ const routeRules = createRouter();
971
+ for (const [route, rules] of Object.entries(nitro.options.routeRules)) addRoute(routeRules, void 0, route, rules);
972
+ const _getRouteRules = (path) => defu({}, ...findAllRoutes(routeRules, void 0, path).map((r) => r.data).reverse());
973
+ const generatedRoutes = /* @__PURE__ */ new Set();
974
+ const failedRoutes = /* @__PURE__ */ new Set();
975
+ const skippedRoutes = /* @__PURE__ */ new Set();
976
+ const displayedLengthWarns = /* @__PURE__ */ new Set();
977
+ const publicAssetBases = nitro.options.publicAssets.filter((a) => !!a.baseURL && a.baseURL !== "/" && !a.fallthrough).map((a) => withTrailingSlash(a.baseURL));
978
+ const scannedPublicAssets = nitro.options.prerender.ignoreUnprefixedPublicAssets ? new Set(await scanUnprefixedPublicAssets(nitro)) : /* @__PURE__ */ new Set();
979
+ const canPrerender = (route = "/") => {
980
+ if (generatedRoutes.has(route) || skippedRoutes.has(route)) return false;
981
+ if (nitro.options.prerender.ignore) {
982
+ for (const pattern of nitro.options.prerender.ignore) if (matchesIgnorePattern(route, pattern)) return false;
983
+ }
984
+ if (publicAssetBases.some((base) => route.startsWith(base))) return false;
985
+ if (scannedPublicAssets.has(route)) return false;
986
+ if (_getRouteRules(route).prerender === false) return false;
987
+ return true;
988
+ };
989
+ const canWriteToDisk = (route) => {
990
+ if (route.route.includes("?") || route.route.includes("..")) return false;
991
+ const FS_MAX_SEGMENT = 255;
992
+ const FS_MAX_PATH_PUBLIC_HTML = 1024 - (nitro.options.output.publicDir.length + 10);
993
+ if ((route.route.length >= FS_MAX_PATH_PUBLIC_HTML || route.route.split("/").some((s) => s.length > FS_MAX_SEGMENT)) && !displayedLengthWarns.has(route)) {
994
+ displayedLengthWarns.add(route);
995
+ const _route = route.route.slice(0, 60) + "...";
996
+ if (route.route.length >= FS_MAX_PATH_PUBLIC_HTML) nitro.logger.warn(`Prerendering long route "${_route}" (${route.route.length}) can cause filesystem issues since it exceeds ${FS_MAX_PATH_PUBLIC_HTML}-character limit when writing to \`${nitro.options.output.publicDir}\`.`);
997
+ else {
998
+ nitro.logger.warn(`Skipping prerender of the route "${_route}" since it exceeds the ${FS_MAX_SEGMENT}-character limit in one of the path segments and can cause filesystem issues.`);
999
+ return false;
1000
+ }
1001
+ }
1002
+ return true;
1003
+ };
1004
+ const generateRoute = async (route) => {
1005
+ const start = Date.now();
1006
+ route = decodeURI(route);
1007
+ if (!canPrerender(route)) {
1008
+ skippedRoutes.add(route);
1009
+ return;
1010
+ }
1011
+ generatedRoutes.add(route);
1012
+ const _route = { route };
1013
+ const encodedRoute = encodeURI(route);
1014
+ const req = toRequest(withBase(encodedRoute, nitro.options.baseURL), { headers: [["x-nitro-prerender", encodedRoute]] });
1015
+ const res = await prerenderer.fetch(req);
1016
+ let dataBuff = Buffer.from(await res.arrayBuffer());
1017
+ Object.defineProperty(_route, "contents", {
1018
+ get: () => {
1019
+ return dataBuff ? dataBuff.toString("utf8") : void 0;
1020
+ },
1021
+ set(value) {
1022
+ if (dataBuff) dataBuff = Buffer.from(value);
1023
+ }
1024
+ });
1025
+ Object.defineProperty(_route, "data", {
1026
+ get: () => {
1027
+ return dataBuff ? dataBuff.buffer : void 0;
1028
+ },
1029
+ set(value) {
1030
+ if (dataBuff) dataBuff = Buffer.from(value);
1031
+ }
1032
+ });
1033
+ if (![200, ...[
1034
+ 301,
1035
+ 302,
1036
+ 303,
1037
+ 304,
1038
+ 307,
1039
+ 308
1040
+ ]].includes(res.status)) {
1041
+ _route.error = /* @__PURE__ */ new Error(`[${res.status}] ${res.statusText}`);
1042
+ _route.error.status = res.status;
1043
+ _route.error.statusText = res.statusText;
1044
+ }
1045
+ _route.generateTimeMS = Date.now() - start;
1046
+ const contentType = res.headers.get("content-type") || "";
1047
+ const isImplicitHTML = !route.endsWith(".html") && contentType.includes("html") && !JsonSigRx.test(dataBuff.subarray(0, 32).toString("utf8"));
1048
+ const routeWithIndex = route.endsWith("/") ? route + "index" : route;
1049
+ const htmlPath = route.endsWith("/") || nitro.options.prerender.autoSubfolderIndex ? joinURL(route, "index.html") : route + ".html";
1050
+ _route.fileName = withoutBase(isImplicitHTML ? htmlPath : routeWithIndex, nitro.options.baseURL);
1051
+ const inferredContentType = src_default.getType(_route.fileName) || "text/plain";
1052
+ _route.contentType = contentType || inferredContentType;
1053
+ await nitro.hooks.callHook("prerender:generate", _route, nitro);
1054
+ if (_route.contentType !== inferredContentType) {
1055
+ nitro._prerenderMeta[_route.fileName] ||= {};
1056
+ nitro._prerenderMeta[_route.fileName].contentType = _route.contentType;
1057
+ }
1058
+ if (_route.error) failedRoutes.add(_route);
1059
+ if (_route.skip || _route.error) {
1060
+ await nitro.hooks.callHook("prerender:route", _route);
1061
+ nitro.logger.log(formatPrerenderRoute(_route));
1062
+ dataBuff = void 0;
1063
+ return _route;
1064
+ }
1065
+ const filePath = join(nitro.options.output.publicDir, _route.fileName);
1066
+ if (canWriteToDisk(_route) && filePath.startsWith(nitro.options.output.publicDir)) {
1067
+ await writeFile$1(filePath, dataBuff);
1068
+ nitro._prerenderedRoutes.push(_route);
1069
+ } else _route.skip = true;
1070
+ if (!_route.error && (isImplicitHTML || route.endsWith(".html"))) {
1071
+ const extractedLinks = await extractLinks(dataBuff.toString("utf8"), route, res, nitro.options.prerender.crawlLinks ?? false);
1072
+ for (const _link of extractedLinks) if (canPrerender(_link)) routes.add(_link);
1073
+ }
1074
+ await nitro.hooks.callHook("prerender:route", _route);
1075
+ nitro.logger.log(formatPrerenderRoute(_route));
1076
+ dataBuff = void 0;
1077
+ return _route;
1078
+ };
1079
+ nitro.logger.info(nitro.options.prerender.crawlLinks ? `Prerendering ${routes.size} initial routes with crawler` : `Prerendering ${routes.size} routes`);
1080
+ await runParallel(routes, generateRoute, {
1081
+ concurrency: nitro.options.prerender.concurrency || 1,
1082
+ interval: nitro.options.prerender.interval
1083
+ });
1084
+ await prerenderer.close();
1085
+ await nitro.hooks.callHook("prerender:done", {
1086
+ prerenderedRoutes: nitro._prerenderedRoutes,
1087
+ failedRoutes: [...failedRoutes]
1088
+ });
1089
+ if (nitro.options.prerender.failOnError && failedRoutes.size > 0) {
1090
+ nitro.logger.log("\nErrors prerendering:");
1091
+ for (const route of failedRoutes) nitro.logger.log(formatPrerenderRoute(route));
1092
+ nitro.logger.log("");
1093
+ throw new Error("Exiting due to prerender errors.");
1094
+ }
1095
+ const prerenderTimeInMs = Date.now() - prerenderStartTime;
1096
+ nitro.logger.info(`Prerendered ${nitro._prerenderedRoutes.length} routes in ${prerenderTimeInMs / 1e3} seconds`);
1097
+ if (nitro.options.compressPublicAssets) await compressPublicAssets(nitro);
1098
+ }
1099
+ //#endregion
1100
+ //#region src/task.ts
1101
+ /** @experimental */
1102
+ async function runTask(taskEvent, opts) {
1103
+ return await (await _getTasksContext(opts)).devFetch(`/_nitro/tasks/${taskEvent.name}`, {
1104
+ method: "POST",
1105
+ body: taskEvent
1106
+ });
1107
+ }
1108
+ /** @experimental */
1109
+ async function listTasks(opts) {
1110
+ return (await (await _getTasksContext(opts)).devFetch("/_nitro/tasks")).tasks;
1111
+ }
1112
+ const _devHint = `(is dev server running?)`;
1113
+ async function _getTasksContext(opts) {
1114
+ const buildInfoPath = resolve(resolve(resolve(process.cwd(), opts?.cwd || "."), opts?.buildDir || "node_modules/.nitro"), "nitro.dev.json");
1115
+ if (!existsSync(buildInfoPath)) throw new Error(`Missing info file: \`${buildInfoPath}\` ${_devHint}`);
1116
+ const buildInfo = JSON.parse(await readFile(buildInfoPath, "utf8"));
1117
+ if (!buildInfo.dev?.pid || !buildInfo.dev?.workerAddress) throw new Error(`Missing dev server info in: \`${buildInfoPath}\` ${_devHint}`);
1118
+ if (!_pidIsRunning(buildInfo.dev.pid)) throw new Error(`Dev server is not running (pid: ${buildInfo.dev.pid})`);
1119
+ const baseURL = `http://${buildInfo.dev.workerAddress.host || "localhost"}:${buildInfo.dev.workerAddress.port || "3000"}`;
1120
+ const socketPath = buildInfo.dev.workerAddress.socketPath;
1121
+ const devFetch = (path, options) => {
1122
+ return new Promise((resolve, reject) => {
1123
+ let url = withBase(path, baseURL);
1124
+ if (options?.query) url = withQuery(url, options.query);
1125
+ const request = http.request(url, {
1126
+ socketPath,
1127
+ method: options?.method,
1128
+ headers: {
1129
+ Accept: "application/json",
1130
+ "Content-Type": "application/json"
1131
+ }
1132
+ }, (response) => {
1133
+ if (!response.statusCode || response.statusCode >= 400 && response.statusCode < 600) {
1134
+ reject(new Error(response.statusMessage));
1135
+ return;
1136
+ }
1137
+ let data = "";
1138
+ response.on("data", (chunk) => data += chunk).on("end", () => resolve(JSON.parse(data))).on("error", (e) => reject(e));
1139
+ });
1140
+ request.on("error", (e) => reject(e));
1141
+ if (options?.body) request.write(JSON.stringify(options.body));
1142
+ request.end();
1143
+ });
1144
+ };
1145
+ return {
1146
+ buildInfo,
1147
+ devFetch
1148
+ };
1149
+ }
1150
+ function _pidIsRunning(pid) {
1151
+ try {
1152
+ process.kill(pid, 0);
1153
+ return true;
1154
+ } catch {
1155
+ return false;
1156
+ }
1157
+ }
1158
+ //#endregion
1159
+ export { loadOptions as a, createNitro as i, runTask as n, prerender as r, listTasks as t };