@angular-eslint/eslint-plugin 20.7.1-alpha.0 → 21.0.1-alpha.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/README.md CHANGED
@@ -52,7 +52,6 @@ Please see https://github.com/angular-eslint/angular-eslint for full usage instr
52
52
  | [`contextual-decorator`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/contextual-decorator.md) | Ensures that classes use contextual decorators in their body | | | |
53
53
  | [`directive-class-suffix`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/directive-class-suffix.md) | Classes decorated with @Directive must have suffix "Directive" (or custom) in their name. Note: As of v20, this is no longer recommended by the Angular Team. | | | |
54
54
  | [`directive-selector`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/directive-selector.md) | Directive selectors should follow given naming rules. See more at https://angular.dev/style-guide#choosing-directive-selectors. | | | |
55
- | [`no-conflicting-lifecycle`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/no-conflicting-lifecycle.md) | Ensures that directives do not implement conflicting lifecycle interfaces. | | | |
56
55
  | [`no-duplicates-in-metadata-arrays`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/no-duplicates-in-metadata-arrays.md) | Ensures that metadata arrays do not contain duplicate entries. | | | |
57
56
  | [`no-empty-lifecycle-method`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/no-empty-lifecycle-method.md) | Disallows declaring empty lifecycle methods | :white_check_mark: | | :bulb: |
58
57
  | [`no-forward-ref`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/no-forward-ref.md) | Disallows usage of `forwardRef` references for DI | | | |
@@ -94,4 +93,12 @@ Please see https://github.com/angular-eslint/angular-eslint for full usage instr
94
93
 
95
94
  <!-- begin deprecated rule list -->
96
95
 
96
+ ### Deprecated
97
+
98
+ <!-- prettier-ignore-start -->
99
+ | Rule | Replaced by |
100
+ | --- | --- |
101
+ | [`no-conflicting-lifecycle`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin/docs/rules/no-conflicting-lifecycle.md) | |
102
+ <!-- prettier-ignore-end -->
103
+
97
104
  <!-- end deprecated rule list -->
@@ -12,7 +12,6 @@
12
12
  "@angular-eslint/directive-selector": "error",
13
13
  "@angular-eslint/no-async-lifecycle-method": "error",
14
14
  "@angular-eslint/no-attribute-decorator": "error",
15
- "@angular-eslint/no-conflicting-lifecycle": "error",
16
15
  "@angular-eslint/no-developer-preview": "error",
17
16
  "@angular-eslint/no-duplicates-in-metadata-arrays": "error",
18
17
  "@angular-eslint/no-empty-lifecycle-method": "error",
