Ensure base configuration appended to content collection styles (#6182)

* Fix, base appended to propagated scripts

* Test scripts
This commit is contained in:
Matthew Phillips 2023-02-08 17:15:33 -05:00 committed by GitHub
parent e4b2a2e3c7
commit 938ad514cd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 108 additions and 2 deletions

View file

@ -0,0 +1,5 @@
---
'astro': patch
---
Ensure base configuration appended to content collection styles

View file

@ -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: '',

View file

@ -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'))
});
});
});

View file

@ -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
}
}
});

View file

@ -0,0 +1,9 @@
{
"name": "@test/content-collections-base",
"version": "0.0.0",
"private": true,
"dependencies": {
"astro": "workspace:*",
"@astrojs/mdx": "workspace:*"
}
}

View file

@ -0,0 +1,7 @@
<style>
div { color: blue; }
</style>
<script>
console.log('hi');
</script>
<div>Testing</div>

View file

@ -0,0 +1,12 @@
import { z, defineCollection } from 'astro:content';
const docs = defineCollection({
schema: z.object({
title: z.string(),
}),
});
export const collections = {
docs,
}

View file

@ -0,0 +1,11 @@
---
title: One
---
import One from '../../components/One.astro';
# Title
stuff
<One />

View file

@ -0,0 +1,17 @@
---
import { getEntryBySlug } from 'astro:content';
const entry = await getEntryBySlug('docs', 'one');
const { Content } = await entry.render();
---
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<title>It's content time!</title>
</head>
<body>
<main>
<Content />
</main>
</body>
</html>

View file

@ -1663,6 +1663,14 @@ importers:
'@astrojs/mdx': link:../../../../integrations/mdx
astro: link:../../..
packages/astro/test/fixtures/content-collections-base:
specifiers:
'@astrojs/mdx': workspace:*
astro: workspace:*
dependencies:
'@astrojs/mdx': link:../../../../integrations/mdx
astro: link:../../..
packages/astro/test/fixtures/content-ssr-integration:
specifiers:
'@astrojs/mdx': workspace:*