rsnext/packages/next-mdx/index.js

47 lines
1.3 KiB
JavaScript
Raw Normal View History

module.exports =
(pluginOptions = {}) =>
(nextConfig = {}) => {
const extension = pluginOptions.extension || /\.mdx$/
feat(next/mdx): support experimental mdx-rs loader (#41919) <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> This PR implements a configuration option in `next.config.js` to support for rust-based MDX compiler (https://github.com/wooorm/mdxjs-rs). Currently it is marked as experimental, as mdx-rs and loader both may need some iteration to fix regressions. When a new experimental flag is set (`mdxRs: true`), instead of using `@mdx/js` loader `next/mdx` loads a new webpack loader instead. Internally, it mostly mimics mdx/js's loader behavior, however actual compilation will be delegated into next/swc's binding to call mdx-rs's compiler instead. I choose to use next-swc to expose its binding function, as mdx-rs internally uses swc already and creating new binary can double up bytesize (with all the complex processes of publishing new package). ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
2022-11-03 02:24:05 +01:00
const loader = nextConfig?.experimental?.mdxRs
? {
loader: require.resolve('./mdx-rs-loader'),
options: {
Add support for rendering MDX as a server component (#44651) Adds support for rendering MDX as a Server Component. The main reason a MDX file couldn't be rendered as a Server Component is that `@mdx-js/react` has a legacy/deprecated context setup in the file. Because of calling `React.createContext` the MDX file couldn't be a Server Component. I've added support for a special file `mdx-components.tsx` (or `.js`) at the root of the project (can be `src` dir too). By using mdx-components you don't need a global context provider which in turn makes MDX compatible to be rendered as a Server Component. Note: this changes `@next/mdx` to add support for that file so it has to be landed first before the example works. <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) Co-authored-by: JJ Kasper <jj@jjsweb.site>
2023-01-06 22:09:05 +01:00
providerImportSource: 'next-mdx-import-source-file',
feat(next/mdx): support experimental mdx-rs loader (#41919) <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> This PR implements a configuration option in `next.config.js` to support for rust-based MDX compiler (https://github.com/wooorm/mdxjs-rs). Currently it is marked as experimental, as mdx-rs and loader both may need some iteration to fix regressions. When a new experimental flag is set (`mdxRs: true`), instead of using `@mdx/js` loader `next/mdx` loads a new webpack loader instead. Internally, it mostly mimics mdx/js's loader behavior, however actual compilation will be delegated into next/swc's binding to call mdx-rs's compiler instead. I choose to use next-swc to expose its binding function, as mdx-rs internally uses swc already and creating new binary can double up bytesize (with all the complex processes of publishing new package). ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
2022-11-03 02:24:05 +01:00
...pluginOptions.options,
},
}
: {
loader: require.resolve('@mdx-js/loader'),
options: {
Add support for rendering MDX as a server component (#44651) Adds support for rendering MDX as a Server Component. The main reason a MDX file couldn't be rendered as a Server Component is that `@mdx-js/react` has a legacy/deprecated context setup in the file. Because of calling `React.createContext` the MDX file couldn't be a Server Component. I've added support for a special file `mdx-components.tsx` (or `.js`) at the root of the project (can be `src` dir too). By using mdx-components you don't need a global context provider which in turn makes MDX compatible to be rendered as a Server Component. Note: this changes `@next/mdx` to add support for that file so it has to be landed first before the example works. <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) Co-authored-by: JJ Kasper <jj@jjsweb.site>
2023-01-06 22:09:05 +01:00
providerImportSource: 'next-mdx-import-source-file',
feat(next/mdx): support experimental mdx-rs loader (#41919) <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> This PR implements a configuration option in `next.config.js` to support for rust-based MDX compiler (https://github.com/wooorm/mdxjs-rs). Currently it is marked as experimental, as mdx-rs and loader both may need some iteration to fix regressions. When a new experimental flag is set (`mdxRs: true`), instead of using `@mdx/js` loader `next/mdx` loads a new webpack loader instead. Internally, it mostly mimics mdx/js's loader behavior, however actual compilation will be delegated into next/swc's binding to call mdx-rs's compiler instead. I choose to use next-swc to expose its binding function, as mdx-rs internally uses swc already and creating new binary can double up bytesize (with all the complex processes of publishing new package). ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
2022-11-03 02:24:05 +01:00
...pluginOptions.options,
},
}
return Object.assign({}, nextConfig, {
webpack(config, options) {
Add support for rendering MDX as a server component (#44651) Adds support for rendering MDX as a Server Component. The main reason a MDX file couldn't be rendered as a Server Component is that `@mdx-js/react` has a legacy/deprecated context setup in the file. Because of calling `React.createContext` the MDX file couldn't be a Server Component. I've added support for a special file `mdx-components.tsx` (or `.js`) at the root of the project (can be `src` dir too). By using mdx-components you don't need a global context provider which in turn makes MDX compatible to be rendered as a Server Component. Note: this changes `@next/mdx` to add support for that file so it has to be landed first before the example works. <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) Co-authored-by: JJ Kasper <jj@jjsweb.site>
2023-01-06 22:09:05 +01:00
config.resolve.alias['next-mdx-import-source-file'] = [
Support mdx-components file in src directory (#46763) Adds additional alias for `/src/mdx-components` which makes the resolving: - `/src/mdx-components` - `/mdx-components` - `@mdx-js/react` (this one doesn't support server components) Fixes NEXT-515 Fixes #45748 <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change(s) that you're making: --> ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
2023-03-05 01:46:27 +01:00
'private-next-root-dir/src/mdx-components',
Add support for rendering MDX as a server component (#44651) Adds support for rendering MDX as a Server Component. The main reason a MDX file couldn't be rendered as a Server Component is that `@mdx-js/react` has a legacy/deprecated context setup in the file. Because of calling `React.createContext` the MDX file couldn't be a Server Component. I've added support for a special file `mdx-components.tsx` (or `.js`) at the root of the project (can be `src` dir too). By using mdx-components you don't need a global context provider which in turn makes MDX compatible to be rendered as a Server Component. Note: this changes `@next/mdx` to add support for that file so it has to be landed first before the example works. <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] [e2e](https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see [`contributing.md`](https://github.com/vercel/next.js/blob/canary/contributing.md) ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm build && pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md) Co-authored-by: JJ Kasper <jj@jjsweb.site>
2023-01-06 22:09:05 +01:00
'private-next-root-dir/mdx-components',
'@mdx-js/react',
]
config.module.rules.push({
test: extension,
use: [
feat(next/mdx): support experimental mdx-rs loader (#41919) <!-- Thanks for opening a PR! Your contribution is much appreciated. To make sure your PR is handled as smoothly as possible we request that you follow the checklist sections below. Choose the right checklist for the change that you're making: --> This PR implements a configuration option in `next.config.js` to support for rust-based MDX compiler (https://github.com/wooorm/mdxjs-rs). Currently it is marked as experimental, as mdx-rs and loader both may need some iteration to fix regressions. When a new experimental flag is set (`mdxRs: true`), instead of using `@mdx/js` loader `next/mdx` loads a new webpack loader instead. Internally, it mostly mimics mdx/js's loader behavior, however actual compilation will be delegated into next/swc's binding to call mdx-rs's compiler instead. I choose to use next-swc to expose its binding function, as mdx-rs internally uses swc already and creating new binary can double up bytesize (with all the complex processes of publishing new package). ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have a helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have a helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `pnpm lint` - [ ] The "examples guidelines" are followed from [our contributing doc](https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md)
2022-11-03 02:24:05 +01:00
nextConfig?.experimental?.mdxRs
? undefined
: options.defaultLoaders.babel,
loader,
].filter(Boolean),
})
if (typeof nextConfig.webpack === 'function') {
return nextConfig.webpack(config, options)
}
return config
},
})
}