astro 6.0.0-alpha.0 → 6.0.0-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 (543) hide show
  1. package/astro-jsx.d.ts +11 -0
  2. package/client.d.ts +17 -41
  3. package/components/Code.astro +2 -2
  4. package/components/Image.astro +2 -2
  5. package/components/Picture.astro +1 -1
  6. package/dist/actions/consts.d.ts +2 -5
  7. package/dist/actions/consts.js +4 -8
  8. package/dist/actions/integration.js +2 -4
  9. package/dist/actions/runtime/client.d.ts +84 -3
  10. package/dist/actions/runtime/client.js +238 -7
  11. package/dist/actions/runtime/entrypoints/client.d.ts +7 -0
  12. package/dist/actions/runtime/entrypoints/client.js +91 -0
  13. package/dist/actions/runtime/entrypoints/route.d.ts +2 -0
  14. package/dist/actions/runtime/{route.js → entrypoints/route.js} +1 -1
  15. package/dist/actions/runtime/entrypoints/server.d.ts +6 -0
  16. package/dist/actions/runtime/entrypoints/server.js +33 -0
  17. package/dist/actions/runtime/server.d.ts +11 -18
  18. package/dist/actions/runtime/server.js +162 -82
  19. package/dist/actions/runtime/types.d.ts +64 -0
  20. package/dist/actions/utils.d.ts +2 -2
  21. package/dist/actions/utils.js +2 -2
  22. package/dist/actions/vite-plugin-actions.js +18 -21
  23. package/dist/assets/build/generate.d.ts +2 -2
  24. package/dist/assets/build/generate.js +12 -10
  25. package/dist/assets/endpoint/config.js +2 -2
  26. package/dist/assets/endpoint/dev.js +7 -6
  27. package/dist/assets/fonts/config.d.ts +91 -350
  28. package/dist/assets/fonts/config.js +35 -136
  29. package/dist/assets/fonts/constants.js +1 -1
  30. package/dist/assets/fonts/core/dedupe-font-faces.d.ts +2 -0
  31. package/dist/assets/fonts/core/dedupe-font-faces.js +30 -0
  32. package/dist/assets/fonts/definitions.d.ts +9 -22
  33. package/dist/assets/fonts/infra/build-remote-font-provider-mod-resolver.d.ts +4 -0
  34. package/dist/assets/fonts/infra/build-remote-font-provider-mod-resolver.js +8 -0
  35. package/dist/assets/fonts/infra/build-url-proxy-hash-resolver.d.ts +15 -0
  36. package/dist/assets/fonts/infra/build-url-proxy-hash-resolver.js +20 -0
  37. package/dist/assets/fonts/infra/build-url-resolver.d.ts +12 -0
  38. package/dist/assets/fonts/infra/build-url-resolver.js +40 -0
  39. package/dist/assets/fonts/infra/cached-font-fetcher.d.ts +11 -0
  40. package/dist/assets/fonts/infra/cached-font-fetcher.js +42 -0
  41. package/dist/assets/fonts/infra/capsize-font-metrics-resolver.d.ts +18 -0
  42. package/dist/assets/fonts/infra/capsize-font-metrics-resolver.js +71 -0
  43. package/dist/assets/fonts/infra/data-collector.d.ts +10 -0
  44. package/dist/assets/fonts/infra/data-collector.js +35 -0
  45. package/dist/assets/fonts/infra/dev-remote-font-provider-mod-resolver.d.ts +9 -0
  46. package/dist/assets/fonts/infra/dev-remote-font-provider-mod-resolver.js +14 -0
  47. package/dist/assets/fonts/infra/dev-url-proxy-hash-resolver.d.ts +15 -0
  48. package/dist/assets/fonts/infra/dev-url-proxy-hash-resolver.js +37 -0
  49. package/dist/assets/fonts/infra/dev-url-resolver.d.ts +10 -0
  50. package/dist/assets/fonts/infra/dev-url-resolver.js +29 -0
  51. package/dist/assets/fonts/infra/font-type-extractor.d.ts +5 -0
  52. package/dist/assets/fonts/infra/font-type-extractor.js +21 -0
  53. package/dist/assets/fonts/infra/fontace-font-file-reader.d.ts +11 -0
  54. package/dist/assets/fonts/infra/fontace-font-file-reader.js +25 -0
  55. package/dist/assets/fonts/infra/levenshtein-string-matcher.d.ts +5 -0
  56. package/dist/assets/fonts/infra/levenshtein-string-matcher.js +145 -0
  57. package/dist/assets/fonts/infra/local-url-proxy-content-resolver.d.ts +4 -0
  58. package/dist/assets/fonts/infra/local-url-proxy-content-resolver.js +14 -0
  59. package/dist/assets/fonts/{implementations/css-renderer.d.ts → infra/minifiable-css-renderer.d.ts} +8 -3
  60. package/dist/assets/fonts/{implementations/css-renderer.js → infra/minifiable-css-renderer.js} +12 -10
  61. package/dist/assets/fonts/infra/remote-font-provider-resolver.d.ts +10 -0
  62. package/dist/assets/fonts/infra/remote-font-provider-resolver.js +49 -0
  63. package/dist/assets/fonts/infra/remote-url-proxy-content-resolver.d.ts +4 -0
  64. package/dist/assets/fonts/infra/remote-url-proxy-content-resolver.js +9 -0
  65. package/dist/assets/fonts/infra/require-local-provider-url-resolver.d.ts +9 -0
  66. package/dist/assets/fonts/infra/require-local-provider-url-resolver.js +22 -0
  67. package/dist/assets/fonts/infra/system-fallbacks-provider.d.ts +6 -0
  68. package/dist/assets/fonts/{implementations → infra}/system-fallbacks-provider.js +8 -11
  69. package/dist/assets/fonts/infra/unstorage-fs-storage.d.ts +11 -0
  70. package/dist/assets/fonts/infra/unstorage-fs-storage.js +26 -0
  71. package/dist/assets/fonts/infra/url-proxy.d.ts +16 -0
  72. package/dist/assets/fonts/infra/url-proxy.js +50 -0
  73. package/dist/assets/fonts/infra/xxhash-hasher.d.ts +7 -0
  74. package/dist/assets/fonts/infra/xxhash-hasher.js +18 -0
  75. package/dist/assets/fonts/orchestrate.d.ts +1 -2
  76. package/dist/assets/fonts/orchestrate.js +50 -17
  77. package/dist/assets/fonts/providers/index.d.ts +6 -24
  78. package/dist/assets/fonts/types.d.ts +138 -8
  79. package/dist/assets/fonts/utils.d.ts +1 -2
  80. package/dist/assets/fonts/vite-plugin-fonts.js +56 -61
  81. package/dist/assets/services/noop.js +5 -0
  82. package/dist/assets/utils/index.d.ts +0 -2
  83. package/dist/assets/utils/index.js +0 -5
  84. package/dist/assets/utils/{transformToPath.d.ts → node.d.ts} +15 -1
  85. package/dist/assets/utils/{node/emitAsset.js → node.js} +34 -6
  86. package/dist/assets/utils/remotePattern.d.ts +1 -3
  87. package/dist/assets/utils/svg.d.ts +2 -1
  88. package/dist/assets/utils/svg.js +30 -4
  89. package/dist/assets/vite-plugin-assets.js +10 -8
  90. package/dist/cli/add/index.js +21 -13
  91. package/dist/cli/create-key/infra/crypto-key-generator.d.ts +3 -1
  92. package/dist/cli/create-key/infra/crypto-key-generator.js +7 -9
  93. package/dist/cli/definitions.d.ts +19 -2
  94. package/dist/cli/dev/index.js +1 -1
  95. package/dist/cli/docs/core/open-docs.d.ts +5 -3
  96. package/dist/cli/docs/core/open-docs.js +2 -9
  97. package/dist/cli/docs/definitions.d.ts +3 -11
  98. package/dist/cli/docs/domain/cloud-ide.d.ts +1 -0
  99. package/dist/cli/docs/domain/cloud-ide.js +0 -0
  100. package/dist/cli/docs/infra/process-cloud-ide-provider.d.ts +5 -0
  101. package/dist/cli/docs/infra/process-cloud-ide-provider.js +6 -0
  102. package/dist/cli/flags.d.ts +1 -0
  103. package/dist/cli/index.js +78 -21
  104. package/dist/cli/info/core/get-package-manager.d.ts +8 -0
  105. package/dist/cli/info/core/get-package-manager.js +37 -0
  106. package/dist/cli/info/core/info.d.ts +21 -0
  107. package/dist/cli/info/core/info.js +21 -0
  108. package/dist/cli/info/definitions.d.ts +30 -0
  109. package/dist/cli/info/definitions.js +0 -0
  110. package/dist/cli/info/domain/debug-info.d.ts +1 -0
  111. package/dist/cli/info/domain/debug-info.js +0 -0
  112. package/dist/cli/info/infra/bun-package-manager.d.ts +5 -0
  113. package/dist/cli/info/infra/bun-package-manager.js +9 -0
  114. package/dist/cli/info/infra/cli-astro-config-resolver.d.ts +10 -0
  115. package/dist/cli/info/infra/cli-astro-config-resolver.js +36 -0
  116. package/dist/cli/info/infra/cli-clipboard.d.ts +13 -0
  117. package/dist/cli/info/infra/cli-clipboard.js +78 -0
  118. package/dist/cli/info/infra/cli-debug-info-provider.d.ts +15 -0
  119. package/dist/cli/info/infra/cli-debug-info-provider.js +57 -0
  120. package/dist/cli/info/infra/dev-debug-info-provider.d.ts +18 -0
  121. package/dist/cli/info/infra/dev-debug-info-provider.js +36 -0
  122. package/dist/cli/info/infra/noop-package-manager.d.ts +5 -0
  123. package/dist/cli/info/infra/noop-package-manager.js +9 -0
  124. package/dist/cli/info/infra/npm-package-manager.d.ts +10 -0
  125. package/dist/cli/info/infra/npm-package-manager.js +32 -0
  126. package/dist/cli/info/infra/pnpm-package-manager.d.ts +10 -0
  127. package/dist/cli/info/infra/pnpm-package-manager.js +33 -0
  128. package/dist/cli/info/infra/process-node-version-provider.d.ts +4 -0
  129. package/dist/cli/info/infra/process-node-version-provider.js +6 -0
  130. package/dist/cli/info/infra/process-package-manager-user-agent-provider.d.ts +4 -0
  131. package/dist/cli/info/infra/process-package-manager-user-agent-provider.js +7 -0
  132. package/dist/cli/info/infra/prompts-prompt.d.ts +11 -0
  133. package/dist/cli/info/infra/prompts-prompt.js +25 -0
  134. package/dist/cli/info/infra/styled-debug-info-formatter.d.ts +10 -0
  135. package/dist/cli/info/infra/styled-debug-info-formatter.js +29 -0
  136. package/dist/cli/info/infra/yarn-package-manager.d.ts +10 -0
  137. package/dist/cli/info/infra/yarn-package-manager.js +34 -0
  138. package/dist/cli/infra/build-time-astro-version-provider.d.ts +3 -1
  139. package/dist/cli/infra/build-time-astro-version-provider.js +4 -8
  140. package/dist/cli/infra/cli-command-runner.d.ts +7 -4
  141. package/dist/cli/infra/cli-command-runner.js +14 -10
  142. package/dist/cli/infra/logger-help-display.d.ts +11 -7
  143. package/dist/cli/infra/logger-help-display.js +62 -50
  144. package/dist/cli/infra/passthrough-text-styler.d.ts +9 -0
  145. package/dist/cli/infra/passthrough-text-styler.js +23 -0
  146. package/dist/cli/infra/piccolore-text-styler.d.ts +2 -0
  147. package/dist/cli/infra/piccolore-text-styler.js +5 -0
  148. package/dist/cli/infra/process-operating-system-provider.d.ts +6 -0
  149. package/dist/cli/infra/process-operating-system-provider.js +12 -0
  150. package/dist/cli/infra/tinyexec-command-executor.d.ts +6 -0
  151. package/dist/cli/infra/tinyexec-command-executor.js +34 -0
  152. package/dist/cli/install-package.js +1 -1
  153. package/dist/cli/preferences/index.js +6 -2
  154. package/dist/cli/preview/index.js +1 -1
  155. package/dist/cli/utils/format-version.js +1 -1
  156. package/dist/config/index.js +9 -5
  157. package/dist/container/index.js +19 -13
  158. package/dist/container/pipeline.d.ts +2 -1
  159. package/dist/container/pipeline.js +4 -11
  160. package/dist/content/config.d.ts +34 -40
  161. package/dist/content/content-layer.js +13 -18
  162. package/dist/content/loaders/errors.d.ts +3 -3
  163. package/dist/content/loaders/errors.js +5 -2
  164. package/dist/content/loaders/glob.js +6 -1
  165. package/dist/content/loaders/types.d.ts +11 -4
  166. package/dist/content/runtime-assets.d.ts +4 -4
  167. package/dist/content/runtime-assets.js +2 -2
  168. package/dist/content/runtime.d.ts +21 -20
  169. package/dist/content/runtime.js +14 -16
  170. package/dist/content/types-generator.js +81 -54
  171. package/dist/content/utils.d.ts +46 -338
  172. package/dist/content/utils.js +43 -48
  173. package/dist/content/vite-plugin-content-assets.d.ts +12 -4
  174. package/dist/content/vite-plugin-content-assets.js +100 -56
  175. package/dist/content/vite-plugin-content-imports.js +10 -4
  176. package/dist/content/vite-plugin-content-virtual-mod.js +10 -7
  177. package/dist/core/app/app.d.ts +5 -0
  178. package/dist/core/app/app.js +13 -0
  179. package/dist/core/app/base.d.ts +132 -0
  180. package/dist/core/app/base.js +448 -0
  181. package/dist/core/app/common.d.ts +6 -2
  182. package/dist/core/app/common.js +60 -33
  183. package/dist/core/app/dev/app.d.ts +15 -0
  184. package/dist/core/app/dev/app.js +86 -0
  185. package/dist/core/app/dev/pipeline.d.ts +13 -0
  186. package/dist/core/app/dev/pipeline.js +123 -0
  187. package/dist/core/app/entrypoint.d.ts +2 -0
  188. package/dist/core/app/entrypoint.js +15 -0
  189. package/dist/core/app/index.d.ts +7 -99
  190. package/dist/core/app/index.js +20 -486
  191. package/dist/core/app/logging.d.ts +3 -0
  192. package/dist/core/app/logging.js +11 -0
  193. package/dist/core/app/manifest.d.ts +9 -0
  194. package/dist/core/app/manifest.js +107 -0
  195. package/dist/core/app/middlewares.js +1 -1
  196. package/dist/core/app/node.js +14 -13
  197. package/dist/core/app/pipeline.d.ts +6 -5
  198. package/dist/core/app/pipeline.js +65 -49
  199. package/dist/core/app/types.d.ts +58 -22
  200. package/dist/core/app/validate-forwarded-headers.d.ts +16 -0
  201. package/dist/core/app/validate-forwarded-headers.js +60 -0
  202. package/dist/core/base-pipeline.d.ts +22 -14
  203. package/dist/core/base-pipeline.js +54 -6
  204. package/dist/core/build/app.d.ts +13 -0
  205. package/dist/core/build/app.js +38 -0
  206. package/dist/core/build/common.d.ts +1 -1
  207. package/dist/core/build/common.js +2 -2
  208. package/dist/core/build/generate.d.ts +1 -1
  209. package/dist/core/build/generate.js +96 -204
  210. package/dist/core/build/graph.js +2 -2
  211. package/dist/core/build/index.js +11 -16
  212. package/dist/core/build/internal.d.ts +2 -27
  213. package/dist/core/build/internal.js +1 -44
  214. package/dist/core/build/page-data.js +1 -1
  215. package/dist/core/build/pipeline.d.ts +15 -26
  216. package/dist/core/build/pipeline.js +106 -170
  217. package/dist/core/build/plugins/index.d.ts +4 -2
  218. package/dist/core/build/plugins/index.js +17 -23
  219. package/dist/core/build/plugins/plugin-analyzer.d.ts +2 -2
  220. package/dist/core/build/plugins/plugin-analyzer.js +5 -13
  221. package/dist/core/build/plugins/plugin-component-entry.d.ts +7 -2
  222. package/dist/core/build/plugins/plugin-component-entry.js +5 -13
  223. package/dist/core/build/plugins/plugin-css.d.ts +2 -2
  224. package/dist/core/build/plugins/plugin-css.js +86 -41
  225. package/dist/core/build/plugins/plugin-internals.d.ts +2 -2
  226. package/dist/core/build/plugins/plugin-internals.js +24 -18
  227. package/dist/core/build/plugins/plugin-manifest.d.ts +33 -5
  228. package/dist/core/build/plugins/plugin-manifest.js +89 -129
  229. package/dist/core/build/plugins/plugin-middleware.d.ts +2 -2
  230. package/dist/core/build/plugins/plugin-middleware.js +5 -7
  231. package/dist/core/build/plugins/plugin-noop.d.ts +3 -0
  232. package/dist/core/build/plugins/plugin-noop.js +29 -0
  233. package/dist/core/build/plugins/plugin-prerender.d.ts +2 -2
  234. package/dist/core/build/plugins/plugin-prerender.js +7 -64
  235. package/dist/core/build/plugins/plugin-scripts.d.ts +5 -2
  236. package/dist/core/build/plugins/plugin-scripts.js +5 -13
  237. package/dist/core/build/plugins/plugin-ssr.d.ts +2 -2
  238. package/dist/core/build/plugins/plugin-ssr.js +60 -132
  239. package/dist/core/build/plugins/util.d.ts +1 -25
  240. package/dist/core/build/plugins/util.js +0 -47
  241. package/dist/core/build/runtime.d.ts +26 -0
  242. package/dist/core/build/runtime.js +45 -0
  243. package/dist/core/build/static-build.d.ts +2 -2
  244. package/dist/core/build/static-build.js +181 -155
  245. package/dist/core/build/types.d.ts +1 -2
  246. package/dist/core/build/util.d.ts +0 -1
  247. package/dist/core/build/util.js +0 -7
  248. package/dist/core/compile/compile.d.ts +2 -3
  249. package/dist/core/compile/compile.js +2 -2
  250. package/dist/core/config/config.js +3 -3
  251. package/dist/core/config/index.d.ts +0 -1
  252. package/dist/core/config/index.js +0 -2
  253. package/dist/core/config/schemas/base.d.ts +336 -1434
  254. package/dist/core/config/schemas/base.js +42 -41
  255. package/dist/core/config/schemas/refined.d.ts +2 -2
  256. package/dist/core/config/schemas/refined.js +1 -1
  257. package/dist/core/config/schemas/relative.d.ts +672 -1761
  258. package/dist/core/config/schemas/relative.js +4 -4
  259. package/dist/core/config/settings.d.ts +3 -3
  260. package/dist/core/config/settings.js +5 -6
  261. package/dist/core/config/validate.js +13 -2
  262. package/dist/core/config/vite-load.js +12 -3
  263. package/dist/core/constants.d.ts +11 -0
  264. package/dist/core/constants.js +20 -1
  265. package/dist/core/create-vite.d.ts +2 -6
  266. package/dist/core/create-vite.js +35 -43
  267. package/dist/core/csp/common.d.ts +1 -1
  268. package/dist/core/csp/common.js +1 -1
  269. package/dist/core/csp/config.d.ts +8 -4
  270. package/dist/core/csp/config.js +1 -1
  271. package/dist/core/csp/runtime.d.ts +11 -0
  272. package/dist/core/csp/runtime.js +35 -0
  273. package/dist/core/dev/container.js +13 -7
  274. package/dist/core/dev/dev.js +2 -2
  275. package/dist/core/dev/restart.js +15 -6
  276. package/dist/core/errors/dev/runtime.d.ts +6 -0
  277. package/dist/core/errors/dev/runtime.js +27 -0
  278. package/dist/core/errors/dev/utils.js +1 -1
  279. package/dist/core/errors/dev/vite.js +1 -1
  280. package/dist/core/errors/errors-data.d.ts +27 -7
  281. package/dist/core/errors/errors-data.js +17 -4
  282. package/dist/core/errors/errors.d.ts +3 -3
  283. package/dist/core/errors/errors.js +8 -8
  284. package/dist/core/errors/zod-error-map.d.ts +2 -2
  285. package/dist/core/errors/zod-error-map.js +26 -24
  286. package/dist/core/logger/core.js +1 -1
  287. package/dist/core/messages.d.ts +2 -2
  288. package/dist/core/messages.js +3 -3
  289. package/dist/core/middleware/callMiddleware.js +1 -1
  290. package/dist/core/middleware/defineMiddleware.d.ts +2 -0
  291. package/dist/core/middleware/defineMiddleware.js +6 -0
  292. package/dist/core/middleware/index.d.ts +3 -3
  293. package/dist/core/middleware/index.js +1 -3
  294. package/dist/core/middleware/sequence.js +4 -4
  295. package/dist/core/middleware/vite-plugin.d.ts +1 -1
  296. package/dist/core/middleware/vite-plugin.js +18 -7
  297. package/dist/core/module-loader/index.d.ts +2 -2
  298. package/dist/core/module-loader/index.js +1 -1
  299. package/dist/core/module-loader/{loader.d.ts → runner.d.ts} +6 -17
  300. package/dist/core/module-loader/{loader.js → runner.js} +3 -0
  301. package/dist/core/module-loader/vite.d.ts +3 -2
  302. package/dist/core/module-loader/vite.js +17 -13
  303. package/dist/core/preview/index.js +20 -3
  304. package/dist/core/preview/static-preview-server.js +11 -0
  305. package/dist/core/redirects/component.js +1 -2
  306. package/dist/core/redirects/index.d.ts +0 -1
  307. package/dist/core/redirects/index.js +1 -3
  308. package/dist/core/redirects/render.js +5 -2
  309. package/dist/core/render/paginate.d.ts +1 -1
  310. package/dist/core/render/paginate.js +8 -6
  311. package/dist/core/render/params-and-props.d.ts +2 -0
  312. package/dist/core/render/params-and-props.js +19 -6
  313. package/dist/core/render/route-cache.d.ts +3 -2
  314. package/dist/core/render/route-cache.js +6 -5
  315. package/dist/core/render-context.d.ts +6 -4
  316. package/dist/core/render-context.js +66 -25
  317. package/dist/core/routing/astro-designed-error-pages.js +2 -2
  318. package/dist/core/routing/default.js +1 -1
  319. package/dist/core/routing/helpers.d.ts +22 -0
  320. package/dist/core/routing/helpers.js +25 -0
  321. package/dist/core/routing/index.d.ts +1 -1
  322. package/dist/core/routing/index.js +2 -2
  323. package/dist/core/routing/manifest/create.d.ts +6 -1
  324. package/dist/core/routing/manifest/create.js +11 -14
  325. package/dist/core/routing/manifest/generator.d.ts +3 -1
  326. package/dist/core/routing/params.d.ts +2 -1
  327. package/dist/core/routing/params.js +3 -2
  328. package/dist/core/server-islands/endpoint.js +40 -19
  329. package/dist/core/server-islands/vite-plugin-server-islands.d.ts +1 -1
  330. package/dist/core/server-islands/vite-plugin-server-islands.js +89 -44
  331. package/dist/core/session/vite-plugin.d.ts +6 -0
  332. package/dist/core/session/vite-plugin.js +53 -0
  333. package/dist/core/session.d.ts +4 -2
  334. package/dist/core/session.js +8 -48
  335. package/dist/core/sync/index.d.ts +2 -5
  336. package/dist/core/sync/index.js +34 -22
  337. package/dist/core/util/pathname.d.ts +10 -0
  338. package/dist/core/util/pathname.js +17 -0
  339. package/dist/core/util.d.ts +2 -2
  340. package/dist/core/util.js +3 -3
  341. package/dist/entrypoints/legacy.d.ts +2 -0
  342. package/dist/entrypoints/legacy.js +12 -0
  343. package/dist/entrypoints/prerender.d.ts +4 -0
  344. package/dist/entrypoints/prerender.js +7 -0
  345. package/dist/env/schema.d.ts +21 -251
  346. package/dist/env/schema.js +6 -3
  347. package/dist/env/vite-plugin-env.js +15 -10
  348. package/dist/env/vite-plugin-import-meta-env.js +3 -2
  349. package/dist/environments.d.ts +3 -0
  350. package/dist/environments.js +11 -0
  351. package/dist/events/error.d.ts +2 -2
  352. package/dist/i18n/index.d.ts +2 -2
  353. package/dist/i18n/utils.d.ts +1 -6
  354. package/dist/i18n/utils.js +1 -63
  355. package/dist/i18n/vite-plugin-i18n.d.ts +0 -5
  356. package/dist/i18n/vite-plugin-i18n.js +1 -22
  357. package/dist/integrations/hooks.d.ts +1 -1
  358. package/dist/integrations/hooks.js +10 -7
  359. package/dist/manifest/serialized.d.ts +9 -0
  360. package/dist/manifest/serialized.js +144 -0
  361. package/dist/manifest/virtual-module.d.ts +1 -4
  362. package/dist/manifest/virtual-module.js +77 -80
  363. package/dist/preferences/index.d.ts +1 -2
  364. package/dist/prerender/routing.d.ts +5 -7
  365. package/dist/prerender/routing.js +6 -17
  366. package/dist/runtime/client/dev-toolbar/ui-library/badge.d.ts +2 -2
  367. package/dist/runtime/client/dev-toolbar/ui-library/button.d.ts +2 -2
  368. package/dist/runtime/client/dev-toolbar/ui-library/card.d.ts +2 -2
  369. package/dist/runtime/client/dev-toolbar/ui-library/highlight.d.ts +2 -2
  370. package/dist/runtime/client/dev-toolbar/ui-library/radio-checkbox.d.ts +2 -2
  371. package/dist/runtime/client/dev-toolbar/ui-library/select.d.ts +2 -2
  372. package/dist/runtime/client/dev-toolbar/ui-library/toggle.d.ts +2 -2
  373. package/dist/runtime/server/endpoint.js +1 -1
  374. package/dist/runtime/server/render/server-islands.js +5 -4
  375. package/dist/runtime/server/transition.d.ts +1 -0
  376. package/dist/template/4xx.js +3 -1
  377. package/dist/transitions/events.d.ts +7 -0
  378. package/dist/transitions/router.js +7 -3
  379. package/dist/transitions/swap-functions.js +4 -0
  380. package/dist/types/astro.d.ts +8 -6
  381. package/dist/types/public/config.d.ts +404 -288
  382. package/dist/types/public/context.d.ts +3 -4
  383. package/dist/types/public/index.d.ts +2 -1
  384. package/dist/types/public/integrations.d.ts +23 -1
  385. package/dist/types/public/internal.d.ts +1 -16
  386. package/dist/types/public/preview.d.ts +6 -0
  387. package/dist/virtual-modules/i18n.d.ts +10 -2
  388. package/dist/virtual-modules/i18n.js +16 -7
  389. package/dist/virtual-modules/live-config.d.ts +1 -1
  390. package/dist/virtual-modules/live-config.js +1 -1
  391. package/dist/virtual-modules/middleware.d.ts +2 -1
  392. package/dist/virtual-modules/middleware.js +2 -1
  393. package/dist/vite-plugin-adapter-config/index.js +3 -2
  394. package/dist/vite-plugin-app/app.d.ts +47 -0
  395. package/dist/vite-plugin-app/app.js +410 -0
  396. package/dist/vite-plugin-app/createAstroServerApp.d.ts +8 -0
  397. package/dist/vite-plugin-app/createAstroServerApp.js +56 -0
  398. package/dist/vite-plugin-app/index.d.ts +3 -0
  399. package/dist/vite-plugin-app/index.js +16 -0
  400. package/dist/{vite-plugin-astro-server → vite-plugin-app}/pipeline.d.ts +6 -7
  401. package/dist/vite-plugin-app/pipeline.js +166 -0
  402. package/dist/vite-plugin-astro/index.js +21 -7
  403. package/dist/vite-plugin-astro-server/base.js +1 -1
  404. package/dist/vite-plugin-astro-server/controller.d.ts +1 -1
  405. package/dist/vite-plugin-astro-server/error.d.ts +3 -4
  406. package/dist/vite-plugin-astro-server/error.js +2 -5
  407. package/dist/vite-plugin-astro-server/index.d.ts +1 -2
  408. package/dist/vite-plugin-astro-server/index.js +6 -4
  409. package/dist/vite-plugin-astro-server/metadata.js +1 -1
  410. package/dist/vite-plugin-astro-server/plugin.d.ts +4 -7
  411. package/dist/vite-plugin-astro-server/plugin.js +54 -65
  412. package/dist/vite-plugin-astro-server/server-state.d.ts +1 -1
  413. package/dist/vite-plugin-astro-server/util.d.ts +0 -2
  414. package/dist/vite-plugin-astro-server/util.js +1 -2
  415. package/dist/vite-plugin-astro-server/vite.d.ts +2 -2
  416. package/dist/vite-plugin-astro-server/vite.js +7 -7
  417. package/dist/vite-plugin-config-alias/index.js +40 -32
  418. package/dist/vite-plugin-css/index.d.ts +18 -0
  419. package/dist/vite-plugin-css/index.js +134 -0
  420. package/dist/vite-plugin-css/util.d.ts +5 -0
  421. package/dist/vite-plugin-css/util.js +8 -0
  422. package/dist/vite-plugin-environment/index.d.ts +15 -0
  423. package/dist/vite-plugin-environment/index.js +77 -0
  424. package/dist/vite-plugin-head/index.d.ts +1 -2
  425. package/dist/vite-plugin-head/index.js +42 -58
  426. package/dist/vite-plugin-hmr-reload/index.js +2 -1
  427. package/dist/vite-plugin-pages/const.d.ts +2 -0
  428. package/dist/vite-plugin-pages/const.js +6 -0
  429. package/dist/vite-plugin-pages/index.d.ts +2 -0
  430. package/dist/vite-plugin-pages/index.js +7 -0
  431. package/dist/vite-plugin-pages/page.d.ts +7 -0
  432. package/dist/vite-plugin-pages/page.js +48 -0
  433. package/dist/vite-plugin-pages/pages.d.ts +8 -0
  434. package/dist/vite-plugin-pages/pages.js +57 -0
  435. package/dist/vite-plugin-pages/util.d.ts +8 -0
  436. package/dist/vite-plugin-pages/util.js +15 -0
  437. package/dist/vite-plugin-renderers/index.d.ts +9 -0
  438. package/dist/vite-plugin-renderers/index.js +40 -0
  439. package/dist/vite-plugin-routes/index.d.ts +14 -0
  440. package/dist/vite-plugin-routes/index.js +177 -0
  441. package/dist/vite-plugin-scripts/index.js +2 -6
  442. package/dist/vite-plugin-scripts/page-ssr.js +3 -2
  443. package/dist/zod.d.ts +2 -2
  444. package/dist/zod.js +2 -2
  445. package/package.json +34 -31
  446. package/templates/content/module.mjs +1 -0
  447. package/templates/content/types.d.ts +24 -11
  448. package/types/actions.d.ts +1 -5
  449. package/types/content.d.ts +9 -11
  450. package/types/transitions.d.ts +25 -0
  451. package/dist/actions/loadActions.d.ts +0 -8
  452. package/dist/actions/loadActions.js +0 -13
  453. package/dist/actions/runtime/route.d.ts +0 -2
  454. package/dist/actions/runtime/shared.d.ts +0 -60
  455. package/dist/actions/runtime/shared.js +0 -296
  456. package/dist/actions/runtime/utils.d.ts +0 -25
  457. package/dist/actions/runtime/utils.js +0 -16
  458. package/dist/actions/runtime/virtual.d.ts +0 -4
  459. package/dist/actions/runtime/virtual.js +0 -127
  460. package/dist/assets/fonts/implementations/data-collector.d.ts +0 -3
  461. package/dist/assets/fonts/implementations/data-collector.js +0 -21
  462. package/dist/assets/fonts/implementations/error-handler.d.ts +0 -2
  463. package/dist/assets/fonts/implementations/error-handler.js +0 -41
  464. package/dist/assets/fonts/implementations/font-fetcher.d.ts +0 -8
  465. package/dist/assets/fonts/implementations/font-fetcher.js +0 -34
  466. package/dist/assets/fonts/implementations/font-file-reader.d.ts +0 -4
  467. package/dist/assets/fonts/implementations/font-file-reader.js +0 -26
  468. package/dist/assets/fonts/implementations/font-metrics-resolver.d.ts +0 -5
  469. package/dist/assets/fonts/implementations/font-metrics-resolver.js +0 -66
  470. package/dist/assets/fonts/implementations/font-type-extractor.d.ts +0 -4
  471. package/dist/assets/fonts/implementations/font-type-extractor.js +0 -22
  472. package/dist/assets/fonts/implementations/hasher.d.ts +0 -2
  473. package/dist/assets/fonts/implementations/hasher.js +0 -14
  474. package/dist/assets/fonts/implementations/levenshtein-string-matcher.d.ts +0 -2
  475. package/dist/assets/fonts/implementations/levenshtein-string-matcher.js +0 -147
  476. package/dist/assets/fonts/implementations/local-provider-url-resolver.d.ts +0 -5
  477. package/dist/assets/fonts/implementations/local-provider-url-resolver.js +0 -17
  478. package/dist/assets/fonts/implementations/remote-font-provider-mod-resolver.d.ts +0 -6
  479. package/dist/assets/fonts/implementations/remote-font-provider-mod-resolver.js +0 -20
  480. package/dist/assets/fonts/implementations/remote-font-provider-resolver.d.ts +0 -6
  481. package/dist/assets/fonts/implementations/remote-font-provider-resolver.js +0 -47
  482. package/dist/assets/fonts/implementations/storage.d.ts +0 -4
  483. package/dist/assets/fonts/implementations/storage.js +0 -14
  484. package/dist/assets/fonts/implementations/system-fallbacks-provider.d.ts +0 -11
  485. package/dist/assets/fonts/implementations/url-proxy-content-resolver.d.ts +0 -5
  486. package/dist/assets/fonts/implementations/url-proxy-content-resolver.js +0 -28
  487. package/dist/assets/fonts/implementations/url-proxy-hash-resolver.d.ts +0 -8
  488. package/dist/assets/fonts/implementations/url-proxy-hash-resolver.js +0 -39
  489. package/dist/assets/fonts/implementations/url-proxy.d.ts +0 -7
  490. package/dist/assets/fonts/implementations/url-proxy.js +0 -31
  491. package/dist/assets/fonts/implementations/url-resolver.d.ts +0 -11
  492. package/dist/assets/fonts/implementations/url-resolver.js +0 -55
  493. package/dist/assets/utils/node/emitAsset.d.ts +0 -15
  494. package/dist/assets/utils/transformToPath.js +0 -32
  495. package/dist/cli/docs/domains/platform.d.ts +0 -1
  496. package/dist/cli/docs/infra/process-platform-provider.d.ts +0 -2
  497. package/dist/cli/docs/infra/process-platform-provider.js +0 -11
  498. package/dist/cli/docs/infra/tinyexec-command-executor.d.ts +0 -2
  499. package/dist/cli/docs/infra/tinyexec-command-executor.js +0 -30
  500. package/dist/cli/info/index.d.ts +0 -12
  501. package/dist/cli/info/index.js +0 -267
  502. package/dist/cli/infra/picocolors-text-styler.d.ts +0 -2
  503. package/dist/cli/infra/picocolors-text-styler.js +0 -7
  504. package/dist/core/build/css-asset-name.d.ts +0 -9
  505. package/dist/core/build/css-asset-name.js +0 -89
  506. package/dist/core/build/plugin.d.ts +0 -43
  507. package/dist/core/build/plugin.js +0 -61
  508. package/dist/core/build/plugins/plugin-actions.d.ts +0 -4
  509. package/dist/core/build/plugins/plugin-actions.js +0 -16
  510. package/dist/core/build/plugins/plugin-chunks.d.ts +0 -2
  511. package/dist/core/build/plugins/plugin-chunks.js +0 -33
  512. package/dist/core/build/plugins/plugin-pages.d.ts +0 -6
  513. package/dist/core/build/plugins/plugin-pages.js +0 -66
  514. package/dist/core/build/plugins/plugin-renderers.d.ts +0 -5
  515. package/dist/core/build/plugins/plugin-renderers.js +0 -54
  516. package/dist/core/middleware/loadMiddleware.d.ts +0 -7
  517. package/dist/core/middleware/loadMiddleware.js +0 -14
  518. package/dist/core/redirects/helpers.d.ts +0 -7
  519. package/dist/core/redirects/helpers.js +0 -10
  520. package/dist/core/routing/manifest/serialization.d.ts +0 -5
  521. package/dist/core/routing/manifest/serialization.js +0 -37
  522. package/dist/prerender/metadata.d.ts +0 -8
  523. package/dist/prerender/metadata.js +0 -18
  524. package/dist/vite-plugin-astro-server/css.d.ts +0 -13
  525. package/dist/vite-plugin-astro-server/css.js +0 -48
  526. package/dist/vite-plugin-astro-server/pipeline.js +0 -161
  527. package/dist/vite-plugin-astro-server/request.d.ts +0 -14
  528. package/dist/vite-plugin-astro-server/request.js +0 -66
  529. package/dist/vite-plugin-astro-server/route.d.ts +0 -25
  530. package/dist/vite-plugin-astro-server/route.js +0 -283
  531. package/dist/vite-plugin-scanner/index.d.ts +0 -10
  532. package/dist/vite-plugin-scanner/index.js +0 -87
  533. package/dist/vite-plugin-ssr-manifest/index.d.ts +0 -2
  534. package/dist/vite-plugin-ssr-manifest/index.js +0 -26
  535. /package/dist/{cli/docs/domains/platform.js → actions/runtime/types.js} +0 -0
  536. /package/dist/assets/fonts/{logic → core}/extract-unifont-providers.d.ts +0 -0
  537. /package/dist/assets/fonts/{logic → core}/extract-unifont-providers.js +0 -0
  538. /package/dist/assets/fonts/{logic → core}/normalize-remote-font-faces.d.ts +0 -0
  539. /package/dist/assets/fonts/{logic → core}/normalize-remote-font-faces.js +0 -0
  540. /package/dist/assets/fonts/{logic → core}/optimize-fallbacks.d.ts +0 -0
  541. /package/dist/assets/fonts/{logic → core}/optimize-fallbacks.js +0 -0
  542. /package/dist/assets/fonts/{logic → core}/resolve-families.d.ts +0 -0
  543. /package/dist/assets/fonts/{logic → core}/resolve-families.js +0 -0
