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,138 @@
|
|
|
1
|
+
import type { Diagnostic } from "./types.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Cheap pre-filter so include-free content (the overwhelmingly common case)
|
|
4
|
+
* skips the line scan and file reads entirely.
|
|
5
|
+
*/
|
|
6
|
+
export declare const hasIncludeStatements: (text: string) => boolean;
|
|
7
|
+
/** The attributes an include statement supports. */
|
|
8
|
+
export interface IncludeAttributes {
|
|
9
|
+
/** Force code-block mode with this language (even for `.md`/`.mdx`). */
|
|
10
|
+
lang?: string;
|
|
11
|
+
/** Fence meta string in code-block mode (e.g. `title="lib.ts"`). */
|
|
12
|
+
meta?: string;
|
|
13
|
+
}
|
|
14
|
+
/** A parsed include statement. */
|
|
15
|
+
export interface IncludeStatement {
|
|
16
|
+
target: string;
|
|
17
|
+
attributes: IncludeAttributes;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Parse one trimmed line as an include statement, or `null` when it isn't
|
|
21
|
+
* one. Only `lang` and `meta` are meaningful; unknown attributes parse and
|
|
22
|
+
* are ignored so a future attribute degrades gracefully on older versions.
|
|
23
|
+
*/
|
|
24
|
+
export declare const parseIncludeStatement: (line: string) => IncludeStatement | null;
|
|
25
|
+
/**
|
|
26
|
+
* Parse one raw `.md` source line as an include statement, applying the
|
|
27
|
+
* line-level rules the renderer sees: a line indented like code (4 spaces or
|
|
28
|
+
* a tab) is an indented code block, shown literally rather than spliced. The
|
|
29
|
+
* render plugin's `.md` visitors share this so the two halves can't drift.
|
|
30
|
+
*/
|
|
31
|
+
export declare const parseIncludeLine: (line: string) => IncludeStatement | null;
|
|
32
|
+
/** What a line that may open an include statement turned out to be. */
|
|
33
|
+
export type IncludeMatch =
|
|
34
|
+
/** A statement, ending on line `end` (the same line when it isn't wrapped). */
|
|
35
|
+
{
|
|
36
|
+
kind: "statement";
|
|
37
|
+
end: number;
|
|
38
|
+
statement: IncludeStatement;
|
|
39
|
+
}
|
|
40
|
+
/** A line that opens `<include` but no statement Blume can read. */
|
|
41
|
+
| {
|
|
42
|
+
kind: "malformed";
|
|
43
|
+
}
|
|
44
|
+
/** Not an include statement at all. */
|
|
45
|
+
| {
|
|
46
|
+
kind: "none";
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* Read the include statement opening at `lines[index]`, if any. A statement
|
|
50
|
+
* sits on a line of its own, or — as a formatter wraps a long one — runs from a
|
|
51
|
+
* line opening `<include` to the next line closing `</include>`, with no blank
|
|
52
|
+
* line between (the path on its own line, attributes on one line or several):
|
|
53
|
+
*
|
|
54
|
+
* ```mdx
|
|
55
|
+
* <include lang="ts" meta='title="config.ts"'>
|
|
56
|
+
* ./examples/config.ts
|
|
57
|
+
* </include>
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* The lines' trimmed text joins into the one-line form, so both parse by the
|
|
61
|
+
* same rules. In `.md` a first line indented like code is a code block, never
|
|
62
|
+
* a statement. A line that opens `<include` but doesn't close into a
|
|
63
|
+
* statement is `malformed`, so the author hears about it instead of the page
|
|
64
|
+
* rendering the raw tag. Shared by the string-level scanner and the render
|
|
65
|
+
* plugin so they splice exactly the same statements.
|
|
66
|
+
*/
|
|
67
|
+
export declare const matchIncludeStatement: (lines: readonly string[], index: number, format: "md" | "mdx") => IncludeMatch;
|
|
68
|
+
/**
|
|
69
|
+
* The warning for a line that opens `<include` but isn't a statement Blume can
|
|
70
|
+
* read — it renders as written, so a silent miss would ship a raw tag.
|
|
71
|
+
*/
|
|
72
|
+
export declare const malformedIncludeDiagnostic: (file: string, line: number) => Diagnostic;
|
|
73
|
+
/**
|
|
74
|
+
* Advance the HTML comment state across one `.md` line — the render plugin's
|
|
75
|
+
* half of the comment rule (a statement inside `<!-- -->` never splices),
|
|
76
|
+
* sharing the same tracking the string-level scanner uses.
|
|
77
|
+
*/
|
|
78
|
+
export declare const advanceHtmlCommentState: (line: string, inComment: boolean) => boolean;
|
|
79
|
+
/** Provenance of one line of expanded output. */
|
|
80
|
+
export interface LineOrigin {
|
|
81
|
+
/** Absolute path of the file the line came from. */
|
|
82
|
+
file: string;
|
|
83
|
+
/** 1-based line number within that file's raw source. */
|
|
84
|
+
line: number;
|
|
85
|
+
}
|
|
86
|
+
/** The result of expanding a document's include statements. */
|
|
87
|
+
export interface IncludeExpansion {
|
|
88
|
+
/** The document with every include statement replaced by its content. */
|
|
89
|
+
text: string;
|
|
90
|
+
/** Per output line: the source file and raw-file line it came from. */
|
|
91
|
+
origins: LineOrigin[];
|
|
92
|
+
/** Absolute paths of every file included, transitively. */
|
|
93
|
+
includes: string[];
|
|
94
|
+
/** Structured errors (missing target, cycle, escape); statements with an
|
|
95
|
+
* error stay verbatim in the output. */
|
|
96
|
+
errors: Diagnostic[];
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Expand a document's include statements at the string level. `lineOffset`
|
|
100
|
+
* shifts the includer's own recorded origin lines — pass the stripped front
|
|
101
|
+
* matter block's height when `body` is the stripped text, so origins point at
|
|
102
|
+
* real file lines. Never throws: unresolvable statements stay verbatim and
|
|
103
|
+
* surface through `errors`.
|
|
104
|
+
*/
|
|
105
|
+
export declare const expandIncludes: (body: string, options: {
|
|
106
|
+
/** Absolute path of the file being expanded. */
|
|
107
|
+
sourcePath: string;
|
|
108
|
+
/** The owning source's content root; bounds include resolution. */
|
|
109
|
+
contentRoot?: string;
|
|
110
|
+
/** Raw-file line of `body`'s first line, minus one (default `0`). */
|
|
111
|
+
lineOffset?: number;
|
|
112
|
+
}) => Promise<IncludeExpansion>;
|
|
113
|
+
/**
|
|
114
|
+
* Resolve one include statement to its fully-expanded markdown text — the
|
|
115
|
+
* render plugin's entry point (it finds the statements as AST nodes and only
|
|
116
|
+
* needs each target spliced). Shares every semantic with
|
|
117
|
+
* {@link expandIncludes}.
|
|
118
|
+
*/
|
|
119
|
+
export declare const expandIncludeTarget: (statement: IncludeStatement, options: {
|
|
120
|
+
sourcePath: string;
|
|
121
|
+
contentRoot?: string;
|
|
122
|
+
}) => Promise<{
|
|
123
|
+
text: string;
|
|
124
|
+
errors: Diagnostic[];
|
|
125
|
+
} | {
|
|
126
|
+
error: Diagnostic;
|
|
127
|
+
}>;
|
|
128
|
+
/**
|
|
129
|
+
* Invert the scan's page → included-partials edges into the partial →
|
|
130
|
+
* including-pages map `includeHmrPlugin` reads (`generated/includes.json`),
|
|
131
|
+
* so editing a partial invalidates every page that splices it. Localized
|
|
132
|
+
* pages share a source path, hence the dedupe. Shared by `generateRuntime`
|
|
133
|
+
* and `eject`, whose configs both wire the plugin at the same path.
|
|
134
|
+
*/
|
|
135
|
+
export declare const buildIncludeGraph: (pages: {
|
|
136
|
+
sourcePath?: string;
|
|
137
|
+
includes?: string[];
|
|
138
|
+
}[]) => Record<string, string[]>;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import type { Diagnostic } from "./types.ts";
|
|
2
|
+
/** Normalized form of the `lastModified` config. */
|
|
3
|
+
export interface ResolvedLastModified {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
source: "git" | "frontmatter";
|
|
6
|
+
}
|
|
7
|
+
/** Normalize the `lastModified` config (`false | "git" | "frontmatter"`) into `{ enabled, source }`. */
|
|
8
|
+
export declare const resolveLastModifiedConfig: (value: false | "git" | "frontmatter") => ResolvedLastModified;
|
|
9
|
+
/**
|
|
10
|
+
* Parse `git log --format=%x00%cI --name-only` output into a map of
|
|
11
|
+
* repo-root-relative path → most recent committer ISO date. Each commit emits a
|
|
12
|
+
* NUL-prefixed date line followed by the paths it touched; since git logs
|
|
13
|
+
* newest-first, the first date seen for a path wins. Blank lines are ignored.
|
|
14
|
+
*/
|
|
15
|
+
export declare const parseGitLog: (output: string) => Map<string, string>;
|
|
16
|
+
/**
|
|
17
|
+
* The toplevel of the repository containing `root`, or null when git is
|
|
18
|
+
* unavailable or the project isn't a repo. Callers use it to decide which
|
|
19
|
+
* content roots a `git log` pathspec can cover at all — a root outside the
|
|
20
|
+
* repository would fail the log outright and can never yield dates.
|
|
21
|
+
*/
|
|
22
|
+
export declare const gitRepositoryRoot: (root: string) => string | null;
|
|
23
|
+
/**
|
|
24
|
+
* Resolve each source file's last-modified date from git history, keyed by
|
|
25
|
+
* absolute source path. Runs a single `git log` over the given content roots
|
|
26
|
+
* (each local source's own root, which may diverge from `content.root`)
|
|
27
|
+
* and maps repo-root-relative paths back to the given absolute paths
|
|
28
|
+
* (monorepo-safe via `rev-parse --show-toplevel`). Returns an empty map if git
|
|
29
|
+
* is unavailable or the project isn't a repo — the feature then simply shows
|
|
30
|
+
* no dates.
|
|
31
|
+
*/
|
|
32
|
+
export declare const gitLastModifiedTimes: (root: string, contentRoots: string[], sourcePaths: string[], repositoryRoot?: string | null) => Map<string, string>;
|
|
33
|
+
/**
|
|
34
|
+
* Whether the repository containing `root` is a shallow clone. Returns false
|
|
35
|
+
* when git is unavailable or the project isn't a repo — those cases already
|
|
36
|
+
* yield no dates at all, and the shallow warning would only mislead.
|
|
37
|
+
*/
|
|
38
|
+
export declare const isShallowGitRepository: (root: string) => boolean;
|
|
39
|
+
/**
|
|
40
|
+
* A warning for git-derived dates silently missing because the build ran in a
|
|
41
|
+
* shallow clone — the default on Vercel and `actions/checkout`, where `git log`
|
|
42
|
+
* only sees the last few commits, so most pages get no date and the sitemap's
|
|
43
|
+
* `<lastmod>` / "Last updated" stamps quietly disappear in production while
|
|
44
|
+
* working locally. Empty when every page got a date or the clone isn't
|
|
45
|
+
* shallow.
|
|
46
|
+
*/
|
|
47
|
+
export declare const lastModifiedShallowWarning: (root: string, undatedCount: number) => Diagnostic[];
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import type { LocaleRouting } from "./i18n.ts";
|
|
2
|
+
import type { ContentGraph, Diagnostic, PageRecord } from "./types.ts";
|
|
3
|
+
/** The page a relative link is written on, as the resolver sees it. */
|
|
4
|
+
export interface RelativeLinkBase {
|
|
5
|
+
/** Whether the page is its folder's index (its route is its directory). */
|
|
6
|
+
isIndex: boolean;
|
|
7
|
+
/** The page's own route, base path included. */
|
|
8
|
+
route: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Where a relative page link written on `from` lands: a root-relative route
|
|
12
|
+
* with the authored `?query#hash` kept — or `undefined` when `href` isn't a
|
|
13
|
+
* relative page link (a root-relative path, a bare `#fragment` or `?query`,
|
|
14
|
+
* an external URL or other scheme, or a relative asset like `./diagram.png`).
|
|
15
|
+
*
|
|
16
|
+
* The one reading `blume validate` checks links against and the Markdown
|
|
17
|
+
* pipeline rewrites them to, so the built `href`, the link check, and the
|
|
18
|
+
* browser agree. Relative paths resolve file-style: a leaf page's links
|
|
19
|
+
* resolve against its parent directory, while an index page's route already is
|
|
20
|
+
* its directory — `./install` on `guides/index.mdx` (`/guides`) lands on
|
|
21
|
+
* `/guides/install`, where a browser reading the slashless URL would go to
|
|
22
|
+
* `/install`. A `.md`/`.mdx` target is a file link: `resolveFile` maps its
|
|
23
|
+
* decoded path, relative to the linking file, to the route that file
|
|
24
|
+
* publishes at, so a target with its own `slug` or an ordering prefix still
|
|
25
|
+
* lands on its page instead of on its raw Markdown source. Without
|
|
26
|
+
* `resolveFile`, or for a file it doesn't know, the target resolves
|
|
27
|
+
* route-relative with the extension dropped.
|
|
28
|
+
*
|
|
29
|
+
* Any other extension (`./diagram.png`) marks an asset, except where a page
|
|
30
|
+
* publishes at the resolved path: `hasRoute` answers that, so a dotted page
|
|
31
|
+
* name (`./node.js` for `node.js.mdx`, `./v1.2`) is still a page link.
|
|
32
|
+
*/
|
|
33
|
+
export declare const resolveRelativeHref: (href: string, from: RelativeLinkBase, resolveFile?: (path: string) => string | undefined, hasRoute?: (route: string) => boolean) => string | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Whether a content file is its folder's index, from its name as written on
|
|
36
|
+
* disk: `index.md(x)` after an ordering prefix, optionally carrying one of
|
|
37
|
+
* `localeTokens` before the extension (`index.fr.mdx` under the `dot` locale
|
|
38
|
+
* parser, `index.$.mdx` for a file shared by every locale).
|
|
39
|
+
*/
|
|
40
|
+
export declare const isIndexFileName: (name: string, localeTokens?: readonly string[]) => boolean;
|
|
41
|
+
/** Where content files publish, for resolving file links (`./setup.mdx`). */
|
|
42
|
+
export interface FileRouteIndex {
|
|
43
|
+
/**
|
|
44
|
+
* Absolute source path → the route that file publishes at. A file shared by
|
|
45
|
+
* every locale publishes once per locale; the default locale's route stands
|
|
46
|
+
* for it (a link from a localized page moves into that locale afterwards,
|
|
47
|
+
* exactly as the rendered link does). Fallback copies render another
|
|
48
|
+
* locale's file, so they never stand for it.
|
|
49
|
+
*/
|
|
50
|
+
bySource: Map<string, string>;
|
|
51
|
+
/**
|
|
52
|
+
* A default-locale page's locale-stripped path (`navPath`) → its route. A
|
|
53
|
+
* page in a locale folder that links a sibling not translated yet
|
|
54
|
+
* (`fr/guides/setup.mdx` missing) means the default tree's file
|
|
55
|
+
* (`guides/setup.mdx`), whose route — its own `slug` included — then moves
|
|
56
|
+
* into the reader's locale onto the fallback copy.
|
|
57
|
+
*/
|
|
58
|
+
byDefaultNavPath: Map<string, string>;
|
|
59
|
+
}
|
|
60
|
+
/** The linking side of a file link: where the page's source lives. */
|
|
61
|
+
export interface FileLinkBase {
|
|
62
|
+
navPath: string;
|
|
63
|
+
sourcePath: string;
|
|
64
|
+
}
|
|
65
|
+
export declare const buildFileRouteIndex: (pages: readonly PageRecord[], i18n: LocaleRouting | null) => FileRouteIndex;
|
|
66
|
+
/**
|
|
67
|
+
* The route a file link written on `from` lands on: the linked file's own
|
|
68
|
+
* route, or — when a locale folder doesn't have that file yet — the default
|
|
69
|
+
* tree's file at the same place.
|
|
70
|
+
*/
|
|
71
|
+
export declare const routeOfLinkedFile: (index: FileRouteIndex, from: FileLinkBase, path: string) => string | undefined;
|
|
72
|
+
/**
|
|
73
|
+
* Validate every link discovered in the content graph: internal page links and
|
|
74
|
+
* anchors against the route map, asset links against the public dir, and
|
|
75
|
+
* (opt-in) external links over the network.
|
|
76
|
+
*/
|
|
77
|
+
export declare const validateLinks: (graph: ContentGraph, options: {
|
|
78
|
+
/** Site-wide route mount point (`""` or `/seg`); routes and redirects carry it. */
|
|
79
|
+
basePath?: string;
|
|
80
|
+
/**
|
|
81
|
+
* Servable routes the graph can't know: custom `.astro` pages and generated
|
|
82
|
+
* routes (e.g. the `/changelog` index). Mounted outside `basePath` (they're
|
|
83
|
+
* injected at their pattern), so they are *not* based here — mirroring the
|
|
84
|
+
* full-route-set resolution in `nav-diagnostics.ts`/`generateRuntime`.
|
|
85
|
+
*/
|
|
86
|
+
extraRoutes?: string[];
|
|
87
|
+
/** Locale routing when i18n is on; links then resolve into the page's locale. */
|
|
88
|
+
i18n?: LocaleRouting | null;
|
|
89
|
+
publicDir: string | null;
|
|
90
|
+
checkExternal?: boolean;
|
|
91
|
+
/** Configured redirects; their `from` paths count as valid link targets. */
|
|
92
|
+
redirects?: {
|
|
93
|
+
from: string;
|
|
94
|
+
}[];
|
|
95
|
+
}) => Promise<Diagnostic[]>;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { LocaleRouting } from "./i18n.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Locale-aware resolution of content links.
|
|
4
|
+
*
|
|
5
|
+
* Authors write internal links as if mounted at the default locale's root
|
|
6
|
+
* (`[x](/guide)`, `<Card href="/guide">`), and translated pages are usually
|
|
7
|
+
* copies of the source with the same links — so read on `/fr/…`, a link would
|
|
8
|
+
* otherwise drop the reader back into the default language. These helpers move
|
|
9
|
+
* such a link to the reader's locale (`/fr/guide`) when that route is served
|
|
10
|
+
* (a real translation or a materialized fallback page), and leave it alone
|
|
11
|
+
* otherwise: an explicit cross-locale link (`/de/guide`), a custom `.astro`
|
|
12
|
+
* page or generated route that has no per-locale variant, or a missing
|
|
13
|
+
* translation on a site with fallbacks disabled all keep their authored
|
|
14
|
+
* target rather than pointing at a 404.
|
|
15
|
+
*
|
|
16
|
+
* The rewrite runs at render time (`components/layout/LocaleLinks.astro`)
|
|
17
|
+
* because content is compiled once per file but served per route: a fallback
|
|
18
|
+
* route renders the fallback locale's file under the missing locale's URL, and
|
|
19
|
+
* a shared `page.$.mdx` renders under every locale. The link checker applies
|
|
20
|
+
* the same resolution so anchors are validated against the page a reader lands
|
|
21
|
+
* on.
|
|
22
|
+
*/
|
|
23
|
+
/** A route set, as the runtime (`Set`) or the checker (a predicate) sees it. */
|
|
24
|
+
export interface RouteSet {
|
|
25
|
+
has: (route: string) => boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface LocalizeLinkOptions {
|
|
28
|
+
/** Site-wide route mount point (`""` or `/seg`); routes carry it. */
|
|
29
|
+
basePath: string;
|
|
30
|
+
i18n: LocaleRouting;
|
|
31
|
+
/** Locale of the page the link is rendered on. */
|
|
32
|
+
locale: string;
|
|
33
|
+
/** Every served route, base-prefixed like `path` (no `deployment.base`). */
|
|
34
|
+
routes: RouteSet;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Move a base-prefixed, fragment-less internal path into `locale` when that
|
|
38
|
+
* route is served, else return it unchanged. Idempotent: a path already under
|
|
39
|
+
* any configured locale prefix is never re-prefixed.
|
|
40
|
+
*/
|
|
41
|
+
export declare const localizeLinkPath: (path: string, options: LocalizeLinkOptions) => string;
|
|
42
|
+
export interface LocalizeHrefOptions extends LocalizeLinkOptions {
|
|
43
|
+
/** `deployment.base` (Astro's `BASE_URL`), layered over `basePath` in hrefs. */
|
|
44
|
+
deployBase: string;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Localize a rendered `href`: external URLs, relative paths, bare fragments, and
|
|
48
|
+
* asset links pass through; a root-relative page link keeps its `?query` and
|
|
49
|
+
* `#fragment` and its `deployment.base` layer around the localized path.
|
|
50
|
+
*/
|
|
51
|
+
export declare const localizeHref: (href: string, options: LocalizeHrefOptions) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Rewrite every `<a href>` in rendered content HTML through `rewrite`. Code
|
|
54
|
+
* blocks are HTML-escaped (`<a`), and island props live on
|
|
55
|
+
* `<astro-island>`, so neither is touched.
|
|
56
|
+
*/
|
|
57
|
+
export declare const localizeContentLinks: (html: string, rewrite: (href: string) => string) => string;
|
|
58
|
+
export declare const routeSetFor: (routes: readonly {
|
|
59
|
+
path: string;
|
|
60
|
+
}[]) => Set<string>;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "./schema.ts";
|
|
2
|
+
import type { BlumeManifest, ContentGraph, PageRecord, ProjectContext } from "./types.ts";
|
|
3
|
+
/** The current manifest schema version. */
|
|
4
|
+
export declare const MANIFEST_VERSION = 1;
|
|
5
|
+
/**
|
|
6
|
+
* Whether a page may be indexed on its own merits — not author-excluded and not
|
|
7
|
+
* hidden (unless hidden pages are opted in). This is independent of whether the
|
|
8
|
+
* site search provider is enabled, so features like the MCP server can index
|
|
9
|
+
* docs even when on-page search is off.
|
|
10
|
+
*/
|
|
11
|
+
export declare const contentIndexable: (page: PageRecord, config: ResolvedConfig) => boolean;
|
|
12
|
+
/** Build the runtime manifest that bridges core and the generated Astro app. */
|
|
13
|
+
export declare const buildManifest: (options: {
|
|
14
|
+
context: ProjectContext;
|
|
15
|
+
config: ResolvedConfig;
|
|
16
|
+
graph: ContentGraph;
|
|
17
|
+
}) => BlumeManifest;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { FolderMeta } from "./schema.ts";
|
|
2
|
+
import type { Diagnostic } from "./types.ts";
|
|
3
|
+
/** A filesystem content source to scan for folder meta: its on-disk root and
|
|
4
|
+
* optional route prefix. The prefix is folded into every key so meta lines up
|
|
5
|
+
* with the sidebar group path, which carries the same prefix. */
|
|
6
|
+
export interface FolderMetaSource {
|
|
7
|
+
root: string;
|
|
8
|
+
prefix?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Discover `meta.{ts,js,mjs}` files across the given filesystem sources. Keys are
|
|
12
|
+
* the source's route prefix joined with the directory relative to that source's
|
|
13
|
+
* root (`""`/the prefix itself for a source's root directory), so meta matches
|
|
14
|
+
* the prefixed sidebar group path. A bare string is shorthand for a single,
|
|
15
|
+
* unprefixed source (the default project layout). `meta.$.*` files are returned
|
|
16
|
+
* in `shared` — folder meta that applies to that directory in every locale (a
|
|
17
|
+
* locale-specific `meta.*` overrides it). Each file default-exports an object or
|
|
18
|
+
* a (sync/async) function returning one.
|
|
19
|
+
*
|
|
20
|
+
* `localeDirs` names the top-level locale directories of a `dir`-parser i18n
|
|
21
|
+
* project. Navigation looks locale meta up as `locale/<group path>` where the
|
|
22
|
+
* group path starts with the source prefix, so a locale directory found at a
|
|
23
|
+
* source root is hoisted in front of the prefix (`docs/fr/guides/meta.ts` keys
|
|
24
|
+
* to `fr/docs/guides`, not `docs/fr/guides`).
|
|
25
|
+
*
|
|
26
|
+
* `versionDirs` names the archived-version snapshot directories, which sit
|
|
27
|
+
* outermost on disk — a locale directory inside a snapshot is one level deeper.
|
|
28
|
+
* Both are hoisted, version first (`v1.0/fr/guides/meta.ts` keys to
|
|
29
|
+
* `v1.0/fr/<prefix>/guides`), matching navigation's version-aware meta prefix.
|
|
30
|
+
*/
|
|
31
|
+
export declare const discoverFolderMeta: (sources: string | FolderMetaSource[], options?: {
|
|
32
|
+
localeDirs?: readonly string[];
|
|
33
|
+
versionDirs?: readonly string[];
|
|
34
|
+
}) => Promise<{
|
|
35
|
+
meta: Map<string, FolderMeta>;
|
|
36
|
+
shared: Map<string, FolderMeta>;
|
|
37
|
+
diagnostics: Diagnostic[];
|
|
38
|
+
}>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Diagnostic, Navigation, PageRecord } from "./types.ts";
|
|
2
|
+
/** Warn about icon names that aren't in Blume's set (skipping image/SVG icons). */
|
|
3
|
+
export declare const validateNavIcons: (navigation: Navigation) => Diagnostic[];
|
|
4
|
+
/**
|
|
5
|
+
* Warn about unknown icons on curated `search.popular` links. Same accepted
|
|
6
|
+
* input shapes as nav icons — resolved to markup on the server for the island.
|
|
7
|
+
*/
|
|
8
|
+
export declare const validateSearchPopularIcons: (popular: {
|
|
9
|
+
icon?: string;
|
|
10
|
+
label: string;
|
|
11
|
+
}[]) => Diagnostic[];
|
|
12
|
+
/**
|
|
13
|
+
* Warn when a config-linked tab/selector target has no matching page. `routes`
|
|
14
|
+
* must be the full set of servable routes — content, custom `.astro` pages, and
|
|
15
|
+
* generated routes — so this runs where all three are known (`generateRuntime`),
|
|
16
|
+
* not in the content-only graph build.
|
|
17
|
+
*/
|
|
18
|
+
export declare const validateNavTargets: (navigation: Navigation, routes: Set<string>) => Diagnostic[];
|
|
19
|
+
/**
|
|
20
|
+
* Structural navigation diagnostics that need only the built navigation +
|
|
21
|
+
* content pages: duplicate sidebar labels at a level, and hidden pages that
|
|
22
|
+
* still surface in the sidebar (so pagination lands on them). Target existence
|
|
23
|
+
* is checked separately by {@link validateNavTargets}, which needs the full
|
|
24
|
+
* route set.
|
|
25
|
+
*/
|
|
26
|
+
export declare const validateNavStructure: (navigation: Navigation, pages: PageRecord[]) => Diagnostic[];
|
|
@@ -66,4 +66,10 @@ export declare const buildNavigation: (pages: PageRecord[], options: {
|
|
|
66
66
|
* into in place; omit to discard.
|
|
67
67
|
*/
|
|
68
68
|
diagnostics?: Diagnostic[];
|
|
69
|
+
/**
|
|
70
|
+
* Routes served outside the content tree that a tab `path` may name
|
|
71
|
+
* directly (the generated changelog index), so the tab links there instead
|
|
72
|
+
* of falling back to its section's first page.
|
|
73
|
+
*/
|
|
74
|
+
extraRoutes?: ReadonlySet<string>;
|
|
69
75
|
}) => Navigation;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Node's own `require`, for the SDKs and heavy modules Blume loads only when a
|
|
3
|
+
* feature needs them. Resolution starts from this file, inside the installed
|
|
4
|
+
* package, exactly like the `import()` it stands in for, and Node 22.12+ loads
|
|
5
|
+
* ES modules through it too.
|
|
6
|
+
*
|
|
7
|
+
* Never `import()` in their place. When Node can't import the generated Astro
|
|
8
|
+
* config itself — it refuses to strip types from TypeScript under
|
|
9
|
+
* `node_modules`, which is where an installed Blume's runtime source lives —
|
|
10
|
+
* Astro evaluates the config, and every Blume module it reaches, in a Vite
|
|
11
|
+
* module runner that it closes as soon as the config has loaded. A dynamic
|
|
12
|
+
* `import()` in one of those modules resolves through that runner, so a call
|
|
13
|
+
* made any later (an `astro:build:done` hook, a Markdown plugin) throws "Vite
|
|
14
|
+
* module runner has been closed". `require` is Node's, so it works however the
|
|
15
|
+
* calling module was evaluated. The repo itself never sees the failure: its
|
|
16
|
+
* workspace link puts Blume outside `node_modules`, so Node imports the config
|
|
17
|
+
* natively.
|
|
18
|
+
*/
|
|
19
|
+
export declare const nodeRequire: NodeJS.Require;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Derive a valid npm package name from a directory name, falling back to
|
|
3
|
+
* `docs` when nothing usable remains.
|
|
4
|
+
*/
|
|
5
|
+
export declare const toPackageName: (raw: string) => string;
|
|
6
|
+
/**
|
|
7
|
+
* A minimal, runnable `package.json` body for a Blume project: the `blume`
|
|
8
|
+
* dependency pinned to the installed version plus `dev`/`build`/`doctor`
|
|
9
|
+
* scripts, so `npm install && npm run dev` works immediately. Shared by
|
|
10
|
+
* `blume init` and the migrators, which scaffold one when a project has none.
|
|
11
|
+
* `extraDeps` adds source SDKs (e.g. `@notionhq/client`) beside `blume`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const blumePackageJson: (name: string, extraDeps?: Record<string, string>) => string;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { DiagnosticSeverity } from "./types.ts";
|
|
2
|
+
export declare const PROBE_CONCURRENCY = 8;
|
|
3
|
+
export declare const PROBE_TIMEOUT_MS = 10000;
|
|
4
|
+
/** The outcome of a single HTTP probe, with failures normalized rather than thrown. */
|
|
5
|
+
export interface ProbeResult {
|
|
6
|
+
ok: boolean;
|
|
7
|
+
status?: number;
|
|
8
|
+
timedOut?: boolean;
|
|
9
|
+
error?: string;
|
|
10
|
+
/** Whether the request was redirected before landing on `status`. */
|
|
11
|
+
redirected?: boolean;
|
|
12
|
+
/** The URL finally landed on, after following redirects. */
|
|
13
|
+
finalUrl?: string;
|
|
14
|
+
/** `Content-Encoding` of the response, when the server set one. */
|
|
15
|
+
encoding?: string | null;
|
|
16
|
+
/** Wall-clock milliseconds for the request. */
|
|
17
|
+
ms?: number;
|
|
18
|
+
/** `X-Robots-Tag` of the response, when the server set one. */
|
|
19
|
+
robotsTag?: string | null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Probe a single URL: HEAD first, falling back to GET.
|
|
23
|
+
*
|
|
24
|
+
* Plenty of servers reject HEAD outright (405/501) or drop the connection, so a
|
|
25
|
+
* HEAD-only probe would report healthy pages as dead.
|
|
26
|
+
*/
|
|
27
|
+
export declare const probe: (url: string, options?: {
|
|
28
|
+
timeoutMs?: number;
|
|
29
|
+
}) => Promise<ProbeResult>;
|
|
30
|
+
/** Grade a probe result into a severity + detail, or null when the URL is fine. */
|
|
31
|
+
export declare const gradeExternal: (result: ProbeResult) => {
|
|
32
|
+
severity: DiagnosticSeverity;
|
|
33
|
+
detail: string;
|
|
34
|
+
} | null;
|
|
35
|
+
/**
|
|
36
|
+
* Probe many URLs with bounded concurrency, deduplicating first. Returns a map
|
|
37
|
+
* from URL to its result — the caller decides what each one means.
|
|
38
|
+
*/
|
|
39
|
+
export declare const probeAll: (urls: readonly string[], options?: {
|
|
40
|
+
concurrency?: number;
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
}) => Promise<Map<string, ProbeResult>>;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { ResolvedConfig } from "./schema.ts";
|
|
2
|
+
import type { ContentSource } from "./sources/types.ts";
|
|
3
|
+
import type { BlumeManifest, ContentGraph, Diagnostic, ExampleLookup, ProjectContext } from "./types.ts";
|
|
4
|
+
/** Build mode: drafts are kept in `dev` and dropped in `build`. */
|
|
5
|
+
export type BuildMode = "dev" | "build";
|
|
6
|
+
/** CLI-supplied overrides applied over the loaded config (see `scanProject`). */
|
|
7
|
+
export interface ConfigOverrides {
|
|
8
|
+
/** Override `content.root` (`blume dev --content-dir`). */
|
|
9
|
+
contentRoot?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Whether `path` sits at or under `dir`. A relative result that is itself
|
|
13
|
+
* absolute means a different drive root on Windows, which is outside too.
|
|
14
|
+
*/
|
|
15
|
+
export declare const isWithin: (dir: string, path: string) => boolean;
|
|
16
|
+
/** Everything Blume knows about a project after a full scan. */
|
|
17
|
+
export interface BlumeProject {
|
|
18
|
+
mode: BuildMode;
|
|
19
|
+
context: ProjectContext;
|
|
20
|
+
config: ResolvedConfig;
|
|
21
|
+
graph: ContentGraph;
|
|
22
|
+
manifest: BlumeManifest;
|
|
23
|
+
diagnostics: Diagnostic[];
|
|
24
|
+
/** Entries excluded from the graph because their frontmatter failed validation. */
|
|
25
|
+
droppedPages: number;
|
|
26
|
+
/** The instantiated content sources, for lazy entry reads (search/AI/raw). */
|
|
27
|
+
sources: ContentSource[];
|
|
28
|
+
/**
|
|
29
|
+
* Whether the config file set `theme.fonts` itself (see
|
|
30
|
+
* {@link ConfigLoadResult.themeFontsConfigured}); gates OG font derivation.
|
|
31
|
+
*/
|
|
32
|
+
themeFontsConfigured: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Discovered `examples/` sources keyed by `<Component path>`, attached by the
|
|
35
|
+
* runtime/eject layer after {@link scanProject} (example discovery is an Astro
|
|
36
|
+
* concern, so core doesn't run it). Undefined until then; the agent-facing
|
|
37
|
+
* Markdown downleveler reads it to turn `<Component path="…" />` into the
|
|
38
|
+
* example's source. Empty when the project has no examples.
|
|
39
|
+
*/
|
|
40
|
+
examples?: ExampleLookup;
|
|
41
|
+
}
|
|
42
|
+
export declare const scanProject: (root: string, options?: {
|
|
43
|
+
devServerUrl?: string;
|
|
44
|
+
mode?: BuildMode;
|
|
45
|
+
preview?: boolean;
|
|
46
|
+
refresh?: boolean;
|
|
47
|
+
/** CLI overrides applied over the loaded config (e.g. `--output`). */
|
|
48
|
+
overrides?: ConfigOverrides;
|
|
49
|
+
/** Relocate the generated runtime (e.g. `.blume-verify` for isolation). */
|
|
50
|
+
runtimeDir?: string;
|
|
51
|
+
}) => Promise<BlumeProject>;
|
|
@@ -2,6 +2,8 @@ import type { ResolvedConfig } from "./schema.ts";
|
|
|
2
2
|
import type { ProjectContext } from "./types.ts";
|
|
3
3
|
/** Locate the Blume config file for a project root, if any. */
|
|
4
4
|
export declare const findConfigFile: (root: string) => string | null;
|
|
5
|
+
/** Locate the project's `components.ts`/`.tsx` override file, if any. */
|
|
6
|
+
export declare const findComponentsFile: (root: string) => string | null;
|
|
5
7
|
/**
|
|
6
8
|
* Resolve the generated runtime directory for a project. Defaults to
|
|
7
9
|
* `<root>/.blume`; an override (e.g. `.blume-verify` for an isolated build that
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Root } from "mdast";
|
|
2
|
+
/** A link (or link definition) whose destination isn't safe. */
|
|
3
|
+
export interface UnsafeLinkSpan {
|
|
4
|
+
/** End offset in the source, exclusive. */
|
|
5
|
+
end: number;
|
|
6
|
+
/** Start offset in the source. */
|
|
7
|
+
start: number;
|
|
8
|
+
/**
|
|
9
|
+
* What replaces it: the link's label, escaped so it can't form a link
|
|
10
|
+
* again; empty for a definition.
|
|
11
|
+
*/
|
|
12
|
+
text: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The unsafe links in a parsed Markdown tree, in source order: inline and
|
|
16
|
+
* reference links (autolinks included) and link definitions whose parsed
|
|
17
|
+
* destination fails {@link isSafeHref}. The parsed `url` is what a browser
|
|
18
|
+
* would get, character references and all, so `javascript:` is caught.
|
|
19
|
+
*/
|
|
20
|
+
export declare const unsafeLinkSpans: (tree: Root) => UnsafeLinkSpan[];
|
|
21
|
+
/**
|
|
22
|
+
* Markdown with every unsafe link reduced to its label text and every unsafe
|
|
23
|
+
* link definition removed. Everything else — safe links, raw HTML, code —
|
|
24
|
+
* passes through as written.
|
|
25
|
+
*/
|
|
26
|
+
export declare const neutralizeUnsafeLinks: (markdown: string) => string;
|