summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.changeset/new-knives-raise.md5
-rw-r--r--packages/astro/src/runtime/server/index.ts3
-rw-r--r--packages/astro/test/0-css.test.js7
3 files changed, 14 insertions, 1 deletions
diff --git a/.changeset/new-knives-raise.md b/.changeset/new-knives-raise.md
new file mode 100644
index 000000000..7d1fd490a
--- /dev/null
+++ b/.changeset/new-knives-raise.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+Fix issue where generated `link` tags would have an invalid closing tag
diff --git a/packages/astro/src/runtime/server/index.ts b/packages/astro/src/runtime/server/index.ts
index e3c280642..0892f2227 100644
--- a/packages/astro/src/runtime/server/index.ts
+++ b/packages/astro/src/runtime/server/index.ts
@@ -715,5 +715,8 @@ function renderElement(
children = defineScriptVars(defineVars) + '\n' + children;
}
}
+ if ((children == null || children == '') && voidElementNames.test(name)) {
+ return `<${name}${internalSpreadAttributes(props, shouldEscape)} />`;
+ }
return `<${name}${internalSpreadAttributes(props, shouldEscape)}>${children}</${name}>`;
}
diff --git a/packages/astro/test/0-css.test.js b/packages/astro/test/0-css.test.js
index 3d91b6135..63e6bfe67 100644
--- a/packages/astro/test/0-css.test.js
+++ b/packages/astro/test/0-css.test.js
@@ -18,6 +18,7 @@ describe('CSS', function () {
// test HTML and CSS contents for accuracy
describe('build', () => {
let $;
+ let html;
let bundledCSS;
before(async () => {
@@ -25,7 +26,7 @@ describe('CSS', function () {
await fixture.build();
// get bundled CSS (will be hashed, hence DOM query)
- const html = await fixture.readFile('/index.html');
+ html = await fixture.readFile('/index.html');
$ = cheerio.load(html);
const bundledCSSHREF = $('link[rel=stylesheet][href^=/assets/]').attr('href');
bundledCSS = (await fixture.readFile(bundledCSSHREF.replace(/^\/?/, '/')))
@@ -49,6 +50,10 @@ describe('CSS', function () {
expect(bundledCSS).to.include(expected);
});
+ it('Generated link tags are void elements', async () => {
+ expect(html).to.not.include("</link>");
+ });
+
it('No <style> skips scoping', async () => {
// Astro component without <style> should not include scoped class
expect($('#no-scope').attr('class')).to.equal(undefined);