nx/packages/angular/src/migrations/update-15-9-0/update-testing-tsconfig.ts

64 lines
1.6 KiB
TypeScript

import {
createProjectGraphAsync,
formatFiles,
getProjects,
joinPathFragments,
Tree,
updateJson,
} from '@nrwl/devkit';
import { forEachExecutorOptionsInGraph } from '@nrwl/devkit/src/generators/executor-options-utils';
import type { JestExecutorOptions } from '@nrwl/jest/src/executors/jest/schema';
export async function updateTestingTsconfigForJest(tree: Tree) {
const graph = await createProjectGraphAsync();
const projects = getProjects(tree);
forEachExecutorOptionsInGraph<JestExecutorOptions>(
graph,
'@nrwl/jest:jest',
(options, projectName) => {
const projectConfig = projects.get(projectName);
if (!isJestPresetAngular(tree, options.jestConfig)) {
return;
}
const tsconfigPath = joinPathFragments(
projectConfig.root,
'tsconfig.spec.json'
);
if (tree.exists(tsconfigPath)) {
updateJson<TsConfig>(
tree,
tsconfigPath,
(json) => {
json.compilerOptions ??= {};
json.compilerOptions.target ??= 'es2016';
return json;
},
{ expectComments: true, allowTrailingComma: true }
);
}
}
);
await formatFiles(tree);
}
function isJestPresetAngular(tree: Tree, jestConfigPath: string) {
if (jestConfigPath && tree.exists(jestConfigPath)) {
const contents = tree.read(jestConfigPath, 'utf-8');
return contents.includes('jest-preset-angular');
}
return false;
}
export default updateTestingTsconfigForJest;
interface TsConfig {
compilerOptions: {
target?: string;
};
}