diff --git a/.changeset/wild-mice-battle.md b/.changeset/wild-mice-battle.md new file mode 100644 index 000000000000..a20c38cd2ba5 --- /dev/null +++ b/.changeset/wild-mice-battle.md @@ -0,0 +1,5 @@ +--- +"@astrojs/mdx": patch +--- + +Omitting compiler-internal symbol from user components to fix breaking error messages diff --git a/packages/astro/src/runtime/server/jsx.ts b/packages/astro/src/runtime/server/jsx.ts index 81bae422f09a..b035d2b12c0b 100644 --- a/packages/astro/src/runtime/server/jsx.ts +++ b/packages/astro/src/runtime/server/jsx.ts @@ -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); diff --git a/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/astro.config.mjs b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/astro.config.mjs new file mode 100644 index 000000000000..2905fe4766ea --- /dev/null +++ b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/astro.config.mjs @@ -0,0 +1,6 @@ +import mdx from '@astrojs/mdx'; +import react from '@astrojs/react'; + +export default { + integrations: [mdx(), react()], +} diff --git a/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/package.json b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/package.json new file mode 100644 index 000000000000..b76dc19a6e7f --- /dev/null +++ b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/package.json @@ -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" + } +} diff --git a/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/components/BrokenComponent.jsx b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/components/BrokenComponent.jsx new file mode 100644 index 000000000000..f9091c825fb6 --- /dev/null +++ b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/components/BrokenComponent.jsx @@ -0,0 +1,8 @@ +import { useState } from "react"; + +export default function BrokenComponent() { + useState(0); + a; + + return
Whoops!
; +}; diff --git a/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/content/config.js b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/content/config.js new file mode 100644 index 000000000000..6250d13c8188 --- /dev/null +++ b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/content/config.js @@ -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, }; diff --git a/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/content/files/file.mdx b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/content/files/file.mdx new file mode 100644 index 000000000000..9c536e9fff1b --- /dev/null +++ b/packages/integrations/mdx/test/fixtures/mdx-plus-react-errors/src/content/files/file.mdx @@ -0,0 +1,4 @@ + +import BrokenComponent from '../../components/BrokenComponent' + +