@nx/eslint 17.3.0-canary.20240113-1d2bfde → 17.3.0-canary.20240118-8ccf327

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",
3
- "version": "17.3.0-canary.20240113-1d2bfde",
3
+ "version": "17.3.0-canary.20240118-8ccf327",
4
4
  "private": false,
5
5
  "description": "The ESLint plugin for Nx contains executors, generators and utilities used for linting JavaScript/TypeScript projects within an Nx workspace.",
6
6
  "repository": {
@@ -34,11 +34,11 @@
34
34
  "js-yaml": "4.1.0"
35
35
  },
36
36
  "dependencies": {
37
- "@nx/devkit": "17.3.0-canary.20240113-1d2bfde",
38
- "@nx/js": "17.3.0-canary.20240113-1d2bfde",
37
+ "@nx/devkit": "17.3.0-canary.20240118-8ccf327",
38
+ "@nx/js": "17.3.0-canary.20240118-8ccf327",
39
39
  "tslib": "^2.3.0",
40
40
  "typescript": "~5.2.2",
41
- "@nx/linter": "17.3.0-canary.20240113-1d2bfde"
41
+ "@nx/linter": "17.3.0-canary.20240118-8ccf327"
42
42
  },
43
43
  "peerDependenciesMeta": {
44
44
  "eslint": {
@@ -1,3 +1,3 @@
1
1
  import { ProjectConfiguration, TargetConfiguration, Tree } from '@nx/devkit';
2
- export declare function migrateConfigToMonorepoStyle(projects: ProjectConfiguration[], tree: Tree, unitTestRunner: string): void;
2
+ export declare function migrateConfigToMonorepoStyle(projects: ProjectConfiguration[], tree: Tree, unitTestRunner: string, keepExistingVersions?: boolean): void;
3
3
  export declare function findLintTarget(project: ProjectConfiguration): TargetConfiguration;
@@ -8,7 +8,7 @@ const global_eslint_config_1 = require("./global-eslint-config");
8
8
  const flat_config_1 = require("../../utils/flat-config");
9
9
  const versions_1 = require("../../utils/versions");
10
10
  const ast_utils_1 = require("../utils/flat-config/ast-utils");
11
- function migrateConfigToMonorepoStyle(projects, tree, unitTestRunner) {
11
+ function migrateConfigToMonorepoStyle(projects, tree, unitTestRunner, keepExistingVersions) {
12
12
  const rootEslintConfig = (0, eslint_file_1.findEslintFile)(tree);
13
13
  let skipCleanup = false;
14
14
  if (rootEslintConfig?.match(/\.base\./) &&
@@ -23,7 +23,7 @@ function migrateConfigToMonorepoStyle(projects, tree, unitTestRunner) {
23
23
  // we need this for the compat
24
24
  (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
25
25
  '@eslint/js': versions_1.eslintVersion,
26
- });
26
+ }, undefined, keepExistingVersions);
27
27
  tree.write(tree.exists('eslint.config.js')
28
28
  ? 'eslint.base.config.js'
29
29
  : 'eslint.config.js', (0, global_eslint_config_1.getGlobalFlatEslintConfiguration)(unitTestRunner));
@@ -1,9 +1,6 @@
1
1
  import type { GeneratorCallback, Tree } from '@nx/devkit';
2
- import { Linter } from '../utils/linter';
3
2
  export interface LinterInitOptions {
4
- linter?: Linter;
5
- unitTestRunner?: string;
6
3
  skipPackageJson?: boolean;
7
- rootProject?: boolean;
4
+ keepExistingVersions?: boolean;
8
5
  }
9
6
  export declare function lintInitGenerator(tree: Tree, options: LinterInitOptions): GeneratorCallback;
@@ -4,7 +4,6 @@ exports.lintInitGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const versions_1 = require("../../utils/versions");
6
6
  const eslint_file_1 = require("../utils/eslint-file");
7
- const global_eslint_config_1 = require("./global-eslint-config");
8
7
  const plugin_1 = require("../utils/plugin");
9
8
  function updateProductionFileset(tree) {
10
9
  const nxJson = (0, devkit_1.readNxJson)(tree);
@@ -48,21 +47,6 @@ function addPlugin(tree) {
48
47
  });
49
48
  (0, devkit_1.updateNxJson)(tree, nxJson);
50
49
  }
51
- function updateVSCodeExtensions(tree) {
52
- if (tree.exists('.vscode/extensions.json')) {
53
- (0, devkit_1.updateJson)(tree, '.vscode/extensions.json', (json) => {
54
- json.recommendations ||= [];
55
- const extension = 'dbaeumer.vscode-eslint';
56
- if (!json.recommendations.includes(extension)) {
57
- json.recommendations.push(extension);
58
- }
59
- return json;
60
- });
61
- }
62
- }
63
- /**
64
- * Initializes ESLint configuration in a workspace and adds necessary dependencies.
65
- */
66
50
  function initEsLint(tree, options) {
67
51
  const addPlugins = process.env.NX_PCV3 === 'true';
68
52
  const hasPlugin = (0, plugin_1.hasEslintPlugin)(tree);
@@ -74,11 +58,6 @@ function initEsLint(tree, options) {
74
58
  if (rootEslintFile) {
75
59
  return () => { };
76
60
  }
77
- if (!options.skipPackageJson) {
78
- (0, devkit_1.removeDependenciesFromPackageJson)(tree, ['@nx/eslint'], []);
79
- }
80
- (0, devkit_1.writeJson)(tree, '.eslintrc.json', (0, global_eslint_config_1.getGlobalEsLintConfiguration)(options.unitTestRunner, options.rootProject));
81
- tree.write('.eslintignore', 'node_modules\n');
82
61
  updateProductionFileset(tree);
83
62
  if (addPlugins) {
84
63
  addPlugin(tree);
@@ -86,17 +65,15 @@ function initEsLint(tree, options) {
86
65
  else {
87
66
  addTargetDefaults(tree);
88
67
  }
89
- updateVSCodeExtensions(tree);
90
- return !options.skipPackageJson
91
- ? (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
68
+ const tasks = [];
69
+ if (!options.skipPackageJson) {
70
+ tasks.push((0, devkit_1.removeDependenciesFromPackageJson)(tree, ['@nx/eslint'], []));
71
+ tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
92
72
  '@nx/eslint': versions_1.nxVersion,
93
- '@nx/eslint-plugin': versions_1.nxVersion,
94
- '@typescript-eslint/parser': versions_1.typescriptESLintVersion,
95
- '@typescript-eslint/eslint-plugin': versions_1.typescriptESLintVersion,
96
73
  eslint: versions_1.eslintVersion,
97
- 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion,
98
- })
99
- : () => { };
74
+ }, undefined, options.keepExistingVersions));
75
+ }
76
+ return (0, devkit_1.runTasksInSerial)(...tasks);
100
77
  }
101
78
  function lintInitGenerator(tree, options) {
102
79
  return initEsLint(tree, options);
@@ -5,6 +5,18 @@
5
5
  "title": "Initialize ESLint Plugin",
6
6
  "description": "Set up the ESLint plugin.",
7
7
  "type": "object",
8
- "properties": {},
8
+ "properties": {
9
+ "skipPackageJson": {
10
+ "description": "Do not add dependencies to `package.json`.",
11
+ "type": "boolean",
12
+ "default": false
13
+ },
14
+ "keepExistingVersions": {
15
+ "type": "boolean",
16
+ "x-priority": "internal",
17
+ "description": "Keep existing dependencies versions",
18
+ "default": false
19
+ }
20
+ },
9
21
  "required": []
10
22
  }
@@ -1,4 +1,4 @@
1
- import type { Tree } from '@nx/devkit';
1
+ import type { GeneratorCallback, Tree } from '@nx/devkit';
2
2
  import { Linter as LinterEnum } from '../utils/linter';
3
3
  interface LintProjectOptions {
4
4
  project: string;
@@ -10,6 +10,7 @@ interface LintProjectOptions {
10
10
  skipPackageJson?: boolean;
11
11
  unitTestRunner?: string;
12
12
  rootProject?: boolean;
13
+ keepExistingVersions?: boolean;
13
14
  }
14
- export declare function lintProjectGenerator(tree: Tree, options: LintProjectOptions): Promise<import("@nx/devkit").GeneratorCallback>;
15
+ export declare function lintProjectGenerator(tree: Tree, options: LintProjectOptions): Promise<GeneratorCallback>;
15
16
  export {};
@@ -11,13 +11,19 @@ const flat_config_1 = require("../../utils/flat-config");
11
11
  const ast_utils_1 = require("../utils/flat-config/ast-utils");
12
12
  const config_file_1 = require("../../utils/config-file");
13
13
  const plugin_1 = require("../utils/plugin");
14
+ const setup_root_eslint_1 = require("./setup-root-eslint");
14
15
  async function lintProjectGenerator(tree, options) {
15
- const installTask = (0, init_1.lintInitGenerator)(tree, {
16
- linter: options.linter,
16
+ const tasks = [];
17
+ const initTask = (0, init_1.lintInitGenerator)(tree, {
18
+ skipPackageJson: options.skipPackageJson,
19
+ });
20
+ tasks.push(initTask);
21
+ const rootEsLintTask = (0, setup_root_eslint_1.setupRootEsLint)(tree, {
17
22
  unitTestRunner: options.unitTestRunner,
18
23
  skipPackageJson: options.skipPackageJson,
19
24
  rootProject: options.rootProject,
20
25
  });
26
+ tasks.push(rootEsLintTask);
21
27
  const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
22
28
  let lintFilePatterns = options.eslintFilePatterns;
23
29
  if (!lintFilePatterns && options.rootProject && projectConfig.root === '.') {
@@ -66,7 +72,7 @@ async function lintProjectGenerator(tree, options) {
66
72
  filteredProjects.push(project);
67
73
  }
68
74
  });
69
- (0, init_migration_1.migrateConfigToMonorepoStyle)(filteredProjects, tree, options.unitTestRunner);
75
+ (0, init_migration_1.migrateConfigToMonorepoStyle)(filteredProjects, tree, options.unitTestRunner, options.keepExistingVersions);
70
76
  }
71
77
  }
72
78
  // our root `.eslintrc` is already the project config, so we should not override it
@@ -89,7 +95,7 @@ async function lintProjectGenerator(tree, options) {
89
95
  if (!options.skipFormat) {
90
96
  await (0, devkit_1.formatFiles)(tree);
91
97
  }
92
- return installTask;
98
+ return (0, devkit_1.runTasksInSerial)(...tasks);
93
99
  }
94
100
  exports.lintProjectGenerator = lintProjectGenerator;
95
101
  function createEsLintConfiguration(tree, projectConfig, setParserOptionsProject, rootProject) {
@@ -0,0 +1,7 @@
1
+ import { type GeneratorCallback, type Tree } from '@nx/devkit';
2
+ export type SetupRootEsLintOptions = {
3
+ unitTestRunner?: string;
4
+ skipPackageJson?: boolean;
5
+ rootProject?: boolean;
6
+ };
7
+ export declare function setupRootEsLint(tree: Tree, options: SetupRootEsLintOptions): GeneratorCallback;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupRootEsLint = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const versions_1 = require("../../utils/versions");
6
+ const global_eslint_config_1 = require("../init/global-eslint-config");
7
+ const eslint_file_1 = require("../utils/eslint-file");
8
+ function setupRootEsLint(tree, options) {
9
+ const rootEslintFile = (0, eslint_file_1.findEslintFile)(tree);
10
+ if (rootEslintFile) {
11
+ return () => { };
12
+ }
13
+ (0, devkit_1.writeJson)(tree, '.eslintrc.json', (0, global_eslint_config_1.getGlobalEsLintConfiguration)(options.unitTestRunner, options.rootProject));
14
+ if (tree.exists('.eslintignore')) {
15
+ let content = tree.read('.eslintignore', 'utf-8');
16
+ if (!/^node_modules$/gm.test(content)) {
17
+ content = `${content}\nnode_modules\n`;
18
+ tree.write('.eslintignore', content);
19
+ }
20
+ }
21
+ else {
22
+ tree.write('.eslintignore', 'node_modules\n');
23
+ }
24
+ return !options.skipPackageJson
25
+ ? (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
26
+ '@nx/eslint-plugin': versions_1.nxVersion,
27
+ '@typescript-eslint/parser': versions_1.typescriptESLintVersion,
28
+ '@typescript-eslint/eslint-plugin': versions_1.typescriptESLintVersion,
29
+ 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion,
30
+ })
31
+ : () => { };
32
+ }
33
+ exports.setupRootEsLint = setupRootEsLint;