@nx/eslint 23.0.0-beta.2 → 23.0.0-beta.21

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 (129) hide show
  1. package/{index.d.ts → dist/index.d.ts} +0 -1
  2. package/dist/internal.d.ts +7 -0
  3. package/dist/internal.js +33 -0
  4. package/{plugin.d.ts → dist/plugin.d.ts} +0 -1
  5. package/{src → dist/src}/executors/lint/lint.impl.d.ts +0 -1
  6. package/{src → dist/src}/executors/lint/lint.impl.js +5 -7
  7. package/{src → dist/src}/executors/lint/schema.json +1 -0
  8. package/{src → dist/src}/executors/lint/utility/eslint-utils.d.ts +0 -1
  9. package/{src → dist/src}/generators/convert-to-flat-config/converters/json-converter.d.ts +1 -1
  10. package/{src → dist/src}/generators/convert-to-flat-config/converters/json-converter.js +76 -16
  11. package/{src → dist/src}/generators/convert-to-flat-config/generator.d.ts +0 -1
  12. package/dist/src/generators/convert-to-flat-config/generator.js +262 -0
  13. package/{src → dist/src}/generators/convert-to-flat-config/schema.json +7 -0
  14. package/{src → dist/src}/generators/convert-to-inferred/convert-to-inferred.d.ts +0 -1
  15. package/{src → dist/src}/generators/convert-to-inferred/convert-to-inferred.js +6 -5
  16. package/{src → dist/src}/generators/convert-to-inferred/lib/target-options-map.d.ts +0 -1
  17. package/{src → dist/src}/generators/init/global-eslint-config.d.ts +0 -1
  18. package/{src → dist/src}/generators/init/init-migration.d.ts +0 -1
  19. package/{src → dist/src}/generators/init/init-migration.js +4 -3
  20. package/{src → dist/src}/generators/init/init.d.ts +0 -1
  21. package/{src → dist/src}/generators/init/init.js +34 -18
  22. package/{src → dist/src}/generators/init/schema.json +1 -1
  23. package/{src → dist/src}/generators/lint-project/lint-project.d.ts +0 -1
  24. package/{src → dist/src}/generators/lint-project/lint-project.js +4 -2
  25. package/{src → dist/src}/generators/lint-project/setup-root-eslint.d.ts +0 -1
  26. package/{src → dist/src}/generators/lint-project/setup-root-eslint.js +21 -17
  27. package/{src → dist/src}/generators/utils/eslint-file.d.ts +0 -1
  28. package/{src → dist/src}/generators/utils/eslint-file.js +3 -5
  29. package/{src → dist/src}/generators/utils/eslint-targets.d.ts +0 -1
  30. package/dist/src/generators/utils/eslint-targets.js +17 -0
  31. package/{src → dist/src}/generators/utils/flat-config/ast-utils.d.ts +1 -2
  32. package/{src → dist/src}/generators/utils/flat-config/ast-utils.js +19 -16
  33. package/{src → dist/src}/generators/utils/flat-config/path-utils.d.ts +0 -1
  34. package/{src → dist/src}/generators/utils/linter.d.ts +0 -1
  35. package/{src → dist/src}/generators/utils/plugin.d.ts +0 -1
  36. package/{src → dist/src}/generators/workspace-rule/workspace-rule.d.ts +0 -1
  37. package/{src → dist/src}/generators/workspace-rule/workspace-rule.js +6 -3
  38. package/{src → dist/src}/generators/workspace-rules-project/workspace-rules-project.d.ts +0 -1
  39. package/{src → dist/src}/generators/workspace-rules-project/workspace-rules-project.js +21 -10
  40. package/{src → dist/src}/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.d.ts +0 -1
  41. package/{src → dist/src}/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.js +6 -2
  42. package/dist/src/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.md +33 -0
  43. package/{src → dist/src}/migrations/update-20-3-0/add-file-extensions-to-overrides.d.ts +0 -1
  44. package/dist/src/migrations/update-20-3-0/add-file-extensions-to-overrides.md +83 -0
  45. package/{src → dist/src}/migrations/update-21-6-0/update-executor-lint-inputs.d.ts +0 -1
  46. package/{src → dist/src}/migrations/update-21-6-0/update-executor-lint-inputs.js +9 -3
  47. package/dist/src/migrations/update-23-0-0/rewrite-internal-subpath-imports.d.ts +3 -0
  48. package/dist/src/migrations/update-23-0-0/rewrite-internal-subpath-imports.js +198 -0
  49. package/{src → dist/src}/plugins/plugin.d.ts +0 -1
  50. package/{src → dist/src}/plugins/plugin.js +30 -28
  51. package/dist/src/utils/assert-supported-eslint-version.d.ts +2 -0
  52. package/dist/src/utils/assert-supported-eslint-version.js +8 -0
  53. package/{src → dist/src}/utils/config-file.d.ts +0 -1
  54. package/dist/src/utils/deprecation.d.ts +3 -0
  55. package/dist/src/utils/deprecation.js +15 -0
  56. package/{src → dist/src}/utils/flat-config.d.ts +0 -1
  57. package/{src → dist/src}/utils/resolve-eslint-class.d.ts +0 -1
  58. package/dist/src/utils/resolve-eslint-class.js +28 -0
  59. package/{src → dist/src}/utils/rules-requiring-type-checking.d.ts +0 -1
  60. package/dist/src/utils/versions.d.ts +17 -0
  61. package/dist/src/utils/versions.js +50 -0
  62. package/{src → dist/src}/utils/workspace-lint-rules.d.ts +0 -1
  63. package/executors.json +2 -2
  64. package/generators.json +10 -10
  65. package/migrations.json +14 -3
  66. package/package.json +49 -10
  67. package/index.d.ts.map +0 -1
  68. package/plugin.d.ts.map +0 -1
  69. package/src/executors/lint/lint.impl.d.ts.map +0 -1
  70. package/src/executors/lint/utility/eslint-utils.d.ts.map +0 -1
  71. package/src/generators/convert-to-flat-config/converters/json-converter.d.ts.map +0 -1
  72. package/src/generators/convert-to-flat-config/generator.d.ts.map +0 -1
  73. package/src/generators/convert-to-flat-config/generator.js +0 -162
  74. package/src/generators/convert-to-inferred/convert-to-inferred.d.ts.map +0 -1
  75. package/src/generators/convert-to-inferred/lib/target-options-map.d.ts.map +0 -1
  76. package/src/generators/init/global-eslint-config.d.ts.map +0 -1
  77. package/src/generators/init/init-migration.d.ts.map +0 -1
  78. package/src/generators/init/init.d.ts.map +0 -1
  79. package/src/generators/lint-project/lint-project.d.ts.map +0 -1
  80. package/src/generators/lint-project/setup-root-eslint.d.ts.map +0 -1
  81. package/src/generators/utils/eslint-file.d.ts.map +0 -1
  82. package/src/generators/utils/eslint-targets.d.ts.map +0 -1
  83. package/src/generators/utils/eslint-targets.js +0 -17
  84. package/src/generators/utils/flat-config/ast-utils.d.ts.map +0 -1
  85. package/src/generators/utils/flat-config/path-utils.d.ts.map +0 -1
  86. package/src/generators/utils/linter.d.ts.map +0 -1
  87. package/src/generators/utils/plugin.d.ts.map +0 -1
  88. package/src/generators/workspace-rule/workspace-rule.d.ts.map +0 -1
  89. package/src/generators/workspace-rules-project/workspace-rules-project.d.ts.map +0 -1
  90. package/src/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.d.ts.map +0 -1
  91. package/src/migrations/update-20-3-0/add-file-extensions-to-overrides.d.ts.map +0 -1
  92. package/src/migrations/update-21-6-0/update-executor-lint-inputs.d.ts.map +0 -1
  93. package/src/plugins/plugin.d.ts.map +0 -1
  94. package/src/utils/config-file.d.ts.map +0 -1
  95. package/src/utils/flat-config.d.ts.map +0 -1
  96. package/src/utils/resolve-eslint-class.d.ts.map +0 -1
  97. package/src/utils/resolve-eslint-class.js +0 -61
  98. package/src/utils/rules-requiring-type-checking.d.ts.map +0 -1
  99. package/src/utils/version-utils.d.ts +0 -5
  100. package/src/utils/version-utils.d.ts.map +0 -1
  101. package/src/utils/version-utils.js +0 -49
  102. package/src/utils/versions.d.ts +0 -10
  103. package/src/utils/versions.d.ts.map +0 -1
  104. package/src/utils/versions.js +0 -13
  105. package/src/utils/workspace-lint-rules.d.ts.map +0 -1
  106. /package/{LICENSE → dist/LICENSE} +0 -0
  107. /package/{index.js → dist/index.js} +0 -0
  108. /package/{plugin.js → dist/plugin.js} +0 -0
  109. /package/{src → dist/src}/executors/lint/schema.d.ts +0 -0
  110. /package/{src → dist/src}/executors/lint/utility/eslint-utils.js +0 -0
  111. /package/{src → dist/src}/generators/convert-to-flat-config/schema.d.ts +0 -0
  112. /package/{src → dist/src}/generators/convert-to-inferred/lib/target-options-map.js +0 -0
  113. /package/{src → dist/src}/generators/convert-to-inferred/schema.json +0 -0
  114. /package/{src → dist/src}/generators/init/global-eslint-config.js +0 -0
  115. /package/{src → dist/src}/generators/utils/flat-config/path-utils.js +0 -0
  116. /package/{src → dist/src}/generators/utils/linter.js +0 -0
  117. /package/{src → dist/src}/generators/utils/plugin.js +0 -0
  118. /package/{src → dist/src}/generators/workspace-rule/files/__name__.spec.ts__tmpl__ +0 -0
  119. /package/{src → dist/src}/generators/workspace-rule/files/__name__.ts__tmpl__ +0 -0
  120. /package/{src → dist/src}/generators/workspace-rule/schema.json +0 -0
  121. /package/{src → dist/src}/generators/workspace-rules-project/files/index.ts__tmpl__ +0 -0
  122. /package/{src → dist/src}/generators/workspace-rules-project/files/tsconfig.json__tmpl__ +0 -0
  123. /package/{src → dist/src}/generators/workspace-rules-project/files/tsconfig.lint.json__tmpl__ +0 -0
  124. /package/{src → dist/src}/generators/workspace-rules-project/schema.json +0 -0
  125. /package/{src → dist/src}/migrations/update-20-3-0/add-file-extensions-to-overrides.js +0 -0
  126. /package/{src → dist/src}/utils/config-file.js +0 -0
  127. /package/{src → dist/src}/utils/flat-config.js +0 -0
  128. /package/{src → dist/src}/utils/rules-requiring-type-checking.js +0 -0
  129. /package/{src → dist/src}/utils/workspace-lint-rules.js +0 -0
