blume 1.7.3 → 2.0.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 (690) hide show
  1. package/AGENTS.md +19 -0
  2. package/CHANGELOG.md +245 -0
  3. package/README.md +34 -21
  4. package/dist/cli/{chunk-vacwm2hv.js → chunk-27g6wdth.js} +2 -2
  5. package/dist/cli/{chunk-ps4m1xh4.js → chunk-2hn4b8z7.js} +513 -550
  6. package/dist/cli/chunk-2hn4b8z7.js.map +12 -0
  7. package/dist/cli/chunk-5shv93fd.js +39 -0
  8. package/dist/cli/chunk-5shv93fd.js.map +10 -0
  9. package/dist/cli/chunk-6crbhc3x.js +361 -0
  10. package/dist/cli/chunk-6crbhc3x.js.map +14 -0
  11. package/dist/cli/{chunk-8cjtbafj.js → chunk-6hsn950k.js} +109 -383
  12. package/dist/cli/chunk-6hsn950k.js.map +10 -0
  13. package/dist/cli/chunk-6vm74dry.js +148 -0
  14. package/dist/cli/chunk-6vm74dry.js.map +10 -0
  15. package/dist/cli/{chunk-yg63d42r.js → chunk-79jhk4py.js} +87 -58
  16. package/dist/cli/chunk-79jhk4py.js.map +35 -0
  17. package/dist/cli/chunk-82bbrxdn.js +51 -0
  18. package/dist/cli/chunk-82bbrxdn.js.map +10 -0
  19. package/dist/cli/chunk-abh8yjkn.js +31 -0
  20. package/dist/cli/chunk-abh8yjkn.js.map +10 -0
  21. package/dist/cli/chunk-ah61y8py.js +75 -0
  22. package/dist/cli/chunk-ah61y8py.js.map +11 -0
  23. package/dist/cli/{chunk-dwgcp5sm.js → chunk-ce574jw2.js} +1 -1
  24. package/dist/cli/chunk-ch6g3ar0.js +102 -0
  25. package/dist/cli/chunk-ch6g3ar0.js.map +10 -0
  26. package/dist/cli/chunk-dh8cwk36.js +279 -0
  27. package/dist/cli/chunk-dh8cwk36.js.map +10 -0
  28. package/dist/cli/{chunk-rqy0s5wh.js → chunk-epjnccmv.js} +17 -16
  29. package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-epjnccmv.js.map} +3 -3
  30. package/dist/cli/chunk-f2z5v128.js +97 -0
  31. package/dist/cli/chunk-f2z5v128.js.map +10 -0
  32. package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
  33. package/dist/cli/chunk-fa25z98p.js.map +11 -0
  34. package/dist/cli/{chunk-1jefwnfs.js → chunk-fs23ddbb.js} +1076 -2592
  35. package/dist/cli/chunk-fs23ddbb.js.map +35 -0
  36. package/dist/cli/{chunk-e7f42gdj.js → chunk-fxypxtvm.js} +2 -2
  37. package/dist/cli/{chunk-bvwwhd84.js → chunk-fz5wtpmh.js} +15 -15
  38. package/dist/cli/{chunk-bvwwhd84.js.map → chunk-fz5wtpmh.js.map} +1 -1
  39. package/dist/cli/chunk-hdpx1tax.js +91 -0
  40. package/dist/cli/chunk-hdpx1tax.js.map +10 -0
  41. package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
  42. package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
  43. package/dist/cli/{chunk-ahnw3kxw.js → chunk-jwyddg7y.js} +27 -22
  44. package/dist/cli/chunk-jwyddg7y.js.map +15 -0
  45. package/dist/cli/{chunk-cjtn640a.js → chunk-kdp5q7ke.js} +43 -20
  46. package/dist/cli/chunk-kdp5q7ke.js.map +10 -0
  47. package/dist/cli/{chunk-5g0w1e2c.js → chunk-kpf8rrjc.js} +28 -16
  48. package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-kpf8rrjc.js.map} +4 -4
  49. package/dist/cli/chunk-m3vmjgmq.js +133 -0
  50. package/dist/cli/chunk-m3vmjgmq.js.map +10 -0
  51. package/dist/cli/{chunk-b27xqwn9.js → chunk-mb2919y2.js} +9 -5
  52. package/dist/cli/chunk-mb2919y2.js.map +10 -0
  53. package/dist/cli/{chunk-5qk08vmp.js → chunk-q5163e60.js} +133 -54
  54. package/dist/cli/chunk-q5163e60.js.map +11 -0
  55. package/dist/cli/chunk-qkqwkpte.js +12437 -0
  56. package/dist/cli/chunk-qkqwkpte.js.map +182 -0
  57. package/dist/cli/{chunk-4x36ddpw.js → chunk-qs4q5p4e.js} +81 -87
  58. package/dist/cli/chunk-qs4q5p4e.js.map +10 -0
  59. package/dist/cli/{chunk-0xjyb285.js → chunk-qwsrynx5.js} +15 -5
  60. package/dist/cli/{chunk-0xjyb285.js.map → chunk-qwsrynx5.js.map} +4 -4
  61. package/dist/cli/chunk-s1p84fyh.js +261 -0
  62. package/dist/cli/chunk-s1p84fyh.js.map +10 -0
  63. package/dist/cli/chunk-s6jhgk0q.js +176 -0
  64. package/dist/cli/chunk-s6jhgk0q.js.map +11 -0
  65. package/dist/cli/chunk-vtk4a6dg.js +374 -0
  66. package/dist/cli/chunk-vtk4a6dg.js.map +10 -0
  67. package/dist/cli/{chunk-k79xp7av.js → chunk-wgm7m9qk.js} +230 -700
  68. package/dist/cli/chunk-wgm7m9qk.js.map +36 -0
  69. package/dist/cli/chunk-wm7js3j9.js +145 -0
  70. package/dist/cli/chunk-wm7js3j9.js.map +11 -0
  71. package/dist/cli/chunk-yt5n7ppj.js +79 -0
  72. package/dist/cli/chunk-yt5n7ppj.js.map +10 -0
  73. package/dist/cli/{chunk-3r45185y.js → chunk-yw7dm696.js} +9 -11
  74. package/dist/cli/{chunk-3r45185y.js.map → chunk-yw7dm696.js.map} +3 -3
  75. package/dist/cli/{chunk-nn13znc2.js → chunk-zxcczpyx.js} +1 -1
  76. package/dist/cli/chunk-zxh4d9vy.js +122 -0
  77. package/dist/cli/chunk-zxh4d9vy.js.map +11 -0
  78. package/dist/cli/index.js +214 -57
  79. package/dist/cli/index.js.map +8 -7
  80. package/dist/types/ai/agent-readability.d.ts +52 -0
  81. package/dist/types/ai/ai-catalog.d.ts +42 -0
  82. package/dist/types/ai/api/paths.d.ts +17 -0
  83. package/dist/types/ai/api-catalog.d.ts +18 -0
  84. package/dist/types/ai/ask-context.d.ts +7 -7
  85. package/dist/types/ai/ask.d.ts +368 -0
  86. package/dist/types/ai/changelog-markdown.d.ts +2 -0
  87. package/dist/types/ai/component-markdown.d.ts +2 -2
  88. package/dist/types/ai/index.d.ts +24 -0
  89. package/dist/types/ai/link-headers.d.ts +24 -0
  90. package/dist/types/ai/llms.d.ts +25 -0
  91. package/dist/types/ai/markdown.d.ts +45 -0
  92. package/dist/types/ai/mcp/discovery.d.ts +68 -0
  93. package/dist/types/ai/mcp/tools.d.ts +16 -0
  94. package/dist/types/ai/openapi-components.d.ts +43 -0
  95. package/dist/types/ai/relative-links.d.ts +26 -0
  96. package/dist/types/ai/serializers.d.ts +15 -0
  97. package/dist/types/ai/skills.d.ts +42 -0
  98. package/dist/types/ai/tar.d.ts +25 -0
  99. package/dist/types/ai/visibility.d.ts +17 -0
  100. package/dist/types/ai/web-bot-auth.d.ts +16 -0
  101. package/dist/types/analytics/adobe.d.ts +35 -0
  102. package/dist/types/analytics/amplitude.d.ts +50 -0
  103. package/dist/types/analytics/clarity.d.ts +31 -0
  104. package/dist/types/analytics/clearbit.d.ts +29 -0
  105. package/dist/types/analytics/cloudflare.d.ts +41 -0
  106. package/dist/types/analytics/fathom.d.ts +41 -0
  107. package/dist/types/analytics/google-analytics.d.ts +44 -0
  108. package/dist/types/analytics/google-tag-manager.d.ts +40 -0
  109. package/dist/types/analytics/head.d.ts +30 -0
  110. package/dist/types/analytics/heap.d.ts +40 -0
  111. package/dist/types/analytics/hightouch.d.ts +44 -0
  112. package/dist/types/analytics/hotjar.d.ts +33 -0
  113. package/dist/types/analytics/index.d.ts +61 -0
  114. package/dist/types/analytics/inline.d.ts +17 -0
  115. package/dist/types/analytics/logrocket.d.ts +44 -0
  116. package/dist/types/analytics/mixpanel.d.ts +67 -0
  117. package/dist/types/analytics/pirsch.d.ts +42 -0
  118. package/dist/types/analytics/plausible.d.ts +56 -0
  119. package/dist/types/analytics/posthog.d.ts +45 -0
  120. package/dist/types/analytics/schema.d.ts +320 -0
  121. package/dist/types/analytics/script.d.ts +46 -0
  122. package/dist/types/analytics/segment.d.ts +50 -0
  123. package/dist/types/analytics/vercel.d.ts +48 -0
  124. package/dist/types/astro/integration.d.ts +76 -0
  125. package/dist/types/astro/markdown-negotiation.d.ts +23 -0
  126. package/dist/types/astro/module-types.d.ts +14 -0
  127. package/dist/types/astro/pages.d.ts +44 -0
  128. package/dist/types/cli/env.d.ts +12 -0
  129. package/dist/types/cli/init/scaffold.d.ts +154 -0
  130. package/dist/types/components/layout/nav-utils.d.ts +11 -0
  131. package/dist/types/core/adapter.d.ts +47 -0
  132. package/dist/types/core/api-name.d.ts +7 -0
  133. package/dist/types/core/changelog-index.d.ts +13 -0
  134. package/dist/types/core/config-input.d.ts +197 -526
  135. package/dist/types/core/config.d.ts +61 -35
  136. package/dist/types/core/content-assets.d.ts +76 -0
  137. package/dist/types/core/custom-pages.d.ts +33 -0
  138. package/dist/types/core/data.d.ts +30 -15
  139. package/dist/types/core/define-components.d.ts +12 -9
  140. package/dist/types/core/deployment-env.d.ts +6 -11
  141. package/dist/types/core/frontmatter.d.ts +10 -0
  142. package/dist/types/core/graph.d.ts +18 -0
  143. package/dist/types/core/heading-markers.d.ts +54 -0
  144. package/dist/types/core/i18n-ui.d.ts +12 -10
  145. package/dist/types/core/i18n.d.ts +87 -0
  146. package/dist/types/core/includes.d.ts +138 -0
  147. package/dist/types/core/last-modified.d.ts +47 -0
  148. package/dist/types/core/links.d.ts +95 -0
  149. package/dist/types/core/locale-links.d.ts +60 -0
  150. package/dist/types/core/manifest.d.ts +17 -0
  151. package/dist/types/core/meta.d.ts +38 -0
  152. package/dist/types/core/nav-diagnostics.d.ts +26 -0
  153. package/dist/types/core/navigation.d.ts +6 -0
  154. package/dist/types/core/node-require.d.ts +19 -0
  155. package/dist/types/core/package-json.d.ts +13 -0
  156. package/dist/types/core/probe.d.ts +42 -0
  157. package/dist/types/core/project-graph.d.ts +51 -0
  158. package/dist/types/core/project.d.ts +2 -0
  159. package/dist/types/core/safe-href.d.ts +2 -0
  160. package/dist/types/core/safe-links.d.ts +26 -0
  161. package/dist/types/core/schema.d.ts +2284 -454
  162. package/dist/types/core/site-url.d.ts +16 -0
  163. package/dist/types/core/sources/assets.d.ts +36 -0
  164. package/dist/types/core/sources/cache.d.ts +37 -0
  165. package/dist/types/core/sources/collection.d.ts +28 -0
  166. package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
  167. package/dist/types/core/sources/contentful.d.ts +40 -0
  168. package/dist/types/core/sources/filesystem.d.ts +24 -0
  169. package/dist/types/core/sources/github-releases.d.ts +31 -0
  170. package/dist/types/core/sources/json.d.ts +30 -0
  171. package/dist/types/core/sources/lexical.d.ts +19 -0
  172. package/dist/types/core/sources/lower.d.ts +75 -0
  173. package/dist/types/core/sources/mdx-remote.d.ts +28 -0
  174. package/dist/types/core/sources/normalize.d.ts +147 -0
  175. package/dist/types/core/sources/notion.d.ts +131 -0
  176. package/dist/types/core/sources/obsidian.d.ts +46 -0
  177. package/dist/types/core/sources/payload.d.ts +39 -0
  178. package/dist/types/core/sources/portable-text.d.ts +42 -0
  179. package/dist/types/core/sources/read.d.ts +23 -0
  180. package/dist/types/core/sources/remote.d.ts +74 -0
  181. package/dist/types/core/sources/resolve.d.ts +19 -0
  182. package/dist/types/core/sources/sanity.d.ts +43 -0
  183. package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
  184. package/dist/types/core/sources/strapi.d.ts +33 -0
  185. package/dist/types/core/sources/types.d.ts +7 -0
  186. package/dist/types/core/sources/watch.d.ts +45 -0
  187. package/dist/types/core/text-width.d.ts +11 -0
  188. package/dist/types/core/types.d.ts +15 -1
  189. package/dist/types/core/unrecognized-keys.d.ts +7 -0
  190. package/dist/types/core/versions.d.ts +72 -0
  191. package/dist/types/core/yaml.d.ts +9 -0
  192. package/dist/types/deploy/adapter-output.d.ts +45 -0
  193. package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
  194. package/dist/types/deploy/adapters/index.d.ts +29 -0
  195. package/dist/types/deploy/adapters/netlify.d.ts +37 -0
  196. package/dist/types/deploy/adapters/node.d.ts +37 -0
  197. package/dist/types/deploy/adapters/registry.d.ts +133 -0
  198. package/dist/types/deploy/adapters/types.d.ts +71 -0
  199. package/dist/types/deploy/adapters/vercel.d.ts +38 -0
  200. package/dist/types/deploy/artifacts.d.ts +65 -0
  201. package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
  202. package/dist/types/deploy/function-bundle.d.ts +80 -0
  203. package/dist/types/deploy/headers.d.ts +50 -0
  204. package/dist/types/deploy/node-headers.d.ts +42 -0
  205. package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
  206. package/dist/types/deploy/platforms/index.d.ts +18 -0
  207. package/dist/types/deploy/platforms/netlify.d.ts +13 -0
  208. package/dist/types/deploy/platforms/node.d.ts +11 -0
  209. package/dist/types/deploy/platforms/paths.d.ts +27 -0
  210. package/dist/types/deploy/platforms/static.d.ts +10 -0
  211. package/dist/types/deploy/platforms/types.d.ts +104 -0
  212. package/dist/types/deploy/platforms/vercel.d.ts +32 -0
  213. package/dist/types/deploy/redirects.d.ts +53 -0
  214. package/dist/types/deploy/robots.d.ts +8 -0
  215. package/dist/types/deploy/rss.d.ts +31 -0
  216. package/dist/types/deploy/sitemap.d.ts +21 -0
  217. package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
  218. package/dist/types/markdown/code-title.d.ts +32 -0
  219. package/dist/types/markdown/fence-meta.d.ts +23 -0
  220. package/dist/types/markdown/themes.d.ts +3 -3
  221. package/dist/types/openapi/asyncapi.d.ts +129 -0
  222. package/dist/types/openapi/graphql-build.d.ts +8 -0
  223. package/dist/types/openapi/graphql.d.ts +122 -0
  224. package/dist/types/openapi/model.d.ts +158 -0
  225. package/dist/types/openapi/parse.d.ts +57 -0
  226. package/dist/types/openapi/references.d.ts +37 -25
  227. package/dist/types/openapi/render-mdx.d.ts +33 -0
  228. package/dist/types/openapi/sentence.d.ts +7 -0
  229. package/dist/types/openapi/signature.d.ts +10 -0
  230. package/dist/types/openapi/source.d.ts +22 -0
  231. package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
  232. package/dist/types/reference/asyncapi.d.ts +166 -0
  233. package/dist/types/reference/graphql.d.ts +181 -0
  234. package/dist/types/reference/index.d.ts +32 -0
  235. package/dist/types/reference/openapi.d.ts +165 -0
  236. package/dist/types/reference/options.d.ts +157 -0
  237. package/dist/types/reference/scalar.d.ts +136 -0
  238. package/dist/types/reference/schema.d.ts +630 -0
  239. package/dist/types/search/adapters/algolia.d.ts +32 -0
  240. package/dist/types/search/adapters/flexsearch.d.ts +12 -0
  241. package/dist/types/search/adapters/index.d.ts +31 -0
  242. package/dist/types/search/adapters/mixedbread.d.ts +22 -0
  243. package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
  244. package/dist/types/search/adapters/orama.d.ts +13 -0
  245. package/dist/types/search/adapters/pagefind.d.ts +12 -0
  246. package/dist/types/search/adapters/registry.d.ts +228 -0
  247. package/dist/types/search/adapters/types.d.ts +34 -0
  248. package/dist/types/search/adapters/typesense.d.ts +42 -0
  249. package/dist/types/search/build.d.ts +23 -0
  250. package/dist/types/search/documents.d.ts +90 -0
  251. package/dist/types/search/facets.d.ts +3 -0
  252. package/dist/types/search/orama-index.d.ts +1 -1
  253. package/dist/types/search/sync/algolia.d.ts +14 -0
  254. package/dist/types/search/sync/index.d.ts +14 -0
  255. package/dist/types/search/sync/orama-cloud.d.ts +10 -0
  256. package/dist/types/search/sync/typesense.d.ts +14 -0
  257. package/dist/types/sources/contentful.d.ts +68 -0
  258. package/dist/types/sources/custom.d.ts +20 -0
  259. package/dist/types/sources/filesystem.d.ts +42 -0
  260. package/dist/types/sources/github-releases.d.ts +46 -0
  261. package/dist/types/sources/index.d.ts +48 -0
  262. package/dist/types/sources/mdx-remote.d.ts +63 -0
  263. package/dist/types/sources/notion.d.ts +65 -0
  264. package/dist/types/sources/obsidian.d.ts +34 -0
  265. package/dist/types/sources/payload.d.ts +68 -0
  266. package/dist/types/sources/registry.d.ts +1414 -0
  267. package/dist/types/sources/sanity.d.ts +69 -0
  268. package/dist/types/sources/shared.d.ts +46 -0
  269. package/dist/types/sources/strapi.d.ts +66 -0
  270. package/dist/types/theme/icon-kind.d.ts +11 -0
  271. package/dist/types/theme/icons.d.ts +20 -0
  272. package/docs/01-quickstart.mdx +18 -18
  273. package/docs/02-deployment.mdx +52 -28
  274. package/docs/03-upgrading.mdx +364 -0
  275. package/docs/04-migrating.mdx +58 -0
  276. package/docs/08-faq.mdx +5 -5
  277. package/docs/advanced/blog.mdx +13 -6
  278. package/docs/advanced/changelog.mdx +23 -35
  279. package/docs/advanced/custom-pages.mdx +22 -10
  280. package/docs/advanced/meta.ts +1 -8
  281. package/docs/advanced/skills.mdx +8 -0
  282. package/docs/cli/audit.mdx +646 -0
  283. package/docs/cli/doctor.mdx +29 -0
  284. package/docs/{reference/eval.mdx → cli/evals.mdx} +12 -11
  285. package/docs/cli/index.mdx +105 -0
  286. package/docs/cli/meta.ts +7 -0
  287. package/docs/{reference → cli}/translate.mdx +9 -9
  288. package/docs/cli/validate.mdx +41 -0
  289. package/docs/cli/version.mdx +40 -0
  290. package/docs/configuration/analytics.mdx +350 -59
  291. package/docs/configuration/assistant.mdx +357 -0
  292. package/docs/configuration/customization.mdx +16 -10
  293. package/docs/configuration/index.mdx +50 -31
  294. package/docs/configuration/meta.ts +1 -1
  295. package/docs/configuration/search.mdx +76 -55
  296. package/docs/configuration/theming.mdx +24 -15
  297. package/docs/content/components.mdx +21 -5
  298. package/docs/{reference → content}/frontmatter.mdx +35 -1
  299. package/docs/content/i18n.mdx +9 -7
  300. package/docs/content/includes.mdx +2 -4
  301. package/docs/content/index.mdx +1 -1
  302. package/docs/content/islands.mdx +11 -6
  303. package/docs/content/meta.mdx +1 -1
  304. package/docs/content/meta.ts +1 -0
  305. package/docs/content/navigation.mdx +9 -7
  306. package/docs/content/sources.mdx +145 -50
  307. package/docs/content/syntax.mdx +16 -12
  308. package/docs/content/versioning.mdx +3 -3
  309. package/docs/discoverability/agent-discovery.mdx +12 -12
  310. package/docs/discoverability/index.mdx +4 -4
  311. package/docs/discoverability/json-api.mdx +4 -4
  312. package/docs/discoverability/llms-txt.mdx +6 -6
  313. package/docs/discoverability/markdown.mdx +4 -4
  314. package/docs/discoverability/mcp.mdx +11 -11
  315. package/docs/discoverability/sitemap-and-robots.mdx +3 -3
  316. package/docs/index.mdx +4 -4
  317. package/docs/references/asyncapi.mdx +59 -0
  318. package/docs/{advanced → references}/graphql.mdx +45 -32
  319. package/docs/{reference → references}/meta.ts +2 -2
  320. package/docs/references/openapi.mdx +171 -0
  321. package/docs/references/scalar.mdx +64 -0
  322. package/package.json +42 -8
  323. package/skills/blume/SKILL.md +23 -10
  324. package/skills/blume-migrate/SKILL.md +22 -21
  325. package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
  326. package/skills/blume-migrate/references/docusaurus.md +5 -4
  327. package/skills/blume-migrate/references/fumadocs.md +4 -4
  328. package/skills/blume-migrate/references/mintlify.md +23 -8
  329. package/skills/blume-migrate/references/monorepo.md +6 -6
  330. package/skills/blume-migrate/references/starlight.md +4 -4
  331. package/src/ai/agent-readability.ts +25 -26
  332. package/src/ai/ai-catalog.ts +50 -32
  333. package/src/ai/api/handlers.ts +46 -11
  334. package/src/ai/api/paths.ts +1 -1
  335. package/src/ai/api-catalog.ts +8 -8
  336. package/src/ai/ask-context.ts +7 -7
  337. package/src/ai/ask-data.ts +3 -3
  338. package/src/ai/ask.ts +637 -100
  339. package/src/ai/changelog-markdown.ts +91 -0
  340. package/src/ai/component-markdown.ts +328 -12
  341. package/src/ai/cors.ts +3 -3
  342. package/src/ai/index.ts +45 -0
  343. package/src/ai/link-headers.ts +7 -6
  344. package/src/ai/llms.ts +20 -15
  345. package/src/ai/markdown.ts +35 -5
  346. package/src/ai/mcp/data.ts +9 -5
  347. package/src/ai/openapi-components.ts +5 -2
  348. package/src/ai/relative-links.ts +170 -0
  349. package/src/ai/serializers.ts +3 -3
  350. package/src/ai/skills.ts +1 -1
  351. package/src/ai/visibility.ts +1 -1
  352. package/src/ai/web-bot-auth.ts +2 -2
  353. package/src/analytics/adobe.ts +46 -0
  354. package/src/analytics/amplitude.ts +79 -0
  355. package/src/analytics/clarity.ts +46 -0
  356. package/src/analytics/clearbit.ts +47 -0
  357. package/src/analytics/cloudflare.ts +67 -0
  358. package/src/analytics/fathom.ts +64 -0
  359. package/src/analytics/google-analytics.ts +84 -0
  360. package/src/analytics/google-tag-manager.ts +61 -0
  361. package/src/analytics/head.ts +130 -0
  362. package/src/analytics/heap.ts +65 -0
  363. package/src/analytics/hightouch.ts +77 -0
  364. package/src/analytics/hotjar.ts +47 -0
  365. package/src/analytics/index.ts +71 -0
  366. package/src/analytics/inline.ts +21 -0
  367. package/src/analytics/logrocket.ts +71 -0
  368. package/src/analytics/mixpanel.ts +92 -0
  369. package/src/analytics/pirsch.ts +66 -0
  370. package/src/analytics/plausible.ts +83 -0
  371. package/src/analytics/posthog.ts +78 -0
  372. package/src/analytics/schema.ts +60 -0
  373. package/src/analytics/script.ts +60 -0
  374. package/src/analytics/segment.ts +85 -0
  375. package/src/analytics/vercel.ts +50 -0
  376. package/src/astro/adapter-root.ts +7 -9
  377. package/src/astro/component-slots.ts +131 -91
  378. package/src/astro/generate.ts +129 -361
  379. package/src/astro/integration.ts +2 -6
  380. package/src/astro/module-types.ts +1 -1
  381. package/src/astro/pages.ts +13 -101
  382. package/src/astro/render-deps.ts +379 -0
  383. package/src/astro/runtime-deps.ts +201 -0
  384. package/src/astro/templates.ts +575 -562
  385. package/src/audit/agent.ts +24 -0
  386. package/src/audit/catalog.ts +2 -2
  387. package/src/audit/checks/assets.ts +2 -2
  388. package/src/audit/checks/dns-aid.ts +1 -1
  389. package/src/audit/checks/duplicates.ts +3 -1
  390. package/src/audit/checks/i18n.ts +1 -1
  391. package/src/audit/checks/indexability.ts +7 -7
  392. package/src/audit/checks/links.ts +2 -2
  393. package/src/audit/checks/llms.ts +6 -6
  394. package/src/audit/checks/network.ts +3 -3
  395. package/src/audit/checks/og-image.ts +2 -2
  396. package/src/audit/checks/robots.ts +1 -1
  397. package/src/audit/checks/sitemap.ts +2 -2
  398. package/src/audit/checks/social.ts +1 -1
  399. package/src/audit/run.ts +4 -3
  400. package/src/audit/terms.ts +31 -0
  401. package/src/audit/url.ts +13 -13
  402. package/src/blume-modules.d.ts +2 -2
  403. package/src/cli/command-meta.ts +10 -0
  404. package/src/cli/commands/audit.ts +40 -21
  405. package/src/cli/commands/build.ts +71 -316
  406. package/src/cli/commands/check.ts +1 -0
  407. package/src/cli/commands/dev.ts +40 -1
  408. package/src/cli/commands/doctor.ts +92 -14
  409. package/src/cli/commands/eject.ts +44 -7
  410. package/src/cli/commands/eval.ts +5 -5
  411. package/src/cli/commands/init.ts +161 -41
  412. package/src/cli/commands/migrate.ts +121 -0
  413. package/src/cli/commands/preview.ts +7 -1
  414. package/src/cli/commands/translate.ts +5 -5
  415. package/src/cli/commands/upgrade.ts +141 -0
  416. package/src/cli/commands/version.ts +57 -44
  417. package/src/cli/eject-scripts.ts +121 -6
  418. package/src/cli/index.ts +11 -1
  419. package/src/cli/init/install.ts +70 -0
  420. package/src/cli/init/questions.ts +7 -0
  421. package/src/cli/init/scaffold.ts +459 -75
  422. package/src/cli/lazy-command.ts +37 -1
  423. package/src/cli/prepare.ts +40 -6
  424. package/src/cli/required-secrets.ts +39 -12
  425. package/src/cli/unknown-flags.ts +266 -0
  426. package/src/cli/yarn-pnp.ts +52 -0
  427. package/src/components/content/AccordionItem.astro +7 -1
  428. package/src/components/content/Card.astro +4 -3
  429. package/src/components/content/ColorItem.astro +22 -4
  430. package/src/components/content/GithubInfo.astro +2 -2
  431. package/src/components/content/Prompt.astro +25 -25
  432. package/src/components/content/Tabs.astro +3 -1
  433. package/src/components/content/Tile.astro +2 -3
  434. package/src/components/content/Tooltip.astro +57 -9
  435. package/src/components/content/content-strings.ts +34 -0
  436. package/src/components/content/diff.ts +1 -1
  437. package/src/components/content/mermaid-element.ts +13 -2
  438. package/src/components/content/prompt-markdown.ts +292 -0
  439. package/src/components/content/tooltip-id.ts +41 -0
  440. package/src/components/copy-feedback.ts +1 -1
  441. package/src/components/islands/{AskAI.astro → Assistant.astro} +10 -10
  442. package/src/components/islands/{ask-ai.tsx → assistant.tsx} +23 -23
  443. package/src/components/islands/hooks.ts +36 -11
  444. package/src/components/layout/Analytics.astro +21 -79
  445. package/src/components/layout/Banner.astro +3 -1
  446. package/src/components/layout/DiscoveryLinks.astro +69 -0
  447. package/src/components/layout/Header.astro +93 -30
  448. package/src/components/layout/LanguageSwitcher.astro +4 -1
  449. package/src/components/layout/Logo.astro +23 -2
  450. package/src/components/layout/NavSelector.astro +13 -2
  451. package/src/components/layout/NavTree.astro +12 -3
  452. package/src/components/layout/NavTreeScript.astro +17 -3
  453. package/src/components/layout/PageActions.astro +3 -3
  454. package/src/components/layout/PageFeedback.astro +11 -1
  455. package/src/components/layout/PageLayout.astro +58 -11
  456. package/src/components/layout/Pagination.astro +7 -7
  457. package/src/components/layout/ReferenceLayout.astro +22 -13
  458. package/src/components/layout/RootLayout.astro +75 -72
  459. package/src/components/layout/Search.astro +43 -19
  460. package/src/components/layout/WebMcp.astro +1 -1
  461. package/src/components/layout/analytics-client.ts +73 -16
  462. package/src/components/layout/drawer-inert.ts +113 -15
  463. package/src/components/layout/dropdown-clamp.ts +105 -0
  464. package/src/components/layout/head-scripts.ts +15 -6
  465. package/src/components/layout/nav-utils.ts +17 -0
  466. package/src/components/layout/search/algolia.ts +8 -8
  467. package/src/components/layout/search/orama-cloud.ts +9 -7
  468. package/src/components/layout/search/typesense.ts +11 -17
  469. package/src/components/openapi/MessageComposer.astro +2 -2
  470. package/src/components/openapi/Playground.astro +2 -2
  471. package/src/components/openapi/description.ts +2 -2
  472. package/src/components/openapi/playground-client.ts +79 -10
  473. package/src/core/changelog-index.ts +24 -0
  474. package/src/core/code-fences.ts +1 -1
  475. package/src/core/component-overrides.ts +399 -154
  476. package/src/core/config-input.ts +201 -566
  477. package/src/core/config.ts +131 -42
  478. package/src/core/custom-pages.ts +105 -0
  479. package/src/core/data.ts +34 -15
  480. package/src/core/define-components.ts +12 -9
  481. package/src/core/deployment-env.ts +18 -74
  482. package/src/core/diagnostics.ts +14 -7
  483. package/src/core/graph.ts +69 -25
  484. package/src/core/i18n-ui.ts +41 -11
  485. package/src/core/i18n.ts +17 -0
  486. package/src/core/includes.ts +156 -38
  487. package/src/core/last-modified.ts +6 -11
  488. package/src/core/links.ts +166 -2
  489. package/src/core/manifest.ts +10 -3
  490. package/src/core/navigation.ts +115 -16
  491. package/src/core/new-tab.ts +35 -0
  492. package/src/core/node-require.ts +21 -0
  493. package/src/core/project-graph.ts +42 -26
  494. package/src/core/project.ts +9 -4
  495. package/src/core/request-body.ts +61 -0
  496. package/src/core/safe-href.ts +28 -0
  497. package/src/core/safe-links.ts +68 -0
  498. package/src/core/schema.ts +528 -745
  499. package/src/core/server-features.ts +10 -11
  500. package/src/core/sources/assets.ts +47 -11
  501. package/src/core/sources/collection.ts +67 -0
  502. package/src/core/sources/contentful-rich-text.ts +285 -0
  503. package/src/core/sources/contentful.ts +173 -0
  504. package/src/core/sources/github-releases.ts +51 -1
  505. package/src/core/sources/json.ts +71 -0
  506. package/src/core/sources/lexical.ts +195 -0
  507. package/src/core/sources/lower.ts +226 -0
  508. package/src/core/sources/normalize.ts +52 -2
  509. package/src/core/sources/notion.ts +39 -28
  510. package/src/core/sources/payload.ts +135 -0
  511. package/src/core/sources/portable-text.ts +11 -16
  512. package/src/core/sources/remote.ts +226 -0
  513. package/src/core/sources/resolve.ts +104 -166
  514. package/src/core/sources/sanity.ts +16 -49
  515. package/src/core/sources/strapi-blocks.ts +124 -0
  516. package/src/core/sources/strapi.ts +191 -0
  517. package/src/core/sources/types.ts +12 -1
  518. package/src/core/types.ts +15 -1
  519. package/src/core/ui-packs/ar.ts +10 -7
  520. package/src/core/ui-packs/bg.ts +10 -7
  521. package/src/core/ui-packs/bn.ts +10 -7
  522. package/src/core/ui-packs/ca.ts +7 -6
  523. package/src/core/ui-packs/cs.ts +10 -7
  524. package/src/core/ui-packs/da.ts +10 -7
  525. package/src/core/ui-packs/de.ts +10 -7
  526. package/src/core/ui-packs/el.ts +7 -6
  527. package/src/core/ui-packs/es.ts +7 -6
  528. package/src/core/ui-packs/fa.ts +10 -7
  529. package/src/core/ui-packs/fi.ts +10 -7
  530. package/src/core/ui-packs/fr.ts +7 -6
  531. package/src/core/ui-packs/he.ts +10 -7
  532. package/src/core/ui-packs/hi.ts +10 -7
  533. package/src/core/ui-packs/hr.ts +10 -7
  534. package/src/core/ui-packs/hu.ts +10 -7
  535. package/src/core/ui-packs/id.ts +10 -7
  536. package/src/core/ui-packs/it.ts +7 -6
  537. package/src/core/ui-packs/ja.ts +7 -6
  538. package/src/core/ui-packs/ko.ts +7 -6
  539. package/src/core/ui-packs/nl.ts +10 -7
  540. package/src/core/ui-packs/no.ts +10 -7
  541. package/src/core/ui-packs/pl.ts +10 -7
  542. package/src/core/ui-packs/pt-br.ts +7 -6
  543. package/src/core/ui-packs/pt.ts +7 -6
  544. package/src/core/ui-packs/ro.ts +10 -7
  545. package/src/core/ui-packs/ru.ts +10 -7
  546. package/src/core/ui-packs/sk.ts +10 -7
  547. package/src/core/ui-packs/sr.ts +10 -7
  548. package/src/core/ui-packs/sv.ts +10 -7
  549. package/src/core/ui-packs/th.ts +7 -6
  550. package/src/core/ui-packs/tr.ts +10 -7
  551. package/src/core/ui-packs/uk.ts +10 -7
  552. package/src/core/ui-packs/vi.ts +7 -6
  553. package/src/core/ui-packs/zh-tw.ts +7 -6
  554. package/src/core/ui-packs/zh.ts +7 -6
  555. package/src/core/unrecognized-keys.ts +10 -0
  556. package/src/core/version-cut.ts +116 -8
  557. package/src/deploy/adapter-output.ts +57 -97
  558. package/src/deploy/adapters/cloudflare.ts +39 -0
  559. package/src/deploy/adapters/index.ts +41 -0
  560. package/src/deploy/adapters/netlify.ts +34 -0
  561. package/src/deploy/adapters/node.ts +34 -0
  562. package/src/deploy/adapters/registry.ts +127 -0
  563. package/src/deploy/adapters/types.ts +92 -0
  564. package/src/deploy/adapters/vercel.ts +35 -0
  565. package/src/deploy/artifacts.ts +55 -27
  566. package/src/deploy/cloudflare-negotiation.ts +179 -100
  567. package/src/deploy/function-bundle.ts +18 -3
  568. package/src/deploy/headers.ts +124 -23
  569. package/src/deploy/node-headers.ts +198 -0
  570. package/src/deploy/platforms/cloudflare.ts +312 -0
  571. package/src/deploy/platforms/index.ts +67 -0
  572. package/src/deploy/platforms/netlify.ts +52 -0
  573. package/src/deploy/platforms/node.ts +40 -0
  574. package/src/deploy/platforms/paths.ts +42 -0
  575. package/src/deploy/platforms/static.ts +29 -0
  576. package/src/deploy/platforms/types.ts +112 -0
  577. package/src/deploy/platforms/vercel.ts +193 -0
  578. package/src/deploy/redirects.ts +30 -18
  579. package/src/deploy/robots.ts +3 -3
  580. package/src/deploy/rss.ts +2 -2
  581. package/src/deploy/sitemap.ts +2 -2
  582. package/src/deploy/vercel-negotiation.ts +2 -2
  583. package/src/eval/agents.ts +32 -1
  584. package/src/eval/findings.ts +19 -11
  585. package/src/eval/report.ts +10 -2
  586. package/src/markdown/external-links.ts +65 -0
  587. package/src/markdown/include.ts +45 -27
  588. package/src/markdown/index.ts +34 -9
  589. package/src/markdown/inline-code.ts +12 -6
  590. package/src/markdown/relative-links.ts +324 -0
  591. package/src/markdown/themes.ts +3 -3
  592. package/src/migrate/migrate.ts +149 -0
  593. package/src/openapi/parse.ts +64 -16
  594. package/src/openapi/proxy.ts +62 -10
  595. package/src/openapi/references.ts +147 -147
  596. package/src/openapi/render-mdx.ts +32 -10
  597. package/src/openapi/scalar.ts +15 -13
  598. package/src/openapi/sentence.ts +14 -0
  599. package/src/openapi/source.ts +37 -21
  600. package/src/openapi/spec-dependency-error.ts +15 -0
  601. package/src/reference/asyncapi.ts +83 -0
  602. package/src/reference/graphql.ts +89 -0
  603. package/src/reference/index.ts +40 -0
  604. package/src/reference/openapi.ts +83 -0
  605. package/src/reference/options.ts +201 -0
  606. package/src/reference/scalar.ts +136 -0
  607. package/src/reference/schema.ts +88 -0
  608. package/src/registry/eject.ts +109 -53
  609. package/src/search/adapters/algolia.ts +46 -0
  610. package/src/search/adapters/flexsearch.ts +29 -0
  611. package/src/search/adapters/index.ts +39 -0
  612. package/src/search/adapters/mixedbread.ts +39 -0
  613. package/src/search/adapters/orama-cloud.ts +51 -0
  614. package/src/search/adapters/orama.ts +24 -0
  615. package/src/search/adapters/pagefind.ts +27 -0
  616. package/src/search/adapters/registry.ts +131 -0
  617. package/src/search/adapters/types.ts +46 -0
  618. package/src/search/adapters/typesense.ts +57 -0
  619. package/src/search/build.ts +8 -4
  620. package/src/search/documents.ts +8 -2
  621. package/src/search/orama-index.ts +1 -1
  622. package/src/search/sync/algolia.ts +12 -11
  623. package/src/search/sync/index.ts +35 -20
  624. package/src/search/sync/orama-cloud.ts +12 -9
  625. package/src/search/sync/typesense.ts +15 -13
  626. package/src/sources/contentful.ts +63 -0
  627. package/src/sources/custom.ts +38 -0
  628. package/src/sources/filesystem.ts +51 -0
  629. package/src/sources/github-releases.ts +52 -0
  630. package/src/sources/index.ts +60 -0
  631. package/src/sources/mdx-remote.ts +76 -0
  632. package/src/sources/notion.ts +63 -0
  633. package/src/sources/obsidian.ts +38 -0
  634. package/src/sources/payload.ts +60 -0
  635. package/src/sources/registry.ts +182 -0
  636. package/src/sources/sanity.ts +66 -0
  637. package/src/sources/shared.ts +52 -0
  638. package/src/sources/strapi.ts +58 -0
  639. package/src/theme/entry.ts +24 -2
  640. package/src/translate/report.ts +40 -7
  641. package/src/upgrade/upgrade.ts +499 -0
  642. package/dist/cli/chunk-0qymqwzz.js +0 -164
  643. package/dist/cli/chunk-0qymqwzz.js.map +0 -15
  644. package/dist/cli/chunk-1jefwnfs.js.map +0 -48
  645. package/dist/cli/chunk-2mzebbbz.js +0 -69
  646. package/dist/cli/chunk-2z47ypj8.js.map +0 -11
  647. package/dist/cli/chunk-4x36ddpw.js.map +0 -11
  648. package/dist/cli/chunk-5093q3n7.js +0 -68
  649. package/dist/cli/chunk-5093q3n7.js.map +0 -10
  650. package/dist/cli/chunk-5qk08vmp.js.map +0 -11
  651. package/dist/cli/chunk-7s8hm3b6.js +0 -5347
  652. package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
  653. package/dist/cli/chunk-8cjtbafj.js.map +0 -13
  654. package/dist/cli/chunk-97r59kpr.js +0 -381
  655. package/dist/cli/chunk-97r59kpr.js.map +0 -12
  656. package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
  657. package/dist/cli/chunk-b27xqwn9.js.map +0 -10
  658. package/dist/cli/chunk-bf6bt1xt.js +0 -185
  659. package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
  660. package/dist/cli/chunk-cjtn640a.js.map +0 -10
  661. package/dist/cli/chunk-ct47dqpx.js.map +0 -11
  662. package/dist/cli/chunk-esphfr8p.js +0 -107
  663. package/dist/cli/chunk-esphfr8p.js.map +0 -11
  664. package/dist/cli/chunk-ex56aa81.js +0 -1016
  665. package/dist/cli/chunk-ex56aa81.js.map +0 -13
  666. package/dist/cli/chunk-garjf5z9.js +0 -30
  667. package/dist/cli/chunk-garjf5z9.js.map +0 -10
  668. package/dist/cli/chunk-js7saxwm.js +0 -1045
  669. package/dist/cli/chunk-js7saxwm.js.map +0 -22
  670. package/dist/cli/chunk-k79xp7av.js.map +0 -39
  671. package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
  672. package/dist/cli/chunk-q4rae3bg.js +0 -60
  673. package/dist/cli/chunk-q4rae3bg.js.map +0 -10
  674. package/dist/cli/chunk-rz9jmfhz.js +0 -108
  675. package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
  676. package/dist/cli/chunk-vh9w1sgp.js +0 -73
  677. package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
  678. package/dist/cli/chunk-vrfp10qk.js +0 -81
  679. package/dist/cli/chunk-vrfp10qk.js.map +0 -10
  680. package/dist/cli/chunk-yg63d42r.js.map +0 -34
  681. package/docs/advanced/api-reference.mdx +0 -240
  682. package/docs/configuration/ask-ai.mdx +0 -256
  683. package/docs/reference/cli.mdx +0 -197
  684. package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
  685. package/src/components/content/changelog-element.ts +0 -69
  686. package/src/search/providers.ts +0 -91
  687. /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-27g6wdth.js.map} +0 -0
  688. /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-ce574jw2.js.map} +0 -0
  689. /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-fxypxtvm.js.map} +0 -0
  690. /package/dist/cli/{chunk-nn13znc2.js.map → chunk-zxcczpyx.js.map} +0 -0
