@nrwl/linter 16.0.0-beta.0 → 16.0.0-beta.1
Sign up to get free protection for your applications and to get access to all the features.
- package/executors.json +5 -5
- package/generators.json +2 -28
- package/index.d.ts +1 -5
- package/index.js +1 -13
- package/index.js.map +1 -1
- package/package.json +7 -20
- package/README.md +0 -61
- package/migrations.json +0 -226
- package/src/executors/eslint/compat.d.ts +0 -2
- package/src/executors/eslint/compat.js +0 -6
- package/src/executors/eslint/compat.js.map +0 -1
- package/src/executors/eslint/hasher.d.ts +0 -7
- package/src/executors/eslint/hasher.js +0 -47
- package/src/executors/eslint/hasher.js.map +0 -1
- package/src/executors/eslint/lint.impl.d.ts +0 -5
- package/src/executors/eslint/lint.impl.js +0 -116
- package/src/executors/eslint/lint.impl.js.map +0 -1
- package/src/executors/eslint/schema.d.ts +0 -38
- package/src/executors/eslint/schema.json +0 -139
- package/src/executors/eslint/utility/eslint-utils.d.ts +0 -4
- package/src/executors/eslint/utility/eslint-utils.js +0 -52
- package/src/executors/eslint/utility/eslint-utils.js.map +0 -1
- package/src/generators/init/global-eslint-config.d.ts +0 -36
- package/src/generators/init/global-eslint-config.js +0 -77
- package/src/generators/init/global-eslint-config.js.map +0 -1
- package/src/generators/init/init-migration.d.ts +0 -3
- package/src/generators/init/init-migration.js +0 -68
- package/src/generators/init/init-migration.js.map +0 -1
- package/src/generators/init/init.d.ts +0 -9
- package/src/generators/init/init.js +0 -63
- package/src/generators/init/init.js.map +0 -1
- package/src/generators/lint-project/lint-project.d.ts +0 -16
- package/src/generators/lint-project/lint-project.js +0 -137
- package/src/generators/lint-project/lint-project.js.map +0 -1
- package/src/generators/utils/eslint-file.d.ts +0 -4
- package/src/generators/utils/eslint-file.js +0 -27
- package/src/generators/utils/eslint-file.js.map +0 -1
- package/src/generators/utils/eslint-targets.d.ts +0 -2
- package/src/generators/utils/eslint-targets.js +0 -13
- package/src/generators/utils/eslint-targets.js.map +0 -1
- package/src/generators/utils/linter.d.ts +0 -4
- package/src/generators/utils/linter.js +0 -9
- package/src/generators/utils/linter.js.map +0 -1
- package/src/generators/workspace-rule/files/__name__.spec.ts__tmpl__ +0 -11
- package/src/generators/workspace-rule/files/__name__.ts__tmpl__ +0 -37
- package/src/generators/workspace-rule/schema.json +0 -26
- package/src/generators/workspace-rule/workspace-rule.d.ts +0 -7
- package/src/generators/workspace-rule/workspace-rule.js +0 -79
- package/src/generators/workspace-rule/workspace-rule.js.map +0 -1
- package/src/generators/workspace-rules-project/files/index.ts__tmpl__ +0 -27
- package/src/generators/workspace-rules-project/files/tsconfig.json__tmpl__ +0 -13
- package/src/generators/workspace-rules-project/files/tsconfig.lint.json__tmpl__ +0 -9
- package/src/generators/workspace-rules-project/schema.json +0 -23
- package/src/generators/workspace-rules-project/workspace-rules-project.d.ts +0 -8
- package/src/generators/workspace-rules-project/workspace-rules-project.js +0 -86
- package/src/generators/workspace-rules-project/workspace-rules-project.js.map +0 -1
- package/src/migrations/update-12-4-0/remove-eslint-project-config-if-no-type-checking-rules.d.ts +0 -2
- package/src/migrations/update-12-4-0/remove-eslint-project-config-if-no-type-checking-rules.js +0 -32
- package/src/migrations/update-12-4-0/remove-eslint-project-config-if-no-type-checking-rules.js.map +0 -1
- package/src/migrations/update-12-9-0/add-outputs.d.ts +0 -2
- package/src/migrations/update-12-9-0/add-outputs.js +0 -23
- package/src/migrations/update-12-9-0/add-outputs.js.map +0 -1
- package/src/migrations/update-13-3-0/eslint-8-updates.d.ts +0 -2
- package/src/migrations/update-13-3-0/eslint-8-updates.js +0 -44
- package/src/migrations/update-13-3-0/eslint-8-updates.js.map +0 -1
- package/src/migrations/update-14-1-9/add-swc-deps-if-needed.d.ts +0 -2
- package/src/migrations/update-14-1-9/add-swc-deps-if-needed.js +0 -20
- package/src/migrations/update-14-1-9/add-swc-deps-if-needed.js.map +0 -1
- package/src/migrations/update-14-4-4/experimental-to-utils-deps.d.ts +0 -2
- package/src/migrations/update-14-4-4/experimental-to-utils-deps.js +0 -30
- package/src/migrations/update-14-4-4/experimental-to-utils-deps.js.map +0 -1
- package/src/migrations/update-14-4-4/experimental-to-utils-rules.d.ts +0 -2
- package/src/migrations/update-14-4-4/experimental-to-utils-rules.js +0 -38
- package/src/migrations/update-14-4-4/experimental-to-utils-rules.js.map +0 -1
- package/src/migrations/update-15-0-0/add-eslint-inputs.d.ts +0 -2
- package/src/migrations/update-15-0-0/add-eslint-inputs.js +0 -33
- package/src/migrations/update-15-0-0/add-eslint-inputs.js.map +0 -1
- package/src/migrations/update-15-7-1/add-eslint-ignore.d.ts +0 -2
- package/src/migrations/update-15-7-1/add-eslint-ignore.js +0 -42
- package/src/migrations/update-15-7-1/add-eslint-ignore.js.map +0 -1
- package/src/utils/convert-tslint-to-eslint/convert-nx-enforce-module-boundaries-rule.d.ts +0 -5
- package/src/utils/convert-tslint-to-eslint/convert-nx-enforce-module-boundaries-rule.js +0 -57
- package/src/utils/convert-tslint-to-eslint/convert-nx-enforce-module-boundaries-rule.js.map +0 -1
- package/src/utils/convert-tslint-to-eslint/convert-to-eslint-config.d.ts +0 -9
- package/src/utils/convert-tslint-to-eslint/convert-to-eslint-config.js +0 -152
- package/src/utils/convert-tslint-to-eslint/convert-to-eslint-config.js.map +0 -1
- package/src/utils/convert-tslint-to-eslint/example-tslint-configs.d.ts +0 -326
- package/src/utils/convert-tslint-to-eslint/example-tslint-configs.js +0 -325
- package/src/utils/convert-tslint-to-eslint/example-tslint-configs.js.map +0 -1
- package/src/utils/convert-tslint-to-eslint/index.d.ts +0 -2
- package/src/utils/convert-tslint-to-eslint/index.js +0 -9
- package/src/utils/convert-tslint-to-eslint/index.js.map +0 -1
- package/src/utils/convert-tslint-to-eslint/project-converter.d.ts +0 -72
- package/src/utils/convert-tslint-to-eslint/project-converter.js +0 -396
- package/src/utils/convert-tslint-to-eslint/project-converter.js.map +0 -1
- package/src/utils/convert-tslint-to-eslint/utils.d.ts +0 -10
- package/src/utils/convert-tslint-to-eslint/utils.js +0 -91
- package/src/utils/convert-tslint-to-eslint/utils.js.map +0 -1
- package/src/utils/rules-requiring-type-checking.d.ts +0 -3
- package/src/utils/rules-requiring-type-checking.js +0 -88
- package/src/utils/rules-requiring-type-checking.js.map +0 -1
- package/src/utils/testing.d.ts +0 -2
- package/src/utils/testing.js +0 -13
- package/src/utils/testing.js.map +0 -1
- package/src/utils/versions.d.ts +0 -5
- package/src/utils/versions.js +0 -9
- package/src/utils/versions.js.map +0 -1
- package/src/utils/workspace-lint-rules.d.ts +0 -1
- package/src/utils/workspace-lint-rules.js +0 -6
- package/src/utils/workspace-lint-rules.js.map +0 -1
@@ -1,72 +0,0 @@
|
|
1
|
-
import type { GeneratorCallback, ProjectConfiguration, Tree } from '@nrwl/devkit';
|
2
|
-
import type { Linter } from 'eslint';
|
3
|
-
/**
|
4
|
-
* Common schema used by all implementations of convert-tslint-to-eslint generators
|
5
|
-
*/
|
6
|
-
export interface ConvertTSLintToESLintSchema {
|
7
|
-
project: string;
|
8
|
-
ignoreExistingTslintConfig: boolean;
|
9
|
-
removeTSLintIfNoMoreTSLintTargets: boolean;
|
10
|
-
skipFormat?: boolean;
|
11
|
-
}
|
12
|
-
/**
|
13
|
-
* When we convert a TSLint setup to an ESLint setup for a particular project, there are a number of
|
14
|
-
* shared/common concerns (implemented as library utilities within @nrwl/linter), and a few things
|
15
|
-
* which are specific to this package and the types of projects it produces.
|
16
|
-
*
|
17
|
-
* The key structure of the converted ESLint support is as follows:
|
18
|
-
*
|
19
|
-
* - We will first generate a workspace root .eslintrc.json which is the same as the one generated
|
20
|
-
* for new workspaces (i.e. it is NOT just a converted version of their root tslint.json). This allows us
|
21
|
-
* to have a consistent base for all users, as well as standardized patterns around "overrides".
|
22
|
-
*
|
23
|
-
* - The user's original root tslint.json will be converted and any applicable settings will be stored
|
24
|
-
* within ADDITIONAL override blocks within the root .eslintrc.json.
|
25
|
-
*
|
26
|
-
* - The user's project-level tslint.json file will be converted into a corresponding .eslintrc.json file
|
27
|
-
* and it will extend from the root workspace .eslintrc.json file as normal.
|
28
|
-
*/
|
29
|
-
export declare class ProjectConverter {
|
30
|
-
private readonly projectConfig;
|
31
|
-
private readonly rootTSLintJsonPath;
|
32
|
-
private readonly rootTSLintJson;
|
33
|
-
private readonly projectTSLintJsonPath;
|
34
|
-
private readonly projectTSLintJson;
|
35
|
-
private readonly host;
|
36
|
-
private readonly projectName;
|
37
|
-
private readonly ignoreExistingTslintConfig;
|
38
|
-
private readonly eslintInitializer;
|
39
|
-
/**
|
40
|
-
* Using an object as the argument to the constructor means we sacrifice some
|
41
|
-
* authoring sugar around initializing these properties but it makes the usage
|
42
|
-
* of the class much easier to read and maintain.
|
43
|
-
*/
|
44
|
-
constructor({ host, projectName, ignoreExistingTslintConfig, eslintInitializer, }: {
|
45
|
-
host: Tree;
|
46
|
-
projectName: string;
|
47
|
-
ignoreExistingTslintConfig: boolean;
|
48
|
-
eslintInitializer: (projectInfo: {
|
49
|
-
projectName: string;
|
50
|
-
projectConfig: ProjectConfiguration;
|
51
|
-
}) => Promise<void>;
|
52
|
-
});
|
53
|
-
initESLint(): Promise<GeneratorCallback>;
|
54
|
-
/**
|
55
|
-
* If the package-specific shareable config already exists then the workspace must already
|
56
|
-
* be part way through migrating from TSLint to ESLint. In this case we do not want to convert
|
57
|
-
* the root tslint.json again (and this utility will return a noop task), and we instead just
|
58
|
-
* focus on the project-level config conversion.
|
59
|
-
*/
|
60
|
-
convertRootTSLintConfig(applyPackageSpecificModifications: (json: Linter.Config) => Linter.Config, rootEslintConfigExists?: boolean): Promise<Exclude<GeneratorCallback, void>>;
|
61
|
-
convertProjectConfig(applyPackageSpecificModifications: (json: Linter.Config) => Linter.Config): Promise<GeneratorCallback>;
|
62
|
-
removeProjectTSLintFile(): void;
|
63
|
-
isTSLintUsedInWorkspace(): boolean;
|
64
|
-
removeTSLintFromWorkspace(): GeneratorCallback;
|
65
|
-
private cleanUpGeneratorsConfig;
|
66
|
-
/**
|
67
|
-
* If the project which is the subject of the ProjectConverter instance is an application,
|
68
|
-
* figure out its associated e2e project's name.
|
69
|
-
*/
|
70
|
-
getE2EProjectName(): string | null;
|
71
|
-
setDefaults(collectionName: string, defaults: Partial<ConvertTSLintToESLintSchema>): void;
|
72
|
-
}
|
@@ -1,396 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.ProjectConverter = void 0;
|
4
|
-
const tslib_1 = require("tslib");
|
5
|
-
const devkit_1 = require("@nrwl/devkit");
|
6
|
-
const rules_requiring_type_checking_1 = require("../rules-requiring-type-checking");
|
7
|
-
const convert_to_eslint_config_1 = require("./convert-to-eslint-config");
|
8
|
-
const utils_1 = require("./utils");
|
9
|
-
/**
|
10
|
-
* When we convert a TSLint setup to an ESLint setup for a particular project, there are a number of
|
11
|
-
* shared/common concerns (implemented as library utilities within @nrwl/linter), and a few things
|
12
|
-
* which are specific to this package and the types of projects it produces.
|
13
|
-
*
|
14
|
-
* The key structure of the converted ESLint support is as follows:
|
15
|
-
*
|
16
|
-
* - We will first generate a workspace root .eslintrc.json which is the same as the one generated
|
17
|
-
* for new workspaces (i.e. it is NOT just a converted version of their root tslint.json). This allows us
|
18
|
-
* to have a consistent base for all users, as well as standardized patterns around "overrides".
|
19
|
-
*
|
20
|
-
* - The user's original root tslint.json will be converted and any applicable settings will be stored
|
21
|
-
* within ADDITIONAL override blocks within the root .eslintrc.json.
|
22
|
-
*
|
23
|
-
* - The user's project-level tslint.json file will be converted into a corresponding .eslintrc.json file
|
24
|
-
* and it will extend from the root workspace .eslintrc.json file as normal.
|
25
|
-
*/
|
26
|
-
class ProjectConverter {
|
27
|
-
/**
|
28
|
-
* Using an object as the argument to the constructor means we sacrifice some
|
29
|
-
* authoring sugar around initializing these properties but it makes the usage
|
30
|
-
* of the class much easier to read and maintain.
|
31
|
-
*/
|
32
|
-
constructor({ host, projectName, ignoreExistingTslintConfig, eslintInitializer, }) {
|
33
|
-
this.rootTSLintJsonPath = 'tslint.json';
|
34
|
-
this.host = host;
|
35
|
-
this.projectName = projectName;
|
36
|
-
this.ignoreExistingTslintConfig = ignoreExistingTslintConfig;
|
37
|
-
this.eslintInitializer = eslintInitializer;
|
38
|
-
this.projectConfig = (0, devkit_1.readProjectConfiguration)(this.host, this.projectName);
|
39
|
-
this.projectTSLintJsonPath = (0, devkit_1.joinPathFragments)(this.projectConfig.root, 'tslint.json');
|
40
|
-
/**
|
41
|
-
* Given the user is converting a project from TSLint to ESLint, we expect them
|
42
|
-
* to have both a root and a project-specific tslint.json
|
43
|
-
*/
|
44
|
-
if (!ignoreExistingTslintConfig) {
|
45
|
-
if (!host.exists(this.rootTSLintJsonPath)) {
|
46
|
-
throw new Error('We could not find a tslint.json at the root of your workspace, maybe you have already migrated to ESLint?');
|
47
|
-
}
|
48
|
-
this.rootTSLintJson = (0, devkit_1.readJson)(host, this.rootTSLintJsonPath);
|
49
|
-
if (!host.exists(this.projectTSLintJsonPath)) {
|
50
|
-
devkit_1.logger.warn(`We could not find a tslint.json for the selected project "${this.projectTSLintJsonPath}", maybe you have already migrated to ESLint?`);
|
51
|
-
}
|
52
|
-
else {
|
53
|
-
this.projectTSLintJson = (0, devkit_1.readJson)(host, this.projectTSLintJsonPath);
|
54
|
-
}
|
55
|
-
}
|
56
|
-
/**
|
57
|
-
* We are not able to support --dry-run in this generator, because we need to dynamically install
|
58
|
-
* and use the tslint-to-eslint-config package within the same execution.
|
59
|
-
*
|
60
|
-
* This is a worthwhile trade-off and the dry-run output doesn't offer a ton of value for this use-case anyway.
|
61
|
-
*/
|
62
|
-
if (process.argv.includes('--dry-run') ||
|
63
|
-
process.argv.includes('--dryRun') ||
|
64
|
-
process.argv.includes('-d')) {
|
65
|
-
throw new Error('NOTE: This generator does not support --dry-run. If you are running this in Nx Console, it should execute fine once you hit the "Run" button.\n');
|
66
|
-
}
|
67
|
-
}
|
68
|
-
initESLint() {
|
69
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
70
|
-
yield this.eslintInitializer({
|
71
|
-
projectName: this.projectName,
|
72
|
-
projectConfig: this.projectConfig,
|
73
|
-
});
|
74
|
-
// Ensure that all the dependencies added as part ESLint initialization are installed
|
75
|
-
return () => {
|
76
|
-
(0, devkit_1.installPackagesTask)(this.host);
|
77
|
-
};
|
78
|
-
});
|
79
|
-
}
|
80
|
-
/**
|
81
|
-
* If the package-specific shareable config already exists then the workspace must already
|
82
|
-
* be part way through migrating from TSLint to ESLint. In this case we do not want to convert
|
83
|
-
* the root tslint.json again (and this utility will return a noop task), and we instead just
|
84
|
-
* focus on the project-level config conversion.
|
85
|
-
*/
|
86
|
-
convertRootTSLintConfig(applyPackageSpecificModifications, rootEslintConfigExists) {
|
87
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
88
|
-
if (this.ignoreExistingTslintConfig) {
|
89
|
-
return Promise.resolve(() => { });
|
90
|
-
}
|
91
|
-
/**
|
92
|
-
* If root eslint already exists, we will not override it with converted tslint
|
93
|
-
* as this might break existing configuration in place. This is the common scenario
|
94
|
-
* when large projects are migrating one project at a time and apply custom
|
95
|
-
* changes to root config in the meantime.
|
96
|
-
*
|
97
|
-
* We warn user of this action in case .eslintrc.json was created accidentally
|
98
|
-
*/
|
99
|
-
if (rootEslintConfigExists) {
|
100
|
-
devkit_1.logger.warn(`Root '.eslintrc.json' found. Assuming conversion was already run for other projects.`);
|
101
|
-
return Promise.resolve(() => { });
|
102
|
-
}
|
103
|
-
const convertedRoot = yield (0, utils_1.convertTSLintConfig)(this.rootTSLintJson, this.rootTSLintJsonPath, []);
|
104
|
-
const convertedRootESLintConfig = convertedRoot.convertedESLintConfig;
|
105
|
-
/**
|
106
|
-
* Already set by Nx's shareable configs
|
107
|
-
*/
|
108
|
-
delete convertedRootESLintConfig.env;
|
109
|
-
delete convertedRootESLintConfig.parser;
|
110
|
-
delete convertedRootESLintConfig.parserOptions;
|
111
|
-
if (convertedRootESLintConfig.plugins) {
|
112
|
-
convertedRootESLintConfig.plugins =
|
113
|
-
convertedRootESLintConfig.plugins.filter((p) => p !== '@typescript-eslint/tslint');
|
114
|
-
}
|
115
|
-
/**
|
116
|
-
* The only piece of the converted root tslint.json that we need to pull out to
|
117
|
-
* apply to the existing overrides within the root .eslintrc.json is the
|
118
|
-
* @nrwl/nx/enforce-module-boundaries rule.
|
119
|
-
*/
|
120
|
-
const nxRuleName = '@nrwl/nx/enforce-module-boundaries';
|
121
|
-
const nxEnforceModuleBoundariesRule = convertedRootESLintConfig.rules[nxRuleName];
|
122
|
-
if (nxEnforceModuleBoundariesRule) {
|
123
|
-
(0, devkit_1.updateJson)(this.host, '.eslintrc.json', (json) => {
|
124
|
-
if (!json.overrides) {
|
125
|
-
return json;
|
126
|
-
}
|
127
|
-
for (const o of json.overrides) {
|
128
|
-
if (!o.rules) {
|
129
|
-
continue;
|
130
|
-
}
|
131
|
-
if (!o.rules[nxRuleName]) {
|
132
|
-
continue;
|
133
|
-
}
|
134
|
-
o.rules[nxRuleName] = nxEnforceModuleBoundariesRule;
|
135
|
-
}
|
136
|
-
return json;
|
137
|
-
});
|
138
|
-
/**
|
139
|
-
* Remove it once we've used it on the root, so that is isn't applied
|
140
|
-
* to the package-specific shareable config
|
141
|
-
*/
|
142
|
-
delete convertedRootESLintConfig.rules[nxRuleName];
|
143
|
-
}
|
144
|
-
/**
|
145
|
-
* Update the root workspace .eslintrc.json with additional overrides
|
146
|
-
*/
|
147
|
-
const finalConvertedRootESLintConfig = applyPackageSpecificModifications(convertedRootESLintConfig);
|
148
|
-
(0, devkit_1.updateJson)(this.host, '.eslintrc.json', (json) => {
|
149
|
-
json.overrides || (json.overrides = []);
|
150
|
-
if (finalConvertedRootESLintConfig.overrides &&
|
151
|
-
finalConvertedRootESLintConfig.overrides.length) {
|
152
|
-
json.overrides = [
|
153
|
-
...json.overrides,
|
154
|
-
...finalConvertedRootESLintConfig.overrides,
|
155
|
-
];
|
156
|
-
}
|
157
|
-
else {
|
158
|
-
json.overrides.push(Object.assign({ files: ['*.ts'] }, finalConvertedRootESLintConfig));
|
159
|
-
}
|
160
|
-
json.overrides = (0, utils_1.deduplicateOverrides)(json.overrides);
|
161
|
-
/**
|
162
|
-
* Remove the parserOptions.project config if it is not required for the final config,
|
163
|
-
* so that lint runs can be as fast and efficient as possible.
|
164
|
-
*/
|
165
|
-
return (0, rules_requiring_type_checking_1.removeParserOptionsProjectIfNotRequired)(json);
|
166
|
-
});
|
167
|
-
/**
|
168
|
-
* Through converting the config we may encounter TSLint rules whose closest
|
169
|
-
* equivalent in the ESLint ecosystem comes from a separate package/plugin.
|
170
|
-
*
|
171
|
-
* We therefore automatically install those extra packages for the user and
|
172
|
-
* explain that that's what we are doing.
|
173
|
-
*/
|
174
|
-
return (0, utils_1.ensureESLintPluginsAreInstalled)(this.host, convertedRoot.ensureESLintPlugins);
|
175
|
-
});
|
176
|
-
}
|
177
|
-
convertProjectConfig(applyPackageSpecificModifications) {
|
178
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
179
|
-
if (this.ignoreExistingTslintConfig || !this.projectTSLintJson) {
|
180
|
-
return Promise.resolve(() => { });
|
181
|
-
}
|
182
|
-
const convertedProjectConfig = yield (0, utils_1.convertTSLintConfig)(this.projectTSLintJson, this.projectTSLintJsonPath,
|
183
|
-
// Strip the extends on workspace tslint.json (see this util's docs for more info)
|
184
|
-
[`${(0, devkit_1.offsetFromRoot)(this.projectConfig.root)}tslint.json`]);
|
185
|
-
const convertedProjectESLintConfig = convertedProjectConfig.convertedESLintConfig;
|
186
|
-
/**
|
187
|
-
* Already set by Nx's shareable configs
|
188
|
-
*/
|
189
|
-
delete convertedProjectESLintConfig.env;
|
190
|
-
delete convertedProjectESLintConfig.parser;
|
191
|
-
delete convertedProjectESLintConfig.parserOptions;
|
192
|
-
if (convertedProjectESLintConfig.plugins) {
|
193
|
-
convertedProjectESLintConfig.plugins =
|
194
|
-
convertedProjectESLintConfig.plugins.filter((p) => p !== '@typescript-eslint/tslint');
|
195
|
-
}
|
196
|
-
const projectESLintConfigPath = (0, devkit_1.joinPathFragments)(this.projectConfig.root, '.eslintrc.json');
|
197
|
-
/**
|
198
|
-
* Apply updates to the new .eslintrc.json file for the project
|
199
|
-
*/
|
200
|
-
(0, devkit_1.updateJson)(this.host, projectESLintConfigPath, (json) => {
|
201
|
-
var _a;
|
202
|
-
if (typeof json.extends === 'string') {
|
203
|
-
json.extends = [json.extends];
|
204
|
-
}
|
205
|
-
// Custom extends from conversion
|
206
|
-
if (Array.isArray(convertedProjectESLintConfig.extends) &&
|
207
|
-
convertedProjectESLintConfig.extends.length) {
|
208
|
-
// Ignore any tslint-to-eslint-config default extends that do not apply to Nx
|
209
|
-
const applicableExtends = convertedProjectESLintConfig.extends.filter((ext) => !ext.startsWith('prettier'));
|
210
|
-
if (applicableExtends.length) {
|
211
|
-
json.extends = [...json.extends, ...applicableExtends];
|
212
|
-
}
|
213
|
-
}
|
214
|
-
// Custom plugins from conversion
|
215
|
-
if (Array.isArray(convertedProjectESLintConfig.plugins) &&
|
216
|
-
convertedProjectESLintConfig.plugins.length) {
|
217
|
-
json.plugins = [
|
218
|
-
...((_a = json.plugins) !== null && _a !== void 0 ? _a : []),
|
219
|
-
...convertedProjectESLintConfig.plugins,
|
220
|
-
];
|
221
|
-
}
|
222
|
-
/**
|
223
|
-
* Custom rules
|
224
|
-
*
|
225
|
-
* By default, tslint-to-eslint-config will try and apply any rules without known converters
|
226
|
-
* by using eslint-plugin-tslint. We instead explicitly warn the user about this missing converter,
|
227
|
-
* and therefore at this point we strip out any rules which start with @typescript-eslint/tslint/config
|
228
|
-
*/
|
229
|
-
json.rules || (json.rules = {});
|
230
|
-
if (convertedProjectESLintConfig.rules &&
|
231
|
-
Object.keys(convertedProjectESLintConfig.rules).length) {
|
232
|
-
for (const [ruleName, ruleConfig] of Object.entries(convertedProjectESLintConfig.rules)) {
|
233
|
-
if (!ruleName.startsWith('@typescript-eslint/tslint/config')) {
|
234
|
-
// Prioritize the converted rules over any base implementations from the original Nx generator
|
235
|
-
json.rules[ruleName] = ruleConfig;
|
236
|
-
}
|
237
|
-
}
|
238
|
-
}
|
239
|
-
/**
|
240
|
-
* Apply any package-specific modifications to the converted config before
|
241
|
-
* updating the config file.
|
242
|
-
*/
|
243
|
-
const finalJson = applyPackageSpecificModifications(json);
|
244
|
-
/**
|
245
|
-
* Remove the parserOptions.project config if it is not required for the final config,
|
246
|
-
* so that lint runs can be as fast and efficient as possible.
|
247
|
-
*/
|
248
|
-
return (0, rules_requiring_type_checking_1.removeParserOptionsProjectIfNotRequired)(finalJson);
|
249
|
-
});
|
250
|
-
/**
|
251
|
-
* Convert any instances of comment-based configuration in the source files
|
252
|
-
* of the project
|
253
|
-
*/
|
254
|
-
(0, convert_to_eslint_config_1.convertTSLintDisableCommentsForProject)(this.host, this.projectName);
|
255
|
-
/**
|
256
|
-
* Through converting the config we may encounter TSLint rules whose closest
|
257
|
-
* equivalent in the ESLint ecosystem comes from a separate package/plugin.
|
258
|
-
*
|
259
|
-
* We therefore automatically install those extra packages for the user and
|
260
|
-
* explain that that's what we are doing.
|
261
|
-
*/
|
262
|
-
return (0, utils_1.ensureESLintPluginsAreInstalled)(this.host, convertedProjectConfig.ensureESLintPlugins);
|
263
|
-
});
|
264
|
-
}
|
265
|
-
removeProjectTSLintFile() {
|
266
|
-
this.host.delete((0, devkit_1.joinPathFragments)(this.projectConfig.root, 'tslint.json'));
|
267
|
-
}
|
268
|
-
isTSLintUsedInWorkspace() {
|
269
|
-
const projects = (0, devkit_1.getProjects)(this.host);
|
270
|
-
for (const [, projectConfig] of projects.entries()) {
|
271
|
-
for (const [, targetConfig] of Object.entries(projectConfig.targets)) {
|
272
|
-
if (targetConfig.executor === '@angular-devkit/build-angular:tslint') {
|
273
|
-
// Workspace is still using TSLint, exit early
|
274
|
-
return true;
|
275
|
-
}
|
276
|
-
}
|
277
|
-
}
|
278
|
-
// If we got this far the user has no remaining TSLint usage
|
279
|
-
return false;
|
280
|
-
}
|
281
|
-
removeTSLintFromWorkspace() {
|
282
|
-
devkit_1.logger.info(`No TSLint usage will remain in the workspace, removing TSLint...`);
|
283
|
-
/**
|
284
|
-
* Delete the root tslint.json
|
285
|
-
*/
|
286
|
-
this.host.delete(this.rootTSLintJsonPath);
|
287
|
-
/**
|
288
|
-
* Prepare the package.json and the uninstall task
|
289
|
-
*/
|
290
|
-
const uninstallTask = (0, devkit_1.removeDependenciesFromPackageJson)(this.host, [], ['tslint', 'codelyzer']);
|
291
|
-
/**
|
292
|
-
* Update global linter configuration defaults in project configuration
|
293
|
-
*/
|
294
|
-
const nxJson = (0, devkit_1.readNxJson)(this.host);
|
295
|
-
this.cleanUpGeneratorsConfig(nxJson);
|
296
|
-
(0, devkit_1.updateNxJson)(this.host, nxJson);
|
297
|
-
/**
|
298
|
-
* Update project-level linter configuration defaults in project configuration
|
299
|
-
*/
|
300
|
-
const projects = (0, devkit_1.getProjects)(this.host);
|
301
|
-
for (const [projectName, { generators }] of projects.entries()) {
|
302
|
-
if (!generators || Object.keys(generators).length === 0) {
|
303
|
-
continue;
|
304
|
-
}
|
305
|
-
const project = (0, devkit_1.readProjectConfiguration)(this.host, projectName);
|
306
|
-
this.cleanUpGeneratorsConfig(project);
|
307
|
-
(0, devkit_1.updateProjectConfiguration)(this.host, projectName, project);
|
308
|
-
}
|
309
|
-
return uninstallTask;
|
310
|
-
}
|
311
|
-
cleanUpGeneratorsConfig(parentConfig) {
|
312
|
-
if (!parentConfig.generators ||
|
313
|
-
Object.keys(parentConfig.generators).length === 0) {
|
314
|
-
return;
|
315
|
-
}
|
316
|
-
for (const [collectionName, maybeGeneratorConfig] of Object.entries(parentConfig.generators)) {
|
317
|
-
// Shorthand syntax is possible
|
318
|
-
if (collectionName.includes(':')) {
|
319
|
-
const generatorConfig = maybeGeneratorConfig;
|
320
|
-
for (const optionName of Object.keys(generatorConfig)) {
|
321
|
-
if (optionName === 'linter') {
|
322
|
-
// Default is eslint, so in all cases we can just remove the config altogether
|
323
|
-
delete generatorConfig[optionName];
|
324
|
-
}
|
325
|
-
}
|
326
|
-
// If removing linter leaves no other options in the config, remove the config as well
|
327
|
-
if (Object.keys(generatorConfig).length === 0) {
|
328
|
-
delete parentConfig.generators[collectionName];
|
329
|
-
}
|
330
|
-
}
|
331
|
-
else {
|
332
|
-
// Not shorthand syntax, so next level down is generator name -> config mapping
|
333
|
-
const collectionConfig = maybeGeneratorConfig;
|
334
|
-
for (const [generatorName, generatorConfig] of Object.entries(collectionConfig)) {
|
335
|
-
if (generatorName === 'convert-tslint-to-eslint') {
|
336
|
-
// No longer relevant because of TSLint is being removed the conversion process must be complete
|
337
|
-
delete collectionConfig[generatorName];
|
338
|
-
continue;
|
339
|
-
}
|
340
|
-
for (const optionName of Object.keys(generatorConfig)) {
|
341
|
-
if (optionName === 'linter') {
|
342
|
-
// Default is eslint, so in all cases we can just remove the config altogether
|
343
|
-
delete generatorConfig[optionName];
|
344
|
-
}
|
345
|
-
}
|
346
|
-
// If removing linter leaves no other options in the config, remove the generator config as well
|
347
|
-
if (Object.keys(generatorConfig).length === 0) {
|
348
|
-
delete collectionConfig[generatorName];
|
349
|
-
}
|
350
|
-
}
|
351
|
-
// If removing the generator leaves no other generators in the config, remove the config as well
|
352
|
-
if (parentConfig.generators[collectionName] &&
|
353
|
-
Object.keys(parentConfig.generators[collectionName]).length === 0) {
|
354
|
-
delete parentConfig.generators[collectionName];
|
355
|
-
}
|
356
|
-
}
|
357
|
-
}
|
358
|
-
// If removing the linter defaults leaves absolutely no generators configuration remaining, remove it
|
359
|
-
if (Object.keys(parentConfig.generators).length === 0) {
|
360
|
-
delete parentConfig.generators;
|
361
|
-
}
|
362
|
-
}
|
363
|
-
/**
|
364
|
-
* If the project which is the subject of the ProjectConverter instance is an application,
|
365
|
-
* figure out its associated e2e project's name.
|
366
|
-
*/
|
367
|
-
getE2EProjectName() {
|
368
|
-
if (this.projectConfig.projectType !== 'application') {
|
369
|
-
return null;
|
370
|
-
}
|
371
|
-
let e2eProjectName = null;
|
372
|
-
const projects = (0, devkit_1.getProjects)(this.host);
|
373
|
-
for (const [projectName, projectConfig] of projects.entries()) {
|
374
|
-
for (const [, targetConfig] of Object.entries(projectConfig.targets)) {
|
375
|
-
if (targetConfig.executor === '@nrwl/cypress:cypress') {
|
376
|
-
if (targetConfig.options.devServerTarget === `${this.projectName}:serve`) {
|
377
|
-
e2eProjectName = projectName;
|
378
|
-
devkit_1.logger.info(`Found e2e project for "${this.projectName}" called "${e2eProjectName}", converting that project as well...`);
|
379
|
-
}
|
380
|
-
}
|
381
|
-
}
|
382
|
-
}
|
383
|
-
return e2eProjectName;
|
384
|
-
}
|
385
|
-
setDefaults(collectionName, defaults) {
|
386
|
-
var _a;
|
387
|
-
const nxJson = (0, devkit_1.readNxJson)(this.host);
|
388
|
-
nxJson.generators || (nxJson.generators = {});
|
389
|
-
(_a = nxJson.generators)[collectionName] || (_a[collectionName] = {});
|
390
|
-
const prev = nxJson.generators[collectionName];
|
391
|
-
nxJson.generators = Object.assign(Object.assign({}, nxJson.generators), { [collectionName]: Object.assign(Object.assign({}, prev), { 'convert-tslint-to-eslint': Object.assign(Object.assign({}, prev['convert-tslint-to-eslint']), defaults) }) });
|
392
|
-
(0, devkit_1.updateNxJson)(this.host, nxJson);
|
393
|
-
}
|
394
|
-
}
|
395
|
-
exports.ProjectConverter = ProjectConverter;
|
396
|
-
//# sourceMappingURL=project-converter.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"project-converter.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/utils/convert-tslint-to-eslint/project-converter.ts"],"names":[],"mappings":"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"}
|
@@ -1,10 +0,0 @@
|
|
1
|
-
import type { Tree, GeneratorCallback } from '@nrwl/devkit';
|
2
|
-
import type { Linter } from 'eslint';
|
3
|
-
import type { TSLintRuleOptions } from 'tslint-to-eslint-config';
|
4
|
-
export declare function ensureESLintPluginsAreInstalled(host: Tree, eslintPluginsToBeInstalled: string[]): GeneratorCallback;
|
5
|
-
export declare function convertTSLintConfig(rawTSLintJson: any, tslintJsonPath: string, ignoreExtendsVals: string[]): Promise<{
|
6
|
-
convertedESLintConfig: Linter.Config<Linter.RulesRecord, Linter.RulesRecord>;
|
7
|
-
unconvertedTSLintRules: TSLintRuleOptions[];
|
8
|
-
ensureESLintPlugins: string[];
|
9
|
-
}>;
|
10
|
-
export declare function deduplicateOverrides(overrides?: Linter.Config['overrides']): any[];
|
@@ -1,91 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.deduplicateOverrides = exports.convertTSLintConfig = exports.ensureESLintPluginsAreInstalled = void 0;
|
4
|
-
const tslib_1 = require("tslib");
|
5
|
-
const devkit_1 = require("@nrwl/devkit");
|
6
|
-
const convert_nx_enforce_module_boundaries_rule_1 = require("./convert-nx-enforce-module-boundaries-rule");
|
7
|
-
const convert_to_eslint_config_1 = require("./convert-to-eslint-config");
|
8
|
-
function ensureESLintPluginsAreInstalled(host, eslintPluginsToBeInstalled) {
|
9
|
-
if (!(eslintPluginsToBeInstalled === null || eslintPluginsToBeInstalled === void 0 ? void 0 : eslintPluginsToBeInstalled.length)) {
|
10
|
-
return () => undefined;
|
11
|
-
}
|
12
|
-
const additionalDevDependencies = {};
|
13
|
-
for (const pluginName of eslintPluginsToBeInstalled) {
|
14
|
-
additionalDevDependencies[pluginName] = 'latest';
|
15
|
-
}
|
16
|
-
devkit_1.logger.info('\nINFO: To most closely match your tslint.json, we will ensure the `latest` version of the following eslint plugin(s) are installed:');
|
17
|
-
devkit_1.logger.info('\n - ' + eslintPluginsToBeInstalled.join('\n - '));
|
18
|
-
devkit_1.logger.info('\nPlease note, you may later wish to pin these to a specific version number in your package.json, rather than leaving it open to `latest`.\n');
|
19
|
-
return (0, devkit_1.addDependenciesToPackageJson)(host, {}, additionalDevDependencies);
|
20
|
-
}
|
21
|
-
exports.ensureESLintPluginsAreInstalled = ensureESLintPluginsAreInstalled;
|
22
|
-
/**
|
23
|
-
* We don't want the user to depend on the TSLint fallback plugin, we will instead
|
24
|
-
* explicitly inform them of the rules that could not be converted automatically and
|
25
|
-
* advise them on what to do next.
|
26
|
-
*/
|
27
|
-
function warnInCaseOfUnconvertedRules(tslintConfigPath, unconvertedTSLintRules) {
|
28
|
-
const unconvertedTSLintRuleNames = unconvertedTSLintRules
|
29
|
-
.filter(
|
30
|
-
// Ignore formatting related rules, they are handled by Nx format/prettier
|
31
|
-
(unconverted) => !['import-spacing', 'whitespace', 'typedef'].includes(unconverted.ruleName))
|
32
|
-
.map((unconverted) => unconverted.ruleName);
|
33
|
-
if (unconvertedTSLintRuleNames.length > 0) {
|
34
|
-
devkit_1.logger.warn(`\nWARNING: Within "${tslintConfigPath}", the following ${unconvertedTSLintRuleNames.length} rule(s) did not have known converters in https://github.com/typescript-eslint/tslint-to-eslint-config`);
|
35
|
-
devkit_1.logger.warn('\n - ' + unconvertedTSLintRuleNames.join('\n - '));
|
36
|
-
devkit_1.logger.warn('\nYou will need to decide on how to handle the above manually, but everything else has been handled for you automatically.\n');
|
37
|
-
}
|
38
|
-
}
|
39
|
-
function convertTSLintConfig(rawTSLintJson, tslintJsonPath, ignoreExtendsVals) {
|
40
|
-
var _a;
|
41
|
-
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
42
|
-
const convertedProject = yield (0, convert_to_eslint_config_1.convertToESLintConfig)(tslintJsonPath, rawTSLintJson, ignoreExtendsVals);
|
43
|
-
(_a = convertedProject.convertedESLintConfig).rules || (_a.rules = {});
|
44
|
-
/**
|
45
|
-
* Apply the custom converter for the nx-module-boundaries rule if applicable
|
46
|
-
*/
|
47
|
-
const convertedNxRule = (0, convert_nx_enforce_module_boundaries_rule_1.convertTslintNxRuleToEslintNxRule)(rawTSLintJson);
|
48
|
-
if (convertedNxRule) {
|
49
|
-
convertedProject.convertedESLintConfig.rules[convertedNxRule.ruleName] =
|
50
|
-
convertedNxRule.ruleConfig;
|
51
|
-
}
|
52
|
-
// Remove the `@typescript-eslint/tslint/config` rule
|
53
|
-
if (convertedProject.convertedESLintConfig.rules['@typescript-eslint/tslint/config']) {
|
54
|
-
delete convertedProject.convertedESLintConfig.rules['@typescript-eslint/tslint/config'];
|
55
|
-
}
|
56
|
-
warnInCaseOfUnconvertedRules(tslintJsonPath, convertedProject.unconvertedTSLintRules);
|
57
|
-
return convertedProject;
|
58
|
-
});
|
59
|
-
}
|
60
|
-
exports.convertTSLintConfig = convertTSLintConfig;
|
61
|
-
function deduplicateOverrides(overrides = []) {
|
62
|
-
const map = new Map();
|
63
|
-
for (const o of overrides) {
|
64
|
-
const mapKey = typeof o.files === 'string' ? o.files : o.files.join(',');
|
65
|
-
const existing = map.get(mapKey);
|
66
|
-
if (existing) {
|
67
|
-
existing.add(o);
|
68
|
-
map.set(mapKey, existing);
|
69
|
-
continue;
|
70
|
-
}
|
71
|
-
const set = new Set();
|
72
|
-
set.add(o);
|
73
|
-
map.set(mapKey, set);
|
74
|
-
}
|
75
|
-
let dedupedOverrides = [];
|
76
|
-
for (const [, overrides] of map.entries()) {
|
77
|
-
const overridesArr = Array.from(overrides);
|
78
|
-
if (overridesArr.length === 1) {
|
79
|
-
dedupedOverrides = [...dedupedOverrides, ...overridesArr];
|
80
|
-
continue;
|
81
|
-
}
|
82
|
-
let mergedOverride = {};
|
83
|
-
for (const o of overridesArr) {
|
84
|
-
mergedOverride = Object.assign(Object.assign({}, mergedOverride), o);
|
85
|
-
}
|
86
|
-
dedupedOverrides.push(mergedOverride);
|
87
|
-
}
|
88
|
-
return dedupedOverrides;
|
89
|
-
}
|
90
|
-
exports.deduplicateOverrides = deduplicateOverrides;
|
91
|
-
//# sourceMappingURL=utils.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/utils/convert-tslint-to-eslint/utils.ts"],"names":[],"mappings":"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"}
|