@@ -2,8 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initEsLint = initEsLint;
4
4
  exports.lintInitGenerator = lintInitGenerator;
5
+ const internal_1 = require("@nx/devkit/internal");
5
6
  const devkit_1 = require("@nx/devkit");
6
- const add_plugin_1 = require("@nx/devkit/src/utils/add-plugin");
7
+ const assert_supported_eslint_version_1 = require("../../utils/assert-supported-eslint-version");
7
8
  const versions_1 = require("../../utils/versions");
8
9
  const eslint_file_1 = require("../utils/eslint-file");
9
10
  const plugin_1 = require("../../plugins/plugin");
@@ -21,19 +22,32 @@ function updateProductionFileset(tree, format = 'mjs') {
21
22
  (0, devkit_1.updateNxJson)(tree, nxJson);
22
23
  }
23
24
  function addTargetDefaults(tree, format) {
24
- const nxJson = (0, devkit_1.readNxJson)(tree);
25
- nxJson.targetDefaults ??= {};
26
- nxJson.targetDefaults['@nx/eslint:lint'] ??= {};
27
- nxJson.targetDefaults['@nx/eslint:lint'].cache ??= true;
28
- nxJson.targetDefaults['@nx/eslint:lint'].inputs ??= [
29
- 'default',
30
- '^default',
31
- `{workspaceRoot}/.eslintrc.json`,
32
- `{workspaceRoot}/.eslintignore`,
33
- `{workspaceRoot}/eslint.config.${format}`,
34
- '{workspaceRoot}/tools/eslint-rules/**/*',
35
- ];
36
- (0, devkit_1.updateNxJson)(tree, nxJson);
25
+ const nxJson = (0, devkit_1.readNxJson)(tree) ?? {};
26
+ // `@nx/eslint:lint` is an executor identifier — match defaults keyed on
27
+ // the executor, not on a target named that string.
28
+ const existing = (0, internal_1.findTargetDefault)(nxJson.targetDefaults, {
29
+ executor: '@nx/eslint:lint',
30
+ });
31
+ const patch = {};
32
+ if (existing?.cache === undefined)
33
+ patch.cache = true;
34
+ if (existing?.inputs === undefined) {
35
+ patch.inputs = [
36
+ 'default',
37
+ '^default',
38
+ `{workspaceRoot}/.eslintrc.json`,
39
+ `{workspaceRoot}/.eslintignore`,
40
+ `{workspaceRoot}/eslint.config.${format}`,
41
+ '{workspaceRoot}/tools/eslint-rules/**/*',
42
+ ];
43
+ }
44
+ if (Object.keys(patch).length > 0) {
45
+ (0, internal_1.upsertTargetDefault)(tree, nxJson, {
46
+ executor: '@nx/eslint:lint',
47
+ ...patch,
48
+ });
49
+ (0, devkit_1.updateNxJson)(tree, nxJson);
50
+ }
37
51
  }
