nx/packages/angular/src/migrations/update-16-0-0/remove-protractor-defaults.ts

84 lines
2.1 KiB
TypeScript

import type {
NxJsonConfiguration,
ProjectConfiguration,
Tree,
} from '@nx/devkit';
import {
formatFiles,
getProjects,
readNxJson,
updateNxJson,
updateProjectConfiguration,
} from '@nx/devkit';
const GENERATORS = ['application', 'host', 'remote'];
const CANDIDATE_GENERATOR_COLLECTIONS = ['@nrwl/angular', '@nx/angular'];
export default async function removeProtractorDefaults(tree: Tree) {
const nxJson = readNxJson(tree);
if (nxJson.generators) {
const updatedConfig = updateE2ETestRunner(nxJson.generators);
if (updatedConfig) {
updateNxJson(tree, nxJson);
}
}
const projects = getProjects(tree);
for (const [projectName, projectConfig] of projects) {
if (projectConfig.generators) {
const updatedProject = updateE2ETestRunner(projectConfig.generators);
if (updatedProject) {
updateProjectConfiguration(tree, projectName, projectConfig);
}
}
}
await formatFiles(tree);
}
function updateE2ETestRunner(
generatorsConfig:
| NxJsonConfiguration['generators']
| ProjectConfiguration['generators']
) {
const generators = Object.entries(generatorsConfig);
let updatedConfig = false;
for (const [generatorName, generatorDefaults] of generators) {
if (CANDIDATE_GENERATOR_COLLECTIONS.includes(generatorName)) {
for (const possibleGenerator of GENERATORS) {
if (
generatorDefaults[possibleGenerator] &&
generatorDefaults[possibleGenerator]['e2eTestRunner'] &&
generatorDefaults[possibleGenerator]['e2eTestRunner'] === 'protractor'
) {
generatorsConfig[generatorName][possibleGenerator]['e2eTestRunner'] =
undefined;
updatedConfig = true;
}
}
}
if (
!GENERATORS.map((v) => `@nrwl/angular:${v}`).includes(generatorName) &&
!GENERATORS.map((v) => `@nx/angular:${v}`).includes(generatorName)
) {
continue;
}
if (
generatorDefaults['e2eTestRunner'] &&
generatorDefaults['e2eTestRunner'] === 'protractor'
) {
generatorsConfig[generatorName]['e2eTestRunner'] = undefined;
updatedConfig = true;
}
}
return updatedConfig;
}