blume 2.1.0 → 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 (397) hide show
  1. package/CHANGELOG.md +94 -0
  2. package/dist/cli/{chunk-5cg2rzgf.js → chunk-073rdvgb.js} +19 -48
  3. package/dist/cli/{chunk-5cg2rzgf.js.map → chunk-073rdvgb.js.map} +4 -5
  4. package/dist/cli/{chunk-ga0pf4aj.js → chunk-0n9xkp3d.js} +12 -3
  5. package/dist/cli/{chunk-ga0pf4aj.js.map → chunk-0n9xkp3d.js.map} +3 -3
  6. package/dist/cli/chunk-150jk7km.js +52 -0
  7. package/dist/cli/chunk-150jk7km.js.map +10 -0
  8. package/dist/cli/{chunk-rekqz4qg.js → chunk-313vnn40.js} +16 -15
  9. package/dist/cli/chunk-313vnn40.js.map +10 -0
  10. package/dist/cli/{chunk-gp84za0h.js → chunk-3v3ffbrj.js} +2 -2
  11. package/dist/cli/{chunk-9xr4dgee.js → chunk-3x6x3pph.js} +29 -16
  12. package/dist/cli/chunk-3x6x3pph.js.map +10 -0
  13. package/dist/cli/{chunk-0gz36akr.js → chunk-42t4jxdx.js} +21 -5
  14. package/dist/cli/chunk-42t4jxdx.js.map +12 -0
  15. package/dist/cli/{chunk-ta27feev.js → chunk-54ztw1nj.js} +21 -2
  16. package/dist/cli/chunk-54ztw1nj.js.map +10 -0
  17. package/dist/cli/{chunk-jnwj5kjj.js → chunk-5vjtgs6e.js} +20 -7
  18. package/dist/cli/{chunk-jnwj5kjj.js.map → chunk-5vjtgs6e.js.map} +3 -3
  19. package/dist/cli/chunk-66w9j7p6.js +322 -0
  20. package/dist/cli/chunk-66w9j7p6.js.map +14 -0
  21. package/dist/cli/{chunk-nd1821sk.js → chunk-7ppf1rva.js} +32 -18
  22. package/dist/cli/chunk-7ppf1rva.js.map +10 -0
  23. package/dist/cli/{chunk-p804f3pe.js → chunk-8y2kmjv8.js} +6 -6
  24. package/dist/cli/{chunk-2f7n4qzt.js → chunk-c1y538kd.js} +1 -1
  25. package/dist/cli/{chunk-1n228xqb.js → chunk-c887fj0s.js} +2 -2
  26. package/dist/cli/{chunk-y5h4r2y0.js → chunk-cfyg47zg.js} +15 -5
  27. package/dist/cli/chunk-cfyg47zg.js.map +10 -0
  28. package/dist/cli/{chunk-cmtcnh9f.js → chunk-dzwehpy7.js} +2 -2
  29. package/dist/cli/{chunk-h2a48yhd.js → chunk-e6atmn4h.js} +119 -15
  30. package/dist/cli/{chunk-h2a48yhd.js.map → chunk-e6atmn4h.js.map} +10 -10
  31. package/dist/cli/{chunk-5ffywsmb.js → chunk-e8xw9qkh.js} +8 -6
  32. package/dist/cli/{chunk-5ffywsmb.js.map → chunk-e8xw9qkh.js.map} +3 -3
  33. package/dist/cli/{chunk-ntv4qrt7.js → chunk-e9q7a2ak.js} +14 -14
  34. package/dist/cli/{chunk-xkz5xbtv.js → chunk-ehweg4fr.js} +2366 -1114
  35. package/dist/cli/chunk-ehweg4fr.js.map +218 -0
  36. package/dist/cli/{chunk-zf748avv.js → chunk-ep6nd0rn.js} +176 -281
  37. package/dist/cli/{chunk-zf748avv.js.map → chunk-ep6nd0rn.js.map} +11 -12
  38. package/dist/cli/{chunk-yxmk4pec.js → chunk-fdrkhpjy.js} +16 -15
  39. package/dist/cli/{chunk-yxmk4pec.js.map → chunk-fdrkhpjy.js.map} +3 -3
  40. package/dist/cli/{chunk-5wj2qwn2.js → chunk-ft9vfys6.js} +4 -4
  41. package/dist/cli/{chunk-4h8z9vv5.js → chunk-gb420vvz.js} +89 -46
  42. package/dist/cli/chunk-gb420vvz.js.map +17 -0
  43. package/dist/cli/{chunk-713mngdq.js → chunk-hebn0tpx.js} +76 -10
  44. package/dist/cli/chunk-hebn0tpx.js.map +14 -0
  45. package/dist/cli/{chunk-2n4ps1b3.js → chunk-htrwgabr.js} +40 -22
  46. package/dist/cli/chunk-htrwgabr.js.map +15 -0
  47. package/dist/cli/{chunk-zhvd6adm.js → chunk-hx3xqnk9.js} +13 -13
  48. package/dist/cli/chunk-j134vrp2.js +65 -0
  49. package/dist/cli/chunk-j134vrp2.js.map +10 -0
  50. package/dist/cli/{chunk-y4ykbark.js → chunk-kma9f6sf.js} +2 -2
  51. package/dist/cli/{chunk-py62fewh.js → chunk-mrcccgnh.js} +3 -3
  52. package/dist/cli/{chunk-2f3ndkpw.js → chunk-n0v7m8ry.js} +3 -3
  53. package/dist/cli/{chunk-43zcf4gz.js → chunk-ncj7w596.js} +522 -353
  54. package/dist/cli/chunk-ncj7w596.js.map +35 -0
  55. package/dist/cli/{chunk-9geymqns.js → chunk-nq1d20w2.js} +14 -14
  56. package/dist/cli/{chunk-g2z9x01v.js → chunk-nrns10mj.js} +3 -3
  57. package/dist/cli/{chunk-e7vvk5ya.js → chunk-sds923fa.js} +3 -3
  58. package/dist/cli/{chunk-cy5bm0j0.js → chunk-t2m5j4pr.js} +2 -2
  59. package/dist/cli/{chunk-cy5bm0j0.js.map → chunk-t2m5j4pr.js.map} +1 -1
  60. package/dist/cli/{chunk-yj17vs39.js → chunk-tdqhyxfz.js} +5 -5
  61. package/dist/cli/{chunk-q3wxxq39.js → chunk-tphac74f.js} +5 -5
  62. package/dist/cli/{chunk-6bm0xpgd.js → chunk-w1r4vase.js} +2 -2
  63. package/dist/cli/index.js +24 -19
  64. package/dist/cli/index.js.map +3 -3
  65. package/dist/types/ai/ask-context.d.ts +6 -2
  66. package/dist/types/ai/component-markdown.d.ts +2 -0
  67. package/dist/types/ai/openapi-components.d.ts +4 -1
  68. package/dist/types/astro/integration.d.ts +5 -4
  69. package/dist/types/astro/markdown-negotiation.d.ts +3 -0
  70. package/dist/types/astro/pages.d.ts +10 -0
  71. package/dist/types/cli/init/scaffold.d.ts +1 -1
  72. package/dist/types/components/content/api-field.d.ts +4 -1
  73. package/dist/types/components/content/api-page.d.ts +6 -1
  74. package/dist/types/components/openapi/code-samples.d.ts +29 -0
  75. package/dist/types/components/openapi/helpers.d.ts +22 -1
  76. package/dist/types/components/openapi/security.d.ts +10 -0
  77. package/dist/types/components/openapi/snippets.d.ts +60 -0
  78. package/dist/types/core/changelog-index.d.ts +8 -0
  79. package/dist/types/core/config-input.d.ts +30 -3
  80. package/dist/types/core/data.d.ts +4 -0
  81. package/dist/types/core/i18n-ui.d.ts +2 -0
  82. package/dist/types/core/links.d.ts +8 -0
  83. package/dist/types/core/probe.d.ts +2 -0
  84. package/dist/types/core/project-graph.d.ts +6 -0
  85. package/dist/types/core/redirect-patterns.d.ts +11 -3
  86. package/dist/types/core/schema.d.ts +119 -0
  87. package/dist/types/core/sources/cache.d.ts +3 -0
  88. package/dist/types/core/sources/contentful-rich-text.d.ts +11 -2
  89. package/dist/types/core/sources/contentful.d.ts +17 -1
  90. package/dist/types/core/sources/lexical.d.ts +5 -0
  91. package/dist/types/core/sources/normalize.d.ts +20 -1
  92. package/dist/types/core/sources/remote.d.ts +37 -10
  93. package/dist/types/core/sources/sanity.d.ts +1 -1
  94. package/dist/types/core/types.d.ts +17 -0
  95. package/dist/types/deploy/adapter-output.d.ts +2 -1
  96. package/dist/types/deploy/adapters/cloudflare.d.ts +7 -5
  97. package/dist/types/deploy/adapters/node.d.ts +58 -23
  98. package/dist/types/deploy/adapters/registry.d.ts +10 -0
  99. package/dist/types/deploy/adapters/types.d.ts +3 -2
  100. package/dist/types/deploy/platforms/cloudflare.d.ts +10 -7
  101. package/dist/types/deploy/platforms/node.d.ts +3 -1
  102. package/dist/types/deploy/platforms/types.d.ts +18 -7
  103. package/dist/types/deploy/platforms/vercel.d.ts +20 -1
  104. package/dist/types/deploy/redirects.d.ts +17 -1
  105. package/dist/types/deploy/sitemap.d.ts +2 -1
  106. package/dist/types/deploy/vercel-negotiation.d.ts +42 -21
  107. package/dist/types/openapi/checks.d.ts +27 -0
  108. package/dist/types/openapi/graphql.d.ts +6 -0
  109. package/dist/types/openapi/model.d.ts +15 -4
  110. package/dist/types/openapi/parse.d.ts +3 -0
  111. package/dist/types/openapi/references.d.ts +16 -0
  112. package/dist/types/ratelimit/index.d.ts +1 -1
  113. package/dist/types/ratelimit/schema.d.ts +8 -0
  114. package/dist/types/ratelimit/upstash.d.ts +39 -14
  115. package/dist/types/reference/graphql.d.ts +76 -1
  116. package/dist/types/reference/index.d.ts +1 -1
  117. package/dist/types/reference/openapi.d.ts +2 -2
  118. package/dist/types/reference/options.d.ts +37 -1
  119. package/dist/types/reference/schema.d.ts +84 -0
  120. package/dist/types/search/adapters/registry.d.ts +3 -0
  121. package/dist/types/search/adapters/typesense.d.ts +14 -4
  122. package/dist/types/search/build.d.ts +3 -1
  123. package/dist/types/search/orama-index.d.ts +9 -9
  124. package/dist/types/search/sync/algolia.d.ts +5 -2
  125. package/dist/types/search/sync/index.d.ts +3 -1
  126. package/dist/types/search/sync/typesense.d.ts +11 -7
  127. package/dist/types/sources/contentful.d.ts +16 -0
  128. package/dist/types/sources/github-releases.d.ts +8 -1
  129. package/dist/types/sources/payload.d.ts +2 -0
  130. package/dist/types/sources/registry.d.ts +54 -0
  131. package/dist/types/sources/shared.d.ts +3 -0
  132. package/dist/types/sources/strapi.d.ts +2 -0
  133. package/docs/01-quickstart.mdx +4 -2
  134. package/docs/02-deployment.mdx +31 -13
  135. package/docs/advanced/changelog.mdx +11 -0
  136. package/docs/advanced/skills.mdx +1 -1
  137. package/docs/cli/audit.mdx +30 -7
  138. package/docs/cli/doctor.mdx +5 -1
  139. package/docs/cli/evals.mdx +4 -4
  140. package/docs/cli/translate.mdx +1 -0
  141. package/docs/cli/validate.mdx +4 -3
  142. package/docs/configuration/analytics.mdx +1 -1
  143. package/docs/configuration/assistant.mdx +6 -2
  144. package/docs/configuration/customization.mdx +4 -2
  145. package/docs/configuration/export.mdx +5 -3
  146. package/docs/configuration/index.mdx +3 -2
  147. package/docs/configuration/rate-limiting.mdx +23 -2
  148. package/docs/configuration/search.mdx +37 -14
  149. package/docs/content/components.mdx +2 -2
  150. package/docs/content/frontmatter.mdx +5 -3
  151. package/docs/content/i18n.mdx +2 -2
  152. package/docs/content/includes.mdx +1 -1
  153. package/docs/content/navigation.mdx +4 -4
  154. package/docs/content/sources/contentful.mdx +7 -4
  155. package/docs/content/sources/custom.mdx +7 -3
  156. package/docs/content/sources/github-releases.mdx +10 -2
  157. package/docs/content/sources/index.mdx +3 -3
  158. package/docs/content/sources/notion.mdx +1 -1
  159. package/docs/content/sources/obsidian.mdx +1 -1
  160. package/docs/content/sources/payload.mdx +3 -2
  161. package/docs/content/sources/remote-mdx.mdx +4 -0
  162. package/docs/content/sources/sanity.mdx +2 -2
  163. package/docs/content/sources/strapi.mdx +3 -2
  164. package/docs/content/syntax.mdx +2 -2
  165. package/docs/discoverability/agent-discovery.mdx +1 -1
  166. package/docs/discoverability/index.mdx +1 -1
  167. package/docs/discoverability/json-api.mdx +2 -0
  168. package/docs/discoverability/llms-txt.mdx +1 -1
  169. package/docs/discoverability/markdown.mdx +3 -1
  170. package/docs/discoverability/mcp.mdx +4 -0
  171. package/docs/discoverability/sitemap-and-robots.mdx +1 -1
  172. package/docs/references/api-pages.mdx +1 -1
  173. package/docs/references/asyncapi.mdx +3 -1
  174. package/docs/references/graphql.mdx +13 -1
  175. package/docs/references/openapi.mdx +50 -8
  176. package/package.json +9 -9
  177. package/skills/blume-migrate/SKILL.md +1 -1
  178. package/skills/blume-migrate/references/docusaurus.md +4 -4
  179. package/skills/blume-migrate/references/fumadocs.md +17 -13
  180. package/skills/blume-migrate/references/nextra.md +8 -5
  181. package/skills/blume-migrate/references/starlight.md +9 -7
  182. package/src/ai/ask-context.ts +33 -3
  183. package/src/ai/ask-limits.ts +13 -0
  184. package/src/ai/changelog-markdown.ts +11 -6
  185. package/src/ai/component-markdown.ts +1 -1
  186. package/src/ai/cors.ts +12 -3
  187. package/src/ai/mcp/query.ts +14 -6
  188. package/src/ai/openapi-components.ts +28 -4
  189. package/src/ai/relative-links.ts +4 -38
  190. package/src/astro/generate.ts +78 -48
  191. package/src/astro/integration.ts +16 -13
  192. package/src/astro/markdown-negotiation.ts +3 -0
  193. package/src/astro/module-types.ts +3 -1
  194. package/src/astro/pages.ts +23 -0
  195. package/src/astro/templates.ts +125 -80
  196. package/src/audit/catalog.ts +19 -3
  197. package/src/audit/checks/links.ts +14 -1
  198. package/src/audit/checks/network.ts +110 -6
  199. package/src/audit/checks/redirects.ts +6 -4
  200. package/src/audit/checks/robots.ts +58 -2
  201. package/src/audit/run.ts +3 -0
  202. package/src/audit/types.ts +2 -0
  203. package/src/audit/url.ts +14 -5
  204. package/src/blume-modules.d.ts +5 -1
  205. package/src/cli/args.ts +51 -0
  206. package/src/cli/build-failure.ts +23 -0
  207. package/src/cli/commands/audit.ts +10 -1
  208. package/src/cli/commands/dev.ts +18 -2
  209. package/src/cli/commands/doctor.ts +45 -12
  210. package/src/cli/commands/eval.ts +36 -4
  211. package/src/cli/commands/init.ts +6 -4
  212. package/src/cli/commands/validate.ts +10 -1
  213. package/src/cli/init/scaffold.ts +3 -3
  214. package/src/cli/prepare.ts +6 -3
  215. package/src/cli/required-secrets.ts +1 -1
  216. package/src/components/content/ApiPlayground.astro +6 -2
  217. package/src/components/content/api-field.ts +4 -1
  218. package/src/components/content/api-page.ts +31 -7
  219. package/src/components/content/mermaid-element.ts +15 -1
  220. package/src/components/islands/hooks.ts +27 -1
  221. package/src/components/layout/PageActions.astro +139 -24
  222. package/src/components/layout/RootLayout.astro +10 -2
  223. package/src/components/layout/Search.astro +17 -3
  224. package/src/components/layout/TableOfContents.astro +24 -17
  225. package/src/components/layout/head-scripts.ts +6 -1
  226. package/src/components/layout/search/algolia.ts +10 -1
  227. package/src/components/layout/search/analytics.ts +42 -14
  228. package/src/components/layout/search/endpoint.ts +48 -5
  229. package/src/components/layout/search/pagefind.ts +114 -5
  230. package/src/components/layout/search/types.ts +12 -0
  231. package/src/components/layout/search/typesense.ts +18 -6
  232. package/src/components/openapi/AsyncApiOperation.astro +14 -7
  233. package/src/components/openapi/Authorization.astro +10 -0
  234. package/src/components/openapi/GraphqlOperation.astro +5 -0
  235. package/src/components/openapi/Operation.astro +24 -1
  236. package/src/components/openapi/ParametersTable.astro +8 -4
  237. package/src/components/openapi/Playground.astro +7 -1
  238. package/src/components/openapi/RequestBody.astro +19 -2
  239. package/src/components/openapi/Responses.astro +1 -0
  240. package/src/components/openapi/SchemaTable.astro +15 -3
  241. package/src/components/openapi/async-snippets.ts +61 -5
  242. package/src/components/openapi/async.ts +123 -29
  243. package/src/components/openapi/graphql-helpers.ts +35 -12
  244. package/src/components/openapi/helpers.ts +36 -2
  245. package/src/components/openapi/message-model.ts +54 -11
  246. package/src/components/openapi/message.ts +14 -4
  247. package/src/components/openapi/operation-model.ts +16 -7
  248. package/src/components/openapi/playground-client.ts +24 -5
  249. package/src/components/openapi/playground-schema.ts +1 -1
  250. package/src/components/openapi/schema-tree.ts +44 -14
  251. package/src/components/openapi/security.ts +10 -0
  252. package/src/components/openapi/snippets.ts +5 -3
  253. package/src/components/openapi/validate-json.ts +4 -3
  254. package/src/core/changelog-index.ts +31 -1
  255. package/src/core/component-diagnostics.ts +53 -0
  256. package/src/core/component-overrides.ts +32 -0
  257. package/src/core/config-input.ts +31 -3
  258. package/src/core/data.ts +2 -0
  259. package/src/core/diagnostics.ts +5 -0
  260. package/src/core/i18n-ui.ts +2 -0
  261. package/src/core/includes.ts +1 -1
  262. package/src/core/links.ts +47 -17
  263. package/src/core/probe.ts +26 -6
  264. package/src/core/project-graph.ts +59 -18
  265. package/src/core/redirect-patterns.ts +36 -7
  266. package/src/core/schema.ts +21 -2
  267. package/src/core/sources/cache.ts +6 -0
  268. package/src/core/sources/contentful-rich-text.ts +29 -6
  269. package/src/core/sources/contentful.ts +135 -25
  270. package/src/core/sources/filesystem.ts +26 -4
  271. package/src/core/sources/github-releases.ts +12 -1
  272. package/src/core/sources/lexical.ts +15 -10
  273. package/src/core/sources/mdx-remote.ts +62 -10
  274. package/src/core/sources/normalize.ts +227 -41
  275. package/src/core/sources/notion.ts +7 -1
  276. package/src/core/sources/obsidian.ts +16 -3
  277. package/src/core/sources/payload.ts +38 -15
  278. package/src/core/sources/remote.ts +72 -15
  279. package/src/core/sources/resolve.ts +11 -1
  280. package/src/core/sources/sanity.ts +43 -25
  281. package/src/core/sources/strapi.ts +2 -2
  282. package/src/core/types.ts +18 -0
  283. package/src/core/ui-packs/ar.ts +1 -0
  284. package/src/core/ui-packs/bg.ts +1 -0
  285. package/src/core/ui-packs/bn.ts +1 -0
  286. package/src/core/ui-packs/ca.ts +1 -0
  287. package/src/core/ui-packs/cs.ts +1 -0
  288. package/src/core/ui-packs/da.ts +1 -0
  289. package/src/core/ui-packs/de.ts +1 -0
  290. package/src/core/ui-packs/el.ts +1 -0
  291. package/src/core/ui-packs/es.ts +1 -0
  292. package/src/core/ui-packs/fa.ts +1 -0
  293. package/src/core/ui-packs/fi.ts +1 -0
  294. package/src/core/ui-packs/fr.ts +1 -0
  295. package/src/core/ui-packs/he.ts +1 -0
  296. package/src/core/ui-packs/hi.ts +1 -0
  297. package/src/core/ui-packs/hr.ts +1 -0
  298. package/src/core/ui-packs/hu.ts +1 -0
  299. package/src/core/ui-packs/id.ts +1 -0
  300. package/src/core/ui-packs/it.ts +1 -0
  301. package/src/core/ui-packs/ja.ts +1 -0
  302. package/src/core/ui-packs/ko.ts +1 -0
  303. package/src/core/ui-packs/nl.ts +1 -0
  304. package/src/core/ui-packs/no.ts +1 -0
  305. package/src/core/ui-packs/pl.ts +1 -0
  306. package/src/core/ui-packs/pt-br.ts +1 -0
  307. package/src/core/ui-packs/pt.ts +1 -0
  308. package/src/core/ui-packs/ro.ts +1 -0
  309. package/src/core/ui-packs/ru.ts +1 -0
  310. package/src/core/ui-packs/sk.ts +1 -0
  311. package/src/core/ui-packs/sr.ts +1 -0
  312. package/src/core/ui-packs/sv.ts +1 -0
  313. package/src/core/ui-packs/th.ts +1 -0
  314. package/src/core/ui-packs/tr.ts +1 -0
  315. package/src/core/ui-packs/uk.ts +1 -0
  316. package/src/core/ui-packs/vi.ts +1 -0
  317. package/src/core/ui-packs/zh-tw.ts +1 -0
  318. package/src/core/ui-packs/zh.ts +1 -0
  319. package/src/deploy/adapter-output.ts +7 -2
  320. package/src/deploy/adapters/cloudflare.ts +7 -5
  321. package/src/deploy/adapters/node.ts +47 -9
  322. package/src/deploy/adapters/types.ts +7 -3
  323. package/src/deploy/artifacts.ts +2 -1
  324. package/src/deploy/platforms/cloudflare.ts +13 -9
  325. package/src/deploy/platforms/netlify.ts +2 -1
  326. package/src/deploy/platforms/node.ts +12 -2
  327. package/src/deploy/platforms/types.ts +21 -7
  328. package/src/deploy/platforms/vercel.ts +113 -16
  329. package/src/deploy/redirects.ts +66 -6
  330. package/src/deploy/rss.ts +3 -1
  331. package/src/deploy/sitemap.ts +39 -5
  332. package/src/deploy/vercel-negotiation.ts +290 -102
  333. package/src/eval/agents.ts +18 -1
  334. package/src/eval/prompts.ts +6 -3
  335. package/src/eval/report.ts +34 -13
  336. package/src/eval/run.ts +5 -0
  337. package/src/markdown/relative-links.ts +3 -2
  338. package/src/openapi/checks.ts +273 -0
  339. package/src/openapi/graphql-build.ts +21 -0
  340. package/src/openapi/graphql.ts +11 -0
  341. package/src/openapi/model.ts +15 -3
  342. package/src/openapi/parse.ts +127 -2
  343. package/src/openapi/references.ts +43 -3
  344. package/src/openapi/source.ts +39 -14
  345. package/src/ratelimit/index.ts +1 -1
  346. package/src/ratelimit/runtime.ts +37 -19
  347. package/src/ratelimit/upstash.ts +40 -10
  348. package/src/reference/graphql.ts +15 -1
  349. package/src/reference/index.ts +1 -0
  350. package/src/reference/openapi.ts +2 -2
  351. package/src/reference/options.ts +29 -1
  352. package/src/registry/eject.ts +3 -1
  353. package/src/search/adapters/locale-scope.ts +30 -0
  354. package/src/search/adapters/typesense.ts +14 -4
  355. package/src/search/build.ts +21 -3
  356. package/src/search/orama-index.ts +163 -31
  357. package/src/search/source-pages.ts +29 -0
  358. package/src/search/sync/algolia.ts +99 -9
  359. package/src/search/sync/index.ts +52 -13
  360. package/src/search/sync/typesense.ts +72 -27
  361. package/src/sources/contentful.ts +12 -0
  362. package/src/sources/github-releases.ts +7 -1
  363. package/src/sources/shared.ts +3 -0
  364. package/src/theme/entry.ts +29 -3
  365. package/src/translate/validate.ts +23 -1
  366. package/dist/cli/chunk-0gz36akr.js.map +0 -12
  367. package/dist/cli/chunk-2n4ps1b3.js.map +0 -15
  368. package/dist/cli/chunk-43zcf4gz.js.map +0 -36
  369. package/dist/cli/chunk-4ejxbzee.js +0 -39
  370. package/dist/cli/chunk-4ejxbzee.js.map +0 -10
  371. package/dist/cli/chunk-4h8z9vv5.js.map +0 -16
  372. package/dist/cli/chunk-713mngdq.js.map +0 -14
  373. package/dist/cli/chunk-9xr4dgee.js.map +0 -10
  374. package/dist/cli/chunk-amrb6hgh.js +0 -145
  375. package/dist/cli/chunk-amrb6hgh.js.map +0 -11
  376. package/dist/cli/chunk-nd1821sk.js.map +0 -10
  377. package/dist/cli/chunk-rekqz4qg.js.map +0 -10
  378. package/dist/cli/chunk-ta27feev.js.map +0 -10
  379. package/dist/cli/chunk-xkz5xbtv.js.map +0 -213
  380. package/dist/cli/chunk-y5h4r2y0.js.map +0 -10
  381. /package/dist/cli/{chunk-gp84za0h.js.map → chunk-3v3ffbrj.js.map} +0 -0
  382. /package/dist/cli/{chunk-p804f3pe.js.map → chunk-8y2kmjv8.js.map} +0 -0
  383. /package/dist/cli/{chunk-2f7n4qzt.js.map → chunk-c1y538kd.js.map} +0 -0
  384. /package/dist/cli/{chunk-1n228xqb.js.map → chunk-c887fj0s.js.map} +0 -0
  385. /package/dist/cli/{chunk-cmtcnh9f.js.map → chunk-dzwehpy7.js.map} +0 -0
  386. /package/dist/cli/{chunk-ntv4qrt7.js.map → chunk-e9q7a2ak.js.map} +0 -0
  387. /package/dist/cli/{chunk-5wj2qwn2.js.map → chunk-ft9vfys6.js.map} +0 -0
  388. /package/dist/cli/{chunk-zhvd6adm.js.map → chunk-hx3xqnk9.js.map} +0 -0
  389. /package/dist/cli/{chunk-y4ykbark.js.map → chunk-kma9f6sf.js.map} +0 -0
  390. /package/dist/cli/{chunk-py62fewh.js.map → chunk-mrcccgnh.js.map} +0 -0
  391. /package/dist/cli/{chunk-2f3ndkpw.js.map → chunk-n0v7m8ry.js.map} +0 -0
  392. /package/dist/cli/{chunk-9geymqns.js.map → chunk-nq1d20w2.js.map} +0 -0
  393. /package/dist/cli/{chunk-g2z9x01v.js.map → chunk-nrns10mj.js.map} +0 -0
  394. /package/dist/cli/{chunk-e7vvk5ya.js.map → chunk-sds923fa.js.map} +0 -0
  395. /package/dist/cli/{chunk-yj17vs39.js.map → chunk-tdqhyxfz.js.map} +0 -0
  396. /package/dist/cli/{chunk-q3wxxq39.js.map → chunk-tphac74f.js.map} +0 -0
  397. /package/dist/cli/{chunk-6bm0xpgd.js.map → chunk-w1r4vase.js.map} +0 -0