38
52
  function updateVsCodeRecommendedExtensions(host) {
39
53
  if (!host.exists('.vscode/extensions.json')) {
@@ -49,6 +63,7 @@ function updateVsCodeRecommendedExtensions(host) {
49
63
  });
50
64
  }
51
65
  async function initEsLint(tree, options) {
66
+ (0, assert_supported_eslint_version_1.assertSupportedEslintVersion)(tree);
52
67
  const nxJson = (0, devkit_1.readNxJson)(tree);
53
68
  const addPluginDefault = process.env.NX_ADD_PLUGINS !== 'false' &&
54
69
  nxJson.useInferencePlugins !== false;
@@ -75,7 +90,7 @@ async function initEsLint(tree, options) {
75
90
  '_eslint-lint',
76
91
  ];
77
92
  if (rootEslintFile && options.addPlugin && !hasPlugin) {
78
- await (0, add_plugin_1.addPlugin)(tree, graph, '@nx/eslint/plugin', plugin_1.createNodesV2, {
93
+ await (0, internal_1.addPlugin)(tree, graph, '@nx/eslint/plugin', plugin_1.createNodesV2, {
79
94
  targetName: lintTargetNames,
80
95
  }, options.updatePackageScripts);
81
96
  return () => { };
@@ -86,7 +101,7 @@ async function initEsLint(tree, options) {
86
101
  updateProductionFileset(tree, options.eslintConfigFormat);
87
102
  updateVsCodeRecommendedExtensions(tree);
88
103
  if (options.addPlugin) {
89
- await (0, add_plugin_1.addPlugin)(tree, graph, '@nx/eslint/plugin', plugin_1.createNodesV2, {
104
+ await (0, internal_1.addPlugin)(tree, graph, '@nx/eslint/plugin', plugin_1.createNodesV2, {
90
105
  targetName: lintTargetNames,
91
106
  }, options.updatePackageScripts);
92
107
  }
@@ -95,11 +110,12 @@ async function initEsLint(tree, options) {
95
110
  }
96
111
  const tasks = [];
97
112
  if (!options.skipPackageJson) {
113
+ const { eslintVersion } = (0, versions_1.versions)(tree);
98
114
  tasks.push((0, devkit_1.removeDependenciesFromPackageJson)(tree, ['@nx/eslint'], []));
99
115
  tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
100
116
  '@nx/eslint': versions_1.nxVersion,
101
- eslint: versions_1.eslintVersion,
102
- }, undefined, options.keepExistingVersions));
117
+ eslint: eslintVersion,
118
+ }, undefined, options.keepExistingVersions ?? true));
103
119
  }
104
120
  return (0, devkit_1.runTasksInSerial)(...tasks);
105
121
  }
@@ -15,7 +15,7 @@
15
15
  "type": "boolean",
16
16
  "x-priority": "internal",
17
17
  "description": "Keep existing dependencies versions",
18
- "default": false
18
+ "default": true
19
19
  },
