Skip to content

Commit

Permalink
cleanup(core): remove unused npm scope from target project locator (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
meeroslav committed Apr 5, 2022
1 parent 1755094 commit 87fd3ff
Show file tree
Hide file tree
Showing 8 changed files with 41 additions and 105 deletions.
Expand Up @@ -1836,7 +1836,6 @@ function runRule(
projectGraph: ProjectGraph
): TSESLint.Linter.LintMessage[] {
(global as any).projectPath = `${process.cwd()}/proj`;
(global as any).npmScope = 'mycompany';
(global as any).projectGraph = mapProjectGraphFiles(projectGraph);
(global as any).targetProjectLocator = new TargetProjectLocator(
projectGraph.nodes,
Expand Down
Expand Up @@ -154,7 +154,6 @@ export default createESLintRule<Options, MessageIds>({
*/
if (!(global as any).projectGraph || !isTerminalRun()) {
const nxJson = readNxJson();
(global as any).npmScope = nxJson.npmScope;
(global as any).workspaceLayout = nxJson.workspaceLayout;

/**
Expand All @@ -181,7 +180,6 @@ export default createESLintRule<Options, MessageIds>({
return {};
}

const npmScope = (global as any).npmScope;
const workspaceLayout = (global as any).workspaceLayout;
const projectGraph = (global as any).projectGraph as MappedProjectGraph;

Expand Down Expand Up @@ -245,9 +243,6 @@ export default createESLintRule<Options, MessageIds>({
context.report({
node,
messageId: 'noRelativeOrAbsoluteImportsAcrossLibraries',
data: {
npmScope,
},
fix(fixer) {
if (targetProject) {
const indexTsPaths = getBarrelEntryPointProjectNode(
Expand Down Expand Up @@ -301,8 +296,7 @@ export default createESLintRule<Options, MessageIds>({
projectGraph,
targetProjectLocator,
sourceFilePath,
imp,
npmScope
imp
);

// If target is not part of an nx workspace, return.
Expand Down
Expand Up @@ -25,8 +25,7 @@ export function buildExplicitTypeScriptDependencies(
(importExpr: string, filePath: string, type: DependencyType) => {
const target = targetProjectLocator.findProjectWithImport(
importExpr,
f.file,
workspace.npmScope
f.file
);
if (target) {
res.push({
Expand Down
105 changes: 35 additions & 70 deletions packages/nx/src/utils/target-project-locator.spec.ts
Expand Up @@ -301,23 +301,19 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve a module by using relative paths', () => {
const res1 = targetProjectLocator.findProjectWithImport(
'./class.ts',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
const res2 = targetProjectLocator.findProjectWithImport(
'../index.ts',
'libs/proj/src/index.ts',
ctx.workspace.npmScope
'libs/proj/src/index.ts'
);
const res3 = targetProjectLocator.findProjectWithImport(
'../proj/../proj2/index.ts',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
const res4 = targetProjectLocator.findProjectWithImport(
'../proj/../index.ts',
'libs/proj/src/index.ts',
ctx.workspace.npmScope
'libs/proj/src/index.ts'
);

expect(res1).toEqual('proj');
Expand All @@ -329,13 +325,11 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve a module by using tsConfig paths', () => {
const proj2 = targetProjectLocator.findProjectWithImport(
'@proj/my-second-proj',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);
// const proj3a = targetProjectLocator.findProjectWithImport(
// '@proj/project-3',
// 'libs/proj1/index.ts',
// ctx.workspace.npmScope
// 'libs/proj1/index.ts'
// );

expect(proj2).toEqual('proj2');
Expand All @@ -345,8 +339,7 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve nested files using tsConfig paths', () => {
const proj2deep = targetProjectLocator.findProjectWithImport(
'@proj/my-second-proj/deep',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);

expect(proj2deep).toEqual('proj2');
Expand All @@ -358,8 +351,7 @@ describe('findTargetProjectWithImport', () => {

const proj2deep = targetProjectLocator.findProjectWithImport(
'@proj/my-second-proj/deep',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);

expect(proj2deep).toEqual('proj2');
Expand All @@ -368,36 +360,31 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve nested files using tsConfig paths that have similar names', () => {
const proj = targetProjectLocator.findProjectWithImport(
'@proj/proj123/deep',
'',
ctx.workspace.npmScope
''
);
expect(proj).toEqual('proj123');

const childProj = targetProjectLocator.findProjectWithImport(
'@proj/proj1234-child/deep',
'',
ctx.workspace.npmScope
''
);
expect(childProj).toEqual('proj1234-child');

const parentProj = targetProjectLocator.findProjectWithImport(
'@proj/proj1234/deep',
'',
ctx.workspace.npmScope
''
);
expect(parentProj).toEqual('proj1234');
});

it('should be able to npm dependencies', () => {
const result1 = targetProjectLocator.findProjectWithImport(
'@ng/core',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);
const result2 = targetProjectLocator.findProjectWithImport(
'npm-package',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);

expect(result1).toEqual('npm:@ng/core');
Expand All @@ -407,27 +394,23 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve a module using a normalized path', () => {
const proj4ab = targetProjectLocator.findProjectWithImport(
'@proj/proj4ab#a',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);

expect(proj4ab).toEqual('proj4ab');
});
it('should be able to resolve a modules when npm packages exist', () => {
const proj5 = targetProjectLocator.findProjectWithImport(
'@proj/proj5',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);
// const proj6 = targetProjectLocator.findProjectWithImport(
// '@proj/proj6',
// 'libs/proj1/index.ts',
// ctx.workspace.npmScope
// 'libs/proj1/index.ts'
// );
// const proj7 = targetProjectLocator.findProjectWithImport(
// '@proj/proj7',
// 'libs/proj1/index.ts',
// ctx.workspace.npmScope
// 'libs/proj1/index.ts'
// );

expect(proj5).toEqual('proj5');
Expand All @@ -437,38 +420,33 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve paths that have similar names', () => {
const proj = targetProjectLocator.findProjectWithImport(
'@proj/proj123',
'',
ctx.workspace.npmScope
''
);
expect(proj).toEqual('proj123');

const childProj = targetProjectLocator.findProjectWithImport(
'@proj/proj1234-child',
'',
ctx.workspace.npmScope
''
);
expect(childProj).toEqual('proj1234-child');

const parentProj = targetProjectLocator.findProjectWithImport(
'@proj/proj1234',
'',
ctx.workspace.npmScope
''
);
expect(parentProj).toEqual('proj1234');
});

it('should be able to resolve npm projects', () => {
const similarImportFromNpm = targetProjectLocator.findProjectWithImport(
'@proj/proj123-base',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
expect(similarImportFromNpm).toEqual('npm:@proj/proj123-base');

const similarDeepImportFromNpm = targetProjectLocator.findProjectWithImport(
'@proj/proj123-base/deep',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
expect(similarDeepImportFromNpm).toEqual('npm:@proj/proj123-base');
});
Expand All @@ -478,8 +456,7 @@ describe('findTargetProjectWithImport', () => {
it('should be able to resolve packages using project prefix', () => {
const proj5 = targetProjectLocator.findProjectWithImport(
'@proj/proj5',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
expect(proj5).toEqual('proj5');
});
Expand Down Expand Up @@ -756,23 +733,19 @@ describe('findTargetProjectWithImport (without tsconfig.json)', () => {
it('should be able to resolve a module by using relative paths', () => {
const res1 = targetProjectLocator.findProjectWithImport(
'./class.ts',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
const res2 = targetProjectLocator.findProjectWithImport(
'../index.ts',
'libs/proj/src/index.ts',
ctx.workspace.npmScope
'libs/proj/src/index.ts'
);
const res3 = targetProjectLocator.findProjectWithImport(
'../proj/../proj2/index.ts',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
const res4 = targetProjectLocator.findProjectWithImport(
'../proj/../index.ts',
'libs/proj/src/index.ts',
ctx.workspace.npmScope
'libs/proj/src/index.ts'
);

expect(res1).toEqual('proj');
Expand All @@ -784,13 +757,11 @@ describe('findTargetProjectWithImport (without tsconfig.json)', () => {
it('should be able to npm dependencies', () => {
const result1 = targetProjectLocator.findProjectWithImport(
'@ng/core',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);
const result2 = targetProjectLocator.findProjectWithImport(
'npm-package',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);

expect(result1).toEqual('npm:@ng/core');
Expand All @@ -800,47 +771,41 @@ describe('findTargetProjectWithImport (without tsconfig.json)', () => {
it('should be able to resolve a module using a normalized path', () => {
const proj4ab = targetProjectLocator.findProjectWithImport(
'@proj/proj4ab#a',
'libs/proj1/index.ts',
ctx.workspace.npmScope
'libs/proj1/index.ts'
);

expect(proj4ab).toEqual('proj4ab');
});
it('should be able to resolve paths that have similar names', () => {
const proj = targetProjectLocator.findProjectWithImport(
'@proj/proj123',
'',
ctx.workspace.npmScope
''
);
expect(proj).toEqual('proj123');

const childProj = targetProjectLocator.findProjectWithImport(
'@proj/proj1234-child',
'',
ctx.workspace.npmScope
''
);
expect(childProj).toEqual('proj1234-child');

const parentProj = targetProjectLocator.findProjectWithImport(
'@proj/proj1234',
'',
ctx.workspace.npmScope
''
);
expect(parentProj).toEqual('proj1234');
});

it('should be able to resolve npm projects', () => {
const similarImportFromNpm = targetProjectLocator.findProjectWithImport(
'@proj/proj123-base',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
expect(similarImportFromNpm).toEqual('npm:@proj/proj123-base');

const similarDeepImportFromNpm = targetProjectLocator.findProjectWithImport(
'@proj/proj123-base/deep',
'libs/proj/index.ts',
ctx.workspace.npmScope
'libs/proj/index.ts'
);
expect(similarDeepImportFromNpm).toEqual('npm:@proj/proj123-base');
});
Expand Down
11 changes: 1 addition & 10 deletions packages/nx/src/utils/target-project-locator.ts
Expand Up @@ -29,17 +29,8 @@ export class TargetProjectLocator {
*
* @param importExpr
* @param filePath
* @param npmScope
* Npm scope shouldn't be used finding a project, but, to improve backward
* compatibility, we fallback to checking the scope.
* This happens in cases where someone has the dist output in their tsconfigs
* and typescript will find the dist before the src.
*/
findProjectWithImport(
importExpr: string,
filePath: string,
npmScope: string
): string {
findProjectWithImport(importExpr: string, filePath: string): string {
const normalizedImportExpr = importExpr.split('#')[0];
if (isRelativePath(normalizedImportExpr)) {
const resolvedModule = posix.join(
Expand Down
Expand Up @@ -1194,7 +1194,6 @@ function runRule(
const rule = new Rule(
options,
`${process.cwd()}/proj`,
'mycompany',
mappedProjectGraph,
new TargetProjectLocator(
mappedProjectGraph.nodes,
Expand Down

0 comments on commit 87fd3ff

Please sign in to comment.