package/dist/index.d.ts CHANGED
@@ -14,7 +14,6 @@ declare const _default: {
14
14
  "@angular-eslint/directive-selector": string;
15
15
  "@angular-eslint/no-async-lifecycle-method": string;
16
16
  "@angular-eslint/no-attribute-decorator": string;
17
- "@angular-eslint/no-conflicting-lifecycle": string;
18
17
  "@angular-eslint/no-developer-preview": string;
19
18
  "@angular-eslint/no-duplicates-in-metadata-arrays": string;
20
19
  "@angular-eslint/no-empty-lifecycle-method": string;
@@ -74,12 +73,12 @@ declare const _default: {
74
73
  rules: {
75
74
  "component-class-suffix": import("@typescript-eslint/utils/ts-eslint").RuleModule<"componentClassSuffix", import("./rules/component-class-suffix").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
76
75
  "component-max-inline-declarations": import("@typescript-eslint/utils/ts-eslint").RuleModule<"componentMaxInlineDeclarations", import("./rules/component-max-inline-declarations").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
77
- "component-selector": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/component-selector").MessageIds, import("@angular-eslint/utils/dist/eslint-plugin/selector-utils").RuleOptions, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
76
+ "component-selector": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/component-selector").MessageIds, import("./rules/component-selector").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
78
77
  "consistent-component-styles": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/consistent-component-styles").MessageIds, import("./rules/consistent-component-styles").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
79
78
  "contextual-decorator": import("@typescript-eslint/utils/ts-eslint").RuleModule<"contextualDecorator", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
80
79
  "contextual-lifecycle": import("@typescript-eslint/utils/ts-eslint").RuleModule<"contextualLifecycle", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
81
80
  "directive-class-suffix": import("@typescript-eslint/utils/ts-eslint").RuleModule<"directiveClassSuffix", import("./rules/directive-class-suffix").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
82
- "directive-selector": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/directive-selector").MessageIds, import("@angular-eslint/utils/dist/eslint-plugin/selector-utils").RuleOptions, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
81
+ "directive-selector": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/directive-selector").MessageIds, import("./rules/directive-selector").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
83
82
  "no-async-lifecycle-method": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noAsyncLifecycleMethod", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
84
83
  "no-attribute-decorator": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noAttributeDecorator", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
85
84
  "no-conflicting-lifecycle": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/no-conflicting-lifecycle").MessageIds, [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IA,kBAsDE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8IA,kBAsDE"}
@@ -1,8 +1,10 @@
1
1
  import { SelectorUtils } from '@angular-eslint/utils';
2
- export type Options = SelectorUtils.RuleOptions;
2
+ export type Options = readonly [
3
+ SelectorUtils.SingleConfigOption | SelectorUtils.MultipleConfigOption
4
+ ];
3
5
  export type MessageIds = 'prefixFailure' | 'styleFailure' | 'styleAndPrefixFailure' | 'typeFailure' | 'shadowDomEncapsulatedStyleFailure' | 'selectorAfterPrefixFailure';
4
6
  export declare const RULE_NAME = "component-selector";
5
- declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, SelectorUtils.RuleOptions, import("../utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, Options, import("../utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
6
8
  export default _default;
7
9
  export declare const RULE_DOCS_EXTENSION: {
8
10
  rationale: string;
@@ -1 +1 @@
1
- {"version":3,"file":"component-selector.d.ts","sourceRoot":"","sources":["../../src/rules/component-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACd,MAAM,uBAAuB,CAAC;AAK/B,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC;AAChD,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,cAAc,GACd,uBAAuB,GACvB,aAAa,GACb,mCAAmC,GACnC,4BAA4B,CAAC;AACjC,eAAO,MAAM,SAAS,uBAAuB,CAAC;;AAS9C,wBAsLG;AAiBH,eAAO,MAAM,mBAAmB;;CAG/B,CAAC"}
1
+ {"version":3,"file":"component-selector.d.ts","sourceRoot":"","sources":["../../src/rules/component-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACd,MAAM,uBAAuB,CAAC;AAK/B,MAAM,MAAM,OAAO,GAAG,SAAS;IAC7B,aAAa,CAAC,kBAAkB,GAAG,aAAa,CAAC,oBAAoB;CACtE,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,cAAc,GACd,uBAAuB,GACvB,aAAa,GACb,mCAAmC,GACnC,4BAA4B,CAAC;AACjC,eAAO,MAAM,SAAS,uBAAuB,CAAC;;AAS9C,wBAgOG;AAiBH,eAAO,MAAM,mBAAmB;;CAG/B,CAAC"}
@@ -49,6 +49,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
49
49
  ],
50
50
  },
51
51
  },
52
+ required: ['type', 'style'],
52
53
  additionalProperties: false,
53
54
  },
54
55
  // Array of 1-2 config objects
@@ -76,7 +77,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
76
77
  },
77
78
  },
78
79
  additionalProperties: false,
79
- required: ['type'],
80
+ required: ['type', 'style'],
80
81
  },
81
82
  minItems: 1,
82
83
  maxItems: 2,
@@ -95,12 +96,16 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
95
96
  },
