@agilebot/eslint-plugin 0.3.6 → 0.3.7

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
@@ -1,10 +1,11 @@
1
- export default plugin;
1
+ import * as eslint from 'eslint';
2
+
2
3
  declare namespace plugin {
3
- let rules: import('eslint').Linter.RulesRecord;
4
+ let rules: eslint.Linter.RulesRecord;
4
5
  namespace configs {
5
6
  namespace recommended {
6
7
  export let plugins: string[];
7
- let rules_1: import('eslint').Linter.RulesRecord;
8
+ let rules_1: eslint.Linter.RulesRecord;
8
9
  export { rules_1 as rules };
9
10
  export namespace settings {
10
11
  namespace react {
@@ -14,3 +15,5 @@ declare namespace plugin {
14
15
  }
15
16
  }
16
17
  }
18
+
19
+ export { plugin as default };
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @license @agilebot/eslint-plugin v0.3.6
2
+ * @license @agilebot/eslint-plugin v0.3.7
3
3
  *
4
4
  * Copyright (c) Agilebot, Inc. and its affiliates.
5
5
  *
@@ -76,7 +76,15 @@ function getSetting(context, name) {
76
76
  return context.settings["agilebot/".concat(name)];
77
77
  }
78
78
 
79
- let warnedForMissingPrefix = false;
79
+ const warned = new Set();
80
+ function warnOnce(message) {
81
+ if (warned.has(message)) {
82
+ return;
83
+ }
84
+ warned.add(message);
85
+ console.warn("Warning: ".concat(message));
86
+ }
87
+
80
88
  var importMonorepo = {
81
89
  meta: {
82
90
  type: 'problem',
@@ -95,10 +103,7 @@ var importMonorepo = {
95
103
  ImportDeclaration(node) {
96
104
  let prefix = getSetting(context, 'monorepo-scope');
97
105
  if (!prefix) {
98
- if (!warnedForMissingPrefix) {
99
- console.error('Warning: agilebot/monorepo-scope is not set.');
100
- warnedForMissingPrefix = true;
101
- }
106
+ warnOnce('agilebot/monorepo-scope is not set.');
102
107
  return;
103
108
  }
104
109
  prefix = "".concat(prefix, "/");
@@ -269,6 +274,98 @@ var intlIdMissing = {
269
274
  }
270
275
  };
271
276
 
277
+ var intlIdNaming = {
278
+ meta: {
279
+ docs: {
280
+ description: 'Validates intl message ids naming convention',
281
+ category: 'Intl'
282
+ },
283
+ fixable: undefined,
284
+ schema: [{
285
+ type: 'object',
286
+ properties: {
287
+ format: {
288
+ "enum": ['camelCase', 'PascalCase']
289
+ }
290
+ }
291
+ }],
292
+ messages: {
293
+ invalidIdNaming: "Invalid id naming, expected {{format}}"
294
+ }
295
+ },
296
+ create: function (context) {
297
+ if (!context.options[0]) {
298
+ throw new Error('Missing options');
299
+ }
300
+ const format = context.options[0].format;
301
+ function report(node, value) {
302
+ const values = value.split('.');
303
+ let isPass;
304
+ for (const v of values) {
305
+ switch (format) {
306
+ case 'camelCase':
307
+ if (!eslintUtils.isCamelCase(v)) {
308
+ isPass = false;
309
+ }
310
+ break;
311
+ case 'PascalCase':
312
+ if (!eslintUtils.isPascalCase(v)) {
313
+ isPass = false;
314
+ }
315
+ break;
316
+ }
317
+ }
318
+ if (isPass === false) {
319
+ context.report({
320
+ node: node,
321
+ messageId: 'invalidIdNaming',
322
+ data: {
323
+ format
324
+ }
325
+ });
326
+ }
327
+ }
328
+ function processLiteral(node) {
329
+ report(node, node.value);
330
+ }
331
+ function processTemplateLiteral(node) {
332
+ const displayStr = templateLiteralDisplayStr(node);
333
+ report(node, displayStr);
334
+ }
335
+ function processAttrNode(node) {
336
+ if (node.value.type === 'Literal') {
337
+ return processLiteral(node.value);
338
+ }
339
+ if (node.value.type === 'JSXExpressionContainer' && node.value.expression.type === 'TemplateLiteral') {
340
+ return processTemplateLiteral(node.value.expression);
341
+ }
342
+ if (node.value.type === 'TemplateLiteral') {
343
+ return processTemplateLiteral(node.value);
344
+ }
345
+ }
346
+ return {
347
+ JSXIdentifier: function (node) {
348
+ const attrNode = findFormattedMessageAttrNode(node, 'id');
349
+ if (attrNode) {
350
+ return processAttrNode(attrNode);
351
+ }
352
+ },
353
+ CallExpression: function (node) {
354
+ const attrNode = findFormatMessageAttrNode(node, 'id');
355
+ if (attrNode) {
356
+ return processAttrNode(attrNode);
357
+ }
358
+ },
359
+ Property: function (node) {
360
+ const attrNode = findAttrNodeInDefineMessages(node, 'id') || findAttrNodeInDefineMessage(node, 'id');
361
+ if (attrNode) {
362
+ return processAttrNode(attrNode);
363
+ }
364
+ }
365
+ };
366
+ }
367
+ };
368
+
272
369
  var intlIdPrefix = {
273
370
  meta: {
274
371
  docs: {
@@ -2416,6 +2513,7 @@ var ruleFiles = /*#__PURE__*/Object.freeze({
2416
2513
  rules_enforce_mui_icon_alias: enforceMuiIconAlias,
2417
2514
  rules_import_monorepo: importMonorepo,
2418
2515
  rules_intl_id_missing: intlIdMissing,
2516
+ rules_intl_id_naming: intlIdNaming,
2419
2517
  rules_intl_id_prefix: intlIdPrefix,
2420
2518
  rules_intl_id_unused: intlIdUnused,
2421
2519
  rules_intl_no_default: intlNoDefault,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agilebot/eslint-plugin",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Agilebot's ESLint plugin",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -20,7 +20,7 @@
20
20
  "dependencies": {
21
21
  "@typescript-eslint/utils": "~7.9.0",
22
22
  "eslint-plugin-react": "^7.34.1",
23
- "@agilebot/eslint-utils": "0.3.6"
23
+ "@agilebot/eslint-utils": "0.3.7"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "eslint": "^7.0.0 || ^8.0.0"
@@ -35,8 +35,7 @@
35
35
  "eslint-vitest-rule-tester": "^0.3.2"
36
36
  },
37
37
  "scripts": {
38
- "build": "rollup -c rollup.config.mjs && nr dts",
39
- "dts": "tsc -p tsconfig.dts.json",
38
+ "build": "rollup -c rollup.config.mjs",
40
39
  "lint": "eslint src --fix"
41
40
  }
42
41
  }