@@ -0,0 +1,87 @@
1
+ import type { ResolvedConfig, ResolvedI18nConfig, ResolvedVersionsConfig } from "./schema.ts";
2
+ import type { Diagnostic, PageRecord } from "./types.ts";
3
+ /** True when the project opts into i18n. */
4
+ export declare const i18nEnabled: (config: ResolvedConfig) => config is ResolvedConfig & {
5
+ i18n: ResolvedI18nConfig;
6
+ };
7
+ /** All configured locale codes, default first as authored. */
8
+ export declare const localeCodes: (i18n: ResolvedI18nConfig) => string[];
9
+ /** Text direction for a locale (`ltr` when unknown). */
10
+ export declare const localeDir: (code: string, i18n: ResolvedI18nConfig) => "ltr" | "rtl";
11
+ /**
12
+ * The locale a missing translation falls back to: `fallbackLocale` when set,
13
+ * the default locale when `fallbackLocale` is omitted, or `null` (disabled)
14
+ * when explicitly set to `null`.
15
+ */
16
+ export declare const resolveFallbackLocale: (i18n: ResolvedI18nConfig) => string | null;
17
+ /**
18
+ * The slice of the i18n settings URL routing reads. `ResolvedI18nConfig` and
19
+ * the `blume:data` runtime shape both satisfy it, so route helpers serve the
20
+ * Node-side graph and the rendered page alike.
21
+ */
22
+ export interface LocaleRouting {
23
+ defaultLocale: string;
24
+ hideDefaultLocalePrefix: boolean;
25
+ locales: {
26
+ code: string;
27
+ }[];
28
+ }
29
+ /** URL prefix for a locale: `""` for the hidden default, else `/<code>`. */
30
+ export declare const localePrefix: (code: string, i18n: LocaleRouting) => string;
31
+ /**
32
+ * Prefix a locale-agnostic route (e.g. `/guides/x` or `/`) with its locale.
33
+ * `/` becomes `/fr` (or stays `/` for the hidden default).
34
+ */
35
+ export declare const localizeRoute: (logicalRoute: string, code: string, i18n: LocaleRouting) => string;
36
+ /**
37
+ * Localize a configured link target the way header tabs are: a root-relative
38
+ * internal path (`/`, `/docs`) moves into `code`'s prefix, and anything else —
39
+ * an absolute URL, a fragment, a relative path — passes through. `//host/path`
40
+ * is protocol-relative, an external URL that happens to start with a slash, so
41
+ * it must not pick up a locale prefix (`withBasePath` draws the same line).
42
+ * With no i18n (`null`) the path is returned as-is.
43
+ */
44
+ export declare const localizeInternalPath: (path: string, code: string, i18n: LocaleRouting | null) => string;
45
+ /**
46
+ * Detect a leading non-default locale directory in a path's segments. The
47
+ * default locale lives at the content root, so only non-default codes are
48
+ * matched as a leading segment. Returns the resolved locale and the remaining
49
+ * (locale-stripped) segments.
50
+ */
51
+ export declare const detectLocale: (parts: string[], i18n: ResolvedI18nConfig) => {
52
+ locale: string;
53
+ rest: string[];
54
+ };
55
+ /**
56
+ * Resolve where a content file lives across locales, by parser:
57
+ * - `dir`: a leading locale directory (`fr/page.mdx`)
58
+ * - `dot`: a filename suffix (`page.fr.mdx`)
59
+ *
60
+ * A `.$.` infix (e.g. `changelog.$.mdx`) marks a shared, locale-agnostic file
61
+ * that is materialized into every configured locale. Returns the locale-stripped
62
+ * path (used for nav grouping) and the locale codes the file maps to (one for a
63
+ * normal file, all locales for a shared one).
64
+ */
65
+ export declare const localePlacement: (rel: string, ext: string, i18n: ResolvedI18nConfig) => {
66
+ locales: string[];
67
+ navPath: string;
68
+ };
69
+ /**
70
+ * The inverse of {@link localePlacement}: where a default-locale file's
71
+ * translation into `locale` lives, by parser:
72
+ * - `dir`: a leading locale directory (`guides/x.mdx` → `fr/guides/x.mdx`)
73
+ * - `dot`: a filename suffix (`guides/x.mdx` → `guides/x.fr.mdx`)
74
+ *
75
+ * Under `dot`, a source authored with an explicit default-locale suffix
76
+ * (`x.en.mdx`) swaps it for the target's (`x.fr.mdx`) — same case-insensitive
77
+ * last-dot-inside-filename logic as `localePlacement`, so both spellings of a
78
+ * default-locale file resolve to one canonical target.
79
+ */
80
+ export declare const localeTargetPath: (rel: string, ext: string, locale: string, i18n: ResolvedI18nConfig) => string;
81
+ /**
82
+ * Warn about top-level content folders that look like a locale (a code Blume
83
+ * recognizes) but aren't declared in `i18n.locales`. Without this they're
84
+ * silently treated as default-locale content under a `/<code>/…` route, which
85
+ * is almost never intended — usually a translation that wasn't registered.
86
+ */
87
+ export declare const i18nDiagnostics: (pages: PageRecord[], i18n: ResolvedI18nConfig, versions?: ResolvedVersionsConfig) => Diagnostic[];
@@ -0,0 +1,138 @@
1
+ import type { Diagnostic } from "./types.ts";
2
+ /**
3
+ * Cheap pre-filter so include-free content (the overwhelmingly common case)
4
+ * skips the line scan and file reads entirely.
5
+ */
6
+ export declare const hasIncludeStatements: (text: string) => boolean;
7
+ /** The attributes an include statement supports. */
8
+ export interface IncludeAttributes {
9
+ /** Force code-block mode with this language (even for `.md`/`.mdx`). */
10
+ lang?: string;
11
+ /** Fence meta string in code-block mode (e.g. `title="lib.ts"`). */
12
+ meta?: string;
13
+ }
14
+ /** A parsed include statement. */
15
+ export interface IncludeStatement {
16
+ target: string;
17
+ attributes: IncludeAttributes;
18
+ }
19
+ /**
20
+ * Parse one trimmed line as an include statement, or `null` when it isn't
21
+ * one. Only `lang` and `meta` are meaningful; unknown attributes parse and
22
+ * are ignored so a future attribute degrades gracefully on older versions.
23
+ */
24
+ export declare const parseIncludeStatement: (line: string) => IncludeStatement | null;
25
+ /**
26
+ * Parse one raw `.md` source line as an include statement, applying the
27
+ * line-level rules the renderer sees: a line indented like code (4 spaces or
28
+ * a tab) is an indented code block, shown literally rather than spliced. The
29
+ * render plugin's `.md` visitors share this so the two halves can't drift.
30
+ */
31
+ export declare const parseIncludeLine: (line: string) => IncludeStatement | null;
32
+ /** What a line that may open an include statement turned out to be. */
33
+ export type IncludeMatch =
34
+ /** A statement, ending on line `end` (the same line when it isn't wrapped). */
35
+ {
36
+ kind: "statement";
37
+ end: number;
38
+ statement: IncludeStatement;
39
+ }
40
+ /** A line that opens `<include` but no statement Blume can read. */
41
+ | {
42
+ kind: "malformed";
43
+ }
44
+ /** Not an include statement at all. */
45
+ | {
46
+ kind: "none";
47
+ };
48
+ /**
49
+ * Read the include statement opening at `lines[index]`, if any. A statement
50
+ * sits on a line of its own, or — as a formatter wraps a long one — runs from a
51
+ * line opening `<include` to the next line closing `</include>`, with no blank
52
+ * line between (the path on its own line, attributes on one line or several):
53
+ *
54
+ * ```mdx
55
+ * <include lang="ts" meta='title="config.ts"'>
56
+ * ./examples/config.ts
57
+ * </include>
58
+ * ```
59
+ *
60
+ * The lines' trimmed text joins into the one-line form, so both parse by the
61
+ * same rules. In `.md` a first line indented like code is a code block, never
62
+ * a statement. A line that opens `<include` but doesn't close into a
63
+ * statement is `malformed`, so the author hears about it instead of the page
64
+ * rendering the raw tag. Shared by the string-level scanner and the render
65
+ * plugin so they splice exactly the same statements.
66
+ */
67
+ export declare const matchIncludeStatement: (lines: readonly string[], index: number, format: "md" | "mdx") => IncludeMatch;
68
+ /**
69
+ * The warning for a line that opens `<include` but isn't a statement Blume can
70
+ * read — it renders as written, so a silent miss would ship a raw tag.
71
+ */
72
+ export declare const malformedIncludeDiagnostic: (file: string, line: number) => Diagnostic;
73
+ /**
74
+ * Advance the HTML comment state across one `.md` line — the render plugin's
75
+ * half of the comment rule (a statement inside `<!-- -->` never splices),
76
+ * sharing the same tracking the string-level scanner uses.
77
+ */
78
+ export declare const advanceHtmlCommentState: (line: string, inComment: boolean) => boolean;
79
+ /** Provenance of one line of expanded output. */
80
+ export interface LineOrigin {
81
+ /** Absolute path of the file the line came from. */
82
+ file: string;
83
+ /** 1-based line number within that file's raw source. */
84
+ line: number;
85
+ }
86
+ /** The result of expanding a document's include statements. */
87
+ export interface IncludeExpansion {
88
+ /** The document with every include statement replaced by its content. */
89
+ text: string;
90
+ /** Per output line: the source file and raw-file line it came from. */
91
+ origins: LineOrigin[];
92
+ /** Absolute paths of every file included, transitively. */
93
+ includes: string[];
94
+ /** Structured errors (missing target, cycle, escape); statements with an
95
+ * error stay verbatim in the output. */
96
+ errors: Diagnostic[];
97
+ }
98
+ /**
99
+ * Expand a document's include statements at the string level. `lineOffset`
100
+ * shifts the includer's own recorded origin lines — pass the stripped front
101
+ * matter block's height when `body` is the stripped text, so origins point at
102
+ * real file lines. Never throws: unresolvable statements stay verbatim and
103
+ * surface through `errors`.
104
+ */
105
+ export declare const expandIncludes: (body: string, options: {
106
+ /** Absolute path of the file being expanded. */
107
+ sourcePath: string;
108
+ /** The owning source's content root; bounds include resolution. */
109
+ contentRoot?: string;
110
+ /** Raw-file line of `body`'s first line, minus one (default `0`). */
111
+ lineOffset?: number;
112
+ }) => Promise<IncludeExpansion>;
113
+ /**
114
+ * Resolve one include statement to its fully-expanded markdown text — the
115
+ * render plugin's entry point (it finds the statements as AST nodes and only
116
+ * needs each target spliced). Shares every semantic with
117
+ * {@link expandIncludes}.
118
+ */
119
+ export declare const expandIncludeTarget: (statement: IncludeStatement, options: {
120
+ sourcePath: string;
121
+ contentRoot?: string;
122
+ }) => Promise<{
123
+ text: string;
124
+ errors: Diagnostic[];
125
+ } | {
126
+ error: Diagnostic;
127
+ }>;
128
+ /**
129
+ * Invert the scan's page → included-partials edges into the partial →
130
+ * including-pages map `includeHmrPlugin` reads (`generated/includes.json`),
131
+ * so editing a partial invalidates every page that splices it. Localized
132
+ * pages share a source path, hence the dedupe. Shared by `generateRuntime`
133
+ * and `eject`, whose configs both wire the plugin at the same path.
134
+ */
135
+ export declare const buildIncludeGraph: (pages: {
136
+ sourcePath?: string;
137
+ includes?: string[];
138
+ }[]) => Record<string, string[]>;
@@ -0,0 +1,47 @@
1
+ import type { Diagnostic } from "./types.ts";
2
+ /** Normalized form of the `lastModified` config. */
3
+ export interface ResolvedLastModified {
4
+ enabled: boolean;
5
+ source: "git" | "frontmatter";
6
+ }
7
+ /** Normalize the `lastModified` config (`false | "git" | "frontmatter"`) into `{ enabled, source }`. */
8
+ export declare const resolveLastModifiedConfig: (value: false | "git" | "frontmatter") => ResolvedLastModified;
9
+ /**
10
+ * Parse `git log --format=%x00%cI --name-only` output into a map of
11
+ * repo-root-relative path → most recent committer ISO date. Each commit emits a
12
+ * NUL-prefixed date line followed by the paths it touched; since git logs
13
+ * newest-first, the first date seen for a path wins. Blank lines are ignored.
14
+ */
15
+ export declare const parseGitLog: (output: string) => Map<string, string>;
16
+ /**
17
+ * The toplevel of the repository containing `root`, or null when git is
18
+ * unavailable or the project isn't a repo. Callers use it to decide which
19
+ * content roots a `git log` pathspec can cover at all — a root outside the
20
+ * repository would fail the log outright and can never yield dates.
21
+ */
22
+ export declare const gitRepositoryRoot: (root: string) => string | null;
23
+ /**
24
+ * Resolve each source file's last-modified date from git history, keyed by
25
+ * absolute source path. Runs a single `git log` over the given content roots
26
+ * (each local source's own root, which may diverge from `content.root`)
27
+ * and maps repo-root-relative paths back to the given absolute paths
28
+ * (monorepo-safe via `rev-parse --show-toplevel`). Returns an empty map if git
29
+ * is unavailable or the project isn't a repo — the feature then simply shows
30
+ * no dates.
31
+ */
32
+ export declare const gitLastModifiedTimes: (root: string, contentRoots: string[], sourcePaths: string[], repositoryRoot?: string | null) => Map<string, string>;
33
+ /**
34
+ * Whether the repository containing `root` is a shallow clone. Returns false
35
+ * when git is unavailable or the project isn't a repo — those cases already
36
+ * yield no dates at all, and the shallow warning would only mislead.
37
+ */
38
+ export declare const isShallowGitRepository: (root: string) => boolean;
39
+ /**
40
+ * A warning for git-derived dates silently missing because the build ran in a
41
+ * shallow clone — the default on Vercel and `actions/checkout`, where `git log`
42
+ * only sees the last few commits, so most pages get no date and the sitemap's
43
+ * `<lastmod>` / "Last updated" stamps quietly disappear in production while
44
+ * working locally. Empty when every page got a date or the clone isn't
45
+ * shallow.
46
+ */
47
+ export declare const lastModifiedShallowWarning: (root: string, undatedCount: number) => Diagnostic[];
@@ -0,0 +1,95 @@
1
+ import type { LocaleRouting } from "./i18n.ts";
2
+ import type { ContentGraph, Diagnostic, PageRecord } from "./types.ts";
3
+ /** The page a relative link is written on, as the resolver sees it. */
4
+ export interface RelativeLinkBase {
5
+ /** Whether the page is its folder's index (its route is its directory). */
6
+ isIndex: boolean;
7
+ /** The page's own route, base path included. */
8
+ route: string;
9
+ }
10
+ /**
11
+ * Where a relative page link written on `from` lands: a root-relative route
12
+ * with the authored `?query#hash` kept — or `undefined` when `href` isn't a
13
+ * relative page link (a root-relative path, a bare `#fragment` or `?query`,
14
+ * an external URL or other scheme, or a relative asset like `./diagram.png`).
15
+ *
16
+ * The one reading `blume validate` checks links against and the Markdown
17
+ * pipeline rewrites them to, so the built `href`, the link check, and the
18
+ * browser agree. Relative paths resolve file-style: a leaf page's links
19
+ * resolve against its parent directory, while an index page's route already is
20
+ * its directory — `./install` on `guides/index.mdx` (`/guides`) lands on
21
+ * `/guides/install`, where a browser reading the slashless URL would go to
22
+ * `/install`. A `.md`/`.mdx` target is a file link: `resolveFile` maps its
23
+ * decoded path, relative to the linking file, to the route that file
24
+ * publishes at, so a target with its own `slug` or an ordering prefix still
25
+ * lands on its page instead of on its raw Markdown source. Without
26
+ * `resolveFile`, or for a file it doesn't know, the target resolves
27
+ * route-relative with the extension dropped.
28
+ *
29
+ * Any other extension (`./diagram.png`) marks an asset, except where a page
30
+ * publishes at the resolved path: `hasRoute` answers that, so a dotted page
31
+ * name (`./node.js` for `node.js.mdx`, `./v1.2`) is still a page link.
32
+ */
33
+ export declare const resolveRelativeHref: (href: string, from: RelativeLinkBase, resolveFile?: (path: string) => string | undefined, hasRoute?: (route: string) => boolean) => string | undefined;
34
+ /**
35
+ * Whether a content file is its folder's index, from its name as written on
36
+ * disk: `index.md(x)` after an ordering prefix, optionally carrying one of
37
+ * `localeTokens` before the extension (`index.fr.mdx` under the `dot` locale
38
+ * parser, `index.$.mdx` for a file shared by every locale).
39
+ */
40
+ export declare const isIndexFileName: (name: string, localeTokens?: readonly string[]) => boolean;
41
+ /** Where content files publish, for resolving file links (`./setup.mdx`). */
42
+ export interface FileRouteIndex {
43
+ /**
44
+ * Absolute source path → the route that file publishes at. A file shared by
45
+ * every locale publishes once per locale; the default locale's route stands
46
+ * for it (a link from a localized page moves into that locale afterwards,
47
+ * exactly as the rendered link does). Fallback copies render another
48
+ * locale's file, so they never stand for it.
49
+ */
50
+ bySource: Map<string, string>;
51
+ /**
52
+ * A default-locale page's locale-stripped path (`navPath`) → its route. A
53
+ * page in a locale folder that links a sibling not translated yet
54
+ * (`fr/guides/setup.mdx` missing) means the default tree's file
55
+ * (`guides/setup.mdx`), whose route — its own `slug` included — then moves
56
+ * into the reader's locale onto the fallback copy.
57
+ */
58
+ byDefaultNavPath: Map<string, string>;
59
+ }
60
+ /** The linking side of a file link: where the page's source lives. */
61
+ export interface FileLinkBase {
62
+ navPath: string;
63
+ sourcePath: string;
64
+ }
65
+ export declare const buildFileRouteIndex: (pages: readonly PageRecord[], i18n: LocaleRouting | null) => FileRouteIndex;
66
+ /**
67
+ * The route a file link written on `from` lands on: the linked file's own
68
+ * route, or — when a locale folder doesn't have that file yet — the default
69
+ * tree's file at the same place.
70
+ */
71
+ export declare const routeOfLinkedFile: (index: FileRouteIndex, from: FileLinkBase, path: string) => string | undefined;
72
+ /**
73
+ * Validate every link discovered in the content graph: internal page links and
74
+ * anchors against the route map, asset links against the public dir, and
75
+ * (opt-in) external links over the network.
76
+ */
77
+ export declare const validateLinks: (graph: ContentGraph, options: {
78
+ /** Site-wide route mount point (`""` or `/seg`); routes and redirects carry it. */
79
+ basePath?: string;
80
+ /**
81
+ * Servable routes the graph can't know: custom `.astro` pages and generated
82
+ * routes (e.g. the `/changelog` index). Mounted outside `basePath` (they're
83
+ * injected at their pattern), so they are *not* based here — mirroring the
84
+ * full-route-set resolution in `nav-diagnostics.ts`/`generateRuntime`.
85
+ */
86
+ extraRoutes?: string[];
87
+ /** Locale routing when i18n is on; links then resolve into the page's locale. */
88
+ i18n?: LocaleRouting | null;
89
+ publicDir: string | null;
90
+ checkExternal?: boolean;
91
+ /** Configured redirects; their `from` paths count as valid link targets. */
92
+ redirects?: {
93
+ from: string;
94
+ }[];
95
+ }) => Promise<Diagnostic[]>;
@@ -0,0 +1,60 @@
1
+ import type { LocaleRouting } from "./i18n.ts";
2
+ /**
3
+ * Locale-aware resolution of content links.
4
+ *
5
+ * Authors write internal links as if mounted at the default locale's root
6
+ * (`[x](/guide)`, `<Card href="/guide">`), and translated pages are usually
7
+ * copies of the source with the same links — so read on `/fr/…`, a link would
8
+ * otherwise drop the reader back into the default language. These helpers move
9
+ * such a link to the reader's locale (`/fr/guide`) when that route is served
10
+ * (a real translation or a materialized fallback page), and leave it alone
11
+ * otherwise: an explicit cross-locale link (`/de/guide`), a custom `.astro`
12
+ * page or generated route that has no per-locale variant, or a missing
13
+ * translation on a site with fallbacks disabled all keep their authored
14
+ * target rather than pointing at a 404.
15
+ *
16
+ * The rewrite runs at render time (`components/layout/LocaleLinks.astro`)
17
+ * because content is compiled once per file but served per route: a fallback
18
+ * route renders the fallback locale's file under the missing locale's URL, and
19
+ * a shared `page.$.mdx` renders under every locale. The link checker applies
20
+ * the same resolution so anchors are validated against the page a reader lands
21
+ * on.
22
+ */
23
+ /** A route set, as the runtime (`Set`) or the checker (a predicate) sees it. */
24
+ export interface RouteSet {
25
+ has: (route: string) => boolean;
26
+ }
27
+ export interface LocalizeLinkOptions {
28
+ /** Site-wide route mount point (`""` or `/seg`); routes carry it. */
29
+ basePath: string;
30
+ i18n: LocaleRouting;
31
+ /** Locale of the page the link is rendered on. */
32
+ locale: string;
33
+ /** Every served route, base-prefixed like `path` (no `deployment.base`). */
34
+ routes: RouteSet;
35
+ }
36
+ /**
37
+ * Move a base-prefixed, fragment-less internal path into `locale` when that
38
+ * route is served, else return it unchanged. Idempotent: a path already under
39
+ * any configured locale prefix is never re-prefixed.
40
+ */
41
+ export declare const localizeLinkPath: (path: string, options: LocalizeLinkOptions) => string;
42
+ export interface LocalizeHrefOptions extends LocalizeLinkOptions {
43
+ /** `deployment.base` (Astro's `BASE_URL`), layered over `basePath` in hrefs. */
44
+ deployBase: string;
45
+ }
46
+ /**
47
+ * Localize a rendered `href`: external URLs, relative paths, bare fragments, and
48
+ * asset links pass through; a root-relative page link keeps its `?query` and
49
+ * `#fragment` and its `deployment.base` layer around the localized path.
50
+ */
51
+ export declare const localizeHref: (href: string, options: LocalizeHrefOptions) => string;
52
+ /**
53
+ * Rewrite every `<a href>` in rendered content HTML through `rewrite`. Code
54
+ * blocks are HTML-escaped (`&lt;a`), and island props live on
55
+ * `<astro-island>`, so neither is touched.
56
+ */
57
+ export declare const localizeContentLinks: (html: string, rewrite: (href: string) => string) => string;
58
+ export declare const routeSetFor: (routes: readonly {
59
+ path: string;
60
+ }[]) => Set<string>;
@@ -0,0 +1,17 @@
1
+ import type { ResolvedConfig } from "./schema.ts";
2
+ import type { BlumeManifest, ContentGraph, PageRecord, ProjectContext } from "./types.ts";
3
+ /** The current manifest schema version. */
4
+ export declare const MANIFEST_VERSION = 1;
5
+ /**
6
+ * Whether a page may be indexed on its own merits — not author-excluded and not
7
+ * hidden (unless hidden pages are opted in). This is independent of whether the
8
+ * site search provider is enabled, so features like the MCP server can index
9
+ * docs even when on-page search is off.
10
+ */
11
+ export declare const contentIndexable: (page: PageRecord, config: ResolvedConfig) => boolean;
12
+ /** Build the runtime manifest that bridges core and the generated Astro app. */
13
+ export declare const buildManifest: (options: {
14
+ context: ProjectContext;
15
+ config: ResolvedConfig;
16
+ graph: ContentGraph;
17
+ }) => BlumeManifest;
@@ -0,0 +1,38 @@
1
+ import type { FolderMeta } from "./schema.ts";
2
+ import type { Diagnostic } from "./types.ts";
3
+ /** A filesystem content source to scan for folder meta: its on-disk root and
4
+ * optional route prefix. The prefix is folded into every key so meta lines up
5
+ * with the sidebar group path, which carries the same prefix. */
6
+ export interface FolderMetaSource {
7
+ root: string;
8
+ prefix?: string;
9
+ }
10
+ /**
11
+ * Discover `meta.{ts,js,mjs}` files across the given filesystem sources. Keys are
12
+ * the source's route prefix joined with the directory relative to that source's
13
+ * root (`""`/the prefix itself for a source's root directory), so meta matches
14
+ * the prefixed sidebar group path. A bare string is shorthand for a single,
15
+ * unprefixed source (the default project layout). `meta.$.*` files are returned
16
+ * in `shared` — folder meta that applies to that directory in every locale (a
17
+ * locale-specific `meta.*` overrides it). Each file default-exports an object or
18
+ * a (sync/async) function returning one.
19
+ *
20
+ * `localeDirs` names the top-level locale directories of a `dir`-parser i18n
21
+ * project. Navigation looks locale meta up as `locale/<group path>` where the
22
+ * group path starts with the source prefix, so a locale directory found at a
23
+ * source root is hoisted in front of the prefix (`docs/fr/guides/meta.ts` keys
24
+ * to `fr/docs/guides`, not `docs/fr/guides`).
25
+ *
26
+ * `versionDirs` names the archived-version snapshot directories, which sit
27
+ * outermost on disk — a locale directory inside a snapshot is one level deeper.
28
+ * Both are hoisted, version first (`v1.0/fr/guides/meta.ts` keys to
29
+ * `v1.0/fr/<prefix>/guides`), matching navigation's version-aware meta prefix.
30
+ */
31
+ export declare const discoverFolderMeta: (sources: string | FolderMetaSource[], options?: {
32
+ localeDirs?: readonly string[];
33
+ versionDirs?: readonly string[];
34
+ }) => Promise<{
35
+ meta: Map<string, FolderMeta>;
36
+ shared: Map<string, FolderMeta>;
37
+ diagnostics: Diagnostic[];
38
+ }>;
@@ -0,0 +1,26 @@
1
+ import type { Diagnostic, Navigation, PageRecord } from "./types.ts";
2
+ /** Warn about icon names that aren't in Blume's set (skipping image/SVG icons). */
3
+ export declare const validateNavIcons: (navigation: Navigation) => Diagnostic[];
4
+ /**
5
+ * Warn about unknown icons on curated `search.popular` links. Same accepted
6
+ * input shapes as nav icons — resolved to markup on the server for the island.
7
+ */
8
+ export declare const validateSearchPopularIcons: (popular: {
9
+ icon?: string;
10
+ label: string;
11
+ }[]) => Diagnostic[];
12
+ /**
13
+ * Warn when a config-linked tab/selector target has no matching page. `routes`
14
+ * must be the full set of servable routes — content, custom `.astro` pages, and
15
+ * generated routes — so this runs where all three are known (`generateRuntime`),
16
+ * not in the content-only graph build.
17
+ */
18
+ export declare const validateNavTargets: (navigation: Navigation, routes: Set<string>) => Diagnostic[];
19
+ /**
20
+ * Structural navigation diagnostics that need only the built navigation +
21
+ * content pages: duplicate sidebar labels at a level, and hidden pages that
22
+ * still surface in the sidebar (so pagination lands on them). Target existence
23
+ * is checked separately by {@link validateNavTargets}, which needs the full
24
+ * route set.
25
+ */
26
+ export declare const validateNavStructure: (navigation: Navigation, pages: PageRecord[]) => Diagnostic[];
@@ -66,4 +66,10 @@ export declare const buildNavigation: (pages: PageRecord[], options: {
66
66
  * into in place; omit to discard.
67
67
  */
68
68
  diagnostics?: Diagnostic[];
69
+ /**
70
+ * Routes served outside the content tree that a tab `path` may name
71
+ * directly (the generated changelog index), so the tab links there instead
72
+ * of falling back to its section's first page.
73
+ */
74
+ extraRoutes?: ReadonlySet<string>;
69
75
  }) => Navigation;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Node's own `require`, for the SDKs and heavy modules Blume loads only when a
