blume 2.0.3 → 2.1.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 (607) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +142 -0
  3. package/README.md +1 -1
  4. package/dist/cli/{chunk-5f86nr5m.js → chunk-073rdvgb.js} +21 -48
  5. package/dist/cli/{chunk-5f86nr5m.js.map → chunk-073rdvgb.js.map} +4 -5
  6. package/dist/cli/{chunk-ga0pf4aj.js → chunk-0n9xkp3d.js} +12 -3
  7. package/dist/cli/{chunk-ga0pf4aj.js.map → chunk-0n9xkp3d.js.map} +3 -3
  8. package/dist/cli/chunk-150jk7km.js +52 -0
  9. package/dist/cli/chunk-150jk7km.js.map +10 -0
  10. package/dist/cli/{chunk-9t7a85s3.js → chunk-313vnn40.js} +30 -19
  11. package/dist/cli/chunk-313vnn40.js.map +10 -0
  12. package/dist/cli/{chunk-tkacnehg.js → chunk-3v3ffbrj.js} +2 -2
  13. package/dist/cli/{chunk-q58y5e6a.js → chunk-3x6x3pph.js} +46 -24
  14. package/dist/cli/chunk-3x6x3pph.js.map +10 -0
  15. package/dist/cli/{chunk-1d7ve1dm.js → chunk-42t4jxdx.js} +37 -5
  16. package/dist/cli/chunk-42t4jxdx.js.map +12 -0
  17. package/dist/cli/{chunk-8ktnccpt.js → chunk-54ztw1nj.js} +21 -2
  18. package/dist/cli/chunk-54ztw1nj.js.map +10 -0
  19. package/dist/cli/{chunk-hm3vjy5s.js → chunk-5vjtgs6e.js} +28 -10
  20. package/dist/cli/{chunk-hm3vjy5s.js.map → chunk-5vjtgs6e.js.map} +4 -4
  21. package/dist/cli/chunk-66w9j7p6.js +322 -0
  22. package/dist/cli/chunk-66w9j7p6.js.map +14 -0
  23. package/dist/cli/{chunk-2hsdwb9n.js → chunk-7ppf1rva.js} +34 -18
  24. package/dist/cli/chunk-7ppf1rva.js.map +10 -0
  25. package/dist/cli/{chunk-r9rcc4w7.js → chunk-8y2kmjv8.js} +7 -7
  26. package/dist/cli/{chunk-r20tn01b.js → chunk-c1y538kd.js} +8 -2
  27. package/dist/cli/{chunk-r20tn01b.js.map → chunk-c1y538kd.js.map} +3 -3
  28. package/dist/cli/{chunk-2eytanqx.js → chunk-c887fj0s.js} +2 -2
  29. package/dist/cli/{chunk-p3v96n38.js → chunk-cfyg47zg.js} +16 -6
  30. package/dist/cli/chunk-cfyg47zg.js.map +10 -0
  31. package/dist/cli/chunk-cm89scdv.js +443 -0
  32. package/dist/cli/chunk-cm89scdv.js.map +11 -0
  33. package/dist/cli/{chunk-akbpwfxc.js → chunk-dzwehpy7.js} +2 -2
  34. package/dist/cli/{chunk-wrr3j9w9.js → chunk-e6atmn4h.js} +299 -72
  35. package/dist/cli/chunk-e6atmn4h.js.map +36 -0
  36. package/dist/cli/{chunk-tzmab476.js → chunk-e8xw9qkh.js} +8 -6
  37. package/dist/cli/{chunk-tzmab476.js.map → chunk-e8xw9qkh.js.map} +3 -3
  38. package/dist/cli/{chunk-6dsbexzp.js → chunk-e9q7a2ak.js} +17 -15
  39. package/dist/cli/{chunk-6dsbexzp.js.map → chunk-e9q7a2ak.js.map} +2 -2
  40. package/dist/cli/{chunk-pv29h0wf.js → chunk-ehweg4fr.js} +5155 -1249
  41. package/dist/cli/chunk-ehweg4fr.js.map +218 -0
  42. package/dist/cli/{chunk-c8chx29p.js → chunk-ep6nd0rn.js} +390 -318
  43. package/dist/cli/chunk-ep6nd0rn.js.map +36 -0
  44. package/dist/cli/{chunk-p73c0m7w.js → chunk-fdrkhpjy.js} +18 -15
  45. package/dist/cli/{chunk-p73c0m7w.js.map → chunk-fdrkhpjy.js.map} +3 -3
  46. package/dist/cli/{chunk-2z928egk.js → chunk-ft9vfys6.js} +5 -5
  47. package/dist/cli/{chunk-5m5nmvyq.js → chunk-gb420vvz.js} +316 -79
  48. package/dist/cli/chunk-gb420vvz.js.map +17 -0
  49. package/dist/cli/{chunk-vg9r4eb9.js → chunk-hebn0tpx.js} +86 -13
  50. package/dist/cli/chunk-hebn0tpx.js.map +14 -0
  51. package/dist/cli/{chunk-35d4wj9f.js → chunk-htrwgabr.js} +41 -23
  52. package/dist/cli/chunk-htrwgabr.js.map +15 -0
  53. package/dist/cli/{chunk-g4hq16wv.js → chunk-hx3xqnk9.js} +16 -14
  54. package/dist/cli/{chunk-g4hq16wv.js.map → chunk-hx3xqnk9.js.map} +2 -2
  55. package/dist/cli/chunk-j134vrp2.js +65 -0
  56. package/dist/cli/chunk-j134vrp2.js.map +10 -0
  57. package/dist/cli/{chunk-a58773jm.js → chunk-kma9f6sf.js} +2 -2
  58. package/dist/cli/chunk-kwrg63tm.js +31 -0
  59. package/dist/cli/chunk-kwrg63tm.js.map +10 -0
  60. package/dist/cli/{chunk-ey84smr6.js → chunk-mrcccgnh.js} +6 -6
  61. package/dist/cli/{chunk-ey84smr6.js.map → chunk-mrcccgnh.js.map} +1 -1
  62. package/dist/cli/{chunk-yfyb25rh.js → chunk-n0v7m8ry.js} +24 -8
  63. package/dist/cli/chunk-n0v7m8ry.js.map +14 -0
  64. package/dist/cli/{chunk-j85vccga.js → chunk-ncj7w596.js} +576 -367
  65. package/dist/cli/chunk-ncj7w596.js.map +35 -0
  66. package/dist/cli/{chunk-5xvm6tfj.js → chunk-nq1d20w2.js} +17 -15
  67. package/dist/cli/{chunk-5xvm6tfj.js.map → chunk-nq1d20w2.js.map} +2 -2
  68. package/dist/cli/{chunk-pehfxfta.js → chunk-nrns10mj.js} +6 -98
  69. package/dist/cli/chunk-nrns10mj.js.map +10 -0
  70. package/dist/cli/{chunk-crgn1q09.js → chunk-sds923fa.js} +4 -4
  71. package/dist/cli/chunk-t2m5j4pr.js +104 -0
  72. package/dist/cli/chunk-t2m5j4pr.js.map +11 -0
  73. package/dist/cli/{chunk-acanzt5p.js → chunk-tdqhyxfz.js} +6 -6
  74. package/dist/cli/chunk-tphac74f.js +126 -0
  75. package/dist/cli/chunk-tphac74f.js.map +11 -0
  76. package/dist/cli/chunk-w1r4vase.js +18 -0
  77. package/dist/cli/chunk-w1r4vase.js.map +10 -0
  78. package/dist/cli/{chunk-3em5wd2y.js → chunk-zccbjcj0.js} +4 -3
  79. package/dist/cli/{chunk-3em5wd2y.js.map → chunk-zccbjcj0.js.map} +2 -2
  80. package/dist/cli/index.js +31 -20
  81. package/dist/cli/index.js.map +5 -5
  82. package/dist/types/ai/agent-surface.d.ts +8 -7
  83. package/dist/types/ai/ai-catalog.d.ts +7 -0
  84. package/dist/types/ai/ask-context.d.ts +26 -0
  85. package/dist/types/ai/ask.d.ts +271 -58
  86. package/dist/types/ai/component-markdown.d.ts +2 -0
  87. package/dist/types/ai/index.d.ts +2 -2
  88. package/dist/types/ai/openapi-components.d.ts +4 -1
  89. package/dist/types/ai/site-skill.d.ts +26 -0
  90. package/dist/types/ai/skills.d.ts +16 -0
  91. package/dist/types/astro/integration.d.ts +9 -0
  92. package/dist/types/astro/markdown-negotiation.d.ts +3 -0
  93. package/dist/types/astro/pages.d.ts +10 -0
  94. package/dist/types/captcha/hcaptcha.d.ts +27 -0
  95. package/dist/types/captcha/index.d.ts +28 -0
  96. package/dist/types/captcha/schema.d.ts +29 -0
  97. package/dist/types/captcha/turnstile.d.ts +28 -0
  98. package/dist/types/cli/init/scaffold.d.ts +1 -1
  99. package/dist/types/components/content/api-field.d.ts +62 -0
  100. package/dist/types/components/content/api-page.d.ts +100 -0
  101. package/dist/types/components/layout/nav-utils.d.ts +26 -0
  102. package/dist/types/components/openapi/code-samples.d.ts +29 -0
  103. package/dist/types/components/openapi/helpers.d.ts +158 -0
  104. package/dist/types/components/openapi/security.d.ts +95 -0
  105. package/dist/types/components/openapi/snippets.d.ts +60 -0
  106. package/dist/types/consent/ethyca.d.ts +48 -0
  107. package/dist/types/consent/index.d.ts +37 -0
  108. package/dist/types/consent/native.d.ts +28 -0
  109. package/dist/types/consent/osano.d.ts +42 -0
  110. package/dist/types/consent/schema.d.ts +110 -0
  111. package/dist/types/core/changelog-index.d.ts +8 -0
  112. package/dist/types/core/config-input.d.ts +217 -23
  113. package/dist/types/core/data.d.ts +53 -4
  114. package/dist/types/core/footer.d.ts +8 -0
  115. package/dist/types/core/i18n-ui.d.ts +88 -0
  116. package/dist/types/core/includes.d.ts +8 -2
  117. package/dist/types/core/links.d.ts +8 -0
  118. package/dist/types/core/localizable.d.ts +7 -0
  119. package/dist/types/core/page-modes.d.ts +29 -0
  120. package/dist/types/core/probe.d.ts +2 -0
  121. package/dist/types/core/project-graph.d.ts +6 -0
  122. package/dist/types/core/redirect-patterns.d.ts +152 -0
  123. package/dist/types/core/related.d.ts +40 -0
  124. package/dist/types/core/schema.d.ts +670 -56
  125. package/dist/types/core/sources/cache.d.ts +3 -0
  126. package/dist/types/core/sources/contentful-rich-text.d.ts +11 -2
  127. package/dist/types/core/sources/contentful.d.ts +17 -1
  128. package/dist/types/core/sources/lexical.d.ts +5 -0
  129. package/dist/types/core/sources/normalize.d.ts +20 -1
  130. package/dist/types/core/sources/read.d.ts +5 -0
  131. package/dist/types/core/sources/remote.d.ts +37 -10
  132. package/dist/types/core/sources/sanity.d.ts +1 -1
  133. package/dist/types/core/types.d.ts +18 -1
  134. package/dist/types/core/variables.d.ts +42 -0
  135. package/dist/types/deploy/adapter-output.d.ts +2 -1
  136. package/dist/types/deploy/adapters/cloudflare.d.ts +7 -5
  137. package/dist/types/deploy/adapters/node.d.ts +58 -23
  138. package/dist/types/deploy/adapters/registry.d.ts +10 -0
  139. package/dist/types/deploy/adapters/types.d.ts +3 -2
  140. package/dist/types/deploy/node-headers.d.ts +13 -2
  141. package/dist/types/deploy/platforms/cloudflare.d.ts +15 -7
  142. package/dist/types/deploy/platforms/netlify.d.ts +7 -0
  143. package/dist/types/deploy/platforms/node.d.ts +3 -1
  144. package/dist/types/deploy/platforms/types.d.ts +18 -7
  145. package/dist/types/deploy/platforms/vercel.d.ts +26 -1
  146. package/dist/types/deploy/redirects.d.ts +55 -11
  147. package/dist/types/deploy/sitemap.d.ts +2 -1
  148. package/dist/types/deploy/vercel-negotiation.d.ts +51 -21
  149. package/dist/types/markdown/code-title.d.ts +17 -0
  150. package/dist/types/markdown/features.d.ts +3 -2
  151. package/dist/types/narration/build.d.ts +70 -0
  152. package/dist/types/narration/provider.d.ts +26 -0
  153. package/dist/types/narration/script.d.ts +154 -0
  154. package/dist/types/openapi/checks.d.ts +27 -0
  155. package/dist/types/openapi/graphql.d.ts +6 -0
  156. package/dist/types/openapi/model.d.ts +27 -10
  157. package/dist/types/openapi/overlay.d.ts +54 -0
  158. package/dist/types/openapi/parse.d.ts +16 -0
  159. package/dist/types/openapi/references.d.ts +30 -4
  160. package/dist/types/ratelimit/cloudflare.d.ts +39 -0
  161. package/dist/types/ratelimit/index.d.ts +27 -0
  162. package/dist/types/ratelimit/memory.d.ts +36 -0
  163. package/dist/types/ratelimit/schema.d.ts +119 -0
  164. package/dist/types/ratelimit/upstash.d.ts +46 -0
  165. package/dist/types/ratelimit/wrangler.d.ts +23 -0
  166. package/dist/types/reference/asyncapi.d.ts +10 -10
  167. package/dist/types/reference/graphql.d.ts +89 -11
  168. package/dist/types/reference/index.d.ts +1 -1
  169. package/dist/types/reference/openapi.d.ts +33 -12
  170. package/dist/types/reference/options.d.ts +82 -6
  171. package/dist/types/reference/scalar.d.ts +13 -0
  172. package/dist/types/reference/schema.d.ts +144 -36
  173. package/dist/types/search/adapters/registry.d.ts +3 -0
  174. package/dist/types/search/adapters/typesense.d.ts +14 -4
  175. package/dist/types/search/build.d.ts +3 -1
  176. package/dist/types/search/documents.d.ts +12 -1
  177. package/dist/types/search/orama-index.d.ts +13 -9
  178. package/dist/types/search/sync/algolia.d.ts +5 -2
  179. package/dist/types/search/sync/index.d.ts +3 -1
  180. package/dist/types/search/sync/typesense.d.ts +11 -7
  181. package/dist/types/seo/metatags.d.ts +20 -0
  182. package/dist/types/sources/contentful.d.ts +16 -0
  183. package/dist/types/sources/github-releases.d.ts +8 -1
  184. package/dist/types/sources/payload.d.ts +2 -0
  185. package/dist/types/sources/registry.d.ts +54 -0
  186. package/dist/types/sources/shared.d.ts +3 -0
  187. package/dist/types/sources/strapi.d.ts +2 -0
  188. package/docs/01-quickstart.mdx +4 -2
  189. package/docs/02-deployment.mdx +71 -17
  190. package/docs/03-upgrading.mdx +4 -4
  191. package/docs/04-migrating.mdx +1 -1
  192. package/docs/advanced/changelog.mdx +13 -2
  193. package/docs/advanced/skills.mdx +15 -1
  194. package/docs/cli/audit.mdx +51 -8
  195. package/docs/cli/doctor.mdx +5 -1
  196. package/docs/cli/evals.mdx +4 -4
  197. package/docs/cli/index.mdx +1 -0
  198. package/docs/cli/translate.mdx +1 -0
  199. package/docs/cli/validate.mdx +4 -3
  200. package/docs/configuration/analytics.mdx +3 -1
  201. package/docs/configuration/assistant.mdx +194 -38
  202. package/docs/configuration/consent.mdx +100 -0
  203. package/docs/configuration/customization.mdx +8 -6
  204. package/docs/configuration/export.mdx +5 -3
  205. package/docs/configuration/index.mdx +64 -5
  206. package/docs/configuration/meta.ts +3 -0
  207. package/docs/configuration/narration.mdx +119 -0
  208. package/docs/configuration/rate-limiting.mdx +90 -0
  209. package/docs/configuration/search.mdx +63 -12
  210. package/docs/configuration/theming.mdx +3 -1
  211. package/docs/content/components.mdx +108 -2
  212. package/docs/content/frontmatter.mdx +80 -2
  213. package/docs/content/i18n.mdx +39 -4
  214. package/docs/content/includes.mdx +16 -0
  215. package/docs/content/meta.mdx +1 -0
  216. package/docs/content/meta.ts +1 -0
  217. package/docs/content/navigation.mdx +32 -10
  218. package/docs/content/sources/contentful.mdx +35 -0
  219. package/docs/content/sources/custom.mdx +43 -0
  220. package/docs/content/sources/github-releases.mdx +39 -0
  221. package/docs/content/sources/index.mdx +91 -0
  222. package/docs/content/sources/meta.ts +16 -0
  223. package/docs/content/sources/notion.mdx +32 -0
  224. package/docs/content/sources/obsidian.mdx +37 -0
  225. package/docs/content/sources/payload.mdx +31 -0
  226. package/docs/content/sources/remote-mdx.mdx +44 -0
  227. package/docs/content/sources/sanity.mdx +29 -0
  228. package/docs/content/sources/strapi.mdx +32 -0
  229. package/docs/content/syntax.mdx +69 -4
  230. package/docs/content/variables.mdx +41 -0
  231. package/docs/discoverability/agent-discovery.mdx +29 -2
  232. package/docs/discoverability/index.mdx +2 -2
  233. package/docs/discoverability/json-api.mdx +2 -0
  234. package/docs/discoverability/llms-txt.mdx +2 -2
  235. package/docs/discoverability/markdown.mdx +3 -1
  236. package/docs/discoverability/mcp.mdx +4 -0
  237. package/docs/discoverability/metadata.mdx +17 -0
  238. package/docs/discoverability/sitemap-and-robots.mdx +1 -1
  239. package/docs/references/api-pages.mdx +74 -0
  240. package/docs/references/asyncapi.mdx +4 -2
  241. package/docs/references/graphql.mdx +14 -2
  242. package/docs/references/meta.ts +1 -1
  243. package/docs/references/openapi.mdx +148 -7
  244. package/docs/references/scalar.mdx +3 -1
  245. package/package.json +43 -8
  246. package/skills/blume/SKILL.md +3 -0
  247. package/skills/blume-migrate/SKILL.md +6 -6
  248. package/skills/blume-migrate/references/docusaurus.md +7 -7
  249. package/skills/blume-migrate/references/fumadocs.md +17 -13
  250. package/skills/blume-migrate/references/mintlify.md +37 -19
  251. package/skills/blume-migrate/references/nextra.md +10 -7
  252. package/skills/blume-migrate/references/starlight.md +11 -8
  253. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +60 -14
  254. package/skills/blume-write-skill/SKILL.md +82 -0
  255. package/src/ai/agent-readability.ts +2 -1
  256. package/src/ai/agent-surface.ts +9 -7
  257. package/src/ai/ai-catalog.ts +6 -3
  258. package/src/ai/ask-context.ts +103 -20
  259. package/src/ai/ask-data.ts +6 -0
  260. package/src/ai/ask-limits.ts +13 -0
  261. package/src/ai/ask-tools.ts +142 -0
  262. package/src/ai/ask.ts +354 -76
  263. package/src/ai/changelog-markdown.ts +11 -6
  264. package/src/ai/component-markdown.ts +76 -1
  265. package/src/ai/cors.ts +14 -3
  266. package/src/ai/index.ts +12 -0
  267. package/src/ai/llms.ts +6 -2
  268. package/src/ai/markdown.ts +2 -1
  269. package/src/ai/mcp/data.ts +6 -0
  270. package/src/ai/mcp/query.ts +14 -6
  271. package/src/ai/openapi-components.ts +36 -6
  272. package/src/ai/relative-links.ts +4 -38
  273. package/src/ai/site-skill.ts +274 -0
  274. package/src/ai/skills.ts +35 -2
  275. package/src/ai/write-skill.ts +97 -0
  276. package/src/astro/generate.ts +210 -66
  277. package/src/astro/index.ts +1 -0
  278. package/src/astro/integration.ts +42 -4
  279. package/src/astro/markdown-negotiation.ts +3 -0
  280. package/src/astro/module-types.ts +9 -1
  281. package/src/astro/pages.ts +23 -0
  282. package/src/astro/templates.ts +406 -108
  283. package/src/astro/variables.ts +31 -0
  284. package/src/audit/catalog.ts +38 -3
  285. package/src/audit/checks/contrast.ts +183 -0
  286. package/src/audit/checks/i18n.ts +2 -3
  287. package/src/audit/checks/indexability.ts +2 -3
  288. package/src/audit/checks/links.ts +19 -13
  289. package/src/audit/checks/network.ts +110 -6
  290. package/src/audit/checks/redirects.ts +6 -4
  291. package/src/audit/checks/robots.ts +58 -2
  292. package/src/audit/checks/sitemap.ts +2 -3
  293. package/src/audit/redirects.ts +46 -15
  294. package/src/audit/run.ts +5 -0
  295. package/src/audit/types.ts +4 -1
  296. package/src/audit/url.ts +14 -5
  297. package/src/blume-modules.d.ts +12 -1
  298. package/src/captcha/client.ts +152 -0
  299. package/src/captcha/hcaptcha.ts +36 -0
  300. package/src/captcha/index.ts +28 -0
  301. package/src/captcha/schema.ts +32 -0
  302. package/src/captcha/turnstile.ts +38 -0
  303. package/src/captcha/verify.ts +71 -0
  304. package/src/cli/args.ts +51 -0
  305. package/src/cli/build-failure.ts +23 -0
  306. package/src/cli/command-meta.ts +5 -0
  307. package/src/cli/commands/audit.ts +10 -1
  308. package/src/cli/commands/dev.ts +18 -2
  309. package/src/cli/commands/doctor.ts +67 -28
  310. package/src/cli/commands/eval.ts +36 -4
  311. package/src/cli/commands/init.ts +6 -4
  312. package/src/cli/commands/skill.ts +96 -0
  313. package/src/cli/commands/validate.ts +10 -1
  314. package/src/cli/index.ts +5 -0
  315. package/src/cli/init/scaffold.ts +3 -3
  316. package/src/cli/prepare.ts +6 -3
  317. package/src/cli/required-secrets.ts +72 -30
  318. package/src/components/BlumePage.astro +2 -0
  319. package/src/components/content/ApiEndpoint.astro +18 -0
  320. package/src/components/content/ApiField.astro +79 -0
  321. package/src/components/content/ApiPlayground.astro +66 -0
  322. package/src/components/content/ApiRail.astro +19 -0
  323. package/src/components/content/Color.astro +1 -0
  324. package/src/components/content/FileTree.astro +1 -0
  325. package/src/components/content/GithubInfo.astro +1 -0
  326. package/src/components/content/Panel.astro +1 -0
  327. package/src/components/content/ParamField.astro +25 -0
  328. package/src/components/content/RequestExample.astro +17 -0
  329. package/src/components/content/ResponseExample.astro +17 -0
  330. package/src/components/content/ResponseField.astro +32 -0
  331. package/src/components/content/Step.astro +1 -0
  332. package/src/components/content/Tile.astro +1 -0
  333. package/src/components/content/Tooltip.astro +1 -0
  334. package/src/components/content/Tree.astro +1 -0
  335. package/src/components/content/TypeTable.astro +4 -1
  336. package/src/components/content/View.astro +21 -0
  337. package/src/components/content/ViewSwitcher.astro +168 -0
  338. package/src/components/content/api-field.ts +103 -0
  339. package/src/components/content/api-page.ts +248 -0
  340. package/src/components/content/mermaid-element.ts +15 -1
  341. package/src/components/content/view-switcher.ts +71 -0
  342. package/src/components/index.ts +2 -0
  343. package/src/components/islands/Assistant.astro +10 -1
  344. package/src/components/islands/assistant.tsx +104 -14
  345. package/src/components/islands/code-question.ts +62 -0
  346. package/src/components/islands/hooks.ts +136 -21
  347. package/src/components/islands/support-link.ts +68 -0
  348. package/src/components/layout/Analytics.astro +11 -2
  349. package/src/components/layout/Banner.astro +14 -10
  350. package/src/components/layout/Breadcrumbs.astro +6 -2
  351. package/src/components/layout/ConsentBanner.astro +62 -0
  352. package/src/components/layout/ConsentHead.astro +38 -0
  353. package/src/components/layout/Directory.astro +94 -0
  354. package/src/components/layout/DrawerSwitchers.astro +51 -0
  355. package/src/components/layout/Empty.astro +2 -2
  356. package/src/components/layout/Header.astro +122 -80
  357. package/src/components/layout/LanguageSwitcher.astro +48 -15
  358. package/src/components/layout/NarrationPlayer.astro +1085 -0
  359. package/src/components/layout/NavSelector.astro +33 -7
  360. package/src/components/layout/PageActions.astro +139 -24
  361. package/src/components/layout/PageFeedback.astro +54 -49
  362. package/src/components/layout/PageLayout.astro +71 -3
  363. package/src/components/layout/ReferenceLayout.astro +17 -6
  364. package/src/components/layout/RelatedPages.astro +42 -0
  365. package/src/components/layout/RootLayout.astro +318 -47
  366. package/src/components/layout/Search.astro +47 -19
  367. package/src/components/layout/SiteFooter.astro +124 -0
  368. package/src/components/layout/SiteMetatags.astro +16 -0
  369. package/src/components/layout/TableOfContents.astro +24 -17
  370. package/src/components/layout/consent/native.ts +79 -0
  371. package/src/components/layout/consent/types.ts +37 -0
  372. package/src/components/layout/footer-links.ts +53 -0
  373. package/src/components/layout/footer-socials.ts +87 -0
  374. package/src/components/layout/head-scripts.ts +6 -1
  375. package/src/components/layout/locale-redirect.ts +107 -0
  376. package/src/components/layout/nav-utils.ts +83 -0
  377. package/src/components/layout/page-feedback.ts +96 -0
  378. package/src/components/layout/search/algolia.ts +10 -1
  379. package/src/components/layout/search/analytics.ts +126 -0
  380. package/src/components/layout/search/endpoint.ts +48 -5
  381. package/src/components/layout/search/flexsearch.ts +17 -5
  382. package/src/components/layout/search/orama-cloud.ts +26 -14
  383. package/src/components/layout/search/pagefind.ts +114 -5
  384. package/src/components/layout/search/types.ts +32 -0
  385. package/src/components/layout/search/typesense.ts +19 -3
  386. package/src/components/openapi/AsyncApiOperation.astro +14 -7
  387. package/src/components/openapi/Authorization.astro +10 -0
  388. package/src/components/openapi/GraphqlOperation.astro +5 -0
  389. package/src/components/openapi/Operation.astro +184 -13
  390. package/src/components/openapi/ParametersTable.astro +8 -4
  391. package/src/components/openapi/Playground.astro +7 -1
  392. package/src/components/openapi/RequestBody.astro +24 -5
  393. package/src/components/openapi/RequestPanel.astro +59 -7
  394. package/src/components/openapi/Responses.astro +7 -4
  395. package/src/components/openapi/SchemaTable.astro +15 -3
  396. package/src/components/openapi/async-snippets.ts +65 -9
  397. package/src/components/openapi/async.ts +123 -29
  398. package/src/components/openapi/code-samples.ts +97 -0
  399. package/src/components/openapi/graphql-helpers.ts +35 -12
  400. package/src/components/openapi/helpers.ts +36 -2
  401. package/src/components/openapi/message-model.ts +54 -11
  402. package/src/components/openapi/message.ts +14 -4
  403. package/src/components/openapi/operation-model.ts +16 -7
  404. package/src/components/openapi/playground-client.ts +24 -5
  405. package/src/components/openapi/playground-schema.ts +1 -1
  406. package/src/components/openapi/schema-tree.ts +44 -14
  407. package/src/components/openapi/security.ts +16 -3
  408. package/src/components/openapi/snippets.ts +873 -10
  409. package/src/components/openapi/validate-json.ts +4 -3
  410. package/src/components/props.ts +6 -0
  411. package/src/consent/client.ts +95 -0
  412. package/src/consent/clients.ts +19 -0
  413. package/src/consent/ethyca.ts +71 -0
  414. package/src/consent/head.ts +24 -0
  415. package/src/consent/index.ts +37 -0
  416. package/src/consent/init.ts +29 -0
  417. package/src/consent/native.ts +36 -0
  418. package/src/consent/osano.ts +59 -0
  419. package/src/consent/schema.ts +30 -0
  420. package/src/core/builtin-tags.ts +5 -0
  421. package/src/core/changelog-index.ts +31 -1
  422. package/src/core/client-address.ts +19 -0
  423. package/src/core/component-diagnostics.ts +53 -0
  424. package/src/core/component-overrides.ts +32 -0
  425. package/src/core/config-input.ts +225 -23
  426. package/src/core/data.ts +46 -4
  427. package/src/core/diagnostics.ts +8 -2
  428. package/src/core/footer.ts +26 -0
  429. package/src/core/graph.ts +39 -36
  430. package/src/core/i18n-ui.ts +84 -2
  431. package/src/core/includes.ts +21 -4
  432. package/src/core/links.ts +63 -19
  433. package/src/core/localizable.ts +26 -0
  434. package/src/core/navigation.ts +43 -12
  435. package/src/core/page-modes.ts +56 -0
  436. package/src/core/probe.ts +26 -6
  437. package/src/core/project-graph.ts +163 -16
  438. package/src/core/redirect-patterns.ts +520 -0
  439. package/src/core/related.ts +131 -0
  440. package/src/core/schema.ts +339 -66
  441. package/src/core/sources/cache.ts +6 -0
  442. package/src/core/sources/contentful-rich-text.ts +29 -6
  443. package/src/core/sources/contentful.ts +135 -25
  444. package/src/core/sources/filesystem.ts +26 -4
  445. package/src/core/sources/github-releases.ts +12 -1
  446. package/src/core/sources/lexical.ts +15 -10
  447. package/src/core/sources/mdx-remote.ts +62 -10
  448. package/src/core/sources/normalize.ts +228 -41
  449. package/src/core/sources/notion.ts +7 -1
  450. package/src/core/sources/obsidian.ts +16 -3
  451. package/src/core/sources/payload.ts +38 -15
  452. package/src/core/sources/read.ts +8 -3
  453. package/src/core/sources/remote.ts +72 -15
  454. package/src/core/sources/resolve.ts +11 -1
  455. package/src/core/sources/sanity.ts +43 -25
  456. package/src/core/sources/strapi.ts +2 -2
  457. package/src/core/types.ts +19 -1
  458. package/src/core/ui-packs/ar.ts +44 -0
  459. package/src/core/ui-packs/bg.ts +46 -0
  460. package/src/core/ui-packs/bn.ts +44 -0
  461. package/src/core/ui-packs/ca.ts +47 -0
  462. package/src/core/ui-packs/cs.ts +45 -0
  463. package/src/core/ui-packs/da.ts +46 -0
  464. package/src/core/ui-packs/de.ts +47 -0
  465. package/src/core/ui-packs/el.ts +46 -0
  466. package/src/core/ui-packs/es.ts +47 -0
  467. package/src/core/ui-packs/fa.ts +46 -0
  468. package/src/core/ui-packs/fi.ts +46 -0
  469. package/src/core/ui-packs/fr.ts +47 -0
  470. package/src/core/ui-packs/he.ts +44 -0
  471. package/src/core/ui-packs/hi.ts +45 -0
  472. package/src/core/ui-packs/hr.ts +46 -0
  473. package/src/core/ui-packs/hu.ts +45 -0
  474. package/src/core/ui-packs/id.ts +46 -0
  475. package/src/core/ui-packs/it.ts +46 -0
  476. package/src/core/ui-packs/ja.ts +46 -0
  477. package/src/core/ui-packs/ko.ts +45 -0
  478. package/src/core/ui-packs/nl.ts +47 -0
  479. package/src/core/ui-packs/no.ts +45 -0
  480. package/src/core/ui-packs/pl.ts +46 -0
  481. package/src/core/ui-packs/pt-br.ts +47 -0
  482. package/src/core/ui-packs/pt.ts +46 -0
  483. package/src/core/ui-packs/ro.ts +46 -0
  484. package/src/core/ui-packs/ru.ts +46 -0
  485. package/src/core/ui-packs/sk.ts +45 -0
  486. package/src/core/ui-packs/sr.ts +46 -0
  487. package/src/core/ui-packs/sv.ts +45 -0
  488. package/src/core/ui-packs/th.ts +44 -0
  489. package/src/core/ui-packs/tr.ts +46 -0
  490. package/src/core/ui-packs/uk.ts +46 -0
  491. package/src/core/ui-packs/vi.ts +46 -0
  492. package/src/core/ui-packs/zh-tw.ts +44 -0
  493. package/src/core/ui-packs/zh.ts +44 -0
  494. package/src/core/variables.ts +103 -0
  495. package/src/deploy/adapter-output.ts +7 -2
  496. package/src/deploy/adapters/cloudflare.ts +7 -5
  497. package/src/deploy/adapters/node.ts +47 -9
  498. package/src/deploy/adapters/types.ts +7 -3
  499. package/src/deploy/artifacts.ts +79 -9
  500. package/src/deploy/cloudflare-negotiation.ts +35 -5
  501. package/src/deploy/headers.ts +2 -1
  502. package/src/deploy/node-headers.ts +63 -9
  503. package/src/deploy/platforms/cloudflare.ts +45 -9
  504. package/src/deploy/platforms/netlify.ts +35 -2
  505. package/src/deploy/platforms/node.ts +12 -2
  506. package/src/deploy/platforms/types.ts +21 -7
  507. package/src/deploy/platforms/vercel.ts +149 -17
  508. package/src/deploy/redirects.ts +151 -24
  509. package/src/deploy/rss.ts +3 -1
  510. package/src/deploy/sitemap.ts +39 -5
  511. package/src/deploy/vercel-negotiation.ts +326 -102
  512. package/src/eval/agents.ts +18 -1
  513. package/src/eval/prompts.ts +6 -3
  514. package/src/eval/report.ts +34 -13
  515. package/src/eval/run.ts +5 -0
  516. package/src/markdown/api-rail.ts +259 -0
  517. package/src/markdown/code-title.ts +35 -9
  518. package/src/markdown/features.ts +3 -2
  519. package/src/markdown/fence-meta.ts +2 -0
  520. package/src/markdown/include.ts +11 -1
  521. package/src/markdown/index.ts +28 -5
  522. package/src/markdown/math.ts +4 -4
  523. package/src/markdown/relative-links.ts +3 -2
  524. package/src/markdown/variables.ts +56 -0
  525. package/src/markdown/views.ts +82 -0
  526. package/src/narration/build.ts +412 -0
  527. package/src/narration/player.ts +249 -0
  528. package/src/narration/provider.ts +29 -0
  529. package/src/narration/script.ts +592 -0
  530. package/src/og/card.ts +7 -6
  531. package/src/openapi/checks.ts +273 -0
  532. package/src/openapi/graphql-build.ts +21 -0
  533. package/src/openapi/graphql.ts +11 -0
  534. package/src/openapi/model.ts +72 -27
  535. package/src/openapi/overlay.ts +256 -0
  536. package/src/openapi/parse.ts +182 -4
  537. package/src/openapi/references.ts +64 -8
  538. package/src/openapi/render-mdx.ts +5 -1
  539. package/src/openapi/scalar.ts +40 -6
  540. package/src/openapi/source.ts +40 -15
  541. package/src/ratelimit/cloudflare.ts +54 -0
  542. package/src/ratelimit/index.ts +30 -0
  543. package/src/ratelimit/memory.ts +45 -0
  544. package/src/ratelimit/runtime.ts +247 -0
  545. package/src/ratelimit/schema.ts +28 -0
  546. package/src/ratelimit/upstash.ts +60 -0
  547. package/src/ratelimit/wrangler.ts +70 -0
  548. package/src/reference/asyncapi.ts +2 -2
  549. package/src/reference/graphql.ts +20 -3
  550. package/src/reference/index.ts +1 -0
  551. package/src/reference/openapi.ts +21 -7
  552. package/src/reference/options.ts +80 -8
  553. package/src/reference/scalar.ts +33 -8
  554. package/src/registry/eject.ts +23 -5
  555. package/src/registry/registry.ts +7 -0
  556. package/src/search/adapters/locale-scope.ts +30 -0
  557. package/src/search/adapters/typesense.ts +14 -4
  558. package/src/search/build.ts +21 -3
  559. package/src/search/documents.ts +26 -2
  560. package/src/search/orama-index.ts +191 -34
  561. package/src/search/pagefind-ranking.ts +39 -0
  562. package/src/search/source-pages.ts +29 -0
  563. package/src/search/sync/algolia.ts +111 -10
  564. package/src/search/sync/index.ts +52 -13
  565. package/src/search/sync/orama-cloud.ts +3 -0
  566. package/src/search/sync/typesense.ts +76 -26
  567. package/src/seo/metatags.ts +67 -0
  568. package/src/sources/contentful.ts +12 -0
  569. package/src/sources/github-releases.ts +7 -1
  570. package/src/sources/shared.ts +3 -0
  571. package/src/theme/chrome-icons.ts +1 -0
  572. package/src/theme/color.ts +500 -0
  573. package/src/theme/entry.ts +85 -6
  574. package/src/theme/palette.ts +121 -45
  575. package/src/translate/prompts.ts +1 -0
  576. package/src/translate/validate.ts +31 -3
  577. package/src/upgrade/upgrade.ts +4 -171
  578. package/dist/cli/chunk-1d7ve1dm.js.map +0 -12
  579. package/dist/cli/chunk-2hsdwb9n.js.map +0 -10
  580. package/dist/cli/chunk-35d4wj9f.js.map +0 -15
  581. package/dist/cli/chunk-364znk6q.js +0 -75
  582. package/dist/cli/chunk-364znk6q.js.map +0 -11
  583. package/dist/cli/chunk-5m5nmvyq.js.map +0 -13
  584. package/dist/cli/chunk-8ktnccpt.js.map +0 -10
  585. package/dist/cli/chunk-9t7a85s3.js.map +0 -10
  586. package/dist/cli/chunk-b07cmahc.js +0 -145
  587. package/dist/cli/chunk-b07cmahc.js.map +0 -11
  588. package/dist/cli/chunk-c8chx29p.js.map +0 -36
  589. package/dist/cli/chunk-e04dxsz1.js +0 -39
  590. package/dist/cli/chunk-e04dxsz1.js.map +0 -10
  591. package/dist/cli/chunk-j85vccga.js.map +0 -36
  592. package/dist/cli/chunk-p3v96n38.js.map +0 -10
  593. package/dist/cli/chunk-pehfxfta.js.map +0 -10
  594. package/dist/cli/chunk-pv29h0wf.js.map +0 -190
  595. package/dist/cli/chunk-q58y5e6a.js.map +0 -10
  596. package/dist/cli/chunk-vg9r4eb9.js.map +0 -14
  597. package/dist/cli/chunk-wrr3j9w9.js.map +0 -35
  598. package/dist/cli/chunk-yfyb25rh.js.map +0 -14
  599. package/docs/content/sources.mdx +0 -334
  600. /package/dist/cli/{chunk-tkacnehg.js.map → chunk-3v3ffbrj.js.map} +0 -0
  601. /package/dist/cli/{chunk-r9rcc4w7.js.map → chunk-8y2kmjv8.js.map} +0 -0
  602. /package/dist/cli/{chunk-2eytanqx.js.map → chunk-c887fj0s.js.map} +0 -0
  603. /package/dist/cli/{chunk-akbpwfxc.js.map → chunk-dzwehpy7.js.map} +0 -0
  604. /package/dist/cli/{chunk-2z928egk.js.map → chunk-ft9vfys6.js.map} +0 -0
  605. /package/dist/cli/{chunk-a58773jm.js.map → chunk-kma9f6sf.js.map} +0 -0
  606. /package/dist/cli/{chunk-crgn1q09.js.map → chunk-sds923fa.js.map} +0 -0
  607. /package/dist/cli/{chunk-acanzt5p.js.map → chunk-tdqhyxfz.js.map} +0 -0