20
20
  "updatePackageScripts": {
21
21
  "type": "boolean",
@@ -22,4 +22,3 @@ interface LintProjectOptions {
22
22
  export declare function lintProjectGenerator(tree: Tree, options: LintProjectOptions): Promise<GeneratorCallback>;
23
23
  export declare function lintProjectGeneratorInternal(tree: Tree, options: LintProjectOptions): Promise<GeneratorCallback>;
24
24
  export {};
25
- //# sourceMappingURL=lint-project.d.ts.map
@@ -6,6 +6,7 @@ const devkit_1 = require("@nx/devkit");
6
6
  const eslint_file_1 = require("../utils/eslint-file");
7
7
  const path_1 = require("path");
8
8
  const init_1 = require("../init/init");
9
+ const deprecation_1 = require("../../utils/deprecation");
9
10
  const init_migration_1 = require("../init/init-migration");
10
11
  const project_configuration_1 = require("nx/src/generators/utils/project-configuration");
11
12
  const flat_config_1 = require("../../utils/flat-config");
@@ -14,7 +15,7 @@ const config_file_1 = require("../../utils/config-file");
14
15
  const plugin_1 = require("../utils/plugin");
15
16
  const versions_1 = require("../../utils/versions");
16
17
  const setup_root_eslint_1 = require("./setup-root-eslint");
17
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
18
+ const internal_1 = require("@nx/js/internal");
18
19
  function lintProjectGenerator(tree, options) {
19
20
  return lintProjectGeneratorInternal(tree, { addPlugin: false, ...options });
20
21
  }
@@ -63,6 +64,7 @@ async function lintProjectGeneratorInternal(tree, options) {
63
64
  }
64
65
  }
65
66
  else {
67
+ (0, deprecation_1.warnEslintExecutorGenerating)();
66
68
  projectConfig.targets ??= {};
67
69
  projectConfig.targets['lint'] = {
68
70
  executor: '@nx/eslint:lint',
@@ -235,7 +237,7 @@ function isJsAnalyzeSourceFilesEnabled(tree) {
235
237
  nxJson.extends !== 'nx/presets/npm.json');
236
238
  }
237
239
  function isBuildableLibraryProject(tree, projectConfig) {
238
- return ((0, ts_solution_setup_1.getProjectType)(tree, projectConfig.root, projectConfig.projectType) ===
240
+ return ((0, internal_1.getProjectType)(tree, projectConfig.root, projectConfig.projectType) ===
239
241
  'library' &&
240
242
  projectConfig.targets?.build &&
241
243
  !!projectConfig.targets.build);
@@ -6,4 +6,3 @@ export type SetupRootEsLintOptions = {
6
6
  eslintConfigFormat?: 'mjs' | 'cjs';
7
7
  };
8
8
  export declare function setupRootEsLint(tree: Tree, options: SetupRootEsLintOptions): GeneratorCallback;
9
- //# sourceMappingURL=setup-root-eslint.d.ts.map
@@ -29,24 +29,28 @@ function setUpLegacyRootEslintRc(tree, options) {
29
29
  else {
30
30
  tree.write('.eslintignore', 'node_modules\n');
31
31
  }
32
- return !options.skipPackageJson
33
- ? (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
34
- '@nx/eslint-plugin': versions_1.nxVersion,
35
- '@typescript-eslint/parser': versions_1.typescriptESLintVersion,
36
- '@typescript-eslint/eslint-plugin': versions_1.typescriptESLintVersion,
37
- 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion,
38
- })
39
- : () => { };
32
+ if (options.skipPackageJson) {
33
+ return () => { };
34
+ }
35
+ const { typescriptESLintVersion } = (0, versions_1.versions)(tree);
36
+ return (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
37
+ '@nx/eslint-plugin': versions_1.nxVersion,
38
+ '@typescript-eslint/parser': typescriptESLintVersion,
39
+ '@typescript-eslint/eslint-plugin': typescriptESLintVersion,
40
+ 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion,
41
+ }, undefined, true);
40
42
  }
41
43
  function setUpRootFlatConfig(tree, options) {
42
44
  tree.write(`eslint.config.${options.eslintConfigFormat}`, (0, global_eslint_config_1.getGlobalFlatEslintConfiguration)(options.eslintConfigFormat, options.rootProject));
43
- return !options.skipPackageJson
44
- ? (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
45
- '@eslint/js': versions_1.eslint9__eslintVersion,
46
- '@nx/eslint-plugin': versions_1.nxVersion,
47
- eslint: versions_1.eslint9__eslintVersion,
48
- 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion,
49
- 'typescript-eslint': versions_1.eslint9__typescriptESLintVersion,
50
- })
51
- : () => { };
45
+ if (options.skipPackageJson) {
46
+ return () => { };
47
+ }
48
+ const { eslintVersion, typescriptESLintVersion } = (0, versions_1.versions)(tree);
49
+ return (0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
50
+ '@eslint/js': eslintVersion,
51
+ '@nx/eslint-plugin': versions_1.nxVersion,
52
+ eslint: eslintVersion,
53
+ 'eslint-config-prettier': versions_1.eslintConfigPrettierVersion,
54
+ 'typescript-eslint': typescriptESLintVersion,
55
+ }, undefined, true);
52
56
  }