3
+ * feature needs them. Resolution starts from this file, inside the installed
4
+ * package, exactly like the `import()` it stands in for, and Node 22.12+ loads
5
+ * ES modules through it too.
6
+ *
7
+ * Never `import()` in their place. When Node can't import the generated Astro
8
+ * config itself — it refuses to strip types from TypeScript under
9
+ * `node_modules`, which is where an installed Blume's runtime source lives —
10
+ * Astro evaluates the config, and every Blume module it reaches, in a Vite
11
+ * module runner that it closes as soon as the config has loaded. A dynamic
12
+ * `import()` in one of those modules resolves through that runner, so a call
13
+ * made any later (an `astro:build:done` hook, a Markdown plugin) throws "Vite
14
+ * module runner has been closed". `require` is Node's, so it works however the
15
+ * calling module was evaluated. The repo itself never sees the failure: its
16
+ * workspace link puts Blume outside `node_modules`, so Node imports the config
17
+ * natively.
18
+ */
19
+ export declare const nodeRequire: NodeJS.Require;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Derive a valid npm package name from a directory name, falling back to
3
+ * `docs` when nothing usable remains.
4
+ */
5
+ export declare const toPackageName: (raw: string) => string;
6
+ /**
7
+ * A minimal, runnable `package.json` body for a Blume project: the `blume`
8
+ * dependency pinned to the installed version plus `dev`/`build`/`doctor`
9
+ * scripts, so `npm install && npm run dev` works immediately. Shared by
10
+ * `blume init` and the migrators, which scaffold one when a project has none.
11
+ * `extraDeps` adds source SDKs (e.g. `@notionhq/client`) beside `blume`.
12
+ */
13
+ export declare const blumePackageJson: (name: string, extraDeps?: Record<string, string>) => string;
@@ -0,0 +1,42 @@
1
+ import type { DiagnosticSeverity } from "./types.ts";
2
+ export declare const PROBE_CONCURRENCY = 8;
3
+ export declare const PROBE_TIMEOUT_MS = 10000;
4
+ /** The outcome of a single HTTP probe, with failures normalized rather than thrown. */
5
+ export interface ProbeResult {
6
+ ok: boolean;
7
+ status?: number;
8
+ timedOut?: boolean;
9
+ error?: string;
10
+ /** Whether the request was redirected before landing on `status`. */
11
+ redirected?: boolean;
12
+ /** The URL finally landed on, after following redirects. */
13
+ finalUrl?: string;
14
+ /** `Content-Encoding` of the response, when the server set one. */
15
+ encoding?: string | null;
16
+ /** Wall-clock milliseconds for the request. */
17
+ ms?: number;
18
+ /** `X-Robots-Tag` of the response, when the server set one. */
19
+ robotsTag?: string | null;
20
+ }
21
+ /**
22
+ * Probe a single URL: HEAD first, falling back to GET.
23
+ *
24
+ * Plenty of servers reject HEAD outright (405/501) or drop the connection, so a
25
+ * HEAD-only probe would report healthy pages as dead.
26
+ */
27
+ export declare const probe: (url: string, options?: {
28
+ timeoutMs?: number;
29
+ }) => Promise<ProbeResult>;
30
+ /** Grade a probe result into a severity + detail, or null when the URL is fine. */
31
+ export declare const gradeExternal: (result: ProbeResult) => {
32
+ severity: DiagnosticSeverity;
33
+ detail: string;
34
+ } | null;
35
+ /**
36
+ * Probe many URLs with bounded concurrency, deduplicating first. Returns a map
37
+ * from URL to its result — the caller decides what each one means.
38
+ */
39
+ export declare const probeAll: (urls: readonly string[], options?: {
40
+ concurrency?: number;
41
+ timeoutMs?: number;
42
+ }) => Promise<Map<string, ProbeResult>>;
@@ -0,0 +1,51 @@
1
+ import type { ResolvedConfig } from "./schema.ts";
2
+ import type { ContentSource } from "./sources/types.ts";
3
+ import type { BlumeManifest, ContentGraph, Diagnostic, ExampleLookup, ProjectContext } from "./types.ts";
4
+ /** Build mode: drafts are kept in `dev` and dropped in `build`. */
5
+ export type BuildMode = "dev" | "build";
6
+ /** CLI-supplied overrides applied over the loaded config (see `scanProject`). */
7
+ export interface ConfigOverrides {
8
+ /** Override `content.root` (`blume dev --content-dir`). */
9
+ contentRoot?: string;
10
+ }
11
+ /**
12
+ * Whether `path` sits at or under `dir`. A relative result that is itself
13
+ * absolute means a different drive root on Windows, which is outside too.
14
+ */
15
+ export declare const isWithin: (dir: string, path: string) => boolean;
16
+ /** Everything Blume knows about a project after a full scan. */
17
+ export interface BlumeProject {
18
+ mode: BuildMode;
19
+ context: ProjectContext;
20
+ config: ResolvedConfig;
21
+ graph: ContentGraph;
22
+ manifest: BlumeManifest;
23
+ diagnostics: Diagnostic[];
24
+ /** Entries excluded from the graph because their frontmatter failed validation. */
25
+ droppedPages: number;
26
+ /** The instantiated content sources, for lazy entry reads (search/AI/raw). */
27
+ sources: ContentSource[];
28
+ /**
29
+ * Whether the config file set `theme.fonts` itself (see
30
+ * {@link ConfigLoadResult.themeFontsConfigured}); gates OG font derivation.
31
+ */
32
+ themeFontsConfigured: boolean;
33
+ /**
34
+ * Discovered `examples/` sources keyed by `<Component path>`, attached by the
35
+ * runtime/eject layer after {@link scanProject} (example discovery is an Astro
36
+ * concern, so core doesn't run it). Undefined until then; the agent-facing
37
+ * Markdown downleveler reads it to turn `<Component path="…" />` into the
38
+ * example's source. Empty when the project has no examples.
39
+ */
40
+ examples?: ExampleLookup;
41
+ }
42
+ export declare const scanProject: (root: string, options?: {
43
+ devServerUrl?: string;
44
+ mode?: BuildMode;
45
+ preview?: boolean;
46
+ refresh?: boolean;
47
+ /** CLI overrides applied over the loaded config (e.g. `--output`). */
48
+ overrides?: ConfigOverrides;
49
+ /** Relocate the generated runtime (e.g. `.blume-verify` for isolation). */
50
+ runtimeDir?: string;
51
+ }) => Promise<BlumeProject>;