0
Fork 0
mirror of https://github.com/withastro/astro.git synced 2025-03-17 23:11:29 -05:00

fix(renderer): omitting internal symbol from mdx props (#10813)

This commit is contained in:
Xetera 2024-05-21 18:48:19 +03:00 committed by GitHub
parent fcd19fb8e2
commit 3cc3e2ccba
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 108 additions and 0 deletions

View file

@ -0,0 +1,5 @@
---
"@astrojs/mdx": patch
---
Omitting compiler-internal symbol from user components to fix breaking error messages

View file

@ -84,6 +84,8 @@ Did you forget to import the component or is it possible there is a typo?`);
}
if (typeof vnode.type === 'function') {
if (vnode.props[hasTriedRenderComponentSymbol]) {
// omitting compiler-internals from user components
delete vnode.props[hasTriedRenderComponentSymbol];
const output = await vnode.type(vnode.props ?? {});
if (output?.[AstroJSX] || !output) {
return await renderJSXVNode(result, output);

View file

@ -0,0 +1,6 @@
import mdx from '@astrojs/mdx';
import react from '@astrojs/react';
export default {
integrations: [mdx(), react()],
}

View file

@ -0,0 +1,11 @@
{
"name": "@test/mdx-plus-react-errors",
"private": true,
"dependencies": {
"@astrojs/mdx": "workspace:*",
"@astrojs/react": "workspace:*",
"astro": "workspace:*",
"react": "^18.3.1",
"react-dom": "^18.3.1"
}
}

View file

@ -0,0 +1,8 @@
import { useState } from "react";
export default function BrokenComponent() {
useState(0);
a;
return <p>Whoops!</p>;
};

View file

@ -0,0 +1,12 @@
import { z, defineCollection } from "astro:content";
const filesSchema = () => {
return z.object({});
};
const filesCollection = defineCollection({
type: "content",
schema: filesSchema(),
});
export const collections = { files: filesCollection, };

View file

@ -0,0 +1,4 @@
import BrokenComponent from '../../components/BrokenComponent'
<BrokenComponent {...props} />

View file

@ -0,0 +1,9 @@
---
import { getCollection } from "astro:content";
const files = await getCollection("files");
const { Content } = await files[0].render();
---
<Content />

View file

@ -0,0 +1,33 @@
import * as assert from 'node:assert/strict';
import { describe, it } from 'node:test';
import { loadFixture } from '../../../astro/test/test-utils.js';
function hookError() {
const error = console.error;
const errors = [];
console.error = function (...args) {
errors.push(args);
};
return () => {
console.error = error;
return errors;
};
}
describe('MDX and React with build errors', () => {
let fixture;
let unhook;
it('shows correct error messages on build error', async () => {
try {
fixture = await loadFixture({
root: new URL('./fixtures/mdx-plus-react-errors/', import.meta.url),
});
unhook = hookError();
await fixture.build();
} catch (err) {
assert.equal(err.message, 'a is not defined');
}
unhook();
});
});

18
pnpm-lock.yaml generated
View file

@ -4679,6 +4679,24 @@ importers:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
packages/integrations/mdx/test/fixtures/mdx-plus-react-errors:
dependencies:
'@astrojs/mdx':
specifier: workspace:*
version: link:../../..
'@astrojs/react':
specifier: workspace:*
version: link:../../../../react
astro:
specifier: workspace:*
version: link:../../../../../astro
react:
specifier: ^18.3.1
version: 18.3.1
react-dom:
specifier: ^18.3.1
version: 18.3.1(react@18.3.1)
packages/integrations/mdx/test/fixtures/mdx-vite-env-vars:
dependencies:
'@astrojs/mdx':