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.
- package/AGENTS.md +1 -0
- package/CHANGELOG.md +48 -0
- package/README.md +1 -1
- package/dist/cli/{chunk-1d7ve1dm.js → chunk-0gz36akr.js} +18 -2
- package/dist/cli/{chunk-1d7ve1dm.js.map → chunk-0gz36akr.js.map} +3 -3
- package/dist/cli/{chunk-2eytanqx.js → chunk-1n228xqb.js} +2 -2
- package/dist/cli/{chunk-yfyb25rh.js → chunk-2f3ndkpw.js} +24 -8
- package/dist/cli/chunk-2f3ndkpw.js.map +14 -0
- package/dist/cli/{chunk-r20tn01b.js → chunk-2f7n4qzt.js} +8 -2
- package/dist/cli/{chunk-r20tn01b.js.map → chunk-2f7n4qzt.js.map} +3 -3
- package/dist/cli/{chunk-35d4wj9f.js → chunk-2n4ps1b3.js} +7 -7
- package/dist/cli/{chunk-j85vccga.js → chunk-43zcf4gz.js} +97 -57
- package/dist/cli/{chunk-j85vccga.js.map → chunk-43zcf4gz.js.map} +6 -6
- package/dist/cli/{chunk-e04dxsz1.js → chunk-4ejxbzee.js} +1 -1
- package/dist/cli/{chunk-5m5nmvyq.js → chunk-4h8z9vv5.js} +233 -39
- package/dist/cli/chunk-4h8z9vv5.js.map +16 -0
- package/dist/cli/{chunk-5f86nr5m.js → chunk-5cg2rzgf.js} +18 -16
- package/dist/cli/{chunk-5f86nr5m.js.map → chunk-5cg2rzgf.js.map} +2 -2
- package/dist/cli/{chunk-tzmab476.js → chunk-5ffywsmb.js} +4 -4
- package/dist/cli/{chunk-2z928egk.js → chunk-5wj2qwn2.js} +5 -5
- package/dist/cli/chunk-6bm0xpgd.js +18 -0
- package/dist/cli/chunk-6bm0xpgd.js.map +10 -0
- package/dist/cli/{chunk-vg9r4eb9.js → chunk-713mngdq.js} +12 -5
- package/dist/cli/{chunk-vg9r4eb9.js.map → chunk-713mngdq.js.map} +3 -3
- package/dist/cli/{chunk-5xvm6tfj.js → chunk-9geymqns.js} +17 -15
- package/dist/cli/{chunk-5xvm6tfj.js.map → chunk-9geymqns.js.map} +2 -2
- package/dist/cli/{chunk-q58y5e6a.js → chunk-9xr4dgee.js} +26 -17
- package/dist/cli/chunk-9xr4dgee.js.map +10 -0
- package/dist/cli/{chunk-b07cmahc.js → chunk-amrb6hgh.js} +2 -2
- package/dist/cli/chunk-cm89scdv.js +443 -0
- package/dist/cli/chunk-cm89scdv.js.map +11 -0
- package/dist/cli/{chunk-akbpwfxc.js → chunk-cmtcnh9f.js} +2 -2
- package/dist/cli/chunk-cy5bm0j0.js +104 -0
- package/dist/cli/chunk-cy5bm0j0.js.map +11 -0
- package/dist/cli/{chunk-crgn1q09.js → chunk-e7vvk5ya.js} +4 -4
- package/dist/cli/{chunk-pehfxfta.js → chunk-g2z9x01v.js} +6 -98
- package/dist/cli/chunk-g2z9x01v.js.map +10 -0
- package/dist/cli/{chunk-tkacnehg.js → chunk-gp84za0h.js} +2 -2
- package/dist/cli/{chunk-wrr3j9w9.js → chunk-h2a48yhd.js} +186 -63
- package/dist/cli/chunk-h2a48yhd.js.map +36 -0
- package/dist/cli/{chunk-hm3vjy5s.js → chunk-jnwj5kjj.js} +14 -9
- package/dist/cli/{chunk-hm3vjy5s.js.map → chunk-jnwj5kjj.js.map} +4 -4
- package/dist/cli/chunk-kwrg63tm.js +31 -0
- package/dist/cli/chunk-kwrg63tm.js.map +10 -0
- package/dist/cli/{chunk-2hsdwb9n.js → chunk-nd1821sk.js} +18 -16
- package/dist/cli/{chunk-2hsdwb9n.js.map → chunk-nd1821sk.js.map} +2 -2
- package/dist/cli/{chunk-6dsbexzp.js → chunk-ntv4qrt7.js} +17 -15
- package/dist/cli/{chunk-6dsbexzp.js.map → chunk-ntv4qrt7.js.map} +2 -2
- package/dist/cli/{chunk-r9rcc4w7.js → chunk-p804f3pe.js} +7 -7
- package/dist/cli/{chunk-ey84smr6.js → chunk-py62fewh.js} +6 -6
- package/dist/cli/{chunk-ey84smr6.js.map → chunk-py62fewh.js.map} +1 -1
- package/dist/cli/chunk-q3wxxq39.js +126 -0
- package/dist/cli/chunk-q3wxxq39.js.map +11 -0
- package/dist/cli/{chunk-9t7a85s3.js → chunk-rekqz4qg.js} +23 -13
- package/dist/cli/chunk-rekqz4qg.js.map +10 -0
- package/dist/cli/{chunk-8ktnccpt.js → chunk-ta27feev.js} +1 -1
- package/dist/cli/{chunk-pv29h0wf.js → chunk-xkz5xbtv.js} +3476 -822
- package/dist/cli/chunk-xkz5xbtv.js.map +213 -0
- package/dist/cli/{chunk-a58773jm.js → chunk-y4ykbark.js} +2 -2
- package/dist/cli/{chunk-p3v96n38.js → chunk-y5h4r2y0.js} +4 -4
- package/dist/cli/{chunk-acanzt5p.js → chunk-yj17vs39.js} +6 -6
- package/dist/cli/{chunk-p73c0m7w.js → chunk-yxmk4pec.js} +16 -14
- package/dist/cli/{chunk-p73c0m7w.js.map → chunk-yxmk4pec.js.map} +2 -2
- package/dist/cli/{chunk-3em5wd2y.js → chunk-zccbjcj0.js} +4 -3
- package/dist/cli/{chunk-3em5wd2y.js.map → chunk-zccbjcj0.js.map} +2 -2
- package/dist/cli/{chunk-c8chx29p.js → chunk-zf748avv.js} +384 -207
- package/dist/cli/chunk-zf748avv.js.map +37 -0
- package/dist/cli/{chunk-g4hq16wv.js → chunk-zhvd6adm.js} +16 -14
- package/dist/cli/{chunk-g4hq16wv.js.map → chunk-zhvd6adm.js.map} +2 -2
- package/dist/cli/index.js +26 -20
- package/dist/cli/index.js.map +5 -5
- package/dist/types/ai/agent-surface.d.ts +8 -7
- package/dist/types/ai/ai-catalog.d.ts +7 -0
- package/dist/types/ai/ask-context.d.ts +22 -0
- package/dist/types/ai/ask.d.ts +271 -58
- package/dist/types/ai/index.d.ts +2 -2
- package/dist/types/ai/site-skill.d.ts +26 -0
- package/dist/types/ai/skills.d.ts +16 -0
- package/dist/types/astro/integration.d.ts +8 -0
- package/dist/types/captcha/hcaptcha.d.ts +27 -0
- package/dist/types/captcha/index.d.ts +28 -0
- package/dist/types/captcha/schema.d.ts +29 -0
- package/dist/types/captcha/turnstile.d.ts +28 -0
- package/dist/types/components/content/api-field.d.ts +59 -0
- package/dist/types/components/content/api-page.d.ts +95 -0
- package/dist/types/components/layout/nav-utils.d.ts +26 -0
- package/dist/types/components/openapi/helpers.d.ts +137 -0
- package/dist/types/components/openapi/security.d.ts +85 -0
- package/dist/types/consent/ethyca.d.ts +48 -0
- package/dist/types/consent/index.d.ts +37 -0
- package/dist/types/consent/native.d.ts +28 -0
- package/dist/types/consent/osano.d.ts +42 -0
- package/dist/types/consent/schema.d.ts +110 -0
- package/dist/types/core/config-input.d.ts +187 -20
- package/dist/types/core/data.d.ts +49 -4
- package/dist/types/core/footer.d.ts +8 -0
- package/dist/types/core/i18n-ui.d.ts +86 -0
- package/dist/types/core/includes.d.ts +8 -2
- package/dist/types/core/localizable.d.ts +7 -0
- package/dist/types/core/page-modes.d.ts +29 -0
- package/dist/types/core/redirect-patterns.d.ts +144 -0
- package/dist/types/core/related.d.ts +40 -0
- package/dist/types/core/schema.d.ts +551 -56
- package/dist/types/core/sources/read.d.ts +5 -0
- package/dist/types/core/types.d.ts +1 -1
- package/dist/types/core/variables.d.ts +42 -0
- package/dist/types/deploy/node-headers.d.ts +13 -2
- package/dist/types/deploy/platforms/cloudflare.d.ts +5 -0
- package/dist/types/deploy/platforms/netlify.d.ts +7 -0
- package/dist/types/deploy/platforms/vercel.d.ts +6 -0
- package/dist/types/deploy/redirects.d.ts +39 -11
- package/dist/types/deploy/vercel-negotiation.d.ts +9 -0
- package/dist/types/markdown/code-title.d.ts +17 -0
- package/dist/types/markdown/features.d.ts +3 -2
- package/dist/types/narration/build.d.ts +70 -0
- package/dist/types/narration/provider.d.ts +26 -0
- package/dist/types/narration/script.d.ts +154 -0
- package/dist/types/openapi/model.d.ts +12 -6
- package/dist/types/openapi/overlay.d.ts +54 -0
- package/dist/types/openapi/parse.d.ts +13 -0
- package/dist/types/openapi/references.d.ts +14 -4
- package/dist/types/ratelimit/cloudflare.d.ts +39 -0
- package/dist/types/ratelimit/index.d.ts +27 -0
- package/dist/types/ratelimit/memory.d.ts +36 -0
- package/dist/types/ratelimit/schema.d.ts +111 -0
- package/dist/types/ratelimit/upstash.d.ts +21 -0
- package/dist/types/ratelimit/wrangler.d.ts +23 -0
- package/dist/types/reference/asyncapi.d.ts +10 -10
- package/dist/types/reference/graphql.d.ts +13 -10
- package/dist/types/reference/openapi.d.ts +33 -12
- package/dist/types/reference/options.d.ts +45 -5
- package/dist/types/reference/scalar.d.ts +13 -0
- package/dist/types/reference/schema.d.ts +60 -36
- package/dist/types/search/documents.d.ts +12 -1
- package/dist/types/search/orama-index.d.ts +4 -0
- package/dist/types/seo/metatags.d.ts +20 -0
- package/docs/02-deployment.mdx +41 -5
- package/docs/03-upgrading.mdx +4 -4
- package/docs/04-migrating.mdx +1 -1
- package/docs/advanced/changelog.mdx +2 -2
- package/docs/advanced/skills.mdx +14 -0
- package/docs/cli/audit.mdx +21 -1
- package/docs/cli/index.mdx +1 -0
- package/docs/configuration/analytics.mdx +3 -1
- package/docs/configuration/assistant.mdx +188 -36
- package/docs/configuration/consent.mdx +100 -0
- package/docs/configuration/customization.mdx +4 -4
- package/docs/configuration/index.mdx +63 -5
- package/docs/configuration/meta.ts +3 -0
- package/docs/configuration/narration.mdx +119 -0
- package/docs/configuration/rate-limiting.mdx +69 -0
- package/docs/configuration/search.mdx +29 -1
- package/docs/configuration/theming.mdx +3 -1
- package/docs/content/components.mdx +106 -0
- package/docs/content/frontmatter.mdx +76 -0
- package/docs/content/i18n.mdx +38 -3
- package/docs/content/includes.mdx +16 -0
- package/docs/content/meta.mdx +1 -0
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +28 -6
- package/docs/content/sources/contentful.mdx +32 -0
- package/docs/content/sources/custom.mdx +39 -0
- package/docs/content/sources/github-releases.mdx +31 -0
- package/docs/content/sources/index.mdx +91 -0
- package/docs/content/sources/meta.ts +16 -0
- package/docs/content/sources/notion.mdx +32 -0
- package/docs/content/sources/obsidian.mdx +37 -0
- package/docs/content/sources/payload.mdx +30 -0
- package/docs/content/sources/remote-mdx.mdx +40 -0
- package/docs/content/sources/sanity.mdx +29 -0
- package/docs/content/sources/strapi.mdx +31 -0
- package/docs/content/syntax.mdx +67 -2
- package/docs/content/variables.mdx +41 -0
- package/docs/discoverability/agent-discovery.mdx +29 -2
- package/docs/discoverability/index.mdx +1 -1
- package/docs/discoverability/llms-txt.mdx +1 -1
- package/docs/discoverability/metadata.mdx +17 -0
- package/docs/references/api-pages.mdx +74 -0
- package/docs/references/asyncapi.mdx +1 -1
- package/docs/references/graphql.mdx +2 -2
- package/docs/references/meta.ts +1 -1
- package/docs/references/openapi.mdx +102 -3
- package/docs/references/scalar.mdx +3 -1
- package/package.json +36 -1
- package/skills/blume/SKILL.md +3 -0
- package/skills/blume-migrate/SKILL.md +5 -5
- package/skills/blume-migrate/references/docusaurus.md +3 -3
- package/skills/blume-migrate/references/mintlify.md +37 -19
- package/skills/blume-migrate/references/nextra.md +2 -2
- package/skills/blume-migrate/references/starlight.md +2 -1
- package/skills/blume-migrate/scripts/mintlify-codemod.mjs +60 -14
- package/skills/blume-write-skill/SKILL.md +82 -0
- package/src/ai/agent-readability.ts +2 -1
- package/src/ai/agent-surface.ts +9 -7
- package/src/ai/ai-catalog.ts +6 -3
- package/src/ai/ask-context.ts +73 -20
- package/src/ai/ask-data.ts +6 -0
- package/src/ai/ask-tools.ts +142 -0
- package/src/ai/ask.ts +354 -76
- package/src/ai/component-markdown.ts +75 -0
- package/src/ai/cors.ts +2 -0
- package/src/ai/index.ts +12 -0
- package/src/ai/llms.ts +6 -2
- package/src/ai/markdown.ts +2 -1
- package/src/ai/mcp/data.ts +6 -0
- package/src/ai/openapi-components.ts +9 -3
- package/src/ai/site-skill.ts +274 -0
- package/src/ai/skills.ts +35 -2
- package/src/ai/write-skill.ts +97 -0
- package/src/astro/generate.ts +132 -18
- package/src/astro/index.ts +1 -0
- package/src/astro/integration.ts +35 -0
- package/src/astro/module-types.ts +6 -0
- package/src/astro/templates.ts +283 -30
- package/src/astro/variables.ts +31 -0
- package/src/audit/catalog.ts +19 -0
- package/src/audit/checks/contrast.ts +183 -0
- package/src/audit/checks/i18n.ts +2 -3
- package/src/audit/checks/indexability.ts +2 -3
- package/src/audit/checks/links.ts +5 -12
- package/src/audit/checks/sitemap.ts +2 -3
- package/src/audit/redirects.ts +46 -15
- package/src/audit/run.ts +2 -0
- package/src/audit/types.ts +2 -1
- package/src/blume-modules.d.ts +7 -0
- package/src/captcha/client.ts +152 -0
- package/src/captcha/hcaptcha.ts +36 -0
- package/src/captcha/index.ts +28 -0
- package/src/captcha/schema.ts +32 -0
- package/src/captcha/turnstile.ts +38 -0
- package/src/captcha/verify.ts +71 -0
- package/src/cli/command-meta.ts +5 -0
- package/src/cli/commands/doctor.ts +22 -16
- package/src/cli/commands/skill.ts +96 -0
- package/src/cli/index.ts +5 -0
- package/src/cli/required-secrets.ts +71 -29
- package/src/components/BlumePage.astro +2 -0
- package/src/components/content/ApiEndpoint.astro +18 -0
- package/src/components/content/ApiField.astro +79 -0
- package/src/components/content/ApiPlayground.astro +62 -0
- package/src/components/content/ApiRail.astro +19 -0
- package/src/components/content/Color.astro +1 -0
- package/src/components/content/FileTree.astro +1 -0
- package/src/components/content/GithubInfo.astro +1 -0
- package/src/components/content/Panel.astro +1 -0
- package/src/components/content/ParamField.astro +25 -0
- package/src/components/content/RequestExample.astro +17 -0
- package/src/components/content/ResponseExample.astro +17 -0
- package/src/components/content/ResponseField.astro +32 -0
- package/src/components/content/Step.astro +1 -0
- package/src/components/content/Tile.astro +1 -0
- package/src/components/content/Tooltip.astro +1 -0
- package/src/components/content/Tree.astro +1 -0
- package/src/components/content/TypeTable.astro +4 -1
- package/src/components/content/View.astro +21 -0
- package/src/components/content/ViewSwitcher.astro +168 -0
- package/src/components/content/api-field.ts +100 -0
- package/src/components/content/api-page.ts +224 -0
- package/src/components/content/view-switcher.ts +71 -0
- package/src/components/index.ts +2 -0
- package/src/components/islands/Assistant.astro +10 -1
- package/src/components/islands/assistant.tsx +104 -14
- package/src/components/islands/code-question.ts +62 -0
- package/src/components/islands/hooks.ts +110 -21
- package/src/components/islands/support-link.ts +68 -0
- package/src/components/layout/Analytics.astro +11 -2
- package/src/components/layout/Banner.astro +14 -10
- package/src/components/layout/Breadcrumbs.astro +6 -2
- package/src/components/layout/ConsentBanner.astro +62 -0
- package/src/components/layout/ConsentHead.astro +38 -0
- package/src/components/layout/Directory.astro +94 -0
- package/src/components/layout/DrawerSwitchers.astro +51 -0
- package/src/components/layout/Empty.astro +2 -2
- package/src/components/layout/Header.astro +122 -80
- package/src/components/layout/LanguageSwitcher.astro +48 -15
- package/src/components/layout/NarrationPlayer.astro +1085 -0
- package/src/components/layout/NavSelector.astro +33 -7
- package/src/components/layout/PageFeedback.astro +54 -49
- package/src/components/layout/PageLayout.astro +71 -3
- package/src/components/layout/ReferenceLayout.astro +17 -6
- package/src/components/layout/RelatedPages.astro +42 -0
- package/src/components/layout/RootLayout.astro +308 -45
- package/src/components/layout/Search.astro +31 -17
- package/src/components/layout/SiteFooter.astro +124 -0
- package/src/components/layout/SiteMetatags.astro +16 -0
- package/src/components/layout/consent/native.ts +79 -0
- package/src/components/layout/consent/types.ts +37 -0
- package/src/components/layout/footer-links.ts +53 -0
- package/src/components/layout/footer-socials.ts +87 -0
- package/src/components/layout/locale-redirect.ts +107 -0
- package/src/components/layout/nav-utils.ts +83 -0
- package/src/components/layout/page-feedback.ts +96 -0
- package/src/components/layout/search/analytics.ts +98 -0
- package/src/components/layout/search/flexsearch.ts +17 -5
- package/src/components/layout/search/orama-cloud.ts +26 -14
- package/src/components/layout/search/types.ts +20 -0
- package/src/components/layout/search/typesense.ts +5 -1
- package/src/components/openapi/Operation.astro +161 -13
- package/src/components/openapi/RequestBody.astro +6 -4
- package/src/components/openapi/RequestPanel.astro +59 -7
- package/src/components/openapi/Responses.astro +6 -4
- package/src/components/openapi/async-snippets.ts +4 -4
- package/src/components/openapi/code-samples.ts +97 -0
- package/src/components/openapi/security.ts +6 -3
- package/src/components/openapi/snippets.ts +869 -8
- package/src/components/props.ts +6 -0
- package/src/consent/client.ts +95 -0
- package/src/consent/clients.ts +19 -0
- package/src/consent/ethyca.ts +71 -0
- package/src/consent/head.ts +24 -0
- package/src/consent/index.ts +37 -0
- package/src/consent/init.ts +29 -0
- package/src/consent/native.ts +36 -0
- package/src/consent/osano.ts +59 -0
- package/src/consent/schema.ts +30 -0
- package/src/core/builtin-tags.ts +5 -0
- package/src/core/client-address.ts +19 -0
- package/src/core/config-input.ts +194 -20
- package/src/core/data.ts +44 -4
- package/src/core/diagnostics.ts +3 -2
- package/src/core/footer.ts +26 -0
- package/src/core/graph.ts +39 -36
- package/src/core/i18n-ui.ts +82 -2
- package/src/core/includes.ts +20 -3
- package/src/core/links.ts +16 -2
- package/src/core/localizable.ts +26 -0
- package/src/core/navigation.ts +43 -12
- package/src/core/page-modes.ts +56 -0
- package/src/core/project-graph.ts +111 -5
- package/src/core/redirect-patterns.ts +491 -0
- package/src/core/related.ts +131 -0
- package/src/core/schema.ts +318 -64
- package/src/core/sources/normalize.ts +2 -1
- package/src/core/sources/read.ts +8 -3
- package/src/core/types.ts +1 -1
- package/src/core/ui-packs/ar.ts +43 -0
- package/src/core/ui-packs/bg.ts +45 -0
- package/src/core/ui-packs/bn.ts +43 -0
- package/src/core/ui-packs/ca.ts +46 -0
- package/src/core/ui-packs/cs.ts +44 -0
- package/src/core/ui-packs/da.ts +45 -0
- package/src/core/ui-packs/de.ts +46 -0
- package/src/core/ui-packs/el.ts +45 -0
- package/src/core/ui-packs/es.ts +46 -0
- package/src/core/ui-packs/fa.ts +45 -0
- package/src/core/ui-packs/fi.ts +45 -0
- package/src/core/ui-packs/fr.ts +46 -0
- package/src/core/ui-packs/he.ts +43 -0
- package/src/core/ui-packs/hi.ts +44 -0
- package/src/core/ui-packs/hr.ts +45 -0
- package/src/core/ui-packs/hu.ts +44 -0
- package/src/core/ui-packs/id.ts +45 -0
- package/src/core/ui-packs/it.ts +45 -0
- package/src/core/ui-packs/ja.ts +45 -0
- package/src/core/ui-packs/ko.ts +44 -0
- package/src/core/ui-packs/nl.ts +46 -0
- package/src/core/ui-packs/no.ts +44 -0
- package/src/core/ui-packs/pl.ts +45 -0
- package/src/core/ui-packs/pt-br.ts +46 -0
- package/src/core/ui-packs/pt.ts +45 -0
- package/src/core/ui-packs/ro.ts +45 -0
- package/src/core/ui-packs/ru.ts +45 -0
- package/src/core/ui-packs/sk.ts +44 -0
- package/src/core/ui-packs/sr.ts +45 -0
- package/src/core/ui-packs/sv.ts +44 -0
- package/src/core/ui-packs/th.ts +43 -0
- package/src/core/ui-packs/tr.ts +45 -0
- package/src/core/ui-packs/uk.ts +45 -0
- package/src/core/ui-packs/vi.ts +45 -0
- package/src/core/ui-packs/zh-tw.ts +43 -0
- package/src/core/ui-packs/zh.ts +43 -0
- package/src/core/variables.ts +103 -0
- package/src/deploy/artifacts.ts +77 -8
- package/src/deploy/cloudflare-negotiation.ts +35 -5
- package/src/deploy/headers.ts +2 -1
- package/src/deploy/node-headers.ts +63 -9
- package/src/deploy/platforms/cloudflare.ts +32 -0
- package/src/deploy/platforms/netlify.ts +33 -1
- package/src/deploy/platforms/vercel.ts +37 -2
- package/src/deploy/redirects.ts +91 -24
- package/src/deploy/vercel-negotiation.ts +36 -0
- package/src/markdown/api-rail.ts +259 -0
- package/src/markdown/code-title.ts +35 -9
- package/src/markdown/features.ts +3 -2
- package/src/markdown/fence-meta.ts +2 -0
- package/src/markdown/include.ts +11 -1
- package/src/markdown/index.ts +28 -5
- package/src/markdown/math.ts +4 -4
- package/src/markdown/variables.ts +56 -0
- package/src/markdown/views.ts +82 -0
- package/src/narration/build.ts +412 -0
- package/src/narration/player.ts +249 -0
- package/src/narration/provider.ts +29 -0
- package/src/narration/script.ts +592 -0
- package/src/og/card.ts +7 -6
- package/src/openapi/model.ts +57 -24
- package/src/openapi/overlay.ts +256 -0
- package/src/openapi/parse.ts +55 -2
- package/src/openapi/references.ts +21 -5
- package/src/openapi/render-mdx.ts +5 -1
- package/src/openapi/scalar.ts +40 -6
- package/src/openapi/source.ts +1 -1
- package/src/ratelimit/cloudflare.ts +54 -0
- package/src/ratelimit/index.ts +30 -0
- package/src/ratelimit/memory.ts +45 -0
- package/src/ratelimit/runtime.ts +229 -0
- package/src/ratelimit/schema.ts +28 -0
- package/src/ratelimit/upstash.ts +30 -0
- package/src/ratelimit/wrangler.ts +70 -0
- package/src/reference/asyncapi.ts +2 -2
- package/src/reference/graphql.ts +5 -2
- package/src/reference/openapi.ts +21 -7
- package/src/reference/options.ts +51 -7
- package/src/reference/scalar.ts +33 -8
- package/src/registry/eject.ts +20 -4
- package/src/registry/registry.ts +7 -0
- package/src/search/documents.ts +26 -2
- package/src/search/orama-index.ts +28 -3
- package/src/search/pagefind-ranking.ts +39 -0
- package/src/search/sync/algolia.ts +15 -4
- package/src/search/sync/orama-cloud.ts +3 -0
- package/src/search/sync/typesense.ts +5 -0
- package/src/seo/metatags.ts +67 -0
- package/src/theme/chrome-icons.ts +1 -0
- package/src/theme/color.ts +500 -0
- package/src/theme/entry.ts +56 -3
- package/src/theme/palette.ts +121 -45
- package/src/translate/prompts.ts +1 -0
- package/src/translate/validate.ts +8 -2
- package/src/upgrade/upgrade.ts +4 -171
- package/dist/cli/chunk-364znk6q.js +0 -75
- package/dist/cli/chunk-364znk6q.js.map +0 -11
- package/dist/cli/chunk-5m5nmvyq.js.map +0 -13
- package/dist/cli/chunk-9t7a85s3.js.map +0 -10
- package/dist/cli/chunk-c8chx29p.js.map +0 -36
- package/dist/cli/chunk-pehfxfta.js.map +0 -10
- package/dist/cli/chunk-pv29h0wf.js.map +0 -190
- package/dist/cli/chunk-q58y5e6a.js.map +0 -10
- package/dist/cli/chunk-wrr3j9w9.js.map +0 -35
- package/dist/cli/chunk-yfyb25rh.js.map +0 -14
- package/docs/content/sources.mdx +0 -334
- /package/dist/cli/{chunk-2eytanqx.js.map → chunk-1n228xqb.js.map} +0 -0
- /package/dist/cli/{chunk-35d4wj9f.js.map → chunk-2n4ps1b3.js.map} +0 -0
- /package/dist/cli/{chunk-e04dxsz1.js.map → chunk-4ejxbzee.js.map} +0 -0
- /package/dist/cli/{chunk-tzmab476.js.map → chunk-5ffywsmb.js.map} +0 -0
- /package/dist/cli/{chunk-2z928egk.js.map → chunk-5wj2qwn2.js.map} +0 -0
- /package/dist/cli/{chunk-b07cmahc.js.map → chunk-amrb6hgh.js.map} +0 -0
- /package/dist/cli/{chunk-akbpwfxc.js.map → chunk-cmtcnh9f.js.map} +0 -0
- /package/dist/cli/{chunk-crgn1q09.js.map → chunk-e7vvk5ya.js.map} +0 -0
- /package/dist/cli/{chunk-tkacnehg.js.map → chunk-gp84za0h.js.map} +0 -0
- /package/dist/cli/{chunk-r9rcc4w7.js.map → chunk-p804f3pe.js.map} +0 -0
- /package/dist/cli/{chunk-8ktnccpt.js.map → chunk-ta27feev.js.map} +0 -0
- /package/dist/cli/{chunk-a58773jm.js.map → chunk-y4ykbark.js.map} +0 -0
- /package/dist/cli/{chunk-p3v96n38.js.map → chunk-y5h4r2y0.js.map} +0 -0
- /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
|
|
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
|
-
/**
|
|
7
|
-
|
|
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 {
|
|
3
|
+
import type { OpenApiSourceOptions, PlaygroundOptions } from "./options.ts";
|
|
4
4
|
/** Options for {@link openapi}. */
|
|
5
5
|
export interface OpenApiOptions {
|
|
6
|
-
/**
|
|
7
|
-
|
|
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?:
|
|
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>;
|