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
|
@@ -1,101 +1,392 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: Analytics
|
|
3
|
-
description: First-party web analytics —
|
|
3
|
+
description: First-party web analytics — PostHog, Google Analytics, Plausible, Mixpanel, Segment, and a dozen more — as adapters in blume.config.ts.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Blume injects analytics for you from
|
|
6
|
+
Blume injects analytics for you from an `analytics` list in `blume.config.ts`. Each entry is an adapter imported from `blume/analytics`: one per provider, plus `script()` for anything without one.
|
|
7
|
+
|
|
8
|
+
```ts blume.config.ts lineNumbers
|
|
9
|
+
import { defineConfig } from "blume";
|
|
10
|
+
import { googleAnalytics, plausible, posthog, vercel } from "blume/analytics";
|
|
11
|
+
|
|
12
|
+
export default defineConfig({
|
|
13
|
+
analytics: [
|
|
14
|
+
posthog({ key: "phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" }),
|
|
15
|
+
vercel(),
|
|
16
|
+
googleAnalytics({ id: "G-XXXXXXXXXX" }),
|
|
17
|
+
plausible({ domain: "docs.example.com" }),
|
|
18
|
+
],
|
|
19
|
+
});
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Adapters emit into `<head>` in the order you list them, and you can combine as many as you like. Every adapter is plain data: what it returns is validated with the rest of your config and inlined into the built site, so it can carry any JSON value but never a function. A passthrough option that JSON can't carry (a function, `undefined`, a bigint) fails validation with its path rather than disappearing from the build.
|
|
7
23
|
|
|
8
24
|
Analytics loads in **production builds only**. The scripts are emitted by `blume build`, never by `blume dev`, so local traffic never reaches your dashboards and you don't need a separate "development" project.
|
|
9
25
|
|
|
10
26
|
:::note
|
|
11
|
-
Analytics is opt-in. With no `analytics`
|
|
27
|
+
Analytics is opt-in. With no `analytics` list (or an empty one), Blume injects nothing.
|
|
12
28
|
:::
|
|
13
29
|
|
|
30
|
+
Every identifier below — a project key, a measurement ID, a site token — is the public, browser-side one from the provider's own install snippet. Each adapter renders that snippet, so it's safe to commit to your docs repository; Blume never asks for a secret.
|
|
31
|
+
|
|
32
|
+
## Adapters
|
|
33
|
+
|
|
34
|
+
| Adapter | Provider | Required |
|
|
35
|
+
| --- | --- | --- |
|
|
36
|
+
| `adobe()` | [Adobe Analytics](#adobe-analytics) | `url` |
|
|
37
|
+
| `amplitude()` | [Amplitude](#amplitude) | `key` |
|
|
38
|
+
| `clarity()` | [Microsoft Clarity](#microsoft-clarity) | `id` |
|
|
39
|
+
| `clearbit()` | [Clearbit](#clearbit) | `key` |
|
|
40
|
+
| `cloudflare()` | [Cloudflare Web Analytics](#cloudflare-web-analytics) | `token` |
|
|
41
|
+
| `fathom()` | [Fathom](#fathom) | `site` |
|
|
42
|
+
| `googleAnalytics()` | [Google Analytics 4](#google-analytics-4) | `id` |
|
|
43
|
+
| `googleTagManager()` | [Google Tag Manager](#google-tag-manager) | `id` |
|
|
44
|
+
| `heap()` | [Heap](#heap) | `id` |
|
|
45
|
+
| `hightouch()` | [Hightouch](#hightouch) | `key` |
|
|
46
|
+
| `hotjar()` | [Hotjar](#hotjar) | `id` |
|
|
47
|
+
| `logrocket()` | [LogRocket](#logrocket) | `id` |
|
|
48
|
+
| `mixpanel()` | [Mixpanel](#mixpanel) | `token` |
|
|
49
|
+
| `pirsch()` | [Pirsch](#pirsch) | `code` |
|
|
50
|
+
| `plausible()` | [Plausible](#plausible) | `domain` |
|
|
51
|
+
| `posthog()` | [PostHog](#posthog) | `key` |
|
|
52
|
+
| `segment()` | [Segment](#segment) | `key` |
|
|
53
|
+
| `vercel()` | [Vercel Web Analytics](#vercel-web-analytics) | — |
|
|
54
|
+
| `script()` | [Anything else](#custom-scripts) | `src` or `content` |
|
|
55
|
+
|
|
56
|
+
Blume's docs use a client-side router, so most navigation is an in-page swap rather than a full page load. Every adapter counts those as pageviews: providers whose script follows history changes on its own need nothing extra, and for the ones that only count real loads (PostHog, Segment, Hightouch) Blume sends the pageview itself. The two exceptions are the tag managers — [Google Tag Manager](#google-tag-manager) and [Adobe](#adobe-analytics) load a container whose own rules decide what fires, so give it a history-change trigger.
|
|
57
|
+
|
|
58
|
+
## PostHog
|
|
59
|
+
|
|
60
|
+
Pass your **project API key** to `posthog()` to add [PostHog](https://posthog.com). The host defaults to PostHog Cloud US; set `host` for EU Cloud (`https://eu.i.posthog.com`) or a self-hosted instance.
|
|
61
|
+
|
|
62
|
+
```ts blume.config.ts lineNumbers
|
|
63
|
+
analytics: [
|
|
64
|
+
posthog({
|
|
65
|
+
key: "phc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
66
|
+
host: "https://us.i.posthog.com", // optional, this is the default
|
|
67
|
+
}),
|
|
68
|
+
],
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`key` and `host` are the two options Blume maps (`host` becomes `api_host`). Anything else you pass — `persistence`, `capture_pageview`, `autocapture`, `disable_session_recording`, and every other `posthog.init` option — is forwarded to `posthog.init` verbatim.
|
|
72
|
+
|
|
14
73
|
## Vercel Web Analytics
|
|
15
74
|
|
|
16
|
-
|
|
75
|
+
Add `vercel()` to include [Vercel Web Analytics](https://vercel.com/docs/analytics). Blume renders Vercel's official Astro component, which injects the first-party script served from your own domain once Web Analytics is enabled for the project in the Vercel dashboard.
|
|
17
76
|
|
|
18
77
|
```ts blume.config.ts lineNumbers
|
|
19
|
-
analytics:
|
|
20
|
-
vercel: true,
|
|
21
|
-
}
|
|
78
|
+
analytics: [vercel()],
|
|
22
79
|
```
|
|
23
80
|
|
|
24
|
-
No keys are needed — the script reports to the project it's deployed under. This only collects data on Vercel deployments, where the `/_vercel/insights` endpoint exists.
|
|
81
|
+
No keys are needed — the script reports to the project it's deployed under. This only collects data on Vercel deployments, where the `/_vercel/insights` endpoint exists. Any option you pass is forwarded to the component as a prop (`mode`, `debug`, `endpoint`, `scriptSrc`, …); `beforeSend` is a function and can't travel through config, so assign `window.webAnalyticsBeforeSend` from a `script()` adapter instead.
|
|
25
82
|
|
|
26
83
|
## Cloudflare Web Analytics
|
|
27
84
|
|
|
28
|
-
[Cloudflare Web Analytics](https://developers.cloudflare.com/web-analytics/) has two setups, and only one of them needs
|
|
85
|
+
[Cloudflare Web Analytics](https://developers.cloudflare.com/web-analytics/) has two setups, and only one of them needs an adapter.
|
|
29
86
|
|
|
30
|
-
**Proxied zone (automatic setup).** If Cloudflare serves your site — a Worker with a custom domain, Pages, or any zone with the orange cloud on — enable Web Analytics for the zone in the Cloudflare dashboard and stop there. Cloudflare injects the beacon at the edge, so leave `
|
|
87
|
+
**Proxied zone (automatic setup).** If Cloudflare serves your site — a Worker with a custom domain, Pages, or any zone with the orange cloud on — enable Web Analytics for the zone in the Cloudflare dashboard and stop there. Cloudflare injects the beacon at the edge, so leave `cloudflare()` out; listing it as well would count every pageview twice.
|
|
31
88
|
|
|
32
89
|
**Any other host (manual setup).** For a site Cloudflare doesn't proxy, add the site under Web Analytics in the dashboard, copy the token out of the JS snippet it gives you (the `token` inside `data-cf-beacon`), and pass it here. Blume renders the same beacon tag the snippet does.
|
|
33
90
|
|
|
34
91
|
```ts blume.config.ts lineNumbers
|
|
35
|
-
analytics:
|
|
36
|
-
cloudflare
|
|
92
|
+
analytics: [
|
|
93
|
+
cloudflare({
|
|
37
94
|
token: "0123456789abcdef0123456789abcdef",
|
|
38
|
-
},
|
|
39
|
-
|
|
95
|
+
}),
|
|
96
|
+
],
|
|
40
97
|
```
|
|
41
98
|
|
|
42
|
-
The
|
|
99
|
+
The whole option object becomes the beacon's `data-cf-beacon` JSON, so any other beacon setting (`spa`, …) passes straight through.
|
|
43
100
|
|
|
44
|
-
##
|
|
101
|
+
## Google Analytics 4
|
|
45
102
|
|
|
46
|
-
|
|
103
|
+
Pass the **measurement ID** of your GA4 web data stream (`G-…`, under the stream's details in the property's Admin → Data Streams) to `googleAnalytics()`. Blume renders the Google tag exactly as the stream's install instructions do: the async `gtag.js` loader plus the `dataLayer` bootstrap and `config` call.
|
|
47
104
|
|
|
48
105
|
```ts blume.config.ts lineNumbers
|
|
49
|
-
analytics:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
},
|
|
54
|
-
|
|
106
|
+
analytics: [
|
|
107
|
+
googleAnalytics({
|
|
108
|
+
id: "G-XXXXXXXXXX",
|
|
109
|
+
anonymize_ip: true, // optional: any other `config` parameter
|
|
110
|
+
}),
|
|
111
|
+
],
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
`id` is the one option Blume maps. Anything else you pass rides on the `gtag('config', …)` call verbatim (`send_page_view`, `cookie_domain`, `debug_mode`, …). GA4's enhanced measurement counts history changes as page views by default, so client-side navigations are tracked without any extra setup. Google Analytics takes a day or two to show new data; the [Google Analytics Debugger](https://chrome.google.com/webstore/detail/google-analytics-debugger/jnkmfdileelhofjcijamephohjechhna) extension shows requests as they happen.
|
|
115
|
+
|
|
116
|
+
## Google Tag Manager
|
|
117
|
+
|
|
118
|
+
Pass your **container ID** (`GTM-…`, shown in the workspace header) to `googleTagManager()`. Blume renders the `<head>` half of the container snippet; the `<noscript>` iframe is for browsers without JavaScript, which never run analytics anyway.
|
|
119
|
+
|
|
120
|
+
```ts blume.config.ts lineNumbers
|
|
121
|
+
analytics: [
|
|
122
|
+
googleTagManager({
|
|
123
|
+
id: "GTM-XXXXXXX",
|
|
124
|
+
dataLayer: "dataLayer", // optional, this is the default
|
|
125
|
+
}),
|
|
126
|
+
],
|
|
55
127
|
```
|
|
56
128
|
|
|
57
|
-
|
|
129
|
+
Which tags fire, and on what, is the container's configuration. Client-side navigations reach the container as history changes, so fire pageview tags from a **History Change** trigger rather than the page-load one. Cookie consent banners are yours to set up in the container too.
|
|
130
|
+
|
|
131
|
+
## Plausible
|
|
132
|
+
|
|
133
|
+
Pass the **domain** you added in [Plausible](https://plausible.io) to `plausible()`. For a self-hosted or proxied instance, set `host` to its origin; the default is Plausible Cloud.
|
|
134
|
+
|
|
135
|
+
```ts blume.config.ts lineNumbers
|
|
136
|
+
analytics: [
|
|
137
|
+
plausible({
|
|
138
|
+
domain: "docs.example.com",
|
|
139
|
+
host: "https://plausible.example.com", // optional, defaults to https://plausible.io
|
|
140
|
+
}),
|
|
141
|
+
],
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
`domain` becomes `data-domain` and `host` picks where `/js/script.js` loads from. Any other option becomes its own `data-` attribute on the tag (`api: "/api/event"` → `data-api`). Script variants with extra behavior baked into the filename (`script.outbound-links.js`, …) are a different tag; load those with [`script()`](#custom-scripts).
|
|
145
|
+
|
|
146
|
+
## Fathom
|
|
147
|
+
|
|
148
|
+
Pass your **site ID** (from the site's script settings in [Fathom](https://usefathom.com)) to `fathom()`.
|
|
149
|
+
|
|
150
|
+
```ts blume.config.ts lineNumbers
|
|
151
|
+
analytics: [
|
|
152
|
+
fathom({
|
|
153
|
+
site: "ABCDEFGH",
|
|
154
|
+
"honor-dnt": "true", // optional: any other `data-` setting
|
|
155
|
+
}),
|
|
156
|
+
],
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`site` becomes `data-site`. Any other option becomes its own `data-` attribute on the tag (`honor-dnt`, `excluded-domains`, `canonical`, …), as strings. `spa` defaults to `"auto"` so Fathom counts the client router's navigations; pass your own `spa` value to override it.
|
|
160
|
+
|
|
161
|
+
## Pirsch
|
|
162
|
+
|
|
163
|
+
Pass your **identification code** (Settings → Developer → Identification Code in [Pirsch](https://pirsch.io)) to `pirsch()`.
|
|
164
|
+
|
|
165
|
+
```ts blume.config.ts lineNumbers
|
|
166
|
+
analytics: [
|
|
167
|
+
pirsch({
|
|
168
|
+
code: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
169
|
+
}),
|
|
170
|
+
],
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
`code` becomes `data-code`, and Blume gives the tag the `pianjs` id Pirsch's script finds itself by. Any other option becomes its own `data-` attribute (`dev`, `exclude`, `include`, `domain`, `endpoint`, …).
|
|
174
|
+
|
|
175
|
+
## Mixpanel
|
|
176
|
+
|
|
177
|
+
Pass your **project token** (project settings → Access Keys in [Mixpanel](https://mixpanel.com)) to `mixpanel()`. If the project uses EU or India data residency, set `region` to match, or Mixpanel drops the events.
|
|
178
|
+
|
|
179
|
+
```ts blume.config.ts lineNumbers
|
|
180
|
+
analytics: [
|
|
181
|
+
mixpanel({
|
|
182
|
+
token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
183
|
+
region: "eu", // optional: "us" (default), "eu", or "in"
|
|
184
|
+
}),
|
|
185
|
+
],
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
`token` and `region` are the options Blume maps (`region` becomes `api_host`). Blume also sets `track_pageview` to `"url-with-path-and-query-string"`, so the library tracks each navigation itself. Anything else you pass — including `track_pageview` — is forwarded to `mixpanel.init` verbatim (`persistence`, `autocapture`, `record_sessions_percent`, …).
|
|
189
|
+
|
|
190
|
+
## Amplitude
|
|
191
|
+
|
|
192
|
+
Pass your **project API key** (project settings in [Amplitude](https://amplitude.com)) to `amplitude()`. Blume renders the Browser SDK's script-loader snippet: the keyed SDK bundle plus the `init` call.
|
|
193
|
+
|
|
194
|
+
```ts blume.config.ts lineNumbers
|
|
195
|
+
analytics: [
|
|
196
|
+
amplitude({
|
|
197
|
+
key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
198
|
+
serverZone: "EU", // optional: any other `init` option
|
|
199
|
+
}),
|
|
200
|
+
],
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`key` is the one option Blume maps. The `init` options start from what the dashboard snippet ships — `autocapture: true` and `fetchRemoteConfig: true` — and anything else you pass is merged over them verbatim. Autocapture covers page views and history changes, so client-side navigations count.
|
|
204
|
+
|
|
205
|
+
## Segment
|
|
206
|
+
|
|
207
|
+
Pass the **write key** of your JavaScript source in [Segment](https://segment.com) to `segment()`. If you serve analytics.js from a [custom domain](https://segment.com/docs/connections/sources/custom-domain/) to sidestep ad blockers, set `cdn` to that origin.
|
|
208
|
+
|
|
209
|
+
```ts blume.config.ts lineNumbers
|
|
210
|
+
analytics: [
|
|
211
|
+
segment({
|
|
212
|
+
key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
213
|
+
cdn: "https://cdn.example.com", // optional, defaults to https://cdn.segment.com
|
|
214
|
+
}),
|
|
215
|
+
],
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
`key` and `cdn` are the options Blume maps: the snippet loads the library from `cdn` and tells it to fetch its integrations from there too. Anything else you pass is forwarded as the `analytics.load` options verbatim (`integrations`, …).
|
|
219
|
+
|
|
220
|
+
## Hightouch
|
|
221
|
+
|
|
222
|
+
Pass the **write key** of your event source in [Hightouch](https://hightouch.com) to `hightouch()`. The events API host defaults to the US East region; set `host` (without a scheme) if your workspace uses another.
|
|
223
|
+
|
|
224
|
+
```ts blume.config.ts lineNumbers
|
|
225
|
+
analytics: [
|
|
226
|
+
hightouch({
|
|
227
|
+
key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
|
|
228
|
+
host: "us-east-1.hightouch-events.com", // optional, this is the default
|
|
229
|
+
}),
|
|
230
|
+
],
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
`key` and `host` are the options Blume maps (`host` becomes `apiHost`). Anything else you pass is forwarded as the `htevents.load` options verbatim.
|
|
234
|
+
|
|
235
|
+
## Heap
|
|
236
|
+
|
|
237
|
+
Pass your **app ID** (the environment ID under the project's install settings in [Heap](https://heap.io)) to `heap()`.
|
|
238
|
+
|
|
239
|
+
```ts blume.config.ts lineNumbers
|
|
240
|
+
analytics: [
|
|
241
|
+
heap({
|
|
242
|
+
id: "1234567890",
|
|
243
|
+
disableTextCapture: true, // optional: any other `heap.load` option
|
|
244
|
+
}),
|
|
245
|
+
],
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
`id` is the one option Blume maps. Anything else you pass becomes the config object of `heap.load` verbatim.
|
|
249
|
+
|
|
250
|
+
## Hotjar
|
|
251
|
+
|
|
252
|
+
Pass your **site ID** (the number in the site's tracking code in [Hotjar](https://hotjar.com)) to `hotjar()`.
|
|
253
|
+
|
|
254
|
+
```ts blume.config.ts lineNumbers
|
|
255
|
+
analytics: [
|
|
256
|
+
hotjar({
|
|
257
|
+
id: 1234567,
|
|
258
|
+
version: 6, // optional, this is the default
|
|
259
|
+
}),
|
|
260
|
+
],
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
`id` is `hjid` and `version` is `hjsv` in Hotjar's tracking code; the adapter takes nothing else.
|
|
264
|
+
|
|
265
|
+
## Microsoft Clarity
|
|
266
|
+
|
|
267
|
+
Pass your **project ID** (from the project's tracking code in [Clarity](https://clarity.microsoft.com)) to `clarity()`.
|
|
268
|
+
|
|
269
|
+
```ts blume.config.ts lineNumbers
|
|
270
|
+
analytics: [
|
|
271
|
+
clarity({
|
|
272
|
+
id: "xxxxxxxxxx",
|
|
273
|
+
}),
|
|
274
|
+
],
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
The adapter takes nothing else; Clarity's settings live in its dashboard.
|
|
278
|
+
|
|
279
|
+
## LogRocket
|
|
280
|
+
|
|
281
|
+
Pass your **app ID** (`org/app`, from the project settings in [LogRocket](https://logrocket.com)) to `logrocket()`. Blume renders the install snippet: the SDK plus the guarded `LogRocket.init` call.
|
|
282
|
+
|
|
283
|
+
```ts blume.config.ts lineNumbers
|
|
284
|
+
analytics: [
|
|
285
|
+
logrocket({
|
|
286
|
+
id: "your-org/your-app",
|
|
287
|
+
release: "1.2.0", // optional: any other `init` option
|
|
288
|
+
}),
|
|
289
|
+
],
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
`id` is the one option Blume maps. Anything else you pass is forwarded to `LogRocket.init` verbatim (`release`, `console`, `network`, `dom`, …). A request or response sanitizer is a function and can't travel through config; for those, drop the adapter and call `LogRocket.init` yourself from a [`script()`](#custom-scripts) adapter.
|
|
293
|
+
|
|
294
|
+
## Clearbit
|
|
295
|
+
|
|
296
|
+
Pass your **publishable API key** (`pk_…`) to `clearbit()`. Blume renders the Clearbit tag, which loads whatever tags — Reveal, forms — you manage in Clearbit.
|
|
297
|
+
|
|
298
|
+
```ts blume.config.ts lineNumbers
|
|
299
|
+
analytics: [
|
|
300
|
+
clearbit({
|
|
301
|
+
key: "pk_xxxxxxxxxxxxxxxx",
|
|
302
|
+
}),
|
|
303
|
+
],
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
The adapter takes nothing else.
|
|
307
|
+
|
|
308
|
+
## Adobe Analytics
|
|
309
|
+
|
|
310
|
+
Pass the **embed script URL** of your Launch (Adobe Experience Platform Tags) environment to `adobe()`. Copy it from the environment's install instructions under Environments in Data Collection; the production one looks like `https://assets.adobedtm.com/…/launch-….min.js`.
|
|
311
|
+
|
|
312
|
+
```ts blume.config.ts lineNumbers
|
|
313
|
+
analytics: [
|
|
314
|
+
adobe({
|
|
315
|
+
url: "https://assets.adobedtm.com/xxxxxxxx/launch-xxxxxxxx.min.js",
|
|
316
|
+
}),
|
|
317
|
+
],
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
Blume loads the script asynchronously; what it tracks is the property's rules. Client-side navigations don't reload the page, so give the property a rule on history changes (or call `_satellite.track` from a [`script()`](#custom-scripts) adapter).
|
|
58
321
|
|
|
59
322
|
## Custom scripts
|
|
60
323
|
|
|
61
|
-
Use `
|
|
62
|
-
|
|
63
|
-
```ts blume.config.ts lineNumbers
|
|
64
|
-
analytics:
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
attributes: { "data-site": "ABCDEFG" },
|
|
77
|
-
},
|
|
78
|
-
// An inline snippet
|
|
79
|
-
{
|
|
80
|
-
content: "console.log('analytics ready')",
|
|
81
|
-
},
|
|
82
|
-
],
|
|
83
|
-
}
|
|
324
|
+
Use `script()` to load any provider without an adapter, or a provider's tag in a form its adapter doesn't render. Each one renders one `<script>` tag and must set **exactly one** of `src` (external) or `content` (inline).
|
|
325
|
+
|
|
326
|
+
```ts blume.config.ts lineNumbers
|
|
327
|
+
analytics: [
|
|
328
|
+
// Umami
|
|
329
|
+
script({
|
|
330
|
+
src: "https://cloud.umami.is/script.js",
|
|
331
|
+
strategy: "defer",
|
|
332
|
+
attributes: { "data-website-id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" },
|
|
333
|
+
}),
|
|
334
|
+
// An inline snippet
|
|
335
|
+
script({
|
|
336
|
+
content: "console.log('analytics ready')",
|
|
337
|
+
}),
|
|
338
|
+
],
|
|
84
339
|
```
|
|
85
340
|
|
|
86
341
|
`attributes` is a map of extra HTML attributes (`data-*`, `id`, …) spread onto the tag, and `strategy` adds `async` or `defer` to external scripts.
|
|
87
342
|
|
|
88
343
|
## Options
|
|
89
344
|
|
|
90
|
-
| Option | Default | Description |
|
|
91
|
-
| --- | --- | --- |
|
|
92
|
-
| `
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
| `
|
|
98
|
-
| `
|
|
99
|
-
| `
|
|
100
|
-
|
|
101
|
-
|
|
345
|
+
| Adapter | Option | Default | Description |
|
|
346
|
+
| --- | --- | --- | --- |
|
|
347
|
+
| `adobe()` | `url` | — | Launch environment embed script URL. Required. |
|
|
348
|
+
| `amplitude()` | `key` | — | Amplitude project API key. Required. |
|
|
349
|
+
| `amplitude()` | anything else | `autocapture: true`, `fetchRemoteConfig: true` | Merged into the `amplitude.init` options verbatim. |
|
|
350
|
+
| `clarity()` | `id` | — | Clarity project ID. Required. |
|
|
351
|
+
| `clearbit()` | `key` | — | Clearbit publishable API key. Required. |
|
|
352
|
+
| `cloudflare()` | `token` | — | Cloudflare Web Analytics site token (manual setup). Required. |
|
|
353
|
+
| `cloudflare()` | anything else | — | Forwarded in the beacon's `data-cf-beacon` JSON verbatim. |
|
|
354
|
+
| `fathom()` | `site` | — | Fathom site ID. Required. |
|
|
355
|
+
| `fathom()` | `spa` | `"auto"` | Fathom's history-change tracking (`data-spa`). |
|
|
356
|
+
| `fathom()` | anything else | — | Rendered as a `data-` attribute on the tag. |
|
|
357
|
+
| `googleAnalytics()` | `id` | — | GA4 measurement ID. Required. |
|
|
358
|
+
| `googleAnalytics()` | anything else | — | Forwarded on the `gtag('config', …)` call verbatim. |
|
|
359
|
+
| `googleTagManager()` | `id` | — | Tag Manager container ID. Required. |
|
|
360
|
+
| `googleTagManager()` | `dataLayer` | `dataLayer` | Name of the data layer global the container reads. |
|
|
361
|
+
| `heap()` | `id` | — | Heap app ID. Required. |
|
|
362
|
+
| `heap()` | anything else | — | Forwarded as the `heap.load` config verbatim. |
|
|
363
|
+
| `hightouch()` | `key` | — | Hightouch event source write key. Required. |
|
|
364
|
+
| `hightouch()` | `host` | `us-east-1.hightouch-events.com` | Events API host, without a scheme. |
|
|
365
|
+
| `hightouch()` | anything else | — | Forwarded as the `htevents.load` options verbatim. |
|
|
366
|
+
| `hotjar()` | `id` | — | Hotjar site ID (`hjid`). Required. |
|
|
367
|
+
| `hotjar()` | `version` | `6` | Tracking-code version (`hjsv`). |
|
|
368
|
+
| `logrocket()` | `id` | — | LogRocket app ID (`org/app`). Required. |
|
|
369
|
+
| `logrocket()` | anything else | — | Forwarded to `LogRocket.init` verbatim. |
|
|
370
|
+
| `mixpanel()` | `token` | — | Mixpanel project token. Required. |
|
|
371
|
+
| `mixpanel()` | `region` | `us` | Data residency region: `us`, `eu`, or `in`. |
|
|
372
|
+
| `mixpanel()` | anything else | `track_pageview: "url-with-path-and-query-string"` | Merged into the `mixpanel.init` options verbatim. |
|
|
373
|
+
| `pirsch()` | `code` | — | Pirsch identification code. Required. |
|
|
374
|
+
| `pirsch()` | anything else | — | Rendered as a `data-` attribute on the tag. |
|
|
375
|
+
| `plausible()` | `domain` | — | The site's domain in Plausible. Required. |
|
|
376
|
+
| `plausible()` | `host` | `https://plausible.io` | Origin of a self-hosted or proxied instance. |
|
|
377
|
+
| `plausible()` | anything else | — | Rendered as a `data-` attribute on the tag. |
|
|
378
|
+
| `posthog()` | `key` | — | PostHog project API key. Required. |
|
|
379
|
+
| `posthog()` | `host` | `https://us.i.posthog.com` | PostHog ingestion host (EU Cloud or self-hosted). |
|
|
380
|
+
| `posthog()` | anything else | — | Forwarded to `posthog.init` verbatim. |
|
|
381
|
+
| `segment()` | `key` | — | Segment source write key. Required. |
|
|
382
|
+
| `segment()` | `cdn` | `https://cdn.segment.com` | Origin of a custom domain proxying Segment's CDN. |
|
|
383
|
+
| `segment()` | anything else | — | Forwarded as the `analytics.load` options verbatim. |
|
|
384
|
+
| `vercel()` | `mode`, `debug`, … | — | Forwarded to the official Astro component as props. |
|
|
385
|
+
| `script()` | `src` | — | External script URL. Mutually exclusive with `content`. |
|
|
386
|
+
| `script()` | `content` | — | Inline script body. Mutually exclusive with `src`. |
|
|
387
|
+
| `script()` | `strategy` | — | `async` or `defer` for an external script. |
|
|
388
|
+
| `script()` | `attributes` | — | Extra HTML attributes spread onto the `<script>` tag. |
|
|
389
|
+
|
|
390
|
+
## Custom events
|
|
391
|
+
|
|
392
|
+
Blume's page feedback sends a custom event through every configured adapter that has a client API — PostHog, Mixpanel, Heap, Segment, Hightouch, Amplitude, LogRocket, Adobe, Google Analytics, Google Tag Manager (as a `{ event }` push on `window.dataLayer`), Plausible, Fathom, Pirsch, Clarity, Hotjar, and Vercel. Cloudflare and Clearbit have no event API. Every event also fires as a `blume:track` CustomEvent on `window` with `{ event, props }` in `detail`, so a `script()` adapter can forward it anywhere else. For deploying your built site, see [Deployment](/docs/deployment).
|