@@ -1,491 +1,25 @@
1
+ import { App } from "./app.js";
2
+ import { BaseApp } from "./base.js";
3
+ import { fromRoutingStrategy, toRoutingStrategy } from "./common.js";
4
+ import { createConsoleLogger } from "./logging.js";
1
5
  import {
2
- collapseDuplicateTrailingSlashes,
3
- hasFileExtension,
4
- isInternalPath
5
- } from "@astrojs/internal-helpers/path";
6
- import { matchPattern } from "../../assets/utils/remotePattern.js";
7
- import { normalizeTheLocale } from "../../i18n/index.js";
8
- import {
9
- clientAddressSymbol,
10
- DEFAULT_404_COMPONENT,
11
- REROUTABLE_STATUS_CODES,
12
- REROUTE_DIRECTIVE_HEADER,
13
- responseSentSymbol
14
- } from "../constants.js";
15
- import { getSetCookiesFromResponse } from "../cookies/index.js";
16
- import { AstroError, AstroErrorData } from "../errors/index.js";
17
- import { consoleLogDestination } from "../logger/console.js";
18
- import { AstroIntegrationLogger, Logger } from "../logger/core.js";
19
- import { NOOP_MIDDLEWARE_FN } from "../middleware/noop-middleware.js";
20
- import {
21
- appendForwardSlash,
22
- joinPaths,
23
- prependForwardSlash,
24
- removeTrailingForwardSlash
25
- } from "../path.js";
26
- import { createAssetLink } from "../render/ssr-element.js";
27
- import { RenderContext } from "../render-context.js";
28
- import { redirectTemplate } from "../routing/3xx.js";
29
- import { ensure404Route } from "../routing/astro-designed-error-pages.js";
30
- import { createDefaultRoutes } from "../routing/default.js";
31
- import { matchRoute } from "../routing/match.js";
32
- import { PERSIST_SYMBOL } from "../session.js";
6
+ deserializeManifest,
7
+ deserializeRouteData,
8
+ deserializeRouteInfo,
9
+ serializeRouteData,
10
+ serializeRouteInfo
11
+ } from "./manifest.js";
33
12
  import { AppPipeline } from "./pipeline.js";
