fix(core): move generator should work if there are comments in tsconfig #13740 (#13866)

This commit is contained in:
Colum Ferry 2022-12-16 14:20:37 +00:00 committed by GitHub
parent b52b649fcb
commit 4f98e37fb3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 35 additions and 1 deletions

View File

@ -82,6 +82,7 @@
"fs-extra": "^10.1.0",
"glob": "7.1.4",
"ignore": "^5.0.4",
"jsonc-parser": "3.2.0",
"minimatch": "3.0.5",
"npm-run-path": "^4.0.1",
"open": "^8.4.0",

View File

@ -340,6 +340,30 @@ export MyExtendedClass extends MyClass {};`
});
});
it('should update project ref in the root tsconfig.json when there is a comment', async () => {
tree.rename('tsconfig.base.json', 'tsconfig.json');
tree.write(
'tsconfig.json',
`// A comment\n${tree.read('tsconfig.json', 'utf-8')}`
);
await libraryGenerator(tree, {
name: 'my-source',
standaloneConfig: false,
});
const projectConfig = readProjectConfiguration(tree, 'my-source');
updateImports(
tree,
normalizeSchema(tree, schema, projectConfig),
projectConfig
);
const tsConfig = readJson(tree, '/tsconfig.json');
expect(tsConfig.compilerOptions.paths).toEqual({
'@proj/my-destination': ['libs/my-destination/src/index.ts'],
});
});
it('should only update the project ref paths in the tsconfig file when --updateImportPath=false', async () => {
await libraryGenerator(tree, {
name: 'my-source',

View File

@ -17,6 +17,7 @@ import { findNodes } from 'nx/src/utils/typescript';
import { NormalizedSchema } from '../schema';
import { normalizeSlashes } from './utils';
import { relative } from 'path';
import { parse } from 'jsonc-parser';
/**
* Updates all the imports in the workspace and modifies the tsconfig appropriately.
@ -42,7 +43,15 @@ export function updateImports(
let tsConfig: any;
let fromPath: string;
if (tree.exists(tsConfigPath)) {
tsConfig = JSON.parse(tree.read(tsConfigPath).toString('utf-8'));
const tsConfigRawContents = tree.read(tsConfigPath).toString('utf-8');
tsConfig = (() => {
try {
return JSON.parse(tsConfigRawContents);
} catch {
return parse(tsConfigRawContents);
}
})();
fromPath = Object.keys(tsConfig.compilerOptions.paths).find((path) =>
tsConfig.compilerOptions.paths[path].some((x) =>
x.startsWith(project.sourceRoot)