diff --git a/src/integration.ts b/src/integration.ts index a20190894c..cac1d95f60 100644 --- a/src/integration.ts +++ b/src/integration.ts @@ -574,6 +574,7 @@ export function createDocsSite(options: CreateDocsSiteOptions = {} as CreateDocs } process.env.DOCS_BUILD_MODE = mode; process.env.DOCS_BASE = base ? base.replace(/\/$/, '') : ''; + process.env.DOCS_TRAILING_SLASH = (astroExtra.trailingSlash as string) ?? 'ignore'; if (!process.env.DOCS_ENV) { process.env.DOCS_ENV = mode; } diff --git a/src/plugins/remark-md-links.ts b/src/plugins/remark-md-links.ts index 8fe567d3f9..378900eb50 100644 --- a/src/plugins/remark-md-links.ts +++ b/src/plugins/remark-md-links.ts @@ -2,10 +2,15 @@ * Remark plugin: rewrite relative .md links to Astro-compatible URLs. * * Transforms `[label](./some-page.md)` or `[label](../folder/page.md#section)` - * into root-relative URLs like `/products/.../some-page/` (with DOCS_BASE prepended). + * into root-relative URLs like `/products/.../some-page` (with DOCS_BASE prepended). * * Also prepends DOCS_BASE to bare root-relative internal links (e.g. `/grids/grid/...`) * that are already absolute but missing the site base path. + * + * Respects trailing slash preference via DOCS_TRAILING_SLASH env var, which can be 'always', 'never', or 'ignore'. + * By default both Angular and Xplat astro docs use trailing slash 'never'. + * + * Non-relative links (starting with http://, https://, /, #, or mailto:) and non-.md links are left unchanged. */ import { visit } from 'unist-util-visit'; @@ -36,7 +41,9 @@ function rewriteMdLink(url: string, filePath: string, docsDir: string): string { const slug = rel.endsWith('.md') ? rel.slice(0, -3) : rel; const docsBase = (process.env.DOCS_BASE ?? '').replace(/\/$/, ''); - return docsBase + '/' + slug.toLowerCase() + '/' + suffix; + const trailingSlash = process.env.DOCS_TRAILING_SLASH ?? 'ignore'; + const trail = trailingSlash === 'never' ? '' : '/'; + return docsBase + '/' + slug.toLowerCase() + trail + suffix; } /** Remark plugin that rewrites relative .md links, prepends DOCS_BASE, and fixes relative image paths. */