@@ -33,5 +33,8 @@ export declare const snapshotCache: (cacheDir: string) => SnapshotCache;
33
33
  * snapshot exists, serve it without fetching (cache-first dev). On fetch failure,
34
34
  * serve the last-known-good snapshot with a warning so a CMS/network outage
35
35
  * doesn't fail the build; if there is no snapshot either, surface a hard error.
36
+ * A `BlumeError` from the source (a missing SDK or token, checked before any
37
+ * request, or a misconfiguration) already names its cause, so without a
38
+ * snapshot it surfaces as itself rather than as a fetch failure.
36
39
  */
37
40
  export declare const loadWithCache: (name: string, cache: SnapshotCache, fetchEntries: () => Promise<SourceEntry[]>, refresh?: boolean) => Promise<SourceLoadResult>;
@@ -1,20 +1,29 @@
1
1
  /**
2
2
  * Contentful rich text → Markdown. Covers the block, inline, and mark types
3
3
  * the Rich Text editor emits; embedded entries fall through to a serializer
4
- * keyed by content type or are noted in a comment. Links to assets and
4
+ * keyed by content type or are noted in a comment, and a link to an entry
5
+ * points at its page when the source says it has one. Links to assets and
5
6
  * entries arrive unresolved from the Delivery API (`data.target` is a
6
7
  * `sys` link), so the source hands in resolvers over the response's
7
8
  * `includes`; a document the SDK already resolved (with `fields` inline)
8
9
  * lowers the same way.
9
10
  */
