@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.
Files changed (65) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/LICENSE +22 -0
  3. package/README.md +63 -0
  4. package/migrations.json +12 -0
  5. package/package.json +52 -0
  6. package/src/configs/angular-template.d.ts +20 -0
  7. package/src/configs/angular-template.js +22 -0
  8. package/src/configs/angular-template.js.map +1 -0
  9. package/src/configs/angular.d.ts +25 -0
  10. package/src/configs/angular.js +43 -0
  11. package/src/configs/angular.js.map +1 -0
  12. package/src/configs/javascript.d.ts +42 -0
  13. package/src/configs/javascript.js +51 -0
  14. package/src/configs/javascript.js.map +1 -0
  15. package/src/configs/react-base.d.ts +112 -0
  16. package/src/configs/react-base.js +141 -0
  17. package/src/configs/react-base.js.map +1 -0
  18. package/src/configs/react-jsx.d.ts +71 -0
  19. package/src/configs/react-jsx.js +65 -0
  20. package/src/configs/react-jsx.js.map +1 -0
  21. package/src/configs/react-tmp.d.ts +12 -0
  22. package/src/configs/react-tmp.js +18 -0
  23. package/src/configs/react-tmp.js.map +1 -0
  24. package/src/configs/react-typescript.d.ts +41 -0
  25. package/src/configs/react-typescript.js +56 -0
  26. package/src/configs/react-typescript.js.map +1 -0
  27. package/src/configs/typescript.d.ts +24 -0
  28. package/src/configs/typescript.js +34 -0
  29. package/src/configs/typescript.js.map +1 -0
  30. package/src/constants.d.ts +12 -0
  31. package/src/constants.js +18 -0
  32. package/src/constants.js.map +1 -0
  33. package/src/index.d.ts +1 -0
  34. package/src/index.js +28 -0
  35. package/src/index.js.map +1 -0
  36. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.d.ts +2 -0
  37. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js +33 -0
  38. package/src/migrations/update-16-0-0-add-nx-packages/update-16-0-0-add-nx-packages.js.map +1 -0
  39. package/src/resolve-workspace-rules.d.ts +4 -0
  40. package/src/resolve-workspace-rules.js +36 -0
  41. package/src/resolve-workspace-rules.js.map +1 -0
  42. package/src/rules/enforce-module-boundaries.d.ts +16 -0
  43. package/src/rules/enforce-module-boundaries.js +428 -0
  44. package/src/rules/enforce-module-boundaries.js.map +1 -0
  45. package/src/rules/nx-plugin-checks.d.ts +21 -0
  46. package/src/rules/nx-plugin-checks.js +359 -0
  47. package/src/rules/nx-plugin-checks.js.map +1 -0
  48. package/src/utils/ast-utils.d.ts +12 -0
  49. package/src/utils/ast-utils.js +181 -0
  50. package/src/utils/ast-utils.js.map +1 -0
  51. package/src/utils/config-utils.d.ts +6 -0
  52. package/src/utils/config-utils.js +21 -0
  53. package/src/utils/config-utils.js.map +1 -0
  54. package/src/utils/create-eslint-rule.d.ts +2 -0
  55. package/src/utils/create-eslint-rule.js +6 -0
  56. package/src/utils/create-eslint-rule.js.map +1 -0
  57. package/src/utils/graph-utils.d.ts +5 -0
  58. package/src/utils/graph-utils.js +117 -0
  59. package/src/utils/graph-utils.js.map +1 -0
  60. package/src/utils/project-graph-utils.d.ts +7 -0
  61. package/src/utils/project-graph-utils.js +46 -0
  62. package/src/utils/project-graph-utils.js.map +1 -0
  63. package/src/utils/runtime-lint-utils.d.ts +85 -0
  64. package/src/utils/runtime-lint-utils.js +330 -0
  65. 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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"}