blume 2.0.3 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/AGENTS.md +1 -0
  2. package/CHANGELOG.md +142 -0
  3. package/README.md +1 -1
  4. package/dist/cli/{chunk-5f86nr5m.js → chunk-073rdvgb.js} +21 -48
  5. package/dist/cli/{chunk-5f86nr5m.js.map → chunk-073rdvgb.js.map} +4 -5
  6. package/dist/cli/{chunk-ga0pf4aj.js → chunk-0n9xkp3d.js} +12 -3
  7. package/dist/cli/{chunk-ga0pf4aj.js.map → chunk-0n9xkp3d.js.map} +3 -3
  8. package/dist/cli/chunk-150jk7km.js +52 -0
  9. package/dist/cli/chunk-150jk7km.js.map +10 -0
  10. package/dist/cli/{chunk-9t7a85s3.js → chunk-313vnn40.js} +30 -19
  11. package/dist/cli/chunk-313vnn40.js.map +10 -0
  12. package/dist/cli/{chunk-tkacnehg.js → chunk-3v3ffbrj.js} +2 -2
  13. package/dist/cli/{chunk-q58y5e6a.js → chunk-3x6x3pph.js} +46 -24
  14. package/dist/cli/chunk-3x6x3pph.js.map +10 -0
  15. package/dist/cli/{chunk-1d7ve1dm.js → chunk-42t4jxdx.js} +37 -5
  16. package/dist/cli/chunk-42t4jxdx.js.map +12 -0
  17. package/dist/cli/{chunk-8ktnccpt.js → chunk-54ztw1nj.js} +21 -2
  18. package/dist/cli/chunk-54ztw1nj.js.map +10 -0
  19. package/dist/cli/{chunk-hm3vjy5s.js → chunk-5vjtgs6e.js} +28 -10
  20. package/dist/cli/{chunk-hm3vjy5s.js.map → chunk-5vjtgs6e.js.map} +4 -4
  21. package/dist/cli/chunk-66w9j7p6.js +322 -0
  22. package/dist/cli/chunk-66w9j7p6.js.map +14 -0
  23. package/dist/cli/{chunk-2hsdwb9n.js → chunk-7ppf1rva.js} +34 -18
  24. package/dist/cli/chunk-7ppf1rva.js.map +10 -0
  25. package/dist/cli/{chunk-r9rcc4w7.js → chunk-8y2kmjv8.js} +7 -7
  26. package/dist/cli/{chunk-r20tn01b.js → chunk-c1y538kd.js} +8 -2
  27. package/dist/cli/{chunk-r20tn01b.js.map → chunk-c1y538kd.js.map} +3 -3
  28. package/dist/cli/{chunk-2eytanqx.js → chunk-c887fj0s.js} +2 -2
  29. package/dist/cli/{chunk-p3v96n38.js → chunk-cfyg47zg.js} +16 -6
  30. package/dist/cli/chunk-cfyg47zg.js.map +10 -0
  31. package/dist/cli/chunk-cm89scdv.js +443 -0
  32. package/dist/cli/chunk-cm89scdv.js.map +11 -0
  33. package/dist/cli/{chunk-akbpwfxc.js → chunk-dzwehpy7.js} +2 -2
  34. package/dist/cli/{chunk-wrr3j9w9.js → chunk-e6atmn4h.js} +299 -72
  35. package/dist/cli/chunk-e6atmn4h.js.map +36 -0
  36. package/dist/cli/{chunk-tzmab476.js → chunk-e8xw9qkh.js} +8 -6
  37. package/dist/cli/{chunk-tzmab476.js.map → chunk-e8xw9qkh.js.map} +3 -3
  38. package/dist/cli/{chunk-6dsbexzp.js → chunk-e9q7a2ak.js} +17 -15
  39. package/dist/cli/{chunk-6dsbexzp.js.map → chunk-e9q7a2ak.js.map} +2 -2
  40. package/dist/cli/{chunk-pv29h0wf.js → chunk-ehweg4fr.js} +5155 -1249
  41. package/dist/cli/chunk-ehweg4fr.js.map +218 -0
  42. package/dist/cli/{chunk-c8chx29p.js → chunk-ep6nd0rn.js} +390 -318
  43. package/dist/cli/chunk-ep6nd0rn.js.map +36 -0
  44. package/dist/cli/{chunk-p73c0m7w.js → chunk-fdrkhpjy.js} +18 -15
  45. package/dist/cli/{chunk-p73c0m7w.js.map → chunk-fdrkhpjy.js.map} +3 -3
  46. package/dist/cli/{chunk-2z928egk.js → chunk-ft9vfys6.js} +5 -5
  47. package/dist/cli/{chunk-5m5nmvyq.js → chunk-gb420vvz.js} +316 -79
  48. package/dist/cli/chunk-gb420vvz.js.map +17 -0
  49. package/dist/cli/{chunk-vg9r4eb9.js → chunk-hebn0tpx.js} +86 -13
  50. package/dist/cli/chunk-hebn0tpx.js.map +14 -0
  51. package/dist/cli/{chunk-35d4wj9f.js → chunk-htrwgabr.js} +41 -23
  52. package/dist/cli/chunk-htrwgabr.js.map +15 -0
  53. package/dist/cli/{chunk-g4hq16wv.js → chunk-hx3xqnk9.js} +16 -14
  54. package/dist/cli/{chunk-g4hq16wv.js.map → chunk-hx3xqnk9.js.map} +2 -2
  55. package/dist/cli/chunk-j134vrp2.js +65 -0
  56. package/dist/cli/chunk-j134vrp2.js.map +10 -0
  57. package/dist/cli/{chunk-a58773jm.js → chunk-kma9f6sf.js} +2 -2
  58. package/dist/cli/chunk-kwrg63tm.js +31 -0
  59. package/dist/cli/chunk-kwrg63tm.js.map +10 -0
  60. package/dist/cli/{chunk-ey84smr6.js → chunk-mrcccgnh.js} +6 -6
  61. package/dist/cli/{chunk-ey84smr6.js.map → chunk-mrcccgnh.js.map} +1 -1
  62. package/dist/cli/{chunk-yfyb25rh.js → chunk-n0v7m8ry.js} +24 -8
  63. package/dist/cli/chunk-n0v7m8ry.js.map +14 -0
  64. package/dist/cli/{chunk-j85vccga.js → chunk-ncj7w596.js} +576 -367
  65. package/dist/cli/chunk-ncj7w596.js.map +35 -0
  66. package/dist/cli/{chunk-5xvm6tfj.js → chunk-nq1d20w2.js} +17 -15
  67. package/dist/cli/{chunk-5xvm6tfj.js.map → chunk-nq1d20w2.js.map} +2 -2
  68. package/dist/cli/{chunk-pehfxfta.js → chunk-nrns10mj.js} +6 -98
  69. package/dist/cli/chunk-nrns10mj.js.map +10 -0
  70. package/dist/cli/{chunk-crgn1q09.js → chunk-sds923fa.js} +4 -4
  71. package/dist/cli/chunk-t2m5j4pr.js +104 -0
  72. package/dist/cli/chunk-t2m5j4pr.js.map +11 -0
  73. package/dist/cli/{chunk-acanzt5p.js → chunk-tdqhyxfz.js} +6 -6
  74. package/dist/cli/chunk-tphac74f.js +126 -0
  75. package/dist/cli/chunk-tphac74f.js.map +11 -0
  76. package/dist/cli/chunk-w1r4vase.js +18 -0
  77. package/dist/cli/chunk-w1r4vase.js.map +10 -0
  78. package/dist/cli/{chunk-3em5wd2y.js → chunk-zccbjcj0.js} +4 -3
  79. package/dist/cli/{chunk-3em5wd2y.js.map → chunk-zccbjcj0.js.map} +2 -2
  80. package/dist/cli/index.js +31 -20
  81. package/dist/cli/index.js.map +5 -5
  82. package/dist/types/ai/agent-surface.d.ts +8 -7
  83. package/dist/types/ai/ai-catalog.d.ts +7 -0
  84. package/dist/types/ai/ask-context.d.ts +26 -0
  85. package/dist/types/ai/ask.d.ts +271 -58
  86. package/dist/types/ai/component-markdown.d.ts +2 -0
  87. package/dist/types/ai/index.d.ts +2 -2
  88. package/dist/types/ai/openapi-components.d.ts +4 -1
  89. package/dist/types/ai/site-skill.d.ts +26 -0
  90. package/dist/types/ai/skills.d.ts +16 -0
  91. package/dist/types/astro/integration.d.ts +9 -0
  92. package/dist/types/astro/markdown-negotiation.d.ts +3 -0
  93. package/dist/types/astro/pages.d.ts +10 -0
  94. package/dist/types/captcha/hcaptcha.d.ts +27 -0
  95. package/dist/types/captcha/index.d.ts +28 -0
  96. package/dist/types/captcha/schema.d.ts +29 -0
  97. package/dist/types/captcha/turnstile.d.ts +28 -0
  98. package/dist/types/cli/init/scaffold.d.ts +1 -1
  99. package/dist/types/components/content/api-field.d.ts +62 -0
  100. package/dist/types/components/content/api-page.d.ts +100 -0
  101. package/dist/types/components/layout/nav-utils.d.ts +26 -0
  102. package/dist/types/components/openapi/code-samples.d.ts +29 -0
  103. package/dist/types/components/openapi/helpers.d.ts +158 -0
  104. package/dist/types/components/openapi/security.d.ts +95 -0
  105. package/dist/types/components/openapi/snippets.d.ts +60 -0
  106. package/dist/types/consent/ethyca.d.ts +48 -0
  107. package/dist/types/consent/index.d.ts +37 -0
  108. package/dist/types/consent/native.d.ts +28 -0
  109. package/dist/types/consent/osano.d.ts +42 -0
  110. package/dist/types/consent/schema.d.ts +110 -0
  111. package/dist/types/core/changelog-index.d.ts +8 -0
  112. package/dist/types/core/config-input.d.ts +217 -23
  113. package/dist/types/core/data.d.ts +53 -4
  114. package/dist/types/core/footer.d.ts +8 -0
  115. package/dist/types/core/i18n-ui.d.ts +88 -0
  116. package/dist/types/core/includes.d.ts +8 -2
  117. package/dist/types/core/links.d.ts +8 -0
  118. package/dist/types/core/localizable.d.ts +7 -0
  119. package/dist/types/core/page-modes.d.ts +29 -0
  120. package/dist/types/core/probe.d.ts +2 -0
  121. package/dist/types/core/project-graph.d.ts +6 -0
  122. package/dist/types/core/redirect-patterns.d.ts +152 -0
  123. package/dist/types/core/related.d.ts +40 -0
  124. package/dist/types/core/schema.d.ts +670 -56
  125. package/dist/types/core/sources/cache.d.ts +3 -0
  126. package/dist/types/core/sources/contentful-rich-text.d.ts +11 -2
  127. package/dist/types/core/sources/contentful.d.ts +17 -1
  128. package/dist/types/core/sources/lexical.d.ts +5 -0
  129. package/dist/types/core/sources/normalize.d.ts +20 -1
  130. package/dist/types/core/sources/read.d.ts +5 -0
  131. package/dist/types/core/sources/remote.d.ts +37 -10
  132. package/dist/types/core/sources/sanity.d.ts +1 -1
  133. package/dist/types/core/types.d.ts +18 -1
  134. package/dist/types/core/variables.d.ts +42 -0
  135. package/dist/types/deploy/adapter-output.d.ts +2 -1
  136. package/dist/types/deploy/adapters/cloudflare.d.ts +7 -5
  137. package/dist/types/deploy/adapters/node.d.ts +58 -23
  138. package/dist/types/deploy/adapters/registry.d.ts +10 -0
  139. package/dist/types/deploy/adapters/types.d.ts +3 -2
  140. package/dist/types/deploy/node-headers.d.ts +13 -2
  141. package/dist/types/deploy/platforms/cloudflare.d.ts +15 -7
  142. package/dist/types/deploy/platforms/netlify.d.ts +7 -0
  143. package/dist/types/deploy/platforms/node.d.ts +3 -1
  144. package/dist/types/deploy/platforms/types.d.ts +18 -7
  145. package/dist/types/deploy/platforms/vercel.d.ts +26 -1
  146. package/dist/types/deploy/redirects.d.ts +55 -11
  147. package/dist/types/deploy/sitemap.d.ts +2 -1
  148. package/dist/types/deploy/vercel-negotiation.d.ts +51 -21
  149. package/dist/types/markdown/code-title.d.ts +17 -0
  150. package/dist/types/markdown/features.d.ts +3 -2
  151. package/dist/types/narration/build.d.ts +70 -0
  152. package/dist/types/narration/provider.d.ts +26 -0
  153. package/dist/types/narration/script.d.ts +154 -0
  154. package/dist/types/openapi/checks.d.ts +27 -0
  155. package/dist/types/openapi/graphql.d.ts +6 -0
  156. package/dist/types/openapi/model.d.ts +27 -10
  157. package/dist/types/openapi/overlay.d.ts +54 -0
  158. package/dist/types/openapi/parse.d.ts +16 -0
  159. package/dist/types/openapi/references.d.ts +30 -4
  160. package/dist/types/ratelimit/cloudflare.d.ts +39 -0
  161. package/dist/types/ratelimit/index.d.ts +27 -0
  162. package/dist/types/ratelimit/memory.d.ts +36 -0
  163. package/dist/types/ratelimit/schema.d.ts +119 -0
  164. package/dist/types/ratelimit/upstash.d.ts +46 -0
  165. package/dist/types/ratelimit/wrangler.d.ts +23 -0
  166. package/dist/types/reference/asyncapi.d.ts +10 -10
  167. package/dist/types/reference/graphql.d.ts +89 -11
  168. package/dist/types/reference/index.d.ts +1 -1
  169. package/dist/types/reference/openapi.d.ts +33 -12
  170. package/dist/types/reference/options.d.ts +82 -6
  171. package/dist/types/reference/scalar.d.ts +13 -0
  172. package/dist/types/reference/schema.d.ts +144 -36
  173. package/dist/types/search/adapters/registry.d.ts +3 -0
  174. package/dist/types/search/adapters/typesense.d.ts +14 -4
  175. package/dist/types/search/build.d.ts +3 -1
  176. package/dist/types/search/documents.d.ts +12 -1
  177. package/dist/types/search/orama-index.d.ts +13 -9
  178. package/dist/types/search/sync/algolia.d.ts +5 -2
  179. package/dist/types/search/sync/index.d.ts +3 -1
  180. package/dist/types/search/sync/typesense.d.ts +11 -7
  181. package/dist/types/seo/metatags.d.ts +20 -0
  182. package/dist/types/sources/contentful.d.ts +16 -0
  183. package/dist/types/sources/github-releases.d.ts +8 -1
  184. package/dist/types/sources/payload.d.ts +2 -0
  185. package/dist/types/sources/registry.d.ts +54 -0
  186. package/dist/types/sources/shared.d.ts +3 -0
  187. package/dist/types/sources/strapi.d.ts +2 -0
  188. package/docs/01-quickstart.mdx +4 -2
  189. package/docs/02-deployment.mdx +71 -17
  190. package/docs/03-upgrading.mdx +4 -4
  191. package/docs/04-migrating.mdx +1 -1
  192. package/docs/advanced/changelog.mdx +13 -2
  193. package/docs/advanced/skills.mdx +15 -1
  194. package/docs/cli/audit.mdx +51 -8
  195. package/docs/cli/doctor.mdx +5 -1
  196. package/docs/cli/evals.mdx +4 -4
  197. package/docs/cli/index.mdx +1 -0
  198. package/docs/cli/translate.mdx +1 -0
  199. package/docs/cli/validate.mdx +4 -3
  200. package/docs/configuration/analytics.mdx +3 -1
  201. package/docs/configuration/assistant.mdx +194 -38
  202. package/docs/configuration/consent.mdx +100 -0
  203. package/docs/configuration/customization.mdx +8 -6
  204. package/docs/configuration/export.mdx +5 -3
  205. package/docs/configuration/index.mdx +64 -5
  206. package/docs/configuration/meta.ts +3 -0
  207. package/docs/configuration/narration.mdx +119 -0
  208. package/docs/configuration/rate-limiting.mdx +90 -0
  209. package/docs/configuration/search.mdx +63 -12
  210. package/docs/configuration/theming.mdx +3 -1
  211. package/docs/content/components.mdx +108 -2
  212. package/docs/content/frontmatter.mdx +80 -2
  213. package/docs/content/i18n.mdx +39 -4
  214. package/docs/content/includes.mdx +16 -0
  215. package/docs/content/meta.mdx +1 -0
  216. package/docs/content/meta.ts +1 -0
  217. package/docs/content/navigation.mdx +32 -10
  218. package/docs/content/sources/contentful.mdx +35 -0
  219. package/docs/content/sources/custom.mdx +43 -0
  220. package/docs/content/sources/github-releases.mdx +39 -0
  221. package/docs/content/sources/index.mdx +91 -0
  222. package/docs/content/sources/meta.ts +16 -0
  223. package/docs/content/sources/notion.mdx +32 -0
  224. package/docs/content/sources/obsidian.mdx +37 -0
  225. package/docs/content/sources/payload.mdx +31 -0
  226. package/docs/content/sources/remote-mdx.mdx +44 -0
  227. package/docs/content/sources/sanity.mdx +29 -0
  228. package/docs/content/sources/strapi.mdx +32 -0
  229. package/docs/content/syntax.mdx +69 -4
  230. package/docs/content/variables.mdx +41 -0
  231. package/docs/discoverability/agent-discovery.mdx +29 -2
  232. package/docs/discoverability/index.mdx +2 -2
  233. package/docs/discoverability/json-api.mdx +2 -0
  234. package/docs/discoverability/llms-txt.mdx +2 -2
  235. package/docs/discoverability/markdown.mdx +3 -1
  236. package/docs/discoverability/mcp.mdx +4 -0
  237. package/docs/discoverability/metadata.mdx +17 -0
  238. package/docs/discoverability/sitemap-and-robots.mdx +1 -1
  239. package/docs/references/api-pages.mdx +74 -0
  240. package/docs/references/asyncapi.mdx +4 -2
  241. package/docs/references/graphql.mdx +14 -2
  242. package/docs/references/meta.ts +1 -1
  243. package/docs/references/openapi.mdx +148 -7
  244. package/docs/references/scalar.mdx +3 -1
  245. package/package.json +43 -8
  246. package/skills/blume/SKILL.md +3 -0
  247. package/skills/blume-migrate/SKILL.md +6 -6
  248. package/skills/blume-migrate/references/docusaurus.md +7 -7
  249. package/skills/blume-migrate/references/fumadocs.md +17 -13
  250. package/skills/blume-migrate/references/mintlify.md +37 -19
  251. package/skills/blume-migrate/references/nextra.md +10 -7
  252. package/skills/blume-migrate/references/starlight.md +11 -8
  253. package/skills/blume-migrate/scripts/mintlify-codemod.mjs +60 -14
  254. package/skills/blume-write-skill/SKILL.md +82 -0
  255. package/src/ai/agent-readability.ts +2 -1
  256. package/src/ai/agent-surface.ts +9 -7
  257. package/src/ai/ai-catalog.ts +6 -3
  258. package/src/ai/ask-context.ts +103 -20
  259. package/src/ai/ask-data.ts +6 -0
  260. package/src/ai/ask-limits.ts +13 -0
  261. package/src/ai/ask-tools.ts +142 -0
  262. package/src/ai/ask.ts +354 -76
  263. package/src/ai/changelog-markdown.ts +11 -6
  264. package/src/ai/component-markdown.ts +76 -1
  265. package/src/ai/cors.ts +14 -3
  266. package/src/ai/index.ts +12 -0
  267. package/src/ai/llms.ts +6 -2
  268. package/src/ai/markdown.ts +2 -1
  269. package/src/ai/mcp/data.ts +6 -0
  270. package/src/ai/mcp/query.ts +14 -6
  271. package/src/ai/openapi-components.ts +36 -6
  272. package/src/ai/relative-links.ts +4 -38
  273. package/src/ai/site-skill.ts +274 -0
  274. package/src/ai/skills.ts +35 -2
  275. package/src/ai/write-skill.ts +97 -0
  276. package/src/astro/generate.ts +210 -66
  277. package/src/astro/index.ts +1 -0
  278. package/src/astro/integration.ts +42 -4
  279. package/src/astro/markdown-negotiation.ts +3 -0
  280. package/src/astro/module-types.ts +9 -1
  281. package/src/astro/pages.ts +23 -0
  282. package/src/astro/templates.ts +406 -108
  283. package/src/astro/variables.ts +31 -0
  284. package/src/audit/catalog.ts +38 -3
  285. package/src/audit/checks/contrast.ts +183 -0
  286. package/src/audit/checks/i18n.ts +2 -3
  287. package/src/audit/checks/indexability.ts +2 -3
  288. package/src/audit/checks/links.ts +19 -13
  289. package/src/audit/checks/network.ts +110 -6
  290. package/src/audit/checks/redirects.ts +6 -4
  291. package/src/audit/checks/robots.ts +58 -2
  292. package/src/audit/checks/sitemap.ts +2 -3
  293. package/src/audit/redirects.ts +46 -15
  294. package/src/audit/run.ts +5 -0
  295. package/src/audit/types.ts +4 -1
  296. package/src/audit/url.ts +14 -5
  297. package/src/blume-modules.d.ts +12 -1
  298. package/src/captcha/client.ts +152 -0
  299. package/src/captcha/hcaptcha.ts +36 -0
  300. package/src/captcha/index.ts +28 -0
  301. package/src/captcha/schema.ts +32 -0
  302. package/src/captcha/turnstile.ts +38 -0
  303. package/src/captcha/verify.ts +71 -0
  304. package/src/cli/args.ts +51 -0
  305. package/src/cli/build-failure.ts +23 -0
  306. package/src/cli/command-meta.ts +5 -0
  307. package/src/cli/commands/audit.ts +10 -1
  308. package/src/cli/commands/dev.ts +18 -2
  309. package/src/cli/commands/doctor.ts +67 -28
  310. package/src/cli/commands/eval.ts +36 -4
  311. package/src/cli/commands/init.ts +6 -4
  312. package/src/cli/commands/skill.ts +96 -0
  313. package/src/cli/commands/validate.ts +10 -1
  314. package/src/cli/index.ts +5 -0
  315. package/src/cli/init/scaffold.ts +3 -3
  316. package/src/cli/prepare.ts +6 -3
  317. package/src/cli/required-secrets.ts +72 -30
  318. package/src/components/BlumePage.astro +2 -0
  319. package/src/components/content/ApiEndpoint.astro +18 -0
  320. package/src/components/content/ApiField.astro +79 -0
  321. package/src/components/content/ApiPlayground.astro +66 -0
  322. package/src/components/content/ApiRail.astro +19 -0
  323. package/src/components/content/Color.astro +1 -0
  324. package/src/components/content/FileTree.astro +1 -0
  325. package/src/components/content/GithubInfo.astro +1 -0
  326. package/src/components/content/Panel.astro +1 -0
  327. package/src/components/content/ParamField.astro +25 -0
  328. package/src/components/content/RequestExample.astro +17 -0
  329. package/src/components/content/ResponseExample.astro +17 -0
  330. package/src/components/content/ResponseField.astro +32 -0
  331. package/src/components/content/Step.astro +1 -0
  332. package/src/components/content/Tile.astro +1 -0
  333. package/src/components/content/Tooltip.astro +1 -0
  334. package/src/components/content/Tree.astro +1 -0
  335. package/src/components/content/TypeTable.astro +4 -1
  336. package/src/components/content/View.astro +21 -0
  337. package/src/components/content/ViewSwitcher.astro +168 -0
  338. package/src/components/content/api-field.ts +103 -0
  339. package/src/components/content/api-page.ts +248 -0
  340. package/src/components/content/mermaid-element.ts +15 -1
  341. package/src/components/content/view-switcher.ts +71 -0
  342. package/src/components/index.ts +2 -0
  343. package/src/components/islands/Assistant.astro +10 -1
  344. package/src/components/islands/assistant.tsx +104 -14
  345. package/src/components/islands/code-question.ts +62 -0
  346. package/src/components/islands/hooks.ts +136 -21
  347. package/src/components/islands/support-link.ts +68 -0
  348. package/src/components/layout/Analytics.astro +11 -2
  349. package/src/components/layout/Banner.astro +14 -10
  350. package/src/components/layout/Breadcrumbs.astro +6 -2
  351. package/src/components/layout/ConsentBanner.astro +62 -0
  352. package/src/components/layout/ConsentHead.astro +38 -0
  353. package/src/components/layout/Directory.astro +94 -0
  354. package/src/components/layout/DrawerSwitchers.astro +51 -0
  355. package/src/components/layout/Empty.astro +2 -2
  356. package/src/components/layout/Header.astro +122 -80
  357. package/src/components/layout/LanguageSwitcher.astro +48 -15
  358. package/src/components/layout/NarrationPlayer.astro +1085 -0
  359. package/src/components/layout/NavSelector.astro +33 -7
  360. package/src/components/layout/PageActions.astro +139 -24
  361. package/src/components/layout/PageFeedback.astro +54 -49
  362. package/src/components/layout/PageLayout.astro +71 -3
  363. package/src/components/layout/ReferenceLayout.astro +17 -6
  364. package/src/components/layout/RelatedPages.astro +42 -0
  365. package/src/components/layout/RootLayout.astro +318 -47
  366. package/src/components/layout/Search.astro +47 -19
  367. package/src/components/layout/SiteFooter.astro +124 -0
  368. package/src/components/layout/SiteMetatags.astro +16 -0
  369. package/src/components/layout/TableOfContents.astro +24 -17
  370. package/src/components/layout/consent/native.ts +79 -0
  371. package/src/components/layout/consent/types.ts +37 -0
  372. package/src/components/layout/footer-links.ts +53 -0
  373. package/src/components/layout/footer-socials.ts +87 -0
  374. package/src/components/layout/head-scripts.ts +6 -1
  375. package/src/components/layout/locale-redirect.ts +107 -0
  376. package/src/components/layout/nav-utils.ts +83 -0
  377. package/src/components/layout/page-feedback.ts +96 -0
  378. package/src/components/layout/search/algolia.ts +10 -1
  379. package/src/components/layout/search/analytics.ts +126 -0
  380. package/src/components/layout/search/endpoint.ts +48 -5
  381. package/src/components/layout/search/flexsearch.ts +17 -5
  382. package/src/components/layout/search/orama-cloud.ts +26 -14
  383. package/src/components/layout/search/pagefind.ts +114 -5
  384. package/src/components/layout/search/types.ts +32 -0
  385. package/src/components/layout/search/typesense.ts +19 -3
  386. package/src/components/openapi/AsyncApiOperation.astro +14 -7
  387. package/src/components/openapi/Authorization.astro +10 -0
  388. package/src/components/openapi/GraphqlOperation.astro +5 -0
  389. package/src/components/openapi/Operation.astro +184 -13
  390. package/src/components/openapi/ParametersTable.astro +8 -4
  391. package/src/components/openapi/Playground.astro +7 -1
  392. package/src/components/openapi/RequestBody.astro +24 -5
  393. package/src/components/openapi/RequestPanel.astro +59 -7
  394. package/src/components/openapi/Responses.astro +7 -4
  395. package/src/components/openapi/SchemaTable.astro +15 -3
  396. package/src/components/openapi/async-snippets.ts +65 -9
  397. package/src/components/openapi/async.ts +123 -29
  398. package/src/components/openapi/code-samples.ts +97 -0
  399. package/src/components/openapi/graphql-helpers.ts +35 -12
  400. package/src/components/openapi/helpers.ts +36 -2
  401. package/src/components/openapi/message-model.ts +54 -11
  402. package/src/components/openapi/message.ts +14 -4
  403. package/src/components/openapi/operation-model.ts +16 -7
  404. package/src/components/openapi/playground-client.ts +24 -5
  405. package/src/components/openapi/playground-schema.ts +1 -1
  406. package/src/components/openapi/schema-tree.ts +44 -14
  407. package/src/components/openapi/security.ts +16 -3
  408. package/src/components/openapi/snippets.ts +873 -10
  409. package/src/components/openapi/validate-json.ts +4 -3
  410. package/src/components/props.ts +6 -0
  411. package/src/consent/client.ts +95 -0
  412. package/src/consent/clients.ts +19 -0
  413. package/src/consent/ethyca.ts +71 -0
  414. package/src/consent/head.ts +24 -0
  415. package/src/consent/index.ts +37 -0
  416. package/src/consent/init.ts +29 -0
  417. package/src/consent/native.ts +36 -0
  418. package/src/consent/osano.ts +59 -0
  419. package/src/consent/schema.ts +30 -0
  420. package/src/core/builtin-tags.ts +5 -0
  421. package/src/core/changelog-index.ts +31 -1
  422. package/src/core/client-address.ts +19 -0
  423. package/src/core/component-diagnostics.ts +53 -0
  424. package/src/core/component-overrides.ts +32 -0
  425. package/src/core/config-input.ts +225 -23
  426. package/src/core/data.ts +46 -4
  427. package/src/core/diagnostics.ts +8 -2
  428. package/src/core/footer.ts +26 -0
  429. package/src/core/graph.ts +39 -36
  430. package/src/core/i18n-ui.ts +84 -2
  431. package/src/core/includes.ts +21 -4
  432. package/src/core/links.ts +63 -19
  433. package/src/core/localizable.ts +26 -0
  434. package/src/core/navigation.ts +43 -12
  435. package/src/core/page-modes.ts +56 -0
  436. package/src/core/probe.ts +26 -6
  437. package/src/core/project-graph.ts +163 -16
  438. package/src/core/redirect-patterns.ts +520 -0
  439. package/src/core/related.ts +131 -0
  440. package/src/core/schema.ts +339 -66
  441. package/src/core/sources/cache.ts +6 -0
  442. package/src/core/sources/contentful-rich-text.ts +29 -6
  443. package/src/core/sources/contentful.ts +135 -25
  444. package/src/core/sources/filesystem.ts +26 -4
  445. package/src/core/sources/github-releases.ts +12 -1
  446. package/src/core/sources/lexical.ts +15 -10
  447. package/src/core/sources/mdx-remote.ts +62 -10
  448. package/src/core/sources/normalize.ts +228 -41
  449. package/src/core/sources/notion.ts +7 -1
  450. package/src/core/sources/obsidian.ts +16 -3
  451. package/src/core/sources/payload.ts +38 -15
  452. package/src/core/sources/read.ts +8 -3
  453. package/src/core/sources/remote.ts +72 -15
  454. package/src/core/sources/resolve.ts +11 -1
  455. package/src/core/sources/sanity.ts +43 -25
  456. package/src/core/sources/strapi.ts +2 -2
  457. package/src/core/types.ts +19 -1
  458. package/src/core/ui-packs/ar.ts +44 -0
  459. package/src/core/ui-packs/bg.ts +46 -0
  460. package/src/core/ui-packs/bn.ts +44 -0
  461. package/src/core/ui-packs/ca.ts +47 -0
  462. package/src/core/ui-packs/cs.ts +45 -0
  463. package/src/core/ui-packs/da.ts +46 -0
  464. package/src/core/ui-packs/de.ts +47 -0
  465. package/src/core/ui-packs/el.ts +46 -0
  466. package/src/core/ui-packs/es.ts +47 -0
  467. package/src/core/ui-packs/fa.ts +46 -0
  468. package/src/core/ui-packs/fi.ts +46 -0
  469. package/src/core/ui-packs/fr.ts +47 -0
  470. package/src/core/ui-packs/he.ts +44 -0
  471. package/src/core/ui-packs/hi.ts +45 -0
  472. package/src/core/ui-packs/hr.ts +46 -0
  473. package/src/core/ui-packs/hu.ts +45 -0
  474. package/src/core/ui-packs/id.ts +46 -0
  475. package/src/core/ui-packs/it.ts +46 -0
  476. package/src/core/ui-packs/ja.ts +46 -0
  477. package/src/core/ui-packs/ko.ts +45 -0
  478. package/src/core/ui-packs/nl.ts +47 -0
  479. package/src/core/ui-packs/no.ts +45 -0
  480. package/src/core/ui-packs/pl.ts +46 -0
  481. package/src/core/ui-packs/pt-br.ts +47 -0
  482. package/src/core/ui-packs/pt.ts +46 -0
  483. package/src/core/ui-packs/ro.ts +46 -0
  484. package/src/core/ui-packs/ru.ts +46 -0
  485. package/src/core/ui-packs/sk.ts +45 -0
  486. package/src/core/ui-packs/sr.ts +46 -0
  487. package/src/core/ui-packs/sv.ts +45 -0
  488. package/src/core/ui-packs/th.ts +44 -0
  489. package/src/core/ui-packs/tr.ts +46 -0
  490. package/src/core/ui-packs/uk.ts +46 -0
  491. package/src/core/ui-packs/vi.ts +46 -0
  492. package/src/core/ui-packs/zh-tw.ts +44 -0
  493. package/src/core/ui-packs/zh.ts +44 -0
  494. package/src/core/variables.ts +103 -0
  495. package/src/deploy/adapter-output.ts +7 -2
  496. package/src/deploy/adapters/cloudflare.ts +7 -5
  497. package/src/deploy/adapters/node.ts +47 -9
  498. package/src/deploy/adapters/types.ts +7 -3
  499. package/src/deploy/artifacts.ts +79 -9
  500. package/src/deploy/cloudflare-negotiation.ts +35 -5
  501. package/src/deploy/headers.ts +2 -1
  502. package/src/deploy/node-headers.ts +63 -9
  503. package/src/deploy/platforms/cloudflare.ts +45 -9
  504. package/src/deploy/platforms/netlify.ts +35 -2
  505. package/src/deploy/platforms/node.ts +12 -2
  506. package/src/deploy/platforms/types.ts +21 -7
  507. package/src/deploy/platforms/vercel.ts +149 -17
  508. package/src/deploy/redirects.ts +151 -24
  509. package/src/deploy/rss.ts +3 -1
  510. package/src/deploy/sitemap.ts +39 -5
  511. package/src/deploy/vercel-negotiation.ts +326 -102
  512. package/src/eval/agents.ts +18 -1
  513. package/src/eval/prompts.ts +6 -3
  514. package/src/eval/report.ts +34 -13
  515. package/src/eval/run.ts +5 -0
  516. package/src/markdown/api-rail.ts +259 -0
  517. package/src/markdown/code-title.ts +35 -9
  518. package/src/markdown/features.ts +3 -2
  519. package/src/markdown/fence-meta.ts +2 -0
  520. package/src/markdown/include.ts +11 -1
  521. package/src/markdown/index.ts +28 -5
  522. package/src/markdown/math.ts +4 -4
  523. package/src/markdown/relative-links.ts +3 -2
  524. package/src/markdown/variables.ts +56 -0
  525. package/src/markdown/views.ts +82 -0
  526. package/src/narration/build.ts +412 -0
  527. package/src/narration/player.ts +249 -0
  528. package/src/narration/provider.ts +29 -0
  529. package/src/narration/script.ts +592 -0
  530. package/src/og/card.ts +7 -6
  531. package/src/openapi/checks.ts +273 -0
  532. package/src/openapi/graphql-build.ts +21 -0
  533. package/src/openapi/graphql.ts +11 -0
  534. package/src/openapi/model.ts +72 -27
  535. package/src/openapi/overlay.ts +256 -0
  536. package/src/openapi/parse.ts +182 -4
  537. package/src/openapi/references.ts +64 -8
  538. package/src/openapi/render-mdx.ts +5 -1
  539. package/src/openapi/scalar.ts +40 -6
  540. package/src/openapi/source.ts +40 -15
  541. package/src/ratelimit/cloudflare.ts +54 -0
  542. package/src/ratelimit/index.ts +30 -0
  543. package/src/ratelimit/memory.ts +45 -0
  544. package/src/ratelimit/runtime.ts +247 -0
  545. package/src/ratelimit/schema.ts +28 -0
  546. package/src/ratelimit/upstash.ts +60 -0
  547. package/src/ratelimit/wrangler.ts +70 -0
  548. package/src/reference/asyncapi.ts +2 -2
  549. package/src/reference/graphql.ts +20 -3
  550. package/src/reference/index.ts +1 -0
  551. package/src/reference/openapi.ts +21 -7
  552. package/src/reference/options.ts +80 -8
  553. package/src/reference/scalar.ts +33 -8
  554. package/src/registry/eject.ts +23 -5
  555. package/src/registry/registry.ts +7 -0
  556. package/src/search/adapters/locale-scope.ts +30 -0
  557. package/src/search/adapters/typesense.ts +14 -4
  558. package/src/search/build.ts +21 -3
  559. package/src/search/documents.ts +26 -2
  560. package/src/search/orama-index.ts +191 -34
  561. package/src/search/pagefind-ranking.ts +39 -0
  562. package/src/search/source-pages.ts +29 -0
  563. package/src/search/sync/algolia.ts +111 -10
  564. package/src/search/sync/index.ts +52 -13
  565. package/src/search/sync/orama-cloud.ts +3 -0
  566. package/src/search/sync/typesense.ts +76 -26
  567. package/src/seo/metatags.ts +67 -0
  568. package/src/sources/contentful.ts +12 -0
  569. package/src/sources/github-releases.ts +7 -1
  570. package/src/sources/shared.ts +3 -0
  571. package/src/theme/chrome-icons.ts +1 -0
  572. package/src/theme/color.ts +500 -0
  573. package/src/theme/entry.ts +85 -6
  574. package/src/theme/palette.ts +121 -45
  575. package/src/translate/prompts.ts +1 -0
  576. package/src/translate/validate.ts +31 -3
  577. package/src/upgrade/upgrade.ts +4 -171
  578. package/dist/cli/chunk-1d7ve1dm.js.map +0 -12
  579. package/dist/cli/chunk-2hsdwb9n.js.map +0 -10
  580. package/dist/cli/chunk-35d4wj9f.js.map +0 -15
  581. package/dist/cli/chunk-364znk6q.js +0 -75
  582. package/dist/cli/chunk-364znk6q.js.map +0 -11
  583. package/dist/cli/chunk-5m5nmvyq.js.map +0 -13
  584. package/dist/cli/chunk-8ktnccpt.js.map +0 -10
  585. package/dist/cli/chunk-9t7a85s3.js.map +0 -10
  586. package/dist/cli/chunk-b07cmahc.js +0 -145
  587. package/dist/cli/chunk-b07cmahc.js.map +0 -11
  588. package/dist/cli/chunk-c8chx29p.js.map +0 -36
  589. package/dist/cli/chunk-e04dxsz1.js +0 -39
  590. package/dist/cli/chunk-e04dxsz1.js.map +0 -10
  591. package/dist/cli/chunk-j85vccga.js.map +0 -36
  592. package/dist/cli/chunk-p3v96n38.js.map +0 -10
  593. package/dist/cli/chunk-pehfxfta.js.map +0 -10
  594. package/dist/cli/chunk-pv29h0wf.js.map +0 -190
  595. package/dist/cli/chunk-q58y5e6a.js.map +0 -10
  596. package/dist/cli/chunk-vg9r4eb9.js.map +0 -14
  597. package/dist/cli/chunk-wrr3j9w9.js.map +0 -35
  598. package/dist/cli/chunk-yfyb25rh.js.map +0 -14
  599. package/docs/content/sources.mdx +0 -334
  600. /package/dist/cli/{chunk-tkacnehg.js.map → chunk-3v3ffbrj.js.map} +0 -0
  601. /package/dist/cli/{chunk-r9rcc4w7.js.map → chunk-8y2kmjv8.js.map} +0 -0
  602. /package/dist/cli/{chunk-2eytanqx.js.map → chunk-c887fj0s.js.map} +0 -0
  603. /package/dist/cli/{chunk-akbpwfxc.js.map → chunk-dzwehpy7.js.map} +0 -0
  604. /package/dist/cli/{chunk-2z928egk.js.map → chunk-ft9vfys6.js.map} +0 -0
  605. /package/dist/cli/{chunk-a58773jm.js.map → chunk-kma9f6sf.js.map} +0 -0
  606. /package/dist/cli/{chunk-crgn1q09.js.map → chunk-sds923fa.js.map} +0 -0
  607. /package/dist/cli/{chunk-acanzt5p.js.map → chunk-tdqhyxfz.js.map} +0 -0
