blume 1.7.3 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (673) hide show
  1. package/AGENTS.md +19 -0
  2. package/CHANGELOG.md +217 -0
  3. package/README.md +34 -21
  4. package/dist/cli/chunk-11j0384y.js +148 -0
  5. package/dist/cli/chunk-11j0384y.js.map +10 -0
  6. package/dist/cli/{chunk-rqy0s5wh.js → chunk-1w8dp3qb.js} +17 -16
  7. package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-1w8dp3qb.js.map} +3 -3
  8. package/dist/cli/chunk-2q1dwty4.js +75 -0
  9. package/dist/cli/chunk-2q1dwty4.js.map +11 -0
  10. package/dist/cli/chunk-41za066z.js +122 -0
  11. package/dist/cli/chunk-41za066z.js.map +11 -0
  12. package/dist/cli/chunk-5a2z0198.js +133 -0
  13. package/dist/cli/chunk-5a2z0198.js.map +10 -0
  14. package/dist/cli/{chunk-5g0w1e2c.js → chunk-6k8vp3ta.js} +25 -13
  15. package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-6k8vp3ta.js.map} +4 -4
  16. package/dist/cli/{chunk-5qk08vmp.js → chunk-79njf86q.js} +133 -54
  17. package/dist/cli/chunk-79njf86q.js.map +11 -0
  18. package/dist/cli/{chunk-e7f42gdj.js → chunk-7ez8ny0t.js} +2 -2
  19. package/dist/cli/{chunk-nn13znc2.js → chunk-88cpgt6h.js} +1 -1
  20. package/dist/cli/chunk-a9kptbw5.js +361 -0
  21. package/dist/cli/chunk-a9kptbw5.js.map +14 -0
  22. package/dist/cli/chunk-abh8yjkn.js +31 -0
  23. package/dist/cli/chunk-abh8yjkn.js.map +10 -0
  24. package/dist/cli/chunk-b5aj94ah.js +91 -0
  25. package/dist/cli/chunk-b5aj94ah.js.map +10 -0
  26. package/dist/cli/{chunk-b27xqwn9.js → chunk-bctazmbk.js} +9 -5
  27. package/dist/cli/chunk-bctazmbk.js.map +10 -0
  28. package/dist/cli/chunk-beat36xx.js +279 -0
  29. package/dist/cli/chunk-beat36xx.js.map +10 -0
  30. package/dist/cli/chunk-bnbmcwfb.js +145 -0
  31. package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
  32. package/dist/cli/{chunk-0xjyb285.js → chunk-bw22s759.js} +15 -5
  33. package/dist/cli/{chunk-0xjyb285.js.map → chunk-bw22s759.js.map} +4 -4
  34. package/dist/cli/chunk-by2290sx.js +39 -0
  35. package/dist/cli/chunk-by2290sx.js.map +10 -0
  36. package/dist/cli/chunk-d1tadaw7.js +79 -0
  37. package/dist/cli/chunk-d1tadaw7.js.map +10 -0
  38. package/dist/cli/{chunk-ahnw3kxw.js → chunk-d80hr03s.js} +24 -19
  39. package/dist/cli/chunk-d80hr03s.js.map +15 -0
  40. package/dist/cli/chunk-ernrthtr.js +97 -0
  41. package/dist/cli/chunk-ernrthtr.js.map +10 -0
  42. package/dist/cli/chunk-f2972sbt.js +374 -0
  43. package/dist/cli/chunk-f2972sbt.js.map +10 -0
  44. package/dist/cli/{chunk-vacwm2hv.js → chunk-f7t03s3g.js} +2 -2
  45. package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
  46. package/dist/cli/chunk-fa25z98p.js.map +11 -0
  47. package/dist/cli/{chunk-cjtn640a.js → chunk-fh5hj5jt.js} +43 -20
  48. package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
  49. package/dist/cli/{chunk-yg63d42r.js → chunk-j8mw0za6.js} +86 -57
  50. package/dist/cli/chunk-j8mw0za6.js.map +35 -0
  51. package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
  52. package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
  53. package/dist/cli/{chunk-ps4m1xh4.js → chunk-mnqj32sj.js} +505 -542
  54. package/dist/cli/chunk-mnqj32sj.js.map +12 -0
  55. package/dist/cli/{chunk-8cjtbafj.js → chunk-mwt1k8n7.js} +100 -374
  56. package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
  57. package/dist/cli/chunk-nk3ts2xk.js +51 -0
  58. package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
  59. package/dist/cli/{chunk-3r45185y.js → chunk-pat2zzwc.js} +9 -11
  60. package/dist/cli/{chunk-3r45185y.js.map → chunk-pat2zzwc.js.map} +2 -2
  61. package/dist/cli/chunk-pnnvybbk.js +176 -0
  62. package/dist/cli/chunk-pnnvybbk.js.map +11 -0
  63. package/dist/cli/{chunk-4x36ddpw.js → chunk-sqn5t4q0.js} +81 -87
  64. package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
  65. package/dist/cli/{chunk-bvwwhd84.js → chunk-tzne8qfq.js} +15 -15
  66. package/dist/cli/{chunk-bvwwhd84.js.map → chunk-tzne8qfq.js.map} +1 -1
  67. package/dist/cli/chunk-xaz13gwg.js +12449 -0
  68. package/dist/cli/chunk-xaz13gwg.js.map +182 -0
  69. package/dist/cli/chunk-y3e45rc8.js +102 -0
  70. package/dist/cli/chunk-y3e45rc8.js.map +10 -0
  71. package/dist/cli/chunk-z01ze5c1.js +261 -0
  72. package/dist/cli/chunk-z01ze5c1.js.map +10 -0
  73. package/dist/cli/{chunk-k79xp7av.js → chunk-z1f5arsg.js} +219 -689
  74. package/dist/cli/chunk-z1f5arsg.js.map +36 -0
  75. package/dist/cli/{chunk-1jefwnfs.js → chunk-zg2gtj10.js} +1076 -2592
  76. package/dist/cli/chunk-zg2gtj10.js.map +35 -0
  77. package/dist/cli/{chunk-dwgcp5sm.js → chunk-zxccj738.js} +1 -1
  78. package/dist/cli/index.js +214 -57
  79. package/dist/cli/index.js.map +8 -7
  80. package/dist/types/ai/agent-readability.d.ts +52 -0
  81. package/dist/types/ai/ai-catalog.d.ts +42 -0
  82. package/dist/types/ai/api/paths.d.ts +17 -0
  83. package/dist/types/ai/api-catalog.d.ts +18 -0
  84. package/dist/types/ai/ask.d.ts +368 -0
  85. package/dist/types/ai/changelog-markdown.d.ts +2 -0
  86. package/dist/types/ai/component-markdown.d.ts +2 -2
  87. package/dist/types/ai/index.d.ts +24 -0
  88. package/dist/types/ai/link-headers.d.ts +24 -0
  89. package/dist/types/ai/llms.d.ts +25 -0
  90. package/dist/types/ai/markdown.d.ts +45 -0
  91. package/dist/types/ai/mcp/discovery.d.ts +68 -0
  92. package/dist/types/ai/mcp/tools.d.ts +16 -0
  93. package/dist/types/ai/openapi-components.d.ts +43 -0
  94. package/dist/types/ai/relative-links.d.ts +26 -0
  95. package/dist/types/ai/serializers.d.ts +15 -0
  96. package/dist/types/ai/skills.d.ts +42 -0
  97. package/dist/types/ai/tar.d.ts +25 -0
  98. package/dist/types/ai/visibility.d.ts +17 -0
  99. package/dist/types/ai/web-bot-auth.d.ts +16 -0
  100. package/dist/types/analytics/adobe.d.ts +35 -0
  101. package/dist/types/analytics/amplitude.d.ts +50 -0
  102. package/dist/types/analytics/clarity.d.ts +31 -0
  103. package/dist/types/analytics/clearbit.d.ts +29 -0
  104. package/dist/types/analytics/cloudflare.d.ts +41 -0
  105. package/dist/types/analytics/fathom.d.ts +41 -0
  106. package/dist/types/analytics/google-analytics.d.ts +44 -0
  107. package/dist/types/analytics/google-tag-manager.d.ts +40 -0
  108. package/dist/types/analytics/head.d.ts +30 -0
  109. package/dist/types/analytics/heap.d.ts +40 -0
  110. package/dist/types/analytics/hightouch.d.ts +44 -0
  111. package/dist/types/analytics/hotjar.d.ts +33 -0
  112. package/dist/types/analytics/index.d.ts +61 -0
  113. package/dist/types/analytics/inline.d.ts +17 -0
  114. package/dist/types/analytics/logrocket.d.ts +44 -0
  115. package/dist/types/analytics/mixpanel.d.ts +67 -0
  116. package/dist/types/analytics/pirsch.d.ts +42 -0
  117. package/dist/types/analytics/plausible.d.ts +56 -0
  118. package/dist/types/analytics/posthog.d.ts +45 -0
  119. package/dist/types/analytics/schema.d.ts +320 -0
  120. package/dist/types/analytics/script.d.ts +46 -0
  121. package/dist/types/analytics/segment.d.ts +50 -0
  122. package/dist/types/analytics/vercel.d.ts +48 -0
  123. package/dist/types/astro/integration.d.ts +76 -0
  124. package/dist/types/astro/markdown-negotiation.d.ts +23 -0
  125. package/dist/types/astro/module-types.d.ts +14 -0
  126. package/dist/types/astro/pages.d.ts +44 -0
  127. package/dist/types/cli/env.d.ts +12 -0
  128. package/dist/types/cli/init/scaffold.d.ts +154 -0
  129. package/dist/types/components/layout/nav-utils.d.ts +11 -0
  130. package/dist/types/core/adapter.d.ts +47 -0
  131. package/dist/types/core/api-name.d.ts +7 -0
  132. package/dist/types/core/changelog-index.d.ts +13 -0
  133. package/dist/types/core/config-input.d.ts +186 -515
  134. package/dist/types/core/config.d.ts +60 -34
  135. package/dist/types/core/content-assets.d.ts +76 -0
  136. package/dist/types/core/custom-pages.d.ts +33 -0
  137. package/dist/types/core/data.d.ts +27 -12
  138. package/dist/types/core/define-components.d.ts +12 -9
  139. package/dist/types/core/deployment-env.d.ts +6 -11
  140. package/dist/types/core/frontmatter.d.ts +10 -0
  141. package/dist/types/core/graph.d.ts +18 -0
  142. package/dist/types/core/heading-markers.d.ts +54 -0
  143. package/dist/types/core/i18n-ui.d.ts +6 -2
  144. package/dist/types/core/i18n.d.ts +87 -0
  145. package/dist/types/core/includes.d.ts +138 -0
  146. package/dist/types/core/last-modified.d.ts +47 -0
  147. package/dist/types/core/links.d.ts +95 -0
  148. package/dist/types/core/locale-links.d.ts +60 -0
  149. package/dist/types/core/manifest.d.ts +17 -0
  150. package/dist/types/core/meta.d.ts +38 -0
  151. package/dist/types/core/nav-diagnostics.d.ts +26 -0
  152. package/dist/types/core/navigation.d.ts +6 -0
  153. package/dist/types/core/node-require.d.ts +19 -0
  154. package/dist/types/core/package-json.d.ts +13 -0
  155. package/dist/types/core/probe.d.ts +42 -0
  156. package/dist/types/core/project-graph.d.ts +51 -0
  157. package/dist/types/core/project.d.ts +2 -0
  158. package/dist/types/core/safe-href.d.ts +2 -0
  159. package/dist/types/core/safe-links.d.ts +26 -0
  160. package/dist/types/core/schema.d.ts +2282 -452
  161. package/dist/types/core/site-url.d.ts +16 -0
  162. package/dist/types/core/sources/assets.d.ts +36 -0
  163. package/dist/types/core/sources/cache.d.ts +37 -0
  164. package/dist/types/core/sources/collection.d.ts +28 -0
  165. package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
  166. package/dist/types/core/sources/contentful.d.ts +40 -0
  167. package/dist/types/core/sources/filesystem.d.ts +24 -0
  168. package/dist/types/core/sources/github-releases.d.ts +31 -0
  169. package/dist/types/core/sources/json.d.ts +30 -0
  170. package/dist/types/core/sources/lexical.d.ts +19 -0
  171. package/dist/types/core/sources/lower.d.ts +75 -0
  172. package/dist/types/core/sources/mdx-remote.d.ts +28 -0
  173. package/dist/types/core/sources/normalize.d.ts +147 -0
  174. package/dist/types/core/sources/notion.d.ts +131 -0
  175. package/dist/types/core/sources/obsidian.d.ts +46 -0
  176. package/dist/types/core/sources/payload.d.ts +39 -0
  177. package/dist/types/core/sources/portable-text.d.ts +42 -0
  178. package/dist/types/core/sources/read.d.ts +23 -0
  179. package/dist/types/core/sources/remote.d.ts +74 -0
  180. package/dist/types/core/sources/resolve.d.ts +19 -0
  181. package/dist/types/core/sources/sanity.d.ts +43 -0
  182. package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
  183. package/dist/types/core/sources/strapi.d.ts +33 -0
  184. package/dist/types/core/sources/types.d.ts +7 -0
  185. package/dist/types/core/sources/watch.d.ts +45 -0
  186. package/dist/types/core/text-width.d.ts +11 -0
  187. package/dist/types/core/types.d.ts +15 -1
  188. package/dist/types/core/unrecognized-keys.d.ts +7 -0
  189. package/dist/types/core/versions.d.ts +72 -0
  190. package/dist/types/core/yaml.d.ts +9 -0
  191. package/dist/types/deploy/adapter-output.d.ts +45 -0
  192. package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
  193. package/dist/types/deploy/adapters/index.d.ts +29 -0
  194. package/dist/types/deploy/adapters/netlify.d.ts +37 -0
  195. package/dist/types/deploy/adapters/node.d.ts +37 -0
  196. package/dist/types/deploy/adapters/registry.d.ts +133 -0
  197. package/dist/types/deploy/adapters/types.d.ts +71 -0
  198. package/dist/types/deploy/adapters/vercel.d.ts +38 -0
  199. package/dist/types/deploy/artifacts.d.ts +65 -0
  200. package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
  201. package/dist/types/deploy/function-bundle.d.ts +80 -0
  202. package/dist/types/deploy/headers.d.ts +50 -0
  203. package/dist/types/deploy/node-headers.d.ts +42 -0
  204. package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
  205. package/dist/types/deploy/platforms/index.d.ts +18 -0
  206. package/dist/types/deploy/platforms/netlify.d.ts +13 -0
  207. package/dist/types/deploy/platforms/node.d.ts +11 -0
  208. package/dist/types/deploy/platforms/paths.d.ts +27 -0
  209. package/dist/types/deploy/platforms/static.d.ts +10 -0
  210. package/dist/types/deploy/platforms/types.d.ts +104 -0
  211. package/dist/types/deploy/platforms/vercel.d.ts +32 -0
  212. package/dist/types/deploy/redirects.d.ts +53 -0
  213. package/dist/types/deploy/robots.d.ts +8 -0
  214. package/dist/types/deploy/rss.d.ts +31 -0
  215. package/dist/types/deploy/sitemap.d.ts +21 -0
  216. package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
  217. package/dist/types/markdown/code-title.d.ts +32 -0
  218. package/dist/types/markdown/fence-meta.d.ts +23 -0
  219. package/dist/types/markdown/themes.d.ts +3 -3
  220. package/dist/types/openapi/asyncapi.d.ts +129 -0
  221. package/dist/types/openapi/graphql-build.d.ts +8 -0
  222. package/dist/types/openapi/graphql.d.ts +122 -0
  223. package/dist/types/openapi/model.d.ts +158 -0
  224. package/dist/types/openapi/parse.d.ts +57 -0
  225. package/dist/types/openapi/references.d.ts +37 -25
  226. package/dist/types/openapi/render-mdx.d.ts +33 -0
  227. package/dist/types/openapi/sentence.d.ts +7 -0
  228. package/dist/types/openapi/signature.d.ts +10 -0
  229. package/dist/types/openapi/source.d.ts +22 -0
  230. package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
  231. package/dist/types/reference/asyncapi.d.ts +166 -0
  232. package/dist/types/reference/graphql.d.ts +181 -0
  233. package/dist/types/reference/index.d.ts +32 -0
  234. package/dist/types/reference/openapi.d.ts +165 -0
  235. package/dist/types/reference/options.d.ts +157 -0
  236. package/dist/types/reference/scalar.d.ts +136 -0
  237. package/dist/types/reference/schema.d.ts +630 -0
  238. package/dist/types/search/adapters/algolia.d.ts +32 -0
  239. package/dist/types/search/adapters/flexsearch.d.ts +12 -0
  240. package/dist/types/search/adapters/index.d.ts +31 -0
  241. package/dist/types/search/adapters/mixedbread.d.ts +22 -0
  242. package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
  243. package/dist/types/search/adapters/orama.d.ts +13 -0
  244. package/dist/types/search/adapters/pagefind.d.ts +12 -0
  245. package/dist/types/search/adapters/registry.d.ts +228 -0
  246. package/dist/types/search/adapters/types.d.ts +34 -0
  247. package/dist/types/search/adapters/typesense.d.ts +42 -0
  248. package/dist/types/search/build.d.ts +23 -0
  249. package/dist/types/search/documents.d.ts +90 -0
  250. package/dist/types/search/facets.d.ts +3 -0
  251. package/dist/types/search/sync/algolia.d.ts +14 -0
  252. package/dist/types/search/sync/index.d.ts +14 -0
  253. package/dist/types/search/sync/orama-cloud.d.ts +10 -0
  254. package/dist/types/search/sync/typesense.d.ts +14 -0
  255. package/dist/types/sources/contentful.d.ts +68 -0
  256. package/dist/types/sources/custom.d.ts +20 -0
  257. package/dist/types/sources/filesystem.d.ts +42 -0
  258. package/dist/types/sources/github-releases.d.ts +46 -0
  259. package/dist/types/sources/index.d.ts +48 -0
  260. package/dist/types/sources/mdx-remote.d.ts +63 -0
  261. package/dist/types/sources/notion.d.ts +65 -0
  262. package/dist/types/sources/obsidian.d.ts +34 -0
  263. package/dist/types/sources/payload.d.ts +68 -0
  264. package/dist/types/sources/registry.d.ts +1414 -0
  265. package/dist/types/sources/sanity.d.ts +69 -0
  266. package/dist/types/sources/shared.d.ts +46 -0
  267. package/dist/types/sources/strapi.d.ts +66 -0
  268. package/dist/types/theme/icon-kind.d.ts +11 -0
  269. package/dist/types/theme/icons.d.ts +20 -0
  270. package/docs/01-quickstart.mdx +18 -18
  271. package/docs/02-deployment.mdx +50 -26
  272. package/docs/03-upgrading.mdx +351 -0
  273. package/docs/04-migrating.mdx +58 -0
  274. package/docs/08-faq.mdx +3 -3
  275. package/docs/advanced/blog.mdx +13 -6
  276. package/docs/advanced/changelog.mdx +23 -35
  277. package/docs/advanced/custom-pages.mdx +20 -8
  278. package/docs/advanced/meta.ts +1 -8
  279. package/docs/advanced/skills.mdx +8 -0
  280. package/docs/cli/audit.mdx +646 -0
  281. package/docs/cli/doctor.mdx +29 -0
  282. package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
  283. package/docs/cli/index.mdx +105 -0
  284. package/docs/cli/meta.ts +7 -0
  285. package/docs/{reference → cli}/translate.mdx +1 -1
  286. package/docs/cli/validate.mdx +41 -0
  287. package/docs/cli/version.mdx +40 -0
  288. package/docs/configuration/analytics.mdx +350 -59
  289. package/docs/configuration/ask-ai.mdx +162 -61
  290. package/docs/configuration/customization.mdx +15 -9
  291. package/docs/configuration/index.mdx +50 -31
  292. package/docs/configuration/search.mdx +75 -54
  293. package/docs/configuration/theming.mdx +24 -15
  294. package/docs/content/components.mdx +21 -5
  295. package/docs/{reference → content}/frontmatter.mdx +35 -1
  296. package/docs/content/i18n.mdx +8 -6
  297. package/docs/content/includes.mdx +2 -4
  298. package/docs/content/index.mdx +1 -1
  299. package/docs/content/islands.mdx +10 -5
  300. package/docs/content/meta.mdx +1 -1
  301. package/docs/content/meta.ts +1 -0
  302. package/docs/content/navigation.mdx +9 -7
  303. package/docs/content/sources.mdx +145 -50
  304. package/docs/content/syntax.mdx +16 -12
  305. package/docs/content/versioning.mdx +3 -3
  306. package/docs/discoverability/agent-discovery.mdx +11 -11
  307. package/docs/discoverability/index.mdx +4 -4
  308. package/docs/discoverability/json-api.mdx +4 -4
  309. package/docs/discoverability/llms-txt.mdx +6 -6
  310. package/docs/discoverability/markdown.mdx +4 -4
  311. package/docs/discoverability/mcp.mdx +11 -11
  312. package/docs/discoverability/sitemap-and-robots.mdx +3 -3
  313. package/docs/index.mdx +2 -2
  314. package/docs/references/asyncapi.mdx +59 -0
  315. package/docs/{advanced → references}/graphql.mdx +45 -32
  316. package/docs/{reference → references}/meta.ts +2 -2
  317. package/docs/references/openapi.mdx +171 -0
  318. package/docs/references/scalar.mdx +64 -0
  319. package/package.json +42 -8
  320. package/skills/blume/SKILL.md +21 -8
  321. package/skills/blume-migrate/SKILL.md +22 -21
  322. package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
  323. package/skills/blume-migrate/references/docusaurus.md +5 -4
  324. package/skills/blume-migrate/references/fumadocs.md +4 -4
  325. package/skills/blume-migrate/references/mintlify.md +23 -8
  326. package/skills/blume-migrate/references/monorepo.md +6 -6
  327. package/skills/blume-migrate/references/starlight.md +4 -4
  328. package/src/ai/agent-readability.ts +21 -22
  329. package/src/ai/ai-catalog.ts +50 -32
  330. package/src/ai/api/handlers.ts +46 -11
  331. package/src/ai/api-catalog.ts +8 -8
  332. package/src/ai/ask-data.ts +1 -1
  333. package/src/ai/ask.ts +624 -100
  334. package/src/ai/changelog-markdown.ts +91 -0
  335. package/src/ai/component-markdown.ts +328 -12
  336. package/src/ai/index.ts +45 -0
  337. package/src/ai/link-headers.ts +7 -6
  338. package/src/ai/llms.ts +20 -15
  339. package/src/ai/markdown.ts +35 -5
  340. package/src/ai/mcp/data.ts +9 -5
  341. package/src/ai/openapi-components.ts +4 -1
  342. package/src/ai/relative-links.ts +170 -0
  343. package/src/ai/serializers.ts +2 -2
  344. package/src/ai/skills.ts +1 -1
  345. package/src/ai/web-bot-auth.ts +2 -2
  346. package/src/analytics/adobe.ts +46 -0
  347. package/src/analytics/amplitude.ts +79 -0
  348. package/src/analytics/clarity.ts +46 -0
  349. package/src/analytics/clearbit.ts +47 -0
  350. package/src/analytics/cloudflare.ts +67 -0
  351. package/src/analytics/fathom.ts +64 -0
  352. package/src/analytics/google-analytics.ts +84 -0
  353. package/src/analytics/google-tag-manager.ts +61 -0
  354. package/src/analytics/head.ts +130 -0
  355. package/src/analytics/heap.ts +65 -0
  356. package/src/analytics/hightouch.ts +77 -0
  357. package/src/analytics/hotjar.ts +47 -0
  358. package/src/analytics/index.ts +71 -0
  359. package/src/analytics/inline.ts +21 -0
  360. package/src/analytics/logrocket.ts +71 -0
  361. package/src/analytics/mixpanel.ts +92 -0
  362. package/src/analytics/pirsch.ts +66 -0
  363. package/src/analytics/plausible.ts +83 -0
  364. package/src/analytics/posthog.ts +78 -0
  365. package/src/analytics/schema.ts +60 -0
  366. package/src/analytics/script.ts +60 -0
  367. package/src/analytics/segment.ts +85 -0
  368. package/src/analytics/vercel.ts +50 -0
  369. package/src/astro/adapter-root.ts +7 -9
  370. package/src/astro/component-slots.ts +131 -91
  371. package/src/astro/generate.ts +112 -345
  372. package/src/astro/integration.ts +2 -6
  373. package/src/astro/pages.ts +13 -101
  374. package/src/astro/render-deps.ts +379 -0
  375. package/src/astro/runtime-deps.ts +201 -0
  376. package/src/astro/templates.ts +554 -541
  377. package/src/audit/agent.ts +24 -0
  378. package/src/audit/catalog.ts +2 -2
  379. package/src/audit/checks/assets.ts +2 -2
  380. package/src/audit/checks/dns-aid.ts +1 -1
  381. package/src/audit/checks/duplicates.ts +3 -1
  382. package/src/audit/checks/i18n.ts +1 -1
  383. package/src/audit/checks/indexability.ts +7 -7
  384. package/src/audit/checks/links.ts +2 -2
  385. package/src/audit/checks/llms.ts +6 -6
  386. package/src/audit/checks/network.ts +3 -3
  387. package/src/audit/checks/og-image.ts +2 -2
  388. package/src/audit/checks/robots.ts +1 -1
  389. package/src/audit/checks/sitemap.ts +2 -2
  390. package/src/audit/checks/social.ts +1 -1
  391. package/src/audit/run.ts +4 -3
  392. package/src/audit/terms.ts +31 -0
  393. package/src/audit/url.ts +13 -13
  394. package/src/cli/command-meta.ts +10 -0
  395. package/src/cli/commands/audit.ts +39 -20
  396. package/src/cli/commands/build.ts +71 -316
  397. package/src/cli/commands/check.ts +1 -0
  398. package/src/cli/commands/dev.ts +40 -1
  399. package/src/cli/commands/doctor.ts +90 -14
  400. package/src/cli/commands/eject.ts +44 -7
  401. package/src/cli/commands/eval.ts +2 -2
  402. package/src/cli/commands/init.ts +161 -41
  403. package/src/cli/commands/migrate.ts +121 -0
  404. package/src/cli/commands/preview.ts +7 -1
  405. package/src/cli/commands/translate.ts +2 -2
  406. package/src/cli/commands/upgrade.ts +141 -0
  407. package/src/cli/commands/version.ts +57 -44
  408. package/src/cli/eject-scripts.ts +121 -6
  409. package/src/cli/index.ts +11 -1
  410. package/src/cli/init/install.ts +70 -0
  411. package/src/cli/init/questions.ts +7 -0
  412. package/src/cli/init/scaffold.ts +459 -75
  413. package/src/cli/lazy-command.ts +37 -1
  414. package/src/cli/prepare.ts +40 -6
  415. package/src/cli/required-secrets.ts +38 -11
  416. package/src/cli/unknown-flags.ts +266 -0
  417. package/src/cli/yarn-pnp.ts +52 -0
  418. package/src/components/content/AccordionItem.astro +7 -1
  419. package/src/components/content/Card.astro +4 -3
  420. package/src/components/content/ColorItem.astro +22 -4
  421. package/src/components/content/GithubInfo.astro +2 -2
  422. package/src/components/content/Prompt.astro +25 -25
  423. package/src/components/content/Tabs.astro +3 -1
  424. package/src/components/content/Tile.astro +2 -3
  425. package/src/components/content/Tooltip.astro +57 -9
  426. package/src/components/content/content-strings.ts +34 -0
  427. package/src/components/content/diff.ts +1 -1
  428. package/src/components/content/mermaid-element.ts +13 -2
  429. package/src/components/content/prompt-markdown.ts +292 -0
  430. package/src/components/content/tooltip-id.ts +41 -0
  431. package/src/components/islands/hooks.ts +25 -2
  432. package/src/components/layout/Analytics.astro +21 -79
  433. package/src/components/layout/Banner.astro +3 -1
  434. package/src/components/layout/DiscoveryLinks.astro +69 -0
  435. package/src/components/layout/Header.astro +83 -20
  436. package/src/components/layout/LanguageSwitcher.astro +4 -1
  437. package/src/components/layout/Logo.astro +23 -2
  438. package/src/components/layout/NavSelector.astro +13 -2
  439. package/src/components/layout/NavTree.astro +12 -3
  440. package/src/components/layout/NavTreeScript.astro +17 -3
  441. package/src/components/layout/PageActions.astro +3 -3
  442. package/src/components/layout/PageFeedback.astro +11 -1
  443. package/src/components/layout/PageLayout.astro +52 -5
  444. package/src/components/layout/ReferenceLayout.astro +21 -12
  445. package/src/components/layout/RootLayout.astro +69 -66
  446. package/src/components/layout/Search.astro +30 -6
  447. package/src/components/layout/WebMcp.astro +1 -1
  448. package/src/components/layout/analytics-client.ts +72 -15
  449. package/src/components/layout/drawer-inert.ts +113 -15
  450. package/src/components/layout/dropdown-clamp.ts +105 -0
  451. package/src/components/layout/head-scripts.ts +15 -6
  452. package/src/components/layout/nav-utils.ts +17 -0
  453. package/src/components/layout/search/algolia.ts +8 -8
  454. package/src/components/layout/search/orama-cloud.ts +9 -7
  455. package/src/components/layout/search/typesense.ts +11 -17
  456. package/src/components/openapi/MessageComposer.astro +2 -2
  457. package/src/components/openapi/Playground.astro +2 -2
  458. package/src/components/openapi/playground-client.ts +79 -10
  459. package/src/core/changelog-index.ts +24 -0
  460. package/src/core/component-overrides.ts +399 -154
  461. package/src/core/config-input.ts +188 -553
  462. package/src/core/config.ts +130 -41
  463. package/src/core/custom-pages.ts +105 -0
  464. package/src/core/data.ts +31 -12
  465. package/src/core/define-components.ts +12 -9
  466. package/src/core/deployment-env.ts +18 -74
  467. package/src/core/diagnostics.ts +14 -7
  468. package/src/core/graph.ts +69 -25
  469. package/src/core/i18n-ui.ts +6 -2
  470. package/src/core/i18n.ts +17 -0
  471. package/src/core/includes.ts +156 -38
  472. package/src/core/last-modified.ts +6 -11
  473. package/src/core/links.ts +166 -2
  474. package/src/core/manifest.ts +10 -3
  475. package/src/core/navigation.ts +115 -16
  476. package/src/core/new-tab.ts +35 -0
  477. package/src/core/node-require.ts +21 -0
  478. package/src/core/project-graph.ts +42 -26
  479. package/src/core/project.ts +9 -4
  480. package/src/core/request-body.ts +61 -0
  481. package/src/core/safe-href.ts +28 -0
  482. package/src/core/safe-links.ts +68 -0
  483. package/src/core/schema.ts +517 -739
  484. package/src/core/server-features.ts +8 -9
  485. package/src/core/sources/assets.ts +47 -11
  486. package/src/core/sources/collection.ts +67 -0
  487. package/src/core/sources/contentful-rich-text.ts +285 -0
  488. package/src/core/sources/contentful.ts +173 -0
  489. package/src/core/sources/github-releases.ts +51 -1
  490. package/src/core/sources/json.ts +71 -0
  491. package/src/core/sources/lexical.ts +195 -0
  492. package/src/core/sources/lower.ts +226 -0
  493. package/src/core/sources/normalize.ts +52 -2
  494. package/src/core/sources/notion.ts +39 -28
  495. package/src/core/sources/payload.ts +135 -0
  496. package/src/core/sources/portable-text.ts +11 -16
  497. package/src/core/sources/remote.ts +226 -0
  498. package/src/core/sources/resolve.ts +104 -166
  499. package/src/core/sources/sanity.ts +16 -49
  500. package/src/core/sources/strapi-blocks.ts +124 -0
  501. package/src/core/sources/strapi.ts +191 -0
  502. package/src/core/sources/types.ts +12 -1
  503. package/src/core/types.ts +15 -1
  504. package/src/core/ui-packs/ar.ts +6 -2
  505. package/src/core/ui-packs/bg.ts +6 -2
  506. package/src/core/ui-packs/bn.ts +6 -2
  507. package/src/core/ui-packs/ca.ts +3 -1
  508. package/src/core/ui-packs/cs.ts +6 -2
  509. package/src/core/ui-packs/da.ts +6 -2
  510. package/src/core/ui-packs/de.ts +6 -2
  511. package/src/core/ui-packs/el.ts +3 -1
  512. package/src/core/ui-packs/es.ts +3 -1
  513. package/src/core/ui-packs/fa.ts +6 -2
  514. package/src/core/ui-packs/fi.ts +6 -2
  515. package/src/core/ui-packs/fr.ts +3 -1
  516. package/src/core/ui-packs/he.ts +6 -2
  517. package/src/core/ui-packs/hi.ts +6 -2
  518. package/src/core/ui-packs/hr.ts +6 -2
  519. package/src/core/ui-packs/hu.ts +6 -2
  520. package/src/core/ui-packs/id.ts +6 -2
  521. package/src/core/ui-packs/it.ts +3 -1
  522. package/src/core/ui-packs/ja.ts +3 -1
  523. package/src/core/ui-packs/ko.ts +3 -1
  524. package/src/core/ui-packs/nl.ts +6 -2
  525. package/src/core/ui-packs/no.ts +6 -2
  526. package/src/core/ui-packs/pl.ts +6 -2
  527. package/src/core/ui-packs/pt-br.ts +3 -1
  528. package/src/core/ui-packs/pt.ts +3 -1
  529. package/src/core/ui-packs/ro.ts +6 -2
  530. package/src/core/ui-packs/ru.ts +6 -2
  531. package/src/core/ui-packs/sk.ts +6 -2
  532. package/src/core/ui-packs/sr.ts +6 -2
  533. package/src/core/ui-packs/sv.ts +6 -2
  534. package/src/core/ui-packs/th.ts +3 -1
  535. package/src/core/ui-packs/tr.ts +6 -2
  536. package/src/core/ui-packs/uk.ts +6 -2
  537. package/src/core/ui-packs/vi.ts +3 -1
  538. package/src/core/ui-packs/zh-tw.ts +3 -1
  539. package/src/core/ui-packs/zh.ts +3 -1
  540. package/src/core/unrecognized-keys.ts +10 -0
  541. package/src/core/version-cut.ts +116 -8
  542. package/src/deploy/adapter-output.ts +57 -97
  543. package/src/deploy/adapters/cloudflare.ts +39 -0
  544. package/src/deploy/adapters/index.ts +41 -0
  545. package/src/deploy/adapters/netlify.ts +34 -0
  546. package/src/deploy/adapters/node.ts +34 -0
  547. package/src/deploy/adapters/registry.ts +127 -0
  548. package/src/deploy/adapters/types.ts +92 -0
  549. package/src/deploy/adapters/vercel.ts +35 -0
  550. package/src/deploy/artifacts.ts +55 -27
  551. package/src/deploy/cloudflare-negotiation.ts +179 -100
  552. package/src/deploy/function-bundle.ts +18 -3
  553. package/src/deploy/headers.ts +124 -23
  554. package/src/deploy/node-headers.ts +198 -0
  555. package/src/deploy/platforms/cloudflare.ts +312 -0
  556. package/src/deploy/platforms/index.ts +67 -0
  557. package/src/deploy/platforms/netlify.ts +52 -0
  558. package/src/deploy/platforms/node.ts +40 -0
  559. package/src/deploy/platforms/paths.ts +42 -0
  560. package/src/deploy/platforms/static.ts +29 -0
  561. package/src/deploy/platforms/types.ts +112 -0
  562. package/src/deploy/platforms/vercel.ts +193 -0
  563. package/src/deploy/redirects.ts +30 -18
  564. package/src/deploy/robots.ts +3 -3
  565. package/src/deploy/rss.ts +2 -2
  566. package/src/deploy/sitemap.ts +2 -2
  567. package/src/deploy/vercel-negotiation.ts +2 -2
  568. package/src/eval/agents.ts +32 -1
  569. package/src/eval/findings.ts +19 -11
  570. package/src/eval/report.ts +10 -2
  571. package/src/markdown/external-links.ts +65 -0
  572. package/src/markdown/include.ts +45 -27
  573. package/src/markdown/index.ts +34 -9
  574. package/src/markdown/inline-code.ts +12 -6
  575. package/src/markdown/relative-links.ts +324 -0
  576. package/src/markdown/themes.ts +3 -3
  577. package/src/migrate/migrate.ts +149 -0
  578. package/src/openapi/parse.ts +64 -16
  579. package/src/openapi/proxy.ts +62 -10
  580. package/src/openapi/references.ts +147 -147
  581. package/src/openapi/render-mdx.ts +32 -10
  582. package/src/openapi/scalar.ts +15 -13
  583. package/src/openapi/sentence.ts +14 -0
  584. package/src/openapi/source.ts +37 -21
  585. package/src/openapi/spec-dependency-error.ts +15 -0
  586. package/src/reference/asyncapi.ts +83 -0
  587. package/src/reference/graphql.ts +89 -0
  588. package/src/reference/index.ts +40 -0
  589. package/src/reference/openapi.ts +83 -0
  590. package/src/reference/options.ts +201 -0
  591. package/src/reference/scalar.ts +136 -0
  592. package/src/reference/schema.ts +88 -0
  593. package/src/registry/eject.ts +97 -42
  594. package/src/search/adapters/algolia.ts +46 -0
  595. package/src/search/adapters/flexsearch.ts +29 -0
  596. package/src/search/adapters/index.ts +39 -0
  597. package/src/search/adapters/mixedbread.ts +39 -0
  598. package/src/search/adapters/orama-cloud.ts +51 -0
  599. package/src/search/adapters/orama.ts +24 -0
  600. package/src/search/adapters/pagefind.ts +27 -0
  601. package/src/search/adapters/registry.ts +131 -0
  602. package/src/search/adapters/types.ts +46 -0
  603. package/src/search/adapters/typesense.ts +57 -0
  604. package/src/search/build.ts +8 -4
  605. package/src/search/documents.ts +6 -0
  606. package/src/search/sync/algolia.ts +12 -11
  607. package/src/search/sync/index.ts +35 -20
  608. package/src/search/sync/orama-cloud.ts +12 -9
  609. package/src/search/sync/typesense.ts +15 -13
  610. package/src/sources/contentful.ts +63 -0
  611. package/src/sources/custom.ts +38 -0
  612. package/src/sources/filesystem.ts +51 -0
  613. package/src/sources/github-releases.ts +52 -0
  614. package/src/sources/index.ts +60 -0
  615. package/src/sources/mdx-remote.ts +76 -0
  616. package/src/sources/notion.ts +63 -0
  617. package/src/sources/obsidian.ts +38 -0
  618. package/src/sources/payload.ts +60 -0
  619. package/src/sources/registry.ts +182 -0
  620. package/src/sources/sanity.ts +66 -0
  621. package/src/sources/shared.ts +52 -0
  622. package/src/sources/strapi.ts +58 -0
  623. package/src/theme/entry.ts +24 -2
  624. package/src/translate/report.ts +40 -7
  625. package/src/upgrade/upgrade.ts +499 -0
  626. package/dist/cli/chunk-0qymqwzz.js +0 -164
  627. package/dist/cli/chunk-0qymqwzz.js.map +0 -15
  628. package/dist/cli/chunk-1jefwnfs.js.map +0 -48
  629. package/dist/cli/chunk-2mzebbbz.js +0 -69
  630. package/dist/cli/chunk-2z47ypj8.js.map +0 -11
  631. package/dist/cli/chunk-4x36ddpw.js.map +0 -11
  632. package/dist/cli/chunk-5093q3n7.js +0 -68
  633. package/dist/cli/chunk-5093q3n7.js.map +0 -10
  634. package/dist/cli/chunk-5qk08vmp.js.map +0 -11
  635. package/dist/cli/chunk-7s8hm3b6.js +0 -5347
  636. package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
  637. package/dist/cli/chunk-8cjtbafj.js.map +0 -13
  638. package/dist/cli/chunk-97r59kpr.js +0 -381
  639. package/dist/cli/chunk-97r59kpr.js.map +0 -12
  640. package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
  641. package/dist/cli/chunk-b27xqwn9.js.map +0 -10
  642. package/dist/cli/chunk-bf6bt1xt.js +0 -185
  643. package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
  644. package/dist/cli/chunk-cjtn640a.js.map +0 -10
  645. package/dist/cli/chunk-ct47dqpx.js.map +0 -11
  646. package/dist/cli/chunk-esphfr8p.js +0 -107
  647. package/dist/cli/chunk-esphfr8p.js.map +0 -11
  648. package/dist/cli/chunk-ex56aa81.js +0 -1016
  649. package/dist/cli/chunk-ex56aa81.js.map +0 -13
  650. package/dist/cli/chunk-garjf5z9.js +0 -30
  651. package/dist/cli/chunk-garjf5z9.js.map +0 -10
  652. package/dist/cli/chunk-js7saxwm.js +0 -1045
  653. package/dist/cli/chunk-js7saxwm.js.map +0 -22
  654. package/dist/cli/chunk-k79xp7av.js.map +0 -39
  655. package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
  656. package/dist/cli/chunk-q4rae3bg.js +0 -60
  657. package/dist/cli/chunk-q4rae3bg.js.map +0 -10
  658. package/dist/cli/chunk-rz9jmfhz.js +0 -108
  659. package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
  660. package/dist/cli/chunk-vh9w1sgp.js +0 -73
  661. package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
  662. package/dist/cli/chunk-vrfp10qk.js +0 -81
  663. package/dist/cli/chunk-vrfp10qk.js.map +0 -10
  664. package/dist/cli/chunk-yg63d42r.js.map +0 -34
  665. package/docs/advanced/api-reference.mdx +0 -240
  666. package/docs/reference/cli.mdx +0 -197
  667. package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
  668. package/src/components/content/changelog-element.ts +0 -69
  669. package/src/search/providers.ts +0 -91
  670. /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-7ez8ny0t.js.map} +0 -0
  671. /package/dist/cli/{chunk-nn13znc2.js.map → chunk-88cpgt6h.js.map} +0 -0
  672. /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-f7t03s3g.js.map} +0 -0
  673. /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-zxccj738.js.map} +0 -0
