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>
This commit is contained in:
parent
29da199e9a
commit
cf621340b0
10 changed files with 138 additions and 0 deletions
5
.changeset/small-wombats-know.md
Normal file
5
.changeset/small-wombats-know.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
'astro': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix miss a head when the templaterender has a promise
|
|
@ -50,6 +50,9 @@ export class AstroComponentInstance {
|
||||||
value = await value;
|
value = await value;
|
||||||
}
|
}
|
||||||
if (isHeadAndContent(value)) {
|
if (isHeadAndContent(value)) {
|
||||||
|
if (this.result.extraHead.length === 0 && value.head) {
|
||||||
|
yield renderChild(value.head);
|
||||||
|
}
|
||||||
yield* value.content;
|
yield* value.content;
|
||||||
} else {
|
} else {
|
||||||
yield* renderChild(value);
|
yield* renderChild(value);
|
||||||
|
|
46
packages/integrations/mdx/test/astro-content-css.test.js
Normal file
46
packages/integrations/mdx/test/astro-content-css.test.js
Normal file
|
@ -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');
|
||||||
|
});
|
||||||
|
})
|
||||||
|
})
|
11
packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs
vendored
Normal file
11
packages/integrations/mdx/test/fixtures/astro-content-css/astro.config.mjs
vendored
Normal file
|
@ -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()]
|
||||||
|
});
|
9
packages/integrations/mdx/test/fixtures/astro-content-css/package.json
vendored
Normal file
9
packages/integrations/mdx/test/fixtures/astro-content-css/package.json
vendored
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"name": "@test/astro-content-css",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"astro": "workspace:*",
|
||||||
|
"@astrojs/mdx": "workspace:*"
|
||||||
|
}
|
||||||
|
}
|
12
packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts
vendored
Normal file
12
packages/integrations/mdx/test/fixtures/astro-content-css/src/content/config.ts
vendored
Normal file
|
@ -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,
|
||||||
|
};
|
|
@ -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>
|
|
@ -0,0 +1,9 @@
|
||||||
|
---
|
||||||
|
title: 'First component'
|
||||||
|
---
|
||||||
|
|
||||||
|
import FirstDynamicComponentWithJS from './FirstComponentWithJS.astro';
|
||||||
|
|
||||||
|
<FirstDynamicComponentWithJS text={props.mdProps} />
|
||||||
|
|
||||||
|
Additional text from mdx 'first-component-with-js'
|
16
packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro
vendored
Normal file
16
packages/integrations/mdx/test/fixtures/astro-content-css/src/pages/index.astro
vendored
Normal file
|
@ -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>
|
9
pnpm-lock.yaml
generated
9
pnpm-lock.yaml
generated
|
@ -4244,6 +4244,15 @@ importers:
|
||||||
specifier: ^4.3.1
|
specifier: ^4.3.1
|
||||||
version: 4.3.1(@types/node@18.16.3)(sass@1.52.2)
|
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:
|
packages/integrations/mdx/test/fixtures/css-head-mdx:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@astrojs/mdx':
|
'@astrojs/mdx':
|
||||||
|
|
Loading…
Add table
Reference in a new issue