@nx/eslint-plugin 16.5.0 → 16.5.2
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.5.
|
|
3
|
+
"version": "16.5.2",
|
|
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.5.
|
|
37
|
-
"@nx/devkit": "16.5.
|
|
38
|
-
"@nx/js": "16.5.
|
|
36
|
+
"@nrwl/eslint-plugin-nx": "16.5.2",
|
|
37
|
+
"@nx/devkit": "16.5.2",
|
|
38
|
+
"@nx/js": "16.5.2",
|
|
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": "
|
|
53
|
+
"gitHead": "928273940d11aa7dea87cb625a92f2c3ec62e726"
|
|
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
|
|
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,18 +75,16 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
75
75
|
if (!buildTarget) {
|
|
76
76
|
return {};
|
|
77
77
|
}
|
|
78
|
-
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const projDependencies = Object.assign(Object.assign({}, npmDeps.dependencies), npmDeps.peerDependencies);
|
|
85
|
-
const expectedDependencyNames = Object.keys(projDependencies);
|
|
78
|
+
const rootPackageJson = (0, package_json_utils_1.getPackageJson)((0, path_1.join)(devkit_1.workspaceRoot, 'package.json'));
|
|
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);
|
|
86
84
|
const projPackageJsonPath = (0, path_1.join)(devkit_1.workspaceRoot, sourceProject.data.root, 'package.json');
|
|
87
|
-
(_a = globalThis.projPackageJsonDeps) !== null && _a !== void 0 ? _a : (globalThis.projPackageJsonDeps = (0, package_json_utils_1.getAllDependencies)(projPackageJsonPath));
|
|
85
|
+
(_a = globalThis.projPackageJsonDeps) !== null && _a !== void 0 ? _a : (globalThis.projPackageJsonDeps = (0, package_json_utils_1.getAllDependencies)((0, package_json_utils_1.getPackageJson)(projPackageJsonPath)));
|
|
88
86
|
const projPackageJsonDeps = globalThis.projPackageJsonDeps;
|
|
89
|
-
const rootPackageJsonDeps = (0, package_json_utils_1.getAllDependencies)(
|
|
87
|
+
const rootPackageJsonDeps = (0, package_json_utils_1.getAllDependencies)(rootPackageJson);
|
|
90
88
|
function validateMissingDependencies(node) {
|
|
91
89
|
if (!checkMissingDependencies) {
|
|
92
90
|
return;
|
|
@@ -104,7 +102,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
104
102
|
fix(fixer) {
|
|
105
103
|
missingDeps.forEach((d) => {
|
|
106
104
|
projPackageJsonDeps[d] =
|
|
107
|
-
rootPackageJsonDeps[d] ||
|
|
105
|
+
rootPackageJsonDeps[d] || npmDependencies[d];
|
|
108
106
|
});
|
|
109
107
|
const deps = node.value.properties;
|
|
110
108
|
const mappedDeps = missingDeps
|
|
@@ -124,8 +122,9 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
124
122
|
if (!checkVersionMismatches) {
|
|
125
123
|
return;
|
|
126
124
|
}
|
|
127
|
-
if (
|
|
128
|
-
|
|
125
|
+
if (npmDependencies[packageName] === '*' ||
|
|
126
|
+
packageRange === '*' ||
|
|
127
|
+
(0, semver_1.satisfies)(npmDependencies[packageName], packageRange)) {
|
|
129
128
|
return;
|
|
130
129
|
}
|
|
131
130
|
context.report({
|
|
@@ -133,9 +132,9 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
133
132
|
messageId: 'versionMismatch',
|
|
134
133
|
data: {
|
|
135
134
|
packageName: packageName,
|
|
136
|
-
version:
|
|
135
|
+
version: npmDependencies[packageName],
|
|
137
136
|
},
|
|
138
|
-
fix: (fixer) => fixer.replaceText(node, `"${packageName}": "${rootPackageJsonDeps[packageName] ||
|
|
137
|
+
fix: (fixer) => fixer.replaceText(node, `"${packageName}": "${rootPackageJsonDeps[packageName] || npmDependencies[packageName]}"`),
|
|
139
138
|
});
|
|
140
139
|
}
|
|
141
140
|
function reportObsoleteDependency(node, packageName) {
|
|
@@ -196,13 +195,13 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
196
195
|
.join(),
|
|
197
196
|
},
|
|
198
197
|
fix: (fixer) => {
|
|
199
|
-
expectedDependencyNames.sort().reduce((acc, d) => {
|
|
200
|
-
acc[d] = rootPackageJsonDeps[d] || projDependencies[d];
|
|
201
|
-
return acc;
|
|
202
|
-
}, projPackageJsonDeps);
|
|
203
198
|
const dependencies = Object.keys(projPackageJsonDeps)
|
|
204
199
|
.map((d) => `\n "${d}": "${projPackageJsonDeps[d]}"`)
|
|
205
200
|
.join(',');
|
|
201
|
+
expectedDependencyNames.sort().reduce((acc, d) => {
|
|
202
|
+
acc[d] = rootPackageJsonDeps[d] || dependencies[d];
|
|
203
|
+
return acc;
|
|
204
|
+
}, projPackageJsonDeps);
|
|
206
205
|
if (!node.properties.length) {
|
|
207
206
|
return fixer.replaceText(node, `{\n "dependencies": {${dependencies}\n }\n}`);
|
|
208
207
|
}
|
|
@@ -215,7 +214,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
215
214
|
}
|
|
216
215
|
return {
|
|
217
216
|
['JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=/^(dev|peer|optional)?dependencies$/i]'](node) {
|
|
218
|
-
|
|
217
|
+
validateMissingDependencies(node);
|
|
219
218
|
},
|
|
220
219
|
['JSONExpressionStatement > JSONObjectExpression > JSONProperty[key.value=/^(dev|peer|optional)?dependencies$/i] > JSONObjectExpression > JSONProperty'](node) {
|
|
221
220
|
const packageName = node.key.value;
|
|
@@ -224,14 +223,14 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
224
223
|
return;
|
|
225
224
|
}
|
|
226
225
|
if (expectedDependencyNames.includes(packageName)) {
|
|
227
|
-
|
|
226
|
+
validateVersionMatchesInstalled(node, packageName, packageRange);
|
|
228
227
|
}
|
|
229
228
|
else {
|
|
230
|
-
|
|
229
|
+
reportObsoleteDependency(node, packageName);
|
|
231
230
|
}
|
|
232
231
|
},
|
|
233
232
|
['JSONExpressionStatement > JSONObjectExpression'](node) {
|
|
234
|
-
|
|
233
|
+
validateDependenciesSectionExistance(node);
|
|
235
234
|
},
|
|
236
235
|
};
|
|
237
236
|
},
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function getAllDependencies(
|
|
3
|
-
export declare function
|
|
1
|
+
import { PackageJson } from 'nx/src/utils/package-json';
|
|
2
|
+
export declare function getAllDependencies(packageJson: PackageJson): Record<string, string>;
|
|
3
|
+
export declare function getPackageJson(path: string): PackageJson;
|
|
@@ -1,21 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.getPackageJson = exports.getAllDependencies = void 0;
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
|
-
function getAllDependencies(
|
|
6
|
+
function getAllDependencies(packageJson) {
|
|
7
|
+
return Object.assign(Object.assign(Object.assign(Object.assign({}, packageJson.dependencies), packageJson.devDependencies), packageJson.peerDependencies), packageJson.optionalDependencies);
|
|
8
|
+
}
|
|
9
|
+
exports.getAllDependencies = getAllDependencies;
|
|
10
|
+
function getPackageJson(path) {
|
|
7
11
|
if ((0, fs_1.existsSync)(path)) {
|
|
8
|
-
|
|
9
|
-
return Object.assign(Object.assign(Object.assign({}, packageJson.dependencies), packageJson.devDependencies), packageJson.peerDependencies);
|
|
12
|
+
return (0, devkit_1.readJsonFile)(path);
|
|
10
13
|
}
|
|
11
14
|
return {};
|
|
12
15
|
}
|
|
13
|
-
exports.
|
|
14
|
-
function removePackageJsonFromFileMap(projectFileMap) {
|
|
15
|
-
const newFileMap = {};
|
|
16
|
-
Object.keys(projectFileMap).forEach((key) => {
|
|
17
|
-
newFileMap[key] = projectFileMap[key].filter((f) => !f.file.endsWith('/package.json'));
|
|
18
|
-
});
|
|
19
|
-
return newFileMap;
|
|
20
|
-
}
|
|
21
|
-
exports.removePackageJsonFromFileMap = removePackageJsonFromFileMap;
|
|
16
|
+
exports.getPackageJson = getPackageJson;
|