@@ -28,4 +28,3 @@ export declare function addPredefinedConfigToFlatLintConfig(tree: Tree, root: st
28
28
  export declare function addPluginsToLintConfig(tree: Tree, root: string, plugin: string | string[]): void;
29
29
  export declare function addIgnoresToLintConfig(tree: Tree, root: string, ignorePatterns: string[]): void;
30
30
  export declare function getPluginImport(pluginName: string): string;
31
- //# sourceMappingURL=eslint-file.d.ts.map
@@ -14,10 +14,8 @@ exports.addPluginsToLintConfig = addPluginsToLintConfig;
14
14
  exports.addIgnoresToLintConfig = addIgnoresToLintConfig;
15
15
  exports.getPluginImport = getPluginImport;
16
16
  const devkit_1 = require("@nx/devkit");
17
- const semver_1 = require("semver");
18
17
  const config_file_1 = require("../../utils/config-file");
19
18
  const flat_config_1 = require("../../utils/flat-config");
20
- const version_utils_1 = require("../../utils/version-utils");
21
19
  const versions_1 = require("../../utils/versions");
22
20
  const ast_utils_1 = require("./flat-config/ast-utils");
23
21
  const path_utils_1 = require("./flat-config/path-utils");
@@ -312,9 +310,9 @@ function addExtendsToLintConfig(tree, root, plugin, insertAtTheEnd = false) {
312
310
  ? 'cjs'
313
311
  : 'mjs';
314
312
  let shouldImportEslintCompat = false;
315
- // assume eslint version is 9 if not found, as it's what we'd be generating by default
316
- const eslintVersion = (0, version_utils_1.getInstalledEslintVersion)(tree) ?? versions_1.eslint9__eslintVersion;
317
- if ((0, semver_1.gte)(eslintVersion, '9.0.0')) {
313
+ // assume eslint major is 9 if not found, as it's what we'd be generating by default
314
+ const eslintMajor = (0, versions_1.getInstalledEslintMajorVersion)(tree) ?? 9;
315
+ if (eslintMajor >= 9) {
318
316
  // eslint v9 requires the incompatible plugins to be wrapped with a helper from @eslint/compat
319
317
  const plugins = (Array.isArray(plugin) ? plugin : [plugin]).map((p) => typeof p === 'string' ? { name: p, needCompatFixup: false } : p);
320
318
  let compatiblePluginsBatch = [];
@@ -1,3 +1,2 @@
1
1
  import { Tree } from '@nx/devkit';
2
2
  export declare function getEslintTargets(tree: Tree): Set<string>;
3
- //# sourceMappingURL=eslint-targets.d.ts.map
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getEslintTargets = getEslintTargets;
4
+ const internal_1 = require("@nx/devkit/internal");
5
+ function getEslintTargets(tree) {
6
+ const eslintTargetNames = new Set();
7
+ (0, internal_1.forEachExecutorOptions)(tree, '@nx/eslint:lint', (_, __, target) => {
8
+ eslintTargetNames.add(target);
9
+ });
10
+ (0, internal_1.forEachExecutorOptions)(tree, '@nx/linter:eslint', (_, __, target) => {
11
+ eslintTargetNames.add(target);
12
+ });
13
+ (0, internal_1.forEachExecutorOptions)(tree, '@nrwl/linter:eslint', (_, __, target) => {
14
+ eslintTargetNames.add(target);
15
+ });
16
+ return eslintTargetNames;
17
+ }
@@ -73,7 +73,7 @@ export declare function overrideNeedsCompat(override: Partial<Linter.ConfigOverr
73
73
  */
74
74
  export declare function generateFlatOverride(_override: Partial<Linter.ConfigOverride<Linter.RulesRecord>> & {
75
75
  ignores?: Linter.FlatConfig['ignores'];
76
- }, format: 'mjs' | 'cjs'): ts.ObjectLiteralExpression | ts.SpreadElement;
76
+ }, format: 'mjs' | 'cjs', importsMap?: Map<string, string>): ts.ObjectLiteralExpression | ts.SpreadElement;
77
77
  export declare function generateFlatPredefinedConfig(predefinedConfigName: string, moduleName?: string, spread?: boolean): ts.ObjectLiteralExpression | ts.SpreadElement | ts.ElementAccessExpression;
78
78
  export declare function mapFilePaths<T extends Partial<Linter.ConfigOverride<Linter.RulesRecord>>>(_override: T): T;
79
79
  /**
@@ -83,4 +83,3 @@ export declare function generateAst<T>(input: unknown, propertyAssignmentReplace
83
83
  keyToMatch: RegExp | string;
84
84
  replacer: (propertyAssignment: ts.PropertyAssignment, propertyName: string) => ts.PropertyAssignment;
85
85
  }): T;
86
- //# sourceMappingURL=ast-utils.d.ts.map
@@ -1101,7 +1101,7 @@ function overrideNeedsCompat(override) {
1101
1101
  * Generates an AST object or spread element representing a modern flat config entry,
1102
1102
  * based on a given legacy eslintrc JSON override object
1103
1103
  */
1104
- function generateFlatOverride(_override, format) {
1104
+ function generateFlatOverride(_override, format, importsMap) {
1105
1105
  const override = mapFilePaths(_override);
1106
1106
  // We do not need the compat tooling for this override
1107
1107
  if (!overrideNeedsCompat(override)) {
@@ -1159,7 +1159,7 @@ function generateFlatOverride(_override, format) {
1159
1159
  else {
1160
1160
  // Change parser to import statement.
1161
1161
  return format === 'mjs'
1162
- ? generateESMParserImport(override)
1162
+ ? generateESMParserImport(override, importsMap)
1163
1163
  : generateCJSParserImport(override);
1164
1164
  }
1165
1165
  },
@@ -1215,12 +1215,19 @@ function generateFlatOverride(_override, format) {
1215
1215
  ], undefined, ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), ts.factory.createParenthesizedExpression(ts.factory.createObjectLiteralExpression(objectLiteralElements, true))),
1216
1216
  ]));
1217
1217
  }
