blume 1.7.2 → 2.0.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 (677) hide show
  1. package/AGENTS.md +19 -0
  2. package/CHANGELOG.md +227 -0
  3. package/README.md +34 -21
  4. package/dist/cli/chunk-11j0384y.js +148 -0
  5. package/dist/cli/chunk-11j0384y.js.map +10 -0
  6. package/dist/cli/{chunk-xhtpx3ff.js → chunk-1w8dp3qb.js} +17 -16
  7. package/dist/cli/{chunk-xhtpx3ff.js.map → chunk-1w8dp3qb.js.map} +3 -3
  8. package/dist/cli/chunk-2q1dwty4.js +75 -0
  9. package/dist/cli/chunk-2q1dwty4.js.map +11 -0
  10. package/dist/cli/chunk-41za066z.js +122 -0
  11. package/dist/cli/chunk-41za066z.js.map +11 -0
  12. package/dist/cli/chunk-5a2z0198.js +133 -0
  13. package/dist/cli/chunk-5a2z0198.js.map +10 -0
  14. package/dist/cli/{chunk-9he6crym.js → chunk-6k8vp3ta.js} +25 -13
  15. package/dist/cli/{chunk-9he6crym.js.map → chunk-6k8vp3ta.js.map} +4 -4
  16. package/dist/cli/{chunk-mt76t7dj.js → chunk-79njf86q.js} +133 -54
  17. package/dist/cli/chunk-79njf86q.js.map +11 -0
  18. package/dist/cli/{chunk-3w7b2vcx.js → chunk-7ez8ny0t.js} +2 -2
  19. package/dist/cli/{chunk-688e0dde.js → chunk-88cpgt6h.js} +1 -1
  20. package/dist/cli/chunk-a9kptbw5.js +361 -0
  21. package/dist/cli/chunk-a9kptbw5.js.map +14 -0
  22. package/dist/cli/chunk-abh8yjkn.js +31 -0
  23. package/dist/cli/chunk-abh8yjkn.js.map +10 -0
  24. package/dist/cli/chunk-b5aj94ah.js +91 -0
  25. package/dist/cli/chunk-b5aj94ah.js.map +10 -0
  26. package/dist/cli/{chunk-hs3gbh8p.js → chunk-bctazmbk.js} +9 -5
  27. package/dist/cli/chunk-bctazmbk.js.map +10 -0
  28. package/dist/cli/chunk-beat36xx.js +279 -0
  29. package/dist/cli/chunk-beat36xx.js.map +10 -0
  30. package/dist/cli/chunk-bnbmcwfb.js +145 -0
  31. package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
  32. package/dist/cli/{chunk-9bkjd11x.js → chunk-bw22s759.js} +15 -5
  33. package/dist/cli/{chunk-9bkjd11x.js.map → chunk-bw22s759.js.map} +4 -4
  34. package/dist/cli/chunk-by2290sx.js +39 -0
  35. package/dist/cli/chunk-by2290sx.js.map +10 -0
  36. package/dist/cli/chunk-d1tadaw7.js +79 -0
  37. package/dist/cli/chunk-d1tadaw7.js.map +10 -0
  38. package/dist/cli/{chunk-t3tj0dgr.js → chunk-d80hr03s.js} +24 -19
  39. package/dist/cli/chunk-d80hr03s.js.map +15 -0
  40. package/dist/cli/chunk-ernrthtr.js +97 -0
  41. package/dist/cli/chunk-ernrthtr.js.map +10 -0
  42. package/dist/cli/chunk-f2972sbt.js +374 -0
  43. package/dist/cli/chunk-f2972sbt.js.map +10 -0
  44. package/dist/cli/{chunk-exeeb35e.js → chunk-f7t03s3g.js} +2 -2
  45. package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
  46. package/dist/cli/chunk-fa25z98p.js.map +11 -0
  47. package/dist/cli/{chunk-12dxjqk7.js → chunk-fh5hj5jt.js} +44 -21
  48. package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
  49. package/dist/cli/{chunk-8cd8tj54.js → chunk-j8mw0za6.js} +86 -57
  50. package/dist/cli/chunk-j8mw0za6.js.map +35 -0
  51. package/dist/cli/chunk-jts8mvcz.js +106 -0
  52. package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
  53. package/dist/cli/{chunk-ejjx8znq.js → chunk-mnqj32sj.js} +505 -536
  54. package/dist/cli/chunk-mnqj32sj.js.map +12 -0
  55. package/dist/cli/{chunk-196vjxp9.js → chunk-mwt1k8n7.js} +100 -372
  56. package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
  57. package/dist/cli/chunk-nk3ts2xk.js +51 -0
  58. package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
  59. package/dist/cli/{chunk-n9sra6sy.js → chunk-pat2zzwc.js} +10 -14
  60. package/dist/cli/{chunk-n9sra6sy.js.map → chunk-pat2zzwc.js.map} +2 -2
  61. package/dist/cli/chunk-pnnvybbk.js +176 -0
  62. package/dist/cli/chunk-pnnvybbk.js.map +11 -0
  63. package/dist/cli/{chunk-cvky9gb2.js → chunk-sqn5t4q0.js} +81 -87
  64. package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
  65. package/dist/cli/{chunk-eevwt1sc.js → chunk-tzne8qfq.js} +15 -15
  66. package/dist/cli/{chunk-eevwt1sc.js.map → chunk-tzne8qfq.js.map} +1 -1
  67. package/dist/cli/chunk-xaz13gwg.js +12449 -0
  68. package/dist/cli/chunk-xaz13gwg.js.map +182 -0
  69. package/dist/cli/chunk-y3e45rc8.js +102 -0
  70. package/dist/cli/chunk-y3e45rc8.js.map +10 -0
  71. package/dist/cli/chunk-z01ze5c1.js +261 -0
  72. package/dist/cli/chunk-z01ze5c1.js.map +10 -0
  73. package/dist/cli/{chunk-5n7t497w.js → chunk-z1f5arsg.js} +247 -755
  74. package/dist/cli/chunk-z1f5arsg.js.map +36 -0
  75. package/dist/cli/{chunk-hdm2dkd2.js → chunk-zg2gtj10.js} +1086 -2596
  76. package/dist/cli/chunk-zg2gtj10.js.map +35 -0
  77. package/dist/cli/{chunk-ppfvdcd4.js → chunk-zxccj738.js} +1 -1
  78. package/dist/cli/index.js +214 -57
  79. package/dist/cli/index.js.map +8 -7
  80. package/dist/types/ai/agent-readability.d.ts +52 -0
  81. package/dist/types/ai/ai-catalog.d.ts +42 -0
  82. package/dist/types/ai/api/paths.d.ts +17 -0
  83. package/dist/types/ai/api-catalog.d.ts +18 -0
  84. package/dist/types/ai/ask.d.ts +368 -0
  85. package/dist/types/ai/changelog-markdown.d.ts +2 -0
  86. package/dist/types/ai/component-markdown.d.ts +2 -2
  87. package/dist/types/ai/index.d.ts +24 -0
  88. package/dist/types/ai/link-headers.d.ts +24 -0
  89. package/dist/types/ai/llms.d.ts +25 -0
  90. package/dist/types/ai/markdown.d.ts +45 -0
  91. package/dist/types/ai/mcp/discovery.d.ts +68 -0
  92. package/dist/types/ai/mcp/tools.d.ts +16 -0
  93. package/dist/types/ai/openapi-components.d.ts +43 -0
  94. package/dist/types/ai/relative-links.d.ts +26 -0
  95. package/dist/types/ai/serializers.d.ts +15 -0
  96. package/dist/types/ai/skills.d.ts +42 -0
  97. package/dist/types/ai/tar.d.ts +25 -0
  98. package/dist/types/ai/visibility.d.ts +17 -0
  99. package/dist/types/ai/web-bot-auth.d.ts +16 -0
  100. package/dist/types/analytics/adobe.d.ts +35 -0
  101. package/dist/types/analytics/amplitude.d.ts +50 -0
  102. package/dist/types/analytics/clarity.d.ts +31 -0
  103. package/dist/types/analytics/clearbit.d.ts +29 -0
  104. package/dist/types/analytics/cloudflare.d.ts +41 -0
  105. package/dist/types/analytics/fathom.d.ts +41 -0
  106. package/dist/types/analytics/google-analytics.d.ts +44 -0
  107. package/dist/types/analytics/google-tag-manager.d.ts +40 -0
  108. package/dist/types/analytics/head.d.ts +30 -0
  109. package/dist/types/analytics/heap.d.ts +40 -0
  110. package/dist/types/analytics/hightouch.d.ts +44 -0
  111. package/dist/types/analytics/hotjar.d.ts +33 -0
  112. package/dist/types/analytics/index.d.ts +61 -0
  113. package/dist/types/analytics/inline.d.ts +17 -0
  114. package/dist/types/analytics/logrocket.d.ts +44 -0
  115. package/dist/types/analytics/mixpanel.d.ts +67 -0
  116. package/dist/types/analytics/pirsch.d.ts +42 -0
  117. package/dist/types/analytics/plausible.d.ts +56 -0
  118. package/dist/types/analytics/posthog.d.ts +45 -0
  119. package/dist/types/analytics/schema.d.ts +320 -0
  120. package/dist/types/analytics/script.d.ts +46 -0
  121. package/dist/types/analytics/segment.d.ts +50 -0
  122. package/dist/types/analytics/vercel.d.ts +48 -0
  123. package/dist/types/astro/integration.d.ts +76 -0
  124. package/dist/types/astro/markdown-negotiation.d.ts +23 -0
  125. package/dist/types/astro/module-types.d.ts +14 -0
  126. package/dist/types/astro/pages.d.ts +44 -0
  127. package/dist/types/cli/env.d.ts +12 -0
  128. package/dist/types/cli/init/scaffold.d.ts +154 -0
  129. package/dist/types/components/layout/nav-utils.d.ts +11 -0
  130. package/dist/types/core/adapter.d.ts +47 -0
  131. package/dist/types/core/api-name.d.ts +7 -0
  132. package/dist/types/core/changelog-index.d.ts +13 -0
  133. package/dist/types/core/config-input.d.ts +209 -505
  134. package/dist/types/core/config.d.ts +60 -34
  135. package/dist/types/core/content-assets.d.ts +76 -0
  136. package/dist/types/core/custom-pages.d.ts +33 -0
  137. package/dist/types/core/data.d.ts +28 -11
  138. package/dist/types/core/define-components.d.ts +12 -9
  139. package/dist/types/core/deployment-env.d.ts +6 -11
  140. package/dist/types/core/frontmatter.d.ts +10 -0
  141. package/dist/types/core/graph.d.ts +18 -0
  142. package/dist/types/core/heading-markers.d.ts +54 -0
  143. package/dist/types/core/i18n-ui.d.ts +6 -2
  144. package/dist/types/core/i18n.d.ts +87 -0
  145. package/dist/types/core/includes.d.ts +138 -0
  146. package/dist/types/core/last-modified.d.ts +47 -0
  147. package/dist/types/core/links.d.ts +95 -0
  148. package/dist/types/core/locale-links.d.ts +60 -0
  149. package/dist/types/core/manifest.d.ts +17 -0
  150. package/dist/types/core/meta.d.ts +38 -0
  151. package/dist/types/core/nav-diagnostics.d.ts +26 -0
  152. package/dist/types/core/navigation.d.ts +6 -0
  153. package/dist/types/core/node-require.d.ts +19 -0
  154. package/dist/types/core/package-json.d.ts +13 -0
  155. package/dist/types/core/probe.d.ts +42 -0
  156. package/dist/types/core/project-graph.d.ts +51 -0
  157. package/dist/types/core/project.d.ts +2 -0
  158. package/dist/types/core/safe-href.d.ts +2 -0
  159. package/dist/types/core/safe-links.d.ts +26 -0
  160. package/dist/types/core/schema.d.ts +2291 -441
  161. package/dist/types/core/site-url.d.ts +16 -0
  162. package/dist/types/core/sources/assets.d.ts +36 -0
  163. package/dist/types/core/sources/cache.d.ts +37 -0
  164. package/dist/types/core/sources/collection.d.ts +28 -0
  165. package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
  166. package/dist/types/core/sources/contentful.d.ts +40 -0
  167. package/dist/types/core/sources/filesystem.d.ts +24 -0
  168. package/dist/types/core/sources/github-releases.d.ts +31 -0
  169. package/dist/types/core/sources/json.d.ts +30 -0
  170. package/dist/types/core/sources/lexical.d.ts +19 -0
  171. package/dist/types/core/sources/lower.d.ts +75 -0
  172. package/dist/types/core/sources/mdx-remote.d.ts +28 -0
  173. package/dist/types/core/sources/normalize.d.ts +147 -0
  174. package/dist/types/core/sources/notion.d.ts +131 -0
  175. package/dist/types/core/sources/obsidian.d.ts +46 -0
  176. package/dist/types/core/sources/payload.d.ts +39 -0
  177. package/dist/types/core/sources/portable-text.d.ts +42 -0
  178. package/dist/types/core/sources/read.d.ts +23 -0
  179. package/dist/types/core/sources/remote.d.ts +74 -0
  180. package/dist/types/core/sources/resolve.d.ts +19 -0
  181. package/dist/types/core/sources/sanity.d.ts +43 -0
  182. package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
  183. package/dist/types/core/sources/strapi.d.ts +33 -0
  184. package/dist/types/core/sources/types.d.ts +7 -0
  185. package/dist/types/core/sources/watch.d.ts +45 -0
  186. package/dist/types/core/text-width.d.ts +11 -0
  187. package/dist/types/core/types.d.ts +20 -1
  188. package/dist/types/core/unrecognized-keys.d.ts +7 -0
  189. package/dist/types/core/versions.d.ts +72 -0
  190. package/dist/types/core/yaml.d.ts +9 -0
  191. package/dist/types/deploy/adapter-output.d.ts +45 -0
  192. package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
  193. package/dist/types/deploy/adapters/index.d.ts +29 -0
  194. package/dist/types/deploy/adapters/netlify.d.ts +37 -0
  195. package/dist/types/deploy/adapters/node.d.ts +37 -0
  196. package/dist/types/deploy/adapters/registry.d.ts +133 -0
  197. package/dist/types/deploy/adapters/types.d.ts +71 -0
  198. package/dist/types/deploy/adapters/vercel.d.ts +38 -0
  199. package/dist/types/deploy/artifacts.d.ts +65 -0
  200. package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
  201. package/dist/types/deploy/function-bundle.d.ts +80 -0
  202. package/dist/types/deploy/headers.d.ts +50 -0
  203. package/dist/types/deploy/node-headers.d.ts +42 -0
  204. package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
  205. package/dist/types/deploy/platforms/index.d.ts +18 -0
  206. package/dist/types/deploy/platforms/netlify.d.ts +13 -0
  207. package/dist/types/deploy/platforms/node.d.ts +11 -0
  208. package/dist/types/deploy/platforms/paths.d.ts +27 -0
  209. package/dist/types/deploy/platforms/static.d.ts +10 -0
  210. package/dist/types/deploy/platforms/types.d.ts +104 -0
  211. package/dist/types/deploy/platforms/vercel.d.ts +32 -0
  212. package/dist/types/deploy/redirects.d.ts +53 -0
  213. package/dist/types/deploy/robots.d.ts +8 -0
  214. package/dist/types/deploy/rss.d.ts +31 -0
  215. package/dist/types/deploy/sitemap.d.ts +21 -0
  216. package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
  217. package/dist/types/markdown/code-title.d.ts +32 -0
  218. package/dist/types/markdown/fence-meta.d.ts +23 -0
  219. package/dist/types/markdown/themes.d.ts +3 -3
  220. package/dist/types/openapi/asyncapi.d.ts +129 -0
  221. package/dist/types/openapi/graphql-build.d.ts +8 -0
  222. package/dist/types/openapi/graphql.d.ts +122 -0
  223. package/dist/types/openapi/model.d.ts +158 -0
  224. package/dist/types/openapi/parse.d.ts +57 -0
  225. package/dist/types/openapi/references.d.ts +37 -25
  226. package/dist/types/openapi/render-mdx.d.ts +33 -0
  227. package/dist/types/openapi/sentence.d.ts +7 -0
  228. package/dist/types/openapi/signature.d.ts +10 -0
  229. package/dist/types/openapi/source.d.ts +22 -0
  230. package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
  231. package/dist/types/reference/asyncapi.d.ts +166 -0
  232. package/dist/types/reference/graphql.d.ts +181 -0
  233. package/dist/types/reference/index.d.ts +32 -0
  234. package/dist/types/reference/openapi.d.ts +165 -0
  235. package/dist/types/reference/options.d.ts +157 -0
  236. package/dist/types/reference/scalar.d.ts +136 -0
  237. package/dist/types/reference/schema.d.ts +630 -0
  238. package/dist/types/search/adapters/algolia.d.ts +32 -0
  239. package/dist/types/search/adapters/flexsearch.d.ts +12 -0
  240. package/dist/types/search/adapters/index.d.ts +31 -0
  241. package/dist/types/search/adapters/mixedbread.d.ts +22 -0
  242. package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
  243. package/dist/types/search/adapters/orama.d.ts +13 -0
  244. package/dist/types/search/adapters/pagefind.d.ts +12 -0
  245. package/dist/types/search/adapters/registry.d.ts +228 -0
  246. package/dist/types/search/adapters/types.d.ts +34 -0
  247. package/dist/types/search/adapters/typesense.d.ts +42 -0
  248. package/dist/types/search/build.d.ts +23 -0
  249. package/dist/types/search/documents.d.ts +90 -0
  250. package/dist/types/search/facets.d.ts +3 -0
  251. package/dist/types/search/sync/algolia.d.ts +14 -0
  252. package/dist/types/search/sync/index.d.ts +14 -0
  253. package/dist/types/search/sync/orama-cloud.d.ts +10 -0
  254. package/dist/types/search/sync/typesense.d.ts +14 -0
  255. package/dist/types/sources/contentful.d.ts +68 -0
  256. package/dist/types/sources/custom.d.ts +20 -0
  257. package/dist/types/sources/filesystem.d.ts +42 -0
  258. package/dist/types/sources/github-releases.d.ts +46 -0
  259. package/dist/types/sources/index.d.ts +48 -0
  260. package/dist/types/sources/mdx-remote.d.ts +63 -0
  261. package/dist/types/sources/notion.d.ts +65 -0
  262. package/dist/types/sources/obsidian.d.ts +34 -0
  263. package/dist/types/sources/payload.d.ts +68 -0
  264. package/dist/types/sources/registry.d.ts +1414 -0
  265. package/dist/types/sources/sanity.d.ts +69 -0
  266. package/dist/types/sources/shared.d.ts +46 -0
  267. package/dist/types/sources/strapi.d.ts +66 -0
  268. package/dist/types/theme/icon-kind.d.ts +11 -0
  269. package/dist/types/theme/icons.d.ts +20 -0
  270. package/docs/01-quickstart.mdx +18 -18
  271. package/docs/02-deployment.mdx +50 -26
  272. package/docs/03-upgrading.mdx +351 -0
  273. package/docs/04-migrating.mdx +58 -0
  274. package/docs/08-faq.mdx +3 -3
  275. package/docs/advanced/blog.mdx +13 -6
  276. package/docs/advanced/changelog.mdx +23 -35
  277. package/docs/advanced/custom-pages.mdx +20 -8
  278. package/docs/advanced/meta.ts +1 -8
  279. package/docs/advanced/skills.mdx +8 -0
  280. package/docs/cli/audit.mdx +646 -0
  281. package/docs/cli/doctor.mdx +29 -0
  282. package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
  283. package/docs/cli/index.mdx +105 -0
  284. package/docs/cli/meta.ts +7 -0
  285. package/docs/{reference → cli}/translate.mdx +1 -1
  286. package/docs/cli/validate.mdx +41 -0
  287. package/docs/cli/version.mdx +40 -0
  288. package/docs/configuration/analytics.mdx +350 -59
  289. package/docs/configuration/ask-ai.mdx +176 -61
  290. package/docs/configuration/customization.mdx +15 -9
  291. package/docs/configuration/index.mdx +52 -31
  292. package/docs/configuration/search.mdx +75 -54
  293. package/docs/configuration/theming.mdx +24 -15
  294. package/docs/content/components.mdx +21 -5
  295. package/docs/{reference → content}/frontmatter.mdx +37 -1
  296. package/docs/content/i18n.mdx +8 -6
  297. package/docs/content/includes.mdx +2 -4
  298. package/docs/content/index.mdx +1 -1
  299. package/docs/content/islands.mdx +10 -5
  300. package/docs/content/meta.mdx +1 -1
  301. package/docs/content/meta.ts +1 -0
  302. package/docs/content/navigation.mdx +12 -7
  303. package/docs/content/sources.mdx +145 -50
  304. package/docs/content/syntax.mdx +26 -12
  305. package/docs/content/versioning.mdx +3 -3
  306. package/docs/discoverability/agent-discovery.mdx +91 -10
  307. package/docs/discoverability/index.mdx +5 -5
  308. package/docs/discoverability/json-api.mdx +4 -4
  309. package/docs/discoverability/llms-txt.mdx +6 -6
  310. package/docs/discoverability/markdown.mdx +4 -4
  311. package/docs/discoverability/mcp.mdx +11 -11
  312. package/docs/discoverability/sitemap-and-robots.mdx +3 -3
  313. package/docs/index.mdx +2 -2
  314. package/docs/references/asyncapi.mdx +59 -0
  315. package/docs/{advanced → references}/graphql.mdx +45 -32
  316. package/docs/{reference → references}/meta.ts +2 -2
  317. package/docs/references/openapi.mdx +171 -0
  318. package/docs/references/scalar.mdx +64 -0
  319. package/package.json +42 -8
  320. package/skills/blume/SKILL.md +21 -8
  321. package/skills/blume-migrate/SKILL.md +22 -21
  322. package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
  323. package/skills/blume-migrate/references/docusaurus.md +5 -4
  324. package/skills/blume-migrate/references/fumadocs.md +4 -4
  325. package/skills/blume-migrate/references/mintlify.md +23 -8
  326. package/skills/blume-migrate/references/monorepo.md +6 -6
  327. package/skills/blume-migrate/references/starlight.md +4 -4
  328. package/src/ai/agent-readability.ts +26 -22
  329. package/src/ai/ai-catalog.ts +259 -0
  330. package/src/ai/api/handlers.ts +46 -11
  331. package/src/ai/api-catalog.ts +8 -8
  332. package/src/ai/ask-data.ts +1 -1
  333. package/src/ai/ask.ts +624 -100
  334. package/src/ai/changelog-markdown.ts +91 -0
  335. package/src/ai/component-markdown.ts +328 -12
  336. package/src/ai/index.ts +45 -0
  337. package/src/ai/link-headers.ts +19 -6
  338. package/src/ai/llms.ts +26 -15
  339. package/src/ai/markdown.ts +35 -5
  340. package/src/ai/mcp/data.ts +9 -5
  341. package/src/ai/mcp/discovery.ts +1 -1
  342. package/src/ai/openapi-components.ts +4 -1
  343. package/src/ai/relative-links.ts +170 -0
  344. package/src/ai/serializers.ts +2 -2
  345. package/src/ai/skills.ts +1 -1
  346. package/src/ai/web-bot-auth.ts +2 -2
  347. package/src/analytics/adobe.ts +46 -0
  348. package/src/analytics/amplitude.ts +79 -0
  349. package/src/analytics/clarity.ts +46 -0
  350. package/src/analytics/clearbit.ts +47 -0
  351. package/src/analytics/cloudflare.ts +67 -0
  352. package/src/analytics/fathom.ts +64 -0
  353. package/src/analytics/google-analytics.ts +84 -0
  354. package/src/analytics/google-tag-manager.ts +61 -0
  355. package/src/analytics/head.ts +130 -0
  356. package/src/analytics/heap.ts +65 -0
  357. package/src/analytics/hightouch.ts +77 -0
  358. package/src/analytics/hotjar.ts +47 -0
  359. package/src/analytics/index.ts +71 -0
  360. package/src/analytics/inline.ts +21 -0
  361. package/src/analytics/logrocket.ts +71 -0
  362. package/src/analytics/mixpanel.ts +92 -0
  363. package/src/analytics/pirsch.ts +66 -0
  364. package/src/analytics/plausible.ts +83 -0
  365. package/src/analytics/posthog.ts +78 -0
  366. package/src/analytics/schema.ts +60 -0
  367. package/src/analytics/script.ts +60 -0
  368. package/src/analytics/segment.ts +85 -0
  369. package/src/analytics/vercel.ts +50 -0
  370. package/src/astro/adapter-root.ts +7 -9
  371. package/src/astro/component-slots.ts +131 -91
  372. package/src/astro/generate.ts +114 -345
  373. package/src/astro/integration.ts +2 -6
  374. package/src/astro/pages.ts +13 -101
  375. package/src/astro/render-deps.ts +379 -0
  376. package/src/astro/runtime-deps.ts +201 -0
  377. package/src/astro/templates.ts +554 -541
  378. package/src/audit/agent.ts +24 -0
  379. package/src/audit/catalog.ts +2 -2
  380. package/src/audit/checks/assets.ts +2 -2
  381. package/src/audit/checks/dns-aid.ts +1 -1
  382. package/src/audit/checks/duplicates.ts +3 -1
  383. package/src/audit/checks/i18n.ts +1 -1
  384. package/src/audit/checks/indexability.ts +7 -7
  385. package/src/audit/checks/links.ts +2 -2
  386. package/src/audit/checks/llms.ts +6 -6
  387. package/src/audit/checks/network.ts +3 -3
  388. package/src/audit/checks/og-image.ts +2 -2
  389. package/src/audit/checks/robots.ts +1 -1
  390. package/src/audit/checks/sitemap.ts +2 -2
  391. package/src/audit/checks/social.ts +1 -1
  392. package/src/audit/run.ts +4 -3
  393. package/src/audit/terms.ts +31 -0
  394. package/src/audit/url.ts +13 -13
  395. package/src/cli/command-meta.ts +10 -0
  396. package/src/cli/commands/audit.ts +39 -20
  397. package/src/cli/commands/build.ts +71 -314
  398. package/src/cli/commands/check.ts +1 -0
  399. package/src/cli/commands/dev.ts +40 -1
  400. package/src/cli/commands/doctor.ts +90 -14
  401. package/src/cli/commands/eject.ts +44 -7
  402. package/src/cli/commands/eval.ts +2 -2
  403. package/src/cli/commands/init.ts +161 -41
  404. package/src/cli/commands/migrate.ts +121 -0
  405. package/src/cli/commands/preview.ts +7 -1
  406. package/src/cli/commands/translate.ts +2 -2
  407. package/src/cli/commands/upgrade.ts +141 -0
  408. package/src/cli/commands/version.ts +57 -44
  409. package/src/cli/eject-scripts.ts +121 -6
  410. package/src/cli/index.ts +11 -1
  411. package/src/cli/init/install.ts +70 -0
  412. package/src/cli/init/questions.ts +7 -0
  413. package/src/cli/init/scaffold.ts +459 -75
  414. package/src/cli/lazy-command.ts +37 -1
  415. package/src/cli/prepare.ts +40 -6
  416. package/src/cli/required-secrets.ts +38 -11
  417. package/src/cli/unknown-flags.ts +266 -0
  418. package/src/cli/yarn-pnp.ts +52 -0
  419. package/src/components/content/AccordionItem.astro +7 -1
  420. package/src/components/content/Card.astro +4 -3
  421. package/src/components/content/ColorItem.astro +22 -4
  422. package/src/components/content/GithubInfo.astro +2 -2
  423. package/src/components/content/Prompt.astro +25 -25
  424. package/src/components/content/Tabs.astro +3 -1
  425. package/src/components/content/Tile.astro +2 -3
  426. package/src/components/content/Tooltip.astro +57 -9
  427. package/src/components/content/content-strings.ts +34 -0
  428. package/src/components/content/diff.ts +1 -1
  429. package/src/components/content/mermaid-element.ts +13 -2
  430. package/src/components/content/prompt-markdown.ts +292 -0
  431. package/src/components/content/tooltip-id.ts +41 -0
  432. package/src/components/islands/hooks.ts +75 -3
  433. package/src/components/layout/Analytics.astro +21 -79
  434. package/src/components/layout/Banner.astro +3 -1
  435. package/src/components/layout/DiscoveryLinks.astro +69 -0
  436. package/src/components/layout/Header.astro +83 -20
  437. package/src/components/layout/LanguageSwitcher.astro +4 -1
  438. package/src/components/layout/Logo.astro +23 -2
  439. package/src/components/layout/NavSelector.astro +13 -2
  440. package/src/components/layout/NavTree.astro +12 -3
  441. package/src/components/layout/NavTreeScript.astro +17 -3
  442. package/src/components/layout/PageActions.astro +3 -3
  443. package/src/components/layout/PageFeedback.astro +11 -1
  444. package/src/components/layout/PageLayout.astro +52 -5
  445. package/src/components/layout/ReferenceLayout.astro +21 -12
  446. package/src/components/layout/RootLayout.astro +69 -43
  447. package/src/components/layout/Search.astro +30 -6
  448. package/src/components/layout/WebMcp.astro +1 -1
  449. package/src/components/layout/analytics-client.ts +101 -15
  450. package/src/components/layout/drawer-inert.ts +113 -15
  451. package/src/components/layout/dropdown-clamp.ts +105 -0
  452. package/src/components/layout/head-scripts.ts +15 -6
  453. package/src/components/layout/nav-utils.ts +17 -0
  454. package/src/components/layout/search/algolia.ts +8 -8
  455. package/src/components/layout/search/orama-cloud.ts +9 -7
  456. package/src/components/layout/search/typesense.ts +11 -17
  457. package/src/components/openapi/MessageComposer.astro +2 -2
  458. package/src/components/openapi/Playground.astro +2 -2
  459. package/src/components/openapi/playground-client.ts +79 -10
  460. package/src/core/changelog-index.ts +24 -0
  461. package/src/core/component-overrides.ts +399 -154
  462. package/src/core/config-input.ts +212 -543
  463. package/src/core/config.ts +130 -41
  464. package/src/core/custom-pages.ts +105 -0
  465. package/src/core/data.ts +32 -11
  466. package/src/core/define-components.ts +12 -9
  467. package/src/core/deployment-env.ts +18 -74
  468. package/src/core/diagnostics.ts +14 -7
  469. package/src/core/graph.ts +69 -25
  470. package/src/core/i18n-ui.ts +6 -2
  471. package/src/core/i18n.ts +17 -0
  472. package/src/core/includes.ts +156 -38
  473. package/src/core/last-modified.ts +6 -11
  474. package/src/core/links.ts +166 -2
  475. package/src/core/manifest.ts +10 -3
  476. package/src/core/navigation.ts +137 -19
  477. package/src/core/new-tab.ts +35 -0
  478. package/src/core/node-require.ts +21 -0
  479. package/src/core/project-graph.ts +42 -26
  480. package/src/core/project.ts +9 -4
  481. package/src/core/request-body.ts +61 -0
  482. package/src/core/safe-href.ts +28 -0
  483. package/src/core/safe-links.ts +68 -0
  484. package/src/core/schema.ts +531 -721
  485. package/src/core/server-features.ts +8 -9
  486. package/src/core/sources/assets.ts +47 -11
  487. package/src/core/sources/collection.ts +67 -0
  488. package/src/core/sources/contentful-rich-text.ts +285 -0
  489. package/src/core/sources/contentful.ts +173 -0
  490. package/src/core/sources/github-releases.ts +51 -1
  491. package/src/core/sources/json.ts +71 -0
  492. package/src/core/sources/lexical.ts +195 -0
  493. package/src/core/sources/lower.ts +226 -0
  494. package/src/core/sources/normalize.ts +52 -2
  495. package/src/core/sources/notion.ts +39 -28
  496. package/src/core/sources/payload.ts +135 -0
  497. package/src/core/sources/portable-text.ts +11 -16
  498. package/src/core/sources/remote.ts +226 -0
  499. package/src/core/sources/resolve.ts +104 -166
  500. package/src/core/sources/sanity.ts +16 -49
  501. package/src/core/sources/strapi-blocks.ts +124 -0
  502. package/src/core/sources/strapi.ts +191 -0
  503. package/src/core/sources/types.ts +12 -1
  504. package/src/core/types.ts +20 -1
  505. package/src/core/ui-packs/ar.ts +6 -2
  506. package/src/core/ui-packs/bg.ts +6 -2
  507. package/src/core/ui-packs/bn.ts +6 -2
  508. package/src/core/ui-packs/ca.ts +3 -1
  509. package/src/core/ui-packs/cs.ts +6 -2
  510. package/src/core/ui-packs/da.ts +6 -2
  511. package/src/core/ui-packs/de.ts +6 -2
  512. package/src/core/ui-packs/el.ts +3 -1
  513. package/src/core/ui-packs/es.ts +3 -1
  514. package/src/core/ui-packs/fa.ts +6 -2
  515. package/src/core/ui-packs/fi.ts +6 -2
  516. package/src/core/ui-packs/fr.ts +3 -1
  517. package/src/core/ui-packs/he.ts +6 -2
  518. package/src/core/ui-packs/hi.ts +6 -2
  519. package/src/core/ui-packs/hr.ts +6 -2
  520. package/src/core/ui-packs/hu.ts +6 -2
  521. package/src/core/ui-packs/id.ts +6 -2
  522. package/src/core/ui-packs/it.ts +3 -1
  523. package/src/core/ui-packs/ja.ts +3 -1
  524. package/src/core/ui-packs/ko.ts +3 -1
  525. package/src/core/ui-packs/nl.ts +6 -2
  526. package/src/core/ui-packs/no.ts +6 -2
  527. package/src/core/ui-packs/pl.ts +6 -2
  528. package/src/core/ui-packs/pt-br.ts +3 -1
  529. package/src/core/ui-packs/pt.ts +3 -1
  530. package/src/core/ui-packs/ro.ts +6 -2
  531. package/src/core/ui-packs/ru.ts +6 -2
  532. package/src/core/ui-packs/sk.ts +6 -2
  533. package/src/core/ui-packs/sr.ts +6 -2
  534. package/src/core/ui-packs/sv.ts +6 -2
  535. package/src/core/ui-packs/th.ts +3 -1
  536. package/src/core/ui-packs/tr.ts +6 -2
  537. package/src/core/ui-packs/uk.ts +6 -2
  538. package/src/core/ui-packs/vi.ts +3 -1
  539. package/src/core/ui-packs/zh-tw.ts +3 -1
  540. package/src/core/ui-packs/zh.ts +3 -1
  541. package/src/core/unrecognized-keys.ts +10 -0
  542. package/src/core/version-cut.ts +116 -8
  543. package/src/deploy/adapter-output.ts +57 -97
  544. package/src/deploy/adapters/cloudflare.ts +39 -0
  545. package/src/deploy/adapters/index.ts +41 -0
  546. package/src/deploy/adapters/netlify.ts +34 -0
  547. package/src/deploy/adapters/node.ts +34 -0
  548. package/src/deploy/adapters/registry.ts +127 -0
  549. package/src/deploy/adapters/types.ts +92 -0
  550. package/src/deploy/adapters/vercel.ts +35 -0
  551. package/src/deploy/artifacts.ts +67 -28
  552. package/src/deploy/cloudflare-negotiation.ts +179 -100
  553. package/src/deploy/function-bundle.ts +18 -3
  554. package/src/deploy/headers.ts +129 -22
  555. package/src/deploy/node-headers.ts +198 -0
  556. package/src/deploy/platforms/cloudflare.ts +312 -0
  557. package/src/deploy/platforms/index.ts +67 -0
  558. package/src/deploy/platforms/netlify.ts +52 -0
  559. package/src/deploy/platforms/node.ts +40 -0
  560. package/src/deploy/platforms/paths.ts +42 -0
  561. package/src/deploy/platforms/static.ts +29 -0
  562. package/src/deploy/platforms/types.ts +112 -0
  563. package/src/deploy/platforms/vercel.ts +193 -0
  564. package/src/deploy/redirects.ts +30 -18
  565. package/src/deploy/robots.ts +3 -3
  566. package/src/deploy/rss.ts +2 -2
  567. package/src/deploy/sitemap.ts +2 -2
  568. package/src/deploy/vercel-negotiation.ts +27 -4
  569. package/src/eval/agents.ts +32 -1
  570. package/src/eval/findings.ts +19 -11
  571. package/src/eval/report.ts +10 -2
  572. package/src/markdown/external-links.ts +65 -0
  573. package/src/markdown/include.ts +45 -27
  574. package/src/markdown/index.ts +34 -9
  575. package/src/markdown/inline-code.ts +12 -6
  576. package/src/markdown/relative-links.ts +324 -0
  577. package/src/markdown/themes.ts +3 -3
  578. package/src/migrate/migrate.ts +149 -0
  579. package/src/openapi/parse.ts +64 -16
  580. package/src/openapi/proxy.ts +62 -10
  581. package/src/openapi/references.ts +147 -147
  582. package/src/openapi/render-mdx.ts +32 -10
  583. package/src/openapi/scalar.ts +15 -13
  584. package/src/openapi/sentence.ts +14 -0
  585. package/src/openapi/source.ts +37 -21
  586. package/src/openapi/spec-dependency-error.ts +15 -0
  587. package/src/reference/asyncapi.ts +83 -0
  588. package/src/reference/graphql.ts +89 -0
  589. package/src/reference/index.ts +40 -0
  590. package/src/reference/openapi.ts +83 -0
  591. package/src/reference/options.ts +201 -0
  592. package/src/reference/scalar.ts +136 -0
  593. package/src/reference/schema.ts +88 -0
  594. package/src/registry/eject.ts +97 -42
  595. package/src/search/adapters/algolia.ts +46 -0
  596. package/src/search/adapters/flexsearch.ts +29 -0
  597. package/src/search/adapters/index.ts +39 -0
  598. package/src/search/adapters/mixedbread.ts +39 -0
  599. package/src/search/adapters/orama-cloud.ts +51 -0
  600. package/src/search/adapters/orama.ts +24 -0
  601. package/src/search/adapters/pagefind.ts +27 -0
  602. package/src/search/adapters/registry.ts +131 -0
  603. package/src/search/adapters/types.ts +46 -0
  604. package/src/search/adapters/typesense.ts +57 -0
  605. package/src/search/build.ts +33 -7
  606. package/src/search/documents.ts +6 -0
  607. package/src/search/sync/algolia.ts +12 -11
  608. package/src/search/sync/index.ts +35 -20
  609. package/src/search/sync/orama-cloud.ts +12 -9
  610. package/src/search/sync/typesense.ts +15 -13
  611. package/src/sources/contentful.ts +63 -0
  612. package/src/sources/custom.ts +38 -0
  613. package/src/sources/filesystem.ts +51 -0
  614. package/src/sources/github-releases.ts +52 -0
  615. package/src/sources/index.ts +60 -0
  616. package/src/sources/mdx-remote.ts +76 -0
  617. package/src/sources/notion.ts +63 -0
  618. package/src/sources/obsidian.ts +38 -0
  619. package/src/sources/payload.ts +60 -0
  620. package/src/sources/registry.ts +182 -0
  621. package/src/sources/sanity.ts +66 -0
  622. package/src/sources/shared.ts +52 -0
  623. package/src/sources/strapi.ts +58 -0
  624. package/src/theme/entry.ts +47 -2
  625. package/src/translate/report.ts +40 -7
  626. package/src/upgrade/upgrade.ts +499 -0
  627. package/dist/cli/chunk-12dxjqk7.js.map +0 -10
  628. package/dist/cli/chunk-196vjxp9.js.map +0 -13
  629. package/dist/cli/chunk-2mzebbbz.js +0 -69
  630. package/dist/cli/chunk-2z47ypj8.js.map +0 -11
  631. package/dist/cli/chunk-30e87n55.js +0 -108
  632. package/dist/cli/chunk-30e87n55.js.map +0 -10
  633. package/dist/cli/chunk-450a7rcr.js +0 -185
  634. package/dist/cli/chunk-450a7rcr.js.map +0 -11
  635. package/dist/cli/chunk-5n7t497w.js.map +0 -40
  636. package/dist/cli/chunk-61j18dwk.js +0 -5342
  637. package/dist/cli/chunk-61j18dwk.js.map +0 -58
  638. package/dist/cli/chunk-88by27n5.js +0 -17
  639. package/dist/cli/chunk-88by27n5.js.map +0 -10
  640. package/dist/cli/chunk-8cd8tj54.js.map +0 -34
  641. package/dist/cli/chunk-aztttvb3.js +0 -381
  642. package/dist/cli/chunk-aztttvb3.js.map +0 -12
  643. package/dist/cli/chunk-cvky9gb2.js.map +0 -11
  644. package/dist/cli/chunk-ejjx8znq.js.map +0 -15
  645. package/dist/cli/chunk-fmceyezb.js +0 -1007
  646. package/dist/cli/chunk-fmceyezb.js.map +0 -13
  647. package/dist/cli/chunk-hdm2dkd2.js.map +0 -48
  648. package/dist/cli/chunk-hs3gbh8p.js.map +0 -10
  649. package/dist/cli/chunk-jbj4qhfw.js +0 -30
  650. package/dist/cli/chunk-jbj4qhfw.js.map +0 -10
  651. package/dist/cli/chunk-mqb2ka8m.js +0 -68
  652. package/dist/cli/chunk-mqb2ka8m.js.map +0 -10
  653. package/dist/cli/chunk-mt76t7dj.js.map +0 -11
  654. package/dist/cli/chunk-q4rae3bg.js +0 -60
  655. package/dist/cli/chunk-q4rae3bg.js.map +0 -10
  656. package/dist/cli/chunk-ra1v2nc2.js +0 -35
  657. package/dist/cli/chunk-ra1v2nc2.js.map +0 -10
  658. package/dist/cli/chunk-t3tj0dgr.js.map +0 -15
  659. package/dist/cli/chunk-tqa1s0k8.js +0 -69
  660. package/dist/cli/chunk-tqa1s0k8.js.map +0 -11
  661. package/dist/cli/chunk-vh9w1sgp.js +0 -73
  662. package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
  663. package/dist/cli/chunk-vkrsvbr5.js +0 -107
  664. package/dist/cli/chunk-vkrsvbr5.js.map +0 -11
  665. package/dist/cli/chunk-vrfp10qk.js +0 -81
  666. package/dist/cli/chunk-vrfp10qk.js.map +0 -10
  667. package/dist/cli/chunk-wjt80jps.js +0 -1049
  668. package/dist/cli/chunk-wjt80jps.js.map +0 -24
  669. package/docs/advanced/api-reference.mdx +0 -240
  670. package/docs/reference/cli.mdx +0 -197
  671. package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
  672. package/src/components/content/changelog-element.ts +0 -69
  673. package/src/search/providers.ts +0 -91
  674. /package/dist/cli/{chunk-3w7b2vcx.js.map → chunk-7ez8ny0t.js.map} +0 -0
  675. /package/dist/cli/{chunk-688e0dde.js.map → chunk-88cpgt6h.js.map} +0 -0
  676. /package/dist/cli/{chunk-exeeb35e.js.map → chunk-f7t03s3g.js.map} +0 -0
  677. /package/dist/cli/{chunk-ppfvdcd4.js.map → chunk-zxccj738.js.map} +0 -0
