blume 2.0.3 → 2.1.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 (455) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +48 -0
  3. package/README.md +1 -1
  4. package/dist/cli/{chunk-1d7ve1dm.js → chunk-0gz36akr.js} +18 -2
  5. package/dist/cli/{chunk-1d7ve1dm.js.map → chunk-0gz36akr.js.map} +3 -3
  6. package/dist/cli/{chunk-2eytanqx.js → chunk-1n228xqb.js} +2 -2
  7. package/dist/cli/{chunk-yfyb25rh.js → chunk-2f3ndkpw.js} +24 -8
  8. package/dist/cli/chunk-2f3ndkpw.js.map +14 -0
  9. package/dist/cli/{chunk-r20tn01b.js → chunk-2f7n4qzt.js} +8 -2
  10. package/dist/cli/{chunk-r20tn01b.js.map → chunk-2f7n4qzt.js.map} +3 -3
  11. package/dist/cli/{chunk-35d4wj9f.js → chunk-2n4ps1b3.js} +7 -7
  12. package/dist/cli/{chunk-j85vccga.js → chunk-43zcf4gz.js} +97 -57
  13. package/dist/cli/{chunk-j85vccga.js.map → chunk-43zcf4gz.js.map} +6 -6
  14. package/dist/cli/{chunk-e04dxsz1.js → chunk-4ejxbzee.js} +1 -1
  15. package/dist/cli/{chunk-5m5nmvyq.js → chunk-4h8z9vv5.js} +233 -39
  16. package/dist/cli/chunk-4h8z9vv5.js.map +16 -0
  17. package/dist/cli/{chunk-5f86nr5m.js → chunk-5cg2rzgf.js} +18 -16
  18. package/dist/cli/{chunk-5f86nr5m.js.map → chunk-5cg2rzgf.js.map} +2 -2
  19. package/dist/cli/{chunk-tzmab476.js → chunk-5ffywsmb.js} +4 -4
  20. package/dist/cli/{chunk-2z928egk.js → chunk-5wj2qwn2.js} +5 -5
  21. package/dist/cli/chunk-6bm0xpgd.js +18 -0
  22. package/dist/cli/chunk-6bm0xpgd.js.map +10 -0
  23. package/dist/cli/{chunk-vg9r4eb9.js → chunk-713mngdq.js} +12 -5
  24. package/dist/cli/{chunk-vg9r4eb9.js.map → chunk-713mngdq.js.map} +3 -3
  25. package/dist/cli/{chunk-5xvm6tfj.js → chunk-9geymqns.js} +17 -15
  26. package/dist/cli/{chunk-5xvm6tfj.js.map → chunk-9geymqns.js.map} +2 -2
  27. package/dist/cli/{chunk-q58y5e6a.js → chunk-9xr4dgee.js} +26 -17
  28. package/dist/cli/chunk-9xr4dgee.js.map +10 -0
  29. package/dist/cli/{chunk-b07cmahc.js → chunk-amrb6hgh.js} +2 -2
  30. package/dist/cli/chunk-cm89scdv.js +443 -0
  31. package/dist/cli/chunk-cm89scdv.js.map +11 -0
  32. package/dist/cli/{chunk-akbpwfxc.js → chunk-cmtcnh9f.js} +2 -2
  33. package/dist/cli/chunk-cy5bm0j0.js +104 -0
  34. package/dist/cli/chunk-cy5bm0j0.js.map +11 -0
  35. package/dist/cli/{chunk-crgn1q09.js → chunk-e7vvk5ya.js} +4 -4
  36. package/dist/cli/{chunk-pehfxfta.js → chunk-g2z9x01v.js} +6 -98
  37. package/dist/cli/chunk-g2z9x01v.js.map +10 -0
  38. package/dist/cli/{chunk-tkacnehg.js → chunk-gp84za0h.js} +2 -2
  39. package/dist/cli/{chunk-wrr3j9w9.js → chunk-h2a48yhd.js} +186 -63
  40. package/dist/cli/chunk-h2a48yhd.js.map +36 -0
  41. package/dist/cli/{chunk-hm3vjy5s.js → chunk-jnwj5kjj.js} +14 -9
  42. package/dist/cli/{chunk-hm3vjy5s.js.map → chunk-jnwj5kjj.js.map} +4 -4
  43. package/dist/cli/chunk-kwrg63tm.js +31 -0
  44. package/dist/cli/chunk-kwrg63tm.js.map +10 -0
  45. package/dist/cli/{chunk-2hsdwb9n.js → chunk-nd1821sk.js} +18 -16
  46. package/dist/cli/{chunk-2hsdwb9n.js.map → chunk-nd1821sk.js.map} +2 -2
  47. package/dist/cli/{chunk-6dsbexzp.js → chunk-ntv4qrt7.js} +17 -15
  48. package/dist/cli/{chunk-6dsbexzp.js.map → chunk-ntv4qrt7.js.map} +2 -2
  49. package/dist/cli/{chunk-r9rcc4w7.js → chunk-p804f3pe.js} +7 -7
  50. package/dist/cli/{chunk-ey84smr6.js → chunk-py62fewh.js} +6 -6
  51. package/dist/cli/{chunk-ey84smr6.js.map → chunk-py62fewh.js.map} +1 -1
  52. package/dist/cli/chunk-q3wxxq39.js +126 -0
  53. package/dist/cli/chunk-q3wxxq39.js.map +11 -0
  54. package/dist/cli/{chunk-9t7a85s3.js → chunk-rekqz4qg.js} +23 -13
  55. package/dist/cli/chunk-rekqz4qg.js.map +10 -0
  56. package/dist/cli/{chunk-8ktnccpt.js → chunk-ta27feev.js} +1 -1
  57. package/dist/cli/{chunk-pv29h0wf.js → chunk-xkz5xbtv.js} +3476 -822
  58. package/dist/cli/chunk-xkz5xbtv.js.map +213 -0
  59. package/dist/cli/{chunk-a58773jm.js → chunk-y4ykbark.js} +2 -2
  60. package/dist/cli/{chunk-p3v96n38.js → chunk-y5h4r2y0.js} +4 -4
  61. package/dist/cli/{chunk-acanzt5p.js → chunk-yj17vs39.js} +6 -6
  62. package/dist/cli/{chunk-p73c0m7w.js → chunk-yxmk4pec.js} +16 -14
  63. package/dist/cli/{chunk-p73c0m7w.js.map → chunk-yxmk4pec.js.map} +2 -2
  64. package/dist/cli/{chunk-3em5wd2y.js → chunk-zccbjcj0.js} +4 -3
  65. package/dist/cli/{chunk-3em5wd2y.js.map → chunk-zccbjcj0.js.map} +2 -2
  66. package/dist/cli/{chunk-c8chx29p.js → chunk-zf748avv.js} +384 -207
  67. package/dist/cli/chunk-zf748avv.js.map +37 -0
  68. package/dist/cli/{chunk-g4hq16wv.js → chunk-zhvd6adm.js} +16 -14
  69. package/dist/cli/{chunk-g4hq16wv.js.map → chunk-zhvd6adm.js.map} +2 -2
  70. package/dist/cli/index.js +26 -20
  71. package/dist/cli/index.js.map +5 -5
  72. package/dist/types/ai/agent-surface.d.ts +8 -7
  73. package/dist/types/ai/ai-catalog.d.ts +7 -0
  74. package/dist/types/ai/ask-context.d.ts +22 -0
  75. package/dist/types/ai/ask.d.ts +271 -58
  76. package/dist/types/ai/index.d.ts +2 -2
  77. package/dist/types/ai/site-skill.d.ts +26 -0
  78. package/dist/types/ai/skills.d.ts +16 -0
  79. package/dist/types/astro/integration.d.ts +8 -0
  80. package/dist/types/captcha/hcaptcha.d.ts +27 -0
  81. package/dist/types/captcha/index.d.ts +28 -0
  82. package/dist/types/captcha/schema.d.ts +29 -0
  83. package/dist/types/captcha/turnstile.d.ts +28 -0
  84. package/dist/types/components/content/api-field.d.ts +59 -0
  85. package/dist/types/components/content/api-page.d.ts +95 -0
  86. package/dist/types/components/layout/nav-utils.d.ts +26 -0
  87. package/dist/types/components/openapi/helpers.d.ts +137 -0
  88. package/dist/types/components/openapi/security.d.ts +85 -0
  89. package/dist/types/consent/ethyca.d.ts +48 -0
  90. package/dist/types/consent/index.d.ts +37 -0
  91. package/dist/types/consent/native.d.ts +28 -0
  92. package/dist/types/consent/osano.d.ts +42 -0
  93. package/dist/types/consent/schema.d.ts +110 -0
  94. package/dist/types/core/config-input.d.ts +187 -20
  95. package/dist/types/core/data.d.ts +49 -4
  96. package/dist/types/core/footer.d.ts +8 -0
  97. package/dist/types/core/i18n-ui.d.ts +86 -0
  98. package/dist/types/core/includes.d.ts +8 -2
  99. package/dist/types/core/localizable.d.ts +7 -0
  100. package/dist/types/core/page-modes.d.ts +29 -0
  101. package/dist/types/core/redirect-patterns.d.ts +144 -0
  102. package/dist/types/core/related.d.ts +40 -0
  103. package/dist/types/core/schema.d.ts +551 -56
  104. package/dist/types/core/sources/read.d.ts +5 -0
  105. package/dist/types/core/types.d.ts +1 -1
  106. package/dist/types/core/variables.d.ts +42 -0
  107. package/dist/types/deploy/node-headers.d.ts +13 -2
  108. package/dist/types/deploy/platforms/cloudflare.d.ts +5 -0
  109. package/dist/types/deploy/platforms/netlify.d.ts +7 -0
  110. package/dist/types/deploy/platforms/vercel.d.ts +6 -0
  111. package/dist/types/deploy/redirects.d.ts +39 -11
  112. package/dist/types/deploy/vercel-negotiation.d.ts +9 -0
  113. package/dist/types/markdown/code-title.d.ts +17 -0
  114. package/dist/types/markdown/features.d.ts +3 -2
  115. package/dist/types/narration/build.d.ts +70 -0
  116. package/dist/types/narration/provider.d.ts +26 -0
  117. package/dist/types/narration/script.d.ts +154 -0
  118. package/dist/types/openapi/model.d.ts +12 -6
  119. package/dist/types/openapi/overlay.d.ts +54 -0
  120. package/dist/types/openapi/parse.d.ts +13 -0
  121. package/dist/types/openapi/references.d.ts +14 -4
  122. package/dist/types/ratelimit/cloudflare.d.ts +39 -0
  123. package/dist/types/ratelimit/index.d.ts +27 -0
  124. package/dist/types/ratelimit/memory.d.ts +36 -0
  125. package/dist/types/ratelimit/schema.d.ts +111 -0
  126. package/dist/types/ratelimit/upstash.d.ts +21 -0
  127. package/dist/types/ratelimit/wrangler.d.ts +23 -0
  128. package/dist/types/reference/asyncapi.d.ts +10 -10
  129. package/dist/types/reference/graphql.d.ts +13 -10
  130. package/dist/types/reference/openapi.d.ts +33 -12
  131. package/dist/types/reference/options.d.ts +45 -5
  132. package/dist/types/reference/scalar.d.ts +13 -0
  133. package/dist/types/reference/schema.d.ts +60 -36
  134. package/dist/types/search/documents.d.ts +12 -1
  135. package/dist/types/search/orama-index.d.ts +4 -0
  136. package/dist/types/seo/metatags.d.ts +20 -0
  137. package/docs/02-deployment.mdx +41 -5
  138. package/docs/03-upgrading.mdx +4 -4
  139. package/docs/04-migrating.mdx +1 -1
  140. package/docs/advanced/changelog.mdx +2 -2
  141. package/docs/advanced/skills.mdx +14 -0
  142. package/docs/cli/audit.mdx +21 -1
  143. package/docs/cli/index.mdx +1 -0
  144. package/docs/configuration/analytics.mdx +3 -1
  145. package/docs/configuration/assistant.mdx +188 -36
  146. package/docs/configuration/consent.mdx +100 -0
  147. package/docs/configuration/customization.mdx +4 -4
  148. package/docs/configuration/index.mdx +63 -5
  149. package/docs/configuration/meta.ts +3 -0
  150. package/docs/configuration/narration.mdx +119 -0
  151. package/docs/configuration/rate-limiting.mdx +69 -0
  152. package/docs/configuration/search.mdx +29 -1
  153. package/docs/configuration/theming.mdx +3 -1
  154. package/docs/content/components.mdx +106 -0
  155. package/docs/content/frontmatter.mdx +76 -0
  156. package/docs/content/i18n.mdx +38 -3
  157. package/docs/content/includes.mdx +16 -0
  158. package/docs/content/meta.mdx +1 -0
  159. package/docs/content/meta.ts +1 -0
  160. package/docs/content/navigation.mdx +28 -6
  161. package/docs/content/sources/contentful.mdx +32 -0
  162. package/docs/content/sources/custom.mdx +39 -0
  163. package/docs/content/sources/github-releases.mdx +31 -0
  164. package/docs/content/sources/index.mdx +91 -0
  165. package/docs/content/sources/meta.ts +16 -0
  166. package/docs/content/sources/notion.mdx +32 -0
  167. package/docs/content/sources/obsidian.mdx +37 -0
  168. package/docs/content/sources/payload.mdx +30 -0
  169. package/docs/content/sources/remote-mdx.mdx +40 -0
  170. package/docs/content/sources/sanity.mdx +29 -0
  171. package/docs/content/sources/strapi.mdx +31 -0
  172. package/docs/content/syntax.mdx +67 -2
  173. package/docs/content/variables.mdx +41 -0
  174. package/docs/discoverability/agent-discovery.mdx +29 -2
  175. package/docs/discoverability/index.mdx +1 -1
  176. package/docs/discoverability/llms-txt.mdx +1 -1
  177. package/docs/discoverability/metadata.mdx +17 -0
  178. package/docs/references/api-pages.mdx +74 -0
  179. package/docs/references/asyncapi.mdx +1 -1
  180. package/docs/references/graphql.mdx +2 -2
  181. package/docs/references/meta.ts +1 -1
  182. package/docs/references/openapi.mdx +102 -3
  183. package/docs/references/scalar.mdx +3 -1
  184. package/package.json +36 -1
  185. package/skills/blume/SKILL.md +3 -0
  186. package/skills/blume-migrate/SKILL.md +5 -5
  187. package/skills/blume-migrate/references/docusaurus.md +3 -3
  188. package/skills/blume-migrate/references/mintlify.md +37 -19
  189. package/skills/blume-migrate/references/nextra.md +2 -2
  190. package/skills/blume-migrate/references/starlight.md +2 -1
  191. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +60 -14
  192. package/skills/blume-write-skill/SKILL.md +82 -0
  193. package/src/ai/agent-readability.ts +2 -1
  194. package/src/ai/agent-surface.ts +9 -7
  195. package/src/ai/ai-catalog.ts +6 -3
  196. package/src/ai/ask-context.ts +73 -20
  197. package/src/ai/ask-data.ts +6 -0
  198. package/src/ai/ask-tools.ts +142 -0
  199. package/src/ai/ask.ts +354 -76
  200. package/src/ai/component-markdown.ts +75 -0
  201. package/src/ai/cors.ts +2 -0
  202. package/src/ai/index.ts +12 -0
  203. package/src/ai/llms.ts +6 -2
  204. package/src/ai/markdown.ts +2 -1
  205. package/src/ai/mcp/data.ts +6 -0
  206. package/src/ai/openapi-components.ts +9 -3
  207. package/src/ai/site-skill.ts +274 -0
  208. package/src/ai/skills.ts +35 -2
  209. package/src/ai/write-skill.ts +97 -0
  210. package/src/astro/generate.ts +132 -18
  211. package/src/astro/index.ts +1 -0
  212. package/src/astro/integration.ts +35 -0
  213. package/src/astro/module-types.ts +6 -0
  214. package/src/astro/templates.ts +283 -30
  215. package/src/astro/variables.ts +31 -0
  216. package/src/audit/catalog.ts +19 -0
  217. package/src/audit/checks/contrast.ts +183 -0
  218. package/src/audit/checks/i18n.ts +2 -3
  219. package/src/audit/checks/indexability.ts +2 -3
  220. package/src/audit/checks/links.ts +5 -12
  221. package/src/audit/checks/sitemap.ts +2 -3
  222. package/src/audit/redirects.ts +46 -15
  223. package/src/audit/run.ts +2 -0
  224. package/src/audit/types.ts +2 -1
  225. package/src/blume-modules.d.ts +7 -0
  226. package/src/captcha/client.ts +152 -0
  227. package/src/captcha/hcaptcha.ts +36 -0
  228. package/src/captcha/index.ts +28 -0
  229. package/src/captcha/schema.ts +32 -0
  230. package/src/captcha/turnstile.ts +38 -0
  231. package/src/captcha/verify.ts +71 -0
  232. package/src/cli/command-meta.ts +5 -0
  233. package/src/cli/commands/doctor.ts +22 -16
  234. package/src/cli/commands/skill.ts +96 -0
  235. package/src/cli/index.ts +5 -0
  236. package/src/cli/required-secrets.ts +71 -29
  237. package/src/components/BlumePage.astro +2 -0
  238. package/src/components/content/ApiEndpoint.astro +18 -0
  239. package/src/components/content/ApiField.astro +79 -0
  240. package/src/components/content/ApiPlayground.astro +62 -0
  241. package/src/components/content/ApiRail.astro +19 -0
  242. package/src/components/content/Color.astro +1 -0
  243. package/src/components/content/FileTree.astro +1 -0
  244. package/src/components/content/GithubInfo.astro +1 -0
  245. package/src/components/content/Panel.astro +1 -0
  246. package/src/components/content/ParamField.astro +25 -0
  247. package/src/components/content/RequestExample.astro +17 -0
  248. package/src/components/content/ResponseExample.astro +17 -0
  249. package/src/components/content/ResponseField.astro +32 -0
  250. package/src/components/content/Step.astro +1 -0
  251. package/src/components/content/Tile.astro +1 -0
  252. package/src/components/content/Tooltip.astro +1 -0
  253. package/src/components/content/Tree.astro +1 -0
  254. package/src/components/content/TypeTable.astro +4 -1
  255. package/src/components/content/View.astro +21 -0
  256. package/src/components/content/ViewSwitcher.astro +168 -0
  257. package/src/components/content/api-field.ts +100 -0
  258. package/src/components/content/api-page.ts +224 -0
  259. package/src/components/content/view-switcher.ts +71 -0
  260. package/src/components/index.ts +2 -0
  261. package/src/components/islands/Assistant.astro +10 -1
  262. package/src/components/islands/assistant.tsx +104 -14
  263. package/src/components/islands/code-question.ts +62 -0
  264. package/src/components/islands/hooks.ts +110 -21
  265. package/src/components/islands/support-link.ts +68 -0
  266. package/src/components/layout/Analytics.astro +11 -2
  267. package/src/components/layout/Banner.astro +14 -10
  268. package/src/components/layout/Breadcrumbs.astro +6 -2
  269. package/src/components/layout/ConsentBanner.astro +62 -0
  270. package/src/components/layout/ConsentHead.astro +38 -0
  271. package/src/components/layout/Directory.astro +94 -0
  272. package/src/components/layout/DrawerSwitchers.astro +51 -0
  273. package/src/components/layout/Empty.astro +2 -2
  274. package/src/components/layout/Header.astro +122 -80
  275. package/src/components/layout/LanguageSwitcher.astro +48 -15
  276. package/src/components/layout/NarrationPlayer.astro +1085 -0
  277. package/src/components/layout/NavSelector.astro +33 -7
  278. package/src/components/layout/PageFeedback.astro +54 -49
  279. package/src/components/layout/PageLayout.astro +71 -3
  280. package/src/components/layout/ReferenceLayout.astro +17 -6
  281. package/src/components/layout/RelatedPages.astro +42 -0
  282. package/src/components/layout/RootLayout.astro +308 -45
  283. package/src/components/layout/Search.astro +31 -17
  284. package/src/components/layout/SiteFooter.astro +124 -0
  285. package/src/components/layout/SiteMetatags.astro +16 -0
  286. package/src/components/layout/consent/native.ts +79 -0
  287. package/src/components/layout/consent/types.ts +37 -0
  288. package/src/components/layout/footer-links.ts +53 -0
  289. package/src/components/layout/footer-socials.ts +87 -0
  290. package/src/components/layout/locale-redirect.ts +107 -0
  291. package/src/components/layout/nav-utils.ts +83 -0
  292. package/src/components/layout/page-feedback.ts +96 -0
  293. package/src/components/layout/search/analytics.ts +98 -0
  294. package/src/components/layout/search/flexsearch.ts +17 -5
  295. package/src/components/layout/search/orama-cloud.ts +26 -14
  296. package/src/components/layout/search/types.ts +20 -0
  297. package/src/components/layout/search/typesense.ts +5 -1
  298. package/src/components/openapi/Operation.astro +161 -13
  299. package/src/components/openapi/RequestBody.astro +6 -4
  300. package/src/components/openapi/RequestPanel.astro +59 -7
  301. package/src/components/openapi/Responses.astro +6 -4
  302. package/src/components/openapi/async-snippets.ts +4 -4
  303. package/src/components/openapi/code-samples.ts +97 -0
  304. package/src/components/openapi/security.ts +6 -3
  305. package/src/components/openapi/snippets.ts +869 -8
  306. package/src/components/props.ts +6 -0
  307. package/src/consent/client.ts +95 -0
  308. package/src/consent/clients.ts +19 -0
  309. package/src/consent/ethyca.ts +71 -0
  310. package/src/consent/head.ts +24 -0
  311. package/src/consent/index.ts +37 -0
  312. package/src/consent/init.ts +29 -0
  313. package/src/consent/native.ts +36 -0
  314. package/src/consent/osano.ts +59 -0
  315. package/src/consent/schema.ts +30 -0
  316. package/src/core/builtin-tags.ts +5 -0
  317. package/src/core/client-address.ts +19 -0
  318. package/src/core/config-input.ts +194 -20
  319. package/src/core/data.ts +44 -4
  320. package/src/core/diagnostics.ts +3 -2
  321. package/src/core/footer.ts +26 -0
  322. package/src/core/graph.ts +39 -36
  323. package/src/core/i18n-ui.ts +82 -2
  324. package/src/core/includes.ts +20 -3
  325. package/src/core/links.ts +16 -2
  326. package/src/core/localizable.ts +26 -0
  327. package/src/core/navigation.ts +43 -12
  328. package/src/core/page-modes.ts +56 -0
  329. package/src/core/project-graph.ts +111 -5
  330. package/src/core/redirect-patterns.ts +491 -0
  331. package/src/core/related.ts +131 -0
  332. package/src/core/schema.ts +318 -64
  333. package/src/core/sources/normalize.ts +2 -1
  334. package/src/core/sources/read.ts +8 -3
  335. package/src/core/types.ts +1 -1
  336. package/src/core/ui-packs/ar.ts +43 -0
  337. package/src/core/ui-packs/bg.ts +45 -0
  338. package/src/core/ui-packs/bn.ts +43 -0
  339. package/src/core/ui-packs/ca.ts +46 -0
  340. package/src/core/ui-packs/cs.ts +44 -0
  341. package/src/core/ui-packs/da.ts +45 -0
  342. package/src/core/ui-packs/de.ts +46 -0
  343. package/src/core/ui-packs/el.ts +45 -0
  344. package/src/core/ui-packs/es.ts +46 -0
  345. package/src/core/ui-packs/fa.ts +45 -0
  346. package/src/core/ui-packs/fi.ts +45 -0
  347. package/src/core/ui-packs/fr.ts +46 -0
  348. package/src/core/ui-packs/he.ts +43 -0
  349. package/src/core/ui-packs/hi.ts +44 -0
  350. package/src/core/ui-packs/hr.ts +45 -0
  351. package/src/core/ui-packs/hu.ts +44 -0
  352. package/src/core/ui-packs/id.ts +45 -0
  353. package/src/core/ui-packs/it.ts +45 -0
  354. package/src/core/ui-packs/ja.ts +45 -0
  355. package/src/core/ui-packs/ko.ts +44 -0
  356. package/src/core/ui-packs/nl.ts +46 -0
  357. package/src/core/ui-packs/no.ts +44 -0
  358. package/src/core/ui-packs/pl.ts +45 -0
  359. package/src/core/ui-packs/pt-br.ts +46 -0
  360. package/src/core/ui-packs/pt.ts +45 -0
  361. package/src/core/ui-packs/ro.ts +45 -0
  362. package/src/core/ui-packs/ru.ts +45 -0
  363. package/src/core/ui-packs/sk.ts +44 -0
  364. package/src/core/ui-packs/sr.ts +45 -0
  365. package/src/core/ui-packs/sv.ts +44 -0
  366. package/src/core/ui-packs/th.ts +43 -0
  367. package/src/core/ui-packs/tr.ts +45 -0
  368. package/src/core/ui-packs/uk.ts +45 -0
  369. package/src/core/ui-packs/vi.ts +45 -0
  370. package/src/core/ui-packs/zh-tw.ts +43 -0
  371. package/src/core/ui-packs/zh.ts +43 -0
  372. package/src/core/variables.ts +103 -0
  373. package/src/deploy/artifacts.ts +77 -8
  374. package/src/deploy/cloudflare-negotiation.ts +35 -5
  375. package/src/deploy/headers.ts +2 -1
  376. package/src/deploy/node-headers.ts +63 -9
  377. package/src/deploy/platforms/cloudflare.ts +32 -0
  378. package/src/deploy/platforms/netlify.ts +33 -1
  379. package/src/deploy/platforms/vercel.ts +37 -2
  380. package/src/deploy/redirects.ts +91 -24
  381. package/src/deploy/vercel-negotiation.ts +36 -0
  382. package/src/markdown/api-rail.ts +259 -0
  383. package/src/markdown/code-title.ts +35 -9
  384. package/src/markdown/features.ts +3 -2
  385. package/src/markdown/fence-meta.ts +2 -0
  386. package/src/markdown/include.ts +11 -1
  387. package/src/markdown/index.ts +28 -5
  388. package/src/markdown/math.ts +4 -4
  389. package/src/markdown/variables.ts +56 -0
  390. package/src/markdown/views.ts +82 -0
  391. package/src/narration/build.ts +412 -0
  392. package/src/narration/player.ts +249 -0
  393. package/src/narration/provider.ts +29 -0
  394. package/src/narration/script.ts +592 -0
  395. package/src/og/card.ts +7 -6
  396. package/src/openapi/model.ts +57 -24
  397. package/src/openapi/overlay.ts +256 -0
  398. package/src/openapi/parse.ts +55 -2
  399. package/src/openapi/references.ts +21 -5
  400. package/src/openapi/render-mdx.ts +5 -1
  401. package/src/openapi/scalar.ts +40 -6
  402. package/src/openapi/source.ts +1 -1
  403. package/src/ratelimit/cloudflare.ts +54 -0
  404. package/src/ratelimit/index.ts +30 -0
  405. package/src/ratelimit/memory.ts +45 -0
  406. package/src/ratelimit/runtime.ts +229 -0
  407. package/src/ratelimit/schema.ts +28 -0
  408. package/src/ratelimit/upstash.ts +30 -0
  409. package/src/ratelimit/wrangler.ts +70 -0
  410. package/src/reference/asyncapi.ts +2 -2
  411. package/src/reference/graphql.ts +5 -2
  412. package/src/reference/openapi.ts +21 -7
  413. package/src/reference/options.ts +51 -7
  414. package/src/reference/scalar.ts +33 -8
  415. package/src/registry/eject.ts +20 -4
  416. package/src/registry/registry.ts +7 -0
  417. package/src/search/documents.ts +26 -2
  418. package/src/search/orama-index.ts +28 -3
  419. package/src/search/pagefind-ranking.ts +39 -0
  420. package/src/search/sync/algolia.ts +15 -4
  421. package/src/search/sync/orama-cloud.ts +3 -0
  422. package/src/search/sync/typesense.ts +5 -0
  423. package/src/seo/metatags.ts +67 -0
  424. package/src/theme/chrome-icons.ts +1 -0
  425. package/src/theme/color.ts +500 -0
  426. package/src/theme/entry.ts +56 -3
  427. package/src/theme/palette.ts +121 -45
  428. package/src/translate/prompts.ts +1 -0
  429. package/src/translate/validate.ts +8 -2
  430. package/src/upgrade/upgrade.ts +4 -171
  431. package/dist/cli/chunk-364znk6q.js +0 -75
  432. package/dist/cli/chunk-364znk6q.js.map +0 -11
  433. package/dist/cli/chunk-5m5nmvyq.js.map +0 -13
  434. package/dist/cli/chunk-9t7a85s3.js.map +0 -10
  435. package/dist/cli/chunk-c8chx29p.js.map +0 -36
  436. package/dist/cli/chunk-pehfxfta.js.map +0 -10
  437. package/dist/cli/chunk-pv29h0wf.js.map +0 -190
  438. package/dist/cli/chunk-q58y5e6a.js.map +0 -10
  439. package/dist/cli/chunk-wrr3j9w9.js.map +0 -35
  440. package/dist/cli/chunk-yfyb25rh.js.map +0 -14
  441. package/docs/content/sources.mdx +0 -334
  442. /package/dist/cli/{chunk-2eytanqx.js.map → chunk-1n228xqb.js.map} +0 -0
  443. /package/dist/cli/{chunk-35d4wj9f.js.map → chunk-2n4ps1b3.js.map} +0 -0
  444. /package/dist/cli/{chunk-e04dxsz1.js.map → chunk-4ejxbzee.js.map} +0 -0
  445. /package/dist/cli/{chunk-tzmab476.js.map → chunk-5ffywsmb.js.map} +0 -0
  446. /package/dist/cli/{chunk-2z928egk.js.map → chunk-5wj2qwn2.js.map} +0 -0
  447. /package/dist/cli/{chunk-b07cmahc.js.map → chunk-amrb6hgh.js.map} +0 -0
  448. /package/dist/cli/{chunk-akbpwfxc.js.map → chunk-cmtcnh9f.js.map} +0 -0
  449. /package/dist/cli/{chunk-crgn1q09.js.map → chunk-e7vvk5ya.js.map} +0 -0
  450. /package/dist/cli/{chunk-tkacnehg.js.map → chunk-gp84za0h.js.map} +0 -0
  451. /package/dist/cli/{chunk-r9rcc4w7.js.map → chunk-p804f3pe.js.map} +0 -0
  452. /package/dist/cli/{chunk-8ktnccpt.js.map → chunk-ta27feev.js.map} +0 -0
  453. /package/dist/cli/{chunk-a58773jm.js.map → chunk-y4ykbark.js.map} +0 -0
  454. /package/dist/cli/{chunk-p3v96n38.js.map → chunk-y5h4r2y0.js.map} +0 -0
  455. /package/dist/cli/{chunk-acanzt5p.js.map → chunk-yj17vs39.js.map} +0 -0
