@nx/eslint-plugin 16.6.0-beta.1 → 16.6.0-beta.3

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/eslint-plugin",
3
- "version": "16.6.0-beta.1",
3
+ "version": "16.6.0-beta.3",
4
4
  "private": false,
5
5
  "description": "The eslint-plugin package is an ESLint plugin that contains a collection of recommended ESLint rule configurations which you can extend from in your own ESLint configs, as well as an Nx-specific lint rule called enforce-module-boundaries.",
6
6
  "repository": {
@@ -33,9 +33,9 @@
33
33
  }
34
34
  },
35
35
  "dependencies": {
36
- "@nrwl/eslint-plugin-nx": "16.6.0-beta.1",
37
- "@nx/devkit": "16.6.0-beta.1",
38
- "@nx/js": "16.6.0-beta.1",
36
+ "@nrwl/eslint-plugin-nx": "16.6.0-beta.3",
37
+ "@nx/devkit": "16.6.0-beta.3",
38
+ "@nx/js": "16.6.0-beta.3",
39
39
  "@typescript-eslint/type-utils": "^5.60.1",
40
40
  "@typescript-eslint/utils": "^5.60.1",
41
41
  "chalk": "^4.1.0",
@@ -50,5 +50,5 @@
50
50
  "migrations": "./migrations.json"
51
51
  },
52
52
  "types": "./src/index.d.ts",
53
- "gitHead": "cf9f5cbe6a7ce3b916ec6505dc8488f669cbc52b"
53
+ "gitHead": "cd8c61d7a3b8ab9bc7bab068f5ca49bbf14abbf5"
54
54
  }
@@ -6,6 +6,7 @@ export type Options = [
6
6
  checkVersionMismatches?: boolean;
7
7
  checkMissingPackageJson?: boolean;
8
8
  ignoredDependencies?: string[];
9
+ includeTransitiveDependencies?: boolean;
9
10
  }
10
11
  ];
11
12
  export type MessageIds = 'missingDependency' | 'obsoleteDependency' | 'versionMismatch' | 'missingDependencySection';
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RULE_NAME = void 0;
4
+ const path_1 = require("path");
5
+ const semver_1 = require("semver");
4
6
  const devkit_1 = require("@nx/devkit");
7
+ const find_npm_dependencies_1 = require("@nx/js/src/utils/find-npm-dependencies");
5
8
  const create_eslint_rule_1 = require("../utils/create-eslint-rule");
6
9
  const project_graph_utils_1 = require("../utils/project-graph-utils");
7
10
  const runtime_lint_utils_1 = require("../utils/runtime-lint-utils");
8
- const path_1 = require("path");
9
- const internal_1 = require("@nx/js/src/internal");
10
- const semver_1 = require("semver");
11
- const js_1 = require("@nx/js");
12
11
  const package_json_utils_1 = require("../utils/package-json-utils");
13
12
  exports.RULE_NAME = 'dependency-checks';
14
13
  exports.default = (0, create_eslint_rule_1.createESLintRule)({
@@ -29,6 +28,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
29
28
  checkMissingDependencies: { type: 'boolean' },
30
29
  checkObsoleteDependencies: { type: 'boolean' },
31
30
  checkVersionMismatches: { type: 'boolean' },
31
+ includeTransitiveDependencies: { type: 'boolean' },
32
32
  },
33
33
  additionalProperties: false,
34
34
  },
@@ -47,9 +47,10 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
47
47
  checkObsoleteDependencies: true,
48
48
  checkVersionMismatches: true,
49
49
  ignoredDependencies: [],
50
+ includeTransitiveDependencies: false,
50
51
  },
51
52
  ],