@@ -0,0 +1,196 @@
1
+ /**
2
+ * `Accept: text/markdown` content negotiation for Cloudflare server builds.
3
+ *
4
+ * Blume prerenders every content page — even in a server build (`deployment:
5
+ * cloudflare()`) — and on Cloudflare the ASSETS binding serves those files before
6
+ * the Worker script runs, so no server-side code (Astro middleware included)
7
+ * ever sees a content-page request. Worse, even a content-page request that
8
+ * does reach the Worker is answered by `@astrojs/cloudflare`'s handler
9
+ * straight from the ASSETS binding, ahead of `app.render` — the only place
10
+ * middleware runs — because `app.match` resolves a prerendered route to
11
+ * nothing and the handler then falls back to the binding.
12
+ *
13
+ * Negotiation therefore needs two coordinated pieces, both applied to the
14
+ * adapter's emitted deploy bundle after `astro build`:
15
+ *
16
+ * 1. `assets.run_worker_first` in `dist/server/wrangler.json`, claiming every
17
+ * path except the static files that never negotiate, so the platform
18
+ * routes page requests — and requests for pages that do not exist — to
19
+ * the Worker instead of serving the static HTML directly (see
20
+ * `buildRunWorkerFirstRules`).
21
+ * 2. A generated entry Worker that fronts the adapter's: when the client
22
+ * prefers `text/markdown` it serves the page's prerendered `.md` mirror
23
+ * from the ASSETS binding, and it delegates everything else to the Astro
24
+ * Worker untouched.
25
+ *
26
+ * The prerendered per-page JSON documents (`/api/docs/pages/{route}.json`)
27
+ * are the one prerendered surface the adapter's fallback does *not* cover.
28
+ * They come from a prerendered *dynamic* route, and for those Astro's
29
+ * `matchRequest` returns the first non-prerendered route matching the same
30
+ * path — on a server build that is the `/api/[...path]` catch-all, which
31
+ * answers with a 404 problem document; `fallbackToAssets` never runs. The
32
+ * static-pathname endpoints (`pages.json`, `navigation.json`) are unaffected:
33
+ * they sit in the manifest's asset set, which the handler serves from the
34
+ * binding first. So whenever a worker-first rule claims a page JSON URL, the
35
+ * wrapper answers it from the binding itself, keyed by the exact set of
36
+ * documents the build emitted. The generated rule set claims them (a miss
37
+ * must reach the API's `PAGE_NOT_FOUND` answer, see `STATIC_EXEMPTIONS`), and
38
+ * so do user-configured rules or a bare `true`.
39
+ *
40
+ * Cloudflare does not apply `_headers` to worker-first routes, so the wrapper
41
+ * also re-stamps what the static layer would otherwise add on the routes it
42
+ * takes over: the homepage agent-discovery `Link` header and the Markdown
43
+ * `charset=utf-8` (see `deploy/headers.ts`). The raw `.md`/`.mdx` URLs are
44
+ * exempted from worker-first routing with negative rules, keeping their
45
+ * `_headers` treatment and their zero-Worker serving path.
46
+ *
47
+ * Configured redirects are baked into the wrapper as well, and answered there
48
+ * with their exact configured status. On a server build Blume routes
49
+ * `redirects` through Astro's own config, and `@astrojs/cloudflare` turns
50
+ * those into `_redirects` entries carrying the exact status — but only
51
+ * Cloudflare's static layer reads that file, and a worker-first route never
52
+ * reaches it. Astro's SSR redirect handler would answer instead, and it honors
53
+ * the configured status only when the destination resolves to a discrete
54
+ * route: Blume serves every page from `[...slug]`, so it never does, and
55
+ * `computeRedirectStatus` defaults a GET to **301** — a permanent redirect
56
+ * that browsers cache indefinitely. The wrapper checking its own redirect
57
+ * table before delegating closes that hole at zero rule cost: unlike negative
58
+ * `run_worker_first` exemptions, a baked-in table spends nothing against
59
+ * Wrangler's 100-rule / 100-character limits, cannot collide with
60
+ * user-configured rules (or a bare `true`), and needs no basing gymnastics —
61
+ * its keys are full served URLs, which is exactly what the Worker sees.
62
+ * Redirects outside every worker-first rule still never invoke the Worker;
63
+ * the static layer serves them from `_redirects` as before.
64
+ *
65
+ * Missing pages negotiate too. Under an explicit `run_worker_first` list the
66
+ * platform answers every request outside the rules from the static layer —
67
+ * an asset miss included, as the nearest `404.html` — which is why the rules
68
+ * claim every path: a request for a URL no page backs then reaches the
69
+ * Worker, and the Astro Worker answers it with the HTML 404 shell from the
70
+ * binding (`not_found_handling: "404-page"`). When the client prefers
71
+ * Markdown the wrapper swaps that shell for the prerendered `/404.md` twin,
72
+ * and when it prefers JSON for the `/404.json` problem document, keeping the
73
+ * 404 status either way — the counterpart of the miss-phase routes in
74
+ * `deploy/vercel-negotiation.ts`. A raw `.md` or `.json` URL no file backs
75
+ * asks for the same twin implicitly, but on this platform such a request only
76
+ * reaches the Worker for `.json` (the generated set keeps `.md` on the static
77
+ * layer for its `_headers`). Only an HTML 404 is swapped, so an API endpoint's
78
+ * own problem document is never overwritten.
79
+ */
80
+ import type { NotFoundVariants } from "./vercel-negotiation.ts";
81
+ /** Filename of the generated wrapper Worker, next to the adapter's entry. */
82
+ export declare const NEGOTIATION_WORKER_FILE = "blume-worker.mjs";
83
+ /** A value as `JSON.parse` produces it (the wrangler config's value space). */
84
+ type JsonValue = string | number | boolean | null | JsonValue[] | {
85
+ [key: string]: JsonValue;
86
+ };
87
+ /**
88
+ * The `run_worker_first` rules: every path under the deployment base goes
89
+ * through the Worker except the {@link STATIC_EXEMPTIONS}. Claiming
90
+ * everything — rather than only the content routes — is what lets a
91
+ * *missing* page negotiate: under an explicit rule list the platform answers
92
+ * any request outside every rule from the static layer, an asset miss
93
+ * included (as the nearest `404.html`), so a rule set scoped to the content
94
+ * routes would never let the Worker see a request for a URL that has no
95
+ * page. The price is a Worker hop on every page request the site does serve.
96
+ * On a subpath deploy the base is claimed in both request spellings.
97
+ *
98
+ * Configured redirects need no exemption from these rules: the wrapper Worker
99
+ * answers any it claims from its baked-in redirect table with the configured
100
+ * status (see the module comment).
101
+ */
102
+ export declare const buildRunWorkerFirstRules: (base?: string) => string[];
103
+ /**
104
+ * Merge the generated rules into a user-configured `run_worker_first` (which
105
+ * flows into the adapter's emitted config from the project's own wrangler
106
+ * file). `true` already routes everything through the Worker, so it is kept
107
+ * as-is; an array is unioned with the generated rules and then swept for
108
+ * redundancy, since coverage by a glob is equivalent routing but a hard
109
+ * validation error at deploy time.
110
+ */
111
+ export declare const mergeRunWorkerFirstRules: (existing: JsonValue | undefined, added: readonly string[]) => string[] | true;
112
+ /** A configured redirect the wrapper Worker serves itself. */
113
+ export interface WorkerRedirect {
114
+ /**
115
+ * Served path of the redirect, based the way the host platform matches it
116
+ * (see `applyBaseToPlatformRedirects`) — the full URL path the Worker sees.
117
+ */
118
+ from: string;
119
+ /** Configured HTTP status (301, 302, 307, or 308). */
120
+ status: number;
121
+ /** Destination, percent-encoded into the `Location` header. */
122
+ to: string;
123
+ }
124
+ export interface NegotiationWorkerOptions {
125
+ /** Import specifier of the adapter's built entry, relative to the Worker. */
126
+ mainSpecifier: string;
127
+ /** Content routes with a raw-Markdown mirror (see `markdownRoutePaths`). */
128
+ routePaths: readonly string[];
129
+ /** Name of the assets binding the wrapper serves the `.md` mirrors from. */
130
+ assetsBinding: string;
131
+ /** `deployment.base` for subpath deploys. */
132
+ base?: string;
133
+ /** Homepage agent-discovery `Link` header (see `ai/link-headers.ts`). */
134
+ homeLinkHeader?: string | null;
135
+ /** Estimated token count of the homepage Markdown mirror. */
136
+ homeTokens?: number;
137
+ /** Configured redirects the wrapper answers with their exact status. */
138
+ redirects?: readonly WorkerRedirect[];
139
+ /**
140
+ * Base-less served paths of the prerendered per-page JSON documents the
141
+ * build emitted (see `pageJsonPath`), decoded. The wrapper answers exactly
142
+ * these from the assets binding, since the Astro Worker would route them to
143
+ * the `/api/` catch-all (see the module comment).
144
+ */
145
+ pageJsonPaths?: readonly string[];
146
+ /**
147
+ * Which prerendered 404 twins the build emitted (`404.md`, `404.json`), so
148
+ * the wrapper only substitutes a twin that exists. A project that owns
149
+ * `/404` emits neither and keeps the HTML answer.
150
+ */
151
+ notFound?: NotFoundVariants;
152
+ }
153
+ /**
154
+ * The wrapper Worker module. The negotiation helpers are a JavaScript copy of
155
+ * `astro/markdown-negotiation.ts` — the deploy bundle is uploaded with
156
+ * `no_bundle`, so the module must be self-contained; behavioral parity with
157
+ * the dev middleware is enforced by `test/cloudflare-negotiation.test.ts`.
158
+ */
159
+ export declare const buildNegotiationWorker: (options: NegotiationWorkerOptions) => string;
160
+ export interface WorkerNegotiation {
161
+ /** Updated `wrangler.json` text (worker-first rules + swapped `main`). */
162
+ wrangler: string;
163
+ /** The wrapper Worker module, to write as {@link NEGOTIATION_WORKER_FILE}. */
164
+ worker: string;
165
+ }
166
+ export interface WorkerNegotiationOptions extends Omit<NegotiationWorkerOptions, "assetsBinding" | "mainSpecifier"> {
167
+ /**
168
+ * The manifest content routes, based like `routePaths` — the guard that
169
+ * keeps the wrapper's redirect table off real pages. Defaults to
170
+ * `routePaths`, which also carries the synthesized homepage mirror (see
171
+ * `markdownRoutePaths`); passing the manifest routes keeps that synthetic
172
+ * `/` from blocking a configured root redirect.
173
+ */
174
+ contentRoutePaths?: readonly string[];
175
+ }
176
+ /**
177
+ * Wire the negotiation into the adapter's emitted `dist/server/wrangler.json`:
178
+ * point `main` at the wrapper Worker and scope `assets.run_worker_first` to
179
+ * the content routes (merged with any user-configured rules). Returns the
180
+ * updated config text plus the wrapper module, or `null` when there is
181
+ * nothing to do or nowhere safe to do it: no routes, unparsable config, no
182
+ * usable `main` or assets binding (the wrapper serves the `.md` mirrors from
183
+ * it), an already-swapped `main` (the original entry is unrecoverable), or
184
+ * user-configured rules that push the set over Wrangler's limits.
185
+ *
186
+ * The configured redirects are baked into the wrapper, which answers any the
187
+ * worker-first rules claim with the exact configured status (see the module
188
+ * comment) — whichever rules do the claiming: the generated `/*`, or the
189
+ * user's own (including a bare `true`). A
190
+ * redirect at a content route's own path is never baked: the page owns it,
191
+ * and answering a redirect there would take a real page off the air. When
192
+ * `null` is returned no rule set is written at all, so every request stays on
193
+ * the static layer and `_redirects` serves the configured statuses as before.
194
+ */
195
+ export declare const injectWorkerNegotiation: (wranglerText: string, options: WorkerNegotiationOptions) => WorkerNegotiation | null;
196
+ export {};
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Post-build audit of a Vercel serverless function bundle.
3
+ *
4
+ * The Vercel adapter traces the server entry with `@vercel/nft` and copies
5
+ * every file it reaches into `.vercel/output/functions/_render.func`. A bare
6
+ * import the trace cannot resolve — a package that isn't reachable by walking
7
+ * `node_modules` up from the chunk that imports it — is dropped *silently*,
8
+ * and the deployed function dies on its first request with
9
+ * `ERR_MODULE_NOT_FOUND` (Vercel reports it as `FUNCTION_INVOCATION_FAILED`).
10
+ * Under an isolated linker (pnpm, Bun's `isolated` mode) that is exactly the
11
+ * shape of Blume's own runtime dependencies: the SSR build leaves them
12
+ * external, and they live under `blume`'s store directory, not the project
13
+ * root. Nothing before deploy surfaces it — the build is green, a warm-cache
14
+ * preview is green — so the bundle is re-checked here with Node's own
15
+ * resolution rule: a package is present when some `node_modules/<name>` on
16
+ * the walk from the importing chunk up to the function root exists.
17
+ */
18
+ /** A bare package import the function bundle cannot satisfy. */
19
+ export interface MissingPackage {
20
+ /** Function-relative paths of the chunks that import the package. */
21
+ importers: string[];
22
+ name: string;
23
+ }
24
+ /** One function directory's audit result. */
25
+ export interface FunctionBundleAudit {
26
+ /** Absolute path of the `*.func` directory. */
27
+ dir: string;
28
+ missing: MissingPackage[];
29
+ }
30
+ /**
31
+ * The package a bare specifier resolves through (`@scope/name` or `name`), or
32
+ * null for relative/absolute paths, Node builtins, and virtual ids.
33
+ */
34
+ export declare const packageName: (specifier: string) => string | null;
35
+ /**
36
+ * Every bare package name a module's source imports. A module the lexer
37
+ * rejects (an unterminated string, an invalid escape in a specifier) falls
38
+ * back to the textual scan rather than going unaudited.
39
+ */
40
+ export declare const importedPackages: (source: string, name?: string) => Promise<string[]>;
41
+ /**
42
+ * Audit one function directory: read its `.vc-config.json` handler, scan
43
+ * every module beside the handler (the adapter's `dist/server` tree) for bare
44
+ * imports, and report the packages no `node_modules` on the walk up to the
45
+ * function root provides. A function without a handler has nothing to check.
46
+ */
47
+ export declare const auditFunctionBundle: (funcDir: string) => Promise<MissingPackage[]>;
48
+ /**
49
+ * Audit every function in a Vercel Build Output tree (`.vercel/output`).
50
+ * Functions with nothing missing are omitted; an output tree without a
51
+ * `functions/` directory (a static build) yields nothing.
52
+ */
53
+ export declare const auditVercelFunctions: (outputDir: string) => Promise<FunctionBundleAudit[]>;
54
+ /** Blume's own runtime dependency names, from its published `package.json`. */
55
+ export declare const blumeDependencyNames: () => Set<string>;
56
+ /** What a build should do about an audit: nothing, warn, or fail. */
57
+ export interface FunctionBundleVerdict {
58
+ /**
59
+ * A missing package is one of Blume's own dependencies — the runtime Blume
60
+ * generated imports it, so the function is certain to crash. Anything else
61
+ * (a project's own external import) is reported but left to the author.
62
+ */
63
+ fatal: boolean;
64
+ message: string;
65
+ }
66
+ /**
67
+ * The command that adds a dev dependency with the project's package manager
68
+ * (`pnpm add -D`, `npm install -D`, …), for the fix a verdict prints. The
69
+ * missing packages are an isolated-linker problem, so the project is often
70
+ * not on npm at all.
71
+ */
72
+ export declare const addDevDependencyCommand: (root: string) => Promise<string>;
73
+ /**
74
+ * Describe a function's missing packages and how to fix them. Vercel's trace
75
+ * only reaches packages resolvable from the project root, so the remedy is a
76
+ * root-level dependency entry for each — the same mirror rule Blume's native
77
+ * dependencies (`sharp`, `takumi-js`) already follow — added with
78
+ * `addDevCommand` (see {@link addDevDependencyCommand}).
79
+ */
80
+ export declare const functionBundleVerdict: (audit: FunctionBundleAudit, root: string, ownDependencies: ReadonlySet<string>, addDevCommand?: string) => FunctionBundleVerdict;
@@ -0,0 +1,50 @@
1
+ import type { ResolvedConfig } from "../core/schema.ts";
2
+ /**
3
+ * The policy a content-source SVG is served with: an opaque origin with
4
+ * scripts off, so an uploaded SVG that carries a `<script>` stays inert when
5
+ * opened directly. The endpoint sends it from the server and dev runtimes;
6
+ * {@link headerRules} carries it to static hosts.
7
+ */
8
+ export declare const SVG_ASSET_POLICY = "sandbox";
9
+ /**
10
+ * One static-host header rule: a served path (a `*` glob spanning path
11
+ * segments, or an exact path) and the header it sets there.
12
+ */
13
+ export interface HeaderRule {
14
+ name: string;
15
+ path: string;
16
+ value: string;
17
+ }
18
+ /**
19
+ * The header rules every static host should apply, in `_headers` glob syntax.
20
+ * The glob carries the served prefix (`{deployment.base}{basePath}` for the
21
+ * Markdown mirrors, `{deployment.base}` for the root `.txt` files) so the rules
22
+ * still match once the site is mounted under a subpath (`/docs/*.md`); the
23
+ * wildcard spans path segments, so a nested route like `/docs/ja/intro.md`
24
+ * matches too.
25
+ *
26
+ * When a homepage `Link` header is provided (see `ai/link-headers.ts`), an
27
+ * exact-path rule for the root page advertises the agent-discovery resources —
28
+ * the static-host counterpart of the Vercel routing-config injection.
29
+ */
30
+ export declare const headerRules: (config: ResolvedConfig, homeLinkHeader?: string | null) => HeaderRule[];
31
+ /**
32
+ * `_headers` contents: each {@link headerRules} entry as its path with an
33
+ * indented header line, in the two-space format Netlify and Cloudflare read.
34
+ */
35
+ export declare const buildNetlifyHeaders: (config: ResolvedConfig, homeLinkHeader?: string | null) => string;
36
+ /** One entry of `vercel.json`'s `headers` array. */
37
+ export interface VercelHeader {
38
+ headers: {
39
+ key: string;
40
+ value: string;
41
+ }[];
42
+ source: string;
43
+ }
44
+ /**
45
+ * The {@link headerRules} as `vercel.json` `headers` entries. Vercel reads no
46
+ * `_headers` file, so a static deploy of `dist/` carries the same rules here —
47
+ * the charset on the raw Markdown and text files, the homepage `Link` header,
48
+ * and the media types and CORS header of the discovery files.
49
+ */
50
+ export declare const buildVercelHeaders: (config: ResolvedConfig, homeLinkHeader?: string | null) => VercelHeader[];
@@ -0,0 +1,42 @@
1
+ import type { BlumeProject } from "../core/project-graph.ts";
2
+ import type { ResolvedConfig } from "../core/schema.ts";
3
+ import type { BuildLog } from "./platforms/types.ts";
4
+ /**
5
+ * The response headers the Node standalone server can't set itself. Its static
6
+ * handler (`send`) types a file by its extension alone and sends no CORS
7
+ * header, so the extensionless well-known files go out as
8
+ * `application/octet-stream` and a registry reading the discovery documents
9
+ * from another origin is blocked — the half of the `_headers` rules
10
+ * (`deploy/headers.ts`) that a Node server has no file to read from. The Markdown
11
+ * and text charsets need no rule here: `send` already adds `charset=UTF-8` to
12
+ * `text/*` types.
13
+ */
14
+ /** The headers one exact served path (deployment base included) gets. */
15
+ export interface NodeHeaderRule {
16
+ headers: Record<string, string>;
17
+ path: string;
18
+ }
19
+ /** The server entry `@astrojs/node` writes, which the wrapper takes over. */
20
+ export declare const NODE_ENTRY_FILE = "entry.mjs";
21
+ /** Where Astro's own entry moves, beside the wrapper that imports it. */
22
+ export declare const NODE_ASTRO_ENTRY_FILE = "astro-entry.mjs";
23
+ /** The header rules for this config, merged per path. */
24
+ export declare const nodeHeaderRules: (config: ResolvedConfig) => NodeHeaderRule[];
25
+ /**
26
+ * The entry that replaces Astro's: it stamps the rules' headers on the
27
+ * response, then hands the request to Astro's handler. `send` leaves a
28
+ * Content-Type that is already set alone, so the registered media type wins.
29
+ *
30
+ * It keeps Astro's contract — the `handler`, `options`, and `startServer`
31
+ * exports `astro preview` and a middleware-mode host import — and its
32
+ * autostart: Astro's entry is imported with autostart off (the env var is read
33
+ * when that module evaluates, so the import has to be dynamic), and the
34
+ * wrapper starts the server itself with its listener in front of Astro's.
35
+ */
36
+ export declare const nodeEntryWrapper: (rules: readonly NodeHeaderRule[]) => string;
37
+ /**
38
+ * Put the header wrapper in front of a Node server build's entry. A build
39
+ * with no rule (no API catalog, AI catalog, MCP server, signatures directory,
40
+ * or downloaded content assets) leaves Astro's entry alone.
41
+ */
42
+ export declare const wrapNodeEntry: (project: BlumeProject, log: BuildLog) => Promise<void>;
@@ -0,0 +1,40 @@
1
+ import type { BlumeProject } from "../../core/project-graph.ts";
2
+ import type { ProjectContext } from "../../core/types.ts";
3
+ import type { BuildLog, DeployPlatform } from "./types.ts";
4
+ /**
5
+ * Wire `Accept: text/markdown` negotiation into a server build. The ASSETS
6
+ * binding serves the prerendered content pages before the Worker runs — and
7
+ * even a request that reaches the Worker is answered by the adapter's handler
8
+ * from that binding, ahead of the only place middleware runs — so the
9
+ * negotiation lives in a generated wrapper Worker, routed to by
10
+ * `assets.run_worker_first` (see `deploy/cloudflare-negotiation.ts`). Both
11
+ * pieces are spliced into the adapter's emitted `dist/server` bundle.
12
+ */
13
+ export declare const emitCloudflareNegotiation: (project: BlumeProject, log: BuildLog) => Promise<void>;
14
+ /**
15
+ * Point `wrangler deploy` run from the project root at the built Worker.
16
+ * The adapter's Vite plugin writes its redirect beside the Astro root — the
17
+ * hidden `.blume` runtime, where nobody runs wrangler — and wrangler only
18
+ * looks in the working directory and its parents, so from the project root it
19
+ * finds no config and fails with "Could not detect a directory containing
20
+ * static files". This writes the same redirect at the project root, its paths
21
+ * rebased there. A user wrangler config at the project root stays compatible:
22
+ * wrangler accepts a redirect in the same directory's `.wrangler/deploy/`.
23
+ */
24
+ export declare const emitCloudflareDeployConfig: (context: ProjectContext) => Promise<void>;
25
+ /**
26
+ * Name the built Worker after the project when it still carries the shared
27
+ * runtime name. A name set in the project's own wrangler config reaches the
28
+ * built config instead, and is left alone.
29
+ */
30
+ export declare const nameCloudflareWorker: (project: BlumeProject, log: BuildLog) => Promise<void>;
31
+ /**
32
+ * Cloudflare Workers and Pages. A server build emits the Worker into
33
+ * `dist/server` and serves `dist/client` through the ASSETS binding, which
34
+ * honors `_headers` from that directory exactly as Pages does — so the file
35
+ * applies to both output modes here. Without a configured driver the adapter
36
+ * force-enables KV-backed sessions and declares a `SESSION` binding that
37
+ * `wrangler deploy` then demands a namespace for, even though Blume never
38
+ * reads `Astro.session`; `session: false` opts the project out.
39
+ */
40
+ export declare const cloudflarePlatform: DeployPlatform;
@@ -0,0 +1,18 @@
1
+ import type { ResolvedDeployment } from "../adapters/registry.ts";
2
+ import type { DeployPlatform } from "./types.ts";
3
+ /**
4
+ * Every platform, in the order their env detection is tried when a build's
5
+ * own adapter says nothing about where it runs (a static build on Vercel
6
+ * still gets its site URL from `VERCEL_URL`).
7
+ */
8
+ export declare const DEPLOY_PLATFORMS: readonly DeployPlatform[];
9
+ /** The behaviors behind a resolved deployment descriptor. */
10
+ export declare const deployPlatform: (deployment: Pick<ResolvedDeployment, "kind">) => DeployPlatform;
11
+ /**
12
+ * The site URL the platform env implies, or null. The configured adapter's
13
+ * own platform is asked first, then the rest in registration order, so a
14
+ * static build (which names no host) still picks up the URL of whichever
15
+ * platform it is building on.
16
+ */
17
+ export declare const inferDeploymentSite: (deployment: Pick<ResolvedDeployment, "kind">, env: NodeJS.ProcessEnv) => string | null;
18
+ export type { AstroAdapterSpec, BuildLog, DeployPlatform, FinalizeBuildOptions, HiddenRuntime, PlatformEnv, RedirectFile, } from "./types.ts";
@@ -0,0 +1,13 @@
1
+ import type { DeployPlatform, RedirectFile } from "./types.ts";
2
+ /** `_redirects`, the format Netlify and Cloudflare Pages/Workers read. */
3
+ export declare const REDIRECTS_FILE: RedirectFile;
4
+ /**
5
+ * Netlify. A server build runs on Netlify Functions from the Frameworks API
6
+ * tree the adapter writes to `.netlify/v1`, relative to the Astro root —
7
+ * which for Blume is the hidden `.blume` runtime, so the tree is moved up to
8
+ * the project root after the build (the `.netlify/build` sibling is only the
9
+ * intermediate SSR bundle, already traced into `v1/functions`, and moving
10
+ * `v1` alone keeps the `.netlify/state.json` from `netlify link` intact).
11
+ * Static assets are served from `dist/` either way.
12
+ */
13
+ export declare const netlifyPlatform: DeployPlatform;
@@ -0,0 +1,11 @@
1
+ import type { DeployPlatform } from "./types.ts";
2
+ /**
3
+ * A self-hosted Node server. The standalone server in `dist/server` serves
4
+ * `dist/client` through its own static handler, which has no `_headers` or
5
+ * `_redirects` support — redirects are answered at request time from the
6
+ * Astro config, and a header file written there would be inert. The headers
7
+ * the discovery files need come from a wrapper around the server entry
8
+ * instead (`deploy/node-headers.ts`). No platform env to detect: the site URL
9
+ * has to be configured.
10
+ */
11
+ export declare const nodePlatform: DeployPlatform;
@@ -0,0 +1,27 @@
1
+ import type { ProjectContext } from "../../core/types.ts";
2
+ /** Astro's build output dir: the runtime's own `distDir`, else `<root>/dist`. */
3
+ export declare const distDir: (context: ProjectContext) => string;
4
+ /**
5
+ * The `client/` half of a server build that keeps Astro's `dist/client` +
6
+ * `dist/server` split and serves only the client half: the Node standalone
7
+ * server's static handler reads only `build.client`, and `@astrojs/cloudflare`
8
+ * declares `preserveBuildClientDir: true` and points the ASSETS binding in the
9
+ * `dist/server/wrangler.json` it generates at `../client`.
10
+ */
11
+ export declare const clientDir: (context: ProjectContext) => string;
12
+ /**
13
+ * The root a deploy adapter is shown, in place of the `.blume` runtime Astro
14
+ * actually roots at. Adapters assume `outDir` is `<root>/dist` and resolve
15
+ * their own output (and Vercel's dependency trace) against `root`, so the
16
+ * root implied by Blume's `outDir` is the one that keeps that assumption
17
+ * true. See `withAdapterRoot`.
18
+ *
19
+ * For a normal build that is the project root (`<project>/dist` ->
20
+ * `<project>`). For a relocated runtime (`blume build --isolated`) it is the
21
+ * runtime dir itself (`<runtime>/dist` -> `<runtime>`), keeping a verify
22
+ * build's adapter output self-contained instead of overwriting the real
23
+ * `.vercel/output`.
24
+ */
25
+ export declare const adapterRoot: (context: ProjectContext) => string;
26
+ /** Prefix a bare host with `https://`; pass values that are already absolute. */
27
+ export declare const toSiteUrl: (value: string | undefined) => string | null;
@@ -0,0 +1,10 @@
1
+ import type { DeployPlatform } from "./types.ts";
2
+ /**
3
+ * A static build for an unnamed host — the default. Nothing is known about
4
+ * where `dist/` ends up, so the build writes every platform's redirect file
5
+ * (`_redirects` for Netlify and Cloudflare, `vercel.json` for Vercel, plus the
6
+ * manifest for everything else) and the `_headers` file; a host that reads
7
+ * none of them ignores them harmlessly. The site URL is still inferred from
8
+ * whichever platform env the build runs in.
9
+ */
10
+ export declare const staticPlatform: DeployPlatform;
@@ -0,0 +1,104 @@
1
+ import type { JsonValue } from "../../core/adapter.ts";
2
+ import type { BlumeProject } from "../../core/project-graph.ts";
3
+ import type { ResolvedConfig } from "../../core/schema.ts";
4
+ import type { ProjectContext } from "../../core/types.ts";
5
+ import type { DeployAdapterKind } from "../adapters/registry.ts";
6
+ import type { DeployOutput } from "../adapters/types.ts";
7
+ /**
8
+ * Everything Blume does differently per deployment target, keyed by the
9
+ * descriptor's `kind`. The descriptor a `blume/deploy` factory returns is
10
+ * plain data (it is inlined into the generated project), so the behavior
11
+ * lives here, one module per adapter, and every consumer reads it through
12
+ * `deployPlatform()` instead of switching on an adapter name.
13
+ */
14
+ /** How the generated `astro.config.mjs` constructs the `@astrojs/*` adapter. */
15
+ export interface AstroAdapterSpec {
16
+ /** Top-level `defineConfig` entries the adapter needs beside itself. */
17
+ config: Record<string, JsonValue>;
18
+ /** Blume's own constructor options; the user's passthrough is spread over them. */
19
+ options: (context: ProjectContext) => Record<string, JsonValue>;
20
+ /** The package the config imports the adapter from. */
21
+ package: string;
22
+ }
23
+ /** Platform env detection, for inferring `site` and the audit's wording. */
24
+ export interface PlatformEnv {
25
+ /** True when the env says the build is running on this platform. */
26
+ detect: (env: NodeJS.ProcessEnv) => boolean;
27
+ /** The canonical site URL from the platform's env vars, or null. */
28
+ site: (env: NodeJS.ProcessEnv) => string | null;
29
+ }
30
+ type Redirect = ResolvedConfig["redirects"][number];
31
+ /** A redirect file a static build writes for the host to read. */
32
+ export interface RedirectFile {
33
+ build: (redirects: Redirect[]) => string;
34
+ name: string;
35
+ }
36
+ /** The log surface a post-build step reports through (the CLI's logger). */
37
+ export interface BuildLog {
38
+ error: (message: string) => void;
39
+ info: (message: string) => void;
40
+ success: (message: string) => void;
41
+ warn: (message: string) => void;
42
+ }
43
+ export interface FinalizeBuildOptions {
44
+ /** A `blume build --isolated` verify: check the output, publish nothing. */
45
+ isolated: boolean;
46
+ log: BuildLog;
47
+ project: BlumeProject;
48
+ }
49
+ /**
50
+ * What exists only because the Astro project lives in the hidden `.blume/`
51
+ * runtime instead of the project root. RFC #114 (integration-first) puts the
52
+ * Astro project at the root, after which this whole group goes: the platform
53
+ * then reads its bundle where the adapter wrote it, and the adapter sees the
54
+ * real root without being told.
55
+ */
56
+ export interface HiddenRuntime {
57
+ /**
58
+ * The top-level directory the adapter's deploy bundle lands in, for
59
+ * `.gitignore`. The platform's own state lives beside the bundle
60
+ * (`.vercel/project.json`, `.netlify/state.json`), so the directory is
61
+ * ignored whole. Null when the bundle lands in `dist/`, already ignored.
62
+ */
63
+ ignoreDir: string | null;
64
+ /**
65
+ * Hand the adapter the project root (`withAdapterRoot`) instead of the
66
+ * runtime: for an adapter that resolves its output tree, or a dependency
67
+ * trace, against `root`, which for Blume is the hidden runtime.
68
+ */
69
+ showProjectRoot: boolean;
70
+ /**
71
+ * A bundle written relative to the Astro root, to move from
72
+ * `<root>/.blume/<path>` up to `<root>/<path>` after the build, where the
73
+ * platform looks for it. Null when nothing needs moving.
74
+ */
75
+ surfacePath: string | null;
76
+ }
77
+ export interface DeployPlatform {
78
+ /** The `@astrojs/*` adapter a server build uses; null for the static kind. */
79
+ astro: AstroAdapterSpec | null;
80
+ /** Env detection, or null for a target with no platform env (Node, static). */
81
+ env: PlatformEnv | null;
82
+ /**
83
+ * The post-build step for a server build — Vercel's function-bundle audit
84
+ * and negotiation routes, Cloudflare's wrapper Worker. Resolves to false
85
+ * when the build must not ship.
86
+ */
87
+ finalizeBuild: ((options: FinalizeBuildOptions) => Promise<boolean>) | null;
88
+ hiddenRuntime: HiddenRuntime;
89
+ kind: DeployAdapterKind;
90
+ /** Whether a server build honors `Accept: text/markdown` at the content URLs. */
91
+ negotiatesMarkdown: boolean;
92
+ /**
93
+ * Whether the platform applies a `_headers` file to the static assets it
94
+ * serves, per output mode.
95
+ */
96
+ readsHeaderFiles: Record<DeployOutput, boolean>;
97
+ /** The redirect files a static build writes, beside the manifest. */
98
+ redirectFiles: RedirectFile[];
99
+ /** Where a server build's deploy bundle lands. */
100
+ serverOutputDir: (context: ProjectContext) => string;
101
+ /** The directory a server build serves as static files. */
102
+ serverStaticDir: (context: ProjectContext) => string;
103
+ }
104
+ export {};
@@ -0,0 +1,32 @@
1
+ import type { BlumeProject } from "../../core/project-graph.ts";
2
+ import type { BuildLog, DeployPlatform, RedirectFile } from "./types.ts";
3
+ /** `vercel.json` with a `redirects` array, for a static deploy of `dist/`. */
4
+ export declare const VERCEL_JSON_FILE: RedirectFile;
5
+ /**
6
+ * Refuse to ship a function bundle that would crash at runtime: a bare import
7
+ * the adapter's dependency trace silently dropped (see
8
+ * `deploy/function-bundle.ts`). A missing package that is one of Blume's own
9
+ * dependencies is fatal — the generated runtime imports it, so every request
10
+ * would die; a project's own external import is reported as a warning and
11
+ * left to the author. Resolves to whether the bundle may ship.
12
+ */
13
+ export declare const checkVercelFunctionBundles: (outputDir: string, root: string, log: BuildLog) => Promise<boolean>;
14
+ /**
15
+ * Splice `Accept: text/markdown` negotiation routes into the adapter's Build
16
+ * Output config, so a content-page request that prefers Markdown gets the
17
+ * page's prerendered `.md` mirror (content pages are prerendered even in
18
+ * server output, so Astro middleware never sees them — the routing layer is
19
+ * the only request-time hook). The adapter writes the config straight to the
20
+ * root it was shown.
21
+ */
22
+ export declare const emitVercelNegotiation: (project: BlumeProject, log: BuildLog) => Promise<void>;
23
+ /**
24
+ * Vercel. A server build's Build Output tree lands at `.vercel/output` — at
25
+ * the project root, because the adapter is handed that root up front: its
26
+ * `@vercel/nft` dependency trace is rooted there too, and tracing from the
27
+ * hidden runtime silently drops the function's chunks and `node_modules`.
28
+ * Static assets are served from the tree's `static/` half, so the deploy
29
+ * artifacts are written there; headers arrive through the routing config
30
+ * rather than a `_headers` file, which Vercel never reads.
31
+ */
32
+ export declare const vercelPlatform: DeployPlatform;