@@ -16,6 +16,11 @@ export declare class InvalidSpecError extends Error {
16
16
  }
17
17
  /** Where and whether to cache a remote spec's text between runs. */
18
18
  export interface SpecFetchOptions {
19
+ /**
20
+ * Overlay documents (local paths or `http(s)` URLs) applied in order to
21
+ * the parsed spec, before it's upgraded. See `overlay.ts`.
22
+ */
23
+ overlays?: readonly string[];
19
24
  /** Dir for a last-good on-disk copy of a remote spec (offline fallback). */
20
25
  cacheDir?: string;
21
26
  /**
@@ -24,6 +29,14 @@ export interface SpecFetchOptions {
24
29
  */
25
30
  refresh?: boolean;
26
31
  }
32
+ /**
33
+ * A spec with its overlays applied, as JSON text: what the Scalar embed
34
+ * inlines, since it can't apply overlays itself.
35
+ */
36
+ export declare const readOverlaidSpec: (spec: string, root: string, options: SpecFetchOptions) => Promise<{
37
+ text: string;
38
+ warnings: string[];
39
+ }>;
27
40
  export declare const parseSpec: (spec: string, root: string, options?: SpecFetchOptions) => Promise<ParsedSpec>;
28
41
  export interface ParsedAsyncApiSpec {
29
42
  document: AsyncApiDocument;
@@ -19,8 +19,8 @@ export type ReferenceKind = ResolvedReferenceAdapter["kind"];
19
19
  export type BlumeReferenceKind = Exclude<ReferenceKind, "scalar">;
20
20
  /** Per-adapter display options for the Blume renderer. */
21
21
  export interface ReferenceDisplay {
22
- /** Code-sample languages shown per operation. */
23
- codeSamples: string[];
22
+ /** Code-sample languages shown per operation; `false` for none. */
23
+ codeSamples: string[] | false;
24
24
  /** Whether nested schema rows start expanded. */
25
25
  expandSchemas: boolean;
26
26
  /**
@@ -60,6 +60,11 @@ export interface ReferenceSource {
60
60
  seoDescriptionSuffix: boolean;
61
61
  /** Local path or `http(s)` URL, verbatim from config. */
62
62
  spec: string;
63
+ /**
64
+ * OpenAPI Overlay documents applied to `spec` in order (`openapi()` and
65
+ * `scalar()` only).
66
+ */
67
+ overlays?: string[];
63
68
  /**
64
69
  * URL of the live GraphQL endpoint the playground and code samples target
65
70
  * (GraphQL only — a schema, unlike an OpenAPI document, names no server).
@@ -120,10 +125,15 @@ export declare const hasScalarReferences: (config: ResolvedConfig) => boolean;
120
125
  * definition with {@link needsPlaygroundProxy}.
121
126
  */
122
127
  export declare const builtinProxyReferences: (config: ResolvedConfig) => BlumeReferenceSource[];
128
+ /**
129
+ * Whether hand-written endpoint pages (`api` frontmatter) send their Try it
130
+ * requests through the built-in proxy: `api.playground.proxy: true`.
131
+ */
132
+ export declare const apiPagesUseBuiltinProxy: (config: ResolvedConfig) => boolean;
123
133
  /**
124
134
  * Whether the built-in playground CORS proxy endpoint (`/_api-proxy`) must be
125
135
  * generated: some Blume-rendered reference's playground opted into it with
126
- * `proxy: true`. Shared by the server feature gate and the generator so the
127
- * two can never disagree.
136
+ * `proxy: true`, or the hand-written endpoint pages' did. Shared by the server
137
+ * feature gate and the generator so the two can never disagree.
128
138
  */
129
139
  export declare const needsPlaygroundProxy: (config: ResolvedConfig) => boolean;
@@ -0,0 +1,39 @@
1
+ import { z } from "zod";
2
+ import type { AdapterDescriptor } from "../core/adapter.ts";
3
+ /** The Worker binding Blume declares for the rate limiter. */
4
+ export declare const RATE_LIMIT_BINDING = "BLUME_RATE_LIMIT";
5
+ /** Options for {@link cloudflare}. */
6
+ export interface CloudflareRateLimitOptions {
7
+ /**
8
+ * The rate limiting namespace, a positive integer unique in your
9
+ * Cloudflare account. Defaults to one derived from the site.
10
+ */
11
+ namespaceId?: string;
12
+ /** Requests each reader may make per window, per route. Defaults to 10. */
13
+ requests?: number;
14
+ /** The window, in seconds: Cloudflare allows 10 or 60. Defaults to 60. */
15
+ window?: 10 | 60;
16
+ }
17
+ export declare const cloudflareRateLimitOptionsSchema: z.ZodObject<{
18
+ namespaceId: z.ZodOptional<z.ZodString>;
19
+ requests: z.ZodOptional<z.ZodNumber>;
20
+ window: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<10>, z.ZodLiteral<60>]>>;
21
+ }, z.core.$strict>;
22
+ export type CloudflareRateLimitAdapter = AdapterDescriptor<"cloudflare", CloudflareRateLimitOptions>;
23
+ export declare const cloudflareRateLimitAdapterSchema: z.ZodObject<{
24
+ kind: z.ZodLiteral<"cloudflare">;
25
+ options: z.ZodObject<{
26
+ namespaceId: z.ZodOptional<z.ZodString>;
27
+ requests: z.ZodOptional<z.ZodNumber>;
28
+ window: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<10>, z.ZodLiteral<60>]>>;
29
+ }, z.core.$strict>;
30
+ requiredSecrets: z.ZodArray<z.ZodString>;
31
+ runtimeDeps: z.ZodArray<z.ZodString>;
32
+ }, z.core.$strict>;
33
+ /**
34
+ * Counts with Cloudflare's Workers rate limiting, for a site deployed with
35
+ * `deployment: cloudflare()`: Blume declares the binding in the Worker's
36
+ * config, so there is nothing to set up. Cloudflare counts per location and
37
+ * allows a window of 10 or 60 seconds.
38
+ */
39
+ export declare const cloudflare: (options?: CloudflareRateLimitOptions) => CloudflareRateLimitAdapter;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Rate limiters for `blume.config.ts`. The server routes a reader can call —
3
+ * the assistant, the API playground proxy, and server-side search — limit
4
+ * each reader (by IP address) to a number of requests per window, answering
5
+ * `429 Too Many Requests` past it:
6
+ *
7
+ * ```ts
8
+ * import { defineConfig } from "blume";
9
+ * import { upstash } from "blume/ratelimit";
10
+ *
11
+ * export default defineConfig({
12
+ * rateLimit: upstash({ requests: 30, window: 600 }),
13
+ * });
14
+ * ```
15
+ *
16
+ * `memory()` is on by default; `rateLimit: false` turns limiting off. Each
17
+ * factory returns a plain descriptor (see `core/adapter.ts`), and the
18
+ * generated routes count with `runtime.ts`.
19
+ */
20
+ export type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
21
+ export { cloudflare } from "./cloudflare.ts";
22
+ export type { CloudflareRateLimitAdapter, CloudflareRateLimitOptions, } from "./cloudflare.ts";
23
+ export { memory } from "./memory.ts";
24
+ export type { MemoryAdapter, RateLimitOptions } from "./memory.ts";
25
+ export type { RateLimitAdapter } from "./schema.ts";
26
+ export { upstash } from "./upstash.ts";
27
+ export type { UpstashAdapter } from "./upstash.ts";
@@ -0,0 +1,36 @@
1
+ import { z } from "zod";
2
+ import type { AdapterDescriptor } from "../core/adapter.ts";
3
+ /** How many requests a reader gets per window, unless set. */
4
+ export declare const DEFAULT_REQUESTS = 30;
5
+ /** The window those requests are counted over, in seconds, unless set. */
6
+ export declare const DEFAULT_WINDOW = 600;
7
+ /** The limit every rate limiter takes: a count of requests per window. */
8
+ export interface RateLimitOptions {
9
+ /** Requests each reader may make per window, per route. */
10
+ requests?: number;
11
+ /** The window, in seconds. */
12
+ window?: number;
13
+ }
14
+ export declare const rateLimitOptionsSchema: z.ZodObject<{
15
+ requests: z.ZodOptional<z.ZodNumber>;
16
+ window: z.ZodOptional<z.ZodNumber>;
17
+ }, z.core.$strict>;
18
+ export type MemoryAdapter = AdapterDescriptor<"memory", RateLimitOptions>;
19
+ export declare const memoryAdapterSchema: z.ZodObject<{
20
+ kind: z.ZodLiteral<"memory">;
21
+ options: z.ZodObject<{
22
+ requests: z.ZodOptional<z.ZodNumber>;
23
+ window: z.ZodOptional<z.ZodNumber>;
24
+ }, z.core.$strict>;
25
+ requiredSecrets: z.ZodArray<z.ZodString>;
26
+ runtimeDeps: z.ZodArray<z.ZodString>;
27
+ }, z.core.$strict>;
28
+ /**
29
+ * Counts each reader's requests in the server's own memory, the default. On
30
+ * a server that runs as one process (`node()`) the count is exact; on a
31
+ * platform that runs many short-lived instances (Vercel, Netlify,
32
+ * Cloudflare) each instance keeps its own, so it stops a burst from one
33
+ * reader rather than enforcing the limit exactly. For that, share the count
34
+ * with `upstash()` or `cloudflare()`.
35
+ */
36
+ export declare const memory: (options?: RateLimitOptions) => MemoryAdapter;
@@ -0,0 +1,111 @@
1
+ import { z } from "zod";
2
+ /** The configured rate limiter, as its factory returned it. */
3
+ export declare const rateLimitAdapterSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
4
+ kind: z.ZodLiteral<"cloudflare">;
5
+ options: z.ZodObject<{
6
+ namespaceId: z.ZodOptional<z.ZodString>;
7
+ requests: z.ZodOptional<z.ZodNumber>;
8
+ window: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<10>, z.ZodLiteral<60>]>>;
9
+ }, z.core.$strict>;
10
+ requiredSecrets: z.ZodArray<z.ZodString>;
11
+ runtimeDeps: z.ZodArray<z.ZodString>;
12
+ }, z.core.$strict>, z.ZodObject<{
13
+ kind: z.ZodLiteral<"memory">;
14
+ options: z.ZodObject<{
15
+ requests: z.ZodOptional<z.ZodNumber>;
16
+ window: z.ZodOptional<z.ZodNumber>;
17
+ }, z.core.$strict>;
18
+ requiredSecrets: z.ZodArray<z.ZodString>;
19
+ runtimeDeps: z.ZodArray<z.ZodString>;
20
+ }, z.core.$strict>, z.ZodObject<{
21
+ kind: z.ZodLiteral<"upstash">;
22
+ options: z.ZodObject<{
23
+ requests: z.ZodOptional<z.ZodNumber>;
24
+ window: z.ZodOptional<z.ZodNumber>;
25
+ }, z.core.$strict>;
26
+ requiredSecrets: z.ZodArray<z.ZodString>;
27
+ runtimeDeps: z.ZodArray<z.ZodString>;
28
+ }, z.core.$strict>], "kind">;
29
+ export type RateLimitAdapter = z.output<typeof rateLimitAdapterSchema>;
30
+ /**
31
+ * `blume.config.rateLimit`: how the server routes a reader can call (the
32
+ * assistant, the API playground proxy, server-side search) limit requests
33
+ * per reader. On by default with `memory()`; `false` turns it off (`null`
34
+ * once resolved).
35
+ */
36
+ export declare const rateLimitConfigSchema: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodDiscriminatedUnion<[z.ZodObject<{
37
+ kind: z.ZodLiteral<"cloudflare">;
38
+ options: z.ZodObject<{
39
+ namespaceId: z.ZodOptional<z.ZodString>;
40
+ requests: z.ZodOptional<z.ZodNumber>;
41
+ window: z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<10>, z.ZodLiteral<60>]>>;
42
+ }, z.core.$strict>;
43
+ requiredSecrets: z.ZodArray<z.ZodString>;
44
+ runtimeDeps: z.ZodArray<z.ZodString>;
45
+ }, z.core.$strict>, z.ZodObject<{
46
+ kind: z.ZodLiteral<"memory">;
47
+ options: z.ZodObject<{
48
+ requests: z.ZodOptional<z.ZodNumber>;
49
+ window: z.ZodOptional<z.ZodNumber>;
50
+ }, z.core.$strict>;
51
+ requiredSecrets: z.ZodArray<z.ZodString>;
52
+ runtimeDeps: z.ZodArray<z.ZodString>;
53
+ }, z.core.$strict>, z.ZodObject<{
54
+ kind: z.ZodLiteral<"upstash">;
55
+ options: z.ZodObject<{
56
+ requests: z.ZodOptional<z.ZodNumber>;
57
+ window: z.ZodOptional<z.ZodNumber>;
58
+ }, z.core.$strict>;
59
+ requiredSecrets: z.ZodArray<z.ZodString>;
60
+ runtimeDeps: z.ZodArray<z.ZodString>;
61
+ }, z.core.$strict>], "kind">]>>, z.ZodTransform<{
62
+ kind: "cloudflare";
63
+ options: {
64
+ namespaceId?: string | undefined;
65
+ requests?: number | undefined;
66
+ window?: 10 | 60 | undefined;
67
+ };
68
+ requiredSecrets: string[];
69
+ runtimeDeps: string[];
70
+ } | {
71
+ kind: "memory";
72
+ options: {
73
+ requests?: number | undefined;
74
+ window?: number | undefined;
75
+ };
76
+ requiredSecrets: string[];
77
+ runtimeDeps: string[];
78
+ } | {
79
+ kind: "upstash";
80
+ options: {
81
+ requests?: number | undefined;
82
+ window?: number | undefined;
83
+ };
84
+ requiredSecrets: string[];
85
+ runtimeDeps: string[];
86
+ } | null, false | {
87
+ kind: "cloudflare";
88
+ options: {
89
+ namespaceId?: string | undefined;
90
+ requests?: number | undefined;
91
+ window?: 10 | 60 | undefined;
92
+ };
93
+ requiredSecrets: string[];
94
+ runtimeDeps: string[];
95
+ } | {
96
+ kind: "memory";
97
+ options: {
98
+ requests?: number | undefined;
99
+ window?: number | undefined;
100
+ };
101
+ requiredSecrets: string[];
102
+ runtimeDeps: string[];
103
+ } | {
104
+ kind: "upstash";
105
+ options: {
106
+ requests?: number | undefined;
107
+ window?: number | undefined;
108
+ };
109
+ requiredSecrets: string[];
110
+ runtimeDeps: string[];
111
+ } | undefined>>;
@@ -0,0 +1,21 @@
1
+ import type { AdapterDescriptor } from "../core/adapter.ts";
2
+ import type { RateLimitOptions } from "./memory.ts";
3
+ /** The env vars holding the Upstash Redis REST endpoint and its token. */
4
+ export declare const UPSTASH_SECRETS: readonly ["UPSTASH_REDIS_REST_URL", "UPSTASH_REDIS_REST_TOKEN"];
5
+ export type UpstashAdapter = AdapterDescriptor<"upstash", RateLimitOptions>;
6
+ export declare const upstashAdapterSchema: import("zod").ZodObject<{
7
+ kind: import("zod").ZodLiteral<"upstash">;
8
+ options: import("zod").ZodObject<{
9
+ requests: import("zod").ZodOptional<import("zod").ZodNumber>;
10
+ window: import("zod").ZodOptional<import("zod").ZodNumber>;
11
+ }, import("zod/v4/core").$strict>;
12
+ requiredSecrets: import("zod").ZodArray<import("zod").ZodString>;
13
+ runtimeDeps: import("zod").ZodArray<import("zod").ZodString>;
14
+ }, import("zod/v4/core").$strict>;
15
+ /**
16
+ * Keeps the count in Upstash Redis, which every instance on every host shares,
17
+ * so the limit holds exactly. It talks to Upstash's REST API, so there is
18
+ * nothing to install; the endpoint and token come from
19
+ * `UPSTASH_REDIS_REST_URL` and `UPSTASH_REDIS_REST_TOKEN`.
20
+ */
21
+ export declare const upstash: (options?: RateLimitOptions) => UpstashAdapter;
@@ -0,0 +1,23 @@
1
+ import type { CloudflareRateLimitAdapter } from "./cloudflare.ts";
2
+ /** The Workers rate limiting binding, as the Worker's config declares it. */
3
+ export interface RateLimitBindingConfig {
4
+ name: string;
5
+ namespace_id: string;
6
+ simple: {
7
+ limit: number;
8
+ period: 10 | 60;
9
+ };
10
+ }
11
+ /**
12
+ * A namespace id for a Worker that sets none: a positive integer derived from
13
+ * its name, so two Blume sites on one account don't share one.
14
+ */
15
+ export declare const rateLimitNamespace: (workerName: string) => string;
16
+ /** The binding `cloudflare()` asks for, on the Worker named `workerName`. */
17
+ export declare const rateLimitBinding: (adapter: CloudflareRateLimitAdapter, workerName: string) => RateLimitBindingConfig;
18
+ /**
19
+ * The built Worker's config (`dist/server/wrangler.json`) with Blume's rate
20
+ * limiting binding in `ratelimits`, replacing an earlier one of the same name
21
+ * and keeping any others. `null` when the config isn't a JSON object.
22
+ */
23
+ export declare const withRateLimitBinding: (wranglerText: string, adapter: CloudflareRateLimitAdapter) => string | null;
@@ -5,9 +5,9 @@ import type { PlaygroundOptions, ReferenceSourceOptions } from "./options.ts";
5
5
  export interface AsyncApiOptions {
6
6
  /**
7
7
  * Code-sample tools shown per operation (Blume renderer). Defaults to every
8
- * tool appropriate to the operation's protocol binding.
8
+ * tool appropriate to the operation's protocol binding; `false` shows none.
9
9
  */
10
- codeSamples?: string[];
10
+ codeSamples?: string[] | false;
11
11
  /** Start nested schema rows expanded rather than collapsed (Blume renderer). Defaults to `false`. */
12
12
  expandSchemas?: boolean;
13
13
  /**
@@ -34,7 +34,7 @@ export declare const asyncapiOptionsSchema: z.ZodPipe<z.ZodObject<{
34
34
  seoDescriptionSuffix: z.ZodDefault<z.ZodBoolean>;
35
35
  spec: z.ZodString;
36
36
  }, z.core.$strict>>>;
37
- codeSamples: z.ZodDefault<z.ZodArray<z.ZodString>>;
37
+ codeSamples: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodArray<z.ZodString>]>>;
38
38
  playground: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
39
39
  enabled: z.ZodDefault<z.ZodBoolean>;
40
40
  proxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
@@ -58,14 +58,14 @@ export declare const asyncapiOptionsSchema: z.ZodPipe<z.ZodObject<{
58
58
  label?: string | undefined;
59
59
  route?: string | undefined;
60
60
  }[];
61
- codeSamples: string[];
61
+ codeSamples: false | string[];
62
62
  playground: {
63
63
  enabled: boolean;
64
64
  proxy: string | boolean;
65
65
  };
66
66
  route: string;
67
67
  spec?: string | undefined;
68
- }, "spec">, {
68
+ }, "spec" | "overlays">, {
69
69
  expandSchemas: boolean;
70
70
  sources: {
71
71
  includeInLlms: boolean;
@@ -76,7 +76,7 @@ export declare const asyncapiOptionsSchema: z.ZodPipe<z.ZodObject<{
76
76
  label?: string | undefined;
77
77
  route?: string | undefined;
78
78
  }[];
79
- codeSamples: string[];
79
+ codeSamples: false | string[];
80
80
  playground: {
81
81
  enabled: boolean;
82
82
  proxy: string | boolean;
@@ -102,7 +102,7 @@ export declare const asyncapiAdapterSchema: z.ZodObject<{
102
102
  seoDescriptionSuffix: z.ZodDefault<z.ZodBoolean>;
103
103
  spec: z.ZodString;
104
104
  }, z.core.$strict>>>;
105
- codeSamples: z.ZodDefault<z.ZodArray<z.ZodString>>;
105
+ codeSamples: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodArray<z.ZodString>]>>;
106
106
  playground: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
107
107
  enabled: z.ZodDefault<z.ZodBoolean>;
108
108
  proxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
@@ -126,14 +126,14 @@ export declare const asyncapiAdapterSchema: z.ZodObject<{
126
126
  label?: string | undefined;
127
127
  route?: string | undefined;
128
128
  }[];
129
- codeSamples: string[];
129
+ codeSamples: false | string[];
130
130
  playground: {
131
131
  enabled: boolean;
132
132
  proxy: string | boolean;
133
133
  };
134
134
  route: string;
135
135
  spec?: string | undefined;
136
- }, "spec">, {
136
+ }, "spec" | "overlays">, {
137
137
  expandSchemas: boolean;
138
138
  sources: {
139
139
  includeInLlms: boolean;
@@ -144,7 +144,7 @@ export declare const asyncapiAdapterSchema: z.ZodObject<{
144
144
  label?: string | undefined;
145
145
  route?: string | undefined;
146
146
  }[];
147
- codeSamples: string[];
147
+ codeSamples: false | string[];
148
148
  playground: {
149
149
  enabled: boolean;
150
150
  proxy: string | boolean;
@@ -3,8 +3,11 @@ import type { AdapterDescriptor } from "../core/adapter.ts";
3
3
  import type { GraphqlSourceOptions, PlaygroundOptions } from "./options.ts";
4
4
  /** Options for {@link graphql}. */
5
5
  export interface GraphqlOptions {
6
- /** Code-sample languages shown per operation. Defaults to `["curl", "js", "python"]`. */
7
- codeSamples?: string[];
6
+ /**
7
+ * Code-sample languages shown per operation, in order. Defaults to
8
+ * `["curl", "js", "python"]`; `false` shows none.
9
+ */
10
+ codeSamples?: string[] | false;
8
11
  /**
9
12
  * URL of the live GraphQL endpoint the playground and code samples target —
10
13
  * a schema, unlike an OpenAPI document, names no server. Applies to every
@@ -44,7 +47,7 @@ export declare const graphqlOptionsSchema: z.ZodPipe<z.ZodObject<{
44
47
  spec: z.ZodString;
45
48
  endpoint: z.ZodOptional<z.ZodString>;
46
49
  }, z.core.$strict>>>;
47
- codeSamples: z.ZodDefault<z.ZodArray<z.ZodString>>;
50
+ codeSamples: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodArray<z.ZodString>]>>;
48
51
  playground: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
49
52
  enabled: z.ZodDefault<z.ZodBoolean>;
50
53
  proxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
@@ -68,7 +71,7 @@ export declare const graphqlOptionsSchema: z.ZodPipe<z.ZodObject<{
68
71
  route?: string | undefined;
69
72
  endpoint?: string | undefined;
70
73
  }[];
71
- codeSamples: string[];
74
+ codeSamples: false | string[];
72
75
  playground: {
73
76
  enabled: boolean;
74
77
  proxy: string | boolean;
@@ -76,7 +79,7 @@ export declare const graphqlOptionsSchema: z.ZodPipe<z.ZodObject<{
76
79
  route: string;
77
80
  endpoint?: string | undefined;
78
81
  spec?: string | undefined;
79
- }, "spec">, {
82
+ }, "spec" | "overlays">, {
80
83
  sources: {
81
84
  includeInLlms: boolean;
82
85
  includeInSearch: boolean;
@@ -87,7 +90,7 @@ export declare const graphqlOptionsSchema: z.ZodPipe<z.ZodObject<{
87
90
  route?: string | undefined;
88
91
  endpoint?: string | undefined;
89
92
  }[];
90
- codeSamples: string[];
93
+ codeSamples: false | string[];
91
94
  playground: {
92
95
  enabled: boolean;
93
96
  proxy: string | boolean;
@@ -115,7 +118,7 @@ export declare const graphqlAdapterSchema: z.ZodObject<{
115
118
  spec: z.ZodString;
116
119
  endpoint: z.ZodOptional<z.ZodString>;
117
120
  }, z.core.$strict>>>;
118
- codeSamples: z.ZodDefault<z.ZodArray<z.ZodString>>;
121
+ codeSamples: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodArray<z.ZodString>]>>;
119
122
  playground: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
120
123
  enabled: z.ZodDefault<z.ZodBoolean>;
121
124
  proxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
@@ -139,7 +142,7 @@ export declare const graphqlAdapterSchema: z.ZodObject<{
139
142
  route?: string | undefined;
140
143
  endpoint?: string | undefined;
141
144
  }[];
142
- codeSamples: string[];
145
+ codeSamples: false | string[];
143
146
  playground: {
144
147
  enabled: boolean;
145
148
  proxy: string | boolean;
@@ -147,7 +150,7 @@ export declare const graphqlAdapterSchema: z.ZodObject<{
147
150
  route: string;
148
151
  endpoint?: string | undefined;
149
152
  spec?: string | undefined;
150
- }, "spec">, {
153
+ }, "spec" | "overlays">, {
151
154
  sources: {
152
155
  includeInLlms: boolean;
153
156
  includeInSearch: boolean;
@@ -158,7 +161,7 @@ export declare const graphqlAdapterSchema: z.ZodObject<{
158
161
  route?: string | undefined;
159
162
  endpoint?: string | undefined;
160
163
  }[];
161
- codeSamples: string[];
164
+ codeSamples: false | string[];
162
165
  playground: {
163
166
  enabled: boolean;
164
167
  proxy: string | boolean;
@@ -1,10 +1,14 @@
1
1
  import { z } from "zod";
2
2
  import type { AdapterDescriptor } from "../core/adapter.ts";
3
- import type { PlaygroundOptions, ReferenceSourceOptions } from "./options.ts";
3
+ import type { OpenApiSourceOptions, PlaygroundOptions } from "./options.ts";
4
4
  /** Options for {@link openapi}. */
5
5
  export interface OpenApiOptions {
6
- /** Code-sample languages shown per operation (Blume renderer). Defaults to `["curl", "js", "python"]`. */
7
- codeSamples?: string[];
6
+ /**
7
+ * Code-sample languages generated per operation (Blume renderer), in
8
+ * order. Defaults to `["curl", "js", "python"]`; `false` generates none, so
9
+ * only the spec's own `x-codeSamples` show.
10
+ */
11
+ codeSamples?: string[] | false;
8
12
  /** Start nested schema rows expanded rather than collapsed (Blume renderer). Defaults to `false`. */
9
13
  expandSchemas?: boolean;
10
14
  /**
@@ -15,15 +19,21 @@ export interface OpenApiOptions {
15
19
  * `vercel()` in `deployment`).
16
20
  */
17
21
  playground?: PlaygroundOptions;
22
+ /**
23
+ * OpenAPI Overlay documents for `spec`, applied in order before it renders.
24
+ * With `sources`, each source takes its own `overlays`.
25
+ */
26
+ overlays?: string[];
18
27
  /** Where the reference mounts. Defaults to `/reference`. */
19
28
  route?: string;
20
29
  /** One or more specs; each renders on its own route by default. */
21
- sources?: ReferenceSourceOptions[];
30
+ sources?: OpenApiSourceOptions[];
22
31
  /** Shorthand for a single source: `sources: [{ spec }]`. */
23
32
  spec?: string;
24
33
  }
25
34
  export declare const openapiOptionsSchema: z.ZodPipe<z.ZodObject<{
26
35
  expandSchemas: z.ZodDefault<z.ZodBoolean>;
36
+ overlays: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
37
  sources: z.ZodDefault<z.ZodArray<z.ZodObject<{
28
38
  includeInLlms: z.ZodDefault<z.ZodBoolean>;
29
39
  includeInSearch: z.ZodDefault<z.ZodBoolean>;
@@ -32,8 +42,9 @@ export declare const openapiOptionsSchema: z.ZodPipe<z.ZodObject<{
32
42
  route: z.ZodOptional<z.ZodString>;
33
43
  seoDescriptionSuffix: z.ZodDefault<z.ZodBoolean>;
34
44
  spec: z.ZodString;
45
+ overlays: z.ZodDefault<z.ZodArray<z.ZodString>>;
35
46
  }, z.core.$strict>>>;
36
- codeSamples: z.ZodDefault<z.ZodArray<z.ZodString>>;
47
+ codeSamples: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodArray<z.ZodString>]>>;
37
48
  playground: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
38
49
  enabled: z.ZodDefault<z.ZodBoolean>;
39
50
  proxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
@@ -54,17 +65,19 @@ export declare const openapiOptionsSchema: z.ZodPipe<z.ZodObject<{
54
65
  noindex: boolean;
55
66
  seoDescriptionSuffix: boolean;
56
67
  spec: string;
68
+ overlays: string[];
57
69
  label?: string | undefined;
58
70
  route?: string | undefined;
59
71
  }[];
60
- codeSamples: string[];
72
+ codeSamples: false | string[];
61
73
  playground: {
62
74
  enabled: boolean;
63
75
  proxy: string | boolean;
64
76
  };
65
77
  route: string;
78
+ overlays?: string[] | undefined;
66
79
  spec?: string | undefined;
67
- }, "spec">, {
80
+ }, "spec" | "overlays">, {
68
81
  expandSchemas: boolean;
69
82
  sources: {
70
83
  includeInLlms: boolean;
@@ -72,15 +85,17 @@ export declare const openapiOptionsSchema: z.ZodPipe<z.ZodObject<{
72
85
  noindex: boolean;
73
86
  seoDescriptionSuffix: boolean;
74
87
  spec: string;
88
+ overlays: string[];
75
89
  label?: string | undefined;
76
90
  route?: string | undefined;
77
91
  }[];
78
- codeSamples: string[];
92
+ codeSamples: false | string[];
79
93
  playground: {
80
94
  enabled: boolean;
81
95
  proxy: string | boolean;
82
96
  };
83
97
  route: string;
98
+ overlays?: string[] | undefined;
84
99
  spec?: string | undefined;
85
100
  }>>;
86
101
  /** `openapi()` options with every default applied and `spec` folded into `sources`. */
@@ -92,6 +107,7 @@ export declare const openapiAdapterSchema: z.ZodObject<{
92
107
  kind: z.ZodLiteral<"openapi">;
93
108
  options: z.ZodPipe<z.ZodObject<{
94
109
  expandSchemas: z.ZodDefault<z.ZodBoolean>;
110
+ overlays: z.ZodOptional<z.ZodArray<z.ZodString>>;
95
111
  sources: z.ZodDefault<z.ZodArray<z.ZodObject<{
96
112
  includeInLlms: z.ZodDefault<z.ZodBoolean>;
97
113
  includeInSearch: z.ZodDefault<z.ZodBoolean>;
@@ -100,8 +116,9 @@ export declare const openapiAdapterSchema: z.ZodObject<{
100
116
  route: z.ZodOptional<z.ZodString>;
101
117
  seoDescriptionSuffix: z.ZodDefault<z.ZodBoolean>;
102
118
  spec: z.ZodString;
119
+ overlays: z.ZodDefault<z.ZodArray<z.ZodString>>;
103
120
  }, z.core.$strict>>>;
104
- codeSamples: z.ZodDefault<z.ZodArray<z.ZodString>>;
121
+ codeSamples: z.ZodDefault<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodArray<z.ZodString>]>>;
105
122
  playground: z.ZodPipe<z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodObject<{
106
123
  enabled: z.ZodDefault<z.ZodBoolean>;
107
124
  proxy: z.ZodDefault<z.ZodUnion<readonly [z.ZodBoolean, z.ZodString]>>;
@@ -122,17 +139,19 @@ export declare const openapiAdapterSchema: z.ZodObject<{
122
139
  noindex: boolean;
123
140
  seoDescriptionSuffix: boolean;
124
141
  spec: string;
142
+ overlays: string[];
125
143
  label?: string | undefined;
126
144
  route?: string | undefined;
127
145
  }[];
128
- codeSamples: string[];
146
+ codeSamples: false | string[];
129
147
  playground: {
130
148
  enabled: boolean;
131
149
  proxy: string | boolean;
132
150
  };
133
151
  route: string;
152
+ overlays?: string[] | undefined;
134
153
  spec?: string | undefined;
135
- }, "spec">, {
154
+ }, "spec" | "overlays">, {
136
155
  expandSchemas: boolean;
137
156
  sources: {
138
157
  includeInLlms: boolean;
@@ -140,15 +159,17 @@ export declare const openapiAdapterSchema: z.ZodObject<{
140
159
  noindex: boolean;
141
160
  seoDescriptionSuffix: boolean;
142
161
  spec: string;
162
+ overlays: string[];
143
163
  label?: string | undefined;
144
164
  route?: string | undefined;
145
165
  }[];
146
- codeSamples: string[];
166
+ codeSamples: false | string[];
147
167
  playground: {
148
168
  enabled: boolean;
149
169
  proxy: string | boolean;
150
170
  };
151
171
  route: string;
172
+ overlays?: string[] | undefined;
152
173
  spec?: string | undefined;
153
174
  }>>;
154
175
  requiredSecrets: z.ZodArray<z.ZodString>;