eslint-plugin-formatjs 4.0.2 → 4.2.2

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.
Files changed (54) hide show
  1. package/LICENSE.md +0 -0
  2. package/README.md +0 -0
  3. package/index.d.ts +1 -0
  4. package/index.d.ts.map +1 -1
  5. package/index.js +18 -16
  6. package/package.json +4 -4
  7. package/rules/blocklist-elements.d.ts +0 -0
  8. package/rules/blocklist-elements.d.ts.map +1 -1
  9. package/rules/blocklist-elements.js +19 -27
  10. package/rules/enforce-default-message.d.ts +0 -0
  11. package/rules/enforce-default-message.d.ts.map +1 -1
  12. package/rules/enforce-default-message.js +11 -12
  13. package/rules/enforce-description.d.ts +0 -0
  14. package/rules/enforce-description.d.ts.map +1 -1
  15. package/rules/enforce-description.js +7 -10
  16. package/rules/enforce-id.d.ts +0 -0
  17. package/rules/enforce-id.d.ts.map +1 -1
  18. package/rules/enforce-id.js +35 -44
  19. package/rules/enforce-placeholders.d.ts +0 -0
  20. package/rules/enforce-placeholders.d.ts.map +1 -1
  21. package/rules/enforce-placeholders.js +26 -31
  22. package/rules/enforce-plural-rules.d.ts +0 -0
  23. package/rules/enforce-plural-rules.d.ts.map +1 -1
  24. package/rules/enforce-plural-rules.js +26 -35
  25. package/rules/no-camel-case.d.ts +0 -0
  26. package/rules/no-camel-case.d.ts.map +1 -1
  27. package/rules/no-camel-case.js +19 -27
  28. package/rules/no-complex-selectors.d.ts +0 -0
  29. package/rules/no-complex-selectors.d.ts.map +1 -1
  30. package/rules/no-complex-selectors.js +32 -24
  31. package/rules/no-emoji.d.ts +0 -0
  32. package/rules/no-emoji.d.ts.map +1 -1
  33. package/rules/no-emoji.js +10 -13
  34. package/rules/no-id.d.ts +0 -0
  35. package/rules/no-id.d.ts.map +1 -1
  36. package/rules/no-id.js +11 -17
  37. package/rules/no-invalid-icu.d.ts +4 -0
  38. package/rules/no-invalid-icu.d.ts.map +1 -0
  39. package/rules/no-invalid-icu.js +54 -0
  40. package/rules/no-literal-string-in-jsx.d.ts +0 -0
  41. package/rules/no-literal-string-in-jsx.d.ts.map +1 -1
  42. package/rules/no-literal-string-in-jsx.js +41 -35
  43. package/rules/no-multiple-plurals.d.ts +0 -0
  44. package/rules/no-multiple-plurals.d.ts.map +1 -1
  45. package/rules/no-multiple-plurals.js +19 -28
  46. package/rules/no-multiple-whitespaces.d.ts +0 -0
  47. package/rules/no-multiple-whitespaces.d.ts.map +1 -1
  48. package/rules/no-multiple-whitespaces.js +24 -37
  49. package/rules/no-offset.d.ts +0 -0
  50. package/rules/no-offset.d.ts.map +1 -1
  51. package/rules/no-offset.js +18 -26
  52. package/util.d.ts +2 -0
  53. package/util.d.ts.map +1 -1
  54. package/util.js +45 -43