96
97
  defaultOptions: [
97
98
  {
98
- type: '',
99
- prefix: '',
100
- style: '',
99
+ type: undefined,
100
+ prefix: 'app', // Match default Angular CLI prefix
101
+ style: undefined,
101
102
  },
102
103
  ],
103
104
  create(context, [options]) {
105
+ // Options are required by schema, so if undefined, ESLint will throw an error
106
+ if (!options) {
107
+ return {};
108
+ }
104
109
  // Normalize options to a consistent format using shared utility
105
110
  const configByType = utils_1.SelectorUtils.normalizeOptionsToConfigs(options);
106
111
  return {
@@ -128,21 +133,52 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
128
133
  hasEncapsulationShadowDomProperty(node)
129
134
  ? utils_1.ASTUtils.OPTION_STYLE_KEBAB_CASE
130
135
  : style;
131
- const hasExpectedSelector = utils_1.SelectorUtils.checkSelector(rawSelectors, type, (0, utils_1.arrayify)(prefix), overrideStyle, parsedSelectors);
136
+ const hasExpectedSelector = utils_1.SelectorUtils.checkSelector(rawSelectors, type, prefix, overrideStyle, parsedSelectors);
132
137
  if (hasExpectedSelector === null) {
133
138
  return;
134
139
  }
140
+ // Special check for ShadowDom-encapsulated components
141
+ // They must have a hyphen in the selector (e.g., 'app-selector' not 'appSelector')
142
+ const isShadowDom = style !== overrideStyle;
143
+ if (isShadowDom) {
144
+ // For ShadowDom components, check if any selector contains a hyphen
145
+ // We need to check the raw selector values from parsedSelectors
146
+ const hasHyphen = parsedSelectors.some((selector) => {
147
+ // Check if the element selector contains a hyphen
148
+ return selector.element && selector.element.includes('-');
149
+ });
150
+ if (!hasHyphen) {
151
+ context.report({
152
+ node: rawSelectors,
153
+ messageId: 'shadowDomEncapsulatedStyleFailure',
154
+ });
155
+ return;
156
+ }
157
+ }
135
158
  // Component-specific validation logic (includes styleAndPrefixFailure)
136
159
  if (!hasExpectedSelector.hasExpectedType) {
137
160
  utils_1.SelectorUtils.reportTypeError(rawSelectors, type, context);
138
161
  }
139
162
  else if (!hasExpectedSelector.hasSelectorAfterPrefix) {
140
- utils_1.SelectorUtils.reportSelectorAfterPrefixError(rawSelectors, prefix, context);
163
+ // Only report selector after prefix error if prefix is actually required
164
+ if (prefix !== undefined) {
165
+ const prefixArray = (0, utils_1.arrayify)(prefix);
166
+ if (prefixArray.length > 0) {
167
+ utils_1.SelectorUtils.reportSelectorAfterPrefixError(rawSelectors, prefix, context);
168
+ }
169
+ }
141
170
  }
142
171
  else if (!hasExpectedSelector.hasExpectedStyle) {
143
172
  if (style === overrideStyle) {
144
173
  if (!hasExpectedSelector.hasExpectedPrefix) {
145
- utils_1.SelectorUtils.reportStyleAndPrefixError(rawSelectors, style, prefix, context);
174
+ if (prefix !== undefined) {
175
+ // Only report style and prefix error if prefix is actually required
176
+ utils_1.SelectorUtils.reportStyleAndPrefixError(rawSelectors, style, prefix, context);
177
+ }
178
+ else {
179
+ // If no prefix required, just report style error
180
+ utils_1.SelectorUtils.reportStyleError(rawSelectors, style, context);
181
+ }
146
182
  }
147
183
  else {
148
184
  utils_1.SelectorUtils.reportStyleError(rawSelectors, style, context);
@@ -156,7 +192,13 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
156
192
  }
157
193
  }
158
194
  else if (!hasExpectedSelector.hasExpectedPrefix) {
159
- utils_1.SelectorUtils.reportPrefixError(rawSelectors, prefix, context);
195
+ // Only report prefix error if prefix is actually required (not empty)
196
+ if (prefix !== undefined) {
197
+ const prefixArray = (0, utils_1.arrayify)(prefix);
198
+ if (prefixArray.length > 0) {
199
+ utils_1.SelectorUtils.reportPrefixError(rawSelectors, prefix, context);
200
+ }
201
+ }
160
202
  }
161
203
  },
162
204
  };
@@ -1,8 +1,10 @@
1
1
  import { SelectorUtils } from '@angular-eslint/utils';
2
- export type Options = SelectorUtils.RuleOptions;
2
+ export type Options = readonly [
3
+ SelectorUtils.SingleConfigOption | SelectorUtils.MultipleConfigOption
4
+ ];
3
5
  export type MessageIds = 'prefixFailure' | 'styleFailure' | 'typeFailure' | 'selectorAfterPrefixFailure';
4
6
  export declare const RULE_NAME = "directive-selector";
5
- declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, SelectorUtils.RuleOptions, import("../utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
7
+ declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<MessageIds, Options, import("../utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
6
8
  export default _default;
7
9
  export declare const RULE_DOCS_EXTENSION: {
8
10
  rationale: string;
@@ -1 +1 @@
1
- {"version":3,"file":"directive-selector.d.ts","sourceRoot":"","sources":["../../src/rules/directive-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACd,MAAM,uBAAuB,CAAC;AAI/B,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC;AAChD,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,cAAc,GACd,aAAa,GACb,4BAA4B,CAAC;AACjC,eAAO,MAAM,SAAS,uBAAuB,CAAC;;AAE9C,wBA+JG;AAEH,eAAO,MAAM,mBAAmB;;CAG/B,CAAC"}
1
+ {"version":3,"file":"directive-selector.d.ts","sourceRoot":"","sources":["../../src/rules/directive-selector.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACd,MAAM,uBAAuB,CAAC;AAI/B,MAAM,MAAM,OAAO,GAAG,SAAS;IAC7B,aAAa,CAAC,kBAAkB,GAAG,aAAa,CAAC,oBAAoB;CACtE,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,cAAc,GACd,aAAa,GACb,4BAA4B,CAAC;AACjC,eAAO,MAAM,SAAS,uBAAuB,CAAC;;AAE9C,wBA6KG;AAEH,eAAO,MAAM,mBAAmB;;CAG/B,CAAC"}
@@ -44,6 +44,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
44
44
  ],
45
45
  },
46
46
  },
47
+ required: ['type', 'style'],
47
48
  additionalProperties: false,
48
49
  },
49
50
  // Array of 1-2 config objects
@@ -71,7 +72,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
71
72
  },
72
73
  },
