nx/packages/react/src/migrations/update-14-1-0/update-external-emotion-jsx-runtime.ts

50 lines
1.6 KiB
TypeScript

import {
readProjectConfiguration,
Tree,
updateProjectConfiguration,
} from '@nx/devkit';
import { forEachExecutorOptions } from '@nx/devkit/src/generators/executor-options-utils';
export async function updateExternalEmotionJsxRuntime(tree: Tree) {
forEachExecutorOptions<any>(
tree,
'@nrwl/web:rollup',
(options: any, projectName, targetName, configurationName) => {
const projectConfiguration = readProjectConfiguration(tree, projectName);
const config = configurationName
? projectConfiguration.targets[targetName].configurations[
configurationName
]
: projectConfiguration.targets[targetName].options;
if (config.external && config.external.length > 0) {
const hasEmotionStyledBase = config.external.includes(
'@emotion/styled/base'
);
const hasReactJsxRuntime =
config.external.includes('react/jsx-runtime');
if (hasEmotionStyledBase && hasReactJsxRuntime) {
// Replace 'react/jsx-runtime' with '@emotion/react/jsx-runtime'
config.external.forEach((value, index) => {
if (value === 'react/jsx-runtime') {
config.external.splice(index, 1, '@emotion/react/jsx-runtime');
}
});
// Remove '@emotion/styled/base'
config.external.forEach((value, index) => {
if (value === '@emotion/styled/base') {
config.external.splice(index, 1);
}
});
}
updateProjectConfiguration(tree, projectName, projectConfiguration);
}
}
);
}
export default updateExternalEmotionJsxRuntime;