Skip to content

Commit

Permalink
Refactor MDX components exports handling (#7904)
Browse files Browse the repository at this point in the history
  • Loading branch information
bluwy authored Aug 2, 2023
1 parent 5103122 commit 25b8935
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 7 deletions.
5 changes: 5 additions & 0 deletions .changeset/loud-candles-admire.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@astrojs/mdx': patch
---

Handle `components` exports handling itself
5 changes: 5 additions & 0 deletions .changeset/young-roses-teach.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'astro': major
---

Remove MDX special `components` export handling
7 changes: 1 addition & 6 deletions packages/astro/src/core/render/core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,7 @@ async function renderPage({ mod, renderContext, env, cookies }: RenderPage) {
locals: renderContext.locals ?? {},
});

// Support `export const components` for `MDX` pages
if (typeof (mod as any).components === 'object') {
Object.assign(renderContext.props, { components: (mod as any).components });
}

let response = await runtimeRenderPage(
const response = await runtimeRenderPage(
result,
Component,
renderContext.props,
Expand Down
5 changes: 4 additions & 1 deletion packages/integrations/mdx/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -171,11 +171,14 @@ export default function mdx(partialMdxOptions: Partial<MdxOptions> = {}): AstroI
code += `\nexport const file = ${JSON.stringify(fileId)};`;
}
if (!moduleExports.find(({ n }) => n === 'Content')) {
// If have `export const components`, pass that as props to `Content` as fallback
const hasComponents = moduleExports.find(({ n }) => n === 'components');

// Make `Content` the default export so we can wrap `MDXContent` and pass in `Fragment`
code = code.replace('export default MDXContent;', '');
code += `\nexport const Content = (props = {}) => MDXContent({
...props,
components: { Fragment, ...props.components },
components: { Fragment${hasComponents ? ', ...components' : ''}, ...props.components },
});
export default Content;`;
}
Expand Down

0 comments on commit 25b8935

Please sign in to comment.