1218
- function generateESMParserImport(override) {
1219
- return ts.factory.createPropertyAssignment('parser', ts.factory.createAwaitExpression(ts.factory.createCallExpression(ts.factory.createIdentifier('import'), undefined, [
1220
- ts.factory.createStringLiteral(override['languageOptions']?.['parserOptions']?.parser ??
1221
- override['languageOptions']?.parser ??
1222
- override.parser),
1223
- ])));
1218
+ function generateESMParserImport(override, importsMap) {
1219
+ const parser = override['languageOptions']?.['parserOptions']?.parser ??
1220
+ override['languageOptions']?.parser ??
1221
+ override.parser;
1222
+ // Dynamic `await import()` doesn't expose top-level CJS exports (e.g. `parseForESLint`)
1223
+ // because those are nested under `.default`. Use a hoisted static import instead so the
1224
+ // resolved binding matches the parser's module.exports shape.
1225
+ if (importsMap) {
1226
+ const parserName = importsMap.get(parser) ?? (0, devkit_1.names)(parser).propertyName;
1227
+ importsMap.set(parser, parserName);
1228
+ return ts.factory.createPropertyAssignment('parser', ts.factory.createIdentifier(parserName));
1229
+ }
1230
+ return ts.factory.createPropertyAssignment('parser', ts.factory.createAwaitExpression(ts.factory.createCallExpression(ts.factory.createIdentifier('import'), undefined, [ts.factory.createStringLiteral(parser)])));
1224
1231
  }
1225
1232
  function generateCJSParserImport(override) {
1226
1233
  return ts.factory.createPropertyAssignment('parser', ts.factory.createCallExpression(ts.factory.createIdentifier('require'), undefined, [
@@ -1237,17 +1244,13 @@ function mapFilePaths(_override) {
1237
1244
  const override = {
1238
1245
  ..._override,
1239
1246
  };
1247
+ // Dedupe after mapping — both source-side duplicates and glob-mapping collisions collapse.
1248
+ const normalize = (value) => Array.from(new Set((Array.isArray(value) ? value : [value]).map(path_utils_1.mapFilePath)));
1240
1249
  if (override.files) {
1241
- override.files = Array.isArray(override.files)
1242
- ? override.files
1243
- : [override.files];
1244
- override.files = override.files.map((file) => (0, path_utils_1.mapFilePath)(file));
1250
+ override.files = normalize(override.files);
1245
1251
  }
1246
1252
  if (override.excludedFiles) {
1247
- override.excludedFiles = Array.isArray(override.excludedFiles)
1248
- ? override.excludedFiles
1249
- : [override.excludedFiles];
1250
- override.excludedFiles = override.excludedFiles.map((file) => (0, path_utils_1.mapFilePath)(file));
1253
+ override.excludedFiles = normalize(override.excludedFiles);
1251
1254
  }
1252
1255
  return override;
1253
1256
  }
@@ -1,4 +1,3 @@
1
1
  import type { Linter } from 'eslint';
2
2
  export declare function updateFiles(override: Linter.ConfigOverride<Linter.RulesRecord>): Linter.ConfigOverride<Linter.RulesRecord>;
3
3
  export declare function mapFilePath(filePath: string): string;
4
- //# sourceMappingURL=path-utils.d.ts.map
@@ -6,4 +6,3 @@ export declare enum Linter {
6
6
  None = "none"
7
7
  }
8
8
  export type LinterType = 'eslint' | 'none';
9
- //# sourceMappingURL=linter.d.ts.map
@@ -1,3 +1,2 @@
1
1
  import { Tree } from '@nx/devkit';
2
2
  export declare function hasEslintPlugin(tree: Tree): boolean;
3
- //# sourceMappingURL=plugin.d.ts.map
@@ -4,4 +4,3 @@ export interface LintWorkspaceRuleGeneratorOptions {
4
4
  directory: string;
5
5
  }
6
6
  export declare function lintWorkspaceRuleGenerator(tree: Tree, options: LintWorkspaceRuleGeneratorOptions): Promise<GeneratorCallback>;
7
- //# sourceMappingURL=workspace-rule.d.ts.map
@@ -2,15 +2,17 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.lintWorkspaceRuleGenerator = lintWorkspaceRuleGenerator;
4
4
  const tslib_1 = require("tslib");
5
+ const internal_1 = require("@nx/devkit/internal");
5
6
  const devkit_1 = require("@nx/devkit");
6
- const string_utils_1 = require("@nx/devkit/src/utils/string-utils");
7
7
  const path_1 = require("path");
8
8
  const ts = tslib_1.__importStar(require("typescript"));
9
9
  const workspace_lint_rules_1 = require("../../utils/workspace-lint-rules");
10
10
  const workspace_rules_project_1 = require("../workspace-rules-project/workspace-rules-project");
11
+ const assert_supported_eslint_version_1 = require("../../utils/assert-supported-eslint-version");
11
12
  const flat_config_1 = require("../../utils/flat-config");
12
13
  const versions_1 = require("../../utils/versions");
13
14
  async function lintWorkspaceRuleGenerator(tree, options) {
15
+ (0, assert_supported_eslint_version_1.assertSupportedEslintVersion)(tree);
14
16
  const tasks = [];
15
17
  const flatConfig = (0, flat_config_1.useFlatConfig)(tree);
16
18
  const nxJson = (0, devkit_1.readNxJson)(tree);
@@ -21,7 +23,8 @@ async function lintWorkspaceRuleGenerator(tree, options) {
21
23
  nxJson.useInferencePlugins !== false,
22
24
  }));
23
25
  if (flatConfig) {
24
- tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, { '@typescript-eslint/rule-tester': versions_1.eslint9__typescriptESLintVersion }));
26
+ const { typescriptESLintVersion } = (0, versions_1.versions)(tree);
27
+ tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, { '@typescript-eslint/rule-tester': typescriptESLintVersion }, undefined, true));
25
28
  }
26
29
  const ruleDir = (0, devkit_1.joinPathFragments)(workspace_lint_rules_1.workspaceLintPluginDir, options.directory ?? '');
27
30
  // Generate the required files for the new rule
@@ -30,7 +33,7 @@ async function lintWorkspaceRuleGenerator(tree, options) {
30
33
  name: options.name,
31
34
  flatConfig,
32
35
  });
