@angular-eslint/eslint-plugin-template 20.1.2-alpha.9 → 20.2.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 +1 -0
- package/dist/configs/all.json +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/rules/conditional-complexity.js +1 -1
- package/dist/rules/no-empty-control-flow.d.ts +6 -0
- package/dist/rules/no-empty-control-flow.d.ts.map +1 -0
- package/dist/rules/no-empty-control-flow.js +63 -0
- package/dist/rules/prefer-contextual-for-variables.d.ts.map +1 -1
- package/dist/rules/prefer-contextual-for-variables.js +1 -0
- package/dist/utils/are-equivalent-asts.d.ts.map +1 -1
- package/dist/utils/are-equivalent-asts.js +0 -10
- package/package.json +5 -5
package/README.md
CHANGED
|
@@ -58,6 +58,7 @@ Please see https://github.com/angular-eslint/angular-eslint for full usage instr
|
|
|
58
58
|
| [`no-autofocus`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-autofocus.md) | [Accessibility] Ensures that the `autofocus` attribute is not used | | :wrench: | | :accessibility: |
|
|
59
59
|
| [`no-call-expression`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-call-expression.md) | Disallows calling expressions in templates, except for output handlers | | | | |
|
|
60
60
|
| [`no-distracting-elements`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-distracting-elements.md) | [Accessibility] Enforces that no distracting elements are used | | :wrench: | | :accessibility: |
|
|
61
|
+
| [`no-empty-control-flow`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-empty-control-flow.md) | Ensures that control flow blocks are not empty. Empty control flow blocks usually occur due to refactoring that wasn't completed. They can cause confusion when reading code. | | | | |
|
|
61
62
|
| [`no-inline-styles`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-inline-styles.md) | Disallows the use of inline styles in HTML templates | | | | |
|
|
62
63
|
| [`no-interpolation-in-attributes`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-interpolation-in-attributes.md) | Ensures that property-binding is used instead of interpolation in attributes. | | :wrench: | | |
|
|
63
64
|
| [`no-negated-async`](https://github.com/angular-eslint/angular-eslint/blob/main/packages/eslint-plugin-template/docs/rules/no-negated-async.md) | Ensures that async pipe results, as well as values used with the async pipe, are not negated | :white_check_mark: | | :bulb: | |
|
package/dist/configs/all.json
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
"@angular-eslint/template/no-call-expression": "error",
|
|
21
21
|
"@angular-eslint/template/no-distracting-elements": "error",
|
|
22
22
|
"@angular-eslint/template/no-duplicate-attributes": "error",
|
|
23
|
+
"@angular-eslint/template/no-empty-control-flow": "error",
|
|
23
24
|
"@angular-eslint/template/no-inline-styles": "error",
|
|
24
25
|
"@angular-eslint/template/no-interpolation-in-attributes": "error",
|
|
25
26
|
"@angular-eslint/template/no-negated-async": "error",
|
package/dist/index.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ declare const _default: {
|
|
|
22
22
|
"@angular-eslint/template/no-call-expression": string;
|
|
23
23
|
"@angular-eslint/template/no-distracting-elements": string;
|
|
24
24
|
"@angular-eslint/template/no-duplicate-attributes": string;
|
|
25
|
+
"@angular-eslint/template/no-empty-control-flow": string;
|
|
25
26
|
"@angular-eslint/template/no-inline-styles": string;
|
|
26
27
|
"@angular-eslint/template/no-interpolation-in-attributes": string;
|
|
27
28
|
"@angular-eslint/template/no-negated-async": string;
|
|
@@ -105,17 +106,18 @@ declare const _default: {
|
|
|
105
106
|
"no-call-expression": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noCallExpression", import("./rules/no-call-expression").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
106
107
|
"no-distracting-elements": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noDistractingElements", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
107
108
|
"no-duplicate-attributes": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/no-duplicate-attributes").MessageIds, import("./rules/no-duplicate-attributes").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
108
|
-
"no-
|
|
109
|
+
"no-empty-control-flow": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noEmptyControlFlow", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
109
110
|
"no-inline-styles": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noInlineStyles", import("./rules/no-inline-styles").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
110
111
|
"no-interpolation-in-attributes": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noInterpolationInAttributes", import("./rules/no-interpolation-in-attributes").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
111
112
|
"no-negated-async": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/no-negated-async").MessageIds, [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
113
|
+
"no-nested-tags": import("@typescript-eslint/utils/ts-eslint").RuleModule<"noNestedTags", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
112
114
|
"no-positive-tabindex": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/no-positive-tabindex").MessageIds, [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
113
115
|
"prefer-at-empty": import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferAtEmpty", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
114
116
|
"prefer-contextual-for-variables": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/prefer-contextual-for-variables").MessageIds, import("./rules/prefer-contextual-for-variables").Options, import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
115
117
|
"prefer-control-flow": import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferControlFlow", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
118
|
+
"prefer-ngsrc": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/prefer-ngsrc").MessageIds, [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
116
119
|
"prefer-self-closing-tags": import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferSelfClosingTags", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
117
120
|
"prefer-static-string-properties": import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferStaticStringProperties", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
118
|
-
"prefer-ngsrc": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/prefer-ngsrc").MessageIds, [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
119
121
|
"prefer-template-literal": import("@typescript-eslint/utils/ts-eslint").RuleModule<"preferTemplateLiteral", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
120
122
|
"role-has-required-aria": import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/role-has-required-aria").MessageIds, [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
121
123
|
"table-scope": import("@typescript-eslint/utils/ts-eslint").RuleModule<"tableScope", [], import("./utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqGA,kBA6CE"}
|
package/dist/index.js
CHANGED
|
@@ -58,6 +58,7 @@ const no_autofocus_1 = __importStar(require("./rules/no-autofocus"));
|
|
|
58
58
|
const no_call_expression_1 = __importStar(require("./rules/no-call-expression"));
|
|
59
59
|
const no_distracting_elements_1 = __importStar(require("./rules/no-distracting-elements"));
|
|
60
60
|
const no_duplicate_attributes_1 = __importStar(require("./rules/no-duplicate-attributes"));
|
|
61
|
+
const no_empty_control_flow_1 = __importStar(require("./rules/no-empty-control-flow"));
|
|
61
62
|
const no_inline_styles_1 = __importStar(require("./rules/no-inline-styles"));
|
|
62
63
|
const no_interpolation_in_attributes_1 = __importStar(require("./rules/no-interpolation-in-attributes"));
|
|
63
64
|
const no_negated_async_1 = __importStar(require("./rules/no-negated-async"));
|
|
@@ -101,17 +102,18 @@ module.exports = {
|
|
|
101
102
|
[no_call_expression_1.RULE_NAME]: no_call_expression_1.default,
|
|
102
103
|
[no_distracting_elements_1.RULE_NAME]: no_distracting_elements_1.default,
|
|
103
104
|
[no_duplicate_attributes_1.RULE_NAME]: no_duplicate_attributes_1.default,
|
|
104
|
-
[
|
|
105
|
+
[no_empty_control_flow_1.RULE_NAME]: no_empty_control_flow_1.default,
|
|
105
106
|
[no_inline_styles_1.RULE_NAME]: no_inline_styles_1.default,
|
|
106
107
|
[no_interpolation_in_attributes_1.RULE_NAME]: no_interpolation_in_attributes_1.default,
|
|
107
108
|
[no_negated_async_1.RULE_NAME]: no_negated_async_1.default,
|
|
109
|
+
[no_nested_tags_1.RULE_NAME]: no_nested_tags_1.default,
|
|
108
110
|
[no_positive_tabindex_1.RULE_NAME]: no_positive_tabindex_1.default,
|
|
109
111
|
[prefer_at_empty_1.RULE_NAME]: prefer_at_empty_1.default,
|
|
110
112
|
[prefer_contextual_for_variables_1.RULE_NAME]: prefer_contextual_for_variables_1.default,
|
|
111
113
|
[prefer_control_flow_1.RULE_NAME]: prefer_control_flow_1.default,
|
|
114
|
+
[prefer_ngsrc_1.RULE_NAME]: prefer_ngsrc_1.default,
|
|
112
115
|
[prefer_self_closing_tags_1.RULE_NAME]: prefer_self_closing_tags_1.default,
|
|
113
116
|
[prefer_static_string_properties_1.RULE_NAME]: prefer_static_string_properties_1.default,
|
|
114
|
-
[prefer_ngsrc_1.RULE_NAME]: prefer_ngsrc_1.default,
|
|
115
117
|
[prefer_template_literal_1.RULE_NAME]: prefer_template_literal_1.default,
|
|
116
118
|
[role_has_required_aria_1.RULE_NAME]: role_has_required_aria_1.default,
|
|
117
119
|
[table_scope_1.RULE_NAME]: table_scope_1.default,
|
|
@@ -39,7 +39,7 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
39
39
|
if (!node.value.source || node.value.ast instanceof bundled_angular_compiler_1.Interpolation) {
|
|
40
40
|
return;
|
|
41
41
|
}
|
|
42
|
-
const possibleBinary = extractPossibleBinaryOrConditionalFrom(getParser().parseBinding(node.value.source,
|
|
42
|
+
const possibleBinary = extractPossibleBinaryOrConditionalFrom(getParser().parseBinding(node.value.source, node.valueSpan, 0).ast);
|
|
43
43
|
const totalComplexity = getTotalComplexity(possibleBinary);
|
|
44
44
|
if (totalComplexity <= maxComplexity) {
|
|
45
45
|
return;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type Options = [];
|
|
2
|
+
export type MessageIds = 'noEmptyControlFlow';
|
|
3
|
+
export declare const RULE_NAME = "no-empty-control-flow";
|
|
4
|
+
declare const _default: import("@typescript-eslint/utils/ts-eslint").RuleModule<"noEmptyControlFlow", [], import("../utils/create-eslint-rule").RuleDocs, import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
5
|
+
export default _default;
|
|
6
|
+
//# sourceMappingURL=no-empty-control-flow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"no-empty-control-flow.d.ts","sourceRoot":"","sources":["../../src/rules/no-empty-control-flow.ts"],"names":[],"mappings":"AAYA,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB,MAAM,MAAM,UAAU,GAAG,oBAAoB,CAAC;AAC9C,eAAO,MAAM,SAAS,0BAA0B,CAAC;;AAEjD,wBA0EG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RULE_NAME = void 0;
|
|
4
|
+
const utils_1 = require("@angular-eslint/utils");
|
|
5
|
+
const create_eslint_rule_1 = require("../utils/create-eslint-rule");
|
|
6
|
+
exports.RULE_NAME = 'no-empty-control-flow';
|
|
7
|
+
exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
8
|
+
name: exports.RULE_NAME,
|
|
9
|
+
meta: {
|
|
10
|
+
type: 'suggestion',
|
|
11
|
+
docs: {
|
|
12
|
+
description: "Ensures that control flow blocks are not empty. Empty control flow blocks usually occur due to refactoring that wasn't completed. They can cause confusion when reading code.",
|
|
13
|
+
},
|
|
14
|
+
schema: [],
|
|
15
|
+
messages: {
|
|
16
|
+
noEmptyControlFlow: 'Unexpected empty control flow block.',
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
defaultOptions: [],
|
|
20
|
+
create(context) {
|
|
21
|
+
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
22
|
+
return {
|
|
23
|
+
'ForLoopBlockEmpty,IfBlockBranch,SwitchBlockCase'(node) {
|
|
24
|
+
if (node.children.length === 0 ||
|
|
25
|
+
isEmpty(node.startSourceSpan.end, node.endSourceSpan?.start)) {
|
|
26
|
+
report(node);
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
ForLoopBlock(node) {
|
|
30
|
+
if (node.children.length === 0 ||
|
|
31
|
+
// Like other block nodes, the start source span covers the opening
|
|
32
|
+
// `@for (...) {` part, but the end source span is the closing `}`
|
|
33
|
+
// at the end of the entire block, which might be after the `@empty {`
|
|
34
|
+
// part. The main block span ends at the `}` that ends the content of
|
|
35
|
+
// the `@for` block before the `@empty` block. Because it includes
|
|
36
|
+
// the closing brace, we need to move it back by one.
|
|
37
|
+
isEmpty(node.startSourceSpan.end, node.mainBlockSpan.end.moveBy(-1))) {
|
|
38
|
+
report(node);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
SwitchBlock(node) {
|
|
42
|
+
// A switch block is pointless without cases, so
|
|
43
|
+
// if there are no cases, don't bother checking
|
|
44
|
+
// if there's non-whitespace characters within it.
|
|
45
|
+
if (node.cases.length === 0) {
|
|
46
|
+
report(node);
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
function isEmpty(contentStart, contentEnd) {
|
|
51
|
+
return (!!contentEnd &&
|
|
52
|
+
context.sourceCode.text
|
|
53
|
+
.slice(contentStart.offset, contentEnd.offset)
|
|
54
|
+
.trim() === '');
|
|
55
|
+
}
|
|
56
|
+
function report(node) {
|
|
57
|
+
context.report({
|
|
58
|
+
messageId: 'noEmptyControlFlow',
|
|
59
|
+
loc: parserServices.convertNodeSourceSpanToLoc(node.nameSpan),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prefer-contextual-for-variables.d.ts","sourceRoot":"","sources":["../../src/rules/prefer-contextual-for-variables.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,OAAO,GAAG;IACpB;QACE,QAAQ,CAAC,cAAc,CAAC,EAAE;YACxB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC1B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;SAC1B,CAAC;KACH;CACF,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,0BAA0B,GAC1B,aAAa,GACb,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,WAAW,CAAC;AAChB,eAAO,MAAM,SAAS,oCAAoC,CAAC;;AAc3D,
|
|
1
|
+
{"version":3,"file":"prefer-contextual-for-variables.d.ts","sourceRoot":"","sources":["../../src/rules/prefer-contextual-for-variables.ts"],"names":[],"mappings":"AAoBA,MAAM,MAAM,OAAO,GAAG;IACpB;QACE,QAAQ,CAAC,cAAc,CAAC,EAAE;YACxB,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC1B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;SAC1B,CAAC;KACH;CACF,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,0BAA0B,GAC1B,aAAa,GACb,aAAa,GACb,YAAY,GACZ,YAAY,GACZ,WAAW,CAAC;AAChB,eAAO,MAAM,SAAS,oCAAoC,CAAC;;AAc3D,wBAkaG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"are-equivalent-asts.d.ts","sourceRoot":"","sources":["../../src/utils/are-equivalent-asts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,
|
|
1
|
+
{"version":3,"file":"are-equivalent-asts.d.ts","sourceRoot":"","sources":["../../src/utils/are-equivalent-asts.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,GAAG,EAqBJ,MAAM,0CAA0C,CAAC;AAElD,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,GAAG,OAAO,CA4IzD"}
|
|
@@ -94,16 +94,6 @@ function areEquivalentASTs(a, b) {
|
|
|
94
94
|
if (a instanceof bundled_angular_compiler_1.Chain && b instanceof bundled_angular_compiler_1.Chain) {
|
|
95
95
|
return areEquivalentASTArrays(a.expressions, b.expressions);
|
|
96
96
|
}
|
|
97
|
-
if (a instanceof bundled_angular_compiler_1.PropertyWrite && b instanceof bundled_angular_compiler_1.PropertyWrite) {
|
|
98
|
-
return (a.name === b.name &&
|
|
99
|
-
areEquivalentASTs(a.receiver, b.receiver) &&
|
|
100
|
-
areEquivalentASTs(a.value, b.value));
|
|
101
|
-
}
|
|
102
|
-
if (a instanceof bundled_angular_compiler_1.KeyedWrite && b instanceof bundled_angular_compiler_1.KeyedWrite) {
|
|
103
|
-
return (areEquivalentASTs(a.key, b.key) &&
|
|
104
|
-
areEquivalentASTs(a.receiver, b.receiver) &&
|
|
105
|
-
areEquivalentASTs(a.value, b.value));
|
|
106
|
-
}
|
|
107
97
|
if (a instanceof bundled_angular_compiler_1.TypeofExpression && b instanceof bundled_angular_compiler_1.TypeofExpression) {
|
|
108
98
|
return areEquivalentASTs(a.expression, b.expression);
|
|
109
99
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-eslint/eslint-plugin-template",
|
|
3
|
-
"version": "20.
|
|
3
|
+
"version": "20.2.0",
|
|
4
4
|
"description": "ESLint plugin for Angular Templates",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,19 +20,19 @@
|
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"aria-query": "5.3.2",
|
|
22
22
|
"axobject-query": "4.1.0",
|
|
23
|
-
"@angular-eslint/bundled-angular-compiler": "20.
|
|
24
|
-
"@angular-eslint/utils": "20.
|
|
23
|
+
"@angular-eslint/bundled-angular-compiler": "20.2.0",
|
|
24
|
+
"@angular-eslint/utils": "20.2.0"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@types/aria-query": "5.0.4",
|
|
28
|
-
"@angular-eslint/test-utils": "20.
|
|
28
|
+
"@angular-eslint/test-utils": "20.2.0"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@typescript-eslint/types": "^7.11.0 || ^8.0.0",
|
|
32
32
|
"@typescript-eslint/utils": "^7.11.0 || ^8.0.0",
|
|
33
33
|
"eslint": "^8.57.0 || ^9.0.0",
|
|
34
34
|
"typescript": "*",
|
|
35
|
-
"@angular-eslint/template-parser": "20.
|
|
35
|
+
"@angular-eslint/template-parser": "20.2.0"
|
|
36
36
|
},
|
|
37
37
|
"gitHead": "e2006e5e9c99e5a943d1a999e0efa5247d29ec24"
|
|
38
38
|
}
|