Skip to content

Commit

Permalink
An MDX test too
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewp committed Feb 10, 2023
1 parent b45cff2 commit fb6d334
Show file tree
Hide file tree
Showing 7 changed files with 56 additions and 8 deletions.
8 changes: 8 additions & 0 deletions packages/astro/src/runtime/server/render/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,14 @@ export function stringifyChunk(result: SSRResult, chunk: string | SlotString | R
break;
}

// Nested element inside of JSX during head buffering phase
case ScopeFlags.HeadBuffer: {
if(hasScopeFlag(result, ScopeFlags.JSX | ScopeFlags.HeadBuffer)) {
return "";
}
break;
}

// Astro.slots.render() should never render head content.
case ScopeFlags.RenderSlot | ScopeFlags.Astro:
case ScopeFlags.RenderSlot | ScopeFlags.Astro | ScopeFlags.JSX:
Expand Down
12 changes: 12 additions & 0 deletions packages/integrations/mdx/test/css-head-mdx.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,17 @@ describe('Head injection w/ MDX', () => {
const bodyLinks = $('body link[rel=stylesheet]');
expect(bodyLinks).to.have.a.lengthOf(0);
});

it('JSX component rendering Astro children within head buffering phase', async () => {
const html = await fixture.readFile('/posts/using-component/index.html');
// Using cheerio here because linkedom doesn't support head tag injection
const $ = cheerio.load(html);

const headLinks = $('head link[rel=stylesheet]');
expect(headLinks).to.have.a.lengthOf(1);

const bodyLinks = $('body link[rel=stylesheet]');
expect(bodyLinks).to.have.a.lengthOf(0);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
const { title } = Astro.props;
---
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
<style is:global>
@import "../styles/global.css";
</style>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<span>just a generic component</span>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
import Component from "./GenericComponent.astro";
---

<div>
<slot name="title" />
<slot name="intro" class="inline" />
<Component />
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
title: testing
---
import MDXWrapper from "../../components/MDXWrapper.astro";

<MDXWrapper>
<h1 slot="title">
testing
</h1>
<div slot="intro">
Intro
</div>
</MDXWrapper>
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
---
import BaseHead from "../components/BaseHead.astro";
export interface Props {
title: string;
}
Expand All @@ -9,14 +10,7 @@ const { title } = Astro.props;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="generator" content={Astro.generator} />
<title>{title}</title>
<style is:global>
@import "../styles/global.css";
</style>
<BaseHead title={title} />
</head>
<body>
<slot />
Expand Down

0 comments on commit fb6d334

Please sign in to comment.