@nx/eslint-plugin 16.0.0-beta.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/LICENSE +22 -0
- package/README.md +63 -0
- package/migrations.json +12 -0
- package/package.json +52 -0
- package/src/configs/angular-template.d.ts +20 -0
- package/src/configs/angular-template.js +22 -0
- package/src/configs/angular-template.js.map +1 -0
- package/src/configs/angular.d.ts +25 -0
- package/src/configs/angular.js +43 -0
- package/src/configs/angular.js.map +1 -0
- package/src/configs/javascript.d.ts +42 -0
- package/src/configs/javascript.js +51 -0
- package/src/configs/javascript.js.map +1 -0
- package/src/configs/react-base.d.ts +112 -0
- package/src/configs/react-base.js +141 -0
- package/src/configs/react-base.js.map +1 -0
- package/src/configs/react-jsx.d.ts +71 -0
- package/src/configs/react-jsx.js +65 -0
- package/src/configs/react-jsx.js.map +1 -0
- package/src/configs/react-tmp.d.ts +12 -0
- package/src/configs/react-tmp.js +18 -0
- package/src/configs/react-tmp.js.map +1 -0
- package/src/configs/react-typescript.d.ts +41 -0
- package/src/configs/react-typescript.js +56 -0
- package/src/configs/react-typescript.js.map +1 -0
- package/src/configs/typescript.d.ts +24 -0
- package/src/configs/typescript.js +34 -0
- package/src/configs/typescript.js.map +1 -0
- package/src/constants.d.ts +12 -0
- package/src/constants.js +18 -0
- package/src/constants.js.map +1 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +28 -0
- package/src/index.js.map +1 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +33 -0
- package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js.map +1 -0
- package/src/resolve-workspace-rules.d.ts +4 -0
- package/src/resolve-workspace-rules.js +36 -0
- package/src/resolve-workspace-rules.js.map +1 -0
- package/src/rules/enforce-module-boundaries.d.ts +16 -0
- package/src/rules/enforce-module-boundaries.js +428 -0
- package/src/rules/enforce-module-boundaries.js.map +1 -0
- package/src/rules/nx-plugin-checks.d.ts +21 -0
- package/src/rules/nx-plugin-checks.js +359 -0
- package/src/rules/nx-plugin-checks.js.map +1 -0
- package/src/utils/ast-utils.d.ts +12 -0
- package/src/utils/ast-utils.js +181 -0
- package/src/utils/ast-utils.js.map +1 -0
- package/src/utils/config-utils.d.ts +6 -0
- package/src/utils/config-utils.js +21 -0
- package/src/utils/config-utils.js.map +1 -0
- package/src/utils/create-eslint-rule.d.ts +2 -0
- package/src/utils/create-eslint-rule.js +6 -0
- package/src/utils/create-eslint-rule.js.map +1 -0
- package/src/utils/graph-utils.d.ts +5 -0
- package/src/utils/graph-utils.js +117 -0
- package/src/utils/graph-utils.js.map +1 -0
- package/src/utils/project-graph-utils.d.ts +7 -0
- package/src/utils/project-graph-utils.js +46 -0
- package/src/utils/project-graph-utils.js.map +1 -0
- package/src/utils/runtime-lint-utils.d.ts +85 -0
- package/src/utils/runtime-lint-utils.js +330 -0
- package/src/utils/runtime-lint-utils.js.map +1 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.findFilesInCircularPath = exports.checkCircularPath = exports.pathExists = exports.getPath = void 0;
|
|
4
|
+
const reach = {
|
|
5
|
+
graph: null,
|
|
6
|
+
matrix: null,
|
|
7
|
+
adjList: null,
|
|
8
|
+
};
|
|
9
|
+
function buildMatrix(graph) {
|
|
10
|
+
const nodes = Object.keys(graph.nodes);
|
|
11
|
+
const nodesLength = nodes.length;
|
|
12
|
+
const adjList = {};
|
|
13
|
+
const matrix = {};
|
|
14
|
+
// create matrix value set
|
|
15
|
+
for (let i = 0; i < nodesLength; i++) {
|
|
16
|
+
const v = nodes[i];
|
|
17
|
+
adjList[v] = [];
|
|
18
|
+
// meeroslav: turns out this is 10x faster than spreading the pre-generated initMatrixValues
|
|
19
|
+
matrix[v] = {};
|
|
20
|
+
}
|
|
21
|
+
const projectsWithDependencies = Object.keys(graph.dependencies);
|
|
22
|
+
for (let i = 0; i < projectsWithDependencies.length; i++) {
|
|
23
|
+
const dependencies = graph.dependencies[projectsWithDependencies[i]];
|
|
24
|
+
for (let j = 0; j < dependencies.length; j++) {
|
|
25
|
+
const dependency = dependencies[j];
|
|
26
|
+
if (graph.nodes[dependency.target]) {
|
|
27
|
+
adjList[dependency.source].push(dependency.target);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const traverse = (s, v) => {
|
|
32
|
+
matrix[s][v] = true;
|
|
33
|
+
const adjListLength = adjList[v].length;
|
|
34
|
+
for (let i = 0; i < adjListLength; i++) {
|
|
35
|
+
const adj = adjList[v][i];
|
|
36
|
+
if (!matrix[s][adj]) {
|
|
37
|
+
traverse(s, adj);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
for (let i = 0; i < nodesLength; i++) {
|
|
42
|
+
const v = nodes[i];
|
|
43
|
+
traverse(v, v);
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
matrix,
|
|
47
|
+
adjList,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function getPath(graph, sourceProjectName, targetProjectName) {
|
|
51
|
+
if (sourceProjectName === targetProjectName)
|
|
52
|
+
return [];
|
|
53
|
+
if (reach.graph !== graph) {
|
|
54
|
+
const { matrix, adjList } = buildMatrix(graph);
|
|
55
|
+
reach.graph = graph;
|
|
56
|
+
reach.matrix = matrix;
|
|
57
|
+
reach.adjList = adjList;
|
|
58
|
+
}
|
|
59
|
+
const adjList = reach.adjList;
|
|
60
|
+
let path = [];
|
|
61
|
+
const queue = [[sourceProjectName, path]];
|
|
62
|
+
const visited = [sourceProjectName];
|
|
63
|
+
while (queue.length > 0) {
|
|
64
|
+
const [current, p] = queue.pop();
|
|
65
|
+
path = [...p, current];
|
|
66
|
+
if (current === targetProjectName)
|
|
67
|
+
break;
|
|
68
|
+
if (!adjList[current])
|
|
69
|
+
break;
|
|
70
|
+
adjList[current]
|
|
71
|
+
.filter((adj) => visited.indexOf(adj) === -1)
|
|
72
|
+
.filter((adj) => reach.matrix[adj][targetProjectName])
|
|
73
|
+
.forEach((adj) => {
|
|
74
|
+
visited.push(adj);
|
|
75
|
+
queue.push([adj, [...path]]);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
if (path.length > 1) {
|
|
79
|
+
return path.map((n) => graph.nodes[n]);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.getPath = getPath;
|
|
86
|
+
function pathExists(graph, sourceProjectName, targetProjectName) {
|
|
87
|
+
if (sourceProjectName === targetProjectName)
|
|
88
|
+
return true;
|
|
89
|
+
if (reach.graph !== graph) {
|
|
90
|
+
const { matrix, adjList } = buildMatrix(graph);
|
|
91
|
+
reach.graph = graph;
|
|
92
|
+
reach.matrix = matrix;
|
|
93
|
+
reach.adjList = adjList;
|
|
94
|
+
}
|
|
95
|
+
return !!reach.matrix[sourceProjectName][targetProjectName];
|
|
96
|
+
}
|
|
97
|
+
exports.pathExists = pathExists;
|
|
98
|
+
function checkCircularPath(graph, sourceProject, targetProject) {
|
|
99
|
+
if (!graph.nodes[targetProject.name])
|
|
100
|
+
return [];
|
|
101
|
+
return getPath(graph, targetProject.name, sourceProject.name);
|
|
102
|
+
}
|
|
103
|
+
exports.checkCircularPath = checkCircularPath;
|
|
104
|
+
function findFilesInCircularPath(circularPath) {
|
|
105
|
+
const filePathChain = [];
|
|
106
|
+
for (let i = 0; i < circularPath.length - 1; i++) {
|
|
107
|
+
const next = circularPath[i + 1].name;
|
|
108
|
+
const files = circularPath[i].data.files;
|
|
109
|
+
filePathChain.push(Object.keys(files)
|
|
110
|
+
.filter((key) => files[key].dependencies &&
|
|
111
|
+
files[key].dependencies.find((d) => d.target === next))
|
|
112
|
+
.map((key) => files[key].file));
|
|
113
|
+
}
|
|
114
|
+
return filePathChain;
|
|
115
|
+
}
|
|
116
|
+
exports.findFilesInCircularPath = findFilesInCircularPath;
|
|
117
|
+
//# sourceMappingURL=graph-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-utils.js","sourceRoot":"","sources":["../../../../../packages/eslint-plugin/src/utils/graph-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ProjectGraph } from '@nx/devkit';
|
|
2
|
+
import { ProjectRootMappings } from 'nx/src/project-graph/utils/find-project-for-path';
|
|
3
|
+
export declare function ensureGlobalProjectGraph(ruleName: string): void;
|
|
4
|
+
export declare function readProjectGraph(ruleName: string): {
|
|
5
|
+
projectGraph: ProjectGraph;
|
|
6
|
+
projectRootMappings: ProjectRootMappings;
|
|
7
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.readProjectGraph = exports.ensureGlobalProjectGraph = void 0;
|
|
4
|
+
const devkit_1 = require("@nx/devkit");
|
|
5
|
+
const runtime_lint_utils_1 = require("./runtime-lint-utils");
|
|
6
|
+
const chalk = require("chalk");
|
|
7
|
+
const find_project_for_path_1 = require("nx/src/project-graph/utils/find-project-for-path");
|
|
8
|
+
const file_utils_1 = require("nx/src/project-graph/file-utils");
|
|
9
|
+
function ensureGlobalProjectGraph(ruleName) {
|
|
10
|
+
/**
|
|
11
|
+
* Only reuse graph when running from terminal
|
|
12
|
+
* Enforce every IDE change to get a fresh nxdeps.json
|
|
13
|
+
*/
|
|
14
|
+
if (!global.projectGraph ||
|
|
15
|
+
!global.projectRootMappings ||
|
|
16
|
+
!(0, runtime_lint_utils_1.isTerminalRun)()) {
|
|
17
|
+
const nxJson = (0, file_utils_1.readNxJson)();
|
|
18
|
+
global.workspaceLayout = nxJson.workspaceLayout;
|
|
19
|
+
/**
|
|
20
|
+
* Because there are a number of ways in which the rule can be invoked (executor vs ESLint CLI vs IDE Plugin),
|
|
21
|
+
* the ProjectGraph may or may not exist by the time the lint rule is invoked for the first time.
|
|
22
|
+
*/
|
|
23
|
+
try {
|
|
24
|
+
global.projectGraph = (0, devkit_1.readCachedProjectGraph)();
|
|
25
|
+
global.projectRootMappings = (0, find_project_for_path_1.createProjectRootMappings)(global.projectGraph.nodes);
|
|
26
|
+
}
|
|
27
|
+
catch (_a) {
|
|
28
|
+
const WARNING_PREFIX = `${chalk.reset.keyword('orange')('warning')}`;
|
|
29
|
+
const RULE_NAME_SUFFIX = `${chalk.reset.dim(`@nx/${ruleName}`)}`;
|
|
30
|
+
process.stdout
|
|
31
|
+
.write(`${WARNING_PREFIX} No cached ProjectGraph is available. The rule will be skipped.
|
|
32
|
+
If you encounter this error as part of running standard \`nx\` commands then please open an issue on https://github.com/nrwl/nx
|
|
33
|
+
${RULE_NAME_SUFFIX}\n`);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
exports.ensureGlobalProjectGraph = ensureGlobalProjectGraph;
|
|
38
|
+
function readProjectGraph(ruleName) {
|
|
39
|
+
ensureGlobalProjectGraph(ruleName);
|
|
40
|
+
return {
|
|
41
|
+
projectGraph: global.projectGraph,
|
|
42
|
+
projectRootMappings: global.projectRootMappings,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
exports.readProjectGraph = readProjectGraph;
|
|
46
|
+
//# sourceMappingURL=project-graph-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project-graph-utils.js","sourceRoot":"","sources":["../../../../../packages/eslint-plugin/src/utils/project-graph-utils.ts"],"names":[],"mappings":";;;AAAA,uCAAkE;AAClE,6DAAqD;AACrD,+BAA+B;AAC/B,4FAG0D;AAC1D,gEAA6D;AAE7D,SAAgB,wBAAwB,CAAC,QAAgB;IACvD;;;OAGG;IACH,IACE,CAAE,MAAc,CAAC,YAAY;QAC7B,CAAE,MAAc,CAAC,mBAAmB;QACpC,CAAC,IAAA,kCAAa,GAAE,EAChB;QACA,MAAM,MAAM,GAAG,IAAA,uBAAU,GAAE,CAAC;QAC3B,MAAc,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;QAEzD;;;WAGG;QACH,IAAI;YACD,MAAc,CAAC,YAAY,GAAG,IAAA,+BAAsB,GAAE,CAAC;YACvD,MAAc,CAAC,mBAAmB,GAAG,IAAA,iDAAyB,EAC5D,MAAc,CAAC,YAAY,CAAC,KAAK,CACnC,CAAC;SACH;QAAC,WAAM;YACN,MAAM,cAAc,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC;YACrE,MAAM,gBAAgB,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,QAAQ,EAAE,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,MAAM;iBACX,KAAK,CAAC,GAAG,cAAc;;YAEpB,gBAAgB,IAAI,CAAC,CAAC;SAC7B;KACF;AACH,CAAC;AA/BD,4DA+BC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAI/C,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO;QACL,YAAY,EAAG,MAAc,CAAC,YAAY;QAC1C,mBAAmB,EAAG,MAAc,CAAC,mBAAmB;KACzD,CAAC;AACJ,CAAC;AATD,4CASC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { ProjectGraph, ProjectGraphDependency, ProjectGraphExternalNode, ProjectGraphProjectNode } from '@nx/devkit';
|
|
2
|
+
import { ProjectRootMappings } from 'nx/src/project-graph/utils/find-project-for-path';
|
|
3
|
+
import { TargetProjectLocator } from '@nx/js/src/internal';
|
|
4
|
+
export type Deps = {
|
|
5
|
+
[projectName: string]: ProjectGraphDependency[];
|
|
6
|
+
};
|
|
7
|
+
type SingleSourceTagConstraint = {
|
|
8
|
+
sourceTag: string;
|
|
9
|
+
onlyDependOnLibsWithTags?: string[];
|
|
10
|
+
notDependOnLibsWithTags?: string[];
|
|
11
|
+
allowedExternalImports?: string[];
|
|
12
|
+
bannedExternalImports?: string[];
|
|
13
|
+
};
|
|
14
|
+
type ComboSourceTagConstraint = {
|
|
15
|
+
allSourceTags: string[];
|
|
16
|
+
onlyDependOnLibsWithTags?: string[];
|
|
17
|
+
notDependOnLibsWithTags?: string[];
|
|
18
|
+
allowedExternalImports?: string[];
|
|
19
|
+
bannedExternalImports?: string[];
|
|
20
|
+
};
|
|
21
|
+
export type DepConstraint = SingleSourceTagConstraint | ComboSourceTagConstraint;
|
|
22
|
+
export declare function stringifyTags(tags: string[]): string;
|
|
23
|
+
export declare function hasNoneOfTheseTags(proj: ProjectGraphProjectNode, tags: string[]): boolean;
|
|
24
|
+
export declare function isComboDepConstraint(depConstraint: DepConstraint): depConstraint is ComboSourceTagConstraint;
|
|
25
|
+
/**
|
|
26
|
+
* Check if any of the given tags is included in the project
|
|
27
|
+
* @param proj ProjectGraphProjectNode
|
|
28
|
+
* @param tags
|
|
29
|
+
* @returns
|
|
30
|
+
*/
|
|
31
|
+
export declare function findDependenciesWithTags(targetProject: ProjectGraphProjectNode, tags: string[], graph: ProjectGraph): ProjectGraphProjectNode[][];
|
|
32
|
+
export declare function matchImportWithWildcard(allowableImport: string, extractedImport: string): boolean;
|
|
33
|
+
export declare function isRelative(s: string): boolean;
|
|
34
|
+
export declare function getTargetProjectBasedOnRelativeImport(imp: string, projectPath: string, projectGraph: ProjectGraph, projectRootMappings: ProjectRootMappings, sourceFilePath: string): ProjectGraphProjectNode | undefined;
|
|
35
|
+
export declare function findProject(projectGraph: ProjectGraph, projectRootMappings: ProjectRootMappings, sourceFilePath: string): ProjectGraphProjectNode;
|
|
36
|
+
export declare function isAbsoluteImportIntoAnotherProject(imp: string, workspaceLayout?: {
|
|
37
|
+
libsDir: string;
|
|
38
|
+
appsDir: string;
|
|
39
|
+
}): boolean;
|
|
40
|
+
export declare function findProjectUsingImport(projectGraph: ProjectGraph, targetProjectLocator: TargetProjectLocator, filePath: string, imp: string): ProjectGraphProjectNode | ProjectGraphExternalNode;
|
|
41
|
+
export declare function findConstraintsFor(depConstraints: DepConstraint[], sourceProject: ProjectGraphProjectNode): DepConstraint[];
|
|
42
|
+
export declare function onlyLoadChildren(graph: ProjectGraph, sourceProjectName: string, targetProjectName: string, visited: string[]): any;
|
|
43
|
+
export declare function getSourceFilePath(sourceFileName: string, projectPath: string): string;
|
|
44
|
+
export declare function hasBannedImport(source: ProjectGraphProjectNode, target: ProjectGraphExternalNode, depConstraints: DepConstraint[]): DepConstraint | undefined;
|
|
45
|
+
/**
|
|
46
|
+
* Find all unique (transitive) external dependencies of given project
|
|
47
|
+
* @param graph
|
|
48
|
+
* @param source
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
export declare function findTransitiveExternalDependencies(graph: ProjectGraph, source: ProjectGraphProjectNode): ProjectGraphDependency[];
|
|
52
|
+
/**
|
|
53
|
+
* Check if
|
|
54
|
+
* @param externalDependencies
|
|
55
|
+
* @param graph
|
|
56
|
+
* @param depConstraint
|
|
57
|
+
* @returns
|
|
58
|
+
*/
|
|
59
|
+
export declare function hasBannedDependencies(externalDependencies: ProjectGraphDependency[], graph: ProjectGraph, depConstraint: DepConstraint): Array<[ProjectGraphExternalNode, ProjectGraphProjectNode, DepConstraint]> | undefined;
|
|
60
|
+
export declare function isDirectDependency(source: ProjectGraphProjectNode, target: ProjectGraphExternalNode): boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Verifies whether the given node has an architect builder attached
|
|
63
|
+
* @param projectGraph the node to verify
|
|
64
|
+
*/
|
|
65
|
+
export declare function hasBuildExecutor(projectGraph: ProjectGraphProjectNode): boolean;
|
|
66
|
+
export declare function isTerminalRun(): boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Takes an array of imports and tries to group them, so rather than having
|
|
69
|
+
* `import { A } from './some-location'` and `import { B } from './some-location'` you get
|
|
70
|
+
* `import { A, B } from './some-location'`
|
|
71
|
+
* @param importsToRemap
|
|
72
|
+
* @returns
|
|
73
|
+
*/
|
|
74
|
+
export declare function groupImports(importsToRemap: {
|
|
75
|
+
member: string;
|
|
76
|
+
importPath: string;
|
|
77
|
+
}[]): string;
|
|
78
|
+
/**
|
|
79
|
+
* Checks if import points to a secondary entry point in Angular project
|
|
80
|
+
* @param targetProjectLocator
|
|
81
|
+
* @param importExpr
|
|
82
|
+
* @returns
|
|
83
|
+
*/
|
|
84
|
+
export declare function isAngularSecondaryEntrypoint(importExpr: string, filePath: string, projectRoot: string): boolean;
|
|
85
|
+
export {};
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAngularSecondaryEntrypoint = exports.groupImports = exports.isTerminalRun = exports.hasBuildExecutor = exports.isDirectDependency = exports.hasBannedDependencies = exports.findTransitiveExternalDependencies = exports.hasBannedImport = exports.getSourceFilePath = exports.onlyLoadChildren = exports.findConstraintsFor = exports.findProjectUsingImport = exports.isAbsoluteImportIntoAnotherProject = exports.findProject = exports.getTargetProjectBasedOnRelativeImport = exports.isRelative = exports.matchImportWithWildcard = exports.findDependenciesWithTags = exports.isComboDepConstraint = exports.hasNoneOfTheseTags = exports.stringifyTags = void 0;
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const devkit_1 = require("@nx/devkit");
|
|
7
|
+
const graph_utils_1 = require("./graph-utils");
|
|
8
|
+
const fileutils_1 = require("nx/src/utils/fileutils");
|
|
9
|
+
const find_project_for_path_1 = require("nx/src/project-graph/utils/find-project-for-path");
|
|
10
|
+
const js_1 = require("@nx/js");
|
|
11
|
+
const internal_1 = require("@nx/js/src/internal");
|
|
12
|
+
function stringifyTags(tags) {
|
|
13
|
+
return tags.map((t) => `"${t}"`).join(', ');
|
|
14
|
+
}
|
|
15
|
+
exports.stringifyTags = stringifyTags;
|
|
16
|
+
function hasNoneOfTheseTags(proj, tags) {
|
|
17
|
+
return tags.filter((tag) => hasTag(proj, tag)).length === 0;
|
|
18
|
+
}
|
|
19
|
+
exports.hasNoneOfTheseTags = hasNoneOfTheseTags;
|
|
20
|
+
function isComboDepConstraint(depConstraint) {
|
|
21
|
+
return !!depConstraint.allSourceTags;
|
|
22
|
+
}
|
|
23
|
+
exports.isComboDepConstraint = isComboDepConstraint;
|
|
24
|
+
/**
|
|
25
|
+
* Check if any of the given tags is included in the project
|
|
26
|
+
* @param proj ProjectGraphProjectNode
|
|
27
|
+
* @param tags
|
|
28
|
+
* @returns
|
|
29
|
+
*/
|
|
30
|
+
function findDependenciesWithTags(targetProject, tags, graph) {
|
|
31
|
+
// find all reachable projects that have one of the tags and
|
|
32
|
+
// are reacheable from the targetProject (including self)
|
|
33
|
+
const allReachableProjects = Object.keys(graph.nodes).filter((projectName) => (0, graph_utils_1.pathExists)(graph, targetProject.name, projectName) &&
|
|
34
|
+
tags.some((tag) => hasTag(graph.nodes[projectName], tag)));
|
|
35
|
+
// return path from targetProject to reachable project
|
|
36
|
+
return allReachableProjects.map((project) => targetProject.name === project
|
|
37
|
+
? [targetProject]
|
|
38
|
+
: (0, graph_utils_1.getPath)(graph, targetProject.name, project));
|
|
39
|
+
}
|
|
40
|
+
exports.findDependenciesWithTags = findDependenciesWithTags;
|
|
41
|
+
const regexMap = new Map();
|
|
42
|
+
function hasTag(proj, tag) {
|
|
43
|
+
if (tag === '*')
|
|
44
|
+
return true;
|
|
45
|
+
// if the tag is a regex, check if the project matches the regex
|
|
46
|
+
if (tag.startsWith('/') && tag.endsWith('/')) {
|
|
47
|
+
let regex;
|
|
48
|
+
if (regexMap.has(tag)) {
|
|
49
|
+
regex = regexMap.get(tag);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
regex = new RegExp(tag.substring(1, tag.length - 1));
|
|
53
|
+
regexMap.set(tag, regex);
|
|
54
|
+
}
|
|
55
|
+
return (proj.data.tags || []).some((t) => regex.test(t));
|
|
56
|
+
}
|
|
57
|
+
return (proj.data.tags || []).indexOf(tag) > -1;
|
|
58
|
+
}
|
|
59
|
+
function matchImportWithWildcard(
|
|
60
|
+
// This may or may not contain wildcards ("*")
|
|
61
|
+
allowableImport, extractedImport) {
|
|
62
|
+
if (allowableImport.endsWith('/**')) {
|
|
63
|
+
const prefix = allowableImport.substring(0, allowableImport.length - 2);
|
|
64
|
+
return extractedImport.startsWith(prefix);
|
|
65
|
+
}
|
|
66
|
+
else if (allowableImport.endsWith('/*')) {
|
|
67
|
+
const prefix = allowableImport.substring(0, allowableImport.length - 1);
|
|
68
|
+
if (!extractedImport.startsWith(prefix))
|
|
69
|
+
return false;
|
|
70
|
+
return extractedImport.substring(prefix.length).indexOf('/') === -1;
|
|
71
|
+
}
|
|
72
|
+
else if (allowableImport.indexOf('/**/') > -1) {
|
|
73
|
+
const [prefix, suffix] = allowableImport.split('/**/');
|
|
74
|
+
return (extractedImport.startsWith(prefix) && extractedImport.endsWith(suffix));
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
return new RegExp(allowableImport).test(extractedImport);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.matchImportWithWildcard = matchImportWithWildcard;
|
|
81
|
+
function isRelative(s) {
|
|
82
|
+
return s.startsWith('.');
|
|
83
|
+
}
|
|
84
|
+
exports.isRelative = isRelative;
|
|
85
|
+
function getTargetProjectBasedOnRelativeImport(imp, projectPath, projectGraph, projectRootMappings, sourceFilePath) {
|
|
86
|
+
if (!isRelative(imp)) {
|
|
87
|
+
return undefined;
|
|
88
|
+
}
|
|
89
|
+
const sourceDir = path.join(projectPath, path.dirname(sourceFilePath));
|
|
90
|
+
const targetFile = (0, devkit_1.normalizePath)(path.resolve(sourceDir, imp)).substring(projectPath.length + 1);
|
|
91
|
+
return findProject(projectGraph, projectRootMappings, targetFile);
|
|
92
|
+
}
|
|
93
|
+
exports.getTargetProjectBasedOnRelativeImport = getTargetProjectBasedOnRelativeImport;
|
|
94
|
+
function findProject(projectGraph, projectRootMappings, sourceFilePath) {
|
|
95
|
+
return projectGraph.nodes[(0, find_project_for_path_1.findProjectForPath)(sourceFilePath, projectRootMappings)];
|
|
96
|
+
}
|
|
97
|
+
exports.findProject = findProject;
|
|
98
|
+
function isAbsoluteImportIntoAnotherProject(imp, workspaceLayout = { libsDir: 'libs', appsDir: 'apps' }) {
|
|
99
|
+
return (imp.startsWith(`${workspaceLayout.libsDir}/`) ||
|
|
100
|
+
imp.startsWith(`/${workspaceLayout.libsDir}/`) ||
|
|
101
|
+
imp.startsWith(`${workspaceLayout.appsDir}/`) ||
|
|
102
|
+
imp.startsWith(`/${workspaceLayout.appsDir}/`));
|
|
103
|
+
}
|
|
104
|
+
exports.isAbsoluteImportIntoAnotherProject = isAbsoluteImportIntoAnotherProject;
|
|
105
|
+
function findProjectUsingImport(projectGraph, targetProjectLocator, filePath, imp) {
|
|
106
|
+
var _a;
|
|
107
|
+
const target = targetProjectLocator.findProjectWithImport(imp, filePath);
|
|
108
|
+
return projectGraph.nodes[target] || ((_a = projectGraph.externalNodes) === null || _a === void 0 ? void 0 : _a[target]);
|
|
109
|
+
}
|
|
110
|
+
exports.findProjectUsingImport = findProjectUsingImport;
|
|
111
|
+
function findConstraintsFor(depConstraints, sourceProject) {
|
|
112
|
+
return depConstraints.filter((f) => {
|
|
113
|
+
if (isComboDepConstraint(f)) {
|
|
114
|
+
return f.allSourceTags.every((tag) => hasTag(sourceProject, tag));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
return hasTag(sourceProject, f.sourceTag);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
exports.findConstraintsFor = findConstraintsFor;
|
|
122
|
+
function onlyLoadChildren(graph, sourceProjectName, targetProjectName, visited) {
|
|
123
|
+
if (visited.indexOf(sourceProjectName) > -1)
|
|
124
|
+
return false;
|
|
125
|
+
return ((graph.dependencies[sourceProjectName] || []).filter((d) => {
|
|
126
|
+
if (d.type !== devkit_1.DependencyType.dynamic)
|
|
127
|
+
return false;
|
|
128
|
+
if (d.target === targetProjectName)
|
|
129
|
+
return true;
|
|
130
|
+
return onlyLoadChildren(graph, d.target, targetProjectName, [
|
|
131
|
+
...visited,
|
|
132
|
+
sourceProjectName,
|
|
133
|
+
]);
|
|
134
|
+
}).length > 0);
|
|
135
|
+
}
|
|
136
|
+
exports.onlyLoadChildren = onlyLoadChildren;
|
|
137
|
+
function getSourceFilePath(sourceFileName, projectPath) {
|
|
138
|
+
const relativePath = sourceFileName.slice(projectPath.length + 1);
|
|
139
|
+
return (0, devkit_1.normalizePath)(relativePath);
|
|
140
|
+
}
|
|
141
|
+
exports.getSourceFilePath = getSourceFilePath;
|
|
142
|
+
/**
|
|
143
|
+
* Find constraint (if any) that explicitly banns the given target npm project
|
|
144
|
+
* @param externalProject
|
|
145
|
+
* @param depConstraints
|
|
146
|
+
* @returns
|
|
147
|
+
*/
|
|
148
|
+
function isConstraintBanningProject(externalProject, constraint) {
|
|
149
|
+
const { allowedExternalImports, bannedExternalImports } = constraint;
|
|
150
|
+
const { packageName } = externalProject.data;
|
|
151
|
+
/* Check if import is banned... */
|
|
152
|
+
if (bannedExternalImports === null || bannedExternalImports === void 0 ? void 0 : bannedExternalImports.some((importDefinition) => parseImportWildcards(importDefinition).test(packageName))) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
/* ... then check if there is a whitelist and if there is a match in the whitelist. */
|
|
156
|
+
return allowedExternalImports === null || allowedExternalImports === void 0 ? void 0 : allowedExternalImports.every((importDefinition) => !parseImportWildcards(importDefinition).test(packageName));
|
|
157
|
+
}
|
|
158
|
+
function hasBannedImport(source, target, depConstraints) {
|
|
159
|
+
// return those constraints that match source project
|
|
160
|
+
depConstraints = depConstraints.filter((c) => {
|
|
161
|
+
let tags = [];
|
|
162
|
+
if (isComboDepConstraint(c)) {
|
|
163
|
+
tags = c.allSourceTags;
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
tags = [c.sourceTag];
|
|
167
|
+
}
|
|
168
|
+
return tags.every((t) => hasTag(source, t));
|
|
169
|
+
});
|
|
170
|
+
return depConstraints.find((constraint) => isConstraintBanningProject(target, constraint));
|
|
171
|
+
}
|
|
172
|
+
exports.hasBannedImport = hasBannedImport;
|
|
173
|
+
/**
|
|
174
|
+
* Find all unique (transitive) external dependencies of given project
|
|
175
|
+
* @param graph
|
|
176
|
+
* @param source
|
|
177
|
+
* @returns
|
|
178
|
+
*/
|
|
179
|
+
function findTransitiveExternalDependencies(graph, source) {
|
|
180
|
+
if (!graph.externalNodes) {
|
|
181
|
+
return [];
|
|
182
|
+
}
|
|
183
|
+
const allReachableProjects = [];
|
|
184
|
+
const allProjects = Object.keys(graph.nodes);
|
|
185
|
+
for (let i = 0; i < allProjects.length; i++) {
|
|
186
|
+
if ((0, graph_utils_1.pathExists)(graph, source.name, allProjects[i])) {
|
|
187
|
+
allReachableProjects.push(allProjects[i]);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const externalDependencies = [];
|
|
191
|
+
for (let i = 0; i < allReachableProjects.length; i++) {
|
|
192
|
+
const dependencies = graph.dependencies[allReachableProjects[i]];
|
|
193
|
+
if (dependencies) {
|
|
194
|
+
for (let d = 0; d < dependencies.length; d++) {
|
|
195
|
+
const dependency = dependencies[d];
|
|
196
|
+
if (graph.externalNodes[dependency.target]) {
|
|
197
|
+
externalDependencies.push(dependency);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return externalDependencies;
|
|
203
|
+
}
|
|
204
|
+
exports.findTransitiveExternalDependencies = findTransitiveExternalDependencies;
|
|
205
|
+
/**
|
|
206
|
+
* Check if
|
|
207
|
+
* @param externalDependencies
|
|
208
|
+
* @param graph
|
|
209
|
+
* @param depConstraint
|
|
210
|
+
* @returns
|
|
211
|
+
*/
|
|
212
|
+
function hasBannedDependencies(externalDependencies, graph, depConstraint) {
|
|
213
|
+
return externalDependencies
|
|
214
|
+
.filter((dependency) => isConstraintBanningProject(graph.externalNodes[dependency.target], depConstraint))
|
|
215
|
+
.map((dep) => [
|
|
216
|
+
graph.externalNodes[dep.target],
|
|
217
|
+
graph.nodes[dep.source],
|
|
218
|
+
depConstraint,
|
|
219
|
+
]);
|
|
220
|
+
}
|
|
221
|
+
exports.hasBannedDependencies = hasBannedDependencies;
|
|
222
|
+
function isDirectDependency(source, target) {
|
|
223
|
+
return (packageExistsInPackageJson(target.data.packageName, '.') ||
|
|
224
|
+
packageExistsInPackageJson(target.data.packageName, source.data.root));
|
|
225
|
+
}
|
|
226
|
+
exports.isDirectDependency = isDirectDependency;
|
|
227
|
+
function packageExistsInPackageJson(packageName, projectRoot) {
|
|
228
|
+
const content = (0, fileutils_1.readFileIfExisting)((0, path_1.join)(devkit_1.workspaceRoot, projectRoot, 'package.json'));
|
|
229
|
+
if (content) {
|
|
230
|
+
const { dependencies, devDependencies, peerDependencies } = (0, devkit_1.parseJson)(content);
|
|
231
|
+
if (dependencies && dependencies[packageName]) {
|
|
232
|
+
return true;
|
|
233
|
+
}
|
|
234
|
+
if (peerDependencies && peerDependencies[packageName]) {
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
if (devDependencies && devDependencies[packageName]) {
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return false;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Maps import with wildcards to regex pattern
|
|
245
|
+
* @param importDefinition
|
|
246
|
+
* @returns
|
|
247
|
+
*/
|
|
248
|
+
function parseImportWildcards(importDefinition) {
|
|
249
|
+
// we replace all instances of `*`, `**..*` and `.*` with `.*`
|
|
250
|
+
const mappedWildcards = importDefinition.split(/(?:\.\*)|\*+/).join('.*');
|
|
251
|
+
return new RegExp(`^${new RegExp(mappedWildcards).source}$`);
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Verifies whether the given node has an architect builder attached
|
|
255
|
+
* @param projectGraph the node to verify
|
|
256
|
+
*/
|
|
257
|
+
function hasBuildExecutor(projectGraph) {
|
|
258
|
+
return (
|
|
259
|
+
// can the architect not be defined? real use case?
|
|
260
|
+
projectGraph.data.targets &&
|
|
261
|
+
projectGraph.data.targets.build &&
|
|
262
|
+
projectGraph.data.targets.build.executor !== '');
|
|
263
|
+
}
|
|
264
|
+
exports.hasBuildExecutor = hasBuildExecutor;
|
|
265
|
+
const ESLINT_REGEX = /node_modules.*[\/\\]eslint$/;
|
|
266
|
+
const JEST_REGEX = /node_modules\/.bin\/jest$/; // when we run unit tests in jest
|
|
267
|
+
const NRWL_CLI_REGEX = /nx[\/\\]bin[\/\\]run-executor\.js$/;
|
|
268
|
+
function isTerminalRun() {
|
|
269
|
+
return (process.argv.length > 1 &&
|
|
270
|
+
(!!process.argv[1].match(NRWL_CLI_REGEX) ||
|
|
271
|
+
!!process.argv[1].match(JEST_REGEX) ||
|
|
272
|
+
!!process.argv[1].match(ESLINT_REGEX)));
|
|
273
|
+
}
|
|
274
|
+
exports.isTerminalRun = isTerminalRun;
|
|
275
|
+
/**
|
|
276
|
+
* Takes an array of imports and tries to group them, so rather than having
|
|
277
|
+
* `import { A } from './some-location'` and `import { B } from './some-location'` you get
|
|
278
|
+
* `import { A, B } from './some-location'`
|
|
279
|
+
* @param importsToRemap
|
|
280
|
+
* @returns
|
|
281
|
+
*/
|
|
282
|
+
function groupImports(importsToRemap) {
|
|
283
|
+
const importsToRemapGrouped = importsToRemap.reduce((acc, curr) => {
|
|
284
|
+
const existing = acc.find((i) => i.importPath === curr.importPath && i.member !== curr.member);
|
|
285
|
+
if (existing) {
|
|
286
|
+
if (existing.member) {
|
|
287
|
+
existing.member += `, ${curr.member}`;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
acc.push({
|
|
292
|
+
importPath: curr.importPath,
|
|
293
|
+
member: curr.member,
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
return acc;
|
|
297
|
+
}, []);
|
|
298
|
+
return importsToRemapGrouped
|
|
299
|
+
.map((entry) => `import { ${entry.member} } from '${entry.importPath}';`)
|
|
300
|
+
.join('\n');
|
|
301
|
+
}
|
|
302
|
+
exports.groupImports = groupImports;
|
|
303
|
+
/**
|
|
304
|
+
* Checks if import points to a secondary entry point in Angular project
|
|
305
|
+
* @param targetProjectLocator
|
|
306
|
+
* @param importExpr
|
|
307
|
+
* @returns
|
|
308
|
+
*/
|
|
309
|
+
function isAngularSecondaryEntrypoint(importExpr, filePath, projectRoot) {
|
|
310
|
+
const resolvedModule = (0, internal_1.resolveModuleByImport)(importExpr, filePath, (0, path_1.join)(devkit_1.workspaceRoot, (0, js_1.getRootTsConfigFileName)()));
|
|
311
|
+
return (!!resolvedModule && fileIsSecondaryEntryPoint(resolvedModule, projectRoot));
|
|
312
|
+
}
|
|
313
|
+
exports.isAngularSecondaryEntrypoint = isAngularSecondaryEntrypoint;
|
|
314
|
+
function fileIsSecondaryEntryPoint(file, projectRoot) {
|
|
315
|
+
var _a, _b;
|
|
316
|
+
let parent = (0, devkit_1.joinPathFragments)(file, '../');
|
|
317
|
+
while (parent !== `${projectRoot}/`) {
|
|
318
|
+
// we need to find closest existing ng-package.json
|
|
319
|
+
// in order to determine if the file matches the secondary entry point
|
|
320
|
+
const ngPackageContent = (0, fileutils_1.readFileIfExisting)((0, devkit_1.joinPathFragments)(devkit_1.workspaceRoot, parent, 'ng-package.json'));
|
|
321
|
+
if (ngPackageContent) {
|
|
322
|
+
// https://github.com/ng-packagr/ng-packagr/blob/23c718d04eea85e015b4c261310b7bd0c39e5311/src/ng-package.schema.json#L54
|
|
323
|
+
const entryFile = (_b = (_a = (0, devkit_1.parseJson)(ngPackageContent)) === null || _a === void 0 ? void 0 : _a.lib) === null || _b === void 0 ? void 0 : _b.entryFile;
|
|
324
|
+
return entryFile && file === (0, devkit_1.joinPathFragments)(parent, entryFile);
|
|
325
|
+
}
|
|
326
|
+
parent = (0, devkit_1.joinPathFragments)(parent, '../');
|
|
327
|
+
}
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=runtime-lint-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-lint-utils.js","sourceRoot":"","sources":["../../../../../packages/eslint-plugin/src/utils/runtime-lint-utils.ts"],"names":[],"mappings":"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"}
|