@@ -0,0 +1,28 @@
1
+ import { z } from "zod";
2
+ import type { AdapterDescriptor } from "../core/adapter.ts";
3
+ /** Options for {@link turnstile}. */
4
+ export interface TurnstileOptions {
5
+ /** The widget's site key, from the Cloudflare dashboard. */
6
+ siteKey: string;
7
+ }
8
+ export declare const turnstileOptionsSchema: z.ZodObject<{
9
+ siteKey: z.ZodString;
10
+ }, z.core.$strict>;
11
+ export type TurnstileAdapter = AdapterDescriptor<"turnstile", TurnstileOptions>;
12
+ export declare const turnstileAdapterSchema: z.ZodObject<{
13
+ kind: z.ZodLiteral<"turnstile">;
14
+ options: z.ZodObject<{
15
+ siteKey: z.ZodString;
16
+ }, z.core.$strict>;
17
+ requiredSecrets: z.ZodArray<z.ZodString>;
18
+ runtimeDeps: z.ZodArray<z.ZodString>;
19
+ }, z.core.$strict>;
20
+ /** Where the assistant's route checks a Turnstile token. */
21
+ export declare const TURNSTILE_VERIFY_URL = "https://challenges.cloudflare.com/turnstile/v0/siteverify";
22
+ /**
23
+ * Cloudflare Turnstile. The site key is public and goes to the browser; the
24
+ * secret key the route checks tokens with comes from `TURNSTILE_SECRET_KEY`.
25
+ * Set the widget to Invisible or Managed in the Cloudflare dashboard: most
26
+ * readers never see a challenge.
27
+ */
28
+ export declare const turnstile: (options: TurnstileOptions) => TurnstileAdapter;
@@ -126,7 +126,7 @@ export interface PlanEnvironment {
126
126
  * What the project still needs from a workspace it sits in, when `init` left
127
127
  * that workspace's config alone: a place in a pnpm workspace's `packages`
128
128
  * (pnpm skips a folder it doesn't list), pnpm's approval for esbuild's build
129
- * script (pnpm 10 and later fail the install without it), or Yarn Berry's
129
+ * script (pnpm 11 and later fail the install without it), or Yarn Berry's
130
130
  * `node_modules` linker. Undefined when the workspace already has it, or the
131
131
  * project doesn't sit in one.
132
132
  */
@@ -0,0 +1,62 @@
1
+ /**
2
+ * The props `<ParamField>` and `<ResponseField>` take, in Mintlify's shape: a
3
+ * parameter names its location with the attribute that carries its name
4
+ * (`<ParamField query="limit">`), and both take `type`, `required`,
5
+ * `deprecated`, and `default`; a response field adds `pre` and `post` labels
6
+ * around its name. Pure, so the Markdown downlevel and the playground can
7
+ * read fields the way the components render them.
8
+ */
9
+ /** Where a `<ParamField>` parameter goes, in the order the attributes are checked. */
10
+ export declare const PARAM_LOCATIONS: readonly ["path", "query", "header", "body"];
11
+ /** A parameter's location. */
12
+ export type ParamLocation = (typeof PARAM_LOCATIONS)[number];
13
+ /** A literal value as MDX passes it: a string attribute, or an expression's data. */
14
+ export type FieldValue = string | number | boolean | null | undefined | FieldValue[] | {
15
+ [key: string]: FieldValue;
16
+ };
17
+ /** A boolean prop: MDX shorthand (`required`) is `true`, `required="true"` a string. */
18
+ export type FlagProp = boolean | string;
19
+ /** What both field components take. */
20
+ export interface FieldProps {
21
+ /** The value used when none is given. */
22
+ default?: FieldValue;
23
+ deprecated?: FlagProp;
24
+ required?: FlagProp;
25
+ /** Free text: `string`, `integer`, `string[]`, `object`. */
26
+ type?: string;
27
+ }
28
+ /** `<ParamField>`: a request parameter, named by its location attribute. */
29
+ export interface ParamFieldProps extends FieldProps {
30
+ body?: string;
31
+ header?: string;
32
+ /** The name, for a field with no location attribute. */
33
+ name?: string;
34
+ path?: string;
35
+ /**
36
+ * An example value: the one the playground and request samples start
37
+ * with, not an input's placeholder hint (see `fieldSchema`).
38
+ */
39
+ placeholder?: string;
40
+ query?: string;
41
+ }
42
+ /** `<ResponseField>`: a field of the response. */
43
+ export interface ResponseFieldProps extends FieldProps {
44
+ name: string;
45
+ /** Labels after the name. */
46
+ post?: string | string[];
47
+ /** Labels before the name. */
48
+ pre?: string | string[];
49
+ }
50
+ /** Whether a flag prop is on. */
51
+ export declare const isOn: (value?: FlagProp) => boolean;
52
+ /** Where a parameter goes, and what it's called. */
53
+ export interface ParamFieldName {
54
+ location?: ParamLocation;
55
+ name?: string;
56
+ }
57
+ /** A parameter's location and name: the first location attribute set, else `name`. */
58
+ export declare const paramField: (props: ParamFieldProps) => ParamFieldName;
59
+ /** A default value as shown: text as written, anything else as JSON; `null` when there is none. */
60
+ export declare const defaultLabel: (value?: FieldValue) => string | null;
61
+ /** `pre`/`post` labels as a list, whether one was written or several. */
62
+ export declare const fieldLabels: (value?: string | string[]) => string[];
@@ -0,0 +1,100 @@
1
+ import type { ParameterLike, SchemaLike } from "../openapi/helpers.ts";
2
+ import type { OperationSecurity } from "../openapi/security.ts";
3
+ import type { FieldValue, ParamLocation } from "./api-field.ts";
4
+ /**
5
+ * A hand-written API page's endpoint, as its `api` frontmatter and its
6
+ * `<ParamField>`s describe it, turned into the OpenAPI-shaped pieces the
7
+ * operation playground and code samples are built from: a page with
8
+ * `api: "POST /v1/users"` gets the same Try it panel and request samples as
9
+ * a spec'd operation, with no spec. Mintlify's frontmatter, so migrated pages
10
+ * keep it as written.
11
+ */
12
+ /** How a hand-written endpoint authenticates (`authMethod`, `api.auth.method`). */
13
+ export declare const AUTH_METHODS: readonly ["bearer", "basic", "key", "none"];
14
+ export type AuthMethod = (typeof AUTH_METHODS)[number];
15
+ /** What a page's playground shows: all of it, the samples only, or none. */
16
+ export declare const PLAYGROUND_MODES: readonly ["interactive", "simple", "none"];
17
+ export type PlaygroundMode = (typeof PLAYGROUND_MODES)[number];
18
+ /** `api` frontmatter: an HTTP method, then a path or a full URL. */
19
+ export declare const API_ENDPOINT: RegExp;
20
+ /** The site's default auth for hand-written endpoints (`api.auth`). */
21
+ export interface EndpointAuth {
22
+ method: AuthMethod;
23
+ /** The header an API key goes in. */
24
+ name?: string;
25
+ }
26
+ /** One `<ParamField>`, as the page's plugin collected it. */
27
+ export interface EndpointField {
28
+ default?: FieldValue;
29
+ deprecated?: boolean;
30
+ /** Body fields nested in this one's `<Expandable>`. */
31
+ fields?: EndpointField[];
32
+ location: ParamLocation;
33
+ name: string;
34
+ placeholder?: string;
35
+ required?: boolean;
36
+ type?: string;
37
+ }
38
+ /** What the page's plugin hands the endpoint components. */
39
+ export interface EndpointSpec {
40
+ authMethod?: AuthMethod;
41
+ fields: EndpointField[];
42
+ method: string;
43
+ playground?: PlaygroundMode;
44
+ /** The page has a `<RequestExample>`, which stands in for generated samples. */
45
+ requestExample: boolean;
46
+ /** The `api` target as written: a path, or a full URL. */
47
+ target: string;
48
+ }
49
+ /** The method and target of an `api` value, or `null` when it isn't one. */
50
+ export declare const parseApiEndpoint: (value: string) => {
51
+ method: string;
52
+ target: string;
53
+ } | null;
54
+ /** An endpoint's target, split the way the operation model takes it. */
55
+ export interface EndpointTarget {
56
+ path: string;
57
+ servers: {
58
+ url: string;
59
+ }[];
60
+ }
61
+ /**
62
+ * The target split into a server and a path: a full URL is its own server,
63
+ * and a path joins the site's `api.server`, or stays relative to the docs
64
+ * when there is none.
65
+ */
66
+ export declare const endpointTarget: (target: string, server?: string) => EndpointTarget;
67
+ /**
68
+ * A field's JSON schema from its `type`: `string[]` an array of strings, a
69
+ * field with nested fields an object with those properties, and anything
70
+ * that isn't a JSON type (`enum<string>`, `Date`) a string, which is what it
71
+ * goes over the wire as. A default and placeholder carry over, the
72
+ * placeholder as the example the samples show.
73
+ */
74
+ export declare const fieldSchema: (field: EndpointField) => SchemaLike;
75
+ /** The path, query, and header fields as OpenAPI parameters. */
76
+ export declare const endpointParameters: (fields: EndpointField[]) => ParameterLike[];
77
+ /**
78
+ * The body fields as a JSON request body, or `undefined` when there are none.
79
+ * Its example, which the playground and samples start from, holds only the
80
+ * {@link sentFields}.
81
+ */
82
+ export declare const endpointBody: (fields: EndpointField[]) => {
83
+ content: {
84
+ "application/json": {
85
+ example: import("../openapi/helpers.ts").SpecValue;
86
+ schema: SchemaLike;
87
+ };
88
+ };
89
+ } | undefined;
90
+ /**
91
+ * The security an endpoint enforces: its page's `authMethod`, else the
92
+ * site's `api.auth`, else none. An API key goes in the configured header,
93
+ * `x-api-key` when none is named.
94
+ */
95
+ export declare const endpointSecurity: (authMethod?: AuthMethod, siteAuth?: EndpointAuth) => OperationSecurity;
96
+ /**
97
+ * The endpoint spec the page's plugin wrote into the `spec` attribute of
98
+ * `<ApiEndpoint>` and `<ApiPlayground>`.
99
+ */
100
+ export declare const readEndpointSpec: (json: string) => EndpointSpec;
@@ -69,6 +69,32 @@ export declare const getPagination: (flat: FlatPage[], route: string) => {
69
69
  next: FlatPage | null;
70
70
  prev: FlatPage | null;
71
71
  };
72
+ /** A group node in the sidebar tree. */
73
+ export type NavGroup = Extract<NavNode, {
74
+ kind: "group";
75
+ }>;
76
+ /**
77
+ * The group whose own page `route` is, when that page lists the group's
78
+ * pages: its `directory` (inherited when the group sets none) is `card` or
79
+ * `accordion`. `null` on every other page.
80
+ */
81
+ export declare const directoryGroupForRoute: (nodes: NavNode[], route: string) => NavGroup | null;
82
+ /** One entry in a group page's directory: a page, or a subgroup and its pages. */
83
+ export interface DirectoryEntry {
84
+ description?: string;
85
+ /** The page, or the subgroup's own page (its first page when it has none). */
86
+ href: string;
87
+ icon?: string;
88
+ label: string;
89
+ /** A subgroup's pages in sidebar order, its own page first; absent for a page. */
90
+ pages?: FlatPage[];
91
+ }
92
+ /**
93
+ * What a group's page lists: the group's pages and subgroups, in sidebar
94
+ * order, without the page itself or external links. A subgroup is described
95
+ * by its own page, and one with no page to link to is left out.
96
+ */
97
+ export declare const directoryEntries: (group: NavGroup) => DirectoryEntry[];
72
98
  /**
73
99
  * A stable id for every group in a sidebar — `g<n>` by pre-order position in
74
100
  * the full tree. The layout hands `NavTree` a scoped view of that tree (a
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Hand-written code samples from a spec: the `x-codeSamples` extension on an
3
+ * operation (Redocly's, which Mintlify, Speakeasy, and Stainless write too),
4
+ * or its older spelling `x-code-samples`. Each entry names a `lang`, holds
5
+ * the `source`, and may carry a `label`. They render as their own tabs ahead
6
+ * of the generated samples and, being fixed text, the playground leaves them
7
+ * as written.
8
+ */
9
+ /** One hand-written sample, ready to render as a tab. */
10
+ export interface CustomCodeSample {
11
+ /** A stable, unique tab key. */
12
+ key: string;
13
+ /** The tab label: the entry's own, else the language's name. */
14
+ label: string;
15
+ /** The Shiki language to highlight `source` with. */
16
+ lang: string;
17
+ source: string;
18
+ }
19
+ /** The two places an operation keeps them. */
20
+ export interface CodeSamplesCarrier {
21
+ "x-code-samples"?: unknown;
22
+ "x-codeSamples"?: unknown;
23
+ }
24
+ /**
25
+ * The operation's hand-written samples, with a unique tab label each. A label
26
+ * two samples share gains its language (`List plants · JavaScript`), and one
27
+ * that still repeats gains a number. Malformed entries are skipped.
28
+ */
29
+ export declare const customCodeSamples: (operation: CodeSamplesCarrier) => CustomCodeSample[];
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Runtime helpers for the OpenAPI components. These operate on the parsed spec
3
+ * behind the `blume:openapi` alias — resolving `$ref`s (kept intact at parse
4
+ * time to avoid circular graphs), labelling types, and generating request
5
+ * examples and code samples. Browser-safe (no server-only imports); example
6
+ * values come from openapi-sampler, which is likewise browser-safe.
7
+ */
8
+ /** Any value a parsed OpenAPI document can hold: JSON, nested schemas included. */
9
+ export type SpecValue = string | number | boolean | null | undefined | SpecValue[] | {
10
+ [key: string]: SpecValue;
11
+ };
12
+ /** A permissive view of an OpenAPI 3.1 schema — only the fields we render. */
13
+ export interface SchemaLike {
14
+ $ref?: string;
15
+ type?: string | string[];
16
+ format?: string;
17
+ title?: string;
18
+ description?: string;
19
+ properties?: Record<string, SchemaLike>;
20
+ required?: string[];
21
+ items?: SchemaLike;
22
+ enum?: SpecValue[];
23
+ const?: SpecValue;
24
+ default?: SpecValue;
25
+ example?: SpecValue;
26
+ examples?: SpecValue[];
27
+ allOf?: SchemaLike[];
28
+ oneOf?: SchemaLike[];
29
+ anyOf?: SchemaLike[];
30
+ additionalProperties?: boolean | SchemaLike;
31
+ nullable?: boolean;
32
+ deprecated?: boolean;
33
+ readOnly?: boolean;
34
+ writeOnly?: boolean;
35
+ minimum?: number;
36
+ maximum?: number;
37
+ minLength?: number;
38
+ maxLength?: number;
39
+ minItems?: number;
40
+ maxItems?: number;
41
+ pattern?: string;
42
+ [key: string]: SpecValue;
43
+ }
44
+ /** A permissive view of an operation parameter — only the fields we render. */
45
+ export interface ParameterLike {
46
+ $ref?: string;
47
+ name?: string;
48
+ in?: string;
49
+ description?: string;
50
+ required?: boolean;
51
+ deprecated?: boolean;
52
+ schema?: SchemaLike;
53
+ example?: SpecValue;
54
+ [key: string]: SpecValue;
55
+ }
56
+ /** The `components` object of a parsed spec: section name → named-node table. */
57
+ export type ComponentsLike = Record<string, Record<string, SpecValue> | undefined>;
58
+ /**
59
+ * Resolve one level of `$ref` against a named `components` section
60
+ * (`parameters`, `requestBodies`, `responses`). Mirrors {@link resolveSchema}:
61
+ * an unknown ref — or one pointing into a different section — is returned
62
+ * as-is.
63
+ */
64
+ export declare const resolveComponentRef: <T extends {
65
+ $ref?: string;
66
+ }>(node: T, components: ComponentsLike | undefined, section: string) => T;
67
+ /**
68
+ * Path-level and operation-level parameters merged into one render list.
69
+ * `$ref`s resolve against `components.parameters` first; then an operation
70
+ * parameter overrides a path-level one with the same `name` + `in` (the
71
+ * OpenAPI override rule), so a re-declared parameter appears once.
72
+ */
73
+ export declare const mergeParameters: (pathParameters: ParameterLike[] | undefined, operationParameters: ParameterLike[] | undefined, components?: ComponentsLike) => ParameterLike[];
74
+ /** The display name of a `$ref`, e.g. `#/components/schemas/Pet` -> `Pet`. */
75
+ export declare const refName: (ref: string) => string;
76
+ /**
77
+ * The one member of an `allOf` that only wraps it: `allOf: [{ $ref }]` beside
78
+ * a `description`, `readOnly`, or `default`, which is how drf-spectacular and
79
+ * other generators attach keywords a 3.0 `$ref` can't carry. `undefined` for
80
+ * a real composition: several members, or properties or branches of its own.
81
+ */
82
+ export declare const soleAllOfMember: (schema: SchemaLike) => SchemaLike | undefined;
83
+ /**
84
+ * Resolve one level of `$ref` against the document's component schemas. A
85
+ * single-member `allOf` wrapper resolves like its member, with the wrapper's
86
+ * own keywords on top: its `description` is about this field.
87
+ */
88
+ export declare const resolveSchema: (schemas: Record<string, SchemaLike>, schema?: SchemaLike) => SchemaLike;
89
+ /**
90
+ * A parameter's description: its own, else its schema's (resolved one `$ref`
91
+ * level), which is where generators like Elysia and oRPC write it.
92
+ */
93
+ export declare const parameterDescription: (param: {
94
+ description?: string;
95
+ schema?: SchemaLike;
96
+ }, schemas: Record<string, SchemaLike>) => string | undefined;
97
+ /**
98
+ * A short, human-readable type label for a schema row. `$ref`s label by name
99
+ * (`Pet`, `Pet[]`) without resolving — which also means circular refs through
100
+ * array items can't recurse forever. A `null` member stays out of a union's
101
+ * label: rows mark it with {@link isNullable}, as they do `type: [T, "null"]`.
102
+ * A single-member `allOf` wrapper labels as its member; a real composition is
103
+ * an `object`.
104
+ */
105
+ export declare const typeLabel: (schema: SchemaLike) => string;
106
+ /**
107
+ * Whether this schema is nullable: 3.0 `nullable`, a 3.1 `"null"` in `type`,
108
+ * or a `{ type: "null" }` member of a `oneOf`/`anyOf` union.
109
+ */
110
+ export declare const isNullable: (schema: SchemaLike) => boolean;
111
+ /** Human-readable validation constraints for a schema, in display order. */
112
+ export declare const constraints: (schema: SchemaLike) => string[];
113
+ /** The merged property list and required set a schema exposes. */
114
+ export interface ObjectPropertySet {
115
+ properties: [string, SchemaLike][];
116
+ required: Set<string>;
117
+ }
118
+ /**
119
+ * The object properties a schema exposes, merging `allOf` branches so an
120
+ * `allOf`-composed model still lists every field. Returns the properties plus
121
+ * the merged required set.
122
+ */
123
+ export declare const objectProperties: (schema: SchemaLike, schemas: Record<string, SchemaLike>) => ObjectPropertySet;
124
+ /**
125
+ * Build a representative example value for a schema via openapi-sampler
126
+ * (Redoc's generator): declared `example`/`const`/`default`/`enum` values
127
+ * win, formats produce realistic placeholders (`email`, `uuid`, `date-time`),
128
+ * and circular `$ref` chains — which keeping refs intact allows — terminate
129
+ * safely. A request sample skips `readOnly` fields (a server-generated field
130
+ * has no place in one); a response sample skips `writeOnly` fields (a
131
+ * password the client sends never comes back) and keeps the `readOnly` ones.
132
+ */
133
+ export declare const exampleValue: (schema: SchemaLike | undefined, schemas: Record<string, SchemaLike>, direction?: "request" | "response") => SpecValue;
134
+ /** Where an author can declare an example: a parameter or a media type. */
135
+ export interface ExampleCarrier {
136
+ example?: SpecValue;
137
+ examples?: SpecValue;
138
+ }
139
+ /**
140
+ * The example a parameter or media type declares: its `example`, else the
141
+ * first `value` in its `examples` map — inline, or behind a `$ref` to
142
+ * `#/components/examples`, resolved against `components`. Scalar's upgrade
143
+ * moves every OpenAPI 3.0 and Swagger 2.0 `example` into
144
+ * `examples.default.value`, and 3.1 authors write that map directly, so
145
+ * reading `example` alone would drop them all. `undefined` when nothing is
146
+ * declared.
147
+ */
148
+ export declare const declaredExample: (carrier: ExampleCarrier, components?: ComponentsLike) => SpecValue;
149
+ /**
150
+ * A response media type's example for the Response panel: the declared one,
151
+ * else a sample built for the response direction (`readOnly` kept,
152
+ * `writeOnly` skipped).
153
+ */
154
+ export declare const responseExample: (media: ExampleCarrier & {
155
+ schema?: SchemaLike;
156
+ }, schemas: Record<string, SchemaLike>, components?: ComponentsLike) => SpecValue;
157
+ /** Pretty-print a JSON value for an example/code block. */
158
+ export declare const toJson: <T>(value: T) => string;
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Security (authorization) resolution for the OpenAPI components. An operation
3
+ * enforces its own `security` when declared — an empty array explicitly makes
4
+ * it public — and inherits the document's root `security` otherwise. Within the
5
+ * resolved list, each requirement object is one way to authorize (OR between
6
+ * entries), and every scheme named inside a single requirement is needed
7
+ * together (AND). Pure and dependency-free like `helpers.ts`, so it runs in the
8
+ * browser build with no server-only imports.
9
+ */
10
+ /** A permissive view of an OpenAPI security scheme — only the fields we render. */
11
+ export interface SecuritySchemeLike {
12
+ type?: string;
13
+ description?: string;
14
+ /** `apiKey`: the parameter name the key is sent as. */
15
+ name?: string;
16
+ /** `apiKey`: where the key goes — `header`, `query`, or `cookie`. */
17
+ in?: string;
18
+ /** `http`: the HTTP auth scheme, e.g. `bearer` or `basic`. */
19
+ scheme?: string;
20
+ /** `http` bearer: a hint at the token format, e.g. `JWT`. */
21
+ bearerFormat?: string;
22
+ }
23
+ /** One security requirement: scheme name -> required scopes (empty outside OAuth). */
24
+ export type SecurityRequirementLike = Record<string, string[]>;
25
+ /** A scheme resolved out of `components.securitySchemes`, with its scopes. */
26
+ export interface ResolvedScheme {
27
+ /** The scheme's component name, e.g. `bearerAuth`. */
28
+ key: string;
29
+ /** The scheme object; undefined when the requirement names an unknown one. */
30
+ scheme?: SecuritySchemeLike;
31
+ scopes: string[];
32
+ /**
33
+ * AsyncAPI: the servers that declare this scheme, set only when the
34
+ * channel's servers don't all declare the same ones.
35
+ */
36
+ servers?: string[];
37
+ }
38
+ /** The security state one operation renders. */
39
+ export interface OperationSecurity {
40
+ /** Ways to authorize (OR); every scheme within one entry is required (AND). */
41
+ alternatives: ResolvedScheme[][];
42
+ /** True when an empty requirement also allows unauthenticated calls. */
43
+ optional: boolean;
44
+ /**
45
+ * AsyncAPI: the servers that declare no security while others do, so the
46
+ * schemes apply on the other servers only.
47
+ */
48
+ unauthenticatedServers?: string[];
49
+ }
50
+ /**
51
+ * The requirement list an operation actually enforces: its own `security` when
52
+ * declared — the OpenAPI override rule, where `[]` removes the default and
53
+ * makes the operation public — else the document's root `security`. A webhook
54
+ * takes only its own: the API sends it, so the root requirements, which guard
55
+ * calls to the API, say nothing about what the receiving endpoint checks.
56
+ */
57
+ export declare const effectiveSecurity: (operation?: SecurityRequirementLike[], document?: SecurityRequirementLike[], webhook?: boolean) => SecurityRequirementLike[];
58
+ /**
59
+ * Resolve requirement names against `components.securitySchemes`. A name with
60
+ * no matching component is kept (with `scheme` undefined) so an inconsistent
61
+ * spec still renders the requirement instead of silently dropping it. An empty
62
+ * requirement object — the spec idiom for "auth optional" — contributes no
63
+ * alternative and flips `optional` instead.
64
+ */
65
+ export declare const resolveSecurity: (requirements: SecurityRequirementLike[], schemes: Record<string, SecuritySchemeLike> | undefined) => OperationSecurity;
66
+ /**
67
+ * One AsyncAPI 3.x security entry: a `$ref` into
68
+ * `components.securitySchemes`, or an inline scheme object (the shape the
69
+ * official 2.x converter emits for scoped requirements, `scopes` on the
70
+ * scheme itself).
71
+ */
72
+ export interface AsyncApiSecurityEntryLike {
73
+ $ref?: string;
74
+ type?: string;
75
+ scopes?: unknown;
76
+ }
77
+ /**
78
+ * Resolve an AsyncAPI 3.x security list. Unlike OpenAPI's requirement maps,
79
+ * each entry names a single scheme and any one entry satisfies the operation
80
+ * — so every entry becomes its own one-scheme "or" alternative. A `$ref`
81
+ * pointing at an undeclared scheme is kept (with `scheme` undefined),
82
+ * matching {@link resolveSecurity}'s render-don't-drop rule.
83
+ */
84
+ export declare const resolveAsyncApiSecurity: (entries: AsyncApiSecurityEntryLike[], schemes: Record<string, SecuritySchemeLike> | undefined) => OperationSecurity;
85
+ /** A short human label for a scheme row, e.g. `Bearer token` or `API key`. */
86
+ export declare const schemeLabel: (resolved: ResolvedScheme) => string;
87
+ /**
88
+ * Where the credential travels: the header/query/cookie parameter it occupies.
89
+ * Undefined for schemes with no request parameter (mutual TLS) and for unknown
90
+ * refs, where guessing a location would be misleading.
91
+ */
92
+ export declare const schemeCarrier: (resolved: ResolvedScheme) => {
93
+ name: string;
94
+ in: string;
95
+ } | undefined;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Code-sample generation for an operation. Deliberately dependency-free: the
3
+ * playground client renders samples live in the browser, so this module must
4
+ * stay out of the server-only dependency graph (no helpers.ts, no
5
+ * openapi-sampler). Requests are assembled once by `buildRequest` in
6
+ * `request.ts`; the builders here only render a finished `RequestSample` as
7
+ * simple, copy-pasteable starter code — not an exhaustive SDK.
8
+ */
9
+ export interface RequestSample {
10
+ method: string;
11
+ url: string;
12
+ headers: Record<string, string>;
13
+ /**
14
+ * The request body as sent, when the operation takes one: JSON text,
15
+ * form-urlencoded pairs, or a raw media type's text.
16
+ */
17
+ body?: string;
18
+ bodyValue?: unknown;
19
+ /**
20
+ * A `multipart/form-data` body's parts as `[name, value]` pairs, set
21
+ * instead of `body`. The request carries no Content-Type of its own for
22
+ * them: the client writes one with the parts' boundary.
23
+ */
24
+ formData?: [string, string][];
25
+ }
26
+ /**
27
+ * Whether fetch refuses to send `method` (an upper-case HTTP method). TRACE is
28
+ * one of the Fetch standard's forbidden methods, and the only one an OpenAPI
29
+ * spec can declare: browsers and Node's fetch alike throw a TypeError before
30
+ * any request goes out.
31
+ */
32
+ export declare const fetchRefusesMethod: (method: string) => boolean;
33
+ /** A code-sample language: config id -> label, Shiki lang, and builder. */
34
+ export interface SampleLanguage {
35
+ id: string;
36
+ label: string;
37
+ lang: string;
38
+ build: (sample: RequestSample) => string;
39
+ }
40
+ /** Every id `codeSamples` accepts for a generated sample. */
41
+ export declare const SAMPLE_LANGUAGE_IDS: string[];
42
+ /** A configured id or alias, as the id it names (lowercased). */
43
+ export declare const sampleLanguageId: (raw: string) => string;
44
+ /** A language's display name and the Shiki language that highlights it. */
45
+ export interface SampleLanguageInfo {
46
+ label: string;
47
+ lang: string;
48
+ }
49
+ /**
50
+ * The display name and Shiki language of a language id or alias, or `null`
51
+ * when Blume doesn't generate that language.
52
+ */
53
+ export declare const sampleLanguageInfo: (raw: string) => SampleLanguageInfo | null;
54
+ /** `openapi()`'s default `codeSamples`, which hand-written endpoint pages always use. */
55
+ export declare const DEFAULT_SAMPLE_LANGUAGES: string[];
56
+ /**
57
+ * The sample languages to render, resolved from config ids (unknown ids
58
+ * dropped), in order. `false` and an empty list both render none.
59
+ */
60
+ export declare const sampleLanguages: (ids: string[] | false) => SampleLanguage[];
@@ -0,0 +1,48 @@
1
+ import { z } from "zod";
2
+ import type { HeadScript } from "../analytics/head.ts";
3
+ import type { AdapterDescriptor } from "../core/adapter.ts";
4
+ /** Options for {@link ethyca}. */
5
+ export interface EthycaOptions {
6
+ /**
7
+ * The key of the privacy notice that covers analytics, as you named it in
8
+ * Fides. Defaults to `analytics`.
9
+ */
10
+ notice?: string;
11
+ /** Your Fides privacy center's origin, which serves `fides.js`. */
12
+ privacyCenter: string;
13
+ /** The Fides property to load, when you have more than one. */
14
+ propertyId?: string;
15
+ }
16
+ export declare const ethycaOptionsSchema: z.ZodObject<{
17
+ notice: z.ZodOptional<z.ZodString>;
18
+ privacyCenter: z.ZodURL;
19
+ propertyId: z.ZodOptional<z.ZodString>;
20
+ }, z.core.$strict>;
21
+ export type EthycaAdapter = AdapterDescriptor<"ethyca", EthycaOptions>;
22
+ export declare const ethycaAdapterSchema: z.ZodObject<{
23
+ kind: z.ZodLiteral<"ethyca">;
24
+ options: z.ZodObject<{
25
+ notice: z.ZodOptional<z.ZodString>;
26
+ privacyCenter: z.ZodURL;
27
+ propertyId: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strict>;
29
+ requiredSecrets: z.ZodArray<z.ZodString>;
30
+ runtimeDeps: z.ZodArray<z.ZodString>;
31
+ }, z.core.$strict>;
32
+ /**
33
+ * Ethyca's Fides consent manager, loaded from your privacy center. Fides
34
+ * shows its own banner and modal, set up in Fides, and Blume runs the
35
+ * analytics once the reader's analytics notice is on. Nothing here is
36
+ * secret.
37
+ */
38
+ export declare const ethyca: (options: EthycaOptions) => EthycaAdapter;
39
+ /**
40
+ * Reports the analytics notice to `window.blumeConsent` when Fides is ready
41
+ * and whenever the reader saves a change, and reopens Fides' modal from the
42
+ * Cookie settings link. The notice key rides in as `data-notice`. It counts
43
+ * as allowed when on (`true`), opted in, or a notice that only asks for
44
+ * acknowledgment.
45
+ */
46
+ export declare const ETHYCA_BRIDGE = "(()=>{const c=window.blumeConsent;if(!c){return;}const k=document.currentScript?.dataset.notice??\"analytics\";const sync=(e)=>{const v=(e?.detail?.consent??window.Fides?.consent??{})[k];c.set({analytics:v===true||v===\"opt_in\"||v===\"acknowledge\"});};c.open=()=>window.Fides?.showModal();addEventListener(\"FidesReady\",sync);addEventListener(\"FidesUpdated\",sync);if(window.Fides?.initialized){sync();}})();";
47
+ /** Fides' script from the privacy center, then the bridge. */
48
+ export declare const ethycaHead: (options: EthycaOptions) => HeadScript[];
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Consent adapters for `blume.config.ts`:
3
+ *
4
+ * ```ts
5
+ * import { defineConfig } from "blume";
6
+ * import { googleAnalytics } from "blume/analytics";
7
+ * import { native } from "blume/consent";
8
+ *
9
+ * export default defineConfig({
10
+ * analytics: [googleAnalytics({ id: "G-XXXXXXXXXX" })],
11
+ * consent: native({ policy: "/privacy" }),
12
+ * });
13
+ * ```
14
+ *
15
+ * With `consent` set, analytics waits for the reader: every adapter's tags are
16
+ * held until the consent adapter reports that analytics is allowed. Each
17
+ * factory returns a plain descriptor (see `core/adapter.ts`).
18
+ *
19
+ * Adding a consent manager: a factory and option schema in its own module,
20
+ * and a member of `consentAdapterSchema` (`schema.ts`). Then connect it to
21
+ * `window.blumeConsent` (see `init.ts` for the contract): report the reader's
22
+ * choice with `set({ analytics })` on load and on every change, and set
23
+ * `open` to reopen the manager's preferences. A hosted manager does that
24
+ * with tags in `consentHead` (`head.ts`): its loader, then a constant bridge
25
+ * script (`osano.ts` is an example). A manager that ships as an npm package
26
+ * does it in a browser module instead, registered in `clients.ts`, with its
27
+ * packages in the factory's `runtimeDeps` (`native()`'s banner is the
28
+ * example).
29
+ */
30
+ export type { AdapterDescriptor, JsonValue } from "../core/adapter.ts";
31
+ export { ethyca } from "./ethyca.ts";
32
+ export type { EthycaAdapter, EthycaOptions } from "./ethyca.ts";
33
+ export { native } from "./native.ts";
34
+ export type { NativeAdapter, NativeOptions } from "./native.ts";
35
+ export { osano } from "./osano.ts";
36
+ export type { OsanoAdapter, OsanoOptions } from "./osano.ts";
37
+ export type { ConsentAdapter } from "./schema.ts";