52
- create(context, [{ buildTargets, ignoredDependencies, checkMissingDependencies, checkObsoleteDependencies, checkVersionMismatches, },]) {
53
+ create(context, [{ buildTargets, ignoredDependencies, checkMissingDependencies, checkObsoleteDependencies, checkVersionMismatches, includeTransitiveDependencies, },]) {
53
54
  var _a;
54
55
  if (!context.parserServices.isJSON) {
55
56
  return {};
@@ -59,8 +60,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
59
60
  if (!fileName.endsWith('/package.json')) {
60
61
  return {};
61
62
  }
62
- const projectPath = (0, devkit_1.normalizePath)(globalThis.projectPath || devkit_1.workspaceRoot);
63
- const sourceFilePath = (0, runtime_lint_utils_1.getSourceFilePath)(fileName, projectPath);
63
+ const sourceFilePath = (0, runtime_lint_utils_1.getSourceFilePath)(fileName, devkit_1.workspaceRoot);
64
64
  const { projectGraph, projectRootMappings, projectFileMap } = (0, project_graph_utils_1.readProjectGraph)(exports.RULE_NAME);
65
65
  if (!projectGraph) {
66
66
  return {};
@@ -75,16 +75,12 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
75
75
  if (!buildTarget) {
76
76
  return {};
77
77
  }
78
- // gather helper dependencies for @nx/js executors
79
- const helperDependencies = (0, js_1.getHelperDependenciesFromProjectGraph)(devkit_1.workspaceRoot, sourceProject.name, projectGraph);
80
78
  const rootPackageJson = (0, package_json_utils_1.getPackageJson)((0, path_1.join)(devkit_1.workspaceRoot, 'package.json'));
81
- // find all dependencies for the project
82
- const npmDeps = (0, internal_1.findProjectsNpmDependencies)(sourceProject, projectGraph, buildTarget, rootPackageJson, {
83
- helperDependencies: helperDependencies.map((dep) => dep.target),
84
- isProduction: true,
85
- }, (0, package_json_utils_1.removePackageJsonFromFileMap)(projectFileMap));
86
- const projDependencies = Object.assign(Object.assign({}, npmDeps.dependencies), npmDeps.peerDependencies);
87
- const expectedDependencyNames = Object.keys(projDependencies);
79
+ const npmDependencies = (0, find_npm_dependencies_1.findNpmDependencies)(devkit_1.workspaceRoot, sourceProject, projectGraph, projectFileMap, buildTarget, // TODO: What if child library has a build target different from the parent?
80
+ {
81
+ includeTransitiveDependencies,
82
+ });
83
+ const expectedDependencyNames = Object.keys(npmDependencies);
88
84
  const projPackageJsonPath = (0, path_1.join)(devkit_1.workspaceRoot, sourceProject.data.root, 'package.json');
89
85
  (_a = globalThis.projPackageJsonDeps) !== null && _a !== void 0 ? _a : (globalThis.projPackageJsonDeps = (0, package_json_utils_1.getAllDependencies)((0, package_json_utils_1.getPackageJson)(projPackageJsonPath)));
90
86
  const projPackageJsonDeps = globalThis.projPackageJsonDeps;
@@ -106,7 +102,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
106
102
  fix(fixer) {
107
103
  missingDeps.forEach((d) => {
108
104
  projPackageJsonDeps[d] =
109
- rootPackageJsonDeps[d] || projDependencies[d];
105
+ rootPackageJsonDeps[d] || npmDependencies[d];
110
106
  });
111
107
  const deps = node.value.properties;
112
108
  const mappedDeps = missingDeps
@@ -126,8 +122,9 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
126
122
  if (!checkVersionMismatches) {
127
123
  return;
128
124
  }
129
- if (projDependencies[packageName] === '*' ||
130
- (0, semver_1.satisfies)(projDependencies[packageName], packageRange)) {
125
+ if (npmDependencies[packageName] === '*' ||
126
+ packageRange === '*' ||
127
+ (0, semver_1.satisfies)(npmDependencies[packageName], packageRange)) {
131
128
  return;
132
129
  }
133
130
  context.report({
@@ -135,9 +132,9 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
135
132
  messageId: 'versionMismatch',
136
133
  data: {
137
134
  packageName: packageName,
138
- version: projDependencies[packageName],
135
+ version: npmDependencies[packageName],
139
136
  },
140
- fix: (fixer) => fixer.replaceText(node, `"${packageName}": "${rootPackageJsonDeps[packageName] || projDependencies[packageName]}"`),
137
+ fix: (fixer) => fixer.replaceText(node, `"${packageName}": "${rootPackageJsonDeps[packageName] || npmDependencies[packageName]}"`),
141
138
  });
142
139
  }
143
140
  function reportObsoleteDependency(node, packageName) {
@@ -198,13 +195,13 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
198
195
  .join(),
199
196
  },
200
197
  fix: (fixer) => {
201
- expectedDependencyNames.sort().reduce((acc, d) => {
202
- acc[d] = rootPackageJsonDeps[d] || projDependencies[d];
203
- return acc;
204
- }, projPackageJsonDeps);
205
198
  const dependencies = Object.keys(projPackageJsonDeps)
206
199
  .map((d) => `\n "${d}": "${projPackageJsonDeps[d]}"`)
207
200
  .join(',');
201
+ expectedDependencyNames.sort().reduce((acc, d) => {
202
+ acc[d] = rootPackageJsonDeps[d] || dependencies[d];
203
+ return acc;
204
+ }, projPackageJsonDeps);
208
205
  if (!node.properties.length) {
209
206
  return fixer.replaceText(node, `{\n "dependencies": {${dependencies}\n }\n}`);
210
207
  }
@@ -217,7 +214,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
217
214
  }
218
215
  return {
219
216
  ['JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=/^(dev|peer|optional)?dependencies$/i]'](node) {
220
- return validateMissingDependencies(node);
217
+ validateMissingDependencies(node);
221
218
  },
222
219
  ['JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=/^(dev|peer|optional)?dependencies$/i] > JSONObjectExpression > JSONProperty'](node) {
223
220
  const packageName = node.key.value;
@@ -226,14 +223,14 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
226
223
  return;
227
224
  }
228
225
  if (expectedDependencyNames.includes(packageName)) {
229
- return validateVersionMatchesInstalled(node, packageName, packageRange);
226
+ validateVersionMatchesInstalled(node, packageName, packageRange);
230
227
  }
231
228
  else {
232
- return reportObsoleteDependency(node, packageName);
229
+ reportObsoleteDependency(node, packageName);
233
230
  }
234
231
  },
235
232
  ['JSONExpressionStatement > JSONObjectExpression'](node) {
236
- return validateDependenciesSectionExistance(node);
233
+ validateDependenciesSectionExistance(node);
237
234
  },
238
235
  };
239
236
  },
@@ -1,5 +1,3 @@
1
- import { ProjectFileMap } from '@nx/devkit';
2
1
  import { PackageJson } from 'nx/src/utils/package-json';
3
2
  export declare function getAllDependencies(packageJson: PackageJson): Record<string, string>;
4
3
  export declare function getPackageJson(path: string): PackageJson;
5
- export declare function removePackageJsonFromFileMap(projectFileMap: ProjectFileMap): ProjectFileMap;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.removePackageJsonFromFileMap = exports.getPackageJson = exports.getAllDependencies = void 0;
3
+ exports.getPackageJson = exports.getAllDependencies = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const fs_1 = require("fs");
6
6
  function getAllDependencies(packageJson) {
7
- return Object.assign(Object.assign(Object.assign({}, packageJson.dependencies), packageJson.devDependencies), packageJson.peerDependencies);
7
+ return Object.assign(Object.assign(Object.assign(Object.assign({}, packageJson.dependencies), packageJson.devDependencies), packageJson.peerDependencies), packageJson.optionalDependencies);
8
8
  }
9
9
  exports.getAllDependencies = getAllDependencies;
10
10
  function getPackageJson(path) {
@@ -14,11 +14,3 @@ function getPackageJson(path) {
14
14
  return {};
15
15
  }
16
16
  exports.getPackageJson = getPackageJson;
17
- function removePackageJsonFromFileMap(projectFileMap) {
18
- const newFileMap = {};
19
- Object.keys(projectFileMap).forEach((key) => {
20
- newFileMap[key] = projectFileMap[key].filter((f) => !f.file.endsWith('/package.json'));
21
- });
22
- return newFileMap;
23
- }
24
- exports.removePackageJsonFromFileMap = removePackageJsonFromFileMap;