@@ -0,0 +1,131 @@
1
+ import type { ContentSource, SourceContext } from "./types.ts";
2
+ interface NotionRichText {
3
+ plain_text: string;
4
+ href?: string | null;
5
+ annotations?: {
6
+ bold?: boolean;
7
+ italic?: boolean;
8
+ code?: boolean;
9
+ strikethrough?: boolean;
10
+ };
11
+ }
12
+ interface NotionProperty {
13
+ type: string;
14
+ title?: NotionRichText[];
15
+ rich_text?: NotionRichText[];
16
+ select?: {
17
+ name: string;
18
+ } | null;
19
+ status?: {
20
+ name: string;
21
+ } | null;
22
+ number?: number | null;
23
+ }
24
+ interface NotionPage {
25
+ id: string;
26
+ properties: Record<string, NotionProperty>;
27
+ last_edited_time?: string;
28
+ }
29
+ /** The per-type payload a block carries under the key matching its `type`. */
30
+ interface NotionBlockPayload {
31
+ caption?: NotionRichText[];
32
+ checked?: boolean;
33
+ external?: {
34
+ url: string;
35
+ };
36
+ file?: {
37
+ url: string;
38
+ };
39
+ language?: string;
40
+ rich_text?: NotionRichText[];
41
+ }
42
+ interface NotionBlock {
43
+ id: string;
44
+ type: string;
45
+ has_children?: boolean;
46
+ [key: string]: NotionBlockPayload | boolean | string | undefined;
47
+ }
48
+ interface NotionList<T> {
49
+ results: T[];
50
+ has_more: boolean;
51
+ next_cursor: string | null;
52
+ }
53
+ /**
54
+ * The slice of `@notionhq/client` (v5+) this adapter relies on, so it's
55
+ * mockable. Since API version 2025-09-03 a database's rows live in a data
56
+ * source: `databases.retrieve` names the data sources and
57
+ * `dataSources.query` pages through one of them.
58
+ */
59
+ export interface NotionClientLike {
60
+ databases: {
61
+ retrieve: (args: {
62
+ database_id: string;
63
+ }) => Promise<{
64
+ data_sources: {
65
+ id: string;
66
+ name: string;
67
+ }[];
68
+ }>;
69
+ };
70
+ dataSources: {
71
+ query: (args: {
72
+ data_source_id: string;
73
+ start_cursor?: string;
74
+ }) => Promise<NotionList<NotionPage>>;
75
+ };
76
+ blocks: {
77
+ children: {
78
+ list: (args: {
79
+ block_id: string;
80
+ start_cursor?: string;
81
+ }) => Promise<NotionList<NotionBlock>>;
82
+ };
83
+ };
84
+ }
85
+ /** Notion property names mapped onto Blume meta. */
86
+ export interface NotionPropertyMap {
87
+ /** Title property name; defaults to the database's `title`-typed property. */
88
+ title?: string;
89
+ /** Description property (rich_text); default `Description`. */
90
+ description?: string;
91
+ /** Slug property (rich_text); default `Slug`, else the slugified title. */
92
+ slug?: string;
93
+ /** Status property (select/status); default `Status`. */
94
+ status?: string;
95
+ /** Sidebar order property (number); default `Order`. */
96
+ order?: string;
97
+ }
98
+ export interface NotionSourceOptions {
99
+ name: string;
100
+ prefix?: string;
101
+ /** The Notion database id. */
102
+ database: string;
103
+ /**
104
+ * Maximum concurrent Notion API requests. Notion allows an average of 3
105
+ * requests per second per integration, so a large database must pace its
106
+ * block-tree fan-out or every request 429s. Default 3.
107
+ */
108
+ concurrency?: number;
109
+ /** Integration token; defaults to `NOTION_TOKEN`. */
110
+ token?: string;
111
+ properties?: NotionPropertyMap;
112
+ /**
113
+ * The `Status` property is treated as a publish signal: any value other than
114
+ * this maps to `draft: true`. Defaults to `Published`; pages without a
115
+ * Status/select property are always imported as published.
116
+ */
117
+ publishedValue?: string;
118
+ /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
119
+ pollInterval?: number;
120
+ /** Injected for tests; otherwise built from `@notionhq/client`. */
121
+ client?: NotionClientLike;
122
+ /** Injected for tests; used to download images. */
123
+ fetchImpl?: typeof fetch;
124
+ }
125
+ /**
126
+ * Notion content source. Maps a database to a collection: each page becomes an
127
+ * entry, its properties become frontmatter, and its block tree is converted to
128
+ * MDX with Blume components. Images are materialized so signed URLs don't rot.
129
+ */
130
+ export declare const notionSource: (options: NotionSourceOptions, ctx?: SourceContext) => ContentSource;
131
+ export {};
@@ -0,0 +1,46 @@
1
+ import type { ResolvedI18nConfig, ResolvedVersionsConfig } from "../schema.ts";
2
+ import type { ContentSource, SourceContext } from "./types.ts";
3
+ /** Options for the built-in Obsidian vault source. */
4
+ export interface ObsidianSourceOptions {
5
+ /**
6
+ * The project's default content type (`content.defaultType`), which a note
7
+ * without a `type` resolves to when {@link typeFrontmatterKeys} are picked.
8
+ */
9
+ defaultType?: string;
10
+ /** Vault folder names to skip at any depth, in addition to dot-folders. */
11
+ exclude?: string[];
12
+ /**
13
+ * Frontmatter keys the project declares site-wide beyond Blume's page meta
14
+ * (`frontmatter.extend`). Any other Obsidian property is dropped when a note
15
+ * is lowered, since the strict meta schema would reject it and fail the
16
+ * build.
17
+ */
18
+ frontmatterKeys?: readonly string[];
19
+ /** The project's i18n config, when locale directories place vault notes. */
20
+ i18n?: ResolvedI18nConfig;
21
+ /** Stable source name; namespaces ids and diagnostics. */
22
+ name: string;
23
+ /** Namespaces the source's routes under `/<prefix>/`; e.g. `vault`. */
24
+ prefix?: string;
25
+ /**
26
+ * Frontmatter keys each content type declares (`content.types.<type>.frontmatter`),
27
+ * keyed by type. A note keeps only the keys of its own type — the meta parse
28
+ * merges only that type's schema, so a key another type declares would still
29
+ * reach the strict page schema and fail.
30
+ */
31
+ typeFrontmatterKeys?: Readonly<Record<string, readonly string[]>>;
32
+ /** Vault directory, absolute or relative to `projectRoot`. */
33
+ vault: string;
34
+ /** The project's versions config, when snapshot directories hold notes. */
35
+ versions?: ResolvedVersionsConfig;
36
+ }
37
+ /**
38
+ * The built-in Obsidian vault source: read a vault directly — no export step,
39
+ * no generated files in the user's repo — lowering Obsidian's dialect to
40
+ * Blume-ready Markdown at load time.
41
+ *
42
+ * Staged, since the body is rewritten before Blume sees it; `sourcePath` still
43
+ * points at the note, so diagnostics and relative image checks name the real
44
+ * file. A wikilink Blume cannot resolve degrades rather than failing the build.
45
+ */
46
+ export declare const obsidianSource: (options: ObsidianSourceOptions, ctx: SourceContext) => ContentSource;
@@ -0,0 +1,39 @@
1
+ import type { JsonObject } from "./json.ts";
2
+ import type { RemoteFieldMap } from "./remote.ts";
3
+ import type { ContentSource, SourceContext } from "./types.ts";
4
+ export interface PayloadSourceOptions {
5
+ name: string;
6
+ prefix?: string;
7
+ /** The Payload app's origin (`https://cms.acme.dev`); its REST API is at `/api`. */
8
+ url: string;
9
+ /** The collection slug whose documents become pages. */
10
+ collection: string;
11
+ /**
12
+ * The auth-enabled collection the API key belongs to; default `users`. It
13
+ * names the scheme in the `Authorization` header (`users API-Key <key>`).
14
+ */
15
+ authCollection?: string;
16
+ /** Relationship depth to populate; default `1`, enough for upload URLs. */
17
+ depth?: number;
18
+ /**
19
+ * Field paths mapping a document onto Blume meta + body. Defaults:
20
+ * `title`, `description`, `slug`, `content`, `updatedAt`.
21
+ */
22
+ fields?: RemoteFieldMap;
23
+ /** Extra query parameters for the collection request (`where[...]`, `sort`). */
24
+ params?: Record<string, string>;
25
+ /** Serializers for `block`/`inlineBlock` nodes, keyed by `blockType`. */
26
+ serializers?: Record<string, (fields: JsonObject) => string>;
27
+ /** API key; defaults to `PAYLOAD_API_KEY`. */
28
+ token?: string;
29
+ /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
30
+ pollInterval?: number;
31
+ /** Injected for tests; defaults to the global `fetch`. */
32
+ fetchImpl?: typeof fetch;
33
+ }
34
+ /**
35
+ * Payload content source. Pages through a collection's REST endpoint, maps
36
+ * each document's fields to frontmatter, and lowers its Lexical body to
37
+ * Markdown. Published documents only, unless `--preview` asks for drafts.
38
+ */
39
+ export declare const payloadSource: (options: PayloadSourceOptions, ctx?: SourceContext) => ContentSource;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * A field value on a Portable Text node: the arbitrary JSON the CMS query
3
+ * returned (custom blocks carry whatever fields the studio schema defines).
4
+ * Spans and mark defs appear as members so the block's typed fields conform
5
+ * to its index signature.
6
+ */
7
+ export type PortableTextValue = string | number | boolean | null | undefined | PortableTextSpan | PortableTextMarkDef | PortableTextValue[] | {
8
+ [key: string]: PortableTextValue;
9
+ };
10
+ /** A single Portable Text node (block, image, or a custom type). */
11
+ export interface PortableTextBlock {
12
+ _type: string;
13
+ _key?: string;
14
+ style?: string;
15
+ listItem?: string;
16
+ level?: number;
17
+ children?: PortableTextSpan[];
18
+ markDefs?: PortableTextMarkDef[];
19
+ [key: string]: PortableTextValue;
20
+ }
21
+ interface PortableTextSpan {
22
+ _type: string;
23
+ text?: string;
24
+ marks?: string[];
25
+ }
26
+ interface PortableTextMarkDef {
27
+ _key: string;
28
+ _type: string;
29
+ href?: string;
30
+ }
31
+ export interface PortableTextOptions {
32
+ /** Resolve an image block to a URL (the adapter knows project/dataset). */
33
+ imageUrl?: (block: PortableTextBlock) => string | null;
34
+ /**
35
+ * Custom block-type serializers, keyed by `_type`; return Markdown or MDX.
36
+ * Setting any writes the source's entries as MDX.
37
+ */
38
+ serializers?: Record<string, (block: PortableTextBlock) => string>;
39
+ }
40
+ /** Serialize a Portable Text array into a Markdown string. */
41
+ export declare const portableTextToMarkdown: (blocks: PortableTextBlock[], options?: PortableTextOptions) => string;
42
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { PageRecord } from "../types.ts";
2
+ import type { ContentSource } from "./types.ts";
3
+ /** The subset of a scanned project the entry reader needs. */
4
+ export interface EntryReadContext {
5
+ /** The instantiated sources, keyed for `read()` lookups. */
6
+ sources?: ContentSource[];
7
+ }
8
+ /**
9
+ * Read an entry's raw body text without assuming a filesystem path. Prefers the
10
+ * body captured at scan time (staged sources), then the owning source's lazy
11
+ * `read()`, then the back-compat `sourcePath` (any local file). Returns `""` when an
12
+ * entry can't be resolved, so callers degrade gracefully.
13
+ */
14
+ export declare const readEntryText: (ctx: EntryReadContext, page: PageRecord) => Promise<string>;
15
+ /**
16
+ * Read an entry's raw body with `<include>` statements expanded — what search
17
+ * indexing, the `.md`/`.mdx` mirrors, and llms-full.txt should see, matching
18
+ * the spliced content the rendered page shows. Filesystem entries only
19
+ * (includes resolve as filesystem paths); everything else passes through
20
+ * verbatim. Expansion errors were already surfaced as scan diagnostics, so
21
+ * unresolvable statements simply stay verbatim here.
22
+ */
23
+ export declare const readExpandedEntryText: (ctx: EntryReadContext, page: PageRecord) => Promise<string>;
@@ -0,0 +1,74 @@
1
+ import type { JsonObject, JsonValue } from "./json.ts";
2
+ import type { ContentSource, SourceContext, SourceEntry } from "./types.ts";
3
+ /** What every REST-backed CMS source needs to be a staged, cached source. */
4
+ export interface RemoteSourceOptions {
5
+ /** Pull every entry from the API; called on refresh and on each poll. */
6
+ fetchEntries: () => Promise<SourceEntry[]>;
7
+ name: string;
8
+ /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
9
+ pollInterval?: number;
10
+ prefix?: string;
11
+ }
12
+ /**
13
+ * The staged-source scaffolding a CMS adapter shares: a snapshot cache under
14
+ * `.blume/cache/<source>/` (or a name-derived dir when constructed directly
15
+ * as a custom source, without a context), cache-first dev loads, offline
16
+ * fallback, `read()` for raw export, and an opt-in polling `watch`.
17
+ */
18
+ export declare const remoteSource: (options: RemoteSourceOptions, ctx?: SourceContext) => ContentSource;
19
+ /** The frontmatter a CMS document maps to. */
20
+ export interface RemoteFrontmatter {
21
+ description?: string;
22
+ draft?: boolean;
23
+ title?: string;
24
+ }
25
+ /**
26
+ * A staged entry: Markdown body plus the frontmatter it was mapped from,
27
+ * written as `.mdx` when the body carries serializer output (see
28
+ * `writesMdx`).
29
+ */
30
+ export declare const stagedEntry: (slug: string, data: RemoteFrontmatter, markdown: string, lastModified: string | undefined, format?: "md" | "mdx") => SourceEntry;
31
+ /** How a source calls its CMS: the API's auth headers and an injectable fetch. */
32
+ export interface RestClient {
33
+ /** Injected for tests; defaults to the global `fetch`. */
34
+ fetchImpl?: typeof fetch;
35
+ headers?: Record<string, string>;
36
+ }
37
+ /**
38
+ * How long one CMS request may take before the source gives up on it. A
39
+ * stalled CMS would otherwise hold `scanProject()` — and every `blume dev`
40
+ * rescan — indefinitely, and the cache fallback can only kick in once the
41
+ * request rejects.
42
+ */
43
+ export declare const REMOTE_TIMEOUT_MS = 30000;
44
+ /**
45
+ * GET a JSON endpoint. A non-2xx response is an error naming the status, so
46
+ * the source's cache fallback reports why (`401 Unauthorized`) instead of a
47
+ * parse failure on an error body; a request past {@link REMOTE_TIMEOUT_MS}
48
+ * rejects with a `TimeoutError`.
49
+ */
50
+ export declare const fetchJson: (url: string, client: RestClient) => Promise<JsonValue>;
51
+ /** A query string from the fixed params plus a user's extra ones. */
52
+ export declare const queryString: (params: Record<string, string | undefined>) => string;
53
+ /** Field paths mapping a CMS document onto Blume meta + body. */
54
+ export interface RemoteFieldMap {
55
+ /** Field holding the renderable body (rich text, or a Markdown string). */
56
+ body?: string;
57
+ /** Field holding the page description. */
58
+ description?: string;
59
+ /** Field holding the last-modified ISO date. */
60
+ lastModified?: string;
61
+ /** Field holding the route slug. */
62
+ slug?: string;
63
+ /** Field holding the page title. */
64
+ title?: string;
65
+ }
66
+ /**
67
+ * Map a document to a staged entry. The slug falls back to the document's id
68
+ * when the slug field is missing or slugifies to nothing (pure punctuation),
69
+ * so distinct documents never collapse onto one `untitled.md`; a slashed
70
+ * slug keeps its segments. A string body is Markdown and passes through as
71
+ * `.md`; any other shape goes to the CMS's lowerer, and is written as `.mdx`
72
+ * when `lowersToMdx` (the source has serializers, see `writesMdx`).
73
+ */
74
+ export declare const documentEntry: (doc: JsonObject, fields: Required<RemoteFieldMap>, id: string, lower: (body: JsonValue) => string, draft?: boolean, lowersToMdx?: boolean) => SourceEntry;
@@ -0,0 +1,19 @@
1
+ import type { ResolvedConfig } from "../schema.ts";
2
+ import type { ProjectContext } from "../types.ts";
3
+ import type { ContentSource } from "./types.ts";
4
+ export { resolveDocsCollection, resolveSourceRoot, sourcesOfKind, } from "./collection.ts";
5
+ export type { DocsCollection } from "./collection.ts";
6
+ /** Runtime knobs for a scan: dev/build mode, preview, and cache refresh. */
7
+ export interface SourceRuntime {
8
+ mode: "dev" | "build";
9
+ preview?: boolean;
10
+ refresh?: boolean;
11
+ }
12
+ /**
13
+ * Build the ordered list of content sources for a project. The config schema
14
+ * already desugared the zero-config shorthand into a single `filesystem()`
15
+ * descriptor, so every project has at least one entry here. A Blume-rendered
16
+ * OpenAPI reference contributes an internal staged source that lowers each
17
+ * operation into a real content page (routing/nav/search/OG).
18
+ */
19
+ export declare const resolveSources: (config: ResolvedConfig, context: ProjectContext, runtime: SourceRuntime) => ContentSource[];
@@ -0,0 +1,43 @@
1
+ import type { PortableTextBlock } from "./portable-text.ts";
2
+ import type { ContentSource, SourceContext } from "./types.ts";
3
+ /** The slice of `@sanity/client` this adapter relies on (so it's mockable). */
4
+ export interface SanityClientLike {
5
+ fetch: <T = unknown>(query: string) => Promise<T>;
6
+ }
7
+ /** Field paths mapping a Sanity document onto Blume meta + body. */
8
+ export interface SanityFieldMap {
9
+ /** Frontmatter title; default `title`. */
10
+ title?: string;
11
+ /** Frontmatter description; default `description`. */
12
+ description?: string;
13
+ /** Route slug (dot path); default `slug.current`. */
14
+ slug?: string;
15
+ /** Portable Text body field; default `body`. */
16
+ body?: string;
17
+ /** Last-modified ISO date; default `_updatedAt`. */
18
+ lastModified?: string;
19
+ }
20
+ export interface SanitySourceOptions {
21
+ name: string;
22
+ prefix?: string;
23
+ projectId: string;
24
+ dataset: string;
25
+ /** Sanity API version (a date); default `2024-01-01`. */
26
+ apiVersion?: string;
27
+ /** GROQ query selecting the documents to import. */
28
+ query: string;
29
+ fields?: SanityFieldMap;
30
+ /** Custom Portable Text block serializers, keyed by `_type`. */
31
+ serializers?: Record<string, (block: PortableTextBlock) => string>;
32
+ /** Read token for private datasets; defaults to `SANITY_TOKEN`. */
33
+ token?: string;
34
+ /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
35
+ pollInterval?: number;
36
+ /** Injected for tests; otherwise built from `@sanity/client`. */
37
+ client?: SanityClientLike;
38
+ }
39
+ /**
40
+ * Sanity content source. Runs a GROQ query, maps each document's fields to Blume
41
+ * frontmatter and its Portable Text body to Markdown, and stages the result.
42
+ */
43
+ export declare const sanitySource: (options: SanitySourceOptions, ctx?: SourceContext) => ContentSource;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Strapi's Rich text (Blocks) field → Markdown. Covers every block the
3
+ * editor emits: paragraphs, headings, lists (nested), quotes, code, images,
4
+ * and links with the text modifiers.
5
+ */
6
+ import type { JsonValue } from "./json.ts";
7
+ export interface StrapiBlocksOptions {
8
+ /** The Strapi origin a relative upload URL (`/uploads/x.png`) resolves against. */
9
+ baseUrl?: string;
10
+ }
11
+ /** Serialize a Blocks field value (an array of block nodes) to Markdown. */
12
+ export declare const strapiBlocksToMarkdown: (blocks: JsonValue, options?: StrapiBlocksOptions) => string;
@@ -0,0 +1,33 @@
1
+ import type { RemoteFieldMap } from "./remote.ts";
2
+ import type { ContentSource, SourceContext } from "./types.ts";
3
+ export interface StrapiSourceOptions {
4
+ name: string;
5
+ prefix?: string;
6
+ /** The Strapi origin (`https://cms.acme.dev`); its REST API is at `/api`. */
7
+ url: string;
8
+ /** The content type's plural API id (`articles`). */
9
+ contentType: string;
10
+ /** Locale code to fetch, for a localized content type. */
11
+ locale?: string;
12
+ /** The `populate` parameter; default `*`, which fills media and relations. */
13
+ populate?: string;
14
+ /**
15
+ * Field paths mapping an entry onto Blume meta + body. Defaults:
16
+ * `title`, `description`, `slug`, `content`, `updatedAt`.
17
+ */
18
+ fields?: RemoteFieldMap;
19
+ /** Extra query parameters for the request (`filters[...]`, `sort`). */
20
+ params?: Record<string, string>;
21
+ /** API token; defaults to `STRAPI_API_TOKEN`. */
22
+ token?: string;
23
+ /** Opt-in dev polling interval (seconds); omit to freeze for the session. */
24
+ pollInterval?: number;
25
+ /** Injected for tests; defaults to the global `fetch`. */
26
+ fetchImpl?: typeof fetch;
27
+ }
28
+ /**
29
+ * Strapi content source. Pages through a content type's REST endpoint, maps
30
+ * each entry's fields to frontmatter, and lowers its Blocks body to
31
+ * Markdown. Published entries only, unless `--preview` asks for drafts.
32
+ */
33
+ export declare const strapiSource: (options: StrapiSourceOptions, ctx?: SourceContext) => ContentSource;
@@ -113,6 +113,12 @@ export interface ContentSource {
113
113
  readonly staged: boolean;
114
114
  /** Optional route prefix; the source's routes namespace under `/<prefix>/`. */
115
115
  readonly prefix?: string;
116
+ /**
117
+ * True for a source whose entries exist in one language and can never be
118
+ * translated (GitHub Releases). Its pages render without a language
119
+ * switcher, since every other locale would only repeat the same text.
120
+ */
121
+ readonly monolingual?: boolean;
116
122
  /**
117
123
  * Resolved on-disk root, set by sources whose entries live on disk. For
118
124
  * filesystem sources it drives folder-meta discovery (scan under this root)
@@ -137,6 +143,7 @@ export interface ContentSource {
137
143
  /** Context passed to `normalizeEntry`, describing the owning source. */
138
144
  export interface NormalizeContext {
139
145
  source: {
146
+ monolingual?: boolean;
140
147
  name: string;
141
148
  prefix?: string;
142
149
  staged: boolean;
@@ -0,0 +1,45 @@
1
+ import type { WatchListener } from "node:fs";
2
+ /**
3
+ * Directory segments that are never authored content: VCS, dependency trees,
4
+ * Blume's own generated project and build output, and framework/deploy caches.
5
+ * Both the content scan and the dev watcher skip these unconditionally, on top
6
+ * of the user's `content.exclude`.
7
+ *
8
+ * The scan needs them because a broadly-scoped `content.root` — `"."` or an app
9
+ * dir that also holds `node_modules`/`dist`, the common shape when migrating a
10
+ * docs app that lives at the repo or app root — would otherwise glob thousands
11
+ * of stray markdown files out of dependencies and build artifacts. `content.root`
12
+ * defaults to `docs/` where this rarely bites, but any wider root hits it.
13
+ *
14
+ * The watcher needs them because a recursive `fs.watch` rooted at the project
15
+ * also sees Blume's own `.blume/` output, which the dev server rewrites on every
16
+ * render (e.g. `.blume/.astro/data-store.json`). Left unfiltered, each such write
17
+ * re-triggers a rescan + runtime regeneration whose writes land back under
18
+ * `.blume/` and fire the watcher again: a self-sustaining loop that stalls page
19
+ * renders and floods the console. `fs.watch` has no ignore option, so we filter
20
+ * by the changed path in the callback.
21
+ */
22
+ export declare const BLUME_IGNORE_DIRS: string[];
23
+ /**
24
+ * Baseline scan-ignore globs applied to every filesystem source, unioned with
25
+ * the user's `content.exclude`. Kept in sync with the watcher via the shared
26
+ * {@link BLUME_IGNORE_DIRS} so `load()` and `watch()` never disagree on what is
27
+ * content. `**\/<dir>/**` matches the directory at the content root or nested.
28
+ */
29
+ export declare const baselineScanIgnore: () => string[];
30
+ /**
31
+ * Alias retained for the dev watcher's call site and its tests; the watcher and
32
+ * the scan share the same never-content directory set.
33
+ */
34
+ export declare const BLUME_WATCH_IGNORE_DIRS: string[];
35
+ /** Extract single-segment ignore dirs (`foo`) from `foo/**`-style excludes. */
36
+ export declare const excludeDirSegments: (patterns: readonly string[]) => string[];
37
+ /**
38
+ * Build a recursive-watch listener that fires `onChange` for content changes but
39
+ * ignores events whose path crosses an ignored directory segment — one in
40
+ * `ignoreDirs`, or one `ignoreSegment` rejects, for a scan whose skip rule is
41
+ * a shape (every dot-name) rather than a list. A missing `filename` — rare;
42
+ * the platform couldn't name the changed path — falls through to `onChange`
43
+ * rather than silently dropping a real edit. Exported for testing.
44
+ */
45
+ export declare const ignoringWatchListener: (onChange: () => void, ignoreDirs?: Iterable<string>, ignoreSegment?: (segment: string) => boolean) => WatchListener<string>;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The longest prefix of `text` that renders within `max` display columns
3
+ * without cutting inside a grapheme cluster. Columns are `string-width`'s: a
4
+ * fullwidth or wide character counts 2, a combining mark 0, everything else 1
5
+ * — the same measure `blume audit` grades titles and meta descriptions with,
6
+ * so text cut here stays inside the audit's thresholds for every script, not
7
+ * just Latin. Grapheme segmentation is rule-based (UAX #29), so unlike word
8
+ * segmentation it does not drift across ICU builds, and it can never split a
9
+ * surrogate pair or halve an emoji sequence.
10
+ */
11
+ export declare const columnsPrefix: (text: string, max: number) => string;
@@ -147,6 +147,11 @@ export interface PageRecord {
147
147
  * checks skip these.
148
148
  */
149
149
  fallback?: boolean;
150
+ /**
151
+ * True for pages from a source that publishes one language only (GitHub
152
+ * Releases): they render without a language switcher.
153
+ */
154
+ monolingual?: boolean;
150
155
  /**
151
156
  * Content-relative path with the leading locale directory stripped, used for
152
157
  * sidebar grouping so the locale dir is not surfaced as a nav group. Equals
@@ -294,6 +299,13 @@ export interface Navigation {
294
299
  featured: FeaturedLink[];
295
300
  /** Repo URL for the header link, or null when hidden (`navigation.repo`). */
296
301
  repoUrl?: string | null;
302
+ /**
303
+ * Where the header's brand link points in this locale: `logo.href` moved
304
+ * into the locale's prefix when the locale serves that route, else left on
305
+ * the default route (a custom home page exists only at `/`). Set on i18n
306
+ * locale trees.
307
+ */
308
+ brandHref?: string;
297
309
  }
298
310
  /** The full content graph: the source of truth for generated modules. */
299
311
  export interface ContentGraph {
@@ -378,6 +390,8 @@ export interface RouteManifestEntry {
378
390
  versionAlternates: VersionAlternate[];
379
391
  /** True when this route renders fallback content for a missing translation. */
380
392
  fallback?: boolean;
393
+ /** True when the page's source publishes one language only (no switcher). */
394
+ monolingual?: boolean;
381
395
  /** Resolved "last updated" ISO date, when the feature is enabled. */
382
396
  lastModified?: string;
383
397
  }
@@ -387,7 +401,7 @@ export interface BlumeManifest {
387
401
  blumeVersion: string;
388
402
  projectRoot: string;
389
403
  contentRoot: string;
390
- output: ResolvedConfig["deployment"]["output"];
404
+ output: ResolvedConfig["deployment"]["options"]["output"];
391
405
  routes: RouteManifestEntry[];
392
406
  }
393
407
  export {};
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Zod's own wording for unknown keys no removed-key hint covers, appended to
3
+ * a hint so an unrelated typo isn't silently dropped from the diagnostic
4
+ * beside it. Shared by every config object that names a removed field's
5
+ * replacement (the root config, `ai.ask`, `openapi()`/`asyncapi()`, …).
6
+ */
7
+ export declare const unrecognizedKeysMessage: (keys: string[]) => string;