@nrwl/linter 15.3.0-beta.2 → 15.3.0-beta.3
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/CHANGELOG.md +1 -1
- package/package.json +6 -7
- package/src/generators/init/init.d.ts +0 -1
- package/src/generators/init/init.js +72 -2
- package/src/generators/init/init.js.map +1 -1
- package/src/generators/lint-project/lint-project.d.ts +0 -2
- package/src/generators/lint-project/lint-project.js +2 -62
- package/src/generators/lint-project/lint-project.js.map +1 -1
- package/src/generators/utils/eslint-file.d.ts +2 -2
- package/src/generators/utils/eslint-file.js +2 -4
- package/src/generators/utils/eslint-file.js.map +1 -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 -84
- package/src/generators/init/init-migration.js.map +0 -1
package/CHANGELOG.md
CHANGED
@@ -3,6 +3,6 @@
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
5
5
|
|
6
|
-
# [15.3.0-beta.
|
6
|
+
# [15.3.0-beta.3](https://github.com/nrwl/nx/compare/15.2.0...15.3.0-beta.3) (2022-11-28)
|
7
7
|
|
8
8
|
**Note:** Version bump only for package @nrwl/linter
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@nrwl/linter",
|
3
|
-
"version": "15.3.0-beta.
|
3
|
+
"version": "15.3.0-beta.3",
|
4
4
|
"private": false,
|
5
5
|
"description": "The Linter plugin for Nx contains executors, generators and utilities used for linting JavaScript/TypeScript projects within an Nx workspace.",
|
6
6
|
"repository": {
|
@@ -30,14 +30,13 @@
|
|
30
30
|
"builders": "./executors.json",
|
31
31
|
"schematics": "./generators.json",
|
32
32
|
"peerDependencies": {
|
33
|
-
"eslint": "^8.0.0"
|
34
|
-
"js-yaml": "4.1.0"
|
33
|
+
"eslint": "^8.0.0"
|
35
34
|
},
|
36
35
|
"dependencies": {
|
37
|
-
"@nrwl/devkit": "15.3.0-beta.
|
38
|
-
"@nrwl/jest": "15.3.0-beta.
|
36
|
+
"@nrwl/devkit": "15.3.0-beta.3",
|
37
|
+
"@nrwl/jest": "15.3.0-beta.3",
|
39
38
|
"@phenomnomnominal/tsquery": "4.1.1",
|
40
|
-
"nx": "15.3.0-beta.
|
39
|
+
"nx": "15.3.0-beta.3",
|
41
40
|
"tmp": "~0.2.1",
|
42
41
|
"tslib": "^2.3.0"
|
43
42
|
},
|
@@ -50,5 +49,5 @@
|
|
50
49
|
"access": "public"
|
51
50
|
},
|
52
51
|
"types": "./index.d.ts",
|
53
|
-
"gitHead": "
|
52
|
+
"gitHead": "61f6e2d7287beaac1993e32f3fe18703d2c63e41"
|
54
53
|
}
|
@@ -4,7 +4,77 @@ exports.lintInitGenerator = void 0;
|
|
4
4
|
const devkit_1 = require("@nrwl/devkit");
|
5
5
|
const versions_1 = require("../../utils/versions");
|
6
6
|
const eslint_file_1 = require("../utils/eslint-file");
|
7
|
-
const
|
7
|
+
const getGlobalEsLintConfiguration = (unitTestRunner) => {
|
8
|
+
const config = {
|
9
|
+
root: true,
|
10
|
+
ignorePatterns: ['**/*'],
|
11
|
+
plugins: ['@nrwl/nx'],
|
12
|
+
/**
|
13
|
+
* We leverage ESLint's "overrides" capability so that we can set up a root config which will support
|
14
|
+
* all permutations of Nx workspaces across all frameworks, libraries and tools.
|
15
|
+
*
|
16
|
+
* The key point is that we need entirely different ESLint config to apply to different types of files,
|
17
|
+
* but we still want to share common config where possible.
|
18
|
+
*/
|
19
|
+
overrides: [
|
20
|
+
/**
|
21
|
+
* This configuration is intended to apply to all "source code" (but not
|
22
|
+
* markup like HTML, or other custom file types like GraphQL)
|
23
|
+
*/
|
24
|
+
{
|
25
|
+
files: ['*.ts', '*.tsx', '*.js', '*.jsx'],
|
26
|
+
rules: {
|
27
|
+
'@nrwl/nx/enforce-module-boundaries': [
|
28
|
+
'error',
|
29
|
+
{
|
30
|
+
enforceBuildableLibDependency: true,
|
31
|
+
allow: [],
|
32
|
+
depConstraints: [
|
33
|
+
{ sourceTag: '*', onlyDependOnLibsWithTags: ['*'] },
|
34
|
+
],
|
35
|
+
},
|
36
|
+
],
|
37
|
+
},
|
38
|
+
},
|
39
|
+
/**
|
40
|
+
* This configuration is intended to apply to all TypeScript source files.
|
41
|
+
* See the eslint-plugin-nx package for what is in the referenced shareable config.
|
42
|
+
*/
|
43
|
+
{
|
44
|
+
files: ['*.ts', '*.tsx'],
|
45
|
+
extends: ['plugin:@nrwl/nx/typescript'],
|
46
|
+
/**
|
47
|
+
* Having an empty rules object present makes it more obvious to the user where they would
|
48
|
+
* extend things from if they needed to
|
49
|
+
*/
|
50
|
+
rules: {},
|
51
|
+
},
|
52
|
+
/**
|
53
|
+
* This configuration is intended to apply to all JavaScript source files.
|
54
|
+
* See the eslint-plugin-nx package for what is in the referenced shareable config.
|
55
|
+
*/
|
56
|
+
{
|
57
|
+
files: ['*.js', '*.jsx'],
|
58
|
+
extends: ['plugin:@nrwl/nx/javascript'],
|
59
|
+
/**
|
60
|
+
* Having an empty rules object present makes it more obvious to the user where they would
|
61
|
+
* extend things from if they needed to
|
62
|
+
*/
|
63
|
+
rules: {},
|
64
|
+
},
|
65
|
+
],
|
66
|
+
};
|
67
|
+
if (unitTestRunner === 'jest') {
|
68
|
+
config.overrides.push({
|
69
|
+
files: ['*.spec.ts', '*.spec.tsx', '*.spec.js', '*.spec.jsx'],
|
70
|
+
env: {
|
71
|
+
jest: true,
|
72
|
+
},
|
73
|
+
rules: {},
|
74
|
+
});
|
75
|
+
}
|
76
|
+
return config;
|
77
|
+
};
|
8
78
|
function addTargetDefaults(tree) {
|
9
79
|
var _a, _b, _c, _d;
|
10
80
|
var _e, _f;
|
@@ -31,7 +101,7 @@ function initEsLint(tree, options) {
|
|
31
101
|
if (!options.skipPackageJson) {
|
32
102
|
(0, devkit_1.removeDependenciesFromPackageJson)(tree, ['@nrwl/linter'], []);
|
33
103
|
}
|
34
|
-
(0, devkit_1.writeJson)(tree, '.eslintrc.json',
|
104
|
+
(0, devkit_1.writeJson)(tree, '.eslintrc.json', getGlobalEsLintConfiguration(options.unitTestRunner));
|
35
105
|
addTargetDefaults(tree);
|
36
106
|
if (tree.exists('.vscode/extensions.json')) {
|
37
107
|
(0, devkit_1.updateJson)(tree, '.vscode/extensions.json', (json) => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/init/init.ts"],"names":[],"mappings":";;;AACA,yCAOsB;AACtB,mDAK8B;AAG9B,sDAAsD;
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/init/init.ts"],"names":[],"mappings":"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"}
|
@@ -9,8 +9,6 @@ interface LintProjectOptions {
|
|
9
9
|
setParserOptionsProject?: boolean;
|
10
10
|
skipPackageJson?: boolean;
|
11
11
|
unitTestRunner?: string;
|
12
|
-
rootProject?: boolean;
|
13
12
|
}
|
14
|
-
export declare function mapLintPattern(projectRoot: string, extension: string, rootProject?: boolean): string;
|
15
13
|
export declare function lintProjectGenerator(tree: Tree, options: LintProjectOptions): Promise<import("@nrwl/devkit").GeneratorCallback>;
|
16
14
|
export {};
|
@@ -1,13 +1,11 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.lintProjectGenerator =
|
3
|
+
exports.lintProjectGenerator = void 0;
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const devkit_1 = require("@nrwl/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 init_migration_1 = require("../init/init-migration");
|
10
|
-
const project_configuration_1 = require("nx/src/generators/utils/project-configuration");
|
11
9
|
function createEsLintConfiguration(tree, projectConfig, setParserOptionsProject) {
|
12
10
|
const eslintConfig = (0, eslint_file_1.findEslintFile)(tree);
|
13
11
|
(0, devkit_1.writeJson)(tree, (0, path_1.join)(projectConfig.root, `.eslintrc.json`), {
|
@@ -54,18 +52,12 @@ function createEsLintConfiguration(tree, projectConfig, setParserOptionsProject)
|
|
54
52
|
],
|
55
53
|
});
|
56
54
|
}
|
57
|
-
function mapLintPattern(projectRoot, extension, rootProject) {
|
58
|
-
const infix = rootProject ? 'src/' : '';
|
59
|
-
return `${projectRoot}/${infix}**/*.${extension}`;
|
60
|
-
}
|
61
|
-
exports.mapLintPattern = mapLintPattern;
|
62
55
|
function lintProjectGenerator(tree, options) {
|
63
56
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
64
57
|
const installTask = (0, init_1.lintInitGenerator)(tree, {
|
65
58
|
linter: options.linter,
|
66
59
|
unitTestRunner: options.unitTestRunner,
|
67
60
|
skipPackageJson: options.skipPackageJson,
|
68
|
-
rootProject: options.rootProject,
|
69
61
|
});
|
70
62
|
const projectConfig = (0, devkit_1.readProjectConfiguration)(tree, options.project);
|
71
63
|
projectConfig.targets['lint'] = {
|
@@ -75,28 +67,7 @@ function lintProjectGenerator(tree, options) {
|
|
75
67
|
lintFilePatterns: options.eslintFilePatterns,
|
76
68
|
},
|
77
69
|
};
|
78
|
-
|
79
|
-
// companion e2e app so we should check if migration to
|
80
|
-
// monorepo style is needed
|
81
|
-
if (!options.rootProject) {
|
82
|
-
const projects = (0, project_configuration_1.readWorkspace)(tree).projects;
|
83
|
-
if (isMigrationToMonorepoNeeded(projects, tree)) {
|
84
|
-
// we only migrate project configurations that have been created
|
85
|
-
const filteredProjects = [];
|
86
|
-
Object.entries(projects).forEach(([name, project]) => {
|
87
|
-
if (name !== options.project) {
|
88
|
-
filteredProjects.push(project);
|
89
|
-
}
|
90
|
-
});
|
91
|
-
(0, init_migration_1.migrateConfigToMonorepoStyle)(filteredProjects, tree, options.unitTestRunner);
|
92
|
-
}
|
93
|
-
}
|
94
|
-
// our root `.eslintrc` is already the project config, so we should not override it
|
95
|
-
// additionally, the companion e2e app would have `rootProject: true`
|
96
|
-
// so we need to check for the root path as well
|
97
|
-
if (!options.rootProject || projectConfig.root !== '.') {
|
98
|
-
createEsLintConfiguration(tree, projectConfig, options.setParserOptionsProject);
|
99
|
-
}
|
70
|
+
createEsLintConfiguration(tree, projectConfig, options.setParserOptionsProject);
|
100
71
|
(0, devkit_1.updateProjectConfiguration)(tree, options.project, projectConfig);
|
101
72
|
if (!options.skipFormat) {
|
102
73
|
yield (0, devkit_1.formatFiles)(tree);
|
@@ -105,35 +76,4 @@ function lintProjectGenerator(tree, options) {
|
|
105
76
|
});
|
106
77
|
}
|
107
78
|
exports.lintProjectGenerator = lintProjectGenerator;
|
108
|
-
/**
|
109
|
-
* Detect based on the state of lint target configuration of the root project
|
110
|
-
* if we should migrate eslint configs to monorepo style
|
111
|
-
*
|
112
|
-
* @param tree
|
113
|
-
* @returns
|
114
|
-
*/
|
115
|
-
function isMigrationToMonorepoNeeded(projects, tree) {
|
116
|
-
const configs = Object.values(projects);
|
117
|
-
if (configs.length === 1) {
|
118
|
-
return false;
|
119
|
-
}
|
120
|
-
// get root project
|
121
|
-
const rootProject = configs.find((p) => p.root === '.');
|
122
|
-
if (!rootProject || !rootProject.targets) {
|
123
|
-
return false;
|
124
|
-
}
|
125
|
-
// find if root project has lint target
|
126
|
-
const lintTarget = (0, init_migration_1.findLintTarget)(rootProject);
|
127
|
-
if (!lintTarget) {
|
128
|
-
return false;
|
129
|
-
}
|
130
|
-
// if there is no override for `eslintConfig` we should migrate
|
131
|
-
if (!lintTarget.options.eslintConfig) {
|
132
|
-
return true;
|
133
|
-
}
|
134
|
-
// check if target has `eslintConfig` override and if it's not pointing to the source .eslintrc
|
135
|
-
const rootEslintrc = (0, eslint_file_1.findEslintFile)(tree);
|
136
|
-
return (lintTarget.options.eslintConfig === rootEslintrc ||
|
137
|
-
lintTarget.options.eslintConfig === `./${rootEslintrc}`);
|
138
|
-
}
|
139
79
|
//# sourceMappingURL=lint-project.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"lint-project.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/lint-project/lint-project.ts"],"names":[],"mappings":";;;;AACA,yCAMsB;AAGtB,sDAAsD;AACtD,+BAA4B;AAC5B,uCAAiD;
|
1
|
+
{"version":3,"file":"lint-project.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/lint-project/lint-project.ts"],"names":[],"mappings":";;;;AACA,yCAMsB;AAGtB,sDAAsD;AACtD,+BAA4B;AAC5B,uCAAiD;AAajD,SAAS,yBAAyB,CAChC,IAAU,EACV,aAAmC,EACnC,uBAAgC;IAEhC,MAAM,YAAY,GAAG,IAAA,4BAAc,EAAC,IAAI,CAAC,CAAC;IAC1C,IAAA,kBAAS,EAAC,IAAI,EAAE,IAAA,WAAI,EAAC,aAAa,CAAC,IAAI,EAAE,gBAAgB,CAAC,EAAE;QAC1D,OAAO,EAAE,YAAY;YACnB,CAAC,CAAC,CAAC,GAAG,IAAA,uBAAc,EAAC,aAAa,CAAC,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC;YAC1D,CAAC,CAAC,SAAS;QACb,8EAA8E;QAC9E,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,SAAS,EAAE;YACT;gBACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;gBACzC;;;;;;;;;;;;mBAYG;gBACH,aAAa,EAAE,CAAC,uBAAuB;oBACrC,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC;wBACE,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,mBAAmB,CAAC;qBACpD;gBACL;;;mBAGG;gBACH,KAAK,EAAE,EAAE;aACV;YACD;gBACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;gBACxB,KAAK,EAAE,EAAE;aACV;YACD;gBACE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;gBACxB,KAAK,EAAE,EAAE;aACV;SACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAsB,oBAAoB,CACxC,IAAU,EACV,OAA2B;;QAE3B,MAAM,WAAW,GAAG,IAAA,wBAAiB,EAAC,IAAI,EAAE;YAC1C,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC,CAAC;QACH,MAAM,aAAa,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG;YAC9B,QAAQ,EAAE,qBAAqB;YAC/B,OAAO,EAAE,CAAC,sBAAsB,CAAC;YACjC,OAAO,EAAE;gBACP,gBAAgB,EAAE,OAAO,CAAC,kBAAkB;aAC7C;SACF,CAAC;QACF,yBAAyB,CACvB,IAAI,EACJ,aAAa,EACb,OAAO,CAAC,uBAAuB,CAChC,CAAC;QAEF,IAAA,mCAA0B,EAAC,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAEjE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;YACvB,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;SACzB;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;CAAA;AA/BD,oDA+BC"}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
import { Tree } from '@nrwl/devkit';
|
1
|
+
import type { Tree } from '@nrwl/devkit';
|
2
2
|
export declare const eslintConfigFileWhitelist: string[];
|
3
|
-
export declare function findEslintFile(tree: Tree
|
3
|
+
export declare function findEslintFile(tree: Tree): string | null;
|
@@ -1,7 +1,6 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.findEslintFile = exports.eslintConfigFileWhitelist = void 0;
|
4
|
-
const devkit_1 = require("@nrwl/devkit");
|
5
4
|
exports.eslintConfigFileWhitelist = [
|
6
5
|
'.eslintrc',
|
7
6
|
'.eslintrc.js',
|
@@ -9,11 +8,10 @@ exports.eslintConfigFileWhitelist = [
|
|
9
8
|
'.eslintrc.yaml',
|
10
9
|
'.eslintrc.yml',
|
11
10
|
'.eslintrc.json',
|
12
|
-
'eslint.config.js', // new format that requires `ESLINT_USE_FLAT_CONFIG=true`
|
13
11
|
];
|
14
|
-
function findEslintFile(tree
|
12
|
+
function findEslintFile(tree) {
|
15
13
|
for (const file of exports.eslintConfigFileWhitelist) {
|
16
|
-
if (tree.exists(
|
14
|
+
if (tree.exists(file)) {
|
17
15
|
return file;
|
18
16
|
}
|
19
17
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"eslint-file.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/utils/eslint-file.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"eslint-file.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/utils/eslint-file.ts"],"names":[],"mappings":";;;AAEa,QAAA,yBAAyB,GAAG;IACvC,WAAW;IACX,cAAc;IACd,eAAe;IACf,gBAAgB;IAChB,eAAe;IACf,gBAAgB;CACjB,CAAC;AAEF,SAAgB,cAAc,CAAC,IAAU;IACvC,KAAK,MAAM,IAAI,IAAI,iCAAyB,EAAE;QAC5C,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YACrB,OAAO,IAAI,CAAC;SACb;KACF;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AARD,wCAQC"}
|
@@ -1,36 +0,0 @@
|
|
1
|
-
import { ESLint, Linter as LinterType } from 'eslint';
|
2
|
-
/**
|
3
|
-
* This configuration is intended to apply to all TypeScript source files.
|
4
|
-
* See the eslint-plugin-nx package for what is in the referenced shareable config.
|
5
|
-
*/
|
6
|
-
export declare const globalTypeScriptOverrides: {
|
7
|
-
files: string[];
|
8
|
-
extends: string[];
|
9
|
-
/**
|
10
|
-
* Having an empty rules object present makes it more obvious to the user where they would
|
11
|
-
* extend things from if they needed to
|
12
|
-
*/
|
13
|
-
rules: {};
|
14
|
-
};
|
15
|
-
/**
|
16
|
-
* This configuration is intended to apply to all JavaScript source files.
|
17
|
-
* See the eslint-plugin-nx package for what is in the referenced shareable config.
|
18
|
-
*/
|
19
|
-
export declare const globalJavaScriptOverrides: {
|
20
|
-
files: string[];
|
21
|
-
extends: string[];
|
22
|
-
/**
|
23
|
-
* Having an empty rules object present makes it more obvious to the user where they would
|
24
|
-
* extend things from if they needed to
|
25
|
-
*/
|
26
|
-
rules: {};
|
27
|
-
};
|
28
|
-
/**
|
29
|
-
* This configuration is intended to apply to all "source code" (but not
|
30
|
-
* markup like HTML, or other custom file types like GraphQL)
|
31
|
-
*/
|
32
|
-
export declare const moduleBoundariesOverride: {
|
33
|
-
files: string[];
|
34
|
-
rules: LinterType.RulesRecord;
|
35
|
-
};
|
36
|
-
export declare const getGlobalEsLintConfiguration: (unitTestRunner?: string, rootProject?: boolean) => ESLint.ConfigData<LinterType.RulesRecord>;
|
@@ -1,77 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.getGlobalEsLintConfiguration = exports.moduleBoundariesOverride = exports.globalJavaScriptOverrides = exports.globalTypeScriptOverrides = void 0;
|
4
|
-
/**
|
5
|
-
* This configuration is intended to apply to all TypeScript source files.
|
6
|
-
* See the eslint-plugin-nx package for what is in the referenced shareable config.
|
7
|
-
*/
|
8
|
-
exports.globalTypeScriptOverrides = {
|
9
|
-
files: ['*.ts', '*.tsx'],
|
10
|
-
extends: ['plugin:@nrwl/nx/typescript'],
|
11
|
-
/**
|
12
|
-
* Having an empty rules object present makes it more obvious to the user where they would
|
13
|
-
* extend things from if they needed to
|
14
|
-
*/
|
15
|
-
rules: {},
|
16
|
-
};
|
17
|
-
/**
|
18
|
-
* This configuration is intended to apply to all JavaScript source files.
|
19
|
-
* See the eslint-plugin-nx package for what is in the referenced shareable config.
|
20
|
-
*/
|
21
|
-
exports.globalJavaScriptOverrides = {
|
22
|
-
files: ['*.js', '*.jsx'],
|
23
|
-
extends: ['plugin:@nrwl/nx/javascript'],
|
24
|
-
/**
|
25
|
-
* Having an empty rules object present makes it more obvious to the user where they would
|
26
|
-
* extend things from if they needed to
|
27
|
-
*/
|
28
|
-
rules: {},
|
29
|
-
};
|
30
|
-
/**
|
31
|
-
* This configuration is intended to apply to all "source code" (but not
|
32
|
-
* markup like HTML, or other custom file types like GraphQL)
|
33
|
-
*/
|
34
|
-
exports.moduleBoundariesOverride = {
|
35
|
-
files: ['*.ts', '*.tsx', '*.js', '*.jsx'],
|
36
|
-
rules: {
|
37
|
-
'@nrwl/nx/enforce-module-boundaries': [
|
38
|
-
'error',
|
39
|
-
{
|
40
|
-
enforceBuildableLibDependency: true,
|
41
|
-
allow: [],
|
42
|
-
depConstraints: [{ sourceTag: '*', onlyDependOnLibsWithTags: ['*'] }],
|
43
|
-
},
|
44
|
-
],
|
45
|
-
},
|
46
|
-
};
|
47
|
-
const getGlobalEsLintConfiguration = (unitTestRunner, rootProject) => {
|
48
|
-
const config = {
|
49
|
-
root: true,
|
50
|
-
ignorePatterns: rootProject ? ['!**/*'] : ['**/*'],
|
51
|
-
plugins: ['@nrwl/nx'],
|
52
|
-
/**
|
53
|
-
* We leverage ESLint's "overrides" capability so that we can set up a root config which will support
|
54
|
-
* all permutations of Nx workspaces across all frameworks, libraries and tools.
|
55
|
-
*
|
56
|
-
* The key point is that we need entirely different ESLint config to apply to different types of files,
|
57
|
-
* but we still want to share common config where possible.
|
58
|
-
*/
|
59
|
-
overrides: [
|
60
|
-
...(rootProject ? [] : [exports.moduleBoundariesOverride]),
|
61
|
-
exports.globalTypeScriptOverrides,
|
62
|
-
exports.globalJavaScriptOverrides,
|
63
|
-
],
|
64
|
-
};
|
65
|
-
if (unitTestRunner === 'jest') {
|
66
|
-
config.overrides.push({
|
67
|
-
files: ['*.spec.ts', '*.spec.tsx', '*.spec.js', '*.spec.jsx'],
|
68
|
-
env: {
|
69
|
-
jest: true,
|
70
|
-
},
|
71
|
-
rules: {},
|
72
|
-
});
|
73
|
-
}
|
74
|
-
return config;
|
75
|
-
};
|
76
|
-
exports.getGlobalEsLintConfiguration = getGlobalEsLintConfiguration;
|
77
|
-
//# sourceMappingURL=global-eslint-config.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"global-eslint-config.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/init/global-eslint-config.ts"],"names":[],"mappings":";;;AAEA;;;GAGG;AACU,QAAA,yBAAyB,GAAG;IACvC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,CAAC,4BAA4B,CAAC;IACvC;;;OAGG;IACH,KAAK,EAAE,EAAE;CACV,CAAC;AAEF;;;GAGG;AACU,QAAA,yBAAyB,GAAG;IACvC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,CAAC,4BAA4B,CAAC;IACvC;;;OAGG;IACH,KAAK,EAAE,EAAE;CACV,CAAC;AAEF;;;GAGG;AACU,QAAA,wBAAwB,GAAG;IACtC,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;IACzC,KAAK,EAAE;QACL,oCAAoC,EAAE;YACpC,OAAO;YACP;gBACE,6BAA6B,EAAE,IAAI;gBACnC,KAAK,EAAE,EAAE;gBACT,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,wBAAwB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;aACtE;SACF;KACwB;CAC5B,CAAC;AAEK,MAAM,4BAA4B,GAAG,CAC1C,cAAuB,EACvB,WAAqB,EACrB,EAAE;IACF,MAAM,MAAM,GAAsB;QAChC,IAAI,EAAE,IAAI;QACV,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAClD,OAAO,EAAE,CAAC,UAAU,CAAC;QACrB;;;;;;WAMG;QACH,SAAS,EAAE;YACT,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gCAAwB,CAAC,CAAC;YAClD,iCAAyB;YACzB,iCAAyB;SAC1B;KACF,CAAC;IACF,IAAI,cAAc,KAAK,MAAM,EAAE;QAC7B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YACpB,KAAK,EAAE,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,CAAC;YAC7D,GAAG,EAAE;gBACH,IAAI,EAAE,IAAI;aACX;YACD,KAAK,EAAE,EAAE;SACV,CAAC,CAAC;KACJ;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA/BW,QAAA,4BAA4B,gCA+BvC"}
|
@@ -1,3 +0,0 @@
|
|
1
|
-
import { ProjectConfiguration, TargetConfiguration, Tree } from '@nrwl/devkit';
|
2
|
-
export declare function migrateConfigToMonorepoStyle(projects: ProjectConfiguration[], tree: Tree, unitTestRunner: string): void;
|
3
|
-
export declare function findLintTarget(project: ProjectConfiguration): TargetConfiguration;
|
@@ -1,84 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.findLintTarget = exports.migrateConfigToMonorepoStyle = void 0;
|
4
|
-
const devkit_1 = require("@nrwl/devkit");
|
5
|
-
const path_1 = require("path");
|
6
|
-
const eslint_file_1 = require("../utils/eslint-file");
|
7
|
-
const global_eslint_config_1 = require("./global-eslint-config");
|
8
|
-
const FILE_EXTENSION_REGEX = /(?<!(^|\/))(\.[^/.]+)$/;
|
9
|
-
function migrateConfigToMonorepoStyle(projects, tree, unitTestRunner) {
|
10
|
-
var _a, _b, _c;
|
11
|
-
// copy the root's .eslintrc.json to new name
|
12
|
-
const rootProject = projects.find((p) => p.root === '.');
|
13
|
-
const eslintPath = ((_c = (_b = (_a = rootProject.targets) === null || _a === void 0 ? void 0 : _a.lint) === null || _b === void 0 ? void 0 : _b.options) === null || _c === void 0 ? void 0 : _c.eslintConfig) || (0, eslint_file_1.findEslintFile)(tree);
|
14
|
-
const pathSegments = eslintPath.split(FILE_EXTENSION_REGEX).filter(Boolean);
|
15
|
-
const rootProjEslintPath = pathSegments.length > 1
|
16
|
-
? pathSegments.join(`.${rootProject.name}`)
|
17
|
-
: `.${rootProject.name}.${rootProject.name}`;
|
18
|
-
tree.write(rootProjEslintPath, tree.read(eslintPath));
|
19
|
-
// update root project's configuration
|
20
|
-
const lintTarget = findLintTarget(rootProject);
|
21
|
-
lintTarget.options.eslintConfig = rootProjEslintPath;
|
22
|
-
(0, devkit_1.updateProjectConfiguration)(tree, rootProject.name, rootProject);
|
23
|
-
// replace root eslint with default global
|
24
|
-
tree.delete(eslintPath);
|
25
|
-
(0, devkit_1.writeJson)(tree, '.eslintrc.json', (0, global_eslint_config_1.getGlobalEsLintConfiguration)(unitTestRunner));
|
26
|
-
// update extens in all projects' eslint configs
|
27
|
-
projects.forEach((project) => {
|
28
|
-
const lintTarget = findLintTarget(project);
|
29
|
-
if (lintTarget) {
|
30
|
-
const projectEslintPath = (0, devkit_1.joinPathFragments)(project.root, lintTarget.options.eslintConfig || (0, eslint_file_1.findEslintFile)(tree, project.root));
|
31
|
-
migrateEslintFile(projectEslintPath, tree);
|
32
|
-
}
|
33
|
-
});
|
34
|
-
}
|
35
|
-
exports.migrateConfigToMonorepoStyle = migrateConfigToMonorepoStyle;
|
36
|
-
function findLintTarget(project) {
|
37
|
-
var _a;
|
38
|
-
return (_a = Object.entries(project.targets).find(([name, target]) => name === 'lint' || target.executor === '@nrwl/linter:eslint')) === null || _a === void 0 ? void 0 : _a[1];
|
39
|
-
}
|
40
|
-
exports.findLintTarget = findLintTarget;
|
41
|
-
function migrateEslintFile(projectEslintPath, tree) {
|
42
|
-
if (projectEslintPath.endsWith('.json') ||
|
43
|
-
projectEslintPath.endsWith('.eslintrc')) {
|
44
|
-
(0, devkit_1.updateJson)(tree, projectEslintPath, (json) => {
|
45
|
-
// we have a new root now
|
46
|
-
delete json.root;
|
47
|
-
// remove nrwl/nx plugins
|
48
|
-
if (json.plugins) {
|
49
|
-
json.plugins = json.plugins.filter((p) => p !== '@nrwl/nx');
|
50
|
-
if (json.plugins.length === 0) {
|
51
|
-
delete json.plugins;
|
52
|
-
}
|
53
|
-
}
|
54
|
-
// add extends
|
55
|
-
json.extends = json.extends || [];
|
56
|
-
const pathToRootConfig = `${(0, devkit_1.offsetFromRoot)((0, path_1.dirname)(projectEslintPath))}.eslintrc.json`;
|
57
|
-
if (json.extends.indexOf(pathToRootConfig) === -1) {
|
58
|
-
json.extends.push(pathToRootConfig);
|
59
|
-
}
|
60
|
-
// cleanup overrides
|
61
|
-
if (json.overrides) {
|
62
|
-
json.overrides.forEach((override) => {
|
63
|
-
if (override.extends) {
|
64
|
-
override.extends = override.extends.filter((ext) => ext !== 'plugin:@nrwl/nx/typescript' &&
|
65
|
-
ext !== 'plugin:@nrwl/nx/javascript');
|
66
|
-
if (override.extends.length === 0) {
|
67
|
-
delete override.extends;
|
68
|
-
}
|
69
|
-
}
|
70
|
-
});
|
71
|
-
}
|
72
|
-
return json;
|
73
|
-
});
|
74
|
-
return;
|
75
|
-
}
|
76
|
-
if (projectEslintPath.endsWith('.yml') ||
|
77
|
-
projectEslintPath.endsWith('.yaml')) {
|
78
|
-
console.warn('YAML eslint config is not supported yet for migration');
|
79
|
-
}
|
80
|
-
if (projectEslintPath.endsWith('.js') || projectEslintPath.endsWith('.cjs')) {
|
81
|
-
console.warn('YAML eslint config is not supported yet for migration');
|
82
|
-
}
|
83
|
-
}
|
84
|
-
//# sourceMappingURL=init-migration.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"init-migration.js","sourceRoot":"","sources":["../../../../../../packages/linter/src/generators/init/init-migration.ts"],"names":[],"mappings":"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"}
|