rsnext/packages/next-mdx/index.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

45 lines
1.3 KiB
JavaScript
Raw Normal View History

module.exports =
(pluginOptions = {}) =>
(nextConfig = {}) => {
const extension = pluginOptions.extension || /\.mdx$/
const mdxRsOptions = nextConfig?.experimental?.mdxRs
const loader = mdxRsOptions
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
? {
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,
// mdxRsOptions is a union of boolean and object type of MdxTransformOptions
...(mdxRsOptions === true ? {} : mdxRsOptions),
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
},
}
: {
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,
Fix bugs with baseUrl and mdxRs (#58968) ## What? Was investigating an issue with Turbopack and MDX, in the process found a few bugs: - When you have a `tsconfig.json` or `jsconfig.json` the `baseUrl: '.'` is used by default which causes the top-level directories to be available as e.g. `design-system` (without a prefix). - This is not how TypeScript's default setting for `baseUrl` works. While it should resolve `paths` relative to `.` when none is specified it does not do additional resolving for the top level directories/files. - When `"baseUrl": "."` is added to `tsconfig.js` explicitly it handles the top level directories. - `modularizeImports` and other SWC transforms weren't applied to `.mdx` files when `experimental.mdxRs` is enabled, which caused compilation to fail. - `modularIzeImports` and other SWC transforms are not applied to `.mdx` files when using Turbopack. - @kwonoj is investigating this, will be handled in a follow-up PR. ## How? - Added a test suite for `modularizeImports` with MDX tests - Removed the condition that disables swcLoader in webpack when using mdxRs - Changed the check for `tsconfig.json` / `jsconfig.json` baseUrl to include if it was implicitly or explicitly set, disabled the module resolving when it is implicitly set <!-- 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: ## For Contributors ### Improving Documentation - Run `pnpm prettier-fix` to fix formatting issues before opening the PR. - Read the Docs Contribution Guide to ensure your contribution follows the docs guidelines: https://nextjs.org/docs/community/contribution-guide ### Adding or Updating Examples - The "examples guidelines" are followed from our contributing doc https://github.com/vercel/next.js/blob/canary/contributing/examples/adding-examples.md - Make sure the linting passes by running `pnpm build && pnpm lint`. See https://github.com/vercel/next.js/blob/canary/contributing/repository/linting.md ### Fixing a bug - Related issues linked using `fixes #number` - Tests added. See: https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs - Errors have a helpful link attached, see https://github.com/vercel/next.js/blob/canary/contributing.md ### Adding a feature - Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. (A discussion must be opened, see https://github.com/vercel/next.js/discussions/new?category=ideas) - Related issues/discussions are linked using `fixes #number` - e2e tests added (https://github.com/vercel/next.js/blob/canary/contributing/core/testing.md#writing-tests-for-nextjs) - Documentation added - Telemetry added. In case of a feature if it's used or not. - Errors have a helpful link attached, see https://github.com/vercel/next.js/blob/canary/contributing.md ## For Maintainers - Minimal description (aim for explaining to someone not on the team to understand the PR) - When linking to a Slack thread, you might want to share details of the conclusion - Link both the Linear (Fixes NEXT-xxx) and the GitHub issues - Add review comments if necessary to explain to the reviewer the logic behind a change ### What? ### Why? ### How? Closes NEXT- Fixes # --> --------- Co-authored-by: Tobias Koppers <tobias.koppers@googlemail.com>
2023-11-28 10:50:14 +01:00
use: [options.defaultLoaders.babel, loader],
})
if (typeof nextConfig.webpack === 'function') {
return nextConfig.webpack(config, options)
}
return config
},
})
}