@alexlit/lint-kit 167.3.0 → 167.4.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.
Files changed (142) hide show
  1. package/package.json +1 -1
  2. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/LICENSE +21 -0
  3. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/README.md +54 -0
  4. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/base.d.ts +23 -0
  5. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/base.js +25 -0
  6. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/base.d.ts +35 -0
  7. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/base.js +35 -0
  8. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/recommended.d.ts +1194 -0
  9. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/flat/recommended.js +39 -0
  10. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/recommended.d.ts +29 -0
  11. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/configs/recommended.js +29 -0
  12. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/index.d.ts +2532 -0
  13. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/index.js +62 -0
  14. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/key-format-style.d.ts +2 -0
  15. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/key-format-style.js +247 -0
  16. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-component.d.ts +2 -0
  17. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-component.js +85 -0
  18. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-place-attr.d.ts +2 -0
  19. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-place-attr.js +41 -0
  20. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-places-prop.d.ts +2 -0
  21. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-i18n-places-prop.js +36 -0
  22. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-modulo-syntax.d.ts +2 -0
  23. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-modulo-syntax.js +94 -0
  24. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-tc.d.ts +2 -0
  25. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-tc.js +42 -0
  26. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-v-t.d.ts +2 -0
  27. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-deprecated-v-t.js +33 -0
  28. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-duplicate-keys-in-locale.d.ts +2 -0
  29. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-duplicate-keys-in-locale.js +271 -0
  30. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-dynamic-keys.d.ts +2 -0
  31. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-dynamic-keys.js +105 -0
  32. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-html-messages.d.ts +2 -0
  33. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-html-messages.js +137 -0
  34. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-i18n-t-path-prop.d.ts +2 -0
  35. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-i18n-t-path-prop.js +44 -0
  36. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys-in-other-locales.d.ts +2 -0
  37. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys-in-other-locales.js +264 -0
  38. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys.d.ts +2 -0
  39. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-missing-keys.js +111 -0
  40. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-raw-text.d.ts +2 -0
  41. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-raw-text.js +575 -0
  42. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unknown-locale.d.ts +2 -0
  43. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unknown-locale.js +198 -0
  44. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unused-keys.d.ts +2 -0
  45. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-unused-keys.js +456 -0
  46. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-v-html.d.ts +2 -0
  47. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/no-v-html.js +50 -0
  48. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-linked-key-with-paren.d.ts +2 -0
  49. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-linked-key-with-paren.js +108 -0
  50. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-sfc-lang-attr.d.ts +2 -0
  51. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/prefer-sfc-lang-attr.js +58 -0
  52. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/sfc-locale-attr.d.ts +2 -0
  53. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/sfc-locale-attr.js +65 -0
  54. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/valid-message-syntax.d.ts +2 -0
  55. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/rules/valid-message-syntax.js +186 -0
  56. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/eslint.d.ts +216 -0
  57. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/eslint.js +2 -0
  58. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/i18n.d.ts +5 -0
  59. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/i18n.js +2 -0
  60. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/index.d.ts +6 -0
  61. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/index.js +22 -0
  62. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/nodes.d.ts +7 -0
  63. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/nodes.js +2 -0
  64. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/settings.d.ts +8 -0
  65. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/settings.js +2 -0
  66. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/types.d.ts +38 -0
  67. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/types.js +2 -0
  68. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/vue-parser-services.d.ts +32 -0
  69. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/types/vue-parser-services.js +2 -0
  70. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-function.d.ts +2 -0
  71. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-function.js +11 -0
  72. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-loader.d.ts +10 -0
  73. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/cache-loader.js +27 -0
  74. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/casing.d.ts +10 -0
  75. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/casing.js +101 -0
  76. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-keys.d.ts +13 -0
  77. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-keys.js +160 -0
  78. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-linked-keys.d.ts +2 -0
  79. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/collect-linked-keys.js +49 -0
  80. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/compat.d.ts +3 -0
  81. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/compat.js +35 -0
  82. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/default-timeouts.d.ts +6 -0
  83. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/default-timeouts.js +10 -0
  84. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/get-cwd.d.ts +2 -0
  85. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/get-cwd.js +9 -0
  86. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/glob-utils.d.ts +15 -0
  87. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/glob-utils.js +154 -0
  88. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/ignored-paths.d.ts +43 -0
  89. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/ignored-paths.js +234 -0
  90. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/index.d.ts +25 -0
  91. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/index.js +446 -0
  92. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/key-path.d.ts +2 -0
  93. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/key-path.js +27 -0
  94. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/locale-messages.d.ts +54 -0
  95. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/locale-messages.js +187 -0
  96. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser-v9.d.ts +8 -0
  97. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser-v9.js +40 -0
  98. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser.d.ts +5 -0
  99. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/parser.js +18 -0
  100. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/traverser.d.ts +6 -0
  101. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/traverser.js +31 -0
  102. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/utils.d.ts +28 -0
  103. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/message-compiler/utils.js +279 -0
  104. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-flat-config.d.ts +2 -0
  105. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-flat-config.js +11 -0
  106. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-legacy-config.d.ts +2 -0
  107. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/build-parser-using-legacy-config.js +46 -0
  108. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/index.d.ts +4 -0
  109. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/index.js +18 -0
  110. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/parse-by-parser.d.ts +3 -0
  111. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/parse-by-parser.js +42 -0
  112. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/should-use-flat-config.d.ts +2 -0
  113. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/should-use-flat-config.js +54 -0
  114. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/worker.d.ts +1 -0
  115. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parser-config-resolver/worker.js +32 -0
  116. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parsers/index.d.ts +4 -0
  117. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/parsers/index.js +32 -0
  118. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/path-utils.d.ts +2 -0
  119. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/path-utils.js +21 -0
  120. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/regexp.d.ts +1 -0
  121. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/regexp.js +16 -0
  122. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/resource-loader.d.ts +10 -0
  123. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/resource-loader.js +32 -0
  124. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/rule.d.ts +9 -0
  125. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/dist/utils/rule.js +75 -0
  126. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/globals.json +3345 -0
  127. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/index.d.ts +3452 -0
  128. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/index.js +2 -0
  129. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/license +9 -0
  130. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/package.json +117 -0
  131. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/globals/readme.md +42 -0
  132. package/packages/config-eslint/node_modules/@intlify/eslint-plugin-vue-i18n/package.json +147 -0
  133. package/packages/config-eslint/node_modules/vue-eslint-parser/LICENSE +21 -0
  134. package/packages/config-eslint/node_modules/vue-eslint-parser/README.md +332 -0
  135. package/packages/config-eslint/node_modules/vue-eslint-parser/index.d.ts +667 -0
  136. package/packages/config-eslint/node_modules/vue-eslint-parser/index.js +6642 -0
  137. package/packages/config-eslint/node_modules/vue-eslint-parser/index.js.map +1 -0
  138. package/packages/config-eslint/node_modules/vue-eslint-parser/package.json +100 -0
  139. package/packages/config-eslint/package.json +5 -5
  140. package/packages/config-eslint/plugins/unicorn.js +2 -0
  141. package/packages/config-prettier/package.json +2 -2
  142. package/packages/config-stylelint/package.json +2 -2
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ const path_1 = require("path");
6
+ const index_1 = require("../utils/index");
7
+ const debug_1 = __importDefault(require("debug"));
8
+ const key_path_1 = require("../utils/key-path");
9
+ const get_cwd_1 = require("../utils/get-cwd");
10
+ const rule_1 = require("../utils/rule");
11
+ const compat_1 = require("../utils/compat");
12
+ const debug = (0, debug_1.default)('eslint-plugin-vue-i18n:no-duplicate-keys-in-locale');
13
+ function getMessageFilepath(fullPath, context) {
14
+ const cwd = (0, get_cwd_1.getCwd)(context);
15
+ if (fullPath.startsWith(cwd)) {
16
+ return fullPath.replace(`${cwd}/`, './');
17
+ }
18
+ return fullPath;
19
+ }
20
+ function create(context) {
21
+ const filename = (0, compat_1.getFilename)(context);
22
+ const sourceCode = (0, compat_1.getSourceCode)(context);
23
+ const options = (context.options && context.options[0]) || {};
24
+ const ignoreI18nBlock = Boolean(options.ignoreI18nBlock);
25
+ function createInitPathStack(targetLocaleMessage, otherLocaleMessages) {
26
+ if (targetLocaleMessage.isResolvedLocaleByFileName()) {
27
+ const locale = targetLocaleMessage.locales[0];
28
+ return createInitLocalePathStack(locale, otherLocaleMessages);
29
+ }
30
+ else {
31
+ return {
32
+ keyPath: [],
33
+ locale: null,
34
+ otherDictionaries: []
35
+ };
36
+ }
37
+ }
38
+ function createInitLocalePathStack(locale, otherLocaleMessages) {
39
+ return {
40
+ keyPath: [],
41
+ locale,
42
+ otherDictionaries: otherLocaleMessages.map(lm => {
43
+ return {
44
+ dict: lm.getMessagesFromLocale(locale),
45
+ source: lm
46
+ };
47
+ })
48
+ };
49
+ }
50
+ function createVerifyContext(targetLocaleMessage, otherLocaleMessages) {
51
+ let pathStack = createInitPathStack(targetLocaleMessage, otherLocaleMessages);
52
+ const existsKeyNodes = {};
53
+ const existsLocaleNodes = {};
54
+ function pushKey(exists, key, reportNode) {
55
+ const keyNodes = exists[key] || (exists[key] = []);
56
+ keyNodes.push(reportNode);
57
+ }
58
+ return {
59
+ enterKey(key, reportNode) {
60
+ if (pathStack.locale == null) {
61
+ const locale = key;
62
+ pushKey(existsLocaleNodes, locale, reportNode);
63
+ pathStack = Object.assign({ upper: pathStack, node: reportNode }, createInitLocalePathStack(locale, otherLocaleMessages));
64
+ return;
65
+ }
66
+ const keyOtherValues = pathStack.otherDictionaries.map(dict => {
67
+ return {
68
+ value: dict.dict[key],
69
+ source: dict.source
70
+ };
71
+ });
72
+ const keyPath = [...pathStack.keyPath, key];
73
+ const keyPathStr = (0, key_path_1.joinPath)(...keyPath);
74
+ const nextOtherDictionaries = [];
75
+ const reportFiles = [];
76
+ for (const value of keyOtherValues) {
77
+ if (value.value == null) {
78
+ continue;
79
+ }
80
+ if (typeof value.value !== 'object') {
81
+ reportFiles.push(`"${getMessageFilepath(value.source.fullpath, context)}"`);
82
+ }
83
+ else {
84
+ nextOtherDictionaries.push({
85
+ dict: value.value,
86
+ source: value.source
87
+ });
88
+ }
89
+ }
90
+ if (reportFiles.length) {
91
+ reportFiles.sort();
92
+ const last = reportFiles.pop();
93
+ context.report({
94
+ message: `duplicate key '${keyPathStr}' in '${pathStack.locale}'. ${reportFiles.length === 0
95
+ ? last
96
+ : `${reportFiles.join(', ')}, and ${last}`} has the same key`,
97
+ loc: reportNode.loc
98
+ });
99
+ }
100
+ pushKey(existsKeyNodes[pathStack.locale] ||
101
+ (existsKeyNodes[pathStack.locale] = {}), keyPathStr, reportNode);
102
+ pathStack = {
103
+ upper: pathStack,
104
+ node: reportNode,
105
+ keyPath,
106
+ locale: pathStack.locale,
107
+ otherDictionaries: nextOtherDictionaries
108
+ };
109
+ },
110
+ leaveKey(node) {
111
+ if (pathStack.node === node) {
112
+ pathStack = pathStack.upper;
113
+ }
114
+ },
115
+ reports() {
116
+ for (const localeNodes of [
117
+ existsLocaleNodes,
118
+ ...Object.values(existsKeyNodes)
119
+ ]) {
120
+ for (const key of Object.keys(localeNodes)) {
121
+ const keyNodes = localeNodes[key];
122
+ if (keyNodes.length > 1) {
123
+ for (const keyNode of keyNodes) {
124
+ context.report({
125
+ message: `duplicate key '${key}'`,
126
+ loc: keyNode.loc
127
+ });
128
+ }
129
+ }
130
+ }
131
+ }
132
+ }
133
+ };
134
+ }
135
+ function createVisitorForJson(_sourceCode, targetLocaleMessage, otherLocaleMessages) {
136
+ const verifyContext = createVerifyContext(targetLocaleMessage, otherLocaleMessages);
137
+ return {
138
+ JSONProperty(node) {
139
+ const key = node.key.type === 'JSONLiteral' ? `${node.key.value}` : node.key.name;
140
+ verifyContext.enterKey(key, node.key);
141
+ },
142
+ 'JSONProperty:exit'(node) {
143
+ verifyContext.leaveKey(node.key);
144
+ },
145
+ 'JSONArrayExpression > *'(node) {
146
+ const key = node.parent.elements.indexOf(node);
147
+ verifyContext.enterKey(key, node);
148
+ },
149
+ 'JSONArrayExpression > *:exit'(node) {
150
+ verifyContext.leaveKey(node);
151
+ },
152
+ 'Program:exit'() {
153
+ verifyContext.reports();
154
+ }
155
+ };
156
+ }
157
+ function createVisitorForYaml(sourceCode, targetLocaleMessage, otherLocaleMessages) {
158
+ const verifyContext = createVerifyContext(targetLocaleMessage, otherLocaleMessages);
159
+ const yamlKeyNodes = new Set();
160
+ function withinKey(node) {
161
+ for (const keyNode of yamlKeyNodes) {
162
+ if (keyNode.range[0] <= node.range[0] &&
163
+ node.range[0] < keyNode.range[1]) {
164
+ return true;
165
+ }
166
+ }
167
+ return false;
168
+ }
169
+ return {
170
+ YAMLPair(node) {
171
+ if (node.key != null) {
172
+ if (withinKey(node)) {
173
+ return;
174
+ }
175
+ yamlKeyNodes.add(node.key);
176
+ }
177
+ else {
178
+ return;
179
+ }
180
+ const keyValue = node.key.type !== 'YAMLScalar'
181
+ ? sourceCode.getText(node.key)
182
+ : node.key.value;
183
+ const key = typeof keyValue === 'boolean' || keyValue === null
184
+ ? String(keyValue)
185
+ : keyValue;
186
+ verifyContext.enterKey(key, node.key);
187
+ },
188
+ 'YAMLPair:exit'(node) {
189
+ verifyContext.leaveKey(node.key);
190
+ },
191
+ 'YAMLSequence > *'(node) {
192
+ const key = node.parent.entries.indexOf(node);
193
+ verifyContext.enterKey(key, node);
194
+ },
195
+ 'YAMLSequence > *:exit'(node) {
196
+ verifyContext.leaveKey(node);
197
+ },
198
+ 'Program:exit'() {
199
+ verifyContext.reports();
200
+ }
201
+ };
202
+ }
203
+ if ((0, path_1.extname)(filename) === '.vue') {
204
+ return (0, index_1.defineCustomBlocksVisitor)(context, ctx => {
205
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
206
+ const targetLocaleMessage = localeMessages.findBlockLocaleMessage(ctx.parserServices.customBlock);
207
+ if (!targetLocaleMessage) {
208
+ return {};
209
+ }
210
+ const otherLocaleMessages = ignoreI18nBlock
211
+ ? []
212
+ : localeMessages.localeMessages.filter(lm => lm !== targetLocaleMessage);
213
+ return createVisitorForJson((0, compat_1.getSourceCode)(ctx), targetLocaleMessage, otherLocaleMessages);
214
+ }, ctx => {
215
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
216
+ const targetLocaleMessage = localeMessages.findBlockLocaleMessage(ctx.parserServices.customBlock);
217
+ if (!targetLocaleMessage) {
218
+ return {};
219
+ }
220
+ const otherLocaleMessages = ignoreI18nBlock
221
+ ? []
222
+ : localeMessages.localeMessages.filter(lm => lm !== targetLocaleMessage);
223
+ return createVisitorForYaml((0, compat_1.getSourceCode)(ctx), targetLocaleMessage, otherLocaleMessages);
224
+ });
225
+ }
226
+ else if (sourceCode.parserServices.isJSON ||
227
+ sourceCode.parserServices.isYAML) {
228
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
229
+ const targetLocaleMessage = localeMessages.findExistLocaleMessage(filename);
230
+ if (!targetLocaleMessage) {
231
+ debug(`ignore ${filename} in no-duplicate-keys-in-locale`);
232
+ return {};
233
+ }
234
+ const otherLocaleMessages = localeMessages.localeMessages.filter(lm => lm !== targetLocaleMessage);
235
+ if (sourceCode.parserServices.isJSON) {
236
+ return createVisitorForJson(sourceCode, targetLocaleMessage, otherLocaleMessages);
237
+ }
238
+ else if (sourceCode.parserServices.isYAML) {
239
+ return createVisitorForYaml(sourceCode, targetLocaleMessage, otherLocaleMessages);
240
+ }
241
+ return {};
242
+ }
243
+ else {
244
+ debug(`ignore ${filename} in no-duplicate-keys-in-locale`);
245
+ return {};
246
+ }
247
+ }
248
+ module.exports = (0, rule_1.createRule)({
249
+ meta: {
250
+ type: 'problem',
251
+ docs: {
252
+ description: 'disallow duplicate localization keys within the same locale',
253
+ category: 'Best Practices',
254
+ url: 'https://eslint-plugin-vue-i18n.intlify.dev/rules/no-duplicate-keys-in-locale.html',
255
+ recommended: false
256
+ },
257
+ fixable: null,
258
+ schema: [
259
+ {
260
+ type: 'object',
261
+ properties: {
262
+ ignoreI18nBlock: {
263
+ type: 'boolean'
264
+ }
265
+ },
266
+ additionalProperties: false
267
+ }
268
+ ]
269
+ },
270
+ create
271
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ const index_1 = require("../utils/index");
3
+ const rule_1 = require("../utils/rule");
4
+ const compat_1 = require("../utils/compat");
5
+ function getNodeName(context, node) {
6
+ if (node.type === 'Identifier') {
7
+ return node.name;
8
+ }
9
+ const sourceCode = (0, compat_1.getSourceCode)(context);
10
+ if (sourceCode.ast.range[0] <= node.range[0] &&
11
+ node.range[1] <= sourceCode.ast.range[1]) {
12
+ return sourceCode
13
+ .getTokens(node)
14
+ .map(t => t.value)
15
+ .join('');
16
+ }
17
+ const tokenStore = sourceCode.parserServices.getTemplateBodyTokenStore();
18
+ return tokenStore
19
+ .getTokens(node)
20
+ .map(t => t.value)
21
+ .join('');
22
+ }
23
+ function checkDirective(context, node) {
24
+ if (node.value &&
25
+ node.value.type === 'VExpressionContainer' &&
26
+ node.value.expression &&
27
+ !(0, index_1.isStaticLiteral)(node.value.expression)) {
28
+ const name = getNodeName(context, node.value.expression);
29
+ context.report({
30
+ node,
31
+ message: `'${name}' dynamic key is used'`
32
+ });
33
+ }
34
+ }
35
+ function checkComponent(context, node) {
36
+ if (node.name.type === 'VIdentifier' &&
37
+ node.name.name === 'bind' &&
38
+ node.argument &&
39
+ node.argument.type === 'VIdentifier' &&
40
+ node.argument.name === 'path' &&
41
+ node.parent.value &&
42
+ node.parent.value.type === 'VExpressionContainer' &&
43
+ node.parent.value.expression &&
44
+ !(0, index_1.isStaticLiteral)(node.parent.value.expression)) {
45
+ const name = getNodeName(context, node.parent.value.expression);
46
+ context.report({
47
+ node,
48
+ message: `'${name}' dynamic key is used'`
49
+ });
50
+ }
51
+ }
52
+ function checkCallExpression(context, node) {
53
+ const funcName = (node.callee.type === 'MemberExpression' &&
54
+ node.callee.property.type === 'Identifier' &&
55
+ node.callee.property.name) ||
56
+ (node.callee.type === 'Identifier' && node.callee.name) ||
57
+ '';
58
+ if (!/^(\$t|t|\$tc|tc)$/.test(funcName) ||
59
+ !node.arguments ||
60
+ !node.arguments.length) {
61
+ return;
62
+ }
63
+ const [keyNode] = node.arguments;
64
+ if (!(0, index_1.isStaticLiteral)(keyNode)) {
65
+ const name = getNodeName(context, keyNode);
66
+ context.report({
67
+ node,
68
+ message: `'${name}' dynamic key is used'`
69
+ });
70
+ }
71
+ }
72
+ function create(context) {
73
+ return (0, index_1.compositingVisitors)((0, index_1.defineTemplateBodyVisitor)(context, {
74
+ "VAttribute[directive=true][key.name='t']"(node) {
75
+ checkDirective(context, node);
76
+ },
77
+ "VAttribute[directive=true][key.name.name='t']"(node) {
78
+ checkDirective(context, node);
79
+ },
80
+ 'VElement:matches([name=i18n], [name=i18n-t]) > VStartTag > VAttribute[directive=true] > VDirectiveKey'(node) {
81
+ checkComponent(context, node);
82
+ },
83
+ CallExpression(node) {
84
+ checkCallExpression(context, node);
85
+ }
86
+ }), {
87
+ CallExpression(node) {
88
+ checkCallExpression(context, node);
89
+ }
90
+ });
91
+ }
92
+ module.exports = (0, rule_1.createRule)({
93
+ meta: {
94
+ type: 'suggestion',
95
+ docs: {
96
+ description: 'disallow localization dynamic keys at localization methods',
97
+ category: 'Best Practices',
98
+ url: 'https://eslint-plugin-vue-i18n.intlify.dev/rules/no-dynamic-keys.html',
99
+ recommended: false
100
+ },
101
+ fixable: null,
102
+ schema: []
103
+ },
104
+ create
105
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ const path_1 = require("path");
29
+ const parse5 = __importStar(require("parse5"));
30
+ const index_1 = require("../utils/index");
31
+ const debug_1 = __importDefault(require("debug"));
32
+ const rule_1 = require("../utils/rule");
33
+ const compat_1 = require("../utils/compat");
34
+ const debug = (0, debug_1.default)('eslint-plugin-vue-i18n:no-html-messages');
35
+ function findHTMLNode(node) {
36
+ return node.childNodes.find((child) => {
37
+ if (child.nodeName !== '#text' && child.tagName) {
38
+ return true;
39
+ }
40
+ return false;
41
+ });
42
+ }
43
+ function create(context) {
44
+ const filename = (0, compat_1.getFilename)(context);
45
+ const sourceCode = (0, compat_1.getSourceCode)(context);
46
+ function verifyJSONLiteral(node) {
47
+ const parent = node.parent;
48
+ if (parent.type === 'JSONProperty' && parent.key === node) {
49
+ return;
50
+ }
51
+ const htmlNode = parse5.parseFragment(`${node.value}`, {
52
+ sourceCodeLocationInfo: true
53
+ });
54
+ const foundNode = findHTMLNode(htmlNode);
55
+ if (!foundNode) {
56
+ return;
57
+ }
58
+ const loc = {
59
+ line: node.loc.start.line,
60
+ column: node.loc.start.column +
61
+ 1 +
62
+ foundNode.sourceCodeLocation.startOffset
63
+ };
64
+ context.report({
65
+ message: `used HTML localization message`,
66
+ loc
67
+ });
68
+ }
69
+ function verifyYAMLScalar(node) {
70
+ const parent = node.parent;
71
+ if (parent.type === 'YAMLPair' && parent.key === node) {
72
+ return;
73
+ }
74
+ const htmlNode = parse5.parseFragment(`${node.value}`, {
75
+ sourceCodeLocationInfo: true
76
+ });
77
+ const foundNode = findHTMLNode(htmlNode);
78
+ if (!foundNode) {
79
+ return;
80
+ }
81
+ const loc = {
82
+ line: node.loc.start.line,
83
+ column: node.loc.start.column +
84
+ 1 +
85
+ foundNode.sourceCodeLocation.startOffset
86
+ };
87
+ context.report({
88
+ message: `used HTML localization message`,
89
+ loc
90
+ });
91
+ }
92
+ if ((0, path_1.extname)(filename) === '.vue') {
93
+ return (0, index_1.defineCustomBlocksVisitor)(context, () => {
94
+ return {
95
+ JSONLiteral: verifyJSONLiteral
96
+ };
97
+ }, () => {
98
+ return {
99
+ YAMLScalar: verifyYAMLScalar
100
+ };
101
+ });
102
+ }
103
+ else if (sourceCode.parserServices.isJSON) {
104
+ if (!(0, index_1.getLocaleMessages)(context).findExistLocaleMessage(filename)) {
105
+ return {};
106
+ }
107
+ return {
108
+ JSONLiteral: verifyJSONLiteral
109
+ };
110
+ }
111
+ else if (sourceCode.parserServices.isYAML) {
112
+ if (!(0, index_1.getLocaleMessages)(context).findExistLocaleMessage(filename)) {
113
+ return {};
114
+ }
115
+ return {
116
+ YAMLScalar: verifyYAMLScalar
117
+ };
118
+ }
119
+ else {
120
+ debug(`ignore ${filename} in no-html-messages`);
121
+ return {};
122
+ }
123
+ }
124
+ module.exports = (0, rule_1.createRule)({
125
+ meta: {
126
+ type: 'problem',
127
+ docs: {
128
+ description: 'disallow use HTML localization messages',
129
+ category: 'Recommended',
130
+ url: 'https://eslint-plugin-vue-i18n.intlify.dev/rules/no-html-messages.html',
131
+ recommended: true
132
+ },
133
+ fixable: null,
134
+ schema: []
135
+ },
136
+ create
137
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ const index_1 = require("../utils/index");
3
+ const rule_1 = require("../utils/rule");
4
+ function create(context) {
5
+ return (0, index_1.defineTemplateBodyVisitor)(context, {
6
+ VElement(node) {
7
+ if (node.name !== 'i18n-t') {
8
+ return;
9
+ }
10
+ const pathProp = (0, index_1.getAttribute)(node, 'path') || (0, index_1.getDirective)(node, 'bind', 'path');
11
+ if (pathProp) {
12
+ context.report({
13
+ node: pathProp.key,
14
+ messageId: 'disallow',
15
+ fix(fixer) {
16
+ if (pathProp.directive) {
17
+ return fixer.replaceText(pathProp.key.argument, 'keypath');
18
+ }
19
+ else {
20
+ return fixer.replaceText(pathProp.key, 'keypath');
21
+ }
22
+ }
23
+ });
24
+ }
25
+ }
26
+ });
27
+ }
28
+ module.exports = (0, rule_1.createRule)({
29
+ meta: {
30
+ type: 'problem',
31
+ docs: {
32
+ description: 'disallow using `path` prop with `<i18n-t>`',
33
+ category: 'Recommended',
34
+ url: 'https://eslint-plugin-vue-i18n.intlify.dev/rules/no-i18n-t-path-prop.html',
35
+ recommended: true
36
+ },
37
+ fixable: 'code',
38
+ schema: [],
39
+ messages: {
40
+ disallow: 'Cannot use `path` prop with `<i18n-t>` component. Use `keypath` prop instead.'
41
+ }
42
+ },
43
+ create
44
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;