33
- const nameCamelCase = (0, string_utils_1.camelize)(options.name);
36
+ const nameCamelCase = (0, internal_1.camelize)(options.name);
34
37
  /**
35
38
  * Import the new rule into the workspace plugin index.ts and
36
39
  * register it ready for use in lint configs.
@@ -6,4 +6,3 @@ export interface LintWorkspaceRulesProjectGeneratorOptions {
6
6
  addPlugin?: boolean;
7
7
  }
8
8
  export declare function lintWorkspaceRulesProjectGenerator(tree: Tree, options?: LintWorkspaceRulesProjectGeneratorOptions): Promise<GeneratorCallback>;
9
- //# sourceMappingURL=workspace-rules-project.d.ts.map
@@ -4,15 +4,15 @@ exports.WORKSPACE_PLUGIN_DIR = exports.WORKSPACE_RULES_PROJECT_NAME = void 0;
4
4
  exports.lintWorkspaceRulesProjectGenerator = lintWorkspaceRulesProjectGenerator;
5
5
  const devkit_1 = require("@nx/devkit");
6
6
  const js_1 = require("@nx/js");
7
- const add_swc_dependencies_1 = require("@nx/js/src/utils/swc/add-swc-dependencies");
8
- const ts_solution_setup_1 = require("@nx/js/src/utils/typescript/ts-solution-setup");
7
+ const internal_1 = require("@nx/js/internal");
9
8
  const path_1 = require("path");
9
+ const assert_supported_eslint_version_1 = require("../../utils/assert-supported-eslint-version");
10
10
  const versions_1 = require("../../utils/versions");
11
- const version_utils_1 = require("../../utils/version-utils");
12
11
  const workspace_lint_rules_1 = require("../../utils/workspace-lint-rules");
13
12
  exports.WORKSPACE_RULES_PROJECT_NAME = 'eslint-rules';
14
13
  exports.WORKSPACE_PLUGIN_DIR = 'tools/eslint-rules';
15
14
  async function lintWorkspaceRulesProjectGenerator(tree, options = {}) {
15
+ (0, assert_supported_eslint_version_1.assertSupportedEslintVersion)(tree);
16
16
  const { configurationGenerator } = (0, devkit_1.ensurePackage)('@nx/jest', versions_1.nxVersion);
17
17
  const tasks = [];
18
18
  // Noop if the workspace rules project already exists
@@ -38,8 +38,9 @@ async function lintWorkspaceRulesProjectGenerator(tree, options = {}) {
38
38
  * TODO: Explore writing a ProjectGraph plugin to make this more surgical.
39
39
  */
40
40
  const nxJson = (0, devkit_1.readNxJson)(tree);
41
- if (nxJson.targetDefaults?.lint?.inputs) {
42
- nxJson.targetDefaults.lint.inputs.push(`{workspaceRoot}/${exports.WORKSPACE_PLUGIN_DIR}/**/*`);
41
+ const lintEntry = findLintTargetDefault(nxJson.targetDefaults);
42
+ if (lintEntry?.inputs) {
43
+ lintEntry.inputs.push(`{workspaceRoot}/${exports.WORKSPACE_PLUGIN_DIR}/**/*`);
43
44
  (0, devkit_1.updateNxJson)(tree, nxJson);
44
45
  }
45
46
  // Add jest to the project and return installation task
@@ -49,7 +50,7 @@ async function lintWorkspaceRulesProjectGenerator(tree, options = {}) {
49
50
  supportTsx: false,
50
51
  skipSerializers: true,
51
52
  setupFile: 'none',
52
- compiler: (0, ts_solution_setup_1.isUsingTsSolutionSetup)(tree) ? 'swc' : 'tsc',
53
+ compiler: (0, internal_1.isUsingTsSolutionSetup)(tree) ? 'swc' : 'tsc',
53
54
  skipFormat: true,
54
55
  testEnvironment: 'node',
55
56
  }));
@@ -75,13 +76,23 @@ async function lintWorkspaceRulesProjectGenerator(tree, options = {}) {
75
76
  return json;
76
77
  });
77
78
  // Add swc dependencies
78
- tasks.push((0, add_swc_dependencies_1.addSwcRegisterDependencies)(tree));
79
- const typescriptEslintVersion = (0, version_utils_1.getTypeScriptEslintVersionToInstall)(tree);
79
+ tasks.push((0, internal_1.addSwcRegisterDependencies)(tree));
80
+ const { typescriptESLintVersion } = (0, versions_1.versions)(tree);
80
81
  tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, {
81
- '@typescript-eslint/utils': typescriptEslintVersion,
82
- }));
82
+ '@typescript-eslint/utils': typescriptESLintVersion,
83
+ }, undefined, true));
83
84
  if (!options.skipFormat) {
84
85
  await (0, devkit_1.formatFiles)(tree);
85
86
  }
86
87
  return (0, devkit_1.runTasksInSerial)(...tasks);
87
88
  }
89
+ function findLintTargetDefault(td) {
90
+ if (!td)
91
+ return undefined;
92
+ if (Array.isArray(td)) {
93
+ return td.find((e) => e.target === 'lint' &&
94
+ e.projects === undefined &&
95
+ e.plugin === undefined);
96
+ }
97
+ return td['lint'];
98
+ }
@@ -1,3 +1,2 @@
1
1
  import { type GeneratorCallback, type Tree } from '@nx/devkit';
2
2
  export default function (tree: Tree): Promise<GeneratorCallback>;
3
- //# sourceMappingURL=update-typescript-eslint-v8-13-0.d.ts.map
@@ -2,12 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = default_1;
4
4
  const devkit_1 = require("@nx/devkit");
