@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 CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "schematics": {
3
3
  "noop": {
4
- "version": "12.10.0",
4
+ "version": "12.11.0",
5
5
  "factory": "./src/schematics/migrations/noop/noop.schematic",
6
6
  "description": "Update skyux-eslint dependencies"
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@skyux-sdk/eslint-schematics",
3
- "version": "12.10.0",
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.10.0"
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 `angular-eslint` config file.
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 `angular-eslint` config file.
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
- 'skyux.configs.tsRecommended',
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":"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"}
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,3 @@
1
+ export interface SkyuxEslintAddOptions {
2
+ ruleset?: 'recommended' | 'strict-type-checked';
3
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../../../../../libs/sdk/eslint-schematics/src/schematics/ng-add/schema.ts"],"names":[],"mappings":""}
@@ -1,5 +1,10 @@
1
1
  {
2
2
  "$schema": "http://json-schema.org/schema",
3
3
  "type": "object",
4
- "properties": {}
4
+ "properties": {
5
+ "ruleset": {
6
+ "enum": ["recommended", "strict-type-checked"],
7
+ "description": "The collection of rules to apply to the ESLint config."
8
+ }
9
+ }
5
10
  }
@@ -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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"}