@@ -1,41 +1,40 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var picomatch_1 = (0, tslib_1.__importDefault)(require("picomatch"));
5
- var typescript_estree_1 = require("@typescript-eslint/typescript-estree");
6
- var propMatcherSchema = {
3
+ const tslib_1 = require("tslib");
4
+ const picomatch_1 = tslib_1.__importDefault(require("picomatch"));
5
+ const typescript_estree_1 = require("@typescript-eslint/typescript-estree");
6
+ const propMatcherSchema = {
7
7
  type: 'array',
8
8
  items: {
9
9
  type: 'array',
10
10
  items: [{ type: 'string' }, { type: 'string' }],
11
11
  },
12
12
  };
13
- var defaultPropIncludePattern = [
13
+ const defaultPropIncludePattern = [
14
14
  ['*', 'aria-{label,description,details,errormessage}'],
15
15
  ['[a-z]*([a-z0-9])', '(placeholder|title)'],
16
16
  ['img', 'alt'],
17
17
  ];
18
- var defaultPropExcludePattern = [];
18
+ const defaultPropExcludePattern = [];
19
19
  function stringifyJsxTagName(tagName) {
20
20
  switch (tagName.type) {
21
21
  case typescript_estree_1.TSESTree.AST_NODE_TYPES.JSXIdentifier:
22
22
  return tagName.name;
23
23
  case typescript_estree_1.TSESTree.AST_NODE_TYPES.JSXMemberExpression:
24
- return "".concat(stringifyJsxTagName(tagName.object), ".").concat(tagName.property.name);
24
+ return `${stringifyJsxTagName(tagName.object)}.${tagName.property.name}`;
25
25
  case typescript_estree_1.TSESTree.AST_NODE_TYPES.JSXNamespacedName:
26
- return "".concat(tagName.namespace.name, ":").concat(tagName.name.name);
26
+ return `${tagName.namespace.name}:${tagName.name.name}`;
27
27
  }
28
28
  }
29
29
  function compilePropMatcher(propMatcher) {
30
- return propMatcher.map(function (_a) {
31
- var tagNamePattern = _a[0], propNamePattern = _a[1];
30
+ return propMatcher.map(([tagNamePattern, propNamePattern]) => {
32
31
  return [
33
32
  picomatch_1.default.makeRe(tagNamePattern, { contains: false }),
34
33
  picomatch_1.default.makeRe(propNamePattern, { contains: false }),
35
34
  ];
36
35
  });
37
36
  }
38
- var rule = {
37
+ const rule = {
39
38
  meta: {
40
39
  type: 'problem',
41
40
  docs: {
@@ -51,8 +50,12 @@ var rule = {
51
50
  props: {
52
51
  type: 'object',
53
52
  properties: {
54
- include: (0, tslib_1.__assign)({}, propMatcherSchema),
55
- exclude: (0, tslib_1.__assign)({}, propMatcherSchema),
53
+ include: {
54
+ ...propMatcherSchema,
55
+ },
56
+ exclude: {
57
+ ...propMatcherSchema,
58
+ },
56
59
  },
57
60
  },
58
61
  },
@@ -60,32 +63,35 @@ var rule = {
60
63
  ],
61
64
  },
62
65
  // TODO: Vue support
63
- create: function (context) {
64
- var _a, _b, _c, _d;
65
- var userConfig = context.options[0] || {};
66
- var propIncludePattern = compilePropMatcher((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], defaultPropIncludePattern, true), ((_b = (_a = userConfig.props) === null || _a === void 0 ? void 0 : _a.include) !== null && _b !== void 0 ? _b : []), true));
67
- var propExcludePattern = compilePropMatcher((0, tslib_1.__spreadArray)((0, tslib_1.__spreadArray)([], defaultPropExcludePattern, true), ((_d = (_c = userConfig.props) === null || _c === void 0 ? void 0 : _c.exclude) !== null && _d !== void 0 ? _d : []), true));
68
- var lexicalJsxStack = [];
69
- var shouldSkipCurrentJsxAttribute = function (node) {
70
- var currentJsxNode = lexicalJsxStack[lexicalJsxStack.length - 1];
66
+ create(context) {
67
+ const userConfig = context.options[0] || {};
68
+ const propIncludePattern = compilePropMatcher([
69
+ ...defaultPropIncludePattern,
70
+ ...(userConfig.props?.include ?? []),
71
+ ]);
72
+ const propExcludePattern = compilePropMatcher([
73
+ ...defaultPropExcludePattern,
74
+ ...(userConfig.props?.exclude ?? []),
75
+ ]);
76
+ const lexicalJsxStack = [];
77
+ const shouldSkipCurrentJsxAttribute = (node) => {
78
+ const currentJsxNode = lexicalJsxStack[lexicalJsxStack.length - 1];
71
79
  if (currentJsxNode.type === 'JSXFragment') {
72
80
  return false;
73
81
  }
74
- var nameString = stringifyJsxTagName(currentJsxNode.openingElement.name);
75
- var attributeName = typeof node.name.name === 'string'
82
+ const nameString = stringifyJsxTagName(currentJsxNode.openingElement.name);
83
+ const attributeName = typeof node.name.name === 'string'
76
84
  ? node.name.name
77
85
  : node.name.name.name;
78
86
  // match exclude
79
- for (var _i = 0, propExcludePattern_1 = propExcludePattern; _i < propExcludePattern_1.length; _i++) {
80
- var _a = propExcludePattern_1[_i], tagNamePattern = _a[0], propNamePattern = _a[1];
87
+ for (const [tagNamePattern, propNamePattern] of propExcludePattern) {
81
88
  if (tagNamePattern.test(nameString) &&
82
89
  propNamePattern.test(attributeName)) {
83
90
  return true;
84
91
  }
85
92
  }
86
93
  // match include
87
- for (var _b = 0, propIncludePattern_1 = propIncludePattern; _b < propIncludePattern_1.length; _b++) {
88
- var _c = propIncludePattern_1[_b], tagNamePattern = _c[0], propNamePattern = _c[1];
94
+ for (const [tagNamePattern, propNamePattern] of propIncludePattern) {
89
95
  if (tagNamePattern.test(nameString) &&
90
96
  propNamePattern.test(attributeName)) {
91
97
  return false;
@@ -93,7 +99,7 @@ var rule = {
93
99
  }
94
100
  return true;
95
101
  };
96
- var checkJSXExpression = function (node) {
102
+ const checkJSXExpression = (node) => {
97
103
  // Check if this is either a string literal / template literal, or the concat of them.
98
104
  if ((node.type === 'Literal' && typeof node.value === 'string') ||
99
105
  node.type === 'TemplateLiteral') {
@@ -108,19 +114,19 @@ var rule = {
108
114
  }
109
115
  };
110
116
  return {
111
- JSXElement: function (node) {
117
+ JSXElement: (node) => {
112
118
  lexicalJsxStack.push(node);
113
119
  },
114
- 'JSXElement:exit': function () {
120
+ 'JSXElement:exit': () => {
115
121
  lexicalJsxStack.pop();
116
122
  },
117
- JSXFragment: function (node) {
123
+ JSXFragment: (node) => {
118
124
  lexicalJsxStack.push(node);
119
125
  },
120
- 'JSXFragment:exit': function () {
126
+ 'JSXFragment:exit': () => {
121
127
  lexicalJsxStack.pop();
122
128
  },
123
- JSXAttribute: function (node) {
129
+ JSXAttribute: (node) => {
124
130
  if (shouldSkipCurrentJsxAttribute(node)) {
125
131
  return;
126
132
  }
@@ -138,7 +144,7 @@ var rule = {
138
144
  checkJSXExpression(node.value.expression);
139
145
  }
140
146
  },
141
- JSXText: function (node) {
147
+ JSXText: (node) => {
142
148
  // Ignore purely spacing fragments
143
149
  if (!node.value.replace(/\s*/gm, '')) {
144
150
  return;
@@ -149,7 +155,7 @@ var rule = {
149
155
  });
150
156
  },
151
157
  // Children expression container
152
- 'JSXElement > JSXExpressionContainer': function (node) {
158
+ 'JSXElement > JSXExpressionContainer': (node) => {
153
159
  if (node.expression.type !== 'JSXEmptyExpression') {
154
160
  checkJSXExpression(node.expression);
155
161
  }
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"no-multiple-plurals.d.ts","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-formatjs/rules/no-multiple-plurals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAuD3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"no-multiple-plurals.d.ts","sourceRoot":"","sources":["no-multiple-plurals.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAwD3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -1,44 +1,37 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var util_1 = require("../util");
5
- var icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
6
- var MultiplePlurals = /** @class */ (function (_super) {
7
- (0, tslib_1.__extends)(MultiplePlurals, _super);
8
- function MultiplePlurals() {
9
- var _this = _super !== null && _super.apply(this, arguments) || this;
10
- _this.message = 'Cannot specify more than 1 plural rules';
11
- return _this;
3
+ const util_1 = require("../util");
4
+ const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
5
+ class MultiplePlurals extends Error {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.message = 'Cannot specify more than 1 plural rules';
12
9
  }
13
- return MultiplePlurals;
14
- }(Error));
15
- function verifyAst(ast, pluralCount) {
16
- if (pluralCount === void 0) { pluralCount = { count: 0 }; }
17
- for (var _i = 0, ast_1 = ast; _i < ast_1.length; _i++) {
18
- var el = ast_1[_i];
10
+ }
11
+ function verifyAst(ast, pluralCount = { count: 0 }) {
12
+ for (const el of ast) {
19
13
  if ((0, icu_messageformat_parser_1.isPluralElement)(el)) {
20
14
  pluralCount.count++;
21
15
  if (pluralCount.count > 1) {
22
16
  throw new MultiplePlurals();
23
17
  }
24
- var options = el.options;
25
- for (var _a = 0, _b = Object.keys(options); _a < _b.length; _a++) {
26
- var selector = _b[_a];
18
+ const { options } = el;
19
+ for (const selector of Object.keys(options)) {
27
20
  verifyAst(options[selector].value, pluralCount);
28
21
  }
29
22
  }
30
23
  }
31
24
  }
32
25
  function checkNode(context, node) {
33
- var msgs = (0, util_1.extractMessages)(node, context.settings);
34
- for (var _i = 0, msgs_1 = msgs; _i < msgs_1.length; _i++) {
35
- var _a = msgs_1[_i][0], defaultMessage = _a.message.defaultMessage, messageNode = _a.messageNode;
26
+ const settings = (0, util_1.getSettings)(context);
27
+ const msgs = (0, util_1.extractMessages)(node, settings);
28
+ for (const [{ message: { defaultMessage }, messageNode, },] of msgs) {
36
29
  if (!defaultMessage || !messageNode) {
37
30
  continue;
38
31
  }
39
32
  try {
40
33
  verifyAst((0, icu_messageformat_parser_1.parse)(defaultMessage, {
41
- ignoreTag: context.settings.ignoreTag,
34
+ ignoreTag: settings.ignoreTag,
42
35
  }));
43
36
  }
44
37
  catch (e) {
@@ -49,7 +42,7 @@ function checkNode(context, node) {
49
42
  }
50
43
  }
51
44
  }
52
- var rule = {
45
+ const rule = {
53
46
  meta: {
54
47
  type: 'problem',
55
48
  docs: {
@@ -60,10 +53,8 @@ var rule = {
60
53
  },
61
54
  fixable: 'code',
62
55
  },
63
- create: function (context) {
64
- var callExpressionVisitor = function (node) {
65
- return checkNode(context, node);
66
- };
56
+ create(context) {
57
+ const callExpressionVisitor = (node) => checkNode(context, node);
67
58
  if (context.parserServices.defineTemplateBodyVisitor) {
68
59
  return context.parserServices.defineTemplateBodyVisitor({
69
60
  CallExpression: callExpressionVisitor,
@@ -72,7 +63,7 @@ var rule = {
72
63
  });
73
64
  }
74
65
  return {
75
- JSXOpeningElement: function (node) { return checkNode(context, node); },
66
+ JSXOpeningElement: (node) => checkNode(context, node),
76
67
  CallExpression: callExpressionVisitor,
77
68
  };
78
69
  },
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"no-multiple-whitespaces.d.ts","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-formatjs/rules/no-multiple-whitespaces.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAyJ3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA+BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"no-multiple-whitespaces.d.ts","sourceRoot":"","sources":["no-multiple-whitespaces.ts"],"names":[],"mappings":"AAOA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAyJ3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA+BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -1,10 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
4
- var util_1 = require("../util");
3
+ const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
4
+ const util_1 = require("../util");
5
5
  function isAstValid(ast) {
6
- for (var _i = 0, ast_1 = ast; _i < ast_1.length; _i++) {
7
- var element = ast_1[_i];
6
+ for (const element of ast) {
8
7
  switch (element.type) {
9
8
  case icu_messageformat_parser_1.TYPE.literal:
10
9
  if (/\s{2,}/gm.test(element.value)) {
@@ -21,8 +20,7 @@ function isAstValid(ast) {
21
20
  break;
22
21
  case icu_messageformat_parser_1.TYPE.plural:
23
22
  case icu_messageformat_parser_1.TYPE.select: {
24
- for (var _a = 0, _b = Object.values(element.options); _a < _b.length; _a++) {
25
- var option = _b[_a];
23
+ for (const option of Object.values(element.options)) {
26
24
  if (!isAstValid(option.value)) {
27
25
  return false;
28
26
  }
@@ -34,10 +32,9 @@ function isAstValid(ast) {
34
32
  return true;
35
33
  }
36
34
  function trimMultiWhitespaces(message, ast) {
37
- var literalElements = [];
38
- var collectLiteralElements = function (elements) {
39
- for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {
40
- var element = elements_1[_i];
35
+ const literalElements = [];
36
+ const collectLiteralElements = (elements) => {
37
+ for (const element of elements) {
41
38
  switch (element.type) {
42
39
  case icu_messageformat_parser_1.TYPE.literal:
43
40
  literalElements.push(element);
@@ -52,8 +49,7 @@ function trimMultiWhitespaces(message, ast) {
52
49
  break;
53
50
  case icu_messageformat_parser_1.TYPE.plural:
54
51
  case icu_messageformat_parser_1.TYPE.select: {
55
- for (var _a = 0, _b = Object.values(element.options); _a < _b.length; _a++) {
56
- var option = _b[_a];
52
+ for (const option of Object.values(element.options)) {
57
53
  collectLiteralElements(option.value);
58
54
  }
59
55
  break;
@@ -64,13 +60,12 @@ function trimMultiWhitespaces(message, ast) {
64
60
  collectLiteralElements(ast);
65
61
  // Surgically trim whitespaces in the literal element ranges.
66
62
  // This is to preserve the original whitespaces and newlines info that are lost to parsing.
67
- var trimmedFragments = [];
68
- var currentOffset = 0;
69
- for (var _i = 0, literalElements_1 = literalElements; _i < literalElements_1.length; _i++) {
70
- var literal = literalElements_1[_i];
71
- var _a = literal.location, start = _a.start, end = _a.end;
72
- var startOffset = start.offset;
73
- var endOffset = end.offset;
63
+ let trimmedFragments = [];
64
+ let currentOffset = 0;
65
+ for (const literal of literalElements) {
66
+ const { start, end } = literal.location;
67
+ const startOffset = start.offset;
68
+ const endOffset = end.offset;
74
69
  trimmedFragments.push(message.slice(currentOffset, startOffset));
75
70
  trimmedFragments.push(message.slice(startOffset, endOffset).replace(/\s{2,}/gm, ' '));
76
71
  currentOffset = endOffset;
@@ -79,12 +74,12 @@ function trimMultiWhitespaces(message, ast) {
79
74
  return trimmedFragments.join('');
80
75
  }
81
76
  function checkNode(context, node) {
82
- var msgs = (0, util_1.extractMessages)(node, context.settings);
83
- var _loop_1 = function (defaultMessage, messageNode) {
77
+ const msgs = (0, util_1.extractMessages)(node, (0, util_1.getSettings)(context));
78
+ for (const [{ message: { defaultMessage }, messageNode, },] of msgs) {
84
79
  if (!defaultMessage || !messageNode) {
85
- return "continue";
80
+ continue;
86
81
  }
87
- var ast;
82
+ let ast;
88
83
  try {
89
84
  ast = (0, icu_messageformat_parser_1.parse)(defaultMessage, { captureLocation: true });
90
85
  }
@@ -93,10 +88,10 @@ function checkNode(context, node) {
93
88
  node: messageNode,
94
89
  message: e instanceof Error ? e.message : String(e),
95
90
  });
96
- return { value: void 0 };
91
+ return;
97
92
  }
98
93
  if (!isAstValid(ast)) {
99
- var reportObject = {
94
+ const reportObject = {
100
95
  node: messageNode,
101
96
  message: 'Multiple consecutive whitespaces are not allowed',
102
97
  };
@@ -120,15 +115,9 @@ function checkNode(context, node) {
120
115
  }
121
116
  context.report(reportObject);
122
117
  }
123
- };
124
- for (var _i = 0, msgs_1 = msgs; _i < msgs_1.length; _i++) {
125
- var _a = msgs_1[_i][0], defaultMessage = _a.message.defaultMessage, messageNode = _a.messageNode;
126
- var state_1 = _loop_1(defaultMessage, messageNode);
127
- if (typeof state_1 === "object")
128
- return state_1.value;
129
118
  }
130
119
  }
131
- var rule = {
120
+ const rule = {
132
121
  meta: {
133
122
  type: 'problem',
134
123
  docs: {
@@ -139,10 +128,8 @@ var rule = {
139
128
  },
140
129
  fixable: 'code',
141
130
  },
142
- create: function (context) {
143
- var callExpressionVisitor = function (node) {
144
- return checkNode(context, node);
145
- };
131
+ create(context) {
132
+ const callExpressionVisitor = (node) => checkNode(context, node);
146
133
  if (context.parserServices.defineTemplateBodyVisitor) {
147
134
  return context.parserServices.defineTemplateBodyVisitor({
148
135
  CallExpression: callExpressionVisitor,
@@ -151,7 +138,7 @@ var rule = {
151
138
  });
152
139
  }
153
140
  return {
154
- JSXOpeningElement: function (node) { return checkNode(context, node); },
141
+ JSXOpeningElement: (node) => checkNode(context, node),
155
142
  CallExpression: callExpressionVisitor,
156
143
  };
157
144
  },
File without changes
@@ -1 +1 @@
1
- {"version":3,"file":"no-offset.d.ts","sourceRoot":"","sources":["../../../../../../packages/eslint-plugin-formatjs/rules/no-offset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAsD3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
1
+ {"version":3,"file":"no-offset.d.ts","sourceRoot":"","sources":["no-offset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAuD3B,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,UA8BhB,CAAA;AAED,eAAe,IAAI,CAAA"}
@@ -1,42 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- var tslib_1 = require("tslib");
4
- var util_1 = require("../util");
5
- var icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
6
- var NoOffsetError = /** @class */ (function (_super) {
7
- (0, tslib_1.__extends)(NoOffsetError, _super);
8
- function NoOffsetError() {
9
- var _this = _super !== null && _super.apply(this, arguments) || this;
10
- _this.message = 'offset are not allowed in plural rules';
11
- return _this;
3
+ const util_1 = require("../util");
4
+ const icu_messageformat_parser_1 = require("@formatjs/icu-messageformat-parser");
5
+ class NoOffsetError extends Error {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.message = 'offset are not allowed in plural rules';
12
9
  }
13
- return NoOffsetError;
14
- }(Error));
10
+ }
15
11
  function verifyAst(ast) {
16
- for (var _i = 0, ast_1 = ast; _i < ast_1.length; _i++) {
17
- var el = ast_1[_i];
12
+ for (const el of ast) {
18
13
  if ((0, icu_messageformat_parser_1.isPluralElement)(el)) {
19
14
  if (el.offset) {
20
15
  throw new NoOffsetError();
21
16
  }
22
- var options = el.options;
23
- for (var _a = 0, _b = Object.keys(options); _a < _b.length; _a++) {
24
- var selector = _b[_a];
17
+ const { options } = el;
18
+ for (const selector of Object.keys(options)) {
25
19
  verifyAst(options[selector].value);
26
20
  }
27
21
  }
28
22
  }
29
23
  }
30
24
  function checkNode(context, node) {
31
- var msgs = (0, util_1.extractMessages)(node, context.settings);
32
- for (var _i = 0, msgs_1 = msgs; _i < msgs_1.length; _i++) {
33
- var _a = msgs_1[_i][0], defaultMessage = _a.message.defaultMessage, messageNode = _a.messageNode;
25
+ const settings = (0, util_1.getSettings)(context);
26
+ const msgs = (0, util_1.extractMessages)(node, settings);
27
+ for (const [{ message: { defaultMessage }, messageNode, },] of msgs) {
34
28
  if (!defaultMessage || !messageNode) {
35
29
  continue;
36
30
  }
37
31
  try {
38
32
  verifyAst((0, icu_messageformat_parser_1.parse)(defaultMessage, {
39
- ignoreTag: context.settings.ignoreTag,
33
+ ignoreTag: settings.ignoreTag,
40
34
  }));
41
35
  }
42
36
  catch (e) {
@@ -47,7 +41,7 @@ function checkNode(context, node) {
47
41
  }
48
42
  }
49
43
  }
50
- var rule = {
44
+ const rule = {
51
45
  meta: {
52
46
  type: 'problem',
53
47
  docs: {
@@ -58,10 +52,8 @@ var rule = {
58
52
  },
59
53
  fixable: 'code',
60
54
  },
61
- create: function (context) {
62
- var callExpressionVisitor = function (node) {
63
- return checkNode(context, node);
64
- };
55
+ create(context) {
56
+ const callExpressionVisitor = (node) => checkNode(context, node);
65
57
  if (context.parserServices.defineTemplateBodyVisitor) {
66
58
  return context.parserServices.defineTemplateBodyVisitor({
67
59
  CallExpression: callExpressionVisitor,
@@ -70,7 +62,7 @@ var rule = {
70
62
  });
71
63
  }
72
64
  return {
73
- JSXOpeningElement: function (node) { return checkNode(context, node); },
65
+ JSXOpeningElement: (node) => checkNode(context, node),
74
66
  CallExpression: callExpressionVisitor,
75
67
  };
76
68
  },
package/util.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Rule } from 'eslint';
1
2
  import { TSESTree } from '@typescript-eslint/typescript-estree';
2
3
  export interface MessageDescriptor {
3
4
  id?: string;
@@ -18,5 +19,6 @@ export interface MessageDescriptorNodeInfo {
18
19
  idValueNode?: TSESTree.Property['value'] | TSESTree.JSXAttribute['value'];
19
20
  idPropNode?: TSESTree.Property | TSESTree.JSXAttribute;
20
21
  }
22
+ export declare function getSettings({ settings }: Rule.RuleContext): Settings;
21
23
  export declare function extractMessages(node: TSESTree.Node, { additionalComponentNames, additionalFunctionNames, excludeMessageDeclCalls, }?: Settings): Array<[MessageDescriptorNodeInfo, TSESTree.Expression | undefined]>;
22
24
  //# sourceMappingURL=util.d.ts.map
package/util.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../../packages/eslint-plugin-formatjs/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAA;AAE7D,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC9B;AAMD,MAAM,WAAW,QAAQ;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;IAClC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AACD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACzE,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAA;IAC3D,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC7E,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACzE,UAAU,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAA;CACvD;AA4ND,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,EACE,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GACxB,GAAE,QAAa,GACf,KAAK,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAiDrE"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAC,QAAQ,EAAC,MAAM,sCAAsC,CAAA;AAE7D,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC9B;AAMD,MAAM,WAAW,QAAQ;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAA;IAClC,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAA;IACnC,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AACD,MAAM,WAAW,yBAAyB;IACxC,OAAO,EAAE,iBAAiB,CAAA;IAC1B,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACzE,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAA;IAC3D,eAAe,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAC7E,WAAW,CAAC,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IACzE,UAAU,CAAC,EAAE,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAA;CACvD;AAED,wBAAgB,WAAW,CAAC,EAAC,QAAQ,EAAC,EAAE,IAAI,CAAC,WAAW,GAAG,QAAQ,CAElE;AA4ND,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,IAAI,EACnB,EACE,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,GACxB,GAAE,QAAa,GACf,KAAK,CAAC,CAAC,yBAAyB,EAAE,QAAQ,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC,CAiDrE"}