diff --git a/src/loader.js b/src/loader.js index fe57a28..56904dd 100644 --- a/src/loader.js +++ b/src/loader.js @@ -119,6 +119,15 @@ async function load(source) { } this.addContextDependency(schemaDir); + + const nextjsExports = [ + 'metadata', + 'revalidate', + ] + const nextjsExportsCode = nextjsExports + .map((name) => `export const ${name} = frontmatter.nextjs?.${name};`) + .join('\n') + const result = `import React from 'react'; import yaml from 'js-yaml'; // renderers is imported separately so Markdoc isn't sent to the client @@ -206,7 +215,7 @@ ${ }; }` } - +${appDir ? nextjsExportsCode : ''} export default${appDir ? ' async' : ''} function MarkdocComponent(props) { const markdoc = ${appDir ? 'await getMarkdocData()' : 'props.markdoc'}; // Only execute HMR code in development diff --git a/tests/__snapshots__/index.test.js.snap b/tests/__snapshots__/index.test.js.snap index 51cf1c6..332ac91 100644 --- a/tests/__snapshots__/index.test.js.snap +++ b/tests/__snapshots__/index.test.js.snap @@ -169,7 +169,14 @@ async function getMarkdocData(context = {}) { } - +export const dynamic = frontmatter.nextjs?.dynamic; +export const dynamicParams = frontmatter.nextjs?.dynamicParams; +export const fetchCache = frontmatter.nextjs?.fetchCache; +export const maxDuration = frontmatter.nextjs?.maxDuration; +export const metadata = frontmatter.nextjs?.metadata; +export const preferredRegion = frontmatter.nextjs?.preferredRegion; +export const revalidate = frontmatter.nextjs?.revalidate; +export const runtime = frontmatter.nextjs?.runtime; export default async function MarkdocComponent(props) { const markdoc = await getMarkdocData(); // Only execute HMR code in development diff --git a/tests/index.test.js b/tests/index.test.js index 6130fd5..0a4eae4 100644 --- a/tests/index.test.js +++ b/tests/index.test.js @@ -177,6 +177,15 @@ test('app router', async () => { ); }); +test('app router metadata', async () => { + const output = await callLoader( + options({ appDir: true }), + source.replace('---', '---\nmetadata:\n title: Metadata title') + ); + + expect(output).toContain('export const metadata = frontmatter.nextjs?.metadata;') +}); + test.each([ [undefined, undefined], ['./schemas/folders', 'markdoc1'],