@alexlit/lint-kit 167.2.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 +3 -3
  142. package/packages/config-stylelint/package.json +3 -3
@@ -0,0 +1,264 @@
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 rule_1 = require("../utils/rule");
10
+ const compat_1 = require("../utils/compat");
11
+ const debug = (0, debug_1.default)('eslint-plugin-vue-i18n:no-missing-keys-in-other-locales');
12
+ function create(context) {
13
+ var _a;
14
+ const filename = (0, compat_1.getFilename)(context);
15
+ const sourceCode = (0, compat_1.getSourceCode)(context);
16
+ const ignoreLocales = ((_a = context.options[0]) === null || _a === void 0 ? void 0 : _a.ignoreLocales) || [];
17
+ function reportMissing(keyPath, locales, reportNode) {
18
+ const quotedLocales = locales.map(s => `'${s}'`);
19
+ context.report({
20
+ message: "'{{path}}' does not exist in {{locales}} locale(s)",
21
+ data: {
22
+ path: (0, key_path_1.joinPath)(...keyPath),
23
+ locales: [quotedLocales.pop(), quotedLocales.join(', ')]
24
+ .filter(loc => loc)
25
+ .reverse()
26
+ .join(' and ')
27
+ },
28
+ loc: reportNode.loc
29
+ });
30
+ }
31
+ function isLeafMessageNode(node) {
32
+ if (node == null) {
33
+ return false;
34
+ }
35
+ if (node.type === 'JSONLiteral') {
36
+ if (node.value == null && node.regex == null && node.bigint == null) {
37
+ return false;
38
+ }
39
+ return true;
40
+ }
41
+ if (node.type === 'JSONIdentifier' || node.type === 'JSONTemplateLiteral') {
42
+ return true;
43
+ }
44
+ if (node.type === 'JSONUnaryExpression') {
45
+ return isLeafMessageNode(node.argument);
46
+ }
47
+ if (node.type === 'YAMLScalar') {
48
+ if (node.value == null) {
49
+ return false;
50
+ }
51
+ return true;
52
+ }
53
+ if (node.type === 'YAMLWithMeta') {
54
+ return isLeafMessageNode(node.value);
55
+ }
56
+ if (node.type === 'YAMLAlias') {
57
+ return true;
58
+ }
59
+ return false;
60
+ }
61
+ function createVerifyContext(targetLocaleMessage, localeMessages) {
62
+ function getOtherLocaleMessages(locale) {
63
+ const ignores = new Set([...ignoreLocales, locale]);
64
+ return localeMessages.locales
65
+ .filter(locale => !ignores.has(locale))
66
+ .map(locale => {
67
+ return {
68
+ locale,
69
+ dictList: localeMessages.localeMessages.map(lm => lm.getMessagesFromLocale(locale))
70
+ };
71
+ });
72
+ }
73
+ let keyStack;
74
+ if (targetLocaleMessage.isResolvedLocaleByFileName()) {
75
+ const locale = targetLocaleMessage.locales[0];
76
+ keyStack = {
77
+ locale,
78
+ otherLocaleMessages: getOtherLocaleMessages(locale),
79
+ keyPath: []
80
+ };
81
+ }
82
+ else {
83
+ keyStack = {
84
+ locale: null,
85
+ otherLocaleMessages: null
86
+ };
87
+ }
88
+ return {
89
+ enterKey(key, node, needsVerify) {
90
+ if (keyStack.locale == null) {
91
+ const locale = key;
92
+ keyStack = {
93
+ node,
94
+ locale,
95
+ otherLocaleMessages: getOtherLocaleMessages(locale),
96
+ keyPath: [],
97
+ upper: keyStack
98
+ };
99
+ }
100
+ else {
101
+ const keyPath = [...keyStack.keyPath, key];
102
+ const nextOtherLocaleMessages = [];
103
+ const missingLocales = [];
104
+ for (const { locale, dictList } of keyStack.otherLocaleMessages) {
105
+ const nextDictList = [];
106
+ let exists = false;
107
+ for (const dict of dictList) {
108
+ const nextDict = dict[key];
109
+ if (nextDict != null) {
110
+ exists = true;
111
+ if (typeof nextDict === 'object') {
112
+ nextDictList.push(nextDict);
113
+ }
114
+ }
115
+ }
116
+ if (!exists && needsVerify) {
117
+ missingLocales.push(locale);
118
+ }
119
+ nextOtherLocaleMessages.push({ locale, dictList: nextDictList });
120
+ }
121
+ if (missingLocales.length) {
122
+ reportMissing(keyPath, missingLocales, node);
123
+ }
124
+ keyStack = {
125
+ node,
126
+ locale: keyStack.locale,
127
+ otherLocaleMessages: nextOtherLocaleMessages,
128
+ keyPath,
129
+ upper: keyStack
130
+ };
131
+ }
132
+ },
133
+ leaveKey(node) {
134
+ if (keyStack.node === node) {
135
+ keyStack = keyStack.upper;
136
+ }
137
+ }
138
+ };
139
+ }
140
+ function createVisitorForJson(targetLocaleMessage, localeMessages) {
141
+ const ctx = createVerifyContext(targetLocaleMessage, localeMessages);
142
+ return {
143
+ JSONProperty(node) {
144
+ const key = node.key.type === 'JSONLiteral' ? `${node.key.value}` : node.key.name;
145
+ ctx.enterKey(key, node.key, isLeafMessageNode(node.value));
146
+ },
147
+ 'JSONProperty:exit'(node) {
148
+ ctx.leaveKey(node.key);
149
+ },
150
+ 'JSONArrayExpression > *'(node) {
151
+ const key = node.parent.elements.indexOf(node);
152
+ ctx.enterKey(key, node, isLeafMessageNode(node));
153
+ },
154
+ 'JSONArrayExpression > *:exit'(node) {
155
+ ctx.leaveKey(node);
156
+ }
157
+ };
158
+ }
159
+ function createVisitorForYaml(targetLocaleMessage, localeMessages) {
160
+ const yamlKeyNodes = new Set();
161
+ function withinKey(node) {
162
+ for (const keyNode of yamlKeyNodes) {
163
+ if (keyNode.range[0] <= node.range[0] &&
164
+ node.range[0] < keyNode.range[1]) {
165
+ return true;
166
+ }
167
+ }
168
+ return false;
169
+ }
170
+ const ctx = createVerifyContext(targetLocaleMessage, localeMessages);
171
+ return {
172
+ YAMLPair(node) {
173
+ if (node.key != null) {
174
+ if (withinKey(node)) {
175
+ return;
176
+ }
177
+ yamlKeyNodes.add(node.key);
178
+ }
179
+ if (node.key != null && node.key.type === 'YAMLScalar') {
180
+ const keyValue = node.key.value;
181
+ const key = typeof keyValue === 'string' ? keyValue : String(keyValue);
182
+ ctx.enterKey(key, node.key, isLeafMessageNode(node.value));
183
+ }
184
+ },
185
+ 'YAMLPair:exit'(node) {
186
+ if (node.key != null) {
187
+ ctx.leaveKey(node.key);
188
+ }
189
+ },
190
+ 'YAMLSequence > *'(node) {
191
+ if (withinKey(node)) {
192
+ return;
193
+ }
194
+ const key = node.parent.entries.indexOf(node);
195
+ ctx.enterKey(key, node, isLeafMessageNode(node));
196
+ },
197
+ 'YAMLSequence > *:exit'(node) {
198
+ ctx.leaveKey(node);
199
+ }
200
+ };
201
+ }
202
+ if ((0, path_1.extname)(filename) === '.vue') {
203
+ return (0, index_1.defineCustomBlocksVisitor)(context, ctx => {
204
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
205
+ const targetLocaleMessage = localeMessages.findBlockLocaleMessage(ctx.parserServices.customBlock);
206
+ if (!targetLocaleMessage) {
207
+ return {};
208
+ }
209
+ return createVisitorForJson(targetLocaleMessage, localeMessages);
210
+ }, ctx => {
211
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
212
+ const targetLocaleMessage = localeMessages.findBlockLocaleMessage(ctx.parserServices.customBlock);
213
+ if (!targetLocaleMessage) {
214
+ return {};
215
+ }
216
+ return createVisitorForYaml(targetLocaleMessage, localeMessages);
217
+ });
218
+ }
219
+ else if (sourceCode.parserServices.isJSON ||
220
+ sourceCode.parserServices.isYAML) {
221
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
222
+ const targetLocaleMessage = localeMessages.findExistLocaleMessage(filename);
223
+ if (!targetLocaleMessage) {
224
+ debug(`ignore ${filename} in no-missing-keys-in-other-locales`);
225
+ return {};
226
+ }
227
+ if (sourceCode.parserServices.isJSON) {
228
+ return createVisitorForJson(targetLocaleMessage, localeMessages);
229
+ }
230
+ else if (sourceCode.parserServices.isYAML) {
231
+ return createVisitorForYaml(targetLocaleMessage, localeMessages);
232
+ }
233
+ return {};
234
+ }
235
+ else {
236
+ debug(`ignore ${filename} in no-missing-keys-in-other-locales`);
237
+ return {};
238
+ }
239
+ }
240
+ module.exports = (0, rule_1.createRule)({
241
+ meta: {
242
+ type: 'layout',
243
+ docs: {
244
+ description: 'disallow missing locale message keys in other locales',
245
+ category: 'Best Practices',
246
+ url: 'https://eslint-plugin-vue-i18n.intlify.dev/rules/no-missing-keys-in-other-locales.html',
247
+ recommended: false
248
+ },
249
+ fixable: null,
250
+ schema: [
251
+ {
252
+ type: 'object',
253
+ properties: {
254
+ ignoreLocales: {
255
+ type: 'array',
256
+ items: { type: 'string' }
257
+ }
258
+ },
259
+ additionalProperties: false
260
+ }
261
+ ]
262
+ },
263
+ create
264
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;
@@ -0,0 +1,111 @@
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.compositingVisitors)((0, index_1.defineTemplateBodyVisitor)(context, {
6
+ "VAttribute[directive=true][key.name='t']"(node) {
7
+ checkDirective(context, node);
8
+ },
9
+ "VAttribute[directive=true][key.name.name='t']"(node) {
10
+ checkDirective(context, node);
11
+ },
12
+ ["VElement:matches([name=i18n], [name=i18n-t]) > VStartTag > VAttribute[key.name='path']," +
13
+ "VElement[name=i18n-t] > VStartTag > VAttribute[key.name='keypath']"](node) {
14
+ checkComponent(context, node);
15
+ },
16
+ CallExpression(node) {
17
+ checkCallExpression(context, node);
18
+ }
19
+ }), {
20
+ CallExpression(node) {
21
+ checkCallExpression(context, node);
22
+ }
23
+ });
24
+ }
25
+ function checkDirective(context, node) {
26
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
27
+ if (localeMessages.isEmpty()) {
28
+ return;
29
+ }
30
+ if (node.value &&
31
+ node.value.type === 'VExpressionContainer' &&
32
+ (0, index_1.isStaticLiteral)(node.value.expression)) {
33
+ const key = (0, index_1.getStaticLiteralValue)(node.value.expression);
34
+ if (!key) {
35
+ return;
36
+ }
37
+ const missingPath = localeMessages.findMissingPath(String(key));
38
+ if (missingPath) {
39
+ context.report({
40
+ node,
41
+ messageId: 'missing',
42
+ data: { path: missingPath }
43
+ });
44
+ }
45
+ }
46
+ }
47
+ function checkComponent(context, node) {
48
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
49
+ if (localeMessages.isEmpty()) {
50
+ return;
51
+ }
52
+ if (node.value && node.value.type === 'VLiteral') {
53
+ const key = node.value.value;
54
+ if (!key) {
55
+ return;
56
+ }
57
+ const missingPath = localeMessages.findMissingPath(key);
58
+ if (missingPath) {
59
+ context.report({
60
+ node,
61
+ messageId: 'missing',
62
+ data: { path: missingPath }
63
+ });
64
+ }
65
+ }
66
+ }
67
+ function checkCallExpression(context, node) {
68
+ const funcName = (node.callee.type === 'MemberExpression' &&
69
+ node.callee.property.type === 'Identifier' &&
70
+ node.callee.property.name) ||
71
+ (node.callee.type === 'Identifier' && node.callee.name) ||
72
+ '';
73
+ if (!/^(\$t|t|\$tc|tc)$/.test(funcName) ||
74
+ !node.arguments ||
75
+ !node.arguments.length) {
76
+ return;
77
+ }
78
+ const localeMessages = (0, index_1.getLocaleMessages)(context);
79
+ if (localeMessages.isEmpty()) {
80
+ return;
81
+ }
82
+ const [keyNode] = node.arguments;
83
+ if (!(0, index_1.isStaticLiteral)(keyNode)) {
84
+ return;
85
+ }
86
+ const key = (0, index_1.getStaticLiteralValue)(keyNode);
87
+ if (!key) {
88
+ return;
89
+ }
90
+ const missingPath = localeMessages.findMissingPath(String(key));
91
+ if (missingPath) {
92
+ context.report({ node, messageId: 'missing', data: { path: missingPath } });
93
+ }
94
+ }
95
+ module.exports = (0, rule_1.createRule)({
96
+ meta: {
97
+ type: 'problem',
98
+ docs: {
99
+ description: 'disallow missing locale message key at localization methods',
100
+ category: 'Recommended',
101
+ url: 'https://eslint-plugin-vue-i18n.intlify.dev/rules/no-missing-keys.html',
102
+ recommended: true
103
+ },
104
+ fixable: null,
105
+ schema: [],
106
+ messages: {
107
+ missing: "'{{path}}' does not exist in localization message resources"
108
+ }
109
+ },
110
+ create
111
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("../types").RuleModule;
2
+ export = _default;