@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.
- package/{index.d.ts → dist/index.d.ts} +0 -1
- package/dist/internal.d.ts +7 -0
- package/dist/internal.js +33 -0
- package/{plugin.d.ts → dist/plugin.d.ts} +0 -1
- package/{src → dist/src}/executors/lint/lint.impl.d.ts +0 -1
- package/{src → dist/src}/executors/lint/lint.impl.js +5 -7
- package/{src → dist/src}/executors/lint/schema.json +1 -0
- package/{src → dist/src}/executors/lint/utility/eslint-utils.d.ts +0 -1
- package/{src → dist/src}/generators/convert-to-flat-config/converters/json-converter.d.ts +1 -1
- package/{src → dist/src}/generators/convert-to-flat-config/converters/json-converter.js +76 -16
- package/{src → dist/src}/generators/convert-to-flat-config/generator.d.ts +0 -1
- package/dist/src/generators/convert-to-flat-config/generator.js +262 -0
- package/{src → dist/src}/generators/convert-to-flat-config/schema.json +7 -0
- package/{src → dist/src}/generators/convert-to-inferred/convert-to-inferred.d.ts +0 -1
- package/{src → dist/src}/generators/convert-to-inferred/convert-to-inferred.js +6 -5
- package/{src → dist/src}/generators/convert-to-inferred/lib/target-options-map.d.ts +0 -1
- package/{src → dist/src}/generators/init/global-eslint-config.d.ts +0 -1
- package/{src → dist/src}/generators/init/init-migration.d.ts +0 -1
- package/{src → dist/src}/generators/init/init-migration.js +4 -3
- package/{src → dist/src}/generators/init/init.d.ts +0 -1
- package/{src → dist/src}/generators/init/init.js +34 -18
- package/{src → dist/src}/generators/init/schema.json +1 -1
- package/{src → dist/src}/generators/lint-project/lint-project.d.ts +0 -1
- package/{src → dist/src}/generators/lint-project/lint-project.js +4 -2
- package/{src → dist/src}/generators/lint-project/setup-root-eslint.d.ts +0 -1
- package/{src → dist/src}/generators/lint-project/setup-root-eslint.js +21 -17
- package/{src → dist/src}/generators/utils/eslint-file.d.ts +0 -1
- package/{src → dist/src}/generators/utils/eslint-file.js +3 -5
- package/{src → dist/src}/generators/utils/eslint-targets.d.ts +0 -1
- package/dist/src/generators/utils/eslint-targets.js +17 -0
- package/{src → dist/src}/generators/utils/flat-config/ast-utils.d.ts +1 -2
- package/{src → dist/src}/generators/utils/flat-config/ast-utils.js +19 -16
- package/{src → dist/src}/generators/utils/flat-config/path-utils.d.ts +0 -1
- package/{src → dist/src}/generators/utils/linter.d.ts +0 -1
- package/{src → dist/src}/generators/utils/plugin.d.ts +0 -1
- package/{src → dist/src}/generators/workspace-rule/workspace-rule.d.ts +0 -1
- package/{src → dist/src}/generators/workspace-rule/workspace-rule.js +6 -3
- package/{src → dist/src}/generators/workspace-rules-project/workspace-rules-project.d.ts +0 -1
- package/{src → dist/src}/generators/workspace-rules-project/workspace-rules-project.js +21 -10
- package/{src → dist/src}/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.d.ts +0 -1
- package/{src → dist/src}/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.js +6 -2
- package/dist/src/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.md +33 -0
- package/{src → dist/src}/migrations/update-20-3-0/add-file-extensions-to-overrides.d.ts +0 -1
- package/dist/src/migrations/update-20-3-0/add-file-extensions-to-overrides.md +83 -0
- package/{src → dist/src}/migrations/update-21-6-0/update-executor-lint-inputs.d.ts +0 -1
- package/{src → dist/src}/migrations/update-21-6-0/update-executor-lint-inputs.js +9 -3
- package/dist/src/migrations/update-23-0-0/rewrite-internal-subpath-imports.d.ts +3 -0
- package/dist/src/migrations/update-23-0-0/rewrite-internal-subpath-imports.js +198 -0
- package/{src → dist/src}/plugins/plugin.d.ts +0 -1
- package/{src → dist/src}/plugins/plugin.js +30 -28
- package/dist/src/utils/assert-supported-eslint-version.d.ts +2 -0
- package/dist/src/utils/assert-supported-eslint-version.js +8 -0
- package/{src → dist/src}/utils/config-file.d.ts +0 -1
- package/dist/src/utils/deprecation.d.ts +3 -0
- package/dist/src/utils/deprecation.js +15 -0
- package/{src → dist/src}/utils/flat-config.d.ts +0 -1
- package/{src → dist/src}/utils/resolve-eslint-class.d.ts +0 -1
- package/dist/src/utils/resolve-eslint-class.js +28 -0
- package/{src → dist/src}/utils/rules-requiring-type-checking.d.ts +0 -1
- package/dist/src/utils/versions.d.ts +17 -0
- package/dist/src/utils/versions.js +50 -0
- package/{src → dist/src}/utils/workspace-lint-rules.d.ts +0 -1
- package/executors.json +2 -2
- package/generators.json +10 -10
- package/migrations.json +14 -3
- package/package.json +49 -10
- package/index.d.ts.map +0 -1
- package/plugin.d.ts.map +0 -1
- package/src/executors/lint/lint.impl.d.ts.map +0 -1
- package/src/executors/lint/utility/eslint-utils.d.ts.map +0 -1
- package/src/generators/convert-to-flat-config/converters/json-converter.d.ts.map +0 -1
- package/src/generators/convert-to-flat-config/generator.d.ts.map +0 -1
- package/src/generators/convert-to-flat-config/generator.js +0 -162
- package/src/generators/convert-to-inferred/convert-to-inferred.d.ts.map +0 -1
- package/src/generators/convert-to-inferred/lib/target-options-map.d.ts.map +0 -1
- package/src/generators/init/global-eslint-config.d.ts.map +0 -1
- package/src/generators/init/init-migration.d.ts.map +0 -1
- package/src/generators/init/init.d.ts.map +0 -1
- package/src/generators/lint-project/lint-project.d.ts.map +0 -1
- package/src/generators/lint-project/setup-root-eslint.d.ts.map +0 -1
- package/src/generators/utils/eslint-file.d.ts.map +0 -1
- package/src/generators/utils/eslint-targets.d.ts.map +0 -1
- package/src/generators/utils/eslint-targets.js +0 -17
- package/src/generators/utils/flat-config/ast-utils.d.ts.map +0 -1
- package/src/generators/utils/flat-config/path-utils.d.ts.map +0 -1
- package/src/generators/utils/linter.d.ts.map +0 -1
- package/src/generators/utils/plugin.d.ts.map +0 -1
- package/src/generators/workspace-rule/workspace-rule.d.ts.map +0 -1
- package/src/generators/workspace-rules-project/workspace-rules-project.d.ts.map +0 -1
- package/src/migrations/update-20-2-0/update-typescript-eslint-v8-13-0.d.ts.map +0 -1
- package/src/migrations/update-20-3-0/add-file-extensions-to-overrides.d.ts.map +0 -1
- package/src/migrations/update-21-6-0/update-executor-lint-inputs.d.ts.map +0 -1
- package/src/plugins/plugin.d.ts.map +0 -1
- package/src/utils/config-file.d.ts.map +0 -1
- package/src/utils/flat-config.d.ts.map +0 -1
- package/src/utils/resolve-eslint-class.d.ts.map +0 -1
- package/src/utils/resolve-eslint-class.js +0 -61
- package/src/utils/rules-requiring-type-checking.d.ts.map +0 -1
- package/src/utils/version-utils.d.ts +0 -5
- package/src/utils/version-utils.d.ts.map +0 -1
- package/src/utils/version-utils.js +0 -49
- package/src/utils/versions.d.ts +0 -10
- package/src/utils/versions.d.ts.map +0 -1
- package/src/utils/versions.js +0 -13
- package/src/utils/workspace-lint-rules.d.ts.map +0 -1
- /package/{LICENSE → dist/LICENSE} +0 -0
- /package/{index.js → dist/index.js} +0 -0
- /package/{plugin.js → dist/plugin.js} +0 -0
- /package/{src → dist/src}/executors/lint/schema.d.ts +0 -0
- /package/{src → dist/src}/executors/lint/utility/eslint-utils.js +0 -0
- /package/{src → dist/src}/generators/convert-to-flat-config/schema.d.ts +0 -0
- /package/{src → dist/src}/generators/convert-to-inferred/lib/target-options-map.js +0 -0
- /package/{src → dist/src}/generators/convert-to-inferred/schema.json +0 -0
- /package/{src → dist/src}/generators/init/global-eslint-config.js +0 -0
- /package/{src → dist/src}/generators/utils/flat-config/path-utils.js +0 -0
- /package/{src → dist/src}/generators/utils/linter.js +0 -0
- /package/{src → dist/src}/generators/utils/plugin.js +0 -0
- /package/{src → dist/src}/generators/workspace-rule/files/__name__.spec.ts__tmpl__ +0 -0
- /package/{src → dist/src}/generators/workspace-rule/files/__name__.ts__tmpl__ +0 -0
- /package/{src → dist/src}/generators/workspace-rule/schema.json +0 -0
- /package/{src → dist/src}/generators/workspace-rules-project/files/index.ts__tmpl__ +0 -0
- /package/{src → dist/src}/generators/workspace-rules-project/files/tsconfig.json__tmpl__ +0 -0
- /package/{src → dist/src}/generators/workspace-rules-project/files/tsconfig.lint.json__tmpl__ +0 -0
- /package/{src → dist/src}/generators/workspace-rules-project/schema.json +0 -0
- /package/{src → dist/src}/migrations/update-20-3-0/add-file-extensions-to-overrides.js +0 -0
- /package/{src → dist/src}/utils/config-file.js +0 -0
- /package/{src → dist/src}/utils/flat-config.js +0 -0
- /package/{src → dist/src}/utils/rules-requiring-type-checking.js +0 -0
- /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
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
nxJson.targetDefaults
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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,
|
|
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,
|
|
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:
|
|
102
|
-
}, undefined, options.keepExistingVersions));
|
|
117
|
+
eslint: eslintVersion,
|
|
118
|
+
}, undefined, options.keepExistingVersions ?? true));
|
|
103
119
|
}
|
|
104
120
|
return (0, devkit_1.runTasksInSerial)(...tasks);
|
|
105
121
|
}
|
|
@@ -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
|
|
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,
|
|
240
|
+
return ((0, internal_1.getProjectType)(tree, projectConfig.root, projectConfig.projectType) ===
|
|
239
241
|
'library' &&
|
|
240
242
|
projectConfig.targets?.build &&
|
|
241
243
|
!!projectConfig.targets.build);
|
|
@@ -29,24 +29,28 @@ function setUpLegacyRootEslintRc(tree, options) {
|
|
|
29
29
|
else {
|
|
30
30
|
tree.write('.eslintignore', 'node_modules\n');
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
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
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
|
316
|
-
const
|
|
317
|
-
if (
|
|
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 = [];
|
|
@@ -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
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
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 =
|
|
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 =
|
|
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
|
|
@@ -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
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
42
|
-
|
|
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,
|
|
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,
|
|
79
|
-
const
|
|
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':
|
|
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
|
+
}
|
|
@@ -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,
|
|
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
|
+
```
|
|
@@ -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
|
+
```
|