MDX: only provide CJS fallback for Next.js

This commit is contained in:
Fuma Nama
2025-11-18 19:27:10 +08:00
parent 2ccaeba9b5
commit 59743c08d4
7 changed files with 53 additions and 38 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'fumadocs-mdx': patch
---
Use `remarkStructure().exportAs` option to export `structuredData`
+5
View File
@@ -0,0 +1,5 @@
---
'fumadocs-mdx': patch
---
only provide CJS fallback for Next.js
+2 -6
View File
@@ -45,13 +45,9 @@ export interface LoaderOptions<
/**
* Additional options for page tree builder
*/
pageTree?: PageTreeOptions<S['pageData'], S['metaData']>;
pageTree?: PageTreeOptions<S>;
plugins?: (
| LoaderPlugin<S['pageData'], S['metaData']>
| LoaderPlugin<S['pageData'], S['metaData']>[]
| undefined
)[];
plugins?: (LoaderPlugin<S> | LoaderPlugin<S>[] | undefined)[];
icon?: IconResolver;
slugs?: (info: { path: string }) => string[];
@@ -1,5 +1,5 @@
import type * as PageTree from '@/page-tree/definitions';
import type { MetaData, PageData, UrlFn } from '@/source';
import type { MetaData, PageData, SourceConfig, UrlFn } from '@/source';
import type { ContentStorage } from '@/source/storage/content';
import { basename, extname, joinPath } from '@/source/path';
import { transformerFallback } from '@/source/page-tree/transformer-fallback';
@@ -47,10 +47,7 @@ export interface PageTreeTransformer<
) => PageTree.Root;
}
export interface PageTreeOptions<
Page extends PageData = PageData,
Meta extends MetaData = MetaData,
> {
export interface PageTreeOptions<Config extends SourceConfig = SourceConfig> {
id?: string;
/**
* Remove references to the file path of original nodes (`$ref`)
@@ -68,7 +65,7 @@ export interface PageTreeOptions<
/**
* Additional page tree transformers to apply
*/
transformers?: PageTreeTransformer<Page, Meta>[];
transformers?: PageTreeTransformer<Config['pageData'], Config['metaData']>[];
}
export interface PageTreeBuilder {
+9 -8
View File
@@ -1,12 +1,8 @@
import type { ContentStorage } from '@/source/storage/content';
import type { PageTreeTransformer } from '@/source/page-tree/builder';
import type { MetaData, PageData } from '@/source/types';
import type { ResolvedLoaderConfig } from '@/source/loader';
import type { ResolvedLoaderConfig, SourceConfig } from '@/source/loader';
export interface LoaderPlugin<
Page extends PageData = PageData,
Meta extends MetaData = MetaData,
> {
export interface LoaderPlugin<Config extends SourceConfig = SourceConfig> {
name?: string;
/**
@@ -26,12 +22,17 @@ export interface LoaderPlugin<
/**
* transform the storage after loading
*/
transformStorage?: (context: { storage: ContentStorage<Page, Meta> }) => void;
transformStorage?: (context: {
storage: ContentStorage<Config['pageData'], Config['metaData']>;
}) => void;
/**
* transform the generated page tree
*/
transformPageTree?: PageTreeTransformer<Page, Meta>;
transformPageTree?: PageTreeTransformer<
Config['pageData'],
Config['metaData']
>;
}
const priorityMap = {
+2 -4
View File
@@ -16,8 +16,7 @@
"./loader-meta": "./loader-meta.cjs",
"./config": {
"import": "./dist/config/index.js",
"types": "./dist/config/index.d.ts",
"require": "./dist/config/index.cjs"
"types": "./dist/config/index.d.ts"
},
"./next": {
"import": "./dist/next/index.js",
@@ -26,8 +25,7 @@
},
"./vite": {
"import": "./dist/vite/index.js",
"types": "./dist/vite/index.d.ts",
"require": "./dist/vite/index.cjs"
"types": "./dist/vite/index.d.ts"
},
".": {
"import": "./dist/index.js",
+27 -14
View File
@@ -1,16 +1,29 @@
import { defineConfig } from 'tsup';
export default defineConfig({
entry: [
'./src/{index,bin}.ts',
'./src/{config,next,vite,bun}/index.ts',
'./src/webpack/{mdx,meta}.ts',
'./src/node/loader.ts',
'./src/runtime/*.ts',
'./src/plugins/*.ts',
],
format: ['esm', 'cjs'],
external: ['next', 'typescript', 'bun'],
dts: true,
target: 'node18',
});
export default defineConfig([
{
entry: [
'./src/{index,bin}.ts',
'./src/{config,next,vite,bun}/index.ts',
'./src/webpack/{mdx,meta}.ts',
'./src/node/loader.ts',
'./src/runtime/*.ts',
'./src/plugins/*.ts',
],
format: 'esm',
external: ['next', 'typescript', 'bun'],
dts: true,
target: 'node22',
},
{
entry: {
// ensure Next.js CJS config compatibility
// because next.config.ts by default uses CJS
'./next/index': './src/next/index.ts',
},
format: 'cjs',
external: ['next', 'typescript', 'bun'],
dts: false,
target: 'node22',
},
]);