@angular-eslint/schematics 18.0.0-alpha.1 → 18.0.0-alpha.11

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/add-eslint-to-project/index.ts"],"names":[],"mappings":"AAQA,UAAU,MAAM;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;;AAED,wBAqBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/add-eslint-to-project/index.ts"],"names":[],"mappings":"AAOA,UAAU,MAAM;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;;AAED,wBAqBG"}
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const devkit_1 = require("@nx/devkit");
3
+ const devkit_imports_1 = require("../devkit-imports");
4
4
  const utils_1 = require("../utils");
5
- exports.default = (0, devkit_1.convertNxGenerator)(async (tree, options) => {
6
- const projectName = (0, utils_1.determineTargetProjectName__NX)(tree, options.project);
5
+ exports.default = (0, devkit_imports_1.convertNxGenerator)(async (tree, options) => {
6
+ const projectName = (0, utils_1.determineTargetProjectName)(tree, options.project);
7
7
  if (!projectName) {
8
8
  throw new Error('\n' +
9
9
  `
@@ -13,6 +13,6 @@ E.g. npx ng g @angular-eslint/schematics:add-eslint-to-project {{YOUR_PROJECT_NA
13
13
  `.trim());
14
14
  }
15
15
  // Update the lint builder and config in angular.json
16
- (0, utils_1.addESLintTargetToProject__NX)(tree, projectName, 'lint');
17
- (0, utils_1.createESLintConfigForProject__NX)(tree, projectName, options.setParserOptionsProject ?? false);
16
+ (0, utils_1.addESLintTargetToProject)(tree, projectName, 'lint');
17
+ (0, utils_1.createESLintConfigForProject)(tree, projectName, options.setParserOptionsProject ?? false);
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAMtF,UAAU,MAAO,SAAQ,aAAa;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;;AAED,wBAoBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAWtF,UAAU,MAAO,SAAQ,aAAa;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;;AAED,wBAoBG"}
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const devkit_1 = require("@nx/devkit");
4
- const ngcli_adapter_1 = require("@nx/devkit/ngcli-adapter");
3
+ const devkit_imports_1 = require("../devkit-imports");
5
4
  const utils_1 = require("../utils");
6
- exports.default = (0, devkit_1.convertNxGenerator)(async (tree, options) => {
5
+ exports.default = (0, devkit_imports_1.convertNxGenerator)(async (tree, options) => {
7
6
  // Remove angular-eslint specific options before passing to the Angular schematic
8
7
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
9
8
  const { setParserOptionsProject, ...angularOptions } = options;
10
- const applicationGenerator = (0, ngcli_adapter_1.wrapAngularDevkitSchematic)('@schematics/angular', 'application');
9
+ const applicationGenerator = (0, devkit_imports_1.wrapAngularDevkitSchematic)('@schematics/angular', 'application');
11
10
  await applicationGenerator(tree, angularOptions);
12
11
  // Update the lint builder and config in angular.json
13
- (0, utils_1.addESLintTargetToProject__NX)(tree, options.name, 'lint');
14
- (0, utils_1.createESLintConfigForProject__NX)(tree, options.name, options.setParserOptionsProject ?? false);
12
+ (0, utils_1.addESLintTargetToProject)(tree, options.name, 'lint');
13
+ (0, utils_1.createESLintConfigForProject)(tree, options.name, options.setParserOptionsProject ?? false);
15
14
  });
@@ -0,0 +1,4 @@
1
+ export { convertNxGenerator, offsetFromRoot, readJson, writeJson, } from '@nx/devkit';
2
+ export type { ProjectConfiguration, Tree } from '@nx/devkit';
3
+ export { wrapAngularDevkitSchematic } from '@nx/devkit/ngcli-adapter';
4
+ //# sourceMappingURL=devkit-imports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"devkit-imports.d.ts","sourceRoot":"","sources":["../src/devkit-imports.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,SAAS,GACV,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapAngularDevkitSchematic = exports.writeJson = exports.readJson = exports.offsetFromRoot = exports.convertNxGenerator = void 0;
4
+ const node_path_1 = require("node:path");
5
+ process.env.NX_PROJECT_GRAPH_CACHE_DIRECTORY = (0, node_path_1.join)(__dirname, '..', '.nx-cache');
6
+ var devkit_1 = require("@nx/devkit");
7
+ Object.defineProperty(exports, "convertNxGenerator", { enumerable: true, get: function () { return devkit_1.convertNxGenerator; } });
8
+ Object.defineProperty(exports, "offsetFromRoot", { enumerable: true, get: function () { return devkit_1.offsetFromRoot; } });
9
+ Object.defineProperty(exports, "readJson", { enumerable: true, get: function () { return devkit_1.readJson; } });
10
+ Object.defineProperty(exports, "writeJson", { enumerable: true, get: function () { return devkit_1.writeJson; } });
11
+ var ngcli_adapter_1 = require("@nx/devkit/ngcli-adapter");
12
+ Object.defineProperty(exports, "wrapAngularDevkitSchematic", { enumerable: true, get: function () { return ngcli_adapter_1.wrapAngularDevkitSchematic; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/library/index.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAMlF,UAAU,MAAO,SAAQ,aAAa;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;;AAED,wBAoBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/library/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,MAAM,IAAI,aAAa,EAAE,MAAM,oCAAoC,CAAC;AAWlF,UAAU,MAAO,SAAQ,aAAa;IACpC,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;;AAED,wBAoBG"}
@@ -1,15 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const devkit_1 = require("@nx/devkit");
4
- const ngcli_adapter_1 = require("@nx/devkit/ngcli-adapter");
3
+ const devkit_imports_1 = require("../devkit-imports");
5
4
  const utils_1 = require("../utils");
6
- exports.default = (0, devkit_1.convertNxGenerator)(async (tree, options) => {
5
+ exports.default = (0, devkit_imports_1.convertNxGenerator)(async (tree, options) => {
7
6
  // Remove angular-eslint specific options before passing to the Angular schematic
8
7
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
9
8
  const { setParserOptionsProject, ...angularOptions } = options;
10
- const libraryGenerator = (0, ngcli_adapter_1.wrapAngularDevkitSchematic)('@schematics/angular', 'library');
9
+ const libraryGenerator = (0, devkit_imports_1.wrapAngularDevkitSchematic)('@schematics/angular', 'library');
11
10
  await libraryGenerator(tree, angularOptions);
12
11
  // Update the lint builder and config in angular.json
13
- (0, utils_1.addESLintTargetToProject__NX)(tree, options.name, 'lint');
14
- (0, utils_1.createESLintConfigForProject__NX)(tree, options.name, options.setParserOptionsProject ?? false);
12
+ (0, utils_1.addESLintTargetToProject)(tree, options.name, 'lint');
13
+ (0, utils_1.createESLintConfigForProject)(tree, options.name, options.setParserOptionsProject ?? false);
15
14
  });
@@ -1,3 +1,5 @@
1
1
  import type { Rule } from '@angular-devkit/schematics';
2
+ export declare const FIXED_ESLINT_V8_VERSION = "8.57.0";
3
+ export declare const FIXED_TYPESCRIPT_ESLINT_V7_VERSION = "7.11.0";
2
4
  export default function (): Rule;
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,4BAA4B,CAAC;AAiJ/E,MAAM,CAAC,OAAO,cAAc,IAAI,CAwB/B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ng-add/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAA0B,MAAM,4BAA4B,CAAC;AAc/E,eAAO,MAAM,uBAAuB,WAAW,CAAC;AAChD,eAAO,MAAM,kCAAkC,WAAW,CAAC;AA+K3D,MAAM,CAAC,OAAO,cAAc,IAAI,CAuB/B"}
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.FIXED_TYPESCRIPT_ESLINT_V7_VERSION = exports.FIXED_ESLINT_V8_VERSION = void 0;
3
7
  const schematics_1 = require("@angular-devkit/schematics");
4
8
  const tasks_1 = require("@angular-devkit/schematics/tasks");
9
+ const semver_1 = __importDefault(require("semver"));
5
10
  const utils_1 = require("../utils");
11
+ exports.FIXED_ESLINT_V8_VERSION = '8.57.0';
12
+ exports.FIXED_TYPESCRIPT_ESLINT_V7_VERSION = '7.11.0';
6
13
  // eslint-disable-next-line @typescript-eslint/no-var-requires
7
14
  const packageJSON = require('../../package.json');
8
- function addAngularESLintPackages() {
15
+ function addAngularESLintPackages(json, useFlatConfig) {
9
16
  return (host, context) => {
10
17
  if (!host.exists('package.json')) {
11
18
  throw new Error('Could not find a `package.json` file at the root of your workspace');
@@ -13,50 +20,67 @@ function addAngularESLintPackages() {
13
20
  if (host.exists('tsconfig.base.json')) {
14
21
  throw new Error('\nError: Angular CLI v10.1.0 and later (and no `tsconfig.base.json`) is required in order to run this schematic. Please update your workspace and try again.\n');
15
22
  }
16
- const projectPackageJSON = host.read('package.json').toString('utf-8');
17
- const json = JSON.parse(projectPackageJSON);
18
- json.devDependencies = json.devDependencies || {};
19
- json.devDependencies['eslint'] =
20
- `^${packageJSON.devDependencies['eslint']}`;
21
23
  json.scripts = json.scripts || {};
22
24
  json.scripts['lint'] = json.scripts['lint'] || 'ng lint';
23
- /**
24
- * @angular-eslint packages
25
- */
26
- json.devDependencies['@angular-eslint/builder'] = packageJSON.version;
27
- json.devDependencies['@angular-eslint/eslint-plugin'] = packageJSON.version;
28
- json.devDependencies['@angular-eslint/eslint-plugin-template'] =
29
- packageJSON.version;
30
- /**
31
- * It seems in certain versions of Angular CLI `ng add` will automatically add the
32
- * @angular-eslint/schematics package to the dependencies section, so clean that up
33
- * at this point
34
- */
35
- if (json.dependencies?.['@angular-eslint/schematics']) {
36
- delete json.dependencies['@angular-eslint/schematics'];
25
+ if (useFlatConfig) {
26
+ applyDevDependenciesForFlatConfig(json);
27
+ }
28
+ else {
29
+ applyDevDependenciesForESLintRC(json);
37
30
  }
38
- json.devDependencies['@angular-eslint/schematics'] = packageJSON.version;
39
- json.devDependencies['@angular-eslint/template-parser'] =
40
- packageJSON.version;
41
- /**
42
- * @typescript-eslint packages
43
- */
44
- const typescriptESLintVersion = packageJSON.devDependencies['@typescript-eslint/utils'];
45
- json.devDependencies['@typescript-eslint/eslint-plugin'] =
46
- typescriptESLintVersion;
47
- json.devDependencies['@typescript-eslint/parser'] = typescriptESLintVersion;
48
31
  json.devDependencies = (0, utils_1.sortObjectByKeys)(json.devDependencies);
49
32
  host.overwrite('package.json', JSON.stringify(json, null, 2));
50
33
  context.addTask(new tasks_1.NodePackageInstallTask());
51
34
  context.logger.info(`
52
- All @angular-eslint dependencies have been successfully installed 🎉
35
+ All angular-eslint dependencies have been successfully installed 🎉
53
36
 
54
37
  Please see https://github.com/angular-eslint/angular-eslint for how to add ESLint configuration to your project.
55
38
  `);
56
39
  return host;
57
40
  };
58
41
  }
59
- function applyESLintConfigIfSingleProjectWithNoExistingTSLint() {
42
+ function applyDevDependenciesForESLintRC(json) {
43
+ json.devDependencies['eslint'] = exports.FIXED_ESLINT_V8_VERSION;
44
+ /**
45
+ * @angular-eslint packages
46
+ */
47
+ json.devDependencies['@angular-eslint/builder'] = packageJSON.version;
48
+ json.devDependencies['@angular-eslint/eslint-plugin'] = packageJSON.version;
49
+ json.devDependencies['@angular-eslint/eslint-plugin-template'] =
50
+ packageJSON.version;
51
+ json.devDependencies['@angular-eslint/schematics'] = packageJSON.version;
52
+ json.devDependencies['@angular-eslint/template-parser'] = packageJSON.version;
53
+ /**
54
+ * @typescript-eslint packages
55
+ */
56
+ json.devDependencies['@typescript-eslint/eslint-plugin'] =
57
+ exports.FIXED_TYPESCRIPT_ESLINT_V7_VERSION;
58
+ json.devDependencies['@typescript-eslint/parser'] =
59
+ exports.FIXED_TYPESCRIPT_ESLINT_V7_VERSION;
60
+ }
61
+ function applyDevDependenciesForFlatConfig(json) {
62
+ json.devDependencies['eslint'] = `^${packageJSON.devDependencies['eslint']}`;
63
+ /**
64
+ * angular-eslint packages
65
+ */
66
+ json.devDependencies['angular-eslint'] = packageJSON.version;
67
+ // Clean up individual packages from devDependencies
68
+ delete json.devDependencies['@angular-eslint/builder'];
69
+ delete json.devDependencies['@angular-eslint/eslint-plugin'];
70
+ delete json.devDependencies['@angular-eslint/eslint-plugin-template'];
71
+ delete json.devDependencies['@angular-eslint/schematics'];
72
+ delete json.devDependencies['@angular-eslint/template-parser'];
73
+ /**
74
+ * typescript-eslint
75
+ */
76
+ const typescriptESLintVersion = packageJSON.devDependencies['@typescript-eslint/utils'];
77
+ json.devDependencies['typescript-eslint'] = typescriptESLintVersion;
78
+ // Clean up individual packages from devDependencies
79
+ delete json.devDependencies['@typescript-eslint/parser'];
80
+ delete json.devDependencies['@typescript-eslint/eslint-plugin'];
81
+ delete json.devDependencies['@typescript-eslint/utils'];
82
+ }
83
+ function applyESLintConfigIfSingleProjectWithNoExistingTSLint(useFlatConfig) {
60
84
  return (host, context) => {
61
85
  const angularJson = (0, utils_1.readJsonInTree)(host, 'angular.json');
62
86
  if (!angularJson || !angularJson.projects) {
@@ -73,7 +97,12 @@ function applyESLintConfigIfSingleProjectWithNoExistingTSLint() {
73
97
  const projectNames = Object.keys(angularJson.projects);
74
98
  if (projectNames.length === 0) {
75
99
  return (0, schematics_1.chain)([
76
- (0, utils_1.updateJsonInTree)('.eslintrc.json', () => (0, utils_1.createRootESLintConfig)(null)),
100
+ useFlatConfig
101
+ ? (host) => {
102
+ host.create('eslint.config.js', (0, utils_1.createStringifiedRootESLintConfig)(null));
103
+ return host;
104
+ }
105
+ : (0, utils_1.updateJsonInTree)('.eslintrc.json', () => (0, utils_1.createRootESLintConfig)(null)),
77
106
  (0, utils_1.updateJsonInTree)('angular.json', (json) => (0, utils_1.updateSchematicCollections)(json)),
78
107
  ]);
79
108
  }
@@ -108,23 +137,18 @@ Please see https://github.com/angular-eslint/angular-eslint for more information
108
137
  }
109
138
  function default_1() {
110
139
  return (host, context) => {
140
+ const workspacePackageJSON = host.read('package.json').toString('utf-8');
141
+ const json = JSON.parse(workspacePackageJSON);
142
+ /**
143
+ * Until eslint v9, typescript-eslint v8 and flat config stabilize completely, allow the user to set a previous version of eslint
144
+ * as a signal for what kind of config and dependencies to set up.
145
+ */
146
+ json.devDependencies = json.devDependencies || {};
147
+ const existingESLintVersion = json.devDependencies['eslint'];
148
+ const useFlatConfig = !(existingESLintVersion && semver_1.default.major(existingESLintVersion) < 9);
111
149
  return (0, schematics_1.chain)([
112
- addAngularESLintPackages(),
113
- applyESLintConfigIfSingleProjectWithNoExistingTSLint(),
114
- () => {
115
- const additionalGitignoreEntries = `.nx/cache
116
- .nx/workspace-data
117
- `;
118
- if (!host.exists('.gitignore')) {
119
- host.create('.gitignore', additionalGitignoreEntries);
120
- return;
121
- }
122
- const gitIgnore = host.read('.gitignore')?.toString();
123
- if (gitIgnore?.includes('.nx')) {
124
- return;
125
- }
126
- host.overwrite('.gitignore', `${gitIgnore}\n${additionalGitignoreEntries}`);
127
- },
150
+ addAngularESLintPackages(json, useFlatConfig),
151
+ applyESLintConfigIfSingleProjectWithNoExistingTSLint(useFlatConfig),
128
152
  ])(host, context);
129
153
  };
130
154
  }
package/dist/utils.d.ts CHANGED
@@ -1,12 +1,6 @@
1
- /**
2
- * Some utils taken from various parts of Nx:
3
- * https://github.com/nrwl/nx
4
- *
5
- * Thanks, Nrwl folks!
6
- */
7
1
  import type { Path } from '@angular-devkit/core';
8
2
  import type { Rule, SchematicContext, Tree } from '@angular-devkit/schematics';
9
- import type { Tree as NxTree } from '@nx/devkit';
3
+ import { Tree as NxTree } from './devkit-imports';
10
4
  /**
11
5
  * This method is specifically for reading JSON files in a Tree
12
6
  * @param host The host tree
@@ -30,8 +24,7 @@ export declare function getTargetsConfigFromProject(projectConfig: {
30
24
  } & {
31
25
  targets?: TargetsConfig;
32
26
  }): TargetsConfig | null;
33
- export declare function addESLintTargetToProject__NX(tree: NxTree, projectName: string, targetName: 'eslint' | 'lint'): void;
34
- export declare function addESLintTargetToProject(projectName: string, targetName: 'eslint' | 'lint'): Rule;
27
+ export declare function addESLintTargetToProject(tree: NxTree, projectName: string, targetName: 'eslint' | 'lint'): void;
35
28
  /**
36
29
  * Utility to act on all files in a tree that are not ignored by git.
37
30
  */
@@ -59,19 +52,14 @@ export declare function createRootESLintConfig(prefix: string | null): {
59
52
  };
60
53
  }[];
61
54
  };
62
- export declare function createESLintConfigForProject__NX(tree: NxTree, projectName: string, setParserOptionsProject: boolean): void;
63
- export declare function createESLintConfigForProject(projectName: string, setParserOptionsProject: boolean): Rule;
55
+ export declare function createStringifiedRootESLintConfig(prefix: string | null): string;
56
+ export declare function createESLintConfigForProject(tree: NxTree, projectName: string, setParserOptionsProject: boolean): void;
64
57
  export declare function sortObjectByKeys(obj: Record<string, unknown>): Record<string, unknown>;
65
58
  /**
66
59
  * To make certain schematic usage conversion more ergonomic, if the user does not specify a project
67
60
  * and only has a single project in their angular.json we will just go ahead and use that one.
68
61
  */
69
- export declare function determineTargetProjectName__NX(tree: NxTree, maybeProject?: string): string | null;
70
- /**
71
- * To make certain schematic usage conversion more ergonomic, if the user does not specify a project
72
- * and only has a single project in their angular.json we will just go ahead and use that one.
73
- */
74
- export declare function determineTargetProjectName(tree: Tree, maybeProject?: string): string | null;
62
+ export declare function determineTargetProjectName(tree: NxTree, maybeProject?: string): string | null;
75
63
  /**
76
64
  * See `schematicCollections` docs here:
77
65
  * https://github.com/angular/angular-cli/blob/8431b3f0769b5f95b9e13807a09293d820c4b017/docs/specifications/schematic-collections-config.md
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAE/E,OAAO,KAAK,EAAE,IAAI,IAAI,MAAM,EAAwB,MAAM,YAAY,CAAC;AAYvE;;;;;GAKG;AAEH,wBAAgB,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAcnE;AAED;;;;;GAKG;AAEH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAC7C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,KAAK,CAAC,GAClD,IAAI,CAYN;AAQD,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE3E,wBAAgB,2BAA2B,CACzC,aAAa,EAAE;IAAE,SAAS,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GACzE,aAAa,GAAG,IAAI,CAYtB;AA4CD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,QAAQ,GAAG,MAAM,QA2B9B;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,QAAQ,GAAG,MAAM,GAC5B,IAAI,CA2BN;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,EAC3E,GAAG,GAAE,IAAoB,GACxB,IAAI,CA8BN;AA0BD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;EAyC3D;AA0FD,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,uBAAuB,EAAE,OAAO,QAiCjC;AAED,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,MAAM,EACnB,uBAAuB,EAAE,OAAO,GAC/B,IAAI,CAmCN;AAsBD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAUf;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,IAAI,EACV,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAUf;AAcD;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,uBAS1E;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,uBAUvC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AAM/E,OAAO,EACL,IAAI,IAAI,MAAM,EAKf,MAAM,kBAAkB,CAAC;AAI1B;;;;;GAKG;AAEH,wBAAgB,cAAc,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,CAcnE;AAED;;;;;GAKG;AAEH,wBAAgB,gBAAgB,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAC7C,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,OAAO,EAAE,gBAAgB,KAAK,CAAC,GAClD,IAAI,CAYN;AAED,KAAK,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAE3E,wBAAgB,2BAA2B,CACzC,aAAa,EAAE;IAAE,SAAS,CAAC,EAAE,aAAa,CAAA;CAAE,GAAG;IAAE,OAAO,CAAC,EAAE,aAAa,CAAA;CAAE,GACzE,aAAa,GAAG,IAAI,CAYtB;AAqBD,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,QAAQ,GAAG,MAAM,QAkC9B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,KAAK,IAAI,GAAG,IAAI,EAC3E,GAAG,GAAE,IAAoB,GACxB,IAAI,CA8BN;AA0BD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;;;;;;;;;;;;EAyC3D;AAGD,wBAAgB,iCAAiC,CAC/C,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,CA4CR;AAiGD,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,uBAAuB,EAAE,OAAO,QA8EjC;AAgBD,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAUf;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,uBAS1E;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAChC,iBAAiB,EAAE,MAAM,EACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,uBAUvC"}
package/dist/utils.js CHANGED
@@ -3,12 +3,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.updateSchematicDefaults = exports.updateSchematicCollections = exports.determineTargetProjectName = exports.determineTargetProjectName__NX = exports.sortObjectByKeys = exports.createESLintConfigForProject = exports.createESLintConfigForProject__NX = exports.createRootESLintConfig = exports.visitNotIgnoredFiles = exports.addESLintTargetToProject = exports.addESLintTargetToProject__NX = exports.getTargetsConfigFromProject = exports.updateJsonInTree = exports.readJsonInTree = void 0;
6
+ exports.updateSchematicDefaults = exports.updateSchematicCollections = exports.determineTargetProjectName = exports.sortObjectByKeys = exports.createESLintConfigForProject = exports.createStringifiedRootESLintConfig = exports.createRootESLintConfig = exports.visitNotIgnoredFiles = exports.addESLintTargetToProject = exports.getTargetsConfigFromProject = exports.updateJsonInTree = exports.readJsonInTree = void 0;
7
7
  const core_1 = require("@angular-devkit/core");
8
8
  const schematics_1 = require("@angular-devkit/schematics");
9
- const devkit_1 = require("@nx/devkit");
10
9
  const ignore_1 = __importDefault(require("ignore"));
10
+ const semver_1 = __importDefault(require("semver"));
11
11
  const strip_json_comments_1 = __importDefault(require("strip-json-comments"));
12
+ const devkit_imports_1 = require("./devkit-imports");
12
13
  const DEFAULT_PREFIX = 'app';
13
14
  /**
14
15
  * This method is specifically for reading JSON files in a Tree
@@ -48,11 +49,6 @@ function updateJsonInTree(path, callback) {
48
49
  };
49
50
  }
50
51
  exports.updateJsonInTree = updateJsonInTree;
51
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
52
- function getWorkspacePath(host) {
53
- const possibleFiles = ['/workspace.json', '/angular.json', '/.angular.json'];
54
- return possibleFiles.filter((path) => host.exists(path))[0];
55
- }
56
52
  function getTargetsConfigFromProject(projectConfig) {
57
53
  if (!projectConfig) {
58
54
  return null;
@@ -67,35 +63,19 @@ function getTargetsConfigFromProject(projectConfig) {
67
63
  return null;
68
64
  }
69
65
  exports.getTargetsConfigFromProject = getTargetsConfigFromProject;
70
- function offsetFromRoot(fullPathToSourceDir) {
71
- const parts = (0, core_1.normalize)(fullPathToSourceDir).split('/');
72
- let offset = '';
73
- for (let i = 0; i < parts.length; ++i) {
74
- offset += '../';
75
- }
76
- return offset;
77
- }
78
66
  function serializeJson(json) {
79
67
  return `${JSON.stringify(json, null, 2)}\n`;
80
68
  }
81
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
82
- function updateWorkspaceInTree(callback) {
83
- return (host, context) => {
84
- const path = getWorkspacePath(host);
85
- host.overwrite(path, serializeJson(callback(readJsonInTree(host, path), context, host)));
86
- return host;
87
- };
88
- }
89
69
  function readProjectConfiguration(tree, projectName) {
90
- const angularJSON = (0, devkit_1.readJson)(tree, 'angular.json');
70
+ const angularJSON = (0, devkit_imports_1.readJson)(tree, 'angular.json');
91
71
  return angularJSON.projects[projectName];
92
72
  }
93
73
  function updateProjectConfiguration(tree, projectName, projectConfig) {
94
- const angularJSON = (0, devkit_1.readJson)(tree, 'angular.json');
74
+ const angularJSON = (0, devkit_imports_1.readJson)(tree, 'angular.json');
95
75
  angularJSON.projects[projectName] = projectConfig;
96
- (0, devkit_1.writeJson)(tree, 'angular.json', angularJSON);
76
+ (0, devkit_imports_1.writeJson)(tree, 'angular.json', angularJSON);
97
77
  }
98
- function addESLintTargetToProject__NX(tree, projectName, targetName) {
78
+ function addESLintTargetToProject(tree, projectName, targetName) {
99
79
  const existingProjectConfig = readProjectConfiguration(tree, projectName);
100
80
  let lintFilePatternsRoot = '';
101
81
  // Default Angular CLI project at the root of the workspace
@@ -114,35 +94,15 @@ function addESLintTargetToProject__NX(tree, projectName, targetName) {
114
94
  ],
115
95
  },
116
96
  };
97
+ let eslintConfig;
98
+ if (existingProjectConfig.root !== '') {
99
+ eslintConfig = (0, core_1.join)(existingProjectConfig.root, 'eslint.config.js');
100
+ }
101
+ eslintTargetConfig.options.eslintConfig = eslintConfig;
117
102
  existingProjectConfig.architect = existingProjectConfig.architect || {};
118
103
  existingProjectConfig.architect[targetName] = eslintTargetConfig;
119
104
  updateProjectConfiguration(tree, projectName, existingProjectConfig);
120
105
  }
121
- exports.addESLintTargetToProject__NX = addESLintTargetToProject__NX;
122
- function addESLintTargetToProject(projectName, targetName) {
123
- return updateWorkspaceInTree((workspaceJson) => {
124
- const existingProjectConfig = workspaceJson.projects[projectName];
125
- let lintFilePatternsRoot = '';
126
- // Default Angular CLI project at the root of the workspace
127
- if (existingProjectConfig.root === '') {
128
- lintFilePatternsRoot = existingProjectConfig.sourceRoot || 'src';
129
- }
130
- else {
131
- lintFilePatternsRoot = existingProjectConfig.root;
132
- }
133
- const eslintTargetConfig = {
134
- builder: '@angular-eslint/builder:lint',
135
- options: {
136
- lintFilePatterns: [
137
- `${lintFilePatternsRoot}/**/*.ts`,
138
- `${lintFilePatternsRoot}/**/*.html`,
139
- ],
140
- },
141
- };
142
- existingProjectConfig.architect[targetName] = eslintTargetConfig;
143
- return workspaceJson;
144
- });
145
- }
146
106
  exports.addESLintTargetToProject = addESLintTargetToProject;
147
107
  /**
148
108
  * Utility to act on all files in a tree that are not ignored by git.
@@ -235,9 +195,56 @@ function createRootESLintConfig(prefix) {
235
195
  };
236
196
  }
237
197
  exports.createRootESLintConfig = createRootESLintConfig;
198
+ // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
199
+ function createStringifiedRootESLintConfig(prefix) {
200
+ let codeRules;
201
+ if (prefix) {
202
+ codeRules = {
203
+ '@angular-eslint/directive-selector': [
204
+ 'error',
205
+ { type: 'attribute', prefix, style: 'camelCase' },
206
+ ],
207
+ '@angular-eslint/component-selector': [
208
+ 'error',
209
+ { type: 'element', prefix, style: 'kebab-case' },
210
+ ],
211
+ };
212
+ }
213
+ else {
214
+ codeRules = {};
215
+ }
216
+ return `// @ts-check
217
+ const eslint = require("@eslint/js");
218
+ const tseslint = require("typescript-eslint");
219
+ const angular = require("angular-eslint");
220
+
221
+ module.exports = tseslint.config(
222
+ {
223
+ files: ["**/*.ts"],
224
+ extends: [
225
+ eslint.configs.recommended,
226
+ ...tseslint.configs.recommended,
227
+ ...tseslint.configs.stylistic,
228
+ ...angular.configs.tsRecommended,
229
+ ],
230
+ processor: angular.processInlineTemplates,
231
+ rules: ${JSON.stringify(codeRules, null, 2)},
232
+ },
233
+ {
234
+ files: ["**/*.html"],
235
+ extends: [
236
+ ...angular.configs.templateRecommended,
237
+ ...angular.configs.templateAccessibility,
238
+ ],
239
+ rules: {},
240
+ }
241
+ );
242
+ `;
243
+ }
244
+ exports.createStringifiedRootESLintConfig = createStringifiedRootESLintConfig;
238
245
  function createProjectESLintConfig(projectRoot, projectType, prefix, setParserOptionsProject, hasE2e) {
239
246
  return {
240
- extends: `${offsetFromRoot(projectRoot)}.eslintrc.json`,
247
+ extends: `${(0, devkit_imports_1.offsetFromRoot)(projectRoot)}.eslintrc.json`,
241
248
  ignorePatterns: ['!**/*'],
242
249
  overrides: [
243
250
  {
@@ -267,92 +274,106 @@ function createProjectESLintConfig(projectRoot, projectType, prefix, setParserOp
267
274
  ],
268
275
  };
269
276
  }
270
- function createProjectESLintConfig__NX(projectRoot, projectType, prefix, setParserOptionsProject, hasE2e) {
271
- return {
272
- extends: `${(0, devkit_1.offsetFromRoot)(projectRoot)}.eslintrc.json`,
273
- ignorePatterns: ['!**/*'],
274
- overrides: [
275
- {
276
- files: ['*.ts'],
277
- ...(setParserOptionsProject
278
- ? {
279
- parserOptions: {
280
- project: setESLintProjectBasedOnProjectType(projectRoot, projectType, hasE2e),
281
- },
282
- }
283
- : null),
284
- rules: {
285
- '@angular-eslint/directive-selector': [
286
- 'error',
287
- { type: 'attribute', prefix, style: 'camelCase' },
288
- ],
289
- '@angular-eslint/component-selector': [
290
- 'error',
291
- { type: 'element', prefix, style: 'kebab-case' },
292
- ],
293
- },
294
- },
295
- {
296
- files: ['*.html'],
297
- rules: {},
298
- },
299
- ],
300
- };
277
+ function createStringifiedProjectESLintConfig(projectRoot, projectType, prefix, setParserOptionsProject, hasE2e) {
278
+ return `// @ts-check
279
+ const tseslint = require("typescript-eslint");
280
+ const rootConfig = require("${(0, devkit_imports_1.offsetFromRoot)(projectRoot)}eslint.config.js");
281
+
282
+ module.exports = tseslint.config(
283
+ ...rootConfig,
284
+ {
285
+ files: ["**/*.ts"],${setParserOptionsProject
286
+ ? `
287
+ languageOptions: {
288
+ parserOptions: {
289
+ projectService: true,
290
+ },
291
+ },`
292
+ : ''}
293
+ rules: {
294
+ "@angular-eslint/directive-selector": [
295
+ "error",
296
+ {
297
+ type: "attribute",
298
+ prefix: "${prefix}",
299
+ style: "camelCase",
300
+ },
301
+ ],
302
+ "@angular-eslint/component-selector": [
303
+ "error",
304
+ {
305
+ type: "element",
306
+ prefix: "${prefix}",
307
+ style: "kebab-case",
308
+ },
309
+ ],
310
+ },
311
+ },
312
+ {
313
+ files: ["**/*.html"],
314
+ rules: {},
315
+ }
316
+ );
317
+ `;
301
318
  }
302
- function createESLintConfigForProject__NX(tree, projectName, setParserOptionsProject) {
319
+ function createESLintConfigForProject(tree, projectName, setParserOptionsProject) {
303
320
  const existingProjectConfig = readProjectConfiguration(tree, projectName);
304
321
  const targets = existingProjectConfig.architect || existingProjectConfig.targets;
305
322
  const { root: projectRoot, projectType, prefix } = existingProjectConfig;
306
323
  const hasE2e = !!targets?.e2e;
324
+ /**
325
+ * In order to support both flat config and eslintrc we need to dynamically figure out
326
+ * what the user should be using based on:
327
+ * - their existing files
328
+ * - their eslint version
329
+ */
330
+ let useFlatConfig = true;
331
+ const alreadyHasRootFlatConfig = tree.exists('eslint.config.js');
332
+ const alreadyHasRootESLintRC = tree.exists('.eslintrc.json');
333
+ if (alreadyHasRootFlatConfig) {
334
+ useFlatConfig = true;
335
+ }
336
+ else if (alreadyHasRootESLintRC) {
337
+ useFlatConfig = false;
338
+ }
339
+ else {
340
+ // If no existing config file, check if they are using at least eslint 9 (when flat config became the default)
341
+ let eslintVersion;
342
+ try {
343
+ eslintVersion = JSON.parse(tree.read('package.json', 'utf-8'))
344
+ .devDependencies?.['eslint'];
345
+ // eslint-disable-next-line no-empty
346
+ }
347
+ catch { }
348
+ if (eslintVersion) {
349
+ const v = semver_1.default.minVersion(eslintVersion);
350
+ useFlatConfig = semver_1.default.gte(v.raw, '9.0.0');
351
+ }
352
+ }
307
353
  /**
308
354
  * If the root is an empty string it must be the initial project created at the
309
355
  * root by the Angular CLI's workspace schematic
310
356
  */
311
357
  if (projectRoot === '') {
312
- return createRootESLintConfigFile__NX(tree, prefix || DEFAULT_PREFIX);
358
+ return createRootESLintConfigFile(tree, prefix || DEFAULT_PREFIX, useFlatConfig);
313
359
  }
314
- // If, for whatever reason, the root .eslintrc.json doesn't exist yet, create it
315
- if (!tree.exists('.eslintrc.json')) {
316
- createRootESLintConfigFile__NX(tree, prefix || DEFAULT_PREFIX);
360
+ // If, for whatever reason, the root eslint.config.js/.eslintrc.json doesn't exist yet, create it
361
+ if (!alreadyHasRootESLintRC && !alreadyHasRootFlatConfig) {
362
+ createRootESLintConfigFile(tree, prefix || DEFAULT_PREFIX, useFlatConfig);
363
+ }
364
+ if (useFlatConfig) {
365
+ tree.write((0, core_1.join)((0, core_1.normalize)(projectRoot), 'eslint.config.js'), createStringifiedProjectESLintConfig(projectRoot, projectType || 'library', prefix || DEFAULT_PREFIX, setParserOptionsProject, hasE2e));
366
+ }
367
+ else {
368
+ (0, devkit_imports_1.writeJson)(tree, (0, core_1.join)((0, core_1.normalize)(projectRoot), '.eslintrc.json'), createProjectESLintConfig(projectRoot, projectType || 'library', prefix || DEFAULT_PREFIX, setParserOptionsProject, hasE2e));
317
369
  }
318
- (0, devkit_1.writeJson)(tree, (0, core_1.join)((0, core_1.normalize)(projectRoot), '.eslintrc.json'), createProjectESLintConfig__NX(projectRoot, projectType || 'library', prefix || DEFAULT_PREFIX, setParserOptionsProject, hasE2e));
319
- }
320
- exports.createESLintConfigForProject__NX = createESLintConfigForProject__NX;
321
- function createESLintConfigForProject(projectName, setParserOptionsProject) {
322
- return (tree) => {
323
- const angularJSON = readJsonInTree(tree, 'angular.json');
324
- const { root: projectRoot, projectType, prefix, } = angularJSON.projects[projectName];
325
- const hasE2e = determineTargetProjectHasE2E(angularJSON, projectName);
326
- /**
327
- * If the root is an empty string it must be the initial project created at the
328
- * root by the Angular CLI's workspace schematic
329
- */
330
- if (projectRoot === '') {
331
- return createRootESLintConfigFile(projectName);
332
- }
333
- return (0, schematics_1.chain)([
334
- // If, for whatever reason, the root .eslintrc.json doesn't exist yet, create it
335
- tree.exists('.eslintrc.json')
336
- ? () => undefined
337
- : createRootESLintConfigFile(projectName),
338
- updateJsonInTree((0, core_1.join)((0, core_1.normalize)(projectRoot), '.eslintrc.json'), () => createProjectESLintConfig(projectRoot, projectType, prefix, setParserOptionsProject, hasE2e)),
339
- ]);
340
- };
341
370
  }
342
371
  exports.createESLintConfigForProject = createESLintConfigForProject;
343
- function createRootESLintConfigFile(projectName) {
344
- return (tree) => {
345
- const angularJSON = readJsonInTree(tree, getWorkspacePath(tree));
346
- let lintPrefix = null;
347
- if (angularJSON.projects?.[projectName]) {
348
- const { prefix } = angularJSON.projects[projectName];
349
- lintPrefix = prefix;
350
- }
351
- return updateJsonInTree('.eslintrc.json', () => createRootESLintConfig(lintPrefix));
352
- };
353
- }
354
- function createRootESLintConfigFile__NX(tree, prefix) {
355
- return (0, devkit_1.writeJson)(tree, '.eslintrc.json', createRootESLintConfig(prefix));
372
+ function createRootESLintConfigFile(tree, prefix, useFlatConfig) {
373
+ if (useFlatConfig) {
374
+ return tree.write('eslint.config.js', createStringifiedRootESLintConfig(prefix));
375
+ }
376
+ return (0, devkit_imports_1.writeJson)(tree, '.eslintrc.json', createRootESLintConfig(prefix));
356
377
  }
357
378
  function sortObjectByKeys(obj) {
358
379
  return Object.keys(obj)
@@ -365,22 +386,6 @@ function sortObjectByKeys(obj) {
365
386
  }, {});
366
387
  }
367
388
  exports.sortObjectByKeys = sortObjectByKeys;
368
- /**
369
- * To make certain schematic usage conversion more ergonomic, if the user does not specify a project
370
- * and only has a single project in their angular.json we will just go ahead and use that one.
371
- */
372
- function determineTargetProjectName__NX(tree, maybeProject) {
373
- if (maybeProject) {
374
- return maybeProject;
375
- }
376
- const workspaceJson = (0, devkit_1.readJson)(tree, 'angular.json');
377
- const projects = Object.keys(workspaceJson.projects);
378
- if (projects.length === 1) {
379
- return projects[0];
380
- }
381
- return null;
382
- }
383
- exports.determineTargetProjectName__NX = determineTargetProjectName__NX;
384
389
  /**
385
390
  * To make certain schematic usage conversion more ergonomic, if the user does not specify a project
386
391
  * and only has a single project in their angular.json we will just go ahead and use that one.
@@ -389,7 +394,7 @@ function determineTargetProjectName(tree, maybeProject) {
389
394
  if (maybeProject) {
390
395
  return maybeProject;
391
396
  }
392
- const workspaceJson = readJsonInTree(tree, getWorkspacePath(tree));
397
+ const workspaceJson = (0, devkit_imports_1.readJson)(tree, 'angular.json');
393
398
  const projects = Object.keys(workspaceJson.projects);
394
399
  if (projects.length === 1) {
395
400
  return projects[0];
@@ -397,15 +402,6 @@ function determineTargetProjectName(tree, maybeProject) {
397
402
  return null;
398
403
  }
399
404
  exports.determineTargetProjectName = determineTargetProjectName;
400
- /**
401
- * Checking if the target project has e2e setup
402
- * Method will check if angular project architect has e2e configuration to determine if e2e setup
403
- */
404
- function determineTargetProjectHasE2E(
405
- // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types, @typescript-eslint/no-explicit-any
406
- angularJSON, projectName) {
407
- return !!getTargetsConfigFromProject(angularJSON.projects[projectName])?.e2e;
408
- }
409
405
  /**
410
406
  * See `schematicCollections` docs here:
411
407
  * https://github.com/angular/angular-cli/blob/8431b3f0769b5f95b9e13807a09293d820c4b017/docs/specifications/schematic-collections-config.md
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular-eslint/schematics",
3
- "version": "18.0.0-alpha.1",
3
+ "version": "18.0.0-alpha.11",
4
4
  "description": "Angular Schematics for angular-eslint",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -31,11 +31,11 @@
31
31
  ]
32
32
  },
33
33
  "ng-add": {
34
- "save": "devDependencies"
34
+ "save": false
35
35
  },
36
36
  "dependencies": {
37
- "@angular-eslint/eslint-plugin": "18.0.0-alpha.1",
38
- "@angular-eslint/eslint-plugin-template": "18.0.0-alpha.1",
37
+ "@angular-eslint/eslint-plugin": "18.0.0-alpha.11",
38
+ "@angular-eslint/eslint-plugin-template": "18.0.0-alpha.11",
39
39
  "@nx/devkit": "^19.0.6",
40
40
  "ignore": "5.3.1",
41
41
  "nx": "^19.0.6",
@@ -44,8 +44,8 @@
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/tmp": "0.2.6",
47
- "@typescript-eslint/utils": "7.10.0",
48
- "eslint": "8.57.0"
47
+ "@typescript-eslint/utils": "8.0.0-alpha.17",
48
+ "eslint": "9.3.0"
49
49
  },
50
50
  "peerDependencies": {
51
51
  "@angular/cli": ">= 18.0.0 < 19.0.0"