10
11
  import type { JsonObject } from "./json.ts";
11
- /** An asset's file as a Markdown image needs it. */
12
+ /** An asset's file as a Markdown image or link needs it. */
12
13
  export interface ContentfulAsset {
14
+ /** The file's MIME type; an asset that isn't an image renders as a link. */
15
+ contentType?: string;
13
16
  description?: string;
17
+ fileName?: string;
14
18
  title?: string;
15
19
  url: string;
16
20
  }
17
21
  export interface ContentfulRichTextOptions {
22
+ /**
23
+ * The route of a linked entry's page; an entry hyperlink to an entry with
24
+ * none keeps only its text.
25
+ */
26
+ entryHref?: (entry: JsonObject) => string | undefined;
18
27
  /** Resolve an asset link (`data.target.sys.id`) to its file. */
19
28
  resolveAsset?: (id: string) => ContentfulAsset | null;
20
29
  /** Resolve an entry link to the entry (`sys` plus `fields`). */
@@ -1,3 +1,4 @@
1
+ import type { ResolvedI18nConfig, ResolvedVersionsConfig } from "../schema.ts";
1
2
  import type { JsonObject } from "./json.ts";
2
3
  import type { RemoteFieldMap } from "./remote.ts";
3
4
  import type { ContentSource, SourceContext } from "./types.ts";
@@ -8,10 +9,24 @@ export interface ContentfulSourceOptions {
8
9
  space: string;
9
10
  /** Environment id; default `master`. */
10
11
  environment?: string;
12
+ /**
13
+ * Delivery API host name; default `cdn.contentful.com`. A space with EU
14
+ * data residency reads from `cdn.eu.contentful.com`.
15
+ */
16
+ host?: string;
17
+ /**
18
+ * Preview API host name for `--preview`; default `preview.contentful.com`
19
+ * (`preview.eu.contentful.com` for EU data residency).
20
+ */
21
+ previewHost?: string;
11
22
  /** The content type id whose entries become pages. */
12
23
  contentType: string;
13
24
  /** Locale code to fetch; omit for the space's default locale. */
14
25
  locale?: string;
26
+ /** The project's i18n config, which places an entry's route by its slug. */
27
+ i18n?: ResolvedI18nConfig;
28
+ /** The project's versions config, which places an entry's route by its slug. */
29
+ versions?: ResolvedVersionsConfig;
15
30
  /**
16
31
  * Field ids mapping an entry onto Blume meta + body. Paths resolve against
17
32
  * the entry's `fields`, with `sys` reachable as `sys.<key>`. Defaults:
@@ -35,6 +50,7 @@ export interface ContentfulSourceOptions {
35
50
  * Contentful content source. Pages through the Delivery API (the Preview API
36
51
  * under `--preview`), maps each entry's fields to frontmatter, and lowers its
37
52
  * rich text body to Markdown with the page's `includes` resolving asset and
38
- * entry links.
53
+ * entry links. An entry hyperlink to another of the source's entries links
54
+ * to that entry's page.
39
55
  */
40
56
  export declare const contentfulSource: (options: ContentfulSourceOptions, ctx?: SourceContext) => ContentSource;
@@ -9,6 +9,11 @@ import type { JsonObject } from "./json.ts";
9
9
  export interface LexicalOptions {
10
10
  /** The CMS origin a relative upload URL (`/media/x.png`) resolves against. */
11
11
  baseUrl?: string;
12
+ /**
13
+ * Called with the label of each node left out as a comment (a block with
14
+ * no serializer, a node type with no Markdown), so the source can warn.
15
+ */
16
+ onUnsupported?: (what: string) => void;
12
17
  /** Serializers for `block`/`inlineBlock` nodes, keyed by `fields.blockType`. */
13
18
  serializers?: Record<string, (fields: JsonObject) => string>;
14
19
  }
@@ -1,5 +1,6 @@
1
+ import type { YAMLException } from "js-yaml";
1
2
  import type { ResolvedI18nConfig } from "../schema.ts";
2
- import type { Diagnostic, Heading, PageLink, PageRecord } from "../types.ts";
3
+ import type { Diagnostic, ExampleUse, Heading, PageLink, PageRecord } from "../types.ts";
3
4
  import type { NormalizeContext, SourceEntry } from "./types.ts";
4
5
  /**
5
6
  * Slugify a content/route slug (Sanity, Notion, frontmatter `slug`). Heading
@@ -30,6 +31,16 @@ export declare const slugifyPath: (text: string) => string;
30
31
  * reports this instead of publishing a route that can never render.
31
32
  */
32
33
  export declare const unloadablePathDiagnostic: (path: string, file: string) => Diagnostic | undefined;
34
+ /**
35
+ * The error for a content file whose front matter isn't valid YAML — most
36
+ * often an unquoted value holding `: `, which YAML reads as a nested mapping.
37
+ * Thrown out of a source's scan, it would fail every command with
38
+ * BLUME_INTERNAL; a source leaves the file out and reports this instead, like
39
+ * a page whose front matter fails the schema. js-yaml counts lines from the
40
+ * text after the opening `---`, which starts with the rest of that fence
41
+ * line, so its 0-based line is already the file's line minus one.
42
+ */
43
+ export declare const frontmatterYamlDiagnostic: (error: YAMLException, file: string) => Diagnostic;
33
44
  export declare const HTML_COMMENT: RegExp;
34
45
  export declare const INLINE_CODE: RegExp;
35
46
  /** A heading whose trailing `{#id}` marker is unescaped — see `BARE_CURLY_MARKER`. */
@@ -37,6 +48,8 @@ export interface CurlyMarker {
37
48
  id: string;
38
49
  /** 1-based line of the heading (a setext heading's first text line) in the body. */
39
50
  line: number;
51
+ /** The braces as written (`{#id}`, `{ #id }`, `{: #id }`). */
52
+ marker: string;
40
53
  }
41
54
  /** Where a heading's text ends in the scanned text, for appending a marker. */
42
55
  export interface HeadingSite {
@@ -74,6 +87,12 @@ export declare const MD_IMAGE: RegExp;
74
87
  /** Column (0-based, within `matched`) where a link/image match's target starts. */
75
88
  export declare const targetOffsetIn: (matched: string, target: string, title: string | undefined) => number;
76
89
  export declare const extractLinks: (body: string, lineOffset?: number) => PageLink[];
90
+ /**
91
+ * Every `<Component path>` in an `.mdx` body, with the 1-based position of its
92
+ * value; lines are shifted by `lineOffset`, as {@link extractLinks} does. Code
93
+ * blocks and inline code are skipped.
94
+ */
95
+ export declare const extractExampleUses: (body: string, lineOffset?: number) => ExampleUse[];
77
96
  export declare const extractComponentTags: (body: string) => string[];
78
97
  /**
79
98
  * Height of the frontmatter block stripped from `raw` to produce `body` (0
@@ -1,7 +1,12 @@
1
1
  import type { PageRecord } from "../types.ts";
2
+ import type { ContentVariables } from "../variables.ts";
2
3
  import type { ContentSource } from "./types.ts";
3
4
  /** The subset of a scanned project the entry reader needs. */
4
5
  export interface EntryReadContext {
6
+ /** The site's content variables, substituted into what's read. */
7
+ config?: {
8
+ variables?: ContentVariables;
9
+ };
5
10
  /** The instantiated sources, keyed for `read()` lookups. */
6
11
  sources?: ContentSource[];
7
12
  }
@@ -1,3 +1,5 @@
1
+ import { BlumeError } from "../diagnostics.ts";
2
+ import type { Diagnostic } from "../types.ts";
1
3
  import type { JsonObject, JsonValue } from "./json.ts";
2
4
  import type { ContentSource, SourceContext, SourceEntry } from "./types.ts";
3
5
  /** What every REST-backed CMS source needs to be a staged, cached source. */
@@ -9,8 +11,13 @@ export interface RemoteSourceOptions {
9
11
  * offline warning.
10
12
  */
11
13
  assertConfigured?: () => void;
12
- /** Pull every entry from the API; called on refresh and on each poll. */
13
- fetchEntries: () => Promise<SourceEntry[]>;
14
+ /**
15
+ * Pull every entry from the API; called on refresh and on each poll.
16
+ * `warn` reports a problem with the content itself (an embed the API
17
+ * couldn't resolve, a node with no Markdown), which the load returns
18
+ * beside the entries; a load served from the snapshot repeats none.
19
+ */
20
+ fetchEntries: (warn: (diagnostic: Diagnostic) => void) => Promise<SourceEntry[]>;
14
21
  name: string;
15
22
  /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
16
23
  pollInterval?: number;
@@ -29,6 +36,9 @@ export declare const remoteSource: (options: RemoteSourceOptions, ctx?: SourceCo
29
36
  export interface RemoteFrontmatter {
30
37
  description?: string;
31
38
  draft?: boolean;
39
+ sidebar?: {
40
+ order: number;
41
+ };
32
42
  title?: string;
33
43
  }
34
44
  /**
@@ -37,6 +47,13 @@ export interface RemoteFrontmatter {
37
47
  * `writesMdx`).
38
48
  */
39
49
  export declare const stagedEntry: (slug: string, data: RemoteFrontmatter, markdown: string, lastModified: string | undefined, format?: "md" | "mdx") => SourceEntry;
50
+ /**
51
+ * The error a source throws before its first request when the token its API
52
+ * always requires is unset (Notion, Contentful's Delivery API). Sent without
53
+ * one, the request could only fail, and the build would report the API's
54
+ * wording as a fetch failure instead of the variable to set.
55
+ */
56
+ export declare const missingSecretError: (name: string, env: string) => BlumeError;
40
57
  /** How a source calls its CMS: the API's auth headers and an injectable fetch. */
41
58
  export interface RestClient {
42
59
  /** Injected for tests; defaults to the global `fetch`. */
@@ -67,18 +84,28 @@ export interface RemoteFieldMap {
67
84
  description?: string;
68
85
  /** Field holding the last-modified ISO date. */
69
86
  lastModified?: string;
87
+ /** Field holding the sidebar order (a number); no default. */
88
+ order?: string;
70
89
  /** Field holding the route slug. */
71
90
  slug?: string;
72
91
  /** Field holding the page title. */
73
92
  title?: string;
74
93
  }
94
+ /** A field map with its defaults filled in; `order` is read only when set. */
95
+ export type RemoteFields = Required<Omit<RemoteFieldMap, "order">> & Pick<RemoteFieldMap, "order">;
96
+ /**
97
+ * The slug a document's staged entry is named by. It falls back to the
98
+ * document's id when the slug field is missing or slugifies to nothing (pure
99
+ * punctuation), so distinct documents never collapse onto one
100
+ * `untitled.md`; a slashed slug keeps its segments.
101
+ */
102
+ export declare const documentSlug: (doc: JsonObject, slugField: string, id: string) => string;
75
103
  /**
76
- * Map a document to a staged entry. The slug falls back to the document's id
77
- * when the slug field is missing or slugifies to nothing (pure punctuation),
78
- * so distinct documents never collapse onto one `untitled.md`; a slashed
79
- * slug keeps its segments. A string body is Markdown and passes through as
80
- * `.md`, its unsafe links reduced to their labels; any other shape goes to
81
- * the CMS's lowerer, and is written as `.mdx`
82
- * when `lowersToMdx` (the source has serializers, see `writesMdx`).
104
+ * Map a document to a staged entry named by its {@link documentSlug}. A
105
+ * number in the `order` field, when one is mapped, becomes the page's
106
+ * sidebar order. A string body is Markdown and passes through as `.md`, its
107
+ * unsafe links reduced to their labels; any other shape goes to the CMS's
108
+ * lowerer, and is written as `.mdx` when `lowersToMdx` (the source has
109
+ * serializers, see `writesMdx`).
83
110
  */
84
- export declare const documentEntry: (doc: JsonObject, fields: Required<RemoteFieldMap>, id: string, lower: (body: JsonValue) => string, draft?: boolean, lowersToMdx?: boolean) => SourceEntry;
111
+ export declare const documentEntry: (doc: JsonObject, fields: RemoteFields, id: string, lower: (body: JsonValue) => string, draft?: boolean, lowersToMdx?: boolean) => SourceEntry;
@@ -12,7 +12,7 @@ export interface SanityFieldMap {
12
12
  description?: string;
13
13
  /** Route slug (dot path); default `slug.current`. */
14
14
  slug?: string;
15
- /** Portable Text body field; default `body`. */
15
+ /** Body field, Portable Text or a Markdown string; default `body`. */
16
16
  body?: string;
17
17
  /** Last-modified ISO date; default `_updatedAt`. */
18
18
  lastModified?: string;
@@ -51,6 +51,10 @@ export interface PageLink {
51
51
  * only those go through the image pipeline; a plain link to the same path
52
52
  * resolves as a site route. */
53
53
  image?: boolean;
54
+ /** Set when the target is a lowercase `<a href>`, which ships as written:
55
+ * the Markdown pipeline neither resolves its relative path file-style nor
56
+ * mounts the base path on it, so it's checked the way a browser reads it. */
57
+ raw?: boolean;
54
58
  /** 1-based line number in the source file. */
55
59
  line: number;
56
60
  /** 1-based column of the target within the line. */
@@ -60,6 +64,17 @@ export interface PageLink {
60
64
  * here so authors fix the partial, not the page that spliced it. */
61
65
  file?: string;
62
66
  }
67
+ /** A `<Component path="…">` in a page, located like a {@link PageLink}. */
68
+ export interface ExampleUse {
69
+ /** The example's key as written: its path under `examples/`, sans extension. */
70
+ path: string;
71
+ /** 1-based line number in the source file. */
72
+ line: number;
73
+ /** 1-based column of the `path` value within the line. */
74
+ column: number;
75
+ /** Absolute path of the included partial it was written in, if not the page. */
76
+ file?: string;
77
+ }
63
78
  /**
64
79
  * Resolved project paths. Computed once per CLI invocation and threaded
65
80
  * through the core pipeline.
@@ -185,6 +200,8 @@ export interface PageRecord {
185
200
  links: PageLink[];
186
201
  /** Capitalized JSX component tags used in the body (`.mdx` only). */
187
202
  componentsUsed?: string[];
203
+ /** The string `path` of each `<Component>` example in the body (`.mdx` only). */
204
+ examplesUsed?: ExampleUse[];
188
205
  /** Resolved "last updated" ISO date, when the feature is enabled. */
189
206
  lastModified?: string;
190
207
  /** Absolute paths of files this page `<include>`s, transitively. Drives the
@@ -297,7 +314,7 @@ export interface Navigation {
297
314
  cta?: HeaderAction | null;
298
315
  /** Pinned links shown above the sidebar sections, unscoped by tab. */
299
316
  featured: FeaturedLink[];
300
- /** Repo URL for the header link, or null when hidden (`navigation.repo`). */
317
+ /** Repo URL for the footer's GitHub link, or null when hidden (`navigation.repo`). */
301
318
  repoUrl?: string | null;
302
319
  /**
303
320
  * Where the header's brand link points in this locale: `logo.href` moved
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Content variables: `variables: { version: "2.1.0" }` in `blume.config.ts`
3
+ * makes `{{version}}` in a page read `2.1.0` wherever it appears in the body,
4
+ * code and links included. The syntax is Mintlify's, so migrated pages keep
5
+ * working.
6
+ *
7
+ * Substitution is textual, before any parsing, so a page's HTML, its search
8
+ * entry, its `.md` mirror, and `llms-full.txt` all agree: the MDX pipeline
9
+ * substitutes in a Vite transform ahead of the compiler (an MDX parser would
10
+ * read `{{version}}` as a JavaScript expression), the Markdown pipeline in a
11
+ * plugin over the parsed text, includes as their files are read, and the raw
12
+ * readers through {@link substituteVariables}. Only defined names are
13
+ * replaced; an undefined one in prose is a build error
14
+ * (`BLUME_UNDEFINED_VARIABLE`), and inside code it is left alone, since
15
+ * templating examples (`{{name}}` in a Handlebars snippet) are common there.
16
+ */
17
+ /** The variables a site defines, name to value. */
18
+ export type ContentVariables = Readonly<Record<string, string>>;
19
+ /** A variable name: letters, digits, `_`, and `-` (Mintlify's `api-url`). */
20
+ export declare const VARIABLE_NAME: RegExp;
21
+ /** Whether a site defines any variables, so the rest can be skipped. */
22
+ export declare const hasVariables: (variables?: ContentVariables) => variables is ContentVariables;
23
+ /** `text` with every reference to a defined variable replaced by its value. */
24
+ export declare const substituteVariables: (text: string, variables?: ContentVariables) => string;
25
+ /**
26
+ * {@link substituteVariables} over a page's raw source, leaving its front
27
+ * matter as written: the rendered page reads its title and description from
28
+ * the unsubstituted front matter, so the other surfaces must too.
29
+ */
30
+ export declare const substituteVariablesInBody: (source: string, variables?: ContentVariables) => string;
31
+ /** An undefined variable referenced in prose, with its 1-based line. */
32
+ export interface UndefinedVariable {
33
+ line: number;
34
+ name: string;
35
+ }
36
+ /**
37
+ * The undefined variables `text` references outside code: fenced blocks and
38
+ * inline code spans are skipped, so a templating example never fails a
39
+ * build. Empty when the site defines no variables at all, so a page that
40
+ * shows `{{…}}` literally keeps working until the site opts in.
41
+ */
42
+ export declare const undefinedVariables: (text: string, variables?: ContentVariables) => UndefinedVariable[];
@@ -13,7 +13,8 @@ export declare const deployOutputDir: (config: ResolvedConfig, context: ProjectC
13
13
  * served. A static build serves `dist/` wherever it lands; a server build
14
14
  * serves what its platform declares — the Build Output tree's `static/` half
15
15
  * on Vercel, Astro's `build.client` dir (`dist/client/`) on Node and
16
- * Cloudflare, `dist/` on Netlify.
16
+ * Cloudflare, `dist/` on Netlify. On Vercel and Cloudflare that's its
17
+ * `<base>/` directory under `deployment.base`, where the files land.
17
18
  */
18
19
  export declare const deployStaticDir: (config: ResolvedConfig, context: ProjectContext) => string;
19
20
  /**
@@ -31,10 +31,12 @@ export declare const cloudflareAdapterSchema: import("zod").ZodObject<{
31
31
  runtimeDeps: import("zod").ZodArray<import("zod").ZodString>;
32
32
  }, import("zod/v4/core").$strict>;
33
33
  /**
34
- * Cloudflare Workers and Pages. A server build emits a Worker into
35
- * `dist/server` (with a generated wrapper that answers `Accept:
36
- * text/markdown`) and serves `dist/client` through the ASSETS binding.
37
- * `@astrojs/cloudflare` is an optional peer: install it in the project
38
- * (`npm install @astrojs/cloudflare`).
34
+ * Cloudflare. A server build targets Workers only (`@astrojs/cloudflare`
35
+ * dropped Pages in v13): it emits a Worker into `dist/server` (with a
36
+ * generated wrapper that answers `Accept: text/markdown`) and serves
37
+ * `dist/client` through the ASSETS binding. A static build
38
+ * (`output: "static"`) never loads the adapter, and its `dist/` deploys to
39
+ * Pages or to Workers static assets. `@astrojs/cloudflare` is an optional
40
+ * peer: install it in the project (`npm install @astrojs/cloudflare`).
39
41
  */
40
42
  export declare const cloudflare: (options?: CloudflareOptions) => CloudflareAdapter;
@@ -1,37 +1,72 @@
1
+ import { z } from "zod";
1
2
  import type { DeployAdapter, DeployOptions } from "./types.ts";
2
3
  /** The Astro adapter package a Node server build imports. */
3
4
  export declare const NODE_ADAPTER_PACKAGE = "@astrojs/node";
4
5
  /**
5
- * Options for {@link node}: `output`, `site`, and `base`, plus any option of
6
- * `@astrojs/node` forwarded verbatim (`mode`, `staticHeaders`, …). Blume
7
- * defaults `mode` to `"standalone"`; an option you pass wins. `host` and
8
- * `port` are forwarded too, but `@astrojs/node` replaces both with Astro's
9
- * own server settings, so the standalone server listens on `localhost:4321`
10
- * unless the `HOST` and `PORT` environment variables are set when it starts.
6
+ * A host the server trusts forwarded headers for, in Astro's
7
+ * `security.allowedDomains` shape: each field set must match.
11
8
  */
12
- export type NodeOptions = DeployOptions;
13
- export type NodeAdapter = DeployAdapter<"node">;
14
- export declare const nodeOptionsSchema: import("zod").ZodObject<{
15
- base: import("zod").ZodOptional<import("zod").ZodString>;
16
- output: import("zod").ZodOptional<import("zod").ZodEnum<{
9
+ export type NodeAllowedDomain = {
10
+ /** The host, like `docs.example.com`; `*.example.com` matches subdomains. */
11
+ hostname?: string;
12
+ /** The port, as a string. */
13
+ port?: string;
14
+ /** The scheme, like `https`. */
15
+ protocol?: string;
16
+ };
17
+ /**
18
+ * Options for {@link node}: `output`, `site`, `base`, and `allowedDomains`,
19
+ * plus any option of `@astrojs/node` forwarded verbatim (`mode`,
20
+ * `staticHeaders`, …). Blume defaults `mode` to `"standalone"`; an option you
21
+ * pass wins. `host` and `port` are forwarded too, but `@astrojs/node`
22
+ * replaces both with Astro's own server settings, so the standalone server
23
+ * listens on `localhost:4321` unless the `HOST` and `PORT` environment
24
+ * variables are set when it starts.
25
+ */
26
+ export type NodeOptions = DeployOptions & {
27
+ /**
28
+ * The hosts a reverse proxy in front of the server answers for, set as
29
+ * Astro's `security.allowedDomains`. A request whose `Host` (or
30
+ * `X-Forwarded-Host`) matches one is trusted to name the reader in
31
+ * `X-Forwarded-For`, which the rate limit counts by; otherwise every
32
+ * reader counts as the proxy's address. Only list them when a proxy sets
33
+ * that header on every request, since a reader could otherwise send their
34
+ * own.
35
+ */
36
+ allowedDomains?: NodeAllowedDomain[];
37
+ };
38
+ export type NodeAdapter = DeployAdapter<"node", NodeOptions>;
39
+ export declare const nodeOptionsSchema: z.ZodObject<{
40
+ base: z.ZodOptional<z.ZodString>;
41
+ output: z.ZodOptional<z.ZodEnum<{
17
42
  static: "static";
18
43
  server: "server";
19
44
  }>>;
20
- site: import("zod").ZodOptional<import("zod").ZodURL>;
21
- }, import("zod/v4/core").$catchall<import("zod").ZodJSONSchema>>;
22
- export declare const nodeAdapterSchema: import("zod").ZodObject<{
23
- kind: import("zod").ZodLiteral<"node">;
24
- options: import("zod").ZodObject<{
25
- base: import("zod").ZodOptional<import("zod").ZodString>;
26
- output: import("zod").ZodOptional<import("zod").ZodEnum<{
45
+ site: z.ZodOptional<z.ZodURL>;
46
+ allowedDomains: z.ZodOptional<z.ZodArray<z.ZodObject<{
47
+ hostname: z.ZodOptional<z.ZodString>;
48
+ port: z.ZodOptional<z.ZodString>;
49
+ protocol: z.ZodOptional<z.ZodString>;
50
+ }, z.core.$strict>>>;
51
+ }, z.core.$catchall<z.ZodJSONSchema>>;
52
+ export declare const nodeAdapterSchema: z.ZodObject<{
53
+ kind: z.ZodLiteral<"node">;
54
+ options: z.ZodObject<{
55
+ base: z.ZodOptional<z.ZodString>;
56
+ output: z.ZodOptional<z.ZodEnum<{
27
57
  static: "static";
28
58
  server: "server";
29
59
  }>>;
30
- site: import("zod").ZodOptional<import("zod").ZodURL>;
31
- }, import("zod/v4/core").$catchall<import("zod").ZodJSONSchema>>;
32
- requiredSecrets: import("zod").ZodArray<import("zod").ZodString>;
33
- runtimeDeps: import("zod").ZodArray<import("zod").ZodString>;
34
- }, import("zod/v4/core").$strict>;
60
+ site: z.ZodOptional<z.ZodURL>;
61
+ allowedDomains: z.ZodOptional<z.ZodArray<z.ZodObject<{
62
+ hostname: z.ZodOptional<z.ZodString>;
63
+ port: z.ZodOptional<z.ZodString>;
64
+ protocol: z.ZodOptional<z.ZodString>;
65
+ }, z.core.$strict>>>;
66
+ }, z.core.$catchall<z.ZodJSONSchema>>;
67
+ requiredSecrets: z.ZodArray<z.ZodString>;
68
+ runtimeDeps: z.ZodArray<z.ZodString>;
69
+ }, z.core.$strict>;
35
70
  /**
36
71
  * A self-hosted Node server (containers, VMs). The standalone server in
37
72
  * `dist/server/entry.mjs` serves `dist/client` itself. `@astrojs/node` is one
@@ -67,6 +67,11 @@ export declare const resolvedDeploymentSchema: z.ZodPipe<z.ZodDiscriminatedUnion
67
67
  server: "server";
68
68
  }>>;
69
69
  site: z.ZodOptional<z.ZodURL>;
70
+ allowedDomains: z.ZodOptional<z.ZodArray<z.ZodObject<{
71
+ hostname: z.ZodOptional<z.ZodString>;
72
+ port: z.ZodOptional<z.ZodString>;
73
+ protocol: z.ZodOptional<z.ZodString>;
74
+ }, z.core.$strict>>>;
70
75
  }, z.core.$catchall<z.ZodJSONSchema>>;
71
76
  requiredSecrets: z.ZodArray<z.ZodString>;
72
77
  runtimeDeps: z.ZodArray<z.ZodString>;
@@ -113,6 +118,11 @@ export declare const resolvedDeploymentSchema: z.ZodPipe<z.ZodDiscriminatedUnion
113
118
  base?: string | undefined;
114
119
  output?: "static" | "server" | undefined;
115
120
  site?: string | undefined;
121
+ allowedDomains?: {
122
+ hostname?: string | undefined;
123
+ port?: string | undefined;
124
+ protocol?: string | undefined;
125
+ }[] | undefined;
116
126
  };
117
127
  requiredSecrets: string[];
118
128
  runtimeDeps: string[];
@@ -67,9 +67,10 @@ export declare const deployOptionsSchema: z.ZodObject<{
67
67
  }, z.core.$catchall<z.ZodJSONSchema>>;
68
68
  /**
69
69
  * The options Blume does not name — what reaches the `@astrojs/*` adapter's
70
- * constructor verbatim.
70
+ * constructor verbatim. `configOptions` are the ones a host adapter names
71
+ * itself, for the Astro config rather than the constructor.
71
72
  */
72
- export declare const deployPassthrough: (options: DeployOptions) => Record<string, JsonValue>;
73
+ export declare const deployPassthrough: (options: DeployOptions, configOptions?: readonly string[]) => Record<string, JsonValue>;
73
74
  /**
74
75
  * The runtime dependency a host adapter declares: its `@astrojs/*` package,
75
76
  * which the generated `astro.config.mjs` imports for a server build and
@@ -1,4 +1,5 @@
1
1
  import type { BlumeProject } from "../core/project-graph.ts";
2
+ import type { CompiledRedirect } from "../core/redirect-patterns.ts";
2
3
  import type { ResolvedConfig } from "../core/schema.ts";
3
4
  import type { BuildLog } from "./platforms/types.ts";
4
5
  /**
@@ -34,19 +35,29 @@ export declare const nodeHeaderRules: (config: ResolvedConfig) => NodeHeaderRule
34
35
  */
35
36
  export type NodeRedirects = Record<string, [string, number]>;
36
37
  /**
37
- * The configured redirects, based the way the host matches them (see
38
+ * The configured exact redirects, based the way the host matches them (see
38
39
  * `platformRedirects`) and keyed for the wrapper's lookup, the `Location`
39
40
  * percent-encoded as Astro sends it. A redirect at a content route's own path
40
41
  * is left out: the prerendered page owns that URL, and the static handler
41
- * serves it before Astro's redirect ever could.
42
+ * serves it before Astro's redirect ever could. Patterns are compiled apart
43
+ * ({@link nodePatternRedirects}).
42
44
  */
43
45
  export declare const nodeRedirects: (project: BlumeProject) => NodeRedirects;
46
+ /**
47
+ * The configured pattern redirects (`/beta/:slug*`), based the way the host
48
+ * matches them and compiled for the wrapper, which tries them in order after
49
+ * the exact ones. None can match a page: the scan rejects a pattern that
50
+ * does (`BLUME_REDIRECT_MATCHES_PAGE`).
51
+ */
52
+ export declare const nodePatternRedirects: (project: BlumeProject) => CompiledRedirect[];
44
53
  /** What the wrapper needs beyond the header rules. */
45
54
  export interface NodeEntryOptions {
46
55
  /** `deployment.base`, normalized (`""` at the root). */
47
56
  base?: string;
48
57
  /** The configured redirects, from {@link nodeRedirects}. */
49
58
  redirects?: NodeRedirects;
59
+ /** The configured pattern redirects, from {@link nodePatternRedirects}. */
60
+ patternRedirects?: CompiledRedirect[];
50
61
  }
51
62
  /**
52
63
  * The entry that replaces Astro's: it answers a configured redirect with its
@@ -29,12 +29,20 @@ export declare const emitCloudflareDeployConfig: (context: ProjectContext) => Pr
29
29
  */
30
30
  export declare const nameCloudflareWorker: (project: BlumeProject, log: BuildLog) => Promise<void>;
31
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.
32
+ * Declare the Workers rate limiting binding `rateLimit: cloudflare()` counts
33
+ * with in the built Worker's config, which `wrangler deploy` reads.
34
+ */
35
+ export declare const bindCloudflareRateLimit: (project: BlumeProject, log: BuildLog) => Promise<void>;
36
+ /**
37
+ * Cloudflare. A server build targets Workers only (`@astrojs/cloudflare`
38
+ * dropped Pages in v13): it emits the Worker into `dist/server` and serves
39
+ * `dist/client` through the ASSETS binding, which honors `_headers` from that
40
+ * directory exactly as Pages does — so the file applies to both output modes
41
+ * here. A static build never loads the adapter; its `dist/` deploys to Pages,
42
+ * whose build environment `env` detects, or to Workers static assets (Workers
43
+ * Builds exposes no site URL to detect). Without a configured driver the
44
+ * adapter force-enables KV-backed sessions and declares a `SESSION` binding
45
+ * that `wrangler deploy` then demands a namespace for, even though Blume
46
+ * never reads `Astro.session`; `session: false` opts the project out.
39
47
  */
40
48
  export declare const cloudflarePlatform: DeployPlatform;
@@ -26,6 +26,13 @@ export declare const NETLIFY_CONFIG_FILE: string;
26
26
  * as static files, so the prerendered endpoint's own headers never ship.
27
27
  */
28
28
  export declare const emitNetlifyHeaders: (project: BlumeProject, log: BuildLog) => Promise<void>;
29
+ /**
30
+ * Carry the pattern redirects (`/beta/:slug*`) into a server build, as
31
+ * `redirects` in the Frameworks API config: Astro's `redirects` carry only
32
+ * the exact ones, since it can't prerender a pattern's pages, so the adapter
33
+ * never writes these. Netlify appends them after any rules of the user's own.
34
+ */
35
+ export declare const emitNetlifyPatternRedirects: (project: BlumeProject) => Promise<void>;
29
36
  /**
30
37
  * Netlify. A server build runs on Netlify Functions from the Frameworks API
31
38
  * tree the adapter writes to `.netlify/v1`, relative to the Astro root —
@@ -7,6 +7,8 @@ import type { DeployPlatform } from "./types.ts";
7
7
  * discovery files and downloaded SVGs need instead, and answers the
8
8
  * configured redirects with their exact status, which Astro's own handler
9
9
  * would default to 301 or 308. No platform env to detect: the site URL has to
10
- * be configured.
10
+ * be configured. `allowedDomains` becomes Astro's `security.allowedDomains`,
11
+ * which a server behind a reverse proxy needs before Astro reads the reader's
12
+ * address from `X-Forwarded-For`.
11
13
  */
12
14
  export declare const nodePlatform: DeployPlatform;