Jack Hsu aec53a0406
feat(misc): remove handling of @nrwl scope (#28589)
This PR removes logic where we handle both `@nx/` and `@nrwl/` scope.
The latter scope has stopped being published in v20, and are no longer
relevant.

- Cleans up e2e
- Removes references to `@nrwl/` scope in our generators and executors
- Removes `@nrwl/` from `nx/package.json` `packageGroup`
- Cleans up documentation quality script
2024-10-29 11:04:44 -04:00

114 lines
2.7 KiB
TypeScript

import {
addDependenciesToPackageJson,
installPackagesTask,
ProjectConfiguration,
readJson,
readProjectConfiguration,
Tree,
updateProjectConfiguration,
} from '@nx/devkit';
import { join } from 'path';
import { addSwcConfig } from '../../utils/swc/add-swc-config';
import { addSwcDependencies } from '../../utils/swc/add-swc-dependencies';
import { swcHelpersVersion } from '../../utils/versions';
import { ConvertToSwcGeneratorSchema } from './schema';
export async function convertToSwcGenerator(
tree: Tree,
schema: ConvertToSwcGeneratorSchema
) {
const options = normalizeOptions(schema);
const projectConfiguration = readProjectConfiguration(tree, options.project);
const updated = updateProjectBuildTargets(
tree,
projectConfiguration,
options.project,
options.targets
);
return updated ? checkSwcDependencies(tree, projectConfiguration) : () => {};
}
function normalizeOptions(
schema: ConvertToSwcGeneratorSchema
): ConvertToSwcGeneratorSchema {
const options = { ...schema };
if (!options.targets) {
options.targets = ['build'];
}
return options;
}
function updateProjectBuildTargets(
tree: Tree,
projectConfiguration: ProjectConfiguration,
projectName: string,
projectTargets: string[]
) {
let updated = false;
for (const target of projectTargets) {
const targetConfiguration = projectConfiguration.targets?.[target];
if (!targetConfiguration || targetConfiguration.executor !== '@nx/js:tsc')
continue;
targetConfiguration.executor = '@nx/js:swc';
updated = true;
}
if (updated) {
updateProjectConfiguration(tree, projectName, projectConfiguration);
}
return updated;
}
function checkSwcDependencies(
tree: Tree,
projectConfiguration: ProjectConfiguration
) {
const isSwcrcPresent = tree.exists(join(projectConfiguration.root, '.swcrc'));
const packageJson = readJson(tree, 'package.json');
const projectPackageJsonPath = join(
projectConfiguration.root,
'package.json'
);
const projectPackageJson = readJson(tree, projectPackageJsonPath);
const hasSwcDependency =
packageJson.dependencies && packageJson.dependencies['@swc/core'];
const hasSwcHelpers =
projectPackageJson.dependencies &&
projectPackageJson.dependencies['@swc/helpers'];
if (isSwcrcPresent && hasSwcDependency && hasSwcHelpers) return;
if (!isSwcrcPresent) {
addSwcConfig(tree, projectConfiguration.root);
}
if (!hasSwcDependency) {
addSwcDependencies(tree);
}
if (!hasSwcHelpers) {
addDependenciesToPackageJson(
tree,
{ '@swc/helpers': swcHelpersVersion },
{},
projectPackageJsonPath
);
}
return () => {
if (!hasSwcDependency) {
installPackagesTask(tree);
}
};
}
export default convertToSwcGenerator;