34
- import { deserializeManifest } from "./common.js";
35
- class App {
36
- #manifest;
37
- #manifestData;
38
- #logger = new Logger({
39
- dest: consoleLogDestination,
40
- level: "info"
41
- });
42
- #baseWithoutTrailingSlash;
43
- #pipeline;
44
- #adapterLogger;
45
- constructor(manifest, streaming = true) {
46
- this.#manifest = manifest;
47
- this.#manifestData = {
48
- routes: manifest.routes.map((route) => route.routeData)
49
- };
50
- ensure404Route(this.#manifestData);
51
- this.#baseWithoutTrailingSlash = removeTrailingForwardSlash(this.#manifest.base);
52
- this.#pipeline = this.#createPipeline(streaming);
53
- this.#adapterLogger = new AstroIntegrationLogger(
54
- this.#logger.options,
55
- this.#manifest.adapterName
56
- );
57
- }
58
- getAdapterLogger() {
59
- return this.#adapterLogger;
60
- }
61
- getAllowedDomains() {
62
- return this.#manifest.allowedDomains;
63
- }
64
- get manifest() {
65
- return this.#manifest;
66
- }
67
- set manifest(value) {
68
- this.#manifest = value;
69
- }
70
- matchesAllowedDomains(forwardedHost, protocol) {
71
- return App.validateForwardedHost(forwardedHost, this.#manifest.allowedDomains, protocol);
72
- }
73
- static validateForwardedHost(forwardedHost, allowedDomains, protocol) {
74
- if (!allowedDomains || allowedDomains.length === 0) {
75
- return false;
76
- }
77
- try {
78
- const testUrl = new URL(`${protocol || "https"}://${forwardedHost}`);
79
- return allowedDomains.some((pattern) => {
80
- return matchPattern(testUrl, pattern);
81
- });
82
- } catch {
83
- return false;
84
- }
85
- }
86
- /**
87
- * Creates a pipeline by reading the stored manifest
88
- *
89
- * @param streaming
90
- * @private
91
- */
92
- #createPipeline(streaming = false) {
93
- return AppPipeline.create({
94
- logger: this.#logger,
95
- manifest: this.#manifest,
96
- runtimeMode: "production",
97
- renderers: this.#manifest.renderers,
98
- defaultRoutes: createDefaultRoutes(this.#manifest),
99
- resolve: async (specifier) => {
100
- if (!(specifier in this.#manifest.entryModules)) {
101
- throw new Error(`Unable to resolve [${specifier}]`);
102
- }
103
- const bundlePath = this.#manifest.entryModules[specifier];
104
- if (bundlePath.startsWith("data:") || bundlePath.length === 0) {
105
- return bundlePath;
106
- } else {
107
- return createAssetLink(bundlePath, this.#manifest.base, this.#manifest.assetsPrefix);
108
- }
109
- },
110
- serverLike: true,
111
- streaming
112
- });
113
- }
114
- set setManifestData(newManifestData) {
115
- this.#manifestData = newManifestData;
116
- }
117
- removeBase(pathname) {
118
- if (pathname.startsWith(this.#manifest.base)) {
119
- return pathname.slice(this.#baseWithoutTrailingSlash.length + 1);
120
- }
121
- return pathname;
122
- }
123
- /**
124
- * It removes the base from the request URL, prepends it with a forward slash and attempts to decoded it.
125
- *
126
- * If the decoding fails, it logs the error and return the pathname as is.
127
- * @param request
128
- * @private
129
- */
130
- #getPathnameFromRequest(request) {
131
- const url = new URL(request.url);
132
- const pathname = prependForwardSlash(this.removeBase(url.pathname));
133
- try {
134
- return decodeURI(pathname);
135
- } catch (e) {
136
- this.getAdapterLogger().error(e.toString());
137
- return pathname;
138
- }
139
- }
140
- /**
141
- * Given a `Request`, it returns the `RouteData` that matches its `pathname`. By default, prerendered
142
- * routes aren't returned, even if they are matched.
143
- *
144
- * When `allowPrerenderedRoutes` is `true`, the function returns matched prerendered routes too.
145
- * @param request
146
- * @param allowPrerenderedRoutes
147
- */
148
- match(request, allowPrerenderedRoutes = false) {
149
- const url = new URL(request.url);
150
- if (this.#manifest.assets.has(url.pathname)) return void 0;
151
- let pathname = this.#computePathnameFromDomain(request);
152
- if (!pathname) {
153
- pathname = prependForwardSlash(this.removeBase(url.pathname));
154
- }
155
- let routeData = matchRoute(decodeURI(pathname), this.#manifestData);
156
- if (!routeData) return void 0;
157
- if (allowPrerenderedRoutes) {
158
- return routeData;
159
- } else if (routeData.prerender) {
160
- return void 0;
161
- }
162
- return routeData;
163
- }
164
- #computePathnameFromDomain(request) {
165
- let pathname = void 0;
166
- const url = new URL(request.url);
167
- if (this.#manifest.i18n && (this.#manifest.i18n.strategy === "domains-prefix-always" || this.#manifest.i18n.strategy === "domains-prefix-other-locales" || this.#manifest.i18n.strategy === "domains-prefix-always-no-redirect")) {
168
- let forwardedHost = request.headers.get("X-Forwarded-Host");
169
- let protocol = request.headers.get("X-Forwarded-Proto");
170
- if (protocol) {
171
- protocol = protocol + ":";
172
- } else {
173
- protocol = url.protocol;
174
- }
175
- if (forwardedHost && !this.matchesAllowedDomains(forwardedHost, protocol?.replace(":", ""))) {
176
- forwardedHost = null;
177
- }
178
- let host = forwardedHost;
179
- if (!host) {
180
- host = request.headers.get("Host");
181
- }
182
- if (host && protocol) {
183
- host = host.split(":")[0];
184
- try {
185
- let locale;
186
- const hostAsUrl = new URL(`${protocol}//${host}`);
187
- for (const [domainKey, localeValue] of Object.entries(
188
- this.#manifest.i18n.domainLookupTable
189
- )) {
190
- const domainKeyAsUrl = new URL(domainKey);
191
- if (hostAsUrl.host === domainKeyAsUrl.host && hostAsUrl.protocol === domainKeyAsUrl.protocol) {
192
- locale = localeValue;
193
- break;
194
- }
195
- }
196
- if (locale) {
197
- pathname = prependForwardSlash(
198
- joinPaths(normalizeTheLocale(locale), this.removeBase(url.pathname))
199
- );
200
- if (url.pathname.endsWith("/")) {
201
- pathname = appendForwardSlash(pathname);
202
- }
203
- }
204
- } catch (e) {
205
- this.#logger.error(
206
- "router",
207
- `Astro tried to parse ${protocol}//${host} as an URL, but it threw a parsing error. Check the X-Forwarded-Host and X-Forwarded-Proto headers.`
208
- );
209
- this.#logger.error("router", `Error: ${e}`);
210
- }
211
- }
212
- }
213
- return pathname;
214
- }
215
- #redirectTrailingSlash(pathname) {
216
- const { trailingSlash } = this.#manifest;
217
- if (pathname === "/" || isInternalPath(pathname)) {
218
- return pathname;
219
- }
220
- const path = collapseDuplicateTrailingSlashes(pathname, trailingSlash !== "never");
221
- if (path !== pathname) {
222
- return path;
223
- }
224
- if (trailingSlash === "ignore") {
225
- return pathname;
226
- }
227
- if (trailingSlash === "always" && !hasFileExtension(pathname)) {
228
- return appendForwardSlash(pathname);
229
- }
230
- if (trailingSlash === "never") {
231
- return removeTrailingForwardSlash(pathname);
232
- }
233
- return pathname;
234
- }
235
- async render(request, {
236
- addCookieHeader,
237
- clientAddress = Reflect.get(request, clientAddressSymbol),
238
- locals,
239
- prerenderedErrorPageFetch = fetch,
240
- routeData
241
- } = {}) {
242
- const url = new URL(request.url);
243
- const redirect = this.#redirectTrailingSlash(url.pathname);
244
- if (redirect !== url.pathname) {
245
- const status = request.method === "GET" ? 301 : 308;
246
- return new Response(
247
- redirectTemplate({
248
- status,
249
- relativeLocation: url.pathname,
250
- absoluteLocation: redirect,
251
- from: request.url
252
- }),
253
- {
254
- status,
255
- headers: {
256
- location: redirect + url.search
257
- }
258
- }
259
- );
260
- }
261
- if (routeData) {
262
- this.#logger.debug(
263
- "router",
264
- "The adapter " + this.#manifest.adapterName + " provided a custom RouteData for ",
265
- request.url
266
- );
267
- this.#logger.debug("router", "RouteData:\n" + routeData);
268
- }
269
- if (locals) {
270
- if (typeof locals !== "object") {
271
- const error = new AstroError(AstroErrorData.LocalsNotAnObject);
272
- this.#logger.error(null, error.stack);
273
- return this.#renderError(request, {
274
- status: 500,
275
- error,
276
- clientAddress,
277
- prerenderedErrorPageFetch
278
- });
279
- }
280
- }
281
- if (!routeData) {
282
- routeData = this.match(request);
283
- this.#logger.debug("router", "Astro matched the following route for " + request.url);
284
- this.#logger.debug("router", "RouteData:\n" + routeData);
285
- }
286
- if (!routeData) {
287
- routeData = this.#manifestData.routes.find(
288
- (route) => route.component === "404.astro" || route.component === DEFAULT_404_COMPONENT
289
- );
290
- }
291
- if (!routeData) {
292
- this.#logger.debug("router", "Astro hasn't found routes that match " + request.url);
293
- this.#logger.debug("router", "Here's the available routes:\n", this.#manifestData);
294
- return this.#renderError(request, {
295
- locals,
296
- status: 404,
297
- clientAddress,
298
- prerenderedErrorPageFetch
299
- });
300
- }
301
- const pathname = this.#getPathnameFromRequest(request);
302
- const defaultStatus = this.#getDefaultStatusCode(routeData, pathname);
303
- let response;
304
- let session;
305
- try {
306
- const mod = await this.#pipeline.getModuleForRoute(routeData);
307
- const renderContext = await RenderContext.create({
308
- pipeline: this.#pipeline,
309
- locals,
310
- pathname,
311
- request,
312
- routeData,
313
- status: defaultStatus,
314
- clientAddress
315
- });
316
- session = renderContext.session;
317
- response = await renderContext.render(await mod.page());
318
- } catch (err) {
319
- this.#logger.error(null, err.stack || err.message || String(err));
320
- return this.#renderError(request, {
321
- locals,
322
- status: 500,
323
- error: err,
324
- clientAddress,
325
- prerenderedErrorPageFetch
326
- });
327
- } finally {
328
- await session?.[PERSIST_SYMBOL]();
329
- }
330
- if (REROUTABLE_STATUS_CODES.includes(response.status) && response.headers.get(REROUTE_DIRECTIVE_HEADER) !== "no") {
331
- return this.#renderError(request, {
332
- locals,
333
- response,
334
- status: response.status,
335
- // We don't have an error to report here. Passing null means we pass nothing intentionally
336
- // while undefined means there's no error
337
- error: response.status === 500 ? null : void 0,
338
- clientAddress,
339
- prerenderedErrorPageFetch
340
- });
341
- }
342
- if (response.headers.has(REROUTE_DIRECTIVE_HEADER)) {
343
- response.headers.delete(REROUTE_DIRECTIVE_HEADER);
344
- }
345
- if (addCookieHeader) {
346
- for (const setCookieHeaderValue of App.getSetCookieFromResponse(response)) {
347
- response.headers.append("set-cookie", setCookieHeaderValue);
348
- }
349
- }
350
- Reflect.set(response, responseSentSymbol, true);
351
- return response;
352
- }
353
- setCookieHeaders(response) {
354
- return getSetCookiesFromResponse(response);
355
- }
356
- /**
357
- * Reads all the cookies written by `Astro.cookie.set()` onto the passed response.
358
- * For example,
359
- * ```ts
360
- * for (const cookie_ of App.getSetCookieFromResponse(response)) {
361
- * const cookie: string = cookie_
362
- * }
363
- * ```
364
- * @param response The response to read cookies from.
365
- * @returns An iterator that yields key-value pairs as equal-sign-separated strings.
366
- */
367
- static getSetCookieFromResponse = getSetCookiesFromResponse;
368
- /**
369
- * If it is a known error code, try sending the according page (e.g. 404.astro / 500.astro).
370
- * This also handles pre-rendered /404 or /500 routes
371
- */
372
- async #renderError(request, {
373
- locals,
374
- status,
375
- response: originalResponse,
376
- skipMiddleware = false,
377
- error,
378
- clientAddress,
379
- prerenderedErrorPageFetch
380
- }) {
381
- const errorRoutePath = `/${status}${this.#manifest.trailingSlash === "always" ? "/" : ""}`;
382
- const errorRouteData = matchRoute(errorRoutePath, this.#manifestData);
383
- const url = new URL(request.url);
384
- if (errorRouteData) {
385
- if (errorRouteData.prerender) {
386
- const maybeDotHtml = errorRouteData.route.endsWith(`/${status}`) ? ".html" : "";
387
- const statusURL = new URL(
388
- `${this.#baseWithoutTrailingSlash}/${status}${maybeDotHtml}`,
389
- url
390
- );
391
- if (statusURL.toString() !== request.url) {
392
- const response2 = await prerenderedErrorPageFetch(statusURL.toString());
393
- const override = { status, removeContentEncodingHeaders: true };
394
- return this.#mergeResponses(response2, originalResponse, override);
395
- }
396
- }
397
- const mod = await this.#pipeline.getModuleForRoute(errorRouteData);
398
- let session;
399
- try {
400
- const renderContext = await RenderContext.create({
401
- locals,
402
- pipeline: this.#pipeline,
403
- middleware: skipMiddleware ? NOOP_MIDDLEWARE_FN : void 0,
404
- pathname: this.#getPathnameFromRequest(request),
405
- request,
406
- routeData: errorRouteData,
407
- status,
408
- props: { error },
409
- clientAddress
410
- });
411
- session = renderContext.session;
412
- const response2 = await renderContext.render(await mod.page());
413
- return this.#mergeResponses(response2, originalResponse);
414
- } catch {
415
- if (skipMiddleware === false) {
416
- return this.#renderError(request, {
417
- locals,
418
- status,
419
- response: originalResponse,
420
- skipMiddleware: true,
421
- clientAddress,
422
- prerenderedErrorPageFetch
423
- });
424
- }
425
- } finally {
426
- await session?.[PERSIST_SYMBOL]();
427
- }
428
- }
429
- const response = this.#mergeResponses(new Response(null, { status }), originalResponse);
430
- Reflect.set(response, responseSentSymbol, true);
431
- return response;
432
- }
433
- #mergeResponses(newResponse, originalResponse, override) {
434
- let newResponseHeaders = newResponse.headers;
435
- if (override?.removeContentEncodingHeaders) {
436
- newResponseHeaders = new Headers(newResponseHeaders);
437
- newResponseHeaders.delete("Content-Encoding");
438
- newResponseHeaders.delete("Content-Length");
439
- }
440
- if (!originalResponse) {
441
- if (override !== void 0) {
442
- return new Response(newResponse.body, {
443
- status: override.status,
444
- statusText: newResponse.statusText,
445
- headers: newResponseHeaders
446
- });
447
- }
448
- return newResponse;
449
- }
450
- const status = override?.status ? override.status : originalResponse.status === 200 ? newResponse.status : originalResponse.status;
451
- try {
452
- originalResponse.headers.delete("Content-type");
453
- } catch {
454
- }
455
- const mergedHeaders = new Map([
456
- ...Array.from(newResponseHeaders),
457
- ...Array.from(originalResponse.headers)
458
- ]);
459
- const newHeaders = new Headers();
460
- for (const [name, value] of mergedHeaders) {
461
- newHeaders.set(name, value);
462
- }
463
- return new Response(newResponse.body, {
464
- status,
465
- statusText: status === 200 ? newResponse.statusText : originalResponse.statusText,
466
- // If you're looking at here for possible bugs, it means that it's not a bug.
467
- // With the middleware, users can meddle with headers, and we should pass to the 404/500.
468
- // If users see something weird, it's because they are setting some headers they should not.
469
- //
470
- // Although, we don't want it to replace the content-type, because the error page must return `text/html`
471
- headers: newHeaders
472
- });
473
- }
474
- #getDefaultStatusCode(routeData, pathname) {
475
- if (!routeData.pattern.test(pathname)) {
476
- for (const fallbackRoute of routeData.fallbackRoutes) {
477
- if (fallbackRoute.pattern.test(pathname)) {
478
- return 302;
479
- }
480
- }
481
- }
482
- const route = removeTrailingForwardSlash(routeData.route);
483
- if (route.endsWith("/404")) return 404;
484
- if (route.endsWith("/500")) return 500;
485
- return 200;
486
- }
487
- }
488
13
  export {
489
14
  App,
490
- deserializeManifest
15
+ AppPipeline,
16
+ BaseApp,
17
+ createConsoleLogger,
18
+ deserializeManifest,
19
+ deserializeRouteData,
20
+ deserializeRouteInfo,
21
+ fromRoutingStrategy,
22
+ serializeRouteData,
23
+ serializeRouteInfo,
24
+ toRoutingStrategy
491
25
  };