5
+ const internal_1 = require("@nx/devkit/internal");
5
6
  const semver_1 = require("semver");
6
- const version_utils_1 = require("../../utils/version-utils");
7
7
  async function default_1(tree) {
8
8
  const devDependencies = {};
9
+ // `@typescript-eslint/parser >=8.0.0` is enforced at the `requires` gate
10
+ // in `migrations.json`. The per-package `gte('8.0.0') && lt('8.13.0')`
11
+ // check below catches the lockstep-broken case where one of the four
12
+ // typescript-eslint packages is at a different major than the parser.
9
13
  const checkPackageAndMigrate = (pkgName) => {
10
- const pkgVersion = (0, version_utils_1.getInstalledPackageVersion)(pkgName, tree);
14
+ const pkgVersion = (0, internal_1.getDeclaredPackageVersion)(tree, pkgName);
11
15
  if (!!pkgVersion && (0, semver_1.gte)(pkgVersion, '8.0.0') && (0, semver_1.lt)(pkgVersion, '8.13.0')) {
12
16
  devDependencies[pkgName] = '^8.13.0';
13
17
  }
@@ -0,0 +1,33 @@
1
+ #### Update TypeScript ESLint to v8.13.0
2
+
3
+ Update TypeScript ESLint packages to v8.13.0 if they are already on v8
4
+
5
+ #### Sample Code Changes
6
+
7
+ This migration will update `typescript-eslint`, `@typescript-eslint/eslint-plugin`, `@typescript-eslint/parser` and `@typescript-eslint/utils` to `8.13.0` if they are between version `8.0.0` and `8.13.0`.
8
+
9
+ ##### Before
10
+
11
+ ```json title="package.json"
12
+ {
13
+ "devDependencies": {
14
+ "typescript-eslint": "^8.0.0",
15
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
16
+ "@typescript-eslint/parser": "^8.0.0",
17
+ "@typescript-eslint/utils": "^8.0.0"
18
+ }
19
+ }
20
+ ```
21
+
22
+ ##### After
23
+
24
+ ```json title="package.json"
25
+ {
26
+ "devDependencies": {
27
+ "typescript-eslint": "^8.13.0",
28
+ "@typescript-eslint/eslint-plugin": "^8.13.0",
29
+ "@typescript-eslint/parser": "^8.13.0",
30
+ "@typescript-eslint/utils": "^8.13.0"
31
+ }
32
+ }
33
+ ```
@@ -1,3 +1,2 @@
1
1
  import { type Tree } from '@nx/devkit';
2
2
  export default function (tree: Tree): Promise<void>;
3
- //# sourceMappingURL=add-file-extensions-to-overrides.d.ts.map
@@ -0,0 +1,83 @@
1
+ #### Update ESLint Config File Extensions in Overrides
2
+
3
+ Update ESLint flat config to include .cjs, .mjs, .cts, and .mts files in overrides (if needed)
4
+
5
+ #### Sample Code Changes
6
+
7
+ Add `.cjs`, `.mjs`, `.cts`, `.mts` file extensions to overrides converted using `convert-to-flat-config`
8
+
9
+ ##### Before
10
+
11
+ ```js title="eslint.config.js"
12
+ const { FlatCompat } = require('@eslint/eslintrc');
13
+ const js = require('@eslint/js');
14
+ const nxEslintPlugin = require('@nx/eslint-plugin');
15
+
16
+ const compat = new FlatCompat({
17
+ baseDirectory: __dirname,
18
+ recommendedConfig: js.configs.recommended,
19
+ });
20
+
21
+ module.exports = [
22
+ ...compat
23
+ .config({
24
+ extends: ['plugin:@nx/typescript'],
25
+ })
26
+ .map((config) => ({
27
+ ...config,
28
+ files: ['**/*.ts', '**/*.tsx'],
29
+ rules: {
30
+ ...config.rules,
31
+ },
32
+ })),
33
+ ...compat
34
+ .config({
35
+ extends: ['plugin:@nx/javascript'],
36
+ })
37
+ .map((config) => ({
38
+ ...config,
39
+ files: ['**/*.js', '**/*.jsx'],
40
+ rules: {
41
+ ...config.rules,
42
+ },
43
+ })),
44
+ ];
45
+ ```
46
+
47
+ ##### After
48
+
49
+ ```js title="eslint.config.js" {17,28}
50
+ const { FlatCompat } = require('@eslint/eslintrc');
51
+ const js = require('@eslint/js');
52
+ const nxEslintPlugin = require('@nx/eslint-plugin');
53
+
54
+ const compat = new FlatCompat({
55
+ baseDirectory: __dirname,
56
+ recommendedConfig: js.configs.recommended,
57
+ });
58
+
59
+ module.exports = [
60
+ ...compat
61
+ .config({
62
+ extends: ['plugin:@nx/typescript'],
63
+ })
64
+ .map((config) => ({
65
+ ...config,
66
+ files: ['**/*.ts', '**/*.tsx', '**/*.cts', '**/*.mts'],
67
+ rules: {
68
+ ...config.rules,
69
+ },
70
+ })),
71
+ ...compat
72
+ .config({
73
+ extends: ['plugin:@nx/javascript'],
74
+ })
75
+ .map((config) => ({
76
+ ...config,
77
+ files: ['**/*.js', '**/*.jsx', '**/*.cjs', '**/*.mjs'],
78
+ rules: {
79
+ ...config.rules,
80
+ },
81
+ })),
82
+ ];
83
+ ```
@@ -1,3 +1,2 @@
1
1
  import { type Tree } from '@nx/devkit';
2
2
  export default function (tree: Tree): Promise<void>;
3
- //# sourceMappingURL=update-executor-lint-inputs.d.ts.map