73
74
  additionalProperties: false,
74
- required: ['type'],
75
+ required: ['type', 'style'],
75
76
  },
76
77
  minItems: 1,
77
78
  maxItems: 2,
@@ -88,12 +89,16 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
88
89
  },
89
90
  defaultOptions: [
90
91
  {
91
- type: '',
92
- prefix: '',
93
- style: '',
92
+ type: undefined,
93
+ prefix: 'app', // Match default Angular CLI prefix
94
+ style: undefined,
94
95
  },
95
96
  ],
96
97
  create(context, [options]) {
98
+ // Options are required by schema, so if undefined, ESLint will throw an error
99
+ if (!options) {
100
+ return {};
101
+ }
97
102
  // Normalize options to a consistent format using shared utility
98
103
  const configByType = utils_1.SelectorUtils.normalizeOptionsToConfigs(options);
99
104
  return {
@@ -116,7 +121,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
116
121
  if (!isValidOptions) {
117
122
  return;
118
123
  }
119
- const hasExpectedSelector = utils_1.SelectorUtils.checkSelector(rawSelectors, type, (0, utils_1.arrayify)(prefix), style, parsedSelectors);
124
+ const hasExpectedSelector = utils_1.SelectorUtils.checkSelector(rawSelectors, type, prefix, style, parsedSelectors);
120
125
  if (hasExpectedSelector === null) {
121
126
  return;
122
127
  }
@@ -125,13 +130,22 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
125
130
  utils_1.SelectorUtils.reportTypeError(rawSelectors, type, context);
126
131
  }
127
132
  else if (!hasExpectedSelector.hasSelectorAfterPrefix) {
128
- utils_1.SelectorUtils.reportSelectorAfterPrefixError(rawSelectors, prefix, context);
133
+ // Only report selector after prefix error if prefix is actually required
134
+ if (prefix !== undefined) {
135
+ utils_1.SelectorUtils.reportSelectorAfterPrefixError(rawSelectors, prefix, context);
136
+ }
129
137
  }
130
138
  else if (!hasExpectedSelector.hasExpectedStyle) {
131
139
  utils_1.SelectorUtils.reportStyleError(rawSelectors, style, context);
132
140
  }
133
141
  else if (!hasExpectedSelector.hasExpectedPrefix) {
134
- utils_1.SelectorUtils.reportPrefixError(rawSelectors, prefix, context);
142
+ // Only report prefix error if prefix is actually required (not empty)
143
+ if (prefix !== undefined) {
144
+ const prefixArray = (0, utils_1.arrayify)(prefix);
145
+ if (prefixArray.length > 0) {
146
+ utils_1.SelectorUtils.reportPrefixError(rawSelectors, prefix, context);
147
+ }
148
+ }
135
149
  }
136
150
  },