@@ -0,0 +1,3 @@
1
+ import type { AstroInlineConfig } from '../../types/public/index.js';
2
+ import { Logger } from '../logger/core.js';
3
+ export declare function createConsoleLogger(level: AstroInlineConfig['logLevel']): Logger;
@@ -0,0 +1,11 @@
1
+ import { consoleLogDestination } from "../logger/console.js";
2
+ import { Logger } from "../logger/core.js";
3
+ function createConsoleLogger(level) {
4
+ return new Logger({
5
+ dest: consoleLogDestination,
6
+ level: level ?? "info"
7
+ });
8
+ }
9
+ export {
10
+ createConsoleLogger
11
+ };
@@ -0,0 +1,9 @@
1
+ import type { SerializedRouteData } from '../../types/astro.js';
2
+ import type { AstroConfig, RouteData } from '../../types/public/index.js';
3
+ import type { RoutesList } from '../../types/astro.js';
4
+ import type { RouteInfo, SerializedSSRManifest, SSRManifest, SerializedRouteInfo } from './types.js';
5
+ export declare function deserializeManifest(serializedManifest: SerializedSSRManifest, routesList?: RoutesList): SSRManifest;
6
+ export declare function serializeRouteData(routeData: RouteData, trailingSlash: AstroConfig['trailingSlash']): SerializedRouteData;
7
+ export declare function deserializeRouteData(rawRouteData: SerializedRouteData): RouteData;
8
+ export declare function serializeRouteInfo(routeInfo: RouteInfo, trailingSlash: AstroConfig['trailingSlash']): SerializedRouteInfo;
9
+ export declare function deserializeRouteInfo(rawRouteInfo: SerializedRouteInfo): RouteInfo;
@@ -0,0 +1,107 @@
1
+ import { decodeKey } from "../encryption.js";
2
+ import { NOOP_MIDDLEWARE_FN } from "../middleware/noop-middleware.js";
3
+ function deserializeManifest(serializedManifest, routesList) {
4
+ const routes = [];
5
+ if (serializedManifest.routes) {
6
+ for (const serializedRoute of serializedManifest.routes) {
7
+ routes.push({
8
+ ...serializedRoute,
9
+ routeData: deserializeRouteData(serializedRoute.routeData)
10
+ });
11
+ const route = serializedRoute;
12
+ route.routeData = deserializeRouteData(serializedRoute.routeData);
13
+ }
14
+ }
15
+ if (routesList) {
16
+ for (const route of routesList?.routes) {
17
+ routes.push({
18
+ file: "",
19
+ links: [],
20
+ scripts: [],
21
+ styles: [],
22
+ routeData: route
23
+ });
24
+ }
25
+ }
26
+ const assets = new Set(serializedManifest.assets);
27
+ const componentMetadata = new Map(serializedManifest.componentMetadata);
28
+ const inlinedScripts = new Map(serializedManifest.inlinedScripts);
29
+ const clientDirectives = new Map(serializedManifest.clientDirectives);
30
+ const key = decodeKey(serializedManifest.key);
31
+ return {
32
+ // in case user middleware exists, this no-op middleware will be reassigned (see plugin-ssr.ts)
33
+ middleware() {
34
+ return { onRequest: NOOP_MIDDLEWARE_FN };
35
+ },
36
+ ...serializedManifest,
37
+ rootDir: new URL(serializedManifest.rootDir),
38
+ srcDir: new URL(serializedManifest.srcDir),
39
+ publicDir: new URL(serializedManifest.publicDir),
40
+ outDir: new URL(serializedManifest.outDir),
41
+ cacheDir: new URL(serializedManifest.cacheDir),
42
+ buildClientDir: new URL(serializedManifest.buildClientDir),
43
+ buildServerDir: new URL(serializedManifest.buildServerDir),
44
+ assets,
45
+ componentMetadata,
46
+ inlinedScripts,
47
+ clientDirectives,
48
+ routes,
49
+ key
50
+ };
51
+ }
52
+ function serializeRouteData(routeData, trailingSlash) {
53
+ return {
54
+ ...routeData,
55
+ pattern: routeData.pattern.source,
56
+ redirectRoute: routeData.redirectRoute ? serializeRouteData(routeData.redirectRoute, trailingSlash) : void 0,
57
+ fallbackRoutes: routeData.fallbackRoutes.map((fallbackRoute) => {
58
+ return serializeRouteData(fallbackRoute, trailingSlash);
59
+ }),
60
+ _meta: { trailingSlash }
61
+ };
62
+ }
63
+ function deserializeRouteData(rawRouteData) {
64
+ return {
65
+ route: rawRouteData.route,
66
+ type: rawRouteData.type,
67
+ pattern: new RegExp(rawRouteData.pattern),
68
+ params: rawRouteData.params,
69
+ component: rawRouteData.component,
70
+ pathname: rawRouteData.pathname || void 0,
71
+ segments: rawRouteData.segments,
72
+ prerender: rawRouteData.prerender,
73
+ redirect: rawRouteData.redirect,
74
+ redirectRoute: rawRouteData.redirectRoute ? deserializeRouteData(rawRouteData.redirectRoute) : void 0,
75
+ fallbackRoutes: rawRouteData.fallbackRoutes.map((fallback) => {
76
+ return deserializeRouteData(fallback);
77
+ }),
78
+ isIndex: rawRouteData.isIndex,
79
+ origin: rawRouteData.origin,
80
+ distURL: rawRouteData.distURL
81
+ };
82
+ }
83
+ function serializeRouteInfo(routeInfo, trailingSlash) {
84
+ return {
85
+ styles: routeInfo.styles,
86
+ file: routeInfo.file,
87
+ links: routeInfo.links,
88
+ scripts: routeInfo.scripts,
89
+ routeData: serializeRouteData(routeInfo.routeData, trailingSlash)
90
+ };
91
+ }
92
+ function deserializeRouteInfo(rawRouteInfo) {
93
+ return {
94
+ styles: rawRouteInfo.styles,
95
+ file: rawRouteInfo.file,
96
+ links: rawRouteInfo.links,
97
+ scripts: rawRouteInfo.scripts,
98
+ routeData: deserializeRouteData(rawRouteInfo.routeData)
99
+ };
100
+ }
101
+ export {
102
+ deserializeManifest,
103
+ deserializeRouteData,
104
+ deserializeRouteInfo,
105
+ serializeRouteData,
106
+ serializeRouteInfo
107
+ };
@@ -1,4 +1,4 @@
1
- import { defineMiddleware } from "../middleware/index.js";
1
+ import { defineMiddleware } from "../middleware/defineMiddleware.js";
2
2
  const FORM_CONTENT_TYPES = [
3
3
  "application/x-www-form-urlencoded",
4
4
  "multipart/form-data",
@@ -1,9 +1,10 @@
1
1
  import fs from "node:fs";
2
2
  import { Http2ServerResponse } from "node:http2";
3
3
  import { clientAddressSymbol, nodeRequestAbortControllerCleanupSymbol } from "../constants.js";
4
- import { deserializeManifest } from "./common.js";
4
+ import { deserializeManifest } from "./manifest.js";
5
5
  import { createOutgoingHttpHeaders } from "./createOutgoingHttpHeaders.js";
6
6
  import { App } from "./index.js";
7
+ import { sanitizeHost, validateForwardedHeaders } from "./validate-forwarded-headers.js";
7
8
  class NodeApp extends App {
8
9
  headersMap = void 0;
9
10
  setHeadersMap(headers) {
@@ -48,20 +49,20 @@ class NodeApp extends App {
48
49
  const getFirstForwardedValue = (multiValueHeader) => {
49
50
  return multiValueHeader?.toString()?.split(",").map((e) => e.trim())?.[0];
50
51
  };
51
- const forwardedProtocol = getFirstForwardedValue(req.headers["x-forwarded-proto"]);
52
52
  const providedProtocol = isEncrypted ? "https" : "http";
53
- const protocol = forwardedProtocol ?? providedProtocol;
54
- let forwardedHostname = getFirstForwardedValue(req.headers["x-forwarded-host"]);
55
53
  const providedHostname = req.headers.host ?? req.headers[":authority"];
56
- if (forwardedHostname && !App.validateForwardedHost(
57
- forwardedHostname,
58
- allowedDomains,
59
- forwardedProtocol ?? providedProtocol
60
- )) {
61
- forwardedHostname = void 0;
62
- }
63
- const hostname = forwardedHostname ?? providedHostname;
64
- const port = getFirstForwardedValue(req.headers["x-forwarded-port"]);
54
+ const validated = validateForwardedHeaders(
55
+ getFirstForwardedValue(req.headers["x-forwarded-proto"]),
56
+ getFirstForwardedValue(req.headers["x-forwarded-host"]),
57
+ getFirstForwardedValue(req.headers["x-forwarded-port"]),
58
+ allowedDomains
59
+ );
60
+ const protocol = validated.protocol ?? providedProtocol;
61
+ const sanitizedProvidedHostname = sanitizeHost(
62
+ typeof providedHostname === "string" ? providedHostname : void 0
63
+ );
64
+ const hostname = validated.host ?? sanitizedProvidedHostname;
65
+ const port = validated.port;
65
66
  let url;
66
67
  try {
67
68
  const hostnamePort = getHostnamePort(hostname, port);