blume 1.7.3 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +19 -0
- package/CHANGELOG.md +217 -0
- package/README.md +34 -21
- package/dist/cli/chunk-11j0384y.js +148 -0
- package/dist/cli/chunk-11j0384y.js.map +10 -0
- package/dist/cli/{chunk-rqy0s5wh.js → chunk-1w8dp3qb.js} +17 -16
- package/dist/cli/{chunk-rqy0s5wh.js.map → chunk-1w8dp3qb.js.map} +3 -3
- package/dist/cli/chunk-2q1dwty4.js +75 -0
- package/dist/cli/chunk-2q1dwty4.js.map +11 -0
- package/dist/cli/chunk-41za066z.js +122 -0
- package/dist/cli/chunk-41za066z.js.map +11 -0
- package/dist/cli/chunk-5a2z0198.js +133 -0
- package/dist/cli/chunk-5a2z0198.js.map +10 -0
- package/dist/cli/{chunk-5g0w1e2c.js → chunk-6k8vp3ta.js} +25 -13
- package/dist/cli/{chunk-5g0w1e2c.js.map → chunk-6k8vp3ta.js.map} +4 -4
- package/dist/cli/{chunk-5qk08vmp.js → chunk-79njf86q.js} +133 -54
- package/dist/cli/chunk-79njf86q.js.map +11 -0
- package/dist/cli/{chunk-e7f42gdj.js → chunk-7ez8ny0t.js} +2 -2
- package/dist/cli/{chunk-nn13znc2.js → chunk-88cpgt6h.js} +1 -1
- package/dist/cli/chunk-a9kptbw5.js +361 -0
- package/dist/cli/chunk-a9kptbw5.js.map +14 -0
- package/dist/cli/chunk-abh8yjkn.js +31 -0
- package/dist/cli/chunk-abh8yjkn.js.map +10 -0
- package/dist/cli/chunk-b5aj94ah.js +91 -0
- package/dist/cli/chunk-b5aj94ah.js.map +10 -0
- package/dist/cli/{chunk-b27xqwn9.js → chunk-bctazmbk.js} +9 -5
- package/dist/cli/chunk-bctazmbk.js.map +10 -0
- package/dist/cli/chunk-beat36xx.js +279 -0
- package/dist/cli/chunk-beat36xx.js.map +10 -0
- package/dist/cli/chunk-bnbmcwfb.js +145 -0
- package/dist/cli/chunk-bnbmcwfb.js.map +11 -0
- package/dist/cli/{chunk-0xjyb285.js → chunk-bw22s759.js} +15 -5
- package/dist/cli/{chunk-0xjyb285.js.map → chunk-bw22s759.js.map} +4 -4
- package/dist/cli/chunk-by2290sx.js +39 -0
- package/dist/cli/chunk-by2290sx.js.map +10 -0
- package/dist/cli/chunk-d1tadaw7.js +79 -0
- package/dist/cli/chunk-d1tadaw7.js.map +10 -0
- package/dist/cli/{chunk-ahnw3kxw.js → chunk-d80hr03s.js} +24 -19
- package/dist/cli/chunk-d80hr03s.js.map +15 -0
- package/dist/cli/chunk-ernrthtr.js +97 -0
- package/dist/cli/chunk-ernrthtr.js.map +10 -0
- package/dist/cli/chunk-f2972sbt.js +374 -0
- package/dist/cli/chunk-f2972sbt.js.map +10 -0
- package/dist/cli/{chunk-vacwm2hv.js → chunk-f7t03s3g.js} +2 -2
- package/dist/cli/{chunk-2z47ypj8.js → chunk-fa25z98p.js} +16 -3
- package/dist/cli/chunk-fa25z98p.js.map +11 -0
- package/dist/cli/{chunk-cjtn640a.js → chunk-fh5hj5jt.js} +43 -20
- package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
- package/dist/cli/{chunk-yg63d42r.js → chunk-j8mw0za6.js} +86 -57
- package/dist/cli/chunk-j8mw0za6.js.map +35 -0
- package/dist/cli/{chunk-ct47dqpx.js → chunk-jts8mvcz.js} +67 -7
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ps4m1xh4.js → chunk-mnqj32sj.js} +505 -542
- package/dist/cli/chunk-mnqj32sj.js.map +12 -0
- package/dist/cli/{chunk-8cjtbafj.js → chunk-mwt1k8n7.js} +100 -374
- package/dist/cli/chunk-mwt1k8n7.js.map +10 -0
- package/dist/cli/chunk-nk3ts2xk.js +51 -0
- package/dist/cli/chunk-nk3ts2xk.js.map +10 -0
- package/dist/cli/{chunk-3r45185y.js → chunk-pat2zzwc.js} +9 -11
- package/dist/cli/{chunk-3r45185y.js.map → chunk-pat2zzwc.js.map} +2 -2
- package/dist/cli/chunk-pnnvybbk.js +176 -0
- package/dist/cli/chunk-pnnvybbk.js.map +11 -0
- package/dist/cli/{chunk-4x36ddpw.js → chunk-sqn5t4q0.js} +81 -87
- package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
- package/dist/cli/{chunk-bvwwhd84.js → chunk-tzne8qfq.js} +15 -15
- package/dist/cli/{chunk-bvwwhd84.js.map → chunk-tzne8qfq.js.map} +1 -1
- package/dist/cli/chunk-xaz13gwg.js +12449 -0
- package/dist/cli/chunk-xaz13gwg.js.map +182 -0
- package/dist/cli/chunk-y3e45rc8.js +102 -0
- package/dist/cli/chunk-y3e45rc8.js.map +10 -0
- package/dist/cli/chunk-z01ze5c1.js +261 -0
- package/dist/cli/chunk-z01ze5c1.js.map +10 -0
- package/dist/cli/{chunk-k79xp7av.js → chunk-z1f5arsg.js} +219 -689
- package/dist/cli/chunk-z1f5arsg.js.map +36 -0
- package/dist/cli/{chunk-1jefwnfs.js → chunk-zg2gtj10.js} +1076 -2592
- package/dist/cli/chunk-zg2gtj10.js.map +35 -0
- package/dist/cli/{chunk-dwgcp5sm.js → chunk-zxccj738.js} +1 -1
- package/dist/cli/index.js +214 -57
- package/dist/cli/index.js.map +8 -7
- package/dist/types/ai/agent-readability.d.ts +52 -0
- package/dist/types/ai/ai-catalog.d.ts +42 -0
- package/dist/types/ai/api/paths.d.ts +17 -0
- package/dist/types/ai/api-catalog.d.ts +18 -0
- package/dist/types/ai/ask.d.ts +368 -0
- package/dist/types/ai/changelog-markdown.d.ts +2 -0
- package/dist/types/ai/component-markdown.d.ts +2 -2
- package/dist/types/ai/index.d.ts +24 -0
- package/dist/types/ai/link-headers.d.ts +24 -0
- package/dist/types/ai/llms.d.ts +25 -0
- package/dist/types/ai/markdown.d.ts +45 -0
- package/dist/types/ai/mcp/discovery.d.ts +68 -0
- package/dist/types/ai/mcp/tools.d.ts +16 -0
- package/dist/types/ai/openapi-components.d.ts +43 -0
- package/dist/types/ai/relative-links.d.ts +26 -0
- package/dist/types/ai/serializers.d.ts +15 -0
- package/dist/types/ai/skills.d.ts +42 -0
- package/dist/types/ai/tar.d.ts +25 -0
- package/dist/types/ai/visibility.d.ts +17 -0
- package/dist/types/ai/web-bot-auth.d.ts +16 -0
- package/dist/types/analytics/adobe.d.ts +35 -0
- package/dist/types/analytics/amplitude.d.ts +50 -0
- package/dist/types/analytics/clarity.d.ts +31 -0
- package/dist/types/analytics/clearbit.d.ts +29 -0
- package/dist/types/analytics/cloudflare.d.ts +41 -0
- package/dist/types/analytics/fathom.d.ts +41 -0
- package/dist/types/analytics/google-analytics.d.ts +44 -0
- package/dist/types/analytics/google-tag-manager.d.ts +40 -0
- package/dist/types/analytics/head.d.ts +30 -0
- package/dist/types/analytics/heap.d.ts +40 -0
- package/dist/types/analytics/hightouch.d.ts +44 -0
- package/dist/types/analytics/hotjar.d.ts +33 -0
- package/dist/types/analytics/index.d.ts +61 -0
- package/dist/types/analytics/inline.d.ts +17 -0
- package/dist/types/analytics/logrocket.d.ts +44 -0
- package/dist/types/analytics/mixpanel.d.ts +67 -0
- package/dist/types/analytics/pirsch.d.ts +42 -0
- package/dist/types/analytics/plausible.d.ts +56 -0
- package/dist/types/analytics/posthog.d.ts +45 -0
- package/dist/types/analytics/schema.d.ts +320 -0
- package/dist/types/analytics/script.d.ts +46 -0
- package/dist/types/analytics/segment.d.ts +50 -0
- package/dist/types/analytics/vercel.d.ts +48 -0
- package/dist/types/astro/integration.d.ts +76 -0
- package/dist/types/astro/markdown-negotiation.d.ts +23 -0
- package/dist/types/astro/module-types.d.ts +14 -0
- package/dist/types/astro/pages.d.ts +44 -0
- package/dist/types/cli/env.d.ts +12 -0
- package/dist/types/cli/init/scaffold.d.ts +154 -0
- package/dist/types/components/layout/nav-utils.d.ts +11 -0
- package/dist/types/core/adapter.d.ts +47 -0
- package/dist/types/core/api-name.d.ts +7 -0
- package/dist/types/core/changelog-index.d.ts +13 -0
- package/dist/types/core/config-input.d.ts +186 -515
- package/dist/types/core/config.d.ts +60 -34
- package/dist/types/core/content-assets.d.ts +76 -0
- package/dist/types/core/custom-pages.d.ts +33 -0
- package/dist/types/core/data.d.ts +27 -12
- package/dist/types/core/define-components.d.ts +12 -9
- package/dist/types/core/deployment-env.d.ts +6 -11
- package/dist/types/core/frontmatter.d.ts +10 -0
- package/dist/types/core/graph.d.ts +18 -0
- package/dist/types/core/heading-markers.d.ts +54 -0
- package/dist/types/core/i18n-ui.d.ts +6 -2
- package/dist/types/core/i18n.d.ts +87 -0
- package/dist/types/core/includes.d.ts +138 -0
- package/dist/types/core/last-modified.d.ts +47 -0
- package/dist/types/core/links.d.ts +95 -0
- package/dist/types/core/locale-links.d.ts +60 -0
- package/dist/types/core/manifest.d.ts +17 -0
- package/dist/types/core/meta.d.ts +38 -0
- package/dist/types/core/nav-diagnostics.d.ts +26 -0
- package/dist/types/core/navigation.d.ts +6 -0
- package/dist/types/core/node-require.d.ts +19 -0
- package/dist/types/core/package-json.d.ts +13 -0
- package/dist/types/core/probe.d.ts +42 -0
- package/dist/types/core/project-graph.d.ts +51 -0
- package/dist/types/core/project.d.ts +2 -0
- package/dist/types/core/safe-href.d.ts +2 -0
- package/dist/types/core/safe-links.d.ts +26 -0
- package/dist/types/core/schema.d.ts +2282 -452
- package/dist/types/core/site-url.d.ts +16 -0
- package/dist/types/core/sources/assets.d.ts +36 -0
- package/dist/types/core/sources/cache.d.ts +37 -0
- package/dist/types/core/sources/collection.d.ts +28 -0
- package/dist/types/core/sources/contentful-rich-text.d.ts +31 -0
- package/dist/types/core/sources/contentful.d.ts +40 -0
- package/dist/types/core/sources/filesystem.d.ts +24 -0
- package/dist/types/core/sources/github-releases.d.ts +31 -0
- package/dist/types/core/sources/json.d.ts +30 -0
- package/dist/types/core/sources/lexical.d.ts +19 -0
- package/dist/types/core/sources/lower.d.ts +75 -0
- package/dist/types/core/sources/mdx-remote.d.ts +28 -0
- package/dist/types/core/sources/normalize.d.ts +147 -0
- package/dist/types/core/sources/notion.d.ts +131 -0
- package/dist/types/core/sources/obsidian.d.ts +46 -0
- package/dist/types/core/sources/payload.d.ts +39 -0
- package/dist/types/core/sources/portable-text.d.ts +42 -0
- package/dist/types/core/sources/read.d.ts +23 -0
- package/dist/types/core/sources/remote.d.ts +74 -0
- package/dist/types/core/sources/resolve.d.ts +19 -0
- package/dist/types/core/sources/sanity.d.ts +43 -0
- package/dist/types/core/sources/strapi-blocks.d.ts +12 -0
- package/dist/types/core/sources/strapi.d.ts +33 -0
- package/dist/types/core/sources/types.d.ts +7 -0
- package/dist/types/core/sources/watch.d.ts +45 -0
- package/dist/types/core/text-width.d.ts +11 -0
- package/dist/types/core/types.d.ts +15 -1
- package/dist/types/core/unrecognized-keys.d.ts +7 -0
- package/dist/types/core/versions.d.ts +72 -0
- package/dist/types/core/yaml.d.ts +9 -0
- package/dist/types/deploy/adapter-output.d.ts +45 -0
- package/dist/types/deploy/adapters/cloudflare.d.ts +40 -0
- package/dist/types/deploy/adapters/index.d.ts +29 -0
- package/dist/types/deploy/adapters/netlify.d.ts +37 -0
- package/dist/types/deploy/adapters/node.d.ts +37 -0
- package/dist/types/deploy/adapters/registry.d.ts +133 -0
- package/dist/types/deploy/adapters/types.d.ts +71 -0
- package/dist/types/deploy/adapters/vercel.d.ts +38 -0
- package/dist/types/deploy/artifacts.d.ts +65 -0
- package/dist/types/deploy/cloudflare-negotiation.d.ts +196 -0
- package/dist/types/deploy/function-bundle.d.ts +80 -0
- package/dist/types/deploy/headers.d.ts +50 -0
- package/dist/types/deploy/node-headers.d.ts +42 -0
- package/dist/types/deploy/platforms/cloudflare.d.ts +40 -0
- package/dist/types/deploy/platforms/index.d.ts +18 -0
- package/dist/types/deploy/platforms/netlify.d.ts +13 -0
- package/dist/types/deploy/platforms/node.d.ts +11 -0
- package/dist/types/deploy/platforms/paths.d.ts +27 -0
- package/dist/types/deploy/platforms/static.d.ts +10 -0
- package/dist/types/deploy/platforms/types.d.ts +104 -0
- package/dist/types/deploy/platforms/vercel.d.ts +32 -0
- package/dist/types/deploy/redirects.d.ts +53 -0
- package/dist/types/deploy/robots.d.ts +8 -0
- package/dist/types/deploy/rss.d.ts +31 -0
- package/dist/types/deploy/sitemap.d.ts +21 -0
- package/dist/types/deploy/vercel-negotiation.d.ts +109 -0
- package/dist/types/markdown/code-title.d.ts +32 -0
- package/dist/types/markdown/fence-meta.d.ts +23 -0
- package/dist/types/markdown/themes.d.ts +3 -3
- package/dist/types/openapi/asyncapi.d.ts +129 -0
- package/dist/types/openapi/graphql-build.d.ts +8 -0
- package/dist/types/openapi/graphql.d.ts +122 -0
- package/dist/types/openapi/model.d.ts +158 -0
- package/dist/types/openapi/parse.d.ts +57 -0
- package/dist/types/openapi/references.d.ts +37 -25
- package/dist/types/openapi/render-mdx.d.ts +33 -0
- package/dist/types/openapi/sentence.d.ts +7 -0
- package/dist/types/openapi/signature.d.ts +10 -0
- package/dist/types/openapi/source.d.ts +22 -0
- package/dist/types/openapi/spec-dependency-error.d.ts +10 -0
- package/dist/types/reference/asyncapi.d.ts +166 -0
- package/dist/types/reference/graphql.d.ts +181 -0
- package/dist/types/reference/index.d.ts +32 -0
- package/dist/types/reference/openapi.d.ts +165 -0
- package/dist/types/reference/options.d.ts +157 -0
- package/dist/types/reference/scalar.d.ts +136 -0
- package/dist/types/reference/schema.d.ts +630 -0
- package/dist/types/search/adapters/algolia.d.ts +32 -0
- package/dist/types/search/adapters/flexsearch.d.ts +12 -0
- package/dist/types/search/adapters/index.d.ts +31 -0
- package/dist/types/search/adapters/mixedbread.d.ts +22 -0
- package/dist/types/search/adapters/orama-cloud.d.ts +33 -0
- package/dist/types/search/adapters/orama.d.ts +13 -0
- package/dist/types/search/adapters/pagefind.d.ts +12 -0
- package/dist/types/search/adapters/registry.d.ts +228 -0
- package/dist/types/search/adapters/types.d.ts +34 -0
- package/dist/types/search/adapters/typesense.d.ts +42 -0
- package/dist/types/search/build.d.ts +23 -0
- package/dist/types/search/documents.d.ts +90 -0
- package/dist/types/search/facets.d.ts +3 -0
- package/dist/types/search/sync/algolia.d.ts +14 -0
- package/dist/types/search/sync/index.d.ts +14 -0
- package/dist/types/search/sync/orama-cloud.d.ts +10 -0
- package/dist/types/search/sync/typesense.d.ts +14 -0
- package/dist/types/sources/contentful.d.ts +68 -0
- package/dist/types/sources/custom.d.ts +20 -0
- package/dist/types/sources/filesystem.d.ts +42 -0
- package/dist/types/sources/github-releases.d.ts +46 -0
- package/dist/types/sources/index.d.ts +48 -0
- package/dist/types/sources/mdx-remote.d.ts +63 -0
- package/dist/types/sources/notion.d.ts +65 -0
- package/dist/types/sources/obsidian.d.ts +34 -0
- package/dist/types/sources/payload.d.ts +68 -0
- package/dist/types/sources/registry.d.ts +1414 -0
- package/dist/types/sources/sanity.d.ts +69 -0
- package/dist/types/sources/shared.d.ts +46 -0
- package/dist/types/sources/strapi.d.ts +66 -0
- package/dist/types/theme/icon-kind.d.ts +11 -0
- package/dist/types/theme/icons.d.ts +20 -0
- package/docs/01-quickstart.mdx +18 -18
- package/docs/02-deployment.mdx +50 -26
- package/docs/03-upgrading.mdx +351 -0
- package/docs/04-migrating.mdx +58 -0
- package/docs/08-faq.mdx +3 -3
- package/docs/advanced/blog.mdx +13 -6
- package/docs/advanced/changelog.mdx +23 -35
- package/docs/advanced/custom-pages.mdx +20 -8
- package/docs/advanced/meta.ts +1 -8
- package/docs/advanced/skills.mdx +8 -0
- package/docs/cli/audit.mdx +646 -0
- package/docs/cli/doctor.mdx +29 -0
- package/docs/{reference/eval.mdx → cli/evals.mdx} +9 -8
- package/docs/cli/index.mdx +105 -0
- package/docs/cli/meta.ts +7 -0
- package/docs/{reference → cli}/translate.mdx +1 -1
- package/docs/cli/validate.mdx +41 -0
- package/docs/cli/version.mdx +40 -0
- package/docs/configuration/analytics.mdx +350 -59
- package/docs/configuration/ask-ai.mdx +162 -61
- package/docs/configuration/customization.mdx +15 -9
- package/docs/configuration/index.mdx +50 -31
- package/docs/configuration/search.mdx +75 -54
- package/docs/configuration/theming.mdx +24 -15
- package/docs/content/components.mdx +21 -5
- package/docs/{reference → content}/frontmatter.mdx +35 -1
- package/docs/content/i18n.mdx +8 -6
- package/docs/content/includes.mdx +2 -4
- package/docs/content/index.mdx +1 -1
- package/docs/content/islands.mdx +10 -5
- package/docs/content/meta.mdx +1 -1
- package/docs/content/meta.ts +1 -0
- package/docs/content/navigation.mdx +9 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +16 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +11 -11
- package/docs/discoverability/index.mdx +4 -4
- package/docs/discoverability/json-api.mdx +4 -4
- package/docs/discoverability/llms-txt.mdx +6 -6
- package/docs/discoverability/markdown.mdx +4 -4
- package/docs/discoverability/mcp.mdx +11 -11
- package/docs/discoverability/sitemap-and-robots.mdx +3 -3
- package/docs/index.mdx +2 -2
- package/docs/references/asyncapi.mdx +59 -0
- package/docs/{advanced → references}/graphql.mdx +45 -32
- package/docs/{reference → references}/meta.ts +2 -2
- package/docs/references/openapi.mdx +171 -0
- package/docs/references/scalar.mdx +64 -0
- package/package.json +42 -8
- package/skills/blume/SKILL.md +21 -8
- package/skills/blume-migrate/SKILL.md +22 -21
- package/skills/blume-migrate/assets/oxfmt@0.67.0.patch +49 -0
- package/skills/blume-migrate/references/docusaurus.md +5 -4
- package/skills/blume-migrate/references/fumadocs.md +4 -4
- package/skills/blume-migrate/references/mintlify.md +23 -8
- package/skills/blume-migrate/references/monorepo.md +6 -6
- package/skills/blume-migrate/references/starlight.md +4 -4
- package/src/ai/agent-readability.ts +21 -22
- package/src/ai/ai-catalog.ts +50 -32
- package/src/ai/api/handlers.ts +46 -11
- package/src/ai/api-catalog.ts +8 -8
- package/src/ai/ask-data.ts +1 -1
- package/src/ai/ask.ts +624 -100
- package/src/ai/changelog-markdown.ts +91 -0
- package/src/ai/component-markdown.ts +328 -12
- package/src/ai/index.ts +45 -0
- package/src/ai/link-headers.ts +7 -6
- package/src/ai/llms.ts +20 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/openapi-components.ts +4 -1
- package/src/ai/relative-links.ts +170 -0
- package/src/ai/serializers.ts +2 -2
- package/src/ai/skills.ts +1 -1
- package/src/ai/web-bot-auth.ts +2 -2
- package/src/analytics/adobe.ts +46 -0
- package/src/analytics/amplitude.ts +79 -0
- package/src/analytics/clarity.ts +46 -0
- package/src/analytics/clearbit.ts +47 -0
- package/src/analytics/cloudflare.ts +67 -0
- package/src/analytics/fathom.ts +64 -0
- package/src/analytics/google-analytics.ts +84 -0
- package/src/analytics/google-tag-manager.ts +61 -0
- package/src/analytics/head.ts +130 -0
- package/src/analytics/heap.ts +65 -0
- package/src/analytics/hightouch.ts +77 -0
- package/src/analytics/hotjar.ts +47 -0
- package/src/analytics/index.ts +71 -0
- package/src/analytics/inline.ts +21 -0
- package/src/analytics/logrocket.ts +71 -0
- package/src/analytics/mixpanel.ts +92 -0
- package/src/analytics/pirsch.ts +66 -0
- package/src/analytics/plausible.ts +83 -0
- package/src/analytics/posthog.ts +78 -0
- package/src/analytics/schema.ts +60 -0
- package/src/analytics/script.ts +60 -0
- package/src/analytics/segment.ts +85 -0
- package/src/analytics/vercel.ts +50 -0
- package/src/astro/adapter-root.ts +7 -9
- package/src/astro/component-slots.ts +131 -91
- package/src/astro/generate.ts +112 -345
- package/src/astro/integration.ts +2 -6
- package/src/astro/pages.ts +13 -101
- package/src/astro/render-deps.ts +379 -0
- package/src/astro/runtime-deps.ts +201 -0
- package/src/astro/templates.ts +554 -541
- package/src/audit/agent.ts +24 -0
- package/src/audit/catalog.ts +2 -2
- package/src/audit/checks/assets.ts +2 -2
- package/src/audit/checks/dns-aid.ts +1 -1
- package/src/audit/checks/duplicates.ts +3 -1
- package/src/audit/checks/i18n.ts +1 -1
- package/src/audit/checks/indexability.ts +7 -7
- package/src/audit/checks/links.ts +2 -2
- package/src/audit/checks/llms.ts +6 -6
- package/src/audit/checks/network.ts +3 -3
- package/src/audit/checks/og-image.ts +2 -2
- package/src/audit/checks/robots.ts +1 -1
- package/src/audit/checks/sitemap.ts +2 -2
- package/src/audit/checks/social.ts +1 -1
- package/src/audit/run.ts +4 -3
- package/src/audit/terms.ts +31 -0
- package/src/audit/url.ts +13 -13
- package/src/cli/command-meta.ts +10 -0
- package/src/cli/commands/audit.ts +39 -20
- package/src/cli/commands/build.ts +71 -316
- package/src/cli/commands/check.ts +1 -0
- package/src/cli/commands/dev.ts +40 -1
- package/src/cli/commands/doctor.ts +90 -14
- package/src/cli/commands/eject.ts +44 -7
- package/src/cli/commands/eval.ts +2 -2
- package/src/cli/commands/init.ts +161 -41
- package/src/cli/commands/migrate.ts +121 -0
- package/src/cli/commands/preview.ts +7 -1
- package/src/cli/commands/translate.ts +2 -2
- package/src/cli/commands/upgrade.ts +141 -0
- package/src/cli/commands/version.ts +57 -44
- package/src/cli/eject-scripts.ts +121 -6
- package/src/cli/index.ts +11 -1
- package/src/cli/init/install.ts +70 -0
- package/src/cli/init/questions.ts +7 -0
- package/src/cli/init/scaffold.ts +459 -75
- package/src/cli/lazy-command.ts +37 -1
- package/src/cli/prepare.ts +40 -6
- package/src/cli/required-secrets.ts +38 -11
- package/src/cli/unknown-flags.ts +266 -0
- package/src/cli/yarn-pnp.ts +52 -0
- package/src/components/content/AccordionItem.astro +7 -1
- package/src/components/content/Card.astro +4 -3
- package/src/components/content/ColorItem.astro +22 -4
- package/src/components/content/GithubInfo.astro +2 -2
- package/src/components/content/Prompt.astro +25 -25
- package/src/components/content/Tabs.astro +3 -1
- package/src/components/content/Tile.astro +2 -3
- package/src/components/content/Tooltip.astro +57 -9
- package/src/components/content/content-strings.ts +34 -0
- package/src/components/content/diff.ts +1 -1
- package/src/components/content/mermaid-element.ts +13 -2
- package/src/components/content/prompt-markdown.ts +292 -0
- package/src/components/content/tooltip-id.ts +41 -0
- package/src/components/islands/hooks.ts +25 -2
- package/src/components/layout/Analytics.astro +21 -79
- package/src/components/layout/Banner.astro +3 -1
- package/src/components/layout/DiscoveryLinks.astro +69 -0
- package/src/components/layout/Header.astro +83 -20
- package/src/components/layout/LanguageSwitcher.astro +4 -1
- package/src/components/layout/Logo.astro +23 -2
- package/src/components/layout/NavSelector.astro +13 -2
- package/src/components/layout/NavTree.astro +12 -3
- package/src/components/layout/NavTreeScript.astro +17 -3
- package/src/components/layout/PageActions.astro +3 -3
- package/src/components/layout/PageFeedback.astro +11 -1
- package/src/components/layout/PageLayout.astro +52 -5
- package/src/components/layout/ReferenceLayout.astro +21 -12
- package/src/components/layout/RootLayout.astro +69 -66
- package/src/components/layout/Search.astro +30 -6
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +72 -15
- package/src/components/layout/drawer-inert.ts +113 -15
- package/src/components/layout/dropdown-clamp.ts +105 -0
- package/src/components/layout/head-scripts.ts +15 -6
- package/src/components/layout/nav-utils.ts +17 -0
- package/src/components/layout/search/algolia.ts +8 -8
- package/src/components/layout/search/orama-cloud.ts +9 -7
- package/src/components/layout/search/typesense.ts +11 -17
- package/src/components/openapi/MessageComposer.astro +2 -2
- package/src/components/openapi/Playground.astro +2 -2
- package/src/components/openapi/playground-client.ts +79 -10
- package/src/core/changelog-index.ts +24 -0
- package/src/core/component-overrides.ts +399 -154
- package/src/core/config-input.ts +188 -553
- package/src/core/config.ts +130 -41
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +31 -12
- package/src/core/define-components.ts +12 -9
- package/src/core/deployment-env.ts +18 -74
- package/src/core/diagnostics.ts +14 -7
- package/src/core/graph.ts +69 -25
- package/src/core/i18n-ui.ts +6 -2
- package/src/core/i18n.ts +17 -0
- package/src/core/includes.ts +156 -38
- package/src/core/last-modified.ts +6 -11
- package/src/core/links.ts +166 -2
- package/src/core/manifest.ts +10 -3
- package/src/core/navigation.ts +115 -16
- package/src/core/new-tab.ts +35 -0
- package/src/core/node-require.ts +21 -0
- package/src/core/project-graph.ts +42 -26
- package/src/core/project.ts +9 -4
- package/src/core/request-body.ts +61 -0
- package/src/core/safe-href.ts +28 -0
- package/src/core/safe-links.ts +68 -0
- package/src/core/schema.ts +517 -739
- package/src/core/server-features.ts +8 -9
- package/src/core/sources/assets.ts +47 -11
- package/src/core/sources/collection.ts +67 -0
- package/src/core/sources/contentful-rich-text.ts +285 -0
- package/src/core/sources/contentful.ts +173 -0
- package/src/core/sources/github-releases.ts +51 -1
- package/src/core/sources/json.ts +71 -0
- package/src/core/sources/lexical.ts +195 -0
- package/src/core/sources/lower.ts +226 -0
- package/src/core/sources/normalize.ts +52 -2
- package/src/core/sources/notion.ts +39 -28
- package/src/core/sources/payload.ts +135 -0
- package/src/core/sources/portable-text.ts +11 -16
- package/src/core/sources/remote.ts +226 -0
- package/src/core/sources/resolve.ts +104 -166
- package/src/core/sources/sanity.ts +16 -49
- package/src/core/sources/strapi-blocks.ts +124 -0
- package/src/core/sources/strapi.ts +191 -0
- package/src/core/sources/types.ts +12 -1
- package/src/core/types.ts +15 -1
- package/src/core/ui-packs/ar.ts +6 -2
- package/src/core/ui-packs/bg.ts +6 -2
- package/src/core/ui-packs/bn.ts +6 -2
- package/src/core/ui-packs/ca.ts +3 -1
- package/src/core/ui-packs/cs.ts +6 -2
- package/src/core/ui-packs/da.ts +6 -2
- package/src/core/ui-packs/de.ts +6 -2
- package/src/core/ui-packs/el.ts +3 -1
- package/src/core/ui-packs/es.ts +3 -1
- package/src/core/ui-packs/fa.ts +6 -2
- package/src/core/ui-packs/fi.ts +6 -2
- package/src/core/ui-packs/fr.ts +3 -1
- package/src/core/ui-packs/he.ts +6 -2
- package/src/core/ui-packs/hi.ts +6 -2
- package/src/core/ui-packs/hr.ts +6 -2
- package/src/core/ui-packs/hu.ts +6 -2
- package/src/core/ui-packs/id.ts +6 -2
- package/src/core/ui-packs/it.ts +3 -1
- package/src/core/ui-packs/ja.ts +3 -1
- package/src/core/ui-packs/ko.ts +3 -1
- package/src/core/ui-packs/nl.ts +6 -2
- package/src/core/ui-packs/no.ts +6 -2
- package/src/core/ui-packs/pl.ts +6 -2
- package/src/core/ui-packs/pt-br.ts +3 -1
- package/src/core/ui-packs/pt.ts +3 -1
- package/src/core/ui-packs/ro.ts +6 -2
- package/src/core/ui-packs/ru.ts +6 -2
- package/src/core/ui-packs/sk.ts +6 -2
- package/src/core/ui-packs/sr.ts +6 -2
- package/src/core/ui-packs/sv.ts +6 -2
- package/src/core/ui-packs/th.ts +3 -1
- package/src/core/ui-packs/tr.ts +6 -2
- package/src/core/ui-packs/uk.ts +6 -2
- package/src/core/ui-packs/vi.ts +3 -1
- package/src/core/ui-packs/zh-tw.ts +3 -1
- package/src/core/ui-packs/zh.ts +3 -1
- package/src/core/unrecognized-keys.ts +10 -0
- package/src/core/version-cut.ts +116 -8
- package/src/deploy/adapter-output.ts +57 -97
- package/src/deploy/adapters/cloudflare.ts +39 -0
- package/src/deploy/adapters/index.ts +41 -0
- package/src/deploy/adapters/netlify.ts +34 -0
- package/src/deploy/adapters/node.ts +34 -0
- package/src/deploy/adapters/registry.ts +127 -0
- package/src/deploy/adapters/types.ts +92 -0
- package/src/deploy/adapters/vercel.ts +35 -0
- package/src/deploy/artifacts.ts +55 -27
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +124 -23
- package/src/deploy/node-headers.ts +198 -0
- package/src/deploy/platforms/cloudflare.ts +312 -0
- package/src/deploy/platforms/index.ts +67 -0
- package/src/deploy/platforms/netlify.ts +52 -0
- package/src/deploy/platforms/node.ts +40 -0
- package/src/deploy/platforms/paths.ts +42 -0
- package/src/deploy/platforms/static.ts +29 -0
- package/src/deploy/platforms/types.ts +112 -0
- package/src/deploy/platforms/vercel.ts +193 -0
- package/src/deploy/redirects.ts +30 -18
- package/src/deploy/robots.ts +3 -3
- package/src/deploy/rss.ts +2 -2
- package/src/deploy/sitemap.ts +2 -2
- package/src/deploy/vercel-negotiation.ts +2 -2
- package/src/eval/agents.ts +32 -1
- package/src/eval/findings.ts +19 -11
- package/src/eval/report.ts +10 -2
- package/src/markdown/external-links.ts +65 -0
- package/src/markdown/include.ts +45 -27
- package/src/markdown/index.ts +34 -9
- package/src/markdown/inline-code.ts +12 -6
- package/src/markdown/relative-links.ts +324 -0
- package/src/markdown/themes.ts +3 -3
- package/src/migrate/migrate.ts +149 -0
- package/src/openapi/parse.ts +64 -16
- package/src/openapi/proxy.ts +62 -10
- package/src/openapi/references.ts +147 -147
- package/src/openapi/render-mdx.ts +32 -10
- package/src/openapi/scalar.ts +15 -13
- package/src/openapi/sentence.ts +14 -0
- package/src/openapi/source.ts +37 -21
- package/src/openapi/spec-dependency-error.ts +15 -0
- package/src/reference/asyncapi.ts +83 -0
- package/src/reference/graphql.ts +89 -0
- package/src/reference/index.ts +40 -0
- package/src/reference/openapi.ts +83 -0
- package/src/reference/options.ts +201 -0
- package/src/reference/scalar.ts +136 -0
- package/src/reference/schema.ts +88 -0
- package/src/registry/eject.ts +97 -42
- package/src/search/adapters/algolia.ts +46 -0
- package/src/search/adapters/flexsearch.ts +29 -0
- package/src/search/adapters/index.ts +39 -0
- package/src/search/adapters/mixedbread.ts +39 -0
- package/src/search/adapters/orama-cloud.ts +51 -0
- package/src/search/adapters/orama.ts +24 -0
- package/src/search/adapters/pagefind.ts +27 -0
- package/src/search/adapters/registry.ts +131 -0
- package/src/search/adapters/types.ts +46 -0
- package/src/search/adapters/typesense.ts +57 -0
- package/src/search/build.ts +8 -4
- package/src/search/documents.ts +6 -0
- package/src/search/sync/algolia.ts +12 -11
- package/src/search/sync/index.ts +35 -20
- package/src/search/sync/orama-cloud.ts +12 -9
- package/src/search/sync/typesense.ts +15 -13
- package/src/sources/contentful.ts +63 -0
- package/src/sources/custom.ts +38 -0
- package/src/sources/filesystem.ts +51 -0
- package/src/sources/github-releases.ts +52 -0
- package/src/sources/index.ts +60 -0
- package/src/sources/mdx-remote.ts +76 -0
- package/src/sources/notion.ts +63 -0
- package/src/sources/obsidian.ts +38 -0
- package/src/sources/payload.ts +60 -0
- package/src/sources/registry.ts +182 -0
- package/src/sources/sanity.ts +66 -0
- package/src/sources/shared.ts +52 -0
- package/src/sources/strapi.ts +58 -0
- package/src/theme/entry.ts +24 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-0qymqwzz.js +0 -164
- package/dist/cli/chunk-0qymqwzz.js.map +0 -15
- package/dist/cli/chunk-1jefwnfs.js.map +0 -48
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-4x36ddpw.js.map +0 -11
- package/dist/cli/chunk-5093q3n7.js +0 -68
- package/dist/cli/chunk-5093q3n7.js.map +0 -10
- package/dist/cli/chunk-5qk08vmp.js.map +0 -11
- package/dist/cli/chunk-7s8hm3b6.js +0 -5347
- package/dist/cli/chunk-7s8hm3b6.js.map +0 -58
- package/dist/cli/chunk-8cjtbafj.js.map +0 -13
- package/dist/cli/chunk-97r59kpr.js +0 -381
- package/dist/cli/chunk-97r59kpr.js.map +0 -12
- package/dist/cli/chunk-ahnw3kxw.js.map +0 -15
- package/dist/cli/chunk-b27xqwn9.js.map +0 -10
- package/dist/cli/chunk-bf6bt1xt.js +0 -185
- package/dist/cli/chunk-bf6bt1xt.js.map +0 -11
- package/dist/cli/chunk-cjtn640a.js.map +0 -10
- package/dist/cli/chunk-ct47dqpx.js.map +0 -11
- package/dist/cli/chunk-esphfr8p.js +0 -107
- package/dist/cli/chunk-esphfr8p.js.map +0 -11
- package/dist/cli/chunk-ex56aa81.js +0 -1016
- package/dist/cli/chunk-ex56aa81.js.map +0 -13
- package/dist/cli/chunk-garjf5z9.js +0 -30
- package/dist/cli/chunk-garjf5z9.js.map +0 -10
- package/dist/cli/chunk-js7saxwm.js +0 -1045
- package/dist/cli/chunk-js7saxwm.js.map +0 -22
- package/dist/cli/chunk-k79xp7av.js.map +0 -39
- package/dist/cli/chunk-ps4m1xh4.js.map +0 -15
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-rz9jmfhz.js +0 -108
- package/dist/cli/chunk-rz9jmfhz.js.map +0 -10
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-yg63d42r.js.map +0 -34
- package/docs/advanced/api-reference.mdx +0 -240
- package/docs/reference/cli.mdx +0 -197
- package/skills/blume-migrate/assets/oxfmt@0.55.0.patch +0 -20
- package/src/components/content/changelog-element.ts +0 -69
- package/src/search/providers.ts +0 -91
- /package/dist/cli/{chunk-e7f42gdj.js.map → chunk-7ez8ny0t.js.map} +0 -0
- /package/dist/cli/{chunk-nn13znc2.js.map → chunk-88cpgt6h.js.map} +0 -0
- /package/dist/cli/{chunk-vacwm2hv.js.map → chunk-f7t03s3g.js.map} +0 -0
- /package/dist/cli/{chunk-dwgcp5sm.js.map → chunk-zxccj738.js.map} +0 -0
|
@@ -1,25 +1,32 @@
|
|
|
1
1
|
import { normalizeRoute, withBasePath } from "../core/base-path.ts";
|
|
2
2
|
import type { ResolvedConfig } from "../core/schema.ts";
|
|
3
3
|
import { trimChar } from "../core/trim.ts";
|
|
4
|
+
import type { ScalarOptions } from "../reference/scalar.ts";
|
|
5
|
+
import type { ResolvedReferenceAdapter } from "../reference/schema.ts";
|
|
4
6
|
|
|
5
7
|
// Re-exported from its home next to the other path helpers; `core/schema.ts`
|
|
6
8
|
// and downstream consumers historically imported it from here.
|
|
7
9
|
export { normalizeRoute } from "../core/base-path.ts";
|
|
8
10
|
|
|
9
11
|
/**
|
|
10
|
-
* Pure resolution of the configured
|
|
11
|
-
*
|
|
12
|
+
* Pure resolution of the configured `reference` adapters into concrete routes
|
|
13
|
+
* and labels — no file IO, so the content source, the
|
|
12
14
|
* nav-target validation, the Scalar page generator, and the `blume:openapi`
|
|
13
15
|
* data module all share one source of truth. Kept free of any Astro/template
|
|
14
16
|
* imports so `core` can depend on it without a cycle.
|
|
15
17
|
*/
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
/**
|
|
20
|
+
* Which adapter a reference came from. `openapi`, `asyncapi`, and `graphql`
|
|
21
|
+
* are rendered by Blume into real pages; `scalar` is the embedded Scalar SPA
|
|
22
|
+
* on a single route.
|
|
23
|
+
*/
|
|
24
|
+
export type ReferenceKind = ResolvedReferenceAdapter["kind"];
|
|
18
25
|
|
|
19
|
-
/**
|
|
20
|
-
export type
|
|
26
|
+
/** The kinds Blume renders into pages itself — everything but the Scalar embed. */
|
|
27
|
+
export type BlumeReferenceKind = Exclude<ReferenceKind, "scalar">;
|
|
21
28
|
|
|
22
|
-
/** Per-
|
|
29
|
+
/** Per-adapter display options for the Blume renderer. */
|
|
23
30
|
export interface ReferenceDisplay {
|
|
24
31
|
/** Code-sample languages shown per operation. */
|
|
25
32
|
codeSamples: string[];
|
|
@@ -33,10 +40,9 @@ export interface ReferenceDisplay {
|
|
|
33
40
|
playground: { enabled: boolean; proxy: string | boolean };
|
|
34
41
|
}
|
|
35
42
|
|
|
36
|
-
/** A spec source resolved to a concrete route
|
|
43
|
+
/** A spec source resolved to a concrete route and label. */
|
|
37
44
|
export interface ReferenceSource {
|
|
38
45
|
kind: ReferenceKind;
|
|
39
|
-
renderer: ReferenceRenderer;
|
|
40
46
|
/** Unique token derived from the route; the `<Operation source>` / data key. */
|
|
41
47
|
slug: string;
|
|
42
48
|
/** Normalized route the reference mounts at, e.g. `/reference`. */
|
|
@@ -66,14 +72,12 @@ export interface ReferenceSource {
|
|
|
66
72
|
* (GraphQL only — a schema, unlike an OpenAPI document, names no server).
|
|
67
73
|
*/
|
|
68
74
|
endpoint?: string;
|
|
69
|
-
/** Per-block Scalar theme name override, if any (Scalar renderer only). */
|
|
70
|
-
theme?: string;
|
|
71
75
|
/**
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
*
|
|
76
|
+
* The `scalar()` adapter's own options (`scalar` kind only): `theme` plus
|
|
77
|
+
* any Scalar config forwarded verbatim to `<ScalarComponent>`, which takes
|
|
78
|
+
* precedence over Blume's derived spec/theme config.
|
|
75
79
|
*/
|
|
76
|
-
scalar?:
|
|
80
|
+
scalar?: ScalarOptions;
|
|
77
81
|
/** Display options carried through to the Blume renderer. */
|
|
78
82
|
display: ReferenceDisplay;
|
|
79
83
|
/**
|
|
@@ -83,6 +87,14 @@ export interface ReferenceSource {
|
|
|
83
87
|
collisions?: string[];
|
|
84
88
|
}
|
|
85
89
|
|
|
90
|
+
/** A reference Blume renders itself: one the content pipeline stages pages for. */
|
|
91
|
+
export type BlumeReferenceSource = ReferenceSource & {
|
|
92
|
+
kind: BlumeReferenceKind;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const isBlumeReference = (ref: ReferenceSource): ref is BlumeReferenceSource =>
|
|
96
|
+
ref.kind !== "scalar";
|
|
97
|
+
|
|
86
98
|
// Keep Unicode letters/marks/numbers so diacritics stay in the slug (ASCII-only
|
|
87
99
|
// stripping turned `Größe` into `gr-e`, which the nav humanizer rendered as
|
|
88
100
|
// `Gr E`); `\p{M}` keeps combining marks attached to their base letter, which
|
|
@@ -119,59 +131,95 @@ export const slugify = (text: string): string =>
|
|
|
119
131
|
const routeSlug = (route: string): string =>
|
|
120
132
|
slugify(trimChar(route, "/")) || "reference";
|
|
121
133
|
|
|
134
|
+
/** The label a source gets when it names none (numbered when there are several). */
|
|
135
|
+
const DEFAULT_LABELS: Record<ReferenceKind, string> = {
|
|
136
|
+
asyncapi: "Events",
|
|
137
|
+
graphql: "GraphQL",
|
|
138
|
+
openapi: "API Reference",
|
|
139
|
+
scalar: "API Reference",
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
/** The Blume renderer has nothing to show for a Scalar embed. */
|
|
143
|
+
const NO_DISPLAY: ReferenceDisplay = {
|
|
144
|
+
codeSamples: [],
|
|
145
|
+
expandSchemas: false,
|
|
146
|
+
playground: { enabled: false, proxy: false },
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
const displayOf = (adapter: ResolvedReferenceAdapter): ReferenceDisplay => {
|
|
150
|
+
if (adapter.kind === "scalar") {
|
|
151
|
+
return NO_DISPLAY;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
codeSamples: adapter.options.codeSamples,
|
|
155
|
+
// GraphQL field tables have no nesting, so `graphql()` takes no
|
|
156
|
+
// `expandSchemas` toggle.
|
|
157
|
+
expandSchemas:
|
|
158
|
+
adapter.kind === "graphql" ? false : adapter.options.expandSchemas,
|
|
159
|
+
playground: adapter.options.playground,
|
|
160
|
+
};
|
|
161
|
+
};
|
|
162
|
+
|
|
122
163
|
/**
|
|
123
|
-
*
|
|
124
|
-
* `
|
|
125
|
-
*
|
|
126
|
-
* so one resolver serves every block.
|
|
164
|
+
* A `scalar()` adapter's options minus the ones Blume resolves itself
|
|
165
|
+
* (`route`, `sources`): `theme` and the verbatim Scalar passthrough, which
|
|
166
|
+
* the generated page inlines.
|
|
127
167
|
*/
|
|
128
|
-
|
|
129
|
-
|
|
168
|
+
const scalarOptionsOf = (
|
|
169
|
+
options: Extract<ResolvedReferenceAdapter, { kind: "scalar" }>["options"]
|
|
170
|
+
): ScalarOptions =>
|
|
171
|
+
Object.fromEntries(
|
|
172
|
+
Object.entries(options).filter(
|
|
173
|
+
([key]) => key !== "route" && key !== "sources"
|
|
174
|
+
)
|
|
175
|
+
);
|
|
176
|
+
|
|
177
|
+
/** A source row with every kind's fields reconciled onto one shape. */
|
|
178
|
+
interface SourceRow {
|
|
130
179
|
endpoint?: string;
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
noindex: boolean;
|
|
139
|
-
route?: string;
|
|
140
|
-
seoDescriptionSuffix: boolean;
|
|
141
|
-
spec: string;
|
|
142
|
-
}[];
|
|
143
|
-
spec?: string;
|
|
144
|
-
theme?: string;
|
|
180
|
+
includeInLlms: boolean;
|
|
181
|
+
includeInSearch: boolean;
|
|
182
|
+
label?: string;
|
|
183
|
+
noindex: boolean;
|
|
184
|
+
route?: string;
|
|
185
|
+
seoDescriptionSuffix: boolean;
|
|
186
|
+
spec: string;
|
|
145
187
|
}
|
|
146
188
|
|
|
147
|
-
/**
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
189
|
+
/**
|
|
190
|
+
* One row per source, with the kind-specific fields already reconciled: a
|
|
191
|
+
* GraphQL source's `endpoint` falls back to the adapter-wide default (the
|
|
192
|
+
* common single-schema case pairs it with the `spec` shorthand); the other
|
|
193
|
+
* kinds have no endpoint at all. A Scalar source carries only `noindex` of
|
|
194
|
+
* the per-source controls — the embed sits outside search and llms.txt, so
|
|
195
|
+
* the other two read as off.
|
|
196
|
+
*/
|
|
197
|
+
const sourceRowsOf = (adapter: ResolvedReferenceAdapter): SourceRow[] => {
|
|
198
|
+
if (adapter.kind === "graphql") {
|
|
199
|
+
return adapter.options.sources.map((source) => ({
|
|
200
|
+
...source,
|
|
201
|
+
endpoint: source.endpoint ?? adapter.options.endpoint,
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
if (adapter.kind === "scalar") {
|
|
205
|
+
return adapter.options.sources.map((source) => ({
|
|
206
|
+
...source,
|
|
207
|
+
includeInLlms: false,
|
|
208
|
+
includeInSearch: false,
|
|
209
|
+
seoDescriptionSuffix: false,
|
|
210
|
+
}));
|
|
158
211
|
}
|
|
159
|
-
return sources;
|
|
212
|
+
return adapter.options.sources;
|
|
160
213
|
};
|
|
161
214
|
|
|
162
215
|
const referencesFor = (
|
|
163
|
-
|
|
164
|
-
block: Block,
|
|
165
|
-
defaultLabel: string,
|
|
166
|
-
renderer: ReferenceRenderer,
|
|
167
|
-
display: ReferenceDisplay,
|
|
216
|
+
adapter: ResolvedReferenceAdapter,
|
|
168
217
|
basePath: string
|
|
169
218
|
): ReferenceSource[] => {
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
const
|
|
174
|
-
const base = normalizeRoute(block.route);
|
|
219
|
+
const sources = sourceRowsOf(adapter);
|
|
220
|
+
const base = normalizeRoute(adapter.options.route);
|
|
221
|
+
const defaultLabel = DEFAULT_LABELS[adapter.kind];
|
|
222
|
+
const display = displayOf(adapter);
|
|
175
223
|
|
|
176
224
|
return sources.map((source, index) => {
|
|
177
225
|
const label =
|
|
@@ -193,77 +241,36 @@ const referencesFor = (
|
|
|
193
241
|
display,
|
|
194
242
|
includeInLlms: source.includeInLlms,
|
|
195
243
|
includeInSearch: source.includeInSearch,
|
|
196
|
-
kind,
|
|
244
|
+
kind: adapter.kind,
|
|
197
245
|
label,
|
|
198
246
|
noindex: source.noindex,
|
|
199
|
-
renderer,
|
|
200
247
|
route,
|
|
201
|
-
scalar: block.scalar,
|
|
202
248
|
seoDescriptionSuffix: source.seoDescriptionSuffix,
|
|
203
249
|
slug: routeSlug(route),
|
|
204
250
|
spec: source.spec,
|
|
205
|
-
theme: block.theme,
|
|
206
251
|
};
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
if (endpoint !== undefined) {
|
|
211
|
-
reference.endpoint = endpoint;
|
|
252
|
+
if (adapter.kind === "scalar") {
|
|
253
|
+
reference.scalar = scalarOptionsOf(adapter.options);
|
|
254
|
+
}
|
|
255
|
+
if (source.endpoint !== undefined) {
|
|
256
|
+
reference.endpoint = source.endpoint;
|
|
212
257
|
}
|
|
213
258
|
return reference;
|
|
214
259
|
});
|
|
215
260
|
};
|
|
216
261
|
|
|
217
262
|
/**
|
|
218
|
-
* Resolve every
|
|
219
|
-
*
|
|
263
|
+
* Resolve every configured reference, in `reference` order: Blume's own pages
|
|
264
|
+
* for `openapi()`, `asyncapi()`, and `graphql()`, and one embedded Scalar page
|
|
265
|
+
* per `scalar()` source.
|
|
220
266
|
*/
|
|
221
|
-
export const resolveReferences = (
|
|
222
|
-
config
|
|
223
|
-
)
|
|
224
|
-
|
|
225
|
-
"openapi",
|
|
226
|
-
config.openapi,
|
|
227
|
-
"API Reference",
|
|
228
|
-
config.openapi.renderer,
|
|
229
|
-
{
|
|
230
|
-
codeSamples: config.openapi.codeSamples,
|
|
231
|
-
expandSchemas: config.openapi.expandSchemas,
|
|
232
|
-
playground: config.openapi.playground,
|
|
233
|
-
},
|
|
234
|
-
config.basePath
|
|
235
|
-
),
|
|
236
|
-
...referencesFor(
|
|
237
|
-
"asyncapi",
|
|
238
|
-
config.asyncapi,
|
|
239
|
-
"Events",
|
|
240
|
-
config.asyncapi.renderer,
|
|
241
|
-
{
|
|
242
|
-
codeSamples: config.asyncapi.codeSamples,
|
|
243
|
-
expandSchemas: config.asyncapi.expandSchemas,
|
|
244
|
-
playground: config.asyncapi.playground,
|
|
245
|
-
},
|
|
246
|
-
config.basePath
|
|
247
|
-
),
|
|
248
|
-
// GraphQL is always Blume-rendered — Scalar's embedded SPA reads OpenAPI
|
|
249
|
-
// documents only, so the block declares no `renderer` opt-out (nor the
|
|
250
|
-
// schema-row `expandSchemas` toggle; GraphQL field tables have no nesting).
|
|
251
|
-
...referencesFor(
|
|
252
|
-
"graphql",
|
|
253
|
-
config.graphql,
|
|
254
|
-
"GraphQL",
|
|
255
|
-
"blume",
|
|
256
|
-
{
|
|
257
|
-
codeSamples: config.graphql.codeSamples,
|
|
258
|
-
expandSchemas: false,
|
|
259
|
-
playground: config.graphql.playground,
|
|
260
|
-
},
|
|
261
|
-
config.basePath
|
|
262
|
-
),
|
|
263
|
-
];
|
|
267
|
+
export const resolveReferences = (config: ResolvedConfig): ReferenceSource[] =>
|
|
268
|
+
config.reference.flatMap((adapter) =>
|
|
269
|
+
referencesFor(adapter, config.basePath)
|
|
270
|
+
);
|
|
264
271
|
|
|
265
272
|
/**
|
|
266
|
-
* Mounted route for every reference, regardless of
|
|
273
|
+
* Mounted route for every reference, regardless of kind. References no
|
|
267
274
|
* longer add a header tab automatically — authors point a `navigation.tabs`
|
|
268
275
|
* entry at one of these routes to surface it (and, for Blume-rendered specs, to
|
|
269
276
|
* scope its operations sidebar). These routes are whitelisted as valid nav
|
|
@@ -274,9 +281,7 @@ export const referenceRoutes = (config: ResolvedConfig): string[] =>
|
|
|
274
281
|
// Blume-rendered operation pages flow through the content pipeline and are
|
|
275
282
|
// mounted under `basePath`. Scalar references are a single embedded page
|
|
276
283
|
// injected at the raw `route`, left root-anchored.
|
|
277
|
-
ref.
|
|
278
|
-
? withBasePath(config.basePath, ref.route)
|
|
279
|
-
: ref.route
|
|
284
|
+
ref.kind === "scalar" ? ref.route : withBasePath(config.basePath, ref.route)
|
|
280
285
|
);
|
|
281
286
|
|
|
282
287
|
/**
|
|
@@ -287,10 +292,10 @@ export const referenceRoutes = (config: ResolvedConfig): string[] =>
|
|
|
287
292
|
*/
|
|
288
293
|
const blumeReferenceOf = (
|
|
289
294
|
ref: ReferenceSource,
|
|
290
|
-
seen: Map<string,
|
|
295
|
+
seen: Map<string, BlumeReferenceSource>,
|
|
291
296
|
usedSlugs: Set<string>
|
|
292
|
-
):
|
|
293
|
-
if (ref
|
|
297
|
+
): BlumeReferenceSource | null => {
|
|
298
|
+
if (!isBlumeReference(ref)) {
|
|
294
299
|
return null;
|
|
295
300
|
}
|
|
296
301
|
const kept = seen.get(ref.route);
|
|
@@ -318,11 +323,13 @@ const blumeReferenceOf = (
|
|
|
318
323
|
return accepted;
|
|
319
324
|
};
|
|
320
325
|
|
|
321
|
-
/** Blume-rendered references (
|
|
322
|
-
export const blumeReferences = (
|
|
323
|
-
|
|
326
|
+
/** Blume-rendered references (every kind but Scalar), deduped by route (first wins). */
|
|
327
|
+
export const blumeReferences = (
|
|
328
|
+
config: ResolvedConfig
|
|
329
|
+
): BlumeReferenceSource[] => {
|
|
330
|
+
const seen = new Map<string, BlumeReferenceSource>();
|
|
324
331
|
const usedSlugs = new Set<string>();
|
|
325
|
-
const result:
|
|
332
|
+
const result: BlumeReferenceSource[] = [];
|
|
326
333
|
for (const ref of resolveReferences(config)) {
|
|
327
334
|
const accepted = blumeReferenceOf(ref, seen, usedSlugs);
|
|
328
335
|
if (accepted) {
|
|
@@ -332,42 +339,35 @@ export const blumeReferences = (config: ResolvedConfig): ReferenceSource[] => {
|
|
|
332
339
|
return result;
|
|
333
340
|
};
|
|
334
341
|
|
|
335
|
-
/** Whether any reference is Scalar-rendered (gates the
|
|
342
|
+
/** Whether any reference is Scalar-rendered (gates the Scalar pages). */
|
|
336
343
|
export const hasScalarReferences = (config: ResolvedConfig): boolean =>
|
|
337
|
-
resolveReferences(config).some((ref) => ref.
|
|
344
|
+
resolveReferences(config).some((ref) => ref.kind === "scalar");
|
|
338
345
|
|
|
339
346
|
/**
|
|
340
|
-
* The
|
|
347
|
+
* The Blume-rendered references whose enabled playground opted into the
|
|
341
348
|
* built-in CORS proxy with `proxy: true`. A proxy URL string points at an
|
|
342
349
|
* external service, and `false` sends requests directly — neither routes
|
|
343
|
-
* through the endpoint.
|
|
344
|
-
*
|
|
350
|
+
* through the endpoint. AsyncAPI never does: an event composer's WebSocket
|
|
351
|
+
* connect is direct, so its `proxy` has nothing to forward. Drawn from the
|
|
352
|
+
* deduped set so the slugs match the `blume:openapi` data keys; the
|
|
353
|
+
* generator's per-spec allowlist diagnostics key on this, so it shares one
|
|
354
|
+
* definition with {@link needsPlaygroundProxy}.
|
|
345
355
|
*/
|
|
346
|
-
export const
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
}
|
|
356
|
-
if (
|
|
357
|
-
config.graphql.enabled &&
|
|
358
|
-
config.graphql.playground.enabled &&
|
|
359
|
-
config.graphql.playground.proxy === true
|
|
360
|
-
) {
|
|
361
|
-
kinds.push("graphql");
|
|
362
|
-
}
|
|
363
|
-
return kinds;
|
|
364
|
-
};
|
|
356
|
+
export const builtinProxyReferences = (
|
|
357
|
+
config: ResolvedConfig
|
|
358
|
+
): BlumeReferenceSource[] =>
|
|
359
|
+
blumeReferences(config).filter(
|
|
360
|
+
(ref) =>
|
|
361
|
+
ref.kind !== "asyncapi" &&
|
|
362
|
+
ref.display.playground.enabled &&
|
|
363
|
+
ref.display.playground.proxy === true
|
|
364
|
+
);
|
|
365
365
|
|
|
366
366
|
/**
|
|
367
367
|
* Whether the built-in playground CORS proxy endpoint (`/_api-proxy`) must be
|
|
368
|
-
* generated: some
|
|
368
|
+
* generated: some Blume-rendered reference's playground opted into it with
|
|
369
369
|
* `proxy: true`. Shared by the server feature gate and the generator so the
|
|
370
370
|
* two can never disagree.
|
|
371
371
|
*/
|
|
372
372
|
export const needsPlaygroundProxy = (config: ResolvedConfig): boolean =>
|
|
373
|
-
|
|
373
|
+
builtinProxyReferences(config).length > 0;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import type { Nodes } from "mdast";
|
|
1
|
+
import type { Nodes, Root } from "mdast";
|
|
2
2
|
import { fromMarkdown } from "mdast-util-from-markdown";
|
|
3
3
|
import { toString as mdastToString } from "mdast-util-to-string";
|
|
4
4
|
import stringWidth from "string-width";
|
|
5
5
|
|
|
6
6
|
import { apiNamePhrase } from "../core/api-name.ts";
|
|
7
|
+
import { unsafeLinkSpans } from "../core/safe-links.ts";
|
|
7
8
|
import { columnsPrefix } from "../core/text-width.ts";
|
|
8
9
|
import type { GraphqlMember } from "./graphql.ts";
|
|
9
10
|
import { isGraphqlOperationKind } from "./graphql.ts";
|
|
10
11
|
import type { ApiOperationRef, ApiSpecData } from "./model.ts";
|
|
11
12
|
import type { ReferenceSource } from "./references.ts";
|
|
13
|
+
import { asSentence } from "./sentence.ts";
|
|
12
14
|
import { operationSignature } from "./signature.ts";
|
|
13
15
|
|
|
14
16
|
/**
|
|
@@ -60,7 +62,7 @@ const escapeProse = (text: string): string =>
|
|
|
60
62
|
* whose braces genuinely need escaping; fence-or-backtick is told apart from
|
|
61
63
|
* indentation by the construct's first character.
|
|
62
64
|
*/
|
|
63
|
-
const codeSpans = (text: string): [number, number][] => {
|
|
65
|
+
const codeSpans = (text: string, tree: Root): [number, number][] => {
|
|
64
66
|
const spans: [number, number][] = [];
|
|
65
67
|
const collect = (node: Nodes): void => {
|
|
66
68
|
if (node.type === "inlineCode" || node.type === "code") {
|
|
@@ -84,18 +86,33 @@ const codeSpans = (text: string): [number, number][] => {
|
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
88
|
};
|
|
87
|
-
collect(
|
|
89
|
+
collect(tree);
|
|
88
90
|
return spans;
|
|
89
91
|
};
|
|
90
92
|
|
|
91
|
-
/**
|
|
93
|
+
/**
|
|
94
|
+
* Escape MDX-special syntax in prose while leaving code verbatim. A spec is
|
|
95
|
+
* someone else's content, so a link whose destination isn't a web, mail, or
|
|
96
|
+
* relative address (`javascript:`, `data:`) is reduced to its label rather
|
|
97
|
+
* than rendered clickable on the docs site (see `core/safe-links.ts`).
|
|
98
|
+
*/
|
|
92
99
|
const mdxSafe = (text: string): string => {
|
|
100
|
+
const tree = fromMarkdown(text);
|
|
101
|
+
const unsafe = unsafeLinkSpans(tree);
|
|
102
|
+
const insideUnsafe = (offset: number): boolean =>
|
|
103
|
+
unsafe.some((span) => offset >= span.start && offset < span.end);
|
|
104
|
+
const segments = [
|
|
105
|
+
...codeSpans(text, tree)
|
|
106
|
+
.filter(([start]) => !insideUnsafe(start))
|
|
107
|
+
.map(([start, end]) => ({ end, start, text: text.slice(start, end) })),
|
|
108
|
+
...unsafe,
|
|
109
|
+
].toSorted((a, b) => a.start - b.start);
|
|
93
110
|
let out = "";
|
|
94
111
|
let cursor = 0;
|
|
95
|
-
for (const
|
|
96
|
-
out += escapeProse(text.slice(cursor, start));
|
|
97
|
-
out += text
|
|
98
|
-
cursor = end;
|
|
112
|
+
for (const segment of segments) {
|
|
113
|
+
out += escapeProse(text.slice(cursor, segment.start));
|
|
114
|
+
out += segment.text;
|
|
115
|
+
cursor = segment.end;
|
|
99
116
|
}
|
|
100
117
|
return out + escapeProse(text.slice(cursor));
|
|
101
118
|
};
|
|
@@ -208,11 +225,16 @@ const operationDescription = (
|
|
|
208
225
|
subject = `${operation.method.toUpperCase()} ${operation.path} endpoint`;
|
|
209
226
|
}
|
|
210
227
|
const suffix = `Reference for the ${subject} in the ${apiPhrase(spec)}.`;
|
|
228
|
+
// Room for the joining space and the period `asSentence` may add, so a
|
|
229
|
+
// title-like summary ("Get a flag") ends before the suffix begins.
|
|
211
230
|
const prose = clip(
|
|
212
231
|
plainProse(operation.description || operation.summary),
|
|
213
|
-
META_DESCRIPTION_MAX - stringWidth(suffix) -
|
|
232
|
+
META_DESCRIPTION_MAX - stringWidth(suffix) - 2
|
|
233
|
+
);
|
|
234
|
+
return clip(
|
|
235
|
+
[asSentence(prose), suffix].filter(Boolean).join(" "),
|
|
236
|
+
META_DESCRIPTION_MAX
|
|
214
237
|
);
|
|
215
|
-
return clip([prose, suffix].filter(Boolean).join(" "), META_DESCRIPTION_MAX);
|
|
216
238
|
};
|
|
217
239
|
|
|
218
240
|
/** Prepend a markdown description (if any) above a component invocation. */
|
package/src/openapi/scalar.ts
CHANGED
|
@@ -10,11 +10,10 @@ import { resolveReferences } from "./references.ts";
|
|
|
10
10
|
import type { ReferenceSource } from "./references.ts";
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
* The
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* does not pass through here.
|
|
13
|
+
* The `scalar()` adapter's pages. Each source becomes one self-contained
|
|
14
|
+
* `@scalar/astro` page loaded client-side from Scalar's CDN. Blume's own
|
|
15
|
+
* renderer (`openapi()`, `asyncapi()`, `graphql()`) lives in `source.ts` /
|
|
16
|
+
* the `components/openapi` set and does not pass through here.
|
|
18
17
|
*/
|
|
19
18
|
|
|
20
19
|
/** A generated Scalar reference page, ready to write under `src/pages`. */
|
|
@@ -88,7 +87,7 @@ const acceptScalarReference = (
|
|
|
88
87
|
contentRoutes: ReadonlySet<string>,
|
|
89
88
|
warnings: string[]
|
|
90
89
|
): ReferenceSource | null => {
|
|
91
|
-
if (ref.
|
|
90
|
+
if (ref.kind !== "scalar") {
|
|
92
91
|
return null;
|
|
93
92
|
}
|
|
94
93
|
if (seen.has(ref.route)) {
|
|
@@ -108,8 +107,8 @@ const acceptScalarReference = (
|
|
|
108
107
|
};
|
|
109
108
|
|
|
110
109
|
/**
|
|
111
|
-
* Build the Scalar reference page(s) for the project. Only
|
|
112
|
-
* references are emitted here (Blume-rendered
|
|
110
|
+
* Build the Scalar reference page(s) for the project. Only `scalar()`
|
|
111
|
+
* references are emitted here (Blume-rendered kinds are staged content). Reads
|
|
113
112
|
* local specs, maps the theme, and skips routes that collide with a content page
|
|
114
113
|
* or another source. Returns the files to write under `src/pages` plus warnings.
|
|
115
114
|
*/
|
|
@@ -144,15 +143,18 @@ export const buildReferenceFiles = async (options: {
|
|
|
144
143
|
warnings.push(spec.warning);
|
|
145
144
|
}
|
|
146
145
|
const pagePath = referencePagePath(ref.route);
|
|
146
|
+
// `theme` is the one option Blume maps (a named theme replaces the
|
|
147
|
+
// accent/radius layering); every other `scalar()` option is forwarded
|
|
148
|
+
// verbatim and wins outright — a full escape hatch over Blume's derived
|
|
149
|
+
// spec/theme config (localization, agent, hideTestRequestButton,
|
|
150
|
+
// orderSchemaPropertiesBy, customCss, and the rest).
|
|
151
|
+
const { theme, ...passthrough } = ref.scalar ?? {};
|
|
147
152
|
files.push({
|
|
148
153
|
content: scalarReferenceTemplate({
|
|
149
154
|
configuration: {
|
|
150
155
|
...spec.config,
|
|
151
|
-
...themeConfiguration(config,
|
|
152
|
-
|
|
153
|
-
// over Blume's derived spec/theme config (localization, agent,
|
|
154
|
-
// hideTestRequestButton, orderSchemaPropertiesBy, and the rest).
|
|
155
|
-
...ref.scalar,
|
|
156
|
+
...themeConfiguration(config, theme),
|
|
157
|
+
...passthrough,
|
|
156
158
|
},
|
|
157
159
|
noindex: ref.noindex,
|
|
158
160
|
route: ref.route,
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A sentence's closing punctuation, allowing trailing closing quotes or
|
|
3
|
+
* brackets (`…done.")`) and the CJK full-width marks.
|
|
4
|
+
*/
|
|
5
|
+
const TERMINAL_PUNCTUATION = /[.!?…。!?]["'”’)\]]*$/u;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Close a fragment of spec prose as a sentence. OpenAPI `summary` values are
|
|
9
|
+
* usually title-like ("Get a flag", no period), so prose that runs straight
|
|
10
|
+
* into the next generated sentence ("Get a flag Reference for …") needs one.
|
|
11
|
+
* Empty text stays empty.
|
|
12
|
+
*/
|
|
13
|
+
export const asSentence = (text: string): string =>
|
|
14
|
+
text === "" || TERMINAL_PUNCTUATION.test(text) ? text : `${text}.`;
|