@skyux-sdk/eslint-schematics 12.10.0 → 12.11.0
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/migrations.json +1 -1
- package/package.json +4 -2
- package/src/schematics/ng-add/ng-add.schematic.d.ts +3 -2
- package/src/schematics/ng-add/ng-add.schematic.js +56 -7
- package/src/schematics/ng-add/ng-add.schematic.js.map +1 -1
- package/src/schematics/ng-add/schema.d.ts +3 -0
- package/src/schematics/ng-add/schema.js +3 -0
- package/src/schematics/ng-add/schema.js.map +1 -0
- package/src/schematics/ng-add/schema.json +6 -1
- package/src/schematics/utility/json-file.d.ts +23 -0
- package/src/schematics/utility/json-file.js +74 -0
- package/src/schematics/utility/json-file.js.map +1 -0
package/migrations.json
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@skyux-sdk/eslint-schematics",
|
3
|
-
"version": "12.
|
3
|
+
"version": "12.11.0",
|
4
4
|
"author": "Blackbaud, Inc.",
|
5
5
|
"description": "SKY UX ESLint schematics for Angular CLI projects",
|
6
6
|
"keywords": [
|
@@ -24,13 +24,15 @@
|
|
24
24
|
"packageGroupName": "@skyux-sdk/eslint-schematics",
|
25
25
|
"migrations": "./migrations.json",
|
26
26
|
"packageGroup": {
|
27
|
-
"skyux-eslint": "12.
|
27
|
+
"skyux-eslint": "12.11.0"
|
28
28
|
}
|
29
29
|
},
|
30
30
|
"peerDependencies": {
|
31
31
|
"@angular/cli": "^19.2.8"
|
32
32
|
},
|
33
33
|
"dependencies": {
|
34
|
+
"@inquirer/prompts": "7.3.2",
|
35
|
+
"jsonc-parser": "3.3.1",
|
34
36
|
"semver": "7.7.1",
|
35
37
|
"tslib": "^2.8.1"
|
36
38
|
},
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { Rule } from '@angular-devkit/schematics';
|
2
|
+
import { SkyuxEslintAddOptions } from './schema';
|
2
3
|
/**
|
3
|
-
* Adds `skyux-eslint` to an existing
|
4
|
+
* Adds `skyux-eslint` to an existing ESLint config file.
|
4
5
|
*/
|
5
|
-
export default function ngAdd(): Rule;
|
6
|
+
export default function ngAdd(options: SkyuxEslintAddOptions): Rule;
|
@@ -2,9 +2,12 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.default = ngAdd;
|
4
4
|
const tslib_1 = require("tslib");
|
5
|
+
const schematics_1 = require("@angular-devkit/schematics");
|
5
6
|
const cli_1 = require("@angular/cli");
|
7
|
+
const prompt = tslib_1.__importStar(require("@inquirer/prompts"));
|
6
8
|
const dependencies_1 = require("@schematics/angular/utility/dependencies");
|
7
9
|
const semver_1 = tslib_1.__importDefault(require("semver"));
|
10
|
+
const json_file_1 = require("../utility/json-file");
|
8
11
|
const ESLINT_CONFIG_EXTENDS_REGEXP = /(?<=extends:\s*\[)[^\]]*(?=])/g;
|
9
12
|
function needsComma(contents) {
|
10
13
|
const len = contents.length;
|
@@ -49,11 +52,51 @@ function getRootEslintConfigFilePath(tree) {
|
|
49
52
|
const isEsm = tree.readText(configFile).includes('export default ');
|
50
53
|
return { configFile, isEsm };
|
51
54
|
}
|
55
|
+
function modifyTypeScriptEslintRulesets(options) {
|
56
|
+
return (tree) => {
|
57
|
+
if (options.ruleset === 'strict-type-checked') {
|
58
|
+
const contents = tree.readText('/eslint.config.js');
|
59
|
+
// A new Angular CLI project installs "recommended" and "stylistic"
|
60
|
+
// typescript-eslint configurations, but we want consumers to use the
|
61
|
+
// type-checked rules.
|
62
|
+
const modified = contents
|
63
|
+
.replaceAll('tseslint.configs.recommended,', 'tseslint.configs.recommendedTypeChecked,')
|
64
|
+
.replaceAll('tseslint.configs.stylistic,', 'tseslint.configs.stylisticTypeChecked,');
|
65
|
+
if (contents !== modified) {
|
66
|
+
tree.overwrite('/eslint.config.js', modified);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
};
|
70
|
+
}
|
71
|
+
function modifyTsConfig(options) {
|
72
|
+
return (tree) => {
|
73
|
+
if (options.ruleset === 'strict-type-checked') {
|
74
|
+
const tsconfig = new json_file_1.JsonFile(tree, '/tsconfig.json');
|
75
|
+
// Strict null checks are needed for the '@typescript/eslint:prefer-nullish-coalescing' rule.
|
76
|
+
tsconfig.modify(['compilerOptions', 'strictNullChecks'], true);
|
77
|
+
}
|
78
|
+
};
|
79
|
+
}
|
80
|
+
async function promptMissingOptions(options) {
|
81
|
+
const settings = {
|
82
|
+
ruleset: options.ruleset ?? 'recommended',
|
83
|
+
};
|
84
|
+
if (options.ruleset === undefined) {
|
85
|
+
settings.ruleset = await prompt.select({
|
86
|
+
message: 'Which ruleset would you like to install? Choose "recommended" to ' +
|
87
|
+
'install recommended SKY UX rules. Choose "strict-type-checked" to ' +
|
88
|
+
'install the recommended rules, and additional best-practice rules.',
|
89
|
+
choices: ['recommended', 'strict-type-checked'],
|
90
|
+
});
|
91
|
+
}
|
92
|
+
return settings;
|
93
|
+
}
|
52
94
|
/**
|
53
|
-
* Adds `skyux-eslint` to an existing
|
95
|
+
* Adds `skyux-eslint` to an existing ESLint config file.
|
54
96
|
*/
|
55
|
-
function ngAdd() {
|
56
|
-
return (tree) => {
|
97
|
+
function ngAdd(options) {
|
98
|
+
return async (tree) => {
|
99
|
+
const settings = await promptMissingOptions(options);
|
57
100
|
const { configFile, isEsm } = getRootEslintConfigFilePath(tree);
|
58
101
|
const contents = tree.readText(configFile);
|
59
102
|
const importStatement = isEsm
|
@@ -68,14 +111,20 @@ function ngAdd() {
|
|
68
111
|
if (exportsMatch) {
|
69
112
|
recorder.insertLeft(exportsMatch.index, importStatement);
|
70
113
|
}
|
71
|
-
const statements =
|
72
|
-
'skyux.configs.templateRecommended',
|
73
|
-
|
74
|
-
|
114
|
+
const statements = settings.ruleset === 'recommended'
|
115
|
+
? ['skyux.configs.templateRecommended', 'skyux.configs.tsRecommended']
|
116
|
+
: [
|
117
|
+
'skyux.configs.templateRecommended',
|
118
|
+
'skyux.configs.tsStrictTypeChecked',
|
119
|
+
];
|
75
120
|
contents.match(ESLINT_CONFIG_EXTENDS_REGEXP)?.forEach((element) => {
|
76
121
|
recorder.insertRight(contents.indexOf(element) + element.length, `${needsComma(element) ? ',' : ''}${' '.repeat(2)}...${statements.pop()},\n${' '.repeat(4)}`);
|
77
122
|
});
|
78
123
|
tree.commitUpdate(recorder);
|
124
|
+
return (0, schematics_1.chain)([
|
125
|
+
modifyTsConfig(settings),
|
126
|
+
modifyTypeScriptEslintRulesets(settings),
|
127
|
+
]);
|
79
128
|
};
|
80
129
|
}
|
81
130
|
//# sourceMappingURL=ng-add.schematic.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ng-add.schematic.js","sourceRoot":"","sources":["../../../../../../../libs/sdk/eslint-schematics/src/schematics/ng-add/ng-add.schematic.ts"],"names":[],"mappings":";;
|
1
|
+
{"version":3,"file":"ng-add.schematic.js","sourceRoot":"","sources":["../../../../../../../libs/sdk/eslint-schematics/src/schematics/ng-add/ng-add.schematic.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../../libs/sdk/eslint-schematics/src/schematics/ng-add/schema.ts"],"names":[],"mappings":""}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
/**
|
2
|
+
* The contents of this file were copied from '@schematics/angular'.
|
3
|
+
* @see https://github.com/angular/angular-cli/blob/master/packages/schematics/angular/utility/json-file.ts
|
4
|
+
*/
|
5
|
+
import { JsonValue } from '@angular-devkit/core';
|
6
|
+
import { Tree } from '@angular-devkit/schematics';
|
7
|
+
export type InsertionIndex = (properties: string[]) => number;
|
8
|
+
export type JsonPath = (string | number)[];
|
9
|
+
/**
|
10
|
+
* Handles JSONC files (JSON files that include comments).
|
11
|
+
* @internal
|
12
|
+
*/
|
13
|
+
export declare class JsonFile {
|
14
|
+
private readonly host;
|
15
|
+
private readonly path;
|
16
|
+
content: string;
|
17
|
+
private get JsonAst();
|
18
|
+
private _jsonAst;
|
19
|
+
constructor(host: Tree, path: string);
|
20
|
+
get(jsonPath: JsonPath): unknown;
|
21
|
+
modify(jsonPath: JsonPath, value: JsonValue | undefined, insertInOrder?: InsertionIndex | false): void;
|
22
|
+
remove(jsonPath: JsonPath): void;
|
23
|
+
}
|
@@ -0,0 +1,74 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.JsonFile = void 0;
|
4
|
+
const jsonc_parser_1 = require("jsonc-parser");
|
5
|
+
/* istanbul ignore next */
|
6
|
+
/**
|
7
|
+
* Handles JSONC files (JSON files that include comments).
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
class JsonFile {
|
11
|
+
get JsonAst() {
|
12
|
+
if (this._jsonAst) {
|
13
|
+
return this._jsonAst;
|
14
|
+
}
|
15
|
+
const errors = [];
|
16
|
+
this._jsonAst = (0, jsonc_parser_1.parseTree)(this.content, errors, {
|
17
|
+
allowTrailingComma: true,
|
18
|
+
});
|
19
|
+
if (errors.length) {
|
20
|
+
const { error, offset } = errors[0];
|
21
|
+
throw new Error(`Failed to parse "${this.path}" as JSON AST Object. ${(0, jsonc_parser_1.printParseErrorCode)(error)} at location: ${offset}.`);
|
22
|
+
}
|
23
|
+
return this._jsonAst;
|
24
|
+
}
|
25
|
+
constructor(host, path) {
|
26
|
+
this.host = host;
|
27
|
+
this.path = path;
|
28
|
+
const buffer = this.host.read(this.path);
|
29
|
+
if (buffer) {
|
30
|
+
this.content = buffer.toString();
|
31
|
+
}
|
32
|
+
else {
|
33
|
+
throw new Error(`Could not read '${path}'.`);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
get(jsonPath) {
|
37
|
+
const jsonAstNode = this.JsonAst;
|
38
|
+
if (!jsonAstNode) {
|
39
|
+
return undefined;
|
40
|
+
}
|
41
|
+
if (jsonPath.length === 0) {
|
42
|
+
return (0, jsonc_parser_1.getNodeValue)(jsonAstNode);
|
43
|
+
}
|
44
|
+
const node = (0, jsonc_parser_1.findNodeAtLocation)(jsonAstNode, jsonPath);
|
45
|
+
return node === undefined ? undefined : (0, jsonc_parser_1.getNodeValue)(node);
|
46
|
+
}
|
47
|
+
modify(jsonPath, value, insertInOrder) {
|
48
|
+
let getInsertionIndex;
|
49
|
+
if (insertInOrder === undefined) {
|
50
|
+
const property = jsonPath.slice(-1)[0];
|
51
|
+
getInsertionIndex = (properties) => [...properties, property].sort().findIndex((p) => p === property);
|
52
|
+
}
|
53
|
+
else if (insertInOrder !== false) {
|
54
|
+
getInsertionIndex = insertInOrder;
|
55
|
+
}
|
56
|
+
const edits = (0, jsonc_parser_1.modify)(this.content, jsonPath, value, {
|
57
|
+
getInsertionIndex,
|
58
|
+
formattingOptions: {
|
59
|
+
insertSpaces: true,
|
60
|
+
tabSize: 2,
|
61
|
+
},
|
62
|
+
});
|
63
|
+
this.content = (0, jsonc_parser_1.applyEdits)(this.content, edits);
|
64
|
+
this.host.overwrite(this.path, this.content);
|
65
|
+
this._jsonAst = undefined;
|
66
|
+
}
|
67
|
+
remove(jsonPath) {
|
68
|
+
if (this.get(jsonPath) !== undefined) {
|
69
|
+
this.modify(jsonPath, undefined);
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
73
|
+
exports.JsonFile = JsonFile;
|
74
|
+
//# sourceMappingURL=json-file.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"json-file.js","sourceRoot":"","sources":["../../../../../../../libs/sdk/eslint-schematics/src/schematics/utility/json-file.ts"],"names":[],"mappings":"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"}
|