137
151
  };
@@ -1 +1 @@
1
- {"version":3,"file":"no-conflicting-lifecycle.d.ts","sourceRoot":"","sources":["../../src/rules/no-conflicting-lifecycle.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,MAAM,UAAU,GAClB,iCAAiC,GACjC,8BAA8B,CAAC;AACnC,eAAO,MAAM,SAAS,6BAA6B,CAAC;;AAWpD,wBA6EG;AAEH,eAAO,MAAM,mBAAmB;;CAG/B,CAAC"}
1
+ {"version":3,"file":"no-conflicting-lifecycle.d.ts","sourceRoot":"","sources":["../../src/rules/no-conflicting-lifecycle.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,MAAM,UAAU,GAClB,iCAAiC,GACjC,8BAA8B,CAAC;AACnC,eAAO,MAAM,SAAS,6BAA6B,CAAC;;AAWpD,wBA8EG;AAEH,eAAO,MAAM,mBAAmB;;CAG/B,CAAC"}
@@ -17,6 +17,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
17
17
  name: exports.RULE_NAME,
18
18
  meta: {
19
19
  type: 'suggestion',
20
+ deprecated: true,
20
21
  docs: {
21
22
  description: 'Ensures that directives do not implement conflicting lifecycle interfaces.',
22
23
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@angular-eslint/eslint-plugin",
3
- "version": "20.7.1-alpha.0",
3
+ "version": "21.0.1-alpha.0",
4
4
  "description": "ESLint plugin for Angular applications, following https://angular.dev/style-guide",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -19,11 +19,11 @@
19
19
  ],
20
20
  "dependencies": {
21
21
  "ts-api-utils": "^2.1.0",
22
- "@angular-eslint/bundled-angular-compiler": "20.7.1-alpha.0",
23
- "@angular-eslint/utils": "20.7.1-alpha.0"
22
+ "@angular-eslint/bundled-angular-compiler": "21.0.1-alpha.0",
23
+ "@angular-eslint/utils": "21.0.1-alpha.0"
24
24
  },
25
25
  "devDependencies": {
26
- "@angular-eslint/test-utils": "20.7.1-alpha.0"
26
+ "@angular-eslint/test-utils": "21.0.1-alpha.0"
27
27
  },
28
28
  "peerDependencies": {
29
29
  "@typescript-eslint/utils": "^7.11.0 || ^8.0.0",