@@ -29,6 +29,16 @@ export interface OgCustomRoute {
29
29
  export declare const hasGeneratedChangelog: (project: BlumeProject, userPages: {
30
30
  pattern: string;
31
31
  }[]) => boolean;
32
+ /**
33
+ * Every route a navigation entry (a tab, selector item, featured link, header
34
+ * action, or CTA) may point at: content routes, custom `.astro` pages, the
35
+ * generated changelog, and reference routes (so a tab an author points at one
36
+ * still validates). `generateRuntime` and `blume doctor` both check
37
+ * `validateNavTargets` against it, so they flag the same entries.
38
+ */
39
+ export declare const navTargetRoutes: (project: BlumeProject, userPages: {
40
+ pattern: string;
41
+ }[]) => Set<string>;
32
42
  /**
33
43
  * Pick the custom-page routes that should get a generated Open Graph card, with
34
44
  * the card's slug and text. OG is otherwise content-route only, so a custom page
@@ -126,7 +126,7 @@ export interface PlanEnvironment {
126
126
  * What the project still needs from a workspace it sits in, when `init` left
127
127
  * that workspace's config alone: a place in a pnpm workspace's `packages`
128
128
  * (pnpm skips a folder it doesn't list), pnpm's approval for esbuild's build
129
- * script (pnpm 10 and later fail the install without it), or Yarn Berry's
129
+ * script (pnpm 11 and later fail the install without it), or Yarn Berry's
130
130
  * `node_modules` linker. Undefined when the workspace already has it, or the
131
131
  * project doesn't sit in one.
132
132
  */
@@ -32,7 +32,10 @@ export interface ParamFieldProps extends FieldProps {
32
32
  /** The name, for a field with no location attribute. */
33
33
  name?: string;
34
34
  path?: string;
35
- /** Placeholder text for the parameter's playground input. */
35
+ /**
36
+ * An example value: the one the playground and request samples start
37
+ * with, not an input's placeholder hint (see `fieldSchema`).
38
+ */
36
39
  placeholder?: string;
37
40
  query?: string;
38
41
  }
@@ -74,10 +74,15 @@ export declare const endpointTarget: (target: string, server?: string) => Endpoi
74
74
  export declare const fieldSchema: (field: EndpointField) => SchemaLike;
75
75
  /** The path, query, and header fields as OpenAPI parameters. */
76
76
  export declare const endpointParameters: (fields: EndpointField[]) => ParameterLike[];
77
- /** The body fields as a JSON request body, or `undefined` when there are none. */
77
+ /**
78
+ * The body fields as a JSON request body, or `undefined` when there are none.
79
+ * Its example, which the playground and samples start from, holds only the
80
+ * {@link sentFields}.
81
+ */
78
82
  export declare const endpointBody: (fields: EndpointField[]) => {
79
83
  content: {
80
84
  "application/json": {
85
+ example: import("../openapi/helpers.ts").SpecValue;
81
86
  schema: SchemaLike;
82
87
  };
83
88
  };
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Hand-written code samples from a spec: the `x-codeSamples` extension on an
3
+ * operation (Redocly's, which Mintlify, Speakeasy, and Stainless write too),
4
+ * or its older spelling `x-code-samples`. Each entry names a `lang`, holds
5
+ * the `source`, and may carry a `label`. They render as their own tabs ahead
6
+ * of the generated samples and, being fixed text, the playground leaves them
7
+ * as written.
8
+ */
9
+ /** One hand-written sample, ready to render as a tab. */
10
+ export interface CustomCodeSample {
11
+ /** A stable, unique tab key. */
12
+ key: string;
13
+ /** The tab label: the entry's own, else the language's name. */
14
+ label: string;
15
+ /** The Shiki language to highlight `source` with. */
16
+ lang: string;
17
+ source: string;
18
+ }
19
+ /** The two places an operation keeps them. */
20
+ export interface CodeSamplesCarrier {
21
+ "x-code-samples"?: unknown;
22
+ "x-codeSamples"?: unknown;
23
+ }
24
+ /**
25
+ * The operation's hand-written samples, with a unique tab label each. A label
26
+ * two samples share gains its language (`List plants · JavaScript`), and one
27
+ * that still repeats gains a number. Malformed entries are skipped.
28
+ */
29
+ export declare const customCodeSamples: (operation: CodeSamplesCarrier) => CustomCodeSample[];
@@ -73,13 +73,34 @@ export declare const resolveComponentRef: <T extends {
73
73
  export declare const mergeParameters: (pathParameters: ParameterLike[] | undefined, operationParameters: ParameterLike[] | undefined, components?: ComponentsLike) => ParameterLike[];
74
74
  /** The display name of a `$ref`, e.g. `#/components/schemas/Pet` -> `Pet`. */
75
75
  export declare const refName: (ref: string) => string;
76
- /** Resolve one level of `$ref` against the document's component schemas. */
76
+ /**
77
+ * The one member of an `allOf` that only wraps it: `allOf: [{ $ref }]` beside
78
+ * a `description`, `readOnly`, or `default`, which is how drf-spectacular and
79
+ * other generators attach keywords a 3.0 `$ref` can't carry. `undefined` for
80
+ * a real composition: several members, or properties or branches of its own.
81
+ */
82
+ export declare const soleAllOfMember: (schema: SchemaLike) => SchemaLike | undefined;
83
+ /**
84
+ * Resolve one level of `$ref` against the document's component schemas. A
85
+ * single-member `allOf` wrapper resolves like its member, with the wrapper's
86
+ * own keywords on top: its `description` is about this field.
87
+ */
77
88
  export declare const resolveSchema: (schemas: Record<string, SchemaLike>, schema?: SchemaLike) => SchemaLike;
89
+ /**
90
+ * A parameter's description: its own, else its schema's (resolved one `$ref`
91
+ * level), which is where generators like Elysia and oRPC write it.
92
+ */
93
+ export declare const parameterDescription: (param: {
94
+ description?: string;
95
+ schema?: SchemaLike;
96
+ }, schemas: Record<string, SchemaLike>) => string | undefined;
78
97
  /**
79
98
  * A short, human-readable type label for a schema row. `$ref`s label by name
80
99
  * (`Pet`, `Pet[]`) without resolving — which also means circular refs through
81
100
  * array items can't recurse forever. A `null` member stays out of a union's
82
101
  * label: rows mark it with {@link isNullable}, as they do `type: [T, "null"]`.
102
+ * A single-member `allOf` wrapper labels as its member; a real composition is
103
+ * an `object`.
83
104
  */
84
105
  export declare const typeLabel: (schema: SchemaLike) => string;
85
106
  /**
@@ -29,6 +29,11 @@ export interface ResolvedScheme {
29
29
  /** The scheme object; undefined when the requirement names an unknown one. */
30
30
  scheme?: SecuritySchemeLike;
31
31
  scopes: string[];
32
+ /**
33
+ * AsyncAPI: the servers that declare this scheme, set only when the
34
+ * channel's servers don't all declare the same ones.
35
+ */
36
+ servers?: string[];
32
37
  }
33
38
  /** The security state one operation renders. */
34
39
  export interface OperationSecurity {
@@ -36,6 +41,11 @@ export interface OperationSecurity {
36
41
  alternatives: ResolvedScheme[][];
37
42
  /** True when an empty requirement also allows unauthenticated calls. */
38
43
  optional: boolean;
44
+ /**
45
+ * AsyncAPI: the servers that declare no security while others do, so the
46
+ * schemes apply on the other servers only.
47
+ */
48
+ unauthenticatedServers?: string[];
39
49
  }
40
50
  /**
41
51
  * The requirement list an operation actually enforces: its own `security` when
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Code-sample generation for an operation. Deliberately dependency-free: the
3
+ * playground client renders samples live in the browser, so this module must
4
+ * stay out of the server-only dependency graph (no helpers.ts, no
5
+ * openapi-sampler). Requests are assembled once by `buildRequest` in
6
+ * `request.ts`; the builders here only render a finished `RequestSample` as
7
+ * simple, copy-pasteable starter code — not an exhaustive SDK.
8
+ */
9
+ export interface RequestSample {
10
+ method: string;
11
+ url: string;
12
+ headers: Record<string, string>;
13
+ /**
14
+ * The request body as sent, when the operation takes one: JSON text,
15
+ * form-urlencoded pairs, or a raw media type's text.
16
+ */
17
+ body?: string;
18
+ bodyValue?: unknown;
19
+ /**
20
+ * A `multipart/form-data` body's parts as `[name, value]` pairs, set
21
+ * instead of `body`. The request carries no Content-Type of its own for
22
+ * them: the client writes one with the parts' boundary.
23
+ */
24
+ formData?: [string, string][];
25
+ }
26
+ /**
27
+ * Whether fetch refuses to send `method` (an upper-case HTTP method). TRACE is
28
+ * one of the Fetch standard's forbidden methods, and the only one an OpenAPI
29
+ * spec can declare: browsers and Node's fetch alike throw a TypeError before
30
+ * any request goes out.
31
+ */
32
+ export declare const fetchRefusesMethod: (method: string) => boolean;
33
+ /** A code-sample language: config id -> label, Shiki lang, and builder. */
34
+ export interface SampleLanguage {
35
+ id: string;
36
+ label: string;
37
+ lang: string;
38
+ build: (sample: RequestSample) => string;
39
+ }
40
+ /** Every id `codeSamples` accepts for a generated sample. */
41
+ export declare const SAMPLE_LANGUAGE_IDS: string[];
42
+ /** A configured id or alias, as the id it names (lowercased). */
43
+ export declare const sampleLanguageId: (raw: string) => string;
44
+ /** A language's display name and the Shiki language that highlights it. */
45
+ export interface SampleLanguageInfo {
46
+ label: string;
47
+ lang: string;
48
+ }
49
+ /**
50
+ * The display name and Shiki language of a language id or alias, or `null`
51
+ * when Blume doesn't generate that language.
52
+ */
53
+ export declare const sampleLanguageInfo: (raw: string) => SampleLanguageInfo | null;
54
+ /** `openapi()`'s default `codeSamples`, which hand-written endpoint pages always use. */
55
+ export declare const DEFAULT_SAMPLE_LANGUAGES: string[];
56
+ /**
57
+ * The sample languages to render, resolved from config ids (unknown ids
58
+ * dropped), in order. `false` and an empty list both render none.
59
+ */
60
+ export declare const sampleLanguages: (ids: string[] | false) => SampleLanguage[];
@@ -1,3 +1,4 @@
1
+ import type { UIStrings } from "./i18n-ui.ts";
1
2
  import type { ResolvedConfig } from "./schema.ts";
2
3
  import type { PageRecord } from "./types.ts";
3
4
  /** Where the changelog timeline index is served. */
@@ -11,3 +12,10 @@ export declare const CHANGELOG_INDEX_ROUTE = "/changelog";
11
12
  * `/changelog` tab at the index rather than its newest entry.
12
13
  */
13
14
  export declare const hasChangelogIndex: (pages: Pick<PageRecord, "contentType" | "meta">[], config: ResolvedConfig) => boolean;
15
+ /**
16
+ * A locale's UI strings with the index's title and description taken from
17
+ * the `changelog` config where it sets them (a string, or a per-locale map
18
+ * resolved like a header label), so every surface that reads the
19
+ * `changelog` strings (the page, its OG card, its Markdown mirror) agrees.
20
+ */
21
+ export declare const withChangelogIndexText: (config: ResolvedConfig, ui: UIStrings, locale?: string) => UIStrings;
@@ -126,6 +126,18 @@ export interface FooterConfig {
126
126
  */
127
127
  socials?: Partial<Record<FooterSocial, string>>;
128
128
  }
129
+ /**
130
+ * The generated `/changelog` index's heading and description. Each is a
131
+ * string, or a map of locale code to text; the index renders in the default
132
+ * locale. Unset, they're the `changelog` UI strings (`Changelog` in English),
133
+ * which `i18n.ui` translates.
134
+ */
135
+ export interface ChangelogConfig {
136
+ /** The index's description, below its heading and in its meta description. */
137
+ description?: LocalizableLabel;
138
+ /** The index's heading, page title, and OG card title. */
139
+ title?: LocalizableLabel;
140
+ }
129
141
  /**
130
142
  * Where content lives and how it's discovered. `root`/`include`/`exclude` are
131
143
  * zero-config shorthand for a single `filesystem()` source; set `sources` to
@@ -441,6 +453,16 @@ export interface SearchPopularLink {
441
453
  export type SearchProviderConfig = AnySearchAdapter | false;
442
454
  /** The object form of `search`: the adapter plus adapter-independent settings. */
443
455
  export interface SearchOptions {
456
+ /** What search reports to the configured analytics providers. */
457
+ analytics?: {
458
+ /**
459
+ * Send each query's text with the `search` and `search_select` events.
460
+ * Defaults to `true`. `false` sends the query's length (`queryChars`)
461
+ * instead, and the text rides only the `blume:track` DOM event, for a
462
+ * site to forward on its own terms.
463
+ */
464
+ queries?: boolean;
465
+ };
444
466
  /** Indexing behavior. */
445
467
  indexing?: {
446
468
  /**
@@ -463,7 +485,7 @@ export interface SearchOptions {
463
485
  /**
464
486
  * Search configuration. Pass an adapter directly (`search: algolia({…})`, or
465
487
  * `false`) as shorthand for the object form, which also carries `popular`
466
- * links and `indexing` settings.
488
+ * links and `indexing` and `analytics` settings.
467
489
  */
468
490
  export type SearchConfig = SearchProviderConfig | SearchOptions;
469
491
  /** An empty-state prompt shown before the first question to the assistant. */
@@ -1177,8 +1199,8 @@ export interface MarkdownConfig {
1177
1199
  export interface ReactConfig {
1178
1200
  /**
1179
1201
  * Auto-memoize React components/hooks with the React Compiler
1180
- * (`babel-plugin-react-compiler`). On by default whenever React is enabled;
1181
- * set to `false` to skip the compiler's babel pass. Defaults to `true`.
1202
+ * (`oxc-transform-react`). On by default whenever React is enabled;
1203
+ * set to `false` to skip the compiler pass. Defaults to `true`.
1182
1204
  */
1183
1205
  compiler?: boolean;
1184
1206
  }
@@ -1341,6 +1363,11 @@ export interface BlumeConfig {
1341
1363
  * compose: with both set, a page lands at `{deployment.base}/{basePath}/page`.
1342
1364
  */
1343
1365
  basePath?: string;
1366
+ /**
1367
+ * The generated `/changelog` index's title and description, each a string
1368
+ * or a per-locale map. Unset, they're the `changelog` UI strings.
1369
+ */
1370
+ changelog?: ChangelogConfig;
1344
1371
  /**
1345
1372
  * Ask readers before analytics runs, with an adapter from `blume/consent`:
1346
1373
  * `native()` for Blume's own banner, or a hosted consent manager
@@ -264,6 +264,10 @@ export interface BlumeDataConfig {
264
264
  /** Repository URL for header/edit links, or `null`. */
265
265
  repoUrl: string | null;
266
266
  search: {
267
+ /** `search.analytics`: whether the dialog's events carry each query's text. */
268
+ analytics: {
269
+ queries: boolean;
270
+ };
267
271
  enabled: boolean;
268
272
  /** Resolved empty-state links; empty when unset (Search falls back to sidebar). */
269
273
  popular: {
@@ -56,6 +56,7 @@ declare const uiStringsObject: z.ZodObject<{
56
56
  }, z.core.$strip>>;
57
57
  changelog: z.ZodPrefault<z.ZodObject<{
58
58
  description: z.ZodDefault<z.ZodString>;
59
+ empty: z.ZodDefault<z.ZodString>;
59
60
  title: z.ZodDefault<z.ZodString>;
60
61
  }, z.core.$strip>>;
61
62
  consent: z.ZodPrefault<z.ZodObject<{
@@ -227,6 +228,7 @@ export declare const uiStringsSchema: z.ZodPrefault<z.ZodObject<{
227
228
  }, z.core.$strip>>;
228
229
  changelog: z.ZodPrefault<z.ZodObject<{
229
230
  description: z.ZodDefault<z.ZodString>;
231
+ empty: z.ZodDefault<z.ZodString>;
230
232
  title: z.ZodDefault<z.ZodString>;
231
233
  }, z.core.$strip>>;
232
234
  consent: z.ZodPrefault<z.ZodObject<{
@@ -58,6 +58,12 @@ export interface FileRouteIndex {
58
58
  * into the reader's locale onto the fallback copy.
59
59
  */
60
60
  byDefaultNavPath: Map<string, string>;
61
+ /**
62
+ * A staged page's entry id (`<source>/<ref>`) → its route. A remote
63
+ * source's files have no path on disk, so a file link between two of them
64
+ * (`./02-errors.mdx`) resolves by entry id, as the rendered link does.
65
+ */
66
+ byEntryId: Map<string, string>;
61
67
  }
62
68
  /** The linking side of a file link: where the page's source lives. */
63
69
  export interface FileLinkBase {
@@ -90,6 +96,8 @@ export declare const validateLinks: (graph: ContentGraph, options: {
90
96
  i18n?: LocaleRouting | null;
91
97
  publicDir: string | null;
92
98
  checkExternal?: boolean;
99
+ /** External URLs not to request (`--ignore`). Internal links are always checked. */
100
+ ignore?: (url: string) => boolean;
93
101
  /** Configured redirects; their `from` paths count as valid link targets. */
94
102
  redirects?: {
95
103
  from: string;
@@ -7,6 +7,8 @@ export interface ProbeResult {
7
7
  status?: number;
8
8
  timedOut?: boolean;
9
9
  error?: string;
10
+ /** The system error code behind a request that got no response (`ENOTFOUND`). */
11
+ code?: string;
10
12
  /** Whether the request was redirected before landing on `status`. */
11
13
  redirected?: boolean;
12
14
  /** The URL finally landed on, after following redirects. */
@@ -48,4 +48,10 @@ export declare const scanProject: (root: string, options?: {
48
48
  overrides?: ConfigOverrides;
49
49
  /** Relocate the generated runtime (e.g. `.blume-verify` for isolation). */
50
50
  runtimeDir?: string;
51
+ /**
52
+ * Called with the resolved config before any source loads, so a command
53
+ * can report an unset secret ahead of a fetch that fails without it: a
54
+ * source that can't load fails the scan, and nothing after it runs.
55
+ */
56
+ beforeSources?: (config: ResolvedConfig) => void;
51
57
  }) => Promise<BlumeProject>;
@@ -115,11 +115,19 @@ export type CompiledRedirect = [
115
115
  ];
116
116
  /**
117
117
  * The pattern redirects among `redirects`, compiled for the server wrappers
118
- * and the dev server, in the order to try them. The `Location` template is
119
- * percent-encoded as the header needs; a capture is encoded when it's filled
120
- * (see {@link fillLocation}).
118
+ * and Vercel's routing config, in the order to try them. The `Location`
119
+ * template is percent-encoded as the header needs; a capture is encoded when
120
+ * it's filled (see {@link fillLocation}).
121
121
  */
122
122
  export declare const compileRedirects: (redirects: readonly RedirectEnds[]) => CompiledRedirect[];
123
+ /**
124
+ * Every redirect among `redirects` compiled, exact paths first: a pattern as
125
+ * {@link compileRedirects} compiles it, an exact path as a rule matching
126
+ * just that path, a trailing slash optional. What the dev server answers
127
+ * with, where Astro's own handler would send an exact redirect to a page
128
+ * served by `[...slug]` as a `301` whatever its status.
129
+ */
130
+ export declare const compileEveryRedirect: (redirects: readonly RedirectEnds[]) => CompiledRedirect[];
123
131
  /** A captured value, encoded for a `Location` header that must not grow a query or fragment. */
124
132
  export declare const encodeCapture: (value: string) => string;
125
133
  /** A `Location` template with its `$n` references filled from `match`. */