blume 1.7.2 → 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 +227 -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-xhtpx3ff.js → chunk-1w8dp3qb.js} +17 -16
- package/dist/cli/{chunk-xhtpx3ff.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-9he6crym.js → chunk-6k8vp3ta.js} +25 -13
- package/dist/cli/{chunk-9he6crym.js.map → chunk-6k8vp3ta.js.map} +4 -4
- package/dist/cli/{chunk-mt76t7dj.js → chunk-79njf86q.js} +133 -54
- package/dist/cli/chunk-79njf86q.js.map +11 -0
- package/dist/cli/{chunk-3w7b2vcx.js → chunk-7ez8ny0t.js} +2 -2
- package/dist/cli/{chunk-688e0dde.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-hs3gbh8p.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-9bkjd11x.js → chunk-bw22s759.js} +15 -5
- package/dist/cli/{chunk-9bkjd11x.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-t3tj0dgr.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-exeeb35e.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-12dxjqk7.js → chunk-fh5hj5jt.js} +44 -21
- package/dist/cli/chunk-fh5hj5jt.js.map +10 -0
- package/dist/cli/{chunk-8cd8tj54.js → chunk-j8mw0za6.js} +86 -57
- package/dist/cli/chunk-j8mw0za6.js.map +35 -0
- package/dist/cli/chunk-jts8mvcz.js +106 -0
- package/dist/cli/{chunk-2mzebbbz.js.map → chunk-jts8mvcz.js.map} +6 -4
- package/dist/cli/{chunk-ejjx8znq.js → chunk-mnqj32sj.js} +505 -536
- package/dist/cli/chunk-mnqj32sj.js.map +12 -0
- package/dist/cli/{chunk-196vjxp9.js → chunk-mwt1k8n7.js} +100 -372
- 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-n9sra6sy.js → chunk-pat2zzwc.js} +10 -14
- package/dist/cli/{chunk-n9sra6sy.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-cvky9gb2.js → chunk-sqn5t4q0.js} +81 -87
- package/dist/cli/chunk-sqn5t4q0.js.map +10 -0
- package/dist/cli/{chunk-eevwt1sc.js → chunk-tzne8qfq.js} +15 -15
- package/dist/cli/{chunk-eevwt1sc.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-5n7t497w.js → chunk-z1f5arsg.js} +247 -755
- package/dist/cli/chunk-z1f5arsg.js.map +36 -0
- package/dist/cli/{chunk-hdm2dkd2.js → chunk-zg2gtj10.js} +1086 -2596
- package/dist/cli/chunk-zg2gtj10.js.map +35 -0
- package/dist/cli/{chunk-ppfvdcd4.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 +209 -505
- 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 +28 -11
- 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 +2291 -441
- 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 +20 -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 +176 -61
- package/docs/configuration/customization.mdx +15 -9
- package/docs/configuration/index.mdx +52 -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 +37 -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 +12 -7
- package/docs/content/sources.mdx +145 -50
- package/docs/content/syntax.mdx +26 -12
- package/docs/content/versioning.mdx +3 -3
- package/docs/discoverability/agent-discovery.mdx +91 -10
- package/docs/discoverability/index.mdx +5 -5
- 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 +26 -22
- package/src/ai/ai-catalog.ts +259 -0
- 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 +19 -6
- package/src/ai/llms.ts +26 -15
- package/src/ai/markdown.ts +35 -5
- package/src/ai/mcp/data.ts +9 -5
- package/src/ai/mcp/discovery.ts +1 -1
- 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 +114 -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 -314
- 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 +75 -3
- 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 -43
- package/src/components/layout/Search.astro +30 -6
- package/src/components/layout/WebMcp.astro +1 -1
- package/src/components/layout/analytics-client.ts +101 -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 +212 -543
- package/src/core/config.ts +130 -41
- package/src/core/custom-pages.ts +105 -0
- package/src/core/data.ts +32 -11
- 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 +137 -19
- 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 +531 -721
- 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 +20 -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 +67 -28
- package/src/deploy/cloudflare-negotiation.ts +179 -100
- package/src/deploy/function-bundle.ts +18 -3
- package/src/deploy/headers.ts +129 -22
- 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 +27 -4
- 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 +33 -7
- 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 +47 -2
- package/src/translate/report.ts +40 -7
- package/src/upgrade/upgrade.ts +499 -0
- package/dist/cli/chunk-12dxjqk7.js.map +0 -10
- package/dist/cli/chunk-196vjxp9.js.map +0 -13
- package/dist/cli/chunk-2mzebbbz.js +0 -69
- package/dist/cli/chunk-2z47ypj8.js.map +0 -11
- package/dist/cli/chunk-30e87n55.js +0 -108
- package/dist/cli/chunk-30e87n55.js.map +0 -10
- package/dist/cli/chunk-450a7rcr.js +0 -185
- package/dist/cli/chunk-450a7rcr.js.map +0 -11
- package/dist/cli/chunk-5n7t497w.js.map +0 -40
- package/dist/cli/chunk-61j18dwk.js +0 -5342
- package/dist/cli/chunk-61j18dwk.js.map +0 -58
- package/dist/cli/chunk-88by27n5.js +0 -17
- package/dist/cli/chunk-88by27n5.js.map +0 -10
- package/dist/cli/chunk-8cd8tj54.js.map +0 -34
- package/dist/cli/chunk-aztttvb3.js +0 -381
- package/dist/cli/chunk-aztttvb3.js.map +0 -12
- package/dist/cli/chunk-cvky9gb2.js.map +0 -11
- package/dist/cli/chunk-ejjx8znq.js.map +0 -15
- package/dist/cli/chunk-fmceyezb.js +0 -1007
- package/dist/cli/chunk-fmceyezb.js.map +0 -13
- package/dist/cli/chunk-hdm2dkd2.js.map +0 -48
- package/dist/cli/chunk-hs3gbh8p.js.map +0 -10
- package/dist/cli/chunk-jbj4qhfw.js +0 -30
- package/dist/cli/chunk-jbj4qhfw.js.map +0 -10
- package/dist/cli/chunk-mqb2ka8m.js +0 -68
- package/dist/cli/chunk-mqb2ka8m.js.map +0 -10
- package/dist/cli/chunk-mt76t7dj.js.map +0 -11
- package/dist/cli/chunk-q4rae3bg.js +0 -60
- package/dist/cli/chunk-q4rae3bg.js.map +0 -10
- package/dist/cli/chunk-ra1v2nc2.js +0 -35
- package/dist/cli/chunk-ra1v2nc2.js.map +0 -10
- package/dist/cli/chunk-t3tj0dgr.js.map +0 -15
- package/dist/cli/chunk-tqa1s0k8.js +0 -69
- package/dist/cli/chunk-tqa1s0k8.js.map +0 -11
- package/dist/cli/chunk-vh9w1sgp.js +0 -73
- package/dist/cli/chunk-vh9w1sgp.js.map +0 -10
- package/dist/cli/chunk-vkrsvbr5.js +0 -107
- package/dist/cli/chunk-vkrsvbr5.js.map +0 -11
- package/dist/cli/chunk-vrfp10qk.js +0 -81
- package/dist/cli/chunk-vrfp10qk.js.map +0 -10
- package/dist/cli/chunk-wjt80jps.js +0 -1049
- package/dist/cli/chunk-wjt80jps.js.map +0 -24
- 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-3w7b2vcx.js.map → chunk-7ez8ny0t.js.map} +0 -0
- /package/dist/cli/{chunk-688e0dde.js.map → chunk-88cpgt6h.js.map} +0 -0
- /package/dist/cli/{chunk-exeeb35e.js.map → chunk-f7t03s3g.js.map} +0 -0
- /package/dist/cli/{chunk-ppfvdcd4.js.map → chunk-zxccj738.js.map} +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "../core/schema.ts";
|
|
2
|
+
import type { VercelHeader } from "./headers.ts";
|
|
3
|
+
/**
|
|
4
|
+
* Platform redirect files for a static build. Astro already emits redirect HTML
|
|
5
|
+
* (meta-refresh) pages for static output, but that's a soft client redirect.
|
|
6
|
+
* These give the host a real HTTP 3xx: Netlify/Cloudflare read `_redirects`,
|
|
7
|
+
* Vercel reads `vercel.json`, and `blume-redirects.json` is a structured
|
|
8
|
+
* manifest for anything else (Apache/nginx rules, an edge worker).
|
|
9
|
+
*/
|
|
10
|
+
type Redirect = ResolvedConfig["redirects"][number];
|
|
11
|
+
/**
|
|
12
|
+
* Base a redirect for Astro's `redirects` config, where the two sides are not
|
|
13
|
+
* symmetric:
|
|
14
|
+
*
|
|
15
|
+
* - `from` gains only `basePath`. Astro builds the match pattern with
|
|
16
|
+
* `deployment.base` already applied (`getPattern(segments, config.base)`), so
|
|
17
|
+
* adding it here would serve the redirect at `{base}{base}/from`.
|
|
18
|
+
* - `to` gains the full `{deployment.base}{basePath}` stack. Astro resolves a
|
|
19
|
+
* destination that matches a known route by regenerating it from that route's
|
|
20
|
+
* segments, which carry no base — and passes an unmatched destination through
|
|
21
|
+
* verbatim. Neither path prepends `base`, so a root-relative `to` escapes the
|
|
22
|
+
* base entirely (withastro/astro#7774, still the behavior in Astro 7).
|
|
23
|
+
*
|
|
24
|
+
* Both sides are authored as if mounted at root; external `to` URLs pass
|
|
25
|
+
* through. Idempotent, so a hand-written base isn't doubled.
|
|
26
|
+
*/
|
|
27
|
+
export declare const applyBaseToAstroRedirects: (redirects: Redirect[], basePath: string, deployBase: string) => Redirect[];
|
|
28
|
+
/**
|
|
29
|
+
* Base a redirect for the host platform files below. Unlike Astro's config,
|
|
30
|
+
* these are matched against the real served URL, so both sides carry the full
|
|
31
|
+
* `{deployment.base}{basePath}` stack.
|
|
32
|
+
*/
|
|
33
|
+
export declare const applyBaseToPlatformRedirects: (redirects: Redirect[], basePath: string, deployBase: string) => Redirect[];
|
|
34
|
+
/**
|
|
35
|
+
* The configured redirects as the host platform matches them, via
|
|
36
|
+
* {@link applyBaseToPlatformRedirects}. The one basing every consumer must
|
|
37
|
+
* share: the emitted redirect files and the Cloudflare worker-first redirect
|
|
38
|
+
* exemptions both compare these paths against real served URLs.
|
|
39
|
+
*/
|
|
40
|
+
export declare const platformRedirects: (config: ResolvedConfig) => Redirect[];
|
|
41
|
+
/** `_redirects` text (Netlify + Cloudflare Pages): `from to status` per line. */
|
|
42
|
+
export declare const buildNetlifyRedirects: (redirects: Redirect[]) => string;
|
|
43
|
+
/**
|
|
44
|
+
* `vercel.json` contents with a `redirects` array, and a `headers` array when
|
|
45
|
+
* header rules are given (see `buildVercelHeaders`). Uses `statusCode` (Vercel's
|
|
46
|
+
* alternative to the boolean `permanent`) so the configured code ships exactly:
|
|
47
|
+
* `permanent` would silently coerce a 301 to 308 and a 302 to 307, diverging
|
|
48
|
+
* from the `_redirects` file, which preserves exact codes.
|
|
49
|
+
*/
|
|
50
|
+
export declare const buildVercelConfig: (redirects: Redirect[], headers?: readonly VercelHeader[]) => string;
|
|
51
|
+
/** Structured manifest for hosts that need manual wiring. */
|
|
52
|
+
export declare const buildRedirectManifest: (redirects: Redirect[]) => string;
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Build a robots.txt that allows all crawlers, declares any configured
|
|
4
|
+
* `Content-Signal` usage preferences, and points to the sitemap when one is
|
|
5
|
+
* available (a `site` is set and the sitemap is enabled). Returns null when
|
|
6
|
+
* robots generation is disabled.
|
|
7
|
+
*/
|
|
8
|
+
export declare const buildRobots: (project: BlumeProject) => string | null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
/** A single feed entry derived from a content page. */
|
|
3
|
+
export interface RssItem {
|
|
4
|
+
title: string;
|
|
5
|
+
/** Absolute item URL. */
|
|
6
|
+
link: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
/** Publish date, when the page declares one. */
|
|
9
|
+
date?: Date;
|
|
10
|
+
}
|
|
11
|
+
/** A resolved RSS feed for one content type. */
|
|
12
|
+
export interface RssFeed {
|
|
13
|
+
/** Content type the feed covers, e.g. `blog`. */
|
|
14
|
+
type: string;
|
|
15
|
+
/** Feed URL path, e.g. `/blog/rss.xml`. */
|
|
16
|
+
path: string;
|
|
17
|
+
/** Channel title, e.g. `Blume — Blog`. */
|
|
18
|
+
title: string;
|
|
19
|
+
/** Absolute site link. */
|
|
20
|
+
link: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
items: RssItem[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Build an RSS feed per configured content type that has publishable pages.
|
|
26
|
+
* Returns an empty list when RSS is disabled or no `deployment.site` is set —
|
|
27
|
+
* absolute URLs are required for a valid feed, mirroring `buildSitemap`.
|
|
28
|
+
*/
|
|
29
|
+
export declare const buildRssFeeds: (project: BlumeProject) => RssFeed[];
|
|
30
|
+
/** Serialize a resolved feed into an RSS 2.0 XML document. */
|
|
31
|
+
export declare const renderRssFeed: (feed: RssFeed) => string;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { BlumeProject } from "../core/project-graph.ts";
|
|
2
|
+
/** One emitted sitemap artifact: its dist-root filename and XML body. */
|
|
3
|
+
export interface SitemapFile {
|
|
4
|
+
name: string;
|
|
5
|
+
xml: string;
|
|
6
|
+
}
|
|
7
|
+
/** The build log line for an emitted sitemap set: one file, or an index. */
|
|
8
|
+
export declare const describeSitemapFiles: (files: readonly SitemapFile[]) => string;
|
|
9
|
+
/**
|
|
10
|
+
* Build the sitemap files from the route manifest plus the routes the manifest
|
|
11
|
+
* can't see: custom `.astro` pages (most importantly a custom landing `/`) and
|
|
12
|
+
* the generated `/changelog` index. Returns null when the sitemap is disabled
|
|
13
|
+
* or no `site` is configured (absolute URLs are required for a valid sitemap).
|
|
14
|
+
* Drafts, hidden, and `noindex` pages are excluded.
|
|
15
|
+
*
|
|
16
|
+
* Sites within the per-file URL cap get the single classic `sitemap.xml`;
|
|
17
|
+
* larger sites get `sitemap.xml` as a sitemap index over numbered
|
|
18
|
+
* `sitemap-N.xml` chunks, all served from the same directory robots.txt
|
|
19
|
+
* already points at.
|
|
20
|
+
*/
|
|
21
|
+
export declare const buildSitemapFiles: (project: BlumeProject) => SitemapFile[] | null;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `Accept: text/markdown` content negotiation for Vercel server builds.
|
|
3
|
+
*
|
|
4
|
+
* Blume prerenders every content page — even in a server build (`deployment:
|
|
5
|
+
* vercel()`) — so a page request never reaches Astro middleware: Vercel serves
|
|
6
|
+
* the prerendered HTML straight from its static layer. Request-time negotiation
|
|
7
|
+
* therefore has to live in the platform's routing config. The Vercel adapter
|
|
8
|
+
* emits a Build Output API `config.json`; these helpers splice extra routes
|
|
9
|
+
* into it so a content-page request that prefers `text/markdown` is rewritten
|
|
10
|
+
* (not redirected) to the page's prerendered `.md` mirror — the deployed
|
|
11
|
+
* counterpart of the dev-server rewrite in `astro/markdown-negotiation.ts`.
|
|
12
|
+
* The same routing config also answers a *missing* page: a request that
|
|
13
|
+
* prefers Markdown (or asks for a `.md` URL no page backs) gets the
|
|
14
|
+
* prerendered Markdown 404 body with the 404 status, instead of the HTML
|
|
15
|
+
* shell, and one that prefers JSON (or asks for a `.json` URL) gets the
|
|
16
|
+
* prerendered problem-details 404.
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* Regex for the `accept` header condition. Written to hold under both matching
|
|
20
|
+
* semantics a router may apply — full-string and substring — by anchoring the
|
|
21
|
+
* end and letting `(.*,)?` absorb any earlier list entries: it requires a
|
|
22
|
+
* `text/markdown` or `text/x-markdown` entry terminated by `;`, `,`, or the end
|
|
23
|
+
* of the header. Kept lookaround-free so it stays valid in RE2, and lowercase
|
|
24
|
+
* only — real agents send lowercase media types, and q-values are not compared
|
|
25
|
+
* (a client sending `text/markdown` at `q=0` is pathological). Browsers never
|
|
26
|
+
* send `text/markdown`, so ordinary page requests are unaffected.
|
|
27
|
+
*/
|
|
28
|
+
export declare const ACCEPT_MARKDOWN_HEADER_VALUE = "(.*,)?\\s*text/(x-)?markdown(\\s*[;,].*)?$";
|
|
29
|
+
/**
|
|
30
|
+
* The JSON counterpart, for the problem-details 404: `application/json` or
|
|
31
|
+
* `application/problem+json`. Browsers never send either on a navigation
|
|
32
|
+
* (the catch-all wildcard does not match), so ordinary page requests are
|
|
33
|
+
* unaffected.
|
|
34
|
+
*/
|
|
35
|
+
export declare const ACCEPT_JSON_HEADER_VALUE = "(.*,)?\\s*application/(problem\\+)?json(\\s*[;,].*)?$";
|
|
36
|
+
/**
|
|
37
|
+
* A Build Output API route — the subset these helpers read and write. Parsed
|
|
38
|
+
* routes keep whatever other fields they carry at runtime; only these are
|
|
39
|
+
* typed.
|
|
40
|
+
*/
|
|
41
|
+
export interface VercelRoute {
|
|
42
|
+
continue?: boolean;
|
|
43
|
+
dest?: string;
|
|
44
|
+
handle?: string;
|
|
45
|
+
has?: {
|
|
46
|
+
key?: string;
|
|
47
|
+
type: string;
|
|
48
|
+
value?: string;
|
|
49
|
+
}[];
|
|
50
|
+
headers?: Record<string, string>;
|
|
51
|
+
src?: string;
|
|
52
|
+
status?: number;
|
|
53
|
+
}
|
|
54
|
+
/** Which prerendered 404 twins the build emitted, so their routes get wired. */
|
|
55
|
+
export interface NotFoundVariants {
|
|
56
|
+
json?: boolean;
|
|
57
|
+
markdown?: boolean;
|
|
58
|
+
}
|
|
59
|
+
export interface NegotiationRoutes {
|
|
60
|
+
/**
|
|
61
|
+
* `Vary: Accept` for the plain-HTML side of every negotiated URL, so shared
|
|
62
|
+
* caches keep the two variants apart. Spliced *before* `handle:
|
|
63
|
+
* "filesystem"` with `continue`: main-phase headers accumulate and ride on
|
|
64
|
+
* whatever ultimately serves the request. Routes placed after the filesystem
|
|
65
|
+
* marker are the miss phase — they run only when no static file matches, and
|
|
66
|
+
* every Blume content page is a prerendered static file, so a header route
|
|
67
|
+
* there never fires.
|
|
68
|
+
*/
|
|
69
|
+
headerRoutes: VercelRoute[];
|
|
70
|
+
/**
|
|
71
|
+
* The negotiation itself: header-conditional rewrites to the `.md` mirror.
|
|
72
|
+
* Spliced *before* `handle: "filesystem"` so they run ahead of static-file
|
|
73
|
+
* matching; the rewritten path then resolves to the prerendered `.md` file.
|
|
74
|
+
*/
|
|
75
|
+
rewriteRoutes: VercelRoute[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Build the routes for the given content-route paths (the routes that have a
|
|
79
|
+
* raw-Markdown mirror, straight from the manifest). Paths are matched with an
|
|
80
|
+
* optional trailing slash and rewritten `/{route}` → `/{route}.md`; the home
|
|
81
|
+
* page's mirror lives at `/index.md`. When `homeTokens` is given, the home
|
|
82
|
+
* rewrite also stamps `x-markdown-tokens` — the estimated token count of the
|
|
83
|
+
* homepage mirror (Cloudflare's Markdown for Agents convention). Only the home
|
|
84
|
+
* route can carry it: the other rewrites are chunked alternations spanning
|
|
85
|
+
* many pages, and a count is per-page.
|
|
86
|
+
*/
|
|
87
|
+
export declare const buildNegotiationRoutes: (routePaths: readonly string[], homeTokens?: number) => NegotiationRoutes;
|
|
88
|
+
/**
|
|
89
|
+
* Splice the negotiation routes into a Build Output `config.json`, plus — when
|
|
90
|
+
* given — a homepage `Link` header route for agent discovery (see
|
|
91
|
+
* `ai/link-headers.ts`), applied the same way the `Vary` routes are: in the
|
|
92
|
+
* main phase before `handle: "filesystem"` with `continue`, so the header
|
|
93
|
+
* rides on the prerendered homepage response. `contentTypeOverrides` maps static-dir
|
|
94
|
+
* relative paths to media types via the Build Output `overrides` field — the
|
|
95
|
+
* platform's mechanism for extensionless static files (e.g. the Web Bot Auth
|
|
96
|
+
* signature directory). The trailing-slash redirect that collapses `/docs/`
|
|
97
|
+
* onto `/docs` is not spliced here: the generated config sets Astro's
|
|
98
|
+
* `trailingSlash: "never"`, which the adapter turns into the platform's own
|
|
99
|
+
* 308 route ahead of everything below (so a slashed Markdown request takes
|
|
100
|
+
* that hop first, then negotiates). For each 404 twin the build emitted (`notFound.markdown` for
|
|
101
|
+
* `404.md`, `notFound.json` for `404.json`), its routes go into the miss
|
|
102
|
+
* phase right before the adapter's `/404.html` fallback — and nowhere when
|
|
103
|
+
* that fallback is absent, since a `dest` with no file behind it would serve
|
|
104
|
+
* nothing. Returns the updated JSON
|
|
105
|
+
* text (tab-indented, like the adapter's own output), or `null` when there is
|
|
106
|
+
* nowhere safe to splice: an unparsable config, no `routes` array, or no
|
|
107
|
+
* `handle: "filesystem"` marker to anchor the splice.
|
|
108
|
+
*/
|
|
109
|
+
export declare const injectNegotiationRoutes: (configText: string, routePaths: readonly string[], homeLinkHeader?: string | null, contentTypeOverrides?: Record<string, string>, homeTokens?: number, notFound?: NotFoundVariants, corsPaths?: readonly string[]) => string | null;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code-fence meta. A Shiki transformer reads the tokens after the language and
|
|
3
|
+
* promotes them to attributes on the rendered `<pre>`:
|
|
4
|
+
*
|
|
5
|
+
* - a title — the first bare token (```ts blume.config.ts) or `title="..."` —
|
|
6
|
+
* becomes `data-title`; the theme's code header shows it, falling back to the
|
|
7
|
+
* language label.
|
|
8
|
+
* - the `lineNumbers` keyword (```ts file.ts lineNumbers) becomes
|
|
9
|
+
* `data-line-numbers`; the theme renders a counter-driven line-number gutter.
|
|
10
|
+
*/
|
|
11
|
+
/** The slice of Shiki's transformer `this` context Blume reads. */
|
|
12
|
+
interface CodeMetaContext {
|
|
13
|
+
options: {
|
|
14
|
+
meta?: {
|
|
15
|
+
__raw?: string;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** The `<pre>` hast node a Shiki `pre` hook receives. */
|
|
20
|
+
interface PreNode {
|
|
21
|
+
properties: Record<string, boolean | number | string | undefined>;
|
|
22
|
+
}
|
|
23
|
+
/** A Shiki-compatible transformer, typed structurally to avoid a Shiki dep. */
|
|
24
|
+
export interface CodeTitleTransformer {
|
|
25
|
+
name: string;
|
|
26
|
+
pre: (this: CodeMetaContext, node: PreNode) => void;
|
|
27
|
+
}
|
|
28
|
+
/** The title a fence's meta string promotes to `data-title`, if any. */
|
|
29
|
+
export declare const parseCodeTitle: (raw: string | undefined) => string | undefined;
|
|
30
|
+
/** Build the transformer. Runs after Shiki's built-in `data-language` hook. */
|
|
31
|
+
export declare const codeTitleTransformer: () => CodeTitleTransformer;
|
|
32
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shared fence-meta grammar: how the tokens after a code fence's language
|
|
3
|
+
* (```ts title="..." {1,3-5} lineNumbers) split, and which of them carry
|
|
4
|
+
* reserved meaning. Both the Shiki-side meta reader (`code-title.ts`) and the
|
|
5
|
+
* MDAST plugins that rewrite marked fences (`ts2js.ts`) consume this, so the
|
|
6
|
+
* two layers can't drift on token boundaries or keyword lists.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Any quoted `key="..."` attr (spaces allowed inside the quotes). The body
|
|
10
|
+
* excludes only the delimiting quote, so `title="foo's file.ts"` (an
|
|
11
|
+
* apostrophe inside double quotes) still matches. The left boundary stops
|
|
12
|
+
* `subtitle="..."` (or any `*title=` attr) from reading as a title.
|
|
13
|
+
*/
|
|
14
|
+
export declare const QUOTED_ATTR: RegExp;
|
|
15
|
+
/** Split a raw fence meta string into its tokens. */
|
|
16
|
+
export declare const metaTokens: (meta: string | null | undefined) => string[];
|
|
17
|
+
/**
|
|
18
|
+
* Bare keywords with reserved meaning after the language; never promoted to
|
|
19
|
+
* a block title.
|
|
20
|
+
*/
|
|
21
|
+
export declare const RESERVED_META_KEYWORDS: ReadonlySet<string>;
|
|
22
|
+
/** A Shiki `{1,3-5}` line-range token. */
|
|
23
|
+
export declare const isLineRange: (token: string) => boolean;
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
* The light/dark Shiki themes Blume highlights code with. Every Shiki surface —
|
|
3
3
|
* fenced code (the generated Astro `shikiConfig.themes`), inline `` `code`{:lang} ``,
|
|
4
4
|
* out-of-pipeline `highlightCode`, and `<Diff>` — resolves to the same pair so a
|
|
5
|
-
* project's `markdown.
|
|
5
|
+
* project's `markdown.code.theme` shifts them all in lockstep. This is the
|
|
6
6
|
* single home for the github fallback used when nothing is configured.
|
|
7
7
|
*/
|
|
8
8
|
import type { ThemeRegistrationAny } from "shiki";
|
|
9
9
|
/** A bundled Shiki theme name or an inline custom Shiki theme definition. */
|
|
10
10
|
export type CodeTheme = string | ThemeRegistrationAny;
|
|
11
11
|
/**
|
|
12
|
-
* A light/dark Shiki theme pair (`markdown.
|
|
12
|
+
* A light/dark Shiki theme pair (`markdown.code.theme`). A `type` (not an
|
|
13
13
|
* `interface`) so it keeps the implicit index signature Shiki's `themes`
|
|
14
14
|
* parameter (`Partial<Record<string, …>>`) expects.
|
|
15
15
|
*/
|
|
@@ -17,5 +17,5 @@ export type CodeThemes = {
|
|
|
17
17
|
dark: CodeTheme;
|
|
18
18
|
light: CodeTheme;
|
|
19
19
|
};
|
|
20
|
-
/** The default pair, used when `markdown.
|
|
20
|
+
/** The default pair, used when `markdown.code.theme` is unset. */
|
|
21
21
|
export declare const DEFAULT_CODE_THEMES: CodeThemes;
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { ApiOperationRef, ApiTagRef } from "./model.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Blume's own AsyncAPI model — the second front-end of the API reference
|
|
4
|
+
* pipeline. Specs are normalized to AsyncAPI 3.x at parse time (see
|
|
5
|
+
* `parseAsyncApiSpec` in `parse.ts`), so this module only handles one shape:
|
|
6
|
+
* top-level `operations` with `action: send | receive` pointing at `channels`.
|
|
7
|
+
* Internal `$ref`s are deliberately left in place, mirroring `model.ts` — the
|
|
8
|
+
* components resolve them lazily, which keeps circular schemas serializable
|
|
9
|
+
* and lets type labels keep their `#/components/schemas/<name>` names.
|
|
10
|
+
* Browser-safe: no Node imports (the components import from here).
|
|
11
|
+
*/
|
|
12
|
+
/** The two AsyncAPI 3.x operation actions, from the application's perspective. */
|
|
13
|
+
export declare const ASYNCAPI_ACTIONS: readonly ["send", "receive"];
|
|
14
|
+
export type AsyncApiAction = (typeof ASYNCAPI_ACTIONS)[number];
|
|
15
|
+
/**
|
|
16
|
+
* A value carried by a parsed spec document: JSON-compatible data whose exact
|
|
17
|
+
* position in the document is not modeled (extension fields, bindings,
|
|
18
|
+
* protocol-specific extras). `undefined` covers absent optional members.
|
|
19
|
+
*/
|
|
20
|
+
export type AsyncApiSpecValue = string | number | boolean | null | undefined | AsyncApiSpecValue[] | {
|
|
21
|
+
[key: string]: AsyncApiSpecValue;
|
|
22
|
+
};
|
|
23
|
+
/** A permissive view of an AsyncAPI reference object. */
|
|
24
|
+
export interface AsyncApiRefLike {
|
|
25
|
+
$ref?: string;
|
|
26
|
+
[key: string]: AsyncApiSpecValue;
|
|
27
|
+
}
|
|
28
|
+
/** A permissive view of an AsyncAPI 3.x channel — only the fields we render. */
|
|
29
|
+
export interface AsyncApiChannelObject {
|
|
30
|
+
address?: string | null;
|
|
31
|
+
title?: string;
|
|
32
|
+
summary?: string;
|
|
33
|
+
description?: string;
|
|
34
|
+
messages?: Record<string, AsyncApiRefLike>;
|
|
35
|
+
parameters?: Record<string, AsyncApiRefLike>;
|
|
36
|
+
servers?: AsyncApiRefLike[];
|
|
37
|
+
bindings?: Record<string, Record<string, AsyncApiSpecValue>>;
|
|
38
|
+
[key: string]: AsyncApiSpecValue;
|
|
39
|
+
}
|
|
40
|
+
/** A permissive view of an AsyncAPI 3.x operation — only the fields we render. */
|
|
41
|
+
export interface AsyncApiOperationObject {
|
|
42
|
+
action?: string;
|
|
43
|
+
channel?: AsyncApiRefLike;
|
|
44
|
+
title?: string;
|
|
45
|
+
summary?: string;
|
|
46
|
+
description?: string;
|
|
47
|
+
deprecated?: boolean;
|
|
48
|
+
tags?: {
|
|
49
|
+
name?: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
}[];
|
|
52
|
+
security?: AsyncApiRefLike[];
|
|
53
|
+
messages?: AsyncApiRefLike[];
|
|
54
|
+
bindings?: Record<string, Record<string, AsyncApiSpecValue>>;
|
|
55
|
+
[key: string]: AsyncApiSpecValue;
|
|
56
|
+
}
|
|
57
|
+
/** A permissive view of an AsyncAPI 3.x server object. */
|
|
58
|
+
export interface AsyncApiServerObject {
|
|
59
|
+
host?: string;
|
|
60
|
+
protocol?: string;
|
|
61
|
+
pathname?: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
security?: AsyncApiRefLike[];
|
|
64
|
+
[key: string]: AsyncApiSpecValue;
|
|
65
|
+
}
|
|
66
|
+
/** A normalized AsyncAPI 3.x document, internal `$ref`s intact. */
|
|
67
|
+
export interface AsyncApiDocument {
|
|
68
|
+
asyncapi?: string;
|
|
69
|
+
info?: {
|
|
70
|
+
title?: string;
|
|
71
|
+
version?: string;
|
|
72
|
+
description?: string;
|
|
73
|
+
tags?: {
|
|
74
|
+
name?: string;
|
|
75
|
+
description?: string;
|
|
76
|
+
}[];
|
|
77
|
+
[key: string]: AsyncApiSpecValue;
|
|
78
|
+
};
|
|
79
|
+
defaultContentType?: string;
|
|
80
|
+
servers?: Record<string, AsyncApiServerObject>;
|
|
81
|
+
channels?: Record<string, AsyncApiChannelObject>;
|
|
82
|
+
operations?: Record<string, AsyncApiOperationObject>;
|
|
83
|
+
components?: Record<string, Record<string, AsyncApiSpecValue>>;
|
|
84
|
+
[key: string]: AsyncApiSpecValue;
|
|
85
|
+
}
|
|
86
|
+
/** The channel id an operation's `channel.$ref` points at, if resolvable. */
|
|
87
|
+
export declare const channelIdOf: (channel?: AsyncApiRefLike) => string | undefined;
|
|
88
|
+
/**
|
|
89
|
+
* A channel's display address. AsyncAPI 3.x allows `address: null` (unknown at
|
|
90
|
+
* design time) — fall back to the channel id so the operation still shows
|
|
91
|
+
* where it lives.
|
|
92
|
+
*/
|
|
93
|
+
export declare const channelAddress: (channelId: string, channel?: AsyncApiChannelObject) => string;
|
|
94
|
+
/**
|
|
95
|
+
* Merge `traits` into their operation/message objects, in declaration order,
|
|
96
|
+
* with the object's own properties taking precedence (the spec's merge rule;
|
|
97
|
+
* applied shallowly, which covers the fields traits carry in practice —
|
|
98
|
+
* bindings, security, tags, headers). Runs once at parse time so the
|
|
99
|
+
* serialized document and every downstream consumer are trait-free; the
|
|
100
|
+
* `traits` key itself is dropped. Unresolvable trait `$ref`s are skipped.
|
|
101
|
+
*/
|
|
102
|
+
export declare const applyAsyncApiTraits: (document: AsyncApiDocument) => AsyncApiDocument;
|
|
103
|
+
/**
|
|
104
|
+
* The parse-time normalization pass: component channel/operation refs inlined,
|
|
105
|
+
* then traits merged. The serialized document and every downstream consumer
|
|
106
|
+
* see plain channel/operation objects, trait-free.
|
|
107
|
+
*/
|
|
108
|
+
export declare const normalizeAsyncApiDocument: (document: AsyncApiDocument) => AsyncApiDocument;
|
|
109
|
+
/** The route-mapped operations, ordered tags, and skip warnings of one document. */
|
|
110
|
+
export interface AsyncApiOperationCatalog {
|
|
111
|
+
operations: ApiOperationRef[];
|
|
112
|
+
tags: ApiTagRef[];
|
|
113
|
+
warnings: string[];
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Flatten a normalized AsyncAPI 3.x document into a route-mapped operation
|
|
117
|
+
* list and its ordered tags — the AsyncAPI counterpart of `extractOperations`
|
|
118
|
+
* in `model.ts`, built on the same `operationCollector`. Operations group by
|
|
119
|
+
* their first tag; untagged operations fall back to their channel address, so
|
|
120
|
+
* a spec with no tags still gets one sidebar group per channel. Keys come from
|
|
121
|
+
* the operation id (the `operations` map key), which the official 2.x
|
|
122
|
+
* converter synthesizes deterministically (`<channel>.publish` /
|
|
123
|
+
* `<channel>.subscribe`) — so a 2.x spec and its converter-upgraded 3.x form
|
|
124
|
+
* yield identical URLs. An id that slugifies to nothing falls back to
|
|
125
|
+
* action + address, the same scheme `operationKey` uses for method + path.
|
|
126
|
+
*/
|
|
127
|
+
export declare const extractAsyncApiOperations: (document: AsyncApiDocument, baseRoute: string) => AsyncApiOperationCatalog;
|
|
128
|
+
/** Resolve the operation object for a ref out of its (AsyncAPI) document. */
|
|
129
|
+
export declare const asyncApiOperationObject: (document: AsyncApiDocument, ref: ApiOperationRef) => AsyncApiOperationObject | undefined;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GraphqlDocument } from "./graphql.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Build the document from schema text: an introspection JSON result (the raw
|
|
4
|
+
* `{ __schema }` shape or a `{ data: { __schema } }` response envelope) or
|
|
5
|
+
* SDL. Anything else throws — JSON that isn't an introspection result names
|
|
6
|
+
* that problem directly instead of earning SDL syntax errors for a `{`.
|
|
7
|
+
*/
|
|
8
|
+
export declare const buildGraphqlDocument: (text: string) => GraphqlDocument;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import type { ApiOperationRef, ExtractedOperations } from "./model.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Blume's own GraphQL model — the third front-end of the API reference
|
|
4
|
+
* pipeline. Schemas are lowered to this JSON-serializable document at parse
|
|
5
|
+
* time (see `buildGraphqlDocument` in `graphql-build.ts`, kept separate so
|
|
6
|
+
* `graphql`-js stays out of this module's import graph), so the components
|
|
7
|
+
* render entirely from plain data, mirroring how `model.ts` keeps OpenAPI
|
|
8
|
+
* documents serializable. Browser-safe: no Node imports (the components
|
|
9
|
+
* import from here).
|
|
10
|
+
*/
|
|
11
|
+
/** The three GraphQL operation kinds, each a sidebar group of root fields. */
|
|
12
|
+
export declare const GRAPHQL_OPERATION_KINDS: readonly ["query", "mutation", "subscription"];
|
|
13
|
+
export type GraphqlOperationKind = (typeof GRAPHQL_OPERATION_KINDS)[number];
|
|
14
|
+
/** The named-type kinds that get reference pages, in sidebar-group order. */
|
|
15
|
+
export declare const GRAPHQL_TYPE_KINDS: readonly ["object", "input", "enum", "interface", "union", "scalar"];
|
|
16
|
+
export type GraphqlTypeKind = (typeof GRAPHQL_TYPE_KINDS)[number];
|
|
17
|
+
/** Everything a GraphQL operation ref's `method` can carry. */
|
|
18
|
+
export type GraphqlMember = GraphqlOperationKind | GraphqlTypeKind;
|
|
19
|
+
/** Sidebar/overview group label for each member kind. */
|
|
20
|
+
export declare const GRAPHQL_GROUP_LABELS: {
|
|
21
|
+
enum: string;
|
|
22
|
+
input: string;
|
|
23
|
+
interface: string;
|
|
24
|
+
mutation: string;
|
|
25
|
+
object: string;
|
|
26
|
+
query: string;
|
|
27
|
+
scalar: string;
|
|
28
|
+
subscription: string;
|
|
29
|
+
union: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* A type expression as it appears in the schema: the rendered display form
|
|
33
|
+
* (`[String!]!`) plus the named type at its core (`String`), so components can
|
|
34
|
+
* print the exact wrapper shape and still link to the named type's page.
|
|
35
|
+
*/
|
|
36
|
+
export interface GraphqlTypeRef {
|
|
37
|
+
display: string;
|
|
38
|
+
name: string;
|
|
39
|
+
}
|
|
40
|
+
/** An argument or input-object field. */
|
|
41
|
+
export interface GraphqlInputValue {
|
|
42
|
+
name: string;
|
|
43
|
+
description: string;
|
|
44
|
+
type: GraphqlTypeRef;
|
|
45
|
+
/** Default value printed as a GraphQL literal (`10`, `"asc"`, `[1, 2]`). */
|
|
46
|
+
default?: string;
|
|
47
|
+
deprecationReason?: string;
|
|
48
|
+
}
|
|
49
|
+
/** An output field of an object or interface type (root fields included). */
|
|
50
|
+
export interface GraphqlField {
|
|
51
|
+
name: string;
|
|
52
|
+
description: string;
|
|
53
|
+
type: GraphqlTypeRef;
|
|
54
|
+
args: GraphqlInputValue[];
|
|
55
|
+
deprecationReason?: string;
|
|
56
|
+
}
|
|
57
|
+
/** One member of an enum type. */
|
|
58
|
+
export interface GraphqlEnumValue {
|
|
59
|
+
name: string;
|
|
60
|
+
description: string;
|
|
61
|
+
deprecationReason?: string;
|
|
62
|
+
}
|
|
63
|
+
/** One named type of the schema, flattened to the fields the reference renders. */
|
|
64
|
+
export interface GraphqlTypeDef {
|
|
65
|
+
name: string;
|
|
66
|
+
kind: GraphqlTypeKind;
|
|
67
|
+
description: string;
|
|
68
|
+
/** Output fields (object and interface types). */
|
|
69
|
+
fields?: GraphqlField[];
|
|
70
|
+
/** Input fields (input object types). */
|
|
71
|
+
inputFields?: GraphqlInputValue[];
|
|
72
|
+
/** Members (enum types). */
|
|
73
|
+
enumValues?: GraphqlEnumValue[];
|
|
74
|
+
/** Member type names (unions) or implementing object types (interfaces). */
|
|
75
|
+
possibleTypes?: string[];
|
|
76
|
+
/** Interfaces this object/interface type implements. */
|
|
77
|
+
interfaces?: string[];
|
|
78
|
+
/** `specifiedBy` URL (custom scalars). */
|
|
79
|
+
specifiedByUrl?: string;
|
|
80
|
+
/**
|
|
81
|
+
* A spec-defined scalar (`String`, `Int`, …): kept for type refs to resolve
|
|
82
|
+
* against, but never given a reference page of its own.
|
|
83
|
+
*/
|
|
84
|
+
builtIn?: boolean;
|
|
85
|
+
}
|
|
86
|
+
/** A normalized GraphQL schema, lowered to serializable data at parse time. */
|
|
87
|
+
export interface GraphqlDocument {
|
|
88
|
+
/** Mirrors the OpenAPI `info` block so `source.ts` reads one shape. */
|
|
89
|
+
info?: {
|
|
90
|
+
title?: string;
|
|
91
|
+
version?: string;
|
|
92
|
+
description?: string;
|
|
93
|
+
};
|
|
94
|
+
/** Root operation type names (`Query`, `Mutation`, `Subscription`). */
|
|
95
|
+
roots: Partial<Record<GraphqlOperationKind, string>>;
|
|
96
|
+
/** Named types by name, spec-defined scalars included, introspection types excluded. */
|
|
97
|
+
types: Record<string, GraphqlTypeDef>;
|
|
98
|
+
}
|
|
99
|
+
/** Whether an operation ref's method is a root-field kind (vs a type page). */
|
|
100
|
+
export declare const isGraphqlOperationKind: (method: string) => method is GraphqlOperationKind;
|
|
101
|
+
/**
|
|
102
|
+
* A GraphQL member in the schema's own notation — `query pets` for a root
|
|
103
|
+
* field, `type Pet` / `input PetInput` / `enum Status` for a named type. The
|
|
104
|
+
* rendered page shows the same pair as a kind badge beside the name; the
|
|
105
|
+
* text form spells the kind the way SDL does, so a reader who knows GraphQL
|
|
106
|
+
* and not Blume's badges reads it right.
|
|
107
|
+
*/
|
|
108
|
+
export declare const graphqlSignature: (operation: Pick<ApiOperationRef, "method" | "path">) => string;
|
|
109
|
+
/**
|
|
110
|
+
* Flatten a GraphQL document into a route-mapped page list and its ordered
|
|
111
|
+
* groups — the GraphQL counterpart of `extractOperations` in `model.ts`, built
|
|
112
|
+
* on the same `operationCollector`. Root fields become operation pages grouped
|
|
113
|
+
* as Queries/Mutations/Subscriptions; every other named type becomes a type
|
|
114
|
+
* page grouped by kind (Objects, Input Objects, …). Spec-defined scalars and
|
|
115
|
+
* the root types themselves get no page — the roots' fields ARE the operation
|
|
116
|
+
* pages, and `String`/`Int`/… document nothing.
|
|
117
|
+
*/
|
|
118
|
+
export declare const extractGraphqlOperations: (document: GraphqlDocument, baseRoute: string) => ExtractedOperations;
|
|
119
|
+
/** Resolve the root field behind an operation-kind ref, if it still exists. */
|
|
120
|
+
export declare const graphqlRootField: (document: GraphqlDocument, ref: ApiOperationRef) => GraphqlField | undefined;
|
|
121
|
+
/** Resolve the named type behind a type-page ref, if it still exists. */
|
|
122
|
+
export declare const graphqlTypeDef: (document: GraphqlDocument, ref: ApiOperationRef) => GraphqlTypeDef | undefined;
|