@angular-eslint/eslint-plugin-template 17.4.2-alpha.7 → 17.5.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/rules/i18n.d.ts +2 -1
- package/dist/rules/i18n.d.ts.map +1 -1
- package/dist/rules/i18n.js +24 -7
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -100,6 +100,7 @@ declare const _default: {
|
|
|
100
100
|
readonly allowNullOrUndefined?: boolean | undefined;
|
|
101
101
|
}], import("@typescript-eslint/utils/ts-eslint").RuleListener>;
|
|
102
102
|
i18n: import("@typescript-eslint/utils/ts-eslint").RuleModule<import("./rules/i18n").MessageIds, [{
|
|
103
|
+
readonly allowMarkupInContent?: boolean | undefined;
|
|
103
104
|
readonly boundTextAllowedPattern?: string | undefined;
|
|
104
105
|
readonly checkAttributes?: boolean | undefined;
|
|
105
106
|
readonly checkDuplicateId?: boolean | undefined;
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,kBAuCE"}
|
package/dist/rules/i18n.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { TSESLint } from '@typescript-eslint/utils';
|
|
2
2
|
type Options = [
|
|
3
3
|
{
|
|
4
|
+
readonly allowMarkupInContent?: boolean;
|
|
4
5
|
readonly boundTextAllowedPattern?: string;
|
|
5
6
|
readonly checkAttributes?: boolean;
|
|
6
7
|
readonly checkDuplicateId?: boolean;
|
|
@@ -12,7 +13,7 @@ type Options = [
|
|
|
12
13
|
readonly requireMeaning?: boolean;
|
|
13
14
|
}
|
|
14
15
|
];
|
|
15
|
-
export type MessageIds = 'i18nAttribute' | 'i18nAttributeOnIcuOrText' | 'i18nCustomIdOnAttribute' | 'i18nCustomIdOnElement' | 'i18nDuplicateCustomId' | 'suggestAddI18nAttribute' | 'i18nMissingDescription' | 'i18nMissingMeaning';
|
|
16
|
+
export type MessageIds = 'i18nAttribute' | 'i18nAttributeOnIcuOrText' | 'i18nCustomIdOnAttribute' | 'i18nCustomIdOnElement' | 'i18nDuplicateCustomId' | 'suggestAddI18nAttribute' | 'i18nMissingDescription' | 'i18nMissingMeaning' | 'i18nMarkupInContent';
|
|
16
17
|
export declare const RULE_NAME = "i18n";
|
|
17
18
|
declare const _default: TSESLint.RuleModule<MessageIds, Options, TSESLint.RuleListener>;
|
|
18
19
|
export default _default;
|
package/dist/rules/i18n.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/rules/i18n.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AA6CnE,KAAK,OAAO,GAAG;IACb;QACE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;QAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;KACnC;CACF,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,0BAA0B,GAC1B,yBAAyB,GACzB,uBAAuB,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,wBAAwB,GACxB,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/rules/i18n.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,QAAQ,EAAY,MAAM,0BAA0B,CAAC;AA6CnE,KAAK,OAAO,GAAG;IACb;QACE,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;QACxC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;QAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;QACnC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;QACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAC7B,QAAQ,CAAC,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACxC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;QACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;KACnC;CACF,CAAC;AACF,MAAM,MAAM,UAAU,GAClB,eAAe,GACf,0BAA0B,GAC1B,yBAAyB,GACzB,uBAAuB,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,wBAAwB,GACxB,oBAAoB,GACpB,qBAAqB,CAAC;AAqB1B,eAAO,MAAM,SAAS,SAAS,CAAC;;AAkBhC,wBAsUG"}
|
package/dist/rules/i18n.js
CHANGED
|
@@ -46,6 +46,7 @@ const DEFAULT_ALLOWED_ATTRIBUTES = new Set([
|
|
|
46
46
|
]);
|
|
47
47
|
exports.RULE_NAME = 'i18n';
|
|
48
48
|
const DEFAULT_OPTIONS = {
|
|
49
|
+
allowMarkupInContent: true,
|
|
49
50
|
checkAttributes: true,
|
|
50
51
|
checkId: true,
|
|
51
52
|
checkDuplicateId: true,
|
|
@@ -77,6 +78,10 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
77
78
|
{
|
|
78
79
|
type: 'object',
|
|
79
80
|
properties: {
|
|
81
|
+
allowMarkupInContent: {
|
|
82
|
+
type: 'boolean',
|
|
83
|
+
default: DEFAULT_OPTIONS.allowMarkupInContent,
|
|
84
|
+
},
|
|
80
85
|
boundTextAllowedPattern: {
|
|
81
86
|
type: 'string',
|
|
82
87
|
},
|
|
@@ -130,12 +135,13 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
130
135
|
suggestAddI18nAttribute: 'Add the `i18n` attribute',
|
|
131
136
|
i18nMissingDescription: `Missing i18n description on element. See more at ${STYLE_GUIDE_LINK_METADATA_FOR_TRANSLATION}`,
|
|
132
137
|
i18nMissingMeaning: `Missing i18n meaning on element. See more at ${STYLE_GUIDE_LINK_METADATA_FOR_TRANSLATION}`,
|
|
138
|
+
i18nMarkupInContent: 'Avoid HTML markup in an element with an i18n attribute.',
|
|
133
139
|
},
|
|
134
140
|
},
|
|
135
141
|
defaultOptions: [DEFAULT_OPTIONS],
|
|
136
|
-
create(context, [{ boundTextAllowedPattern, checkAttributes, checkId, checkDuplicateId, checkText, ignoreAttributes, ignoreTags, requireDescription, requireMeaning, },]) {
|
|
142
|
+
create(context, [{ allowMarkupInContent, boundTextAllowedPattern, checkAttributes, checkId, checkDuplicateId, checkText, ignoreAttributes, ignoreTags, requireDescription, requireMeaning, },]) {
|
|
137
143
|
const parserServices = (0, utils_1.getTemplateParserServices)(context);
|
|
138
|
-
const sourceCode = context.
|
|
144
|
+
const sourceCode = context.sourceCode;
|
|
139
145
|
const allowedBoundTextPattern = boundTextAllowedPattern
|
|
140
146
|
? new RegExp(boundTextAllowedPattern)
|
|
141
147
|
: DEFAULT_ALLOWED_BOUND_TEXT_PATTERN;
|
|
@@ -155,12 +161,20 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
155
161
|
function handleElementOrTemplate(node) {
|
|
156
162
|
const { i18n, sourceSpan } = node;
|
|
157
163
|
const parent = getNextElementOrTemplateParent(node);
|
|
158
|
-
if (isTagAllowed(allowedTags, node)
|
|
159
|
-
isElementWithI18n(parent) ||
|
|
160
|
-
isNgTemplateWithI18n(parent)) {
|
|
164
|
+
if (isTagAllowed(allowedTags, node)) {
|
|
161
165
|
return;
|
|
162
166
|
}
|
|
163
167
|
const loc = parserServices.convertNodeSourceSpanToLoc(sourceSpan);
|
|
168
|
+
if (isElementWithI18n(parent) || isNgTemplateWithI18n(parent)) {
|
|
169
|
+
if (allowMarkupInContent) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
context.report({
|
|
173
|
+
messageId: 'i18nMarkupInContent',
|
|
174
|
+
loc,
|
|
175
|
+
});
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
164
178
|
const customId = getI18nCustomId(i18n);
|
|
165
179
|
if (checkId) {
|
|
166
180
|
if (!customId) {
|
|
@@ -269,8 +283,11 @@ exports.default = (0, create_eslint_rule_1.createESLintRule)({
|
|
|
269
283
|
collectedCustomIds.clear();
|
|
270
284
|
}
|
|
271
285
|
return {
|
|
272
|
-
...((
|
|
273
|
-
|
|
286
|
+
...((!allowMarkupInContent ||
|
|
287
|
+
checkId ||
|
|
288
|
+
requireDescription ||
|
|
289
|
+
requireMeaning) && {
|
|
290
|
+
[`:matches(Element$1, Template[tagName="ng-template"])${allowMarkupInContent ? '[i18n]' : ''}`](node) {
|
|
274
291
|
handleElementOrTemplate(node);
|
|
275
292
|
},
|
|
276
293
|
}),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@angular-eslint/eslint-plugin-template",
|
|
3
|
-
"version": "17.
|
|
3
|
+
"version": "17.5.0",
|
|
4
4
|
"description": "ESLint plugin for Angular Templates",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
"LICENSE"
|
|
19
19
|
],
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@angular-eslint/bundled-angular-compiler": "17.
|
|
22
|
-
"@angular-eslint/utils": "17.
|
|
21
|
+
"@angular-eslint/bundled-angular-compiler": "17.5.0",
|
|
22
|
+
"@angular-eslint/utils": "17.5.0",
|
|
23
23
|
"@typescript-eslint/type-utils": "7.10.0",
|
|
24
24
|
"@typescript-eslint/utils": "7.10.0",
|
|
25
25
|
"aria-query": "5.3.0",
|