@nx/eslint-plugin 22.0.0-beta.5 → 22.0.0-beta.7

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": "22.0.0-beta.5",
3
+ "version": "22.0.0-beta.7",
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": {
@@ -34,8 +34,8 @@
34
34
  }
35
35
  },
36
36
  "dependencies": {
37
- "@nx/devkit": "22.0.0-beta.5",
38
- "@nx/js": "22.0.0-beta.5",
37
+ "@nx/devkit": "22.0.0-beta.7",
38
+ "@nx/js": "22.0.0-beta.7",
39
39
  "@phenomnomnominal/tsquery": "~5.0.1",
40
40
  "@typescript-eslint/type-utils": "^8.0.0",
41
41
  "@typescript-eslint/utils": "^8.0.0",
@@ -12,7 +12,7 @@ export type Options = [
12
12
  runtimeHelpers?: string[];
13
13
  }
14
14
  ];
15
- export type MessageIds = 'missingDependency' | 'obsoleteDependency' | 'versionMismatch' | 'missingDependencySection';
15
+ export type MessageIds = 'missingDependency' | 'obsoleteDependency' | 'versionMismatch' | 'missingDependencySection' | 'invalidCatalogReference';
16
16
  export declare const RULE_NAME = "dependency-checks";
17
17
  declare const _default: ESLintUtils.RuleModule<MessageIds, Options, unknown, ESLintUtils.RuleListener>;
18
18
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"file":"dependency-checks.d.ts","sourceRoot":"","sources":["../../../../../packages/eslint-plugin/src/rules/dependency-checks.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiBvD,MAAM,MAAM,OAAO,GAAG;IACpB;QACE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,6BAA6B,CAAC,EAAE,OAAO,CAAC;QACxC,qCAAqC,CAAC,EAAE,OAAO,CAAC;QAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B;CACF,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,0BAA0B,CAAC;AAE/B,eAAO,MAAM,SAAS,sBAAsB,CAAC;;AAE7C,wBA6UG"}
1
+ {"version":3,"file":"dependency-checks.d.ts","sourceRoot":"","sources":["../../../../../packages/eslint-plugin/src/rules/dependency-checks.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAiBvD,MAAM,MAAM,OAAO,GAAG;IACpB;QACE,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,wBAAwB,CAAC,EAAE,OAAO,CAAC;QACnC,yBAAyB,CAAC,EAAE,OAAO,CAAC;QACpC,sBAAsB,CAAC,EAAE,OAAO,CAAC;QACjC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,6BAA6B,CAAC,EAAE,OAAO,CAAC;QACxC,qCAAqC,CAAC,EAAE,OAAO,CAAC;QAChD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B;CACF,CAAC;AAEF,MAAM,MAAM,UAAU,GAClB,mBAAmB,GACnB,oBAAoB,GACpB,iBAAiB,GACjB,0BAA0B,GAC1B,yBAAyB,CAAC;AAE9B,eAAO,MAAM,SAAS,sBAAsB,CAAC;;AAE7C,wBAgYG"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RULE_NAME = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
+ const catalog_1 = require("@nx/devkit/src/utils/catalog");
5
6
  const find_npm_dependencies_1 = require("@nx/js/src/utils/find-npm-dependencies");
6
7
  const utils_1 = require("@typescript-eslint/utils");
7
8
  const path_1 = require("path");
@@ -40,6 +41,7 @@ exports.default = utils_1.ESLintUtils.RuleCreator(() => `https://github.com/nrwl
40
41
  obsoleteDependency: `The "{{packageName}}" package is not used by "{{projectName}}" project.`,
41
42
  versionMismatch: `The version specifier does not contain the installed version of "{{packageName}}" package: {{version}}.`,
42
43
  missingDependencySection: `Dependency sections are missing from the "package.json" but following dependencies were detected:{{dependencies}}`,
44
+ invalidCatalogReference: `Invalid catalog reference for "{{packageName}}": {{error}}`,
43
45
  },
44
46
  },
45
47
  defaultOptions: [
@@ -124,22 +126,51 @@ exports.default = utils_1.ESLintUtils.RuleCreator(() => `https://github.com/nrwl
124
126
  });
125
127
  }
126
128
  }
129
+ function validateCatalogReferenceForPackage(node, packageName, packageRange) {
130
+ const manager = (0, catalog_1.getCatalogManager)(devkit_1.workspaceRoot);
131
+ if (!manager) {
132
+ return;
133
+ }
134
+ if (!manager.isCatalogReference(packageRange)) {
135
+ return;
136
+ }
137
+ try {
138
+ manager.validateCatalogReference(devkit_1.workspaceRoot, packageName, packageRange);
139
+ }
140
+ catch (error) {
141
+ context.report({
142
+ node: node,
143
+ messageId: 'invalidCatalogReference',
144
+ data: {
145
+ packageName: packageName,
146
+ error: error.message,
147
+ },
148
+ });
149
+ }
150
+ }
127
151
  function validateVersionMatchesInstalled(node, packageName, packageRange) {
128
152
  if (!checkVersionMismatches) {
129
153
  return;
130
154
  }
155
+ // Resolve catalog references before validation
156
+ let resolvedPackageRange = packageRange;
157
+ const manager = (0, catalog_1.getCatalogManager)(devkit_1.workspaceRoot);
158
+ if (manager?.isCatalogReference(packageRange)) {
159
+ const resolved = manager.resolveCatalogReference(devkit_1.workspaceRoot, packageName, packageRange);
160
+ if (!resolved) {
161
+ // Catalog resolution failed - this shouldn't happen because
162
+ // validateCatalogReferenceForPackage should have caught it earlier
163
+ // But if it does, skip validation gracefully
164
+ return;
165
+ }
166
+ resolvedPackageRange = resolved;
167
+ }
131
168
  if (npmDependencies[packageName].startsWith('file:') ||
132
- packageRange.startsWith('file:') ||
169
+ resolvedPackageRange.startsWith('file:') ||
133
170
  npmDependencies[packageName] === '*' ||
134
- packageRange === '*' ||
135
- packageRange.startsWith('workspace:') ||
136
- /**
137
- * Catalogs can be named, or left unnamed
138
- * So just checking up until the : will catch both cases
139
- * e.g. catalog:some-catalog or catalog:
140
- */
141
- packageRange.startsWith('catalog:') ||
142
- (0, semver_1.satisfies)(npmDependencies[packageName], packageRange, {
171
+ resolvedPackageRange === '*' ||
172
+ resolvedPackageRange.startsWith('workspace:') ||
173
+ (0, semver_1.satisfies)(npmDependencies[packageName], resolvedPackageRange, {
143
174
  includePrerelease: true,
144
175
  })) {
145
176
  return;
@@ -234,6 +265,7 @@ exports.default = utils_1.ESLintUtils.RuleCreator(() => `https://github.com/nrwl
234
265
  if (ignoredDependencies.includes(packageName)) {
235
266
  return;
236
267
  }
268
+ validateCatalogReferenceForPackage(node, packageName, packageRange);
237
269
  if (expectedDependencyNames.includes(packageName)) {
238
270
  validateVersionMatchesInstalled(node, packageName, packageRange);
239
271
  }