summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar wulinsheng123 <409187100@qq.com> 2023-05-30 20:05:48 +0800
committerGravatar GitHub <noreply@github.com> 2023-05-30 08:05:48 -0400
commitcf621340b00fda441f4ef43196c0363d09eae70c (patch)
treee3fc963ba6dced58b7657b7cdedaed5c80f49c3b
parent29da199e9a11db7e7767e559d3344276f8b9a17e (diff)
downloadastro-cf621340b00fda441f4ef43196c0363d09eae70c.tar.gz
astro-cf621340b00fda441f4ef43196c0363d09eae70c.tar.zst
astro-cf621340b00fda441f4ef43196c0363d09eae70c.zip
Bug 6672 (#7062)
* fix miss a head when the templaterender has a promise * fix * add some test * test files move to md directory * fix add * delect file --------- Co-authored-by: wuls <linsheng.wu@beantechs.com>
-rw-r--r--.changeset/small-wombats-know.md5
-rw-r--r--packages/astro/src/runtime/server/render/astro/instance.ts3
-rw-r--r--packages/integrations/mdx/test/astro-content-css.test.js46
-rw-r--r--packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs11
-rw-r--r--packages/integrations/mdx/test/fixtures/astro-content-css/package.json9
-rw-r--r--packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts12
-rw-r--r--packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/FirstComponentWithJS.astro18
-rw-r--r--packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/first-component-with-js.mdx9
-rw-r--r--packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro16
-rw-r--r--pnpm-lock.yaml9
10 files changed, 138 insertions, 0 deletions
diff --git a/.changeset/small-wombats-know.md b/.changeset/small-wombats-know.md
new file mode 100644
index 000000000..ca826a1aa
--- /dev/null
+++ b/.changeset/small-wombats-know.md
@@ -0,0 +1,5 @@
+---
+'astro': patch
+---
+
+fix miss a head when the templaterender has a promise
diff --git a/packages/astro/src/runtime/server/render/astro/instance.ts b/packages/astro/src/runtime/server/render/astro/instance.ts
index ed5044575..abfcd94e8 100644
--- a/packages/astro/src/runtime/server/render/astro/instance.ts
+++ b/packages/astro/src/runtime/server/render/astro/instance.ts
@@ -50,6 +50,9 @@ export class AstroComponentInstance {
value = await value;
}
if (isHeadAndContent(value)) {
+ if (this.result.extraHead.length === 0 && value.head) {
+ yield renderChild(value.head);
+ }
yield* value.content;
} else {
yield* renderChild(value);
diff --git a/packages/integrations/mdx/test/astro-content-css.test.js b/packages/integrations/mdx/test/astro-content-css.test.js
new file mode 100644
index 000000000..7168795cd
--- /dev/null
+++ b/packages/integrations/mdx/test/astro-content-css.test.js
@@ -0,0 +1,46 @@
+import { expect } from 'chai';
+import * as cheerio from 'cheerio';
+import { loadFixture } from '../../../astro/test/test-utils.js';
+import mdx from '@astrojs/mdx';
+
+describe('build css from the component', async () => {
+ let fixture;
+
+ before(async () => {
+ fixture = await loadFixture({ root: new URL('./fixtures/astro-content-css/', import.meta.url),integrations: [mdx()], });
+ await fixture.build();
+ });
+
+ describe('Build', () => {
+ before(async () => {
+ await fixture.build();
+ });
+
+ it('including css and js from the component in pro', async () => {
+ const html = await fixture.readFile('/index.html');
+ const $ = cheerio.load(html);
+ expect($('link[href$=".css"]').attr('href')).to.match(/^\/_astro\//);
+ expect($('script[src$=".js"]').attr('src')).to.match(/^\/_astro\//);
+ });
+ })
+
+ describe('Dev', () => {
+ let devServer
+ before(async () => {
+ devServer = await fixture.startDevServer();
+ });
+
+ after(async () => {
+ devServer.stop();
+ });
+
+ it('ncluding css and js from the component in Dev', async () => {
+ let res = await fixture.fetch(`/`);
+ expect(res.status).to.equal(200);
+ const html = await res.text();
+ const $ = cheerio.load(html);
+ expect($.html()).to.include('CornflowerBlue');
+ expect($('script[src$=".js"]').attr('src')).to.include('astro');
+ });
+ })
+})
diff --git a/packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs b/packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs
new file mode 100644
index 000000000..b67da09a9
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs
@@ -0,0 +1,11 @@
+import { defineConfig } from 'astro/config';
+
+import mdx from "@astrojs/mdx";
+
+// https://astro.build/config
+export default defineConfig({
+ build: {
+ format: 'file'
+ },
+ integrations: [mdx()]
+});
diff --git a/packages/integrations/mdx/test/fixtures/astro-content-css/package.json b/packages/integrations/mdx/test/fixtures/astro-content-css/package.json
new file mode 100644
index 000000000..8d436998c
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/astro-content-css/package.json
@@ -0,0 +1,9 @@
+{
+ "name": "@test/astro-content-css",
+ "version": "0.0.0",
+ "private": true,
+ "dependencies": {
+ "astro": "workspace:*",
+ "@astrojs/mdx": "workspace:*"
+ }
+}
diff --git a/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts b/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts
new file mode 100644
index 000000000..bf1a34c05
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts
@@ -0,0 +1,12 @@
+// 1. Import utilities from `astro:content`
+import { z, defineCollection } from 'astro:content';
+// 2. Define a schema for each collection you'd like to validate.
+const dynamicCollection = defineCollection({
+ schema: z.object({
+ title: z.string(),
+ }),
+});
+// 3. Export a single `collections` object to register your collection(s)
+export const collections = {
+ dynamic: dynamicCollection,
+};
diff --git a/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/FirstComponentWithJS.astro b/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/FirstComponentWithJS.astro
new file mode 100644
index 000000000..f3b588b42
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/FirstComponentWithJS.astro
@@ -0,0 +1,18 @@
+---
+const { text } = Astro.props;
+---
+<!DOCTYPE html>
+<html lang="en">
+ <head><meta charset="utf-8" /></head>
+ <body>
+ <div id="first">1st components with js. Props: {text}. <span>Styles</span>. JS: </div>
+ </body>
+</html>
+<script>
+ document.querySelector('#first').innerHTML += 'works';
+</script>
+<style>
+ #first > span {
+ color: CornflowerBlue;
+ }
+</style> \ No newline at end of file
diff --git a/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/first-component-with-js.mdx b/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/first-component-with-js.mdx
new file mode 100644
index 000000000..0abdfbe3a
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/astro-content-css/src/content/dynamic/first-component-with-js.mdx
@@ -0,0 +1,9 @@
+---
+title: 'First component'
+---
+
+import FirstDynamicComponentWithJS from './FirstComponentWithJS.astro';
+
+<FirstDynamicComponentWithJS text={props.mdProps} />
+
+Additional text from mdx 'first-component-with-js'
diff --git a/packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro b/packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro
new file mode 100644
index 000000000..63ea9ddbb
--- /dev/null
+++ b/packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro
@@ -0,0 +1,16 @@
+---
+import { getCollection } from 'astro:content';
+
+const entries = await getCollection('dynamic');
+---
+
+<!DOCTYPE html>
+<html lang="en">
+ <head><meta charset="utf-8" /></head>
+ <body>
+ {entries.map(async entry => {
+ const { Content } = await entry.render();
+ return <Content mdProps="work" />;
+ })}
+ </body>
+</html>
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 635c51a2f..54421c429 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -4244,6 +4244,15 @@ importers:
specifier: ^4.3.1
version: 4.3.1(@types/node@18.16.3)(sass@1.52.2)
+ packages/integrations/mdx/test/fixtures/astro-content-css:
+ dependencies:
+ '@astrojs/mdx':
+ specifier: workspace:*
+ version: link:../../..
+ astro:
+ specifier: workspace:*
+ version: link:../../../../../astro
+
packages/integrations/mdx/test/fixtures/css-head-mdx:
dependencies:
'@astrojs/mdx':