@angular-eslint/eslint-plugin-template 17.4.2-alpha.7 → 17.5.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/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;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,kBAuCE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,kBAuCE"}
@@ -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;
@@ -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;AAqBzB,eAAO,MAAM,SAAS,SAAS,CAAC;;AAiBhC,wBAqTG"}
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"}
@@ -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.getSourceCode();
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
- ...((checkId || requireDescription || requireMeaning) && {
273
- ':matches(Element$1, Template[tagName="ng-template"])[i18n]'(node) {
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.4.2-alpha.7",
3
+ "version": "17.5.1-alpha.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.4.2-alpha.7",
22
- "@angular-eslint/utils": "17.4.2-alpha.7",
21
+ "@angular-eslint/bundled-angular-compiler": "17.5.1-alpha.0",
22
+ "@angular-eslint/utils": "17.5.1-alpha.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",