diff --git a/.changeset/late-poets-own.md b/.changeset/late-poets-own.md new file mode 100644 index 000000000000..1055bc71af05 --- /dev/null +++ b/.changeset/late-poets-own.md @@ -0,0 +1,5 @@ +--- +'astro': patch +--- + +Ensure base configuration appended to content collection styles diff --git a/packages/astro/src/content/vite-plugin-content-assets.ts b/packages/astro/src/content/vite-plugin-content-assets.ts index 74378f4e0f50..c09162177eda 100644 --- a/packages/astro/src/content/vite-plugin-content-assets.ts +++ b/packages/astro/src/content/vite-plugin-content-assets.ts @@ -98,6 +98,7 @@ export function astroConfigBuildPlugin( }, 'build:post': ({ ssrOutputs, clientOutputs, mutate }) => { const outputs = ssrOutputs.flatMap((o) => o.output); + const prependBase = (src: string) => prependForwardSlash(npath.posix.join(options.settings.config.base, src)); for (const chunk of outputs) { if ( chunk.type === 'chunk' && @@ -133,7 +134,7 @@ export function astroConfigBuildPlugin( if (entryCSS.size) { newCode = newCode.replace( JSON.stringify(LINKS_PLACEHOLDER), - JSON.stringify([...entryCSS]) + JSON.stringify(Array.from(entryCSS).map(prependBase)) ); } if (entryScripts.size) { @@ -153,7 +154,7 @@ export function astroConfigBuildPlugin( JSON.stringify( [...entryFileNames].map((src) => ({ props: { - src: prependForwardSlash(npath.posix.join(options.settings.config.base, src)), + src: prependBase(src), type: 'module', }, children: '', diff --git a/packages/astro/test/content-collections.test.js b/packages/astro/test/content-collections.test.js index c8105184e83b..148fa01cad4f 100644 --- a/packages/astro/test/content-collections.test.js +++ b/packages/astro/test/content-collections.test.js @@ -243,4 +243,27 @@ describe('Content Collections', () => { } }); }); + + describe('Base configuration', () => { + let fixture; + + before(async () => { + fixture = await loadFixture({ + root: './fixtures/content-collections-base/', + }); + await fixture.build(); + }); + + it('Includes base in links', async () => { + const html = await fixture.readFile('/docs/index.html'); + const $ = cheerio.load(html); + expect($('link').attr('href')).to.satisfies(a => a.startsWith('/docs')) + }); + + it('Includes base in hoisted scripts', async () => { + const html = await fixture.readFile('/docs/index.html'); + const $ = cheerio.load(html); + expect($('script').attr('src')).to.satisfies(a => a.startsWith('/docs')) + }); + }); }); diff --git a/packages/astro/test/fixtures/content-collections-base/astro.config.mjs b/packages/astro/test/fixtures/content-collections-base/astro.config.mjs new file mode 100644 index 000000000000..b11c49cea26b --- /dev/null +++ b/packages/astro/test/fixtures/content-collections-base/astro.config.mjs @@ -0,0 +1,13 @@ +import { defineConfig } from 'astro/config'; +import mdx from '@astrojs/mdx'; + +// https://astro.build/config +export default defineConfig({ + base: '/docs', + integrations: [mdx()], + vite: { + build: { + assetsInlineLimit: 0 + } + } +}); diff --git a/packages/astro/test/fixtures/content-collections-base/package.json b/packages/astro/test/fixtures/content-collections-base/package.json new file mode 100644 index 000000000000..152a02919dae --- /dev/null +++ b/packages/astro/test/fixtures/content-collections-base/package.json @@ -0,0 +1,9 @@ +{ + "name": "@test/content-collections-base", + "version": "0.0.0", + "private": true, + "dependencies": { + "astro": "workspace:*", + "@astrojs/mdx": "workspace:*" + } +} diff --git a/packages/astro/test/fixtures/content-collections-base/src/components/One.astro b/packages/astro/test/fixtures/content-collections-base/src/components/One.astro new file mode 100644 index 000000000000..69dda4a61ecd --- /dev/null +++ b/packages/astro/test/fixtures/content-collections-base/src/components/One.astro @@ -0,0 +1,7 @@ + + +