kythia-core 0.12.5-beta → 0.12.7-beta

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 (120) hide show
  1. package/dist/Kythia.d.ts +7 -6
  2. package/dist/Kythia.d.ts.map +1 -1
  3. package/dist/Kythia.js +1 -503
  4. package/dist/Kythia.js.map +1 -1
  5. package/dist/KythiaClient.d.ts.map +1 -1
  6. package/dist/KythiaClient.js +1 -76
  7. package/dist/KythiaClient.js.map +1 -1
  8. package/dist/cli/Command.js +1 -16
  9. package/dist/cli/commands/AboutCommand.d.ts +7 -0
  10. package/dist/cli/commands/AboutCommand.d.ts.map +1 -0
  11. package/dist/cli/commands/AboutCommand.js +1 -0
  12. package/dist/cli/commands/AboutCommand.js.map +1 -0
  13. package/dist/cli/commands/CacheClearCommand.js +1 -97
  14. package/dist/cli/commands/DIGenerateCommand.js +1 -168
  15. package/dist/cli/commands/LangCheckCommand.js +1 -478
  16. package/dist/cli/commands/LangCheckCommand.js.map +1 -1
  17. package/dist/cli/commands/LangSyncCommand.js +1 -253
  18. package/dist/cli/commands/LangTranslateCommand.js +1 -224
  19. package/dist/cli/commands/MakeMigrationCommand.js +1 -55
  20. package/dist/cli/commands/MakeModelCommand.js +1 -56
  21. package/dist/cli/commands/MigrateCommand.js +1 -190
  22. package/dist/cli/commands/NamespaceCommand.js +1 -92
  23. package/dist/cli/commands/StructureCommand.js +1 -51
  24. package/dist/cli/commands/UpversionCommand.js +1 -68
  25. package/dist/cli/index.js +1 -43
  26. package/dist/cli/utils/db.js +1 -93
  27. package/dist/database/KythiaMigrator.js +1 -94
  28. package/dist/database/KythiaModel.d.ts +4 -3
  29. package/dist/database/KythiaModel.d.ts.map +1 -1
  30. package/dist/database/KythiaModel.js +1 -1128
  31. package/dist/database/KythiaModel.js.map +1 -1
  32. package/dist/database/KythiaSequelize.js +1 -99
  33. package/dist/database/KythiaStorage.js +1 -80
  34. package/dist/database/ModelLoader.js +1 -54
  35. package/dist/index.js +1 -36
  36. package/dist/lang/lang/en.json +85 -0
  37. package/dist/managers/AddonManager.d.ts +2 -2
  38. package/dist/managers/AddonManager.d.ts.map +1 -1
  39. package/dist/managers/AddonManager.js +1 -1097
  40. package/dist/managers/AddonManager.js.map +1 -1
  41. package/dist/managers/EventManager.js +1 -106
  42. package/dist/managers/InteractionManager.d.ts +8 -6
  43. package/dist/managers/InteractionManager.d.ts.map +1 -1
  44. package/dist/managers/InteractionManager.js +1 -470
  45. package/dist/managers/InteractionManager.js.map +1 -1
  46. package/dist/managers/MiddlewareManager.d.ts +4 -3
  47. package/dist/managers/MiddlewareManager.d.ts.map +1 -1
  48. package/dist/managers/MiddlewareManager.js +1 -106
  49. package/dist/managers/MiddlewareManager.js.map +1 -1
  50. package/dist/managers/ShutdownManager.js +1 -179
  51. package/dist/managers/TelemetryManager.d.ts +7 -0
  52. package/dist/managers/TelemetryManager.d.ts.map +1 -1
  53. package/dist/managers/TelemetryManager.js +1 -201
  54. package/dist/managers/TelemetryManager.js.map +1 -1
  55. package/dist/managers/TranslatorManager.d.ts.map +1 -1
  56. package/dist/managers/TranslatorManager.js +1 -145
  57. package/dist/managers/TranslatorManager.js.map +1 -1
  58. package/dist/middlewares/botPermissions.js +1 -28
  59. package/dist/middlewares/cooldown.js +1 -42
  60. package/dist/middlewares/isInMainGuild.js +1 -52
  61. package/dist/middlewares/ownerOnly.js +1 -24
  62. package/dist/middlewares/userPermissions.js +1 -28
  63. package/dist/structures/BaseCommand.js +1 -42
  64. package/dist/types/AddonManager.d.ts +22 -9
  65. package/dist/types/AddonManager.d.ts.map +1 -1
  66. package/dist/types/AddonManager.js +1 -3
  67. package/dist/types/DiscordHelpers.js +1 -3
  68. package/dist/types/EventManager.d.ts +1 -1
  69. package/dist/types/EventManager.d.ts.map +1 -1
  70. package/dist/types/EventManager.js +1 -3
  71. package/dist/types/InteractionManager.d.ts +8 -6
  72. package/dist/types/InteractionManager.d.ts.map +1 -1
  73. package/dist/types/InteractionManager.js +1 -3
  74. package/dist/types/KythiaClient.d.ts +2 -1
  75. package/dist/types/KythiaClient.d.ts.map +1 -1
  76. package/dist/types/KythiaClient.js +1 -3
  77. package/dist/types/KythiaConfig.d.ts +1 -1
  78. package/dist/types/KythiaConfig.d.ts.map +1 -1
  79. package/dist/types/KythiaConfig.js +1 -3
  80. package/dist/types/KythiaContainer.d.ts +3 -2
  81. package/dist/types/KythiaContainer.d.ts.map +1 -1
  82. package/dist/types/KythiaContainer.js +1 -3
  83. package/dist/types/KythiaLogger.d.ts +1 -1
  84. package/dist/types/KythiaLogger.d.ts.map +1 -1
  85. package/dist/types/KythiaLogger.js +1 -3
  86. package/dist/types/KythiaMigrator.d.ts +2 -1
  87. package/dist/types/KythiaMigrator.d.ts.map +1 -1
  88. package/dist/types/KythiaMigrator.js +1 -3
  89. package/dist/types/KythiaModel.d.ts +6 -5
  90. package/dist/types/KythiaModel.d.ts.map +1 -1
  91. package/dist/types/KythiaModel.js +1 -3
  92. package/dist/types/KythiaOptions.d.ts +9 -6
  93. package/dist/types/KythiaOptions.d.ts.map +1 -1
  94. package/dist/types/KythiaOptions.js +1 -3
  95. package/dist/types/KythiaSequelize.d.ts +2 -1
  96. package/dist/types/KythiaSequelize.d.ts.map +1 -1
  97. package/dist/types/KythiaSequelize.js +1 -3
  98. package/dist/types/KythiaStorage.js +1 -3
  99. package/dist/types/MiddlewareManager.js +1 -3
  100. package/dist/types/ModelLoader.d.ts +2 -1
  101. package/dist/types/ModelLoader.d.ts.map +1 -1
  102. package/dist/types/ModelLoader.js +1 -3
  103. package/dist/types/ShutdownManager.js +1 -3
  104. package/dist/types/TranslatorManager.js +1 -3
  105. package/dist/types/error.d.ts +7 -0
  106. package/dist/types/error.d.ts.map +1 -0
  107. package/dist/types/error.js +1 -0
  108. package/dist/types/error.js.map +1 -0
  109. package/dist/types/index.js +1 -29
  110. package/dist/utils/InteractionFactory.d.ts.map +1 -1
  111. package/dist/utils/InteractionFactory.js +1 -334
  112. package/dist/utils/InteractionFactory.js.map +1 -1
  113. package/dist/utils/color.js +1 -156
  114. package/dist/utils/discord.js +1 -19
  115. package/dist/utils/formatter.js +1 -89
  116. package/dist/utils/index.js +1 -56
  117. package/dist/utils/logger.d.ts.map +1 -1
  118. package/dist/utils/logger.js +1 -202
  119. package/dist/utils/logger.js.map +1 -1
  120. package/package.json +5 -2
@@ -1,253 +1 @@
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 () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const Command_1 = __importDefault(require("../Command"));
40
- const node_fs_1 = __importDefault(require("node:fs"));
41
- const node_path_1 = __importDefault(require("node:path"));
42
- const glob_1 = require("glob");
43
- const parser = __importStar(require("@babel/parser"));
44
- const traverse_1 = __importDefault(require("@babel/traverse"));
45
- function setNestedValue(obj, pathStr, value) {
46
- const parts = pathStr.split('.');
47
- let current = obj;
48
- for (let i = 0; i < parts.length - 1; i++) {
49
- const part = parts[i];
50
- if (!current[part] || typeof current[part] !== 'object') {
51
- current[part] = {};
52
- }
53
- current = current[part];
54
- }
55
- const lastPart = parts[parts.length - 1];
56
- if (!Object.hasOwn(current, lastPart)) {
57
- current[lastPart] = value;
58
- return true;
59
- }
60
- return false;
61
- }
62
- function hasNestedKey(obj, pathExpr) {
63
- if (!obj || !pathExpr)
64
- return false;
65
- const parts = pathExpr.split('.');
66
- let current = obj;
67
- for (const part of parts) {
68
- if (typeof current !== 'object' ||
69
- current === null ||
70
- !Object.hasOwn(current, part))
71
- return false;
72
- current = current[part];
73
- }
74
- return true;
75
- }
76
- class LangSyncCommand extends Command_1.default {
77
- signature = 'lang:sync';
78
- description = 'Auto-fill missing translation keys into en.json files.';
79
- async handle() {
80
- const PROJECT_ROOT = process.cwd();
81
- const DEFAULT_LANG = 'en';
82
- console.log('--- 👻 Kythia Ghost Writer (Lang Sync) ---');
83
- console.log('Scanning codebase for new keys (Robust Mode)...');
84
- const usedStaticKeys = new Set();
85
- const usedDynamicKeys = new Set();
86
- let filesScanned = 0;
87
- const SCAN_DIRECTORIES = ['addons', 'src'];
88
- const IGNORE_PATTERNS = [
89
- '**/node_modules/**',
90
- '**/dist/**',
91
- '**/assets/**',
92
- '**/dashboard/web/public/**',
93
- '**/temp/**',
94
- '**/leetMap.js',
95
- '**/generate_*.js',
96
- '**/refactor_*.js',
97
- '**/undo_*.js',
98
- '**/*.d.ts',
99
- ];
100
- SCAN_DIRECTORIES.forEach((dirName) => {
101
- const dirPath = node_path_1.default.join(PROJECT_ROOT, dirName);
102
- const files = glob_1.glob.sync(`${dirPath}/**/*.{js,ts}`, {
103
- ignore: IGNORE_PATTERNS,
104
- dot: true,
105
- });
106
- files.forEach((filePath) => {
107
- filesScanned++;
108
- process.stdout.write(`\rScanning: ${filesScanned} files...`);
109
- try {
110
- const code = node_fs_1.default.readFileSync(filePath, 'utf8');
111
- const ast = parser.parse(code, {
112
- sourceType: 'module',
113
- plugins: [
114
- 'typescript',
115
- 'jsx',
116
- 'classProperties',
117
- 'objectRestSpread',
118
- ],
119
- errorRecovery: true,
120
- });
121
- (0, traverse_1.default)(ast, {
122
- CallExpression(nodePath) {
123
- const node = nodePath.node;
124
- if (node.callee.type === 'Identifier' &&
125
- node.callee.name === 't') {
126
- if (node.arguments.length >= 2) {
127
- const keyArg = node.arguments[1];
128
- analyzeArg(keyArg);
129
- }
130
- }
131
- },
132
- });
133
- function analyzeArg(node) {
134
- if (node.type === 'StringLiteral') {
135
- usedStaticKeys.add(node.value);
136
- return;
137
- }
138
- if (node.type === 'TemplateLiteral') {
139
- if (node.quasis.length === 1 && node.expressions.length === 0) {
140
- usedStaticKeys.add(node.quasis[0].value.raw);
141
- return;
142
- }
143
- let pattern = '';
144
- node.quasis.forEach((quasi, _i) => {
145
- pattern += quasi.value.raw;
146
- if (!quasi.tail)
147
- pattern += '*';
148
- });
149
- pattern = pattern.replace(/_/g, '.');
150
- usedDynamicKeys.add(pattern);
151
- return;
152
- }
153
- if (node.type === 'BinaryExpression' && node.operator === '+') {
154
- if (node.left.type === 'StringLiteral' &&
155
- node.right.type === 'StringLiteral') {
156
- usedStaticKeys.add(node.left.value + node.right.value);
157
- }
158
- else if (node.left.type === 'StringLiteral') {
159
- usedDynamicKeys.add(`${node.left.value}*`);
160
- }
161
- else if (node.right.type === 'StringLiteral') {
162
- usedDynamicKeys.add(`*${node.right.value}`);
163
- }
164
- return;
165
- }
166
- if (node.type === 'ConditionalExpression') {
167
- analyzeArg(node.consequent);
168
- analyzeArg(node.alternate);
169
- return;
170
- }
171
- }
172
- }
173
- catch (_e) { }
174
- });
175
- });
176
- console.log(`\nScan complete. Found ${usedStaticKeys.size} unique static keys.`);
177
- if (usedDynamicKeys.size > 0) {
178
- console.log(`(Ignored ${usedDynamicKeys.size} dynamic key patterns for auto-sync)`);
179
- }
180
- let coreLang = {};
181
- try {
182
- const coreLangPath = node_path_1.default.join(PROJECT_ROOT, 'node_modules/kythia-core/src/lang', `${DEFAULT_LANG}.json`);
183
- if (node_fs_1.default.existsSync(coreLangPath)) {
184
- coreLang = JSON.parse(node_fs_1.default.readFileSync(coreLangPath, 'utf8'));
185
- console.log(` > Loaded Core definitions from kythia-core.`);
186
- }
187
- }
188
- catch (e) {
189
- console.warn(` > ⚠️ Could not load kythia-core definitions.`);
190
- console.error(e);
191
- }
192
- const addonMap = {};
193
- const rootLangPath = node_path_1.default.join(PROJECT_ROOT, 'lang', `${DEFAULT_LANG}.json`);
194
- const srcLangPath = node_path_1.default.join(PROJECT_ROOT, 'src', 'lang', `${DEFAULT_LANG}.json`);
195
- let defaultPath = node_fs_1.default.existsSync(rootLangPath) ? rootLangPath : srcLangPath;
196
- if (!node_fs_1.default.existsSync(defaultPath)) {
197
- if (!node_fs_1.default.existsSync(node_path_1.default.join(PROJECT_ROOT, 'lang')))
198
- node_fs_1.default.mkdirSync(node_path_1.default.join(PROJECT_ROOT, 'lang'));
199
- node_fs_1.default.writeFileSync(rootLangPath, '{}');
200
- defaultPath = rootLangPath;
201
- }
202
- const addonFiles = glob_1.glob.sync(`addons/**/lang/${DEFAULT_LANG}.json`, {
203
- cwd: PROJECT_ROOT,
204
- absolute: true,
205
- });
206
- addonFiles.forEach((file) => {
207
- const match = file.match(/addons[\\/]([^\\/]+)[\\/]lang/);
208
- if (match?.[1]) {
209
- addonMap[match[1]] = file;
210
- }
211
- });
212
- const changes = {};
213
- for (const key of usedStaticKeys) {
214
- if (hasNestedKey(coreLang, key)) {
215
- continue;
216
- }
217
- const parts = key.split('.');
218
- const prefix = parts[0];
219
- let targetFile = defaultPath;
220
- if (addonMap[prefix]) {
221
- targetFile = addonMap[prefix];
222
- }
223
- let content = {};
224
- try {
225
- if (node_fs_1.default.existsSync(targetFile)) {
226
- content = JSON.parse(node_fs_1.default.readFileSync(targetFile, 'utf8'));
227
- }
228
- }
229
- catch (_e) { }
230
- if (!hasNestedKey(content, key)) {
231
- if (setNestedValue(content, key, '__MISSING__')) {
232
- node_fs_1.default.writeFileSync(targetFile, JSON.stringify(content, null, '\t'));
233
- if (!changes[targetFile])
234
- changes[targetFile] = 0;
235
- changes[targetFile]++;
236
- }
237
- }
238
- }
239
- console.log('\n--- Sync Report ---');
240
- const changedFiles = Object.keys(changes);
241
- if (changedFiles.length > 0) {
242
- changedFiles.forEach((file) => {
243
- console.log(`📝 ${node_path_1.default.relative(PROJECT_ROOT, file)}: +${changes[file]} new keys`);
244
- });
245
- console.log(`\n\x1b[32m✨ Done! Search for "__MISSING__" in your JSON files to fill translations.\x1b[0m`);
246
- }
247
- else {
248
- console.log(`\n✅ Everything is in sync! No missing keys found.`);
249
- }
250
- }
251
- }
252
- exports.default = LangSyncCommand;
253
- //# sourceMappingURL=LangSyncCommand.js.map
1
+ 'use strict';const a7_0x14bc51=a7_0x22a5;(function(_0x1d9485,_0x55e57e){const a7_0x6e7204={_0x48dbd0:0x1ee,_0x2d8cdb:0x1da,_0x287aae:0x1f6,_0x258ccb:0x216},_0x1ef740=a7_0x22a5,_0x2b274e=_0x1d9485();while(!![]){try{const _0xb53282=-parseInt(_0x1ef740(a7_0x6e7204._0x48dbd0))/(0x241a+0x92*0x3a+0x1*-0x452d)+-parseInt(_0x1ef740(0x1f2))/(0xac1*0x3+-0x15db+-0xa66)*(parseInt(_0x1ef740(0x1d0))/(0x1c29+0x2227*0x1+-0x3e4d))+-parseInt(_0x1ef740(0x1e4))/(0x13*0x1a3+0x1fe7*0x1+-0x3efc)+parseInt(_0x1ef740(0x1e9))/(-0x1669*-0x1+0x29b+0x18ff*-0x1)*(parseInt(_0x1ef740(a7_0x6e7204._0x2d8cdb))/(0x2f0+0x43d+-0x727))+parseInt(_0x1ef740(a7_0x6e7204._0x287aae))/(0xe6f+-0x5fb*0x2+-0x272)*(parseInt(_0x1ef740(0x21a))/(-0x178+-0x2a*0xce+0x234c))+parseInt(_0x1ef740(0x1ec))/(0x1bb*0xb+-0x2*0x755+-0x456)*(parseInt(_0x1ef740(0x20f))/(0x3*0x901+0x98+-0x1*0x1b91))+-parseInt(_0x1ef740(a7_0x6e7204._0x258ccb))/(0x200*-0x6+-0xa47*-0x3+-0x1e1*0xa)*(parseInt(_0x1ef740(0x21d))/(0x1*0x19cf+-0x11c6+0x5*-0x199));if(_0xb53282===_0x55e57e)break;else _0x2b274e['push'](_0x2b274e['shift']());}catch(_0x8d0be1){_0x2b274e['push'](_0x2b274e['shift']());}}}(a7_0x3ace,-0x457c1*-0x2+0x13e6a7*0x1+-0xff732*0x1));function a7_0x3ace(){const _0x258116=['igr5BMfTAwmGA2v5ihbHDhrLCM5ZigzVCIbHDxrVlxn5BMmP','x19PBxbVCNrtDgfY','BM9Kzq','D3jPDgu','kIOVzgfZAgjVyxjKl3DLyI9WDwjSAwmVkIO','otnmD0TAr3O','B2jQzwn0','ihvUAxf1zsbZDgf0AwmGA2v5CY4','CMLNAhq','dvnJyw5UAw5NoIa','C3bSAxq','q1rTB0O','q29UzgL0Aw9UywXfEhbYzxnZAw9U','C2L6zq','ywrK','ndCZmte3ngjxBfrowG','ica+ieXVywrLzcbdB3jLigrLzMLUAxrPB25ZigzYB20GA3L0AgLHlwnVCMuU','C3rYAw5NAwz5','B2jQzwn0uMvZDfnWCMvHza','y2fSBgvL','AgfZt3DUuhjVCgvYDhK','BwTKAxjtEw5J','AgfUzgXL','ywrKB25Z','BgvMDa','mtC1ntK5mLrTC1HkAW','D3jPDgfIBgu','z2XVyG','zxHPC3rZu3LUyW','ywX0zxjUyxrL','nvbgAKD5rq','C2LNBMf0DxjL','zxHWCMvZC2LVBNm','mJqYntC0m1DsvhrUwa','A2v5CW','nJe4mtyXqu5HCgnd','DMfSDwu','Bwf0y2G','qgjHyMvSl3bHCNnLCG','mJC0ntHeExrVD00','BM9KztPWyxrO','CxvHC2LZ','u2nHBM5PBMCGy29KzwjHC2uGzM9Yig5LDYbRzxLZicHsB2j1C3qGtw9KzsKUlI4','nJi5mdy5A3bVr0PM','D3jPDgvgAwXLu3LUyW','CMvHzezPBgvtEw5J','x19ZzxrnB2r1BgvezwzHDwX0','y3jLyxrL','u3ffwhq','DfPcz0O','kIOVkI5KlNrZ','zgvMyxvSDa','ig5LDYbRzxLZ','CMvSyxrPDMu','ChjVDg90ExbL','BM9KztPMCW','ANn4','zgvMAw5LuhjVCgvYDhK','CMvWBgfJzq','BgvUz3rO','BgfUzW','DhLWzq','cI0TlsbtEw5JifjLCg9YDcaTls0','CMf3','AM9PBG','zM9YrwfJAa','cUkCHsbfDMvYExrOAw5NigLZigLUihn5BMmHie5Vig1PC3nPBMCGA2v5CYbMB3vUzc4','yxjNDw1LBNrZ','mJbxAMj3D08','rNbmze0','Bg9N','igzPBgvZlI4U','lI4Vq29TBwfUza','kIOVz2vUzxjHDgvFkI5QCW','qgjHyMvSl3rYyxzLCNnL','mtfOzNrIDLi','vLz0Evm','C3LUyW','x19LC01VzhvSzq','mteYC1byvKjJ','kIOVDgvTCc8QkG','x19PBxbVCNrezwzHDwX0','mZmXmdaZmNPKCK1Ryq'];a7_0x3ace=function(){return _0x258116;};return a7_0x3ace();}function a7_0x22a5(_0x34cdbf,_0x56ed03){_0x34cdbf=_0x34cdbf-(-0x1*-0x247f+0x1bbb+-0x3e6e);const _0x48e528=a7_0x3ace();let _0xc64385=_0x48e528[_0x34cdbf];if(a7_0x22a5['xDGCRx']===undefined){var _0x34d340=function(_0x31fe4e){const _0x11e884='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x61425b='',_0x4c9cf7='';for(let _0x5f60ed=0x6*-0x271+-0x1425*0x1+0x22cb,_0x499918,_0x601c63,_0x3e111d=0x25b*0x6+-0x246e+0x164c;_0x601c63=_0x31fe4e['charAt'](_0x3e111d++);~_0x601c63&&(_0x499918=_0x5f60ed%(-0x9f3*0x3+0x649*-0x1+0x2426)?_0x499918*(0x1c72*0x1+-0x3*-0x20e+-0x225c)+_0x601c63:_0x601c63,_0x5f60ed++%(0xe9*-0x25+0x685+0x1b2c))?_0x61425b+=String['fromCharCode'](0x3ac+-0x1*-0x3e7+-0x694&_0x499918>>(-(0x2*0xbe0+-0x975+0x1*-0xe49)*_0x5f60ed&0x5f3*0x1+-0x253c+0x479*0x7)):-0x355*0x1+-0x1801+-0x1*-0x1b56){_0x601c63=_0x11e884['indexOf'](_0x601c63);}for(let _0x4ae344=-0x1e4*0x1+0x1*-0x21d+-0x29*-0x19,_0x3cb27d=_0x61425b['length'];_0x4ae344<_0x3cb27d;_0x4ae344++){_0x4c9cf7+='%'+('00'+_0x61425b['charCodeAt'](_0x4ae344)['toString'](0x11d6+-0x25f0+-0x1d*-0xb2))['slice'](-(0x1*0xb89+0x22a2+-0x2e29));}return decodeURIComponent(_0x4c9cf7);};a7_0x22a5['EKCiAQ']=_0x34d340,a7_0x22a5['WtIOHr']={},a7_0x22a5['xDGCRx']=!![];}const _0x16e57b=_0x48e528[-0x1*0x15a1+-0x3ee*0x1+0x198f],_0x4f9e25=_0x34cdbf+_0x16e57b,_0x30cdb6=a7_0x22a5['WtIOHr'][_0x4f9e25];return!_0x30cdb6?(_0xc64385=a7_0x22a5['EKCiAQ'](_0xc64385),a7_0x22a5['WtIOHr'][_0x4f9e25]=_0xc64385):_0xc64385=_0x30cdb6,_0xc64385;}var __createBinding=this&&this['__createBinding']||(Object[a7_0x14bc51(0x1fa)]?function(_0x1bf50a,_0x11a113,_0x1cf85b,_0x3b271c){const a7_0x426fa9={_0x5eeb82:0x1e5,_0x5c19d2:0x204},_0xa5b09=a7_0x14bc51;if(_0x3b271c===undefined)_0x3b271c=_0x1cf85b;var _0x15b218=Object['getOwnPropertyDescriptor'](_0x11a113,_0x1cf85b);(!_0x15b218||('get'in _0x15b218?!_0x11a113['__esModule']:_0x15b218[_0xa5b09(a7_0x426fa9._0x5eeb82)]||_0x15b218['configurable']))&&(_0x15b218={'enumerable':!![],'get':function(){return _0x11a113[_0x1cf85b];}}),Object[_0xa5b09(a7_0x426fa9._0x5c19d2)](_0x1bf50a,_0x3b271c,_0x15b218);}:function(_0x50c54b,_0x195e9e,_0x3c24a1,_0x51ad3f){if(_0x51ad3f===undefined)_0x51ad3f=_0x3c24a1;_0x50c54b[_0x51ad3f]=_0x195e9e[_0x3c24a1];}),__setModuleDefault=this&&this[a7_0x14bc51(0x1f9)]||(Object[a7_0x14bc51(0x1fa)]?function(_0x447e13,_0x532c3e){const a7_0x4d0ac6={_0x9e4ab1:0x204,_0x196b5d:0x1fc},_0x574c26=a7_0x14bc51,_0x525513={'tZBgJ':'default'};Object[_0x574c26(a7_0x4d0ac6._0x9e4ab1)](_0x447e13,_0x525513[_0x574c26(a7_0x4d0ac6._0x196b5d)],{'enumerable':!![],'value':_0x532c3e});}:function(_0x5c588f,_0x540637){const a7_0x443355={_0x94f515:0x1fe},_0x352c83=a7_0x14bc51;_0x5c588f[_0x352c83(a7_0x443355._0x94f515)]=_0x540637;}),__importStar=this&&this[a7_0x14bc51(0x1cc)]||(function(){const a7_0x3c8608={_0x56bf16:0x219,_0x2b908f:0x206},a7_0x3a1abd={_0x4d6064:0x1df},_0xb91387={'WsHXQ':function(_0x13ec7e,_0x44451f){return _0x13ec7e!=_0x44451f;}};var _0x4fde3e=function(_0xbb3129){return _0x4fde3e=Object['getOwnPropertyNames']||function(_0x30b1fc){const _0x1d53c8=a7_0x22a5;var _0xfce807=[];for(var _0x31a896 in _0x30b1fc)if(Object[_0x1d53c8(0x201)][_0x1d53c8(a7_0x3a1abd._0x4d6064)]['call'](_0x30b1fc,_0x31a896))_0xfce807[_0xfce807['length']]=_0x31a896;return _0xfce807;},_0x4fde3e(_0xbb3129);};return function(_0x1e349b){const _0x30dee8=a7_0x22a5;if(_0x1e349b&&_0x1e349b[_0x30dee8(a7_0x3c8608._0x56bf16)])return _0x1e349b;var _0x67374f={};if(_0xb91387['WsHXQ'](_0x1e349b,null)){for(var _0x160362=_0x4fde3e(_0x1e349b),_0x2b8210=0x8*-0x3b2+-0x2651+0x43e1;_0x2b8210<_0x160362[_0x30dee8(a7_0x3c8608._0x2b908f)];_0x2b8210++)if(_0x160362[_0x2b8210]!=='default')__createBinding(_0x67374f,_0x1e349b,_0x160362[_0x2b8210]);}return __setModuleDefault(_0x67374f,_0x1e349b),_0x67374f;};}()),__importDefault=this&&this[a7_0x14bc51(0x21c)]||function(_0x513692){return _0x513692&&_0x513692['__esModule']?_0x513692:{'default':_0x513692};};Object['defineProperty'](exports,'__esModule',{'value':!![]});const Command_1=__importDefault(require(a7_0x14bc51(0x213))),node_fs_1=__importDefault(require(a7_0x14bc51(0x202))),node_path_1=__importDefault(require(a7_0x14bc51(0x1f3))),glob_1=require('glob'),parser=__importStar(require(a7_0x14bc51(0x1f1))),traverse_1=__importDefault(require(a7_0x14bc51(0x215)));function setNestedValue(_0x58aa65,_0x474ff4,_0x296f77){const a7_0x25360f={_0x6ea13b:0x1d5},_0x1b0f8d=a7_0x14bc51,_0x3d05b7=_0x474ff4[_0x1b0f8d(a7_0x25360f._0x6ea13b)]('.');let _0x27fda3=_0x58aa65;for(let _0x5cf59e=0x2033*-0x1+0x1590+0xaa3;_0x5cf59e<_0x3d05b7['length']-(-0x7ac+-0xb0e+0x2ad*0x7);_0x5cf59e++){const _0x3c483c=_0x3d05b7[_0x5cf59e];(!_0x27fda3[_0x3c483c]||typeof _0x27fda3[_0x3c483c]!==_0x1b0f8d(0x1d1))&&(_0x27fda3[_0x3c483c]={}),_0x27fda3=_0x27fda3[_0x3c483c];}const _0x3c2a64=_0x3d05b7[_0x3d05b7['length']-(0x2192+-0x1d*0xa6+-0xec3)];if(!Object['hasOwn'](_0x27fda3,_0x3c2a64))return _0x27fda3[_0x3c2a64]=_0x296f77,!![];return![];}function hasNestedKey(_0x571865,_0x3fe5a5){const _0x2fab31=a7_0x14bc51;if(!_0x571865||!_0x3fe5a5)return![];const _0x12038c=_0x3fe5a5['split']('.');let _0x2770e5=_0x571865;for(const _0x55863a of _0x12038c){if(typeof _0x2770e5!==_0x2fab31(0x1d1)||_0x2770e5===null||!Object['hasOwn'](_0x2770e5,_0x55863a))return![];_0x2770e5=_0x2770e5[_0x55863a];}return!![];}class LangSyncCommand extends Command_1['default']{[a7_0x14bc51(0x1ea)]='lang:sync';['description']='Auto-fill\x20missing\x20translation\x20keys\x20into\x20en.json\x20files.';async[a7_0x14bc51(0x1e1)](){const a7_0x31dda1={_0x2f7e6c:0x1e2,_0x46e4af:0x207,_0x1e870f:0x1f5,_0x2e6c28:0x21b,_0xbe2391:0x1d2,_0x250e4c:0x20b,_0x18a934:0x1fe,_0x3ccc34:0x1e7,_0x391a15:0x1f7,_0x3630f4:0x1e6,_0x53b767:0x218,_0x24c252:0x211,_0x3bcd9b:0x20d},a7_0x4678f2={_0x1dc7db:0x1ff},a7_0x6f418={_0x4ab1b9:0x1f0},_0x1dc4ba=a7_0x14bc51,_0x3ea1db={'FpLdM':'StringLiteral','hLegX':function(_0x1cc24b,_0x4aa860){return _0x1cc24b===_0x4aa860;},'asERE':_0x1dc4ba(a7_0x31dda1._0x2f7e6c),'SqEXt':'**/dist/**','rAnbg':'**/leetMap.js','ASWES':'src','OdlVx':_0x1dc4ba(a7_0x31dda1._0x46e4af)},_0x4b9c70=process['cwd'](),_0xebd9ab='en';console['log']('---\x20👻\x20Kythia\x20Ghost\x20Writer\x20(Lang\x20Sync)\x20---'),console['log'](_0x1dc4ba(a7_0x31dda1._0x1e870f));const _0x3f115c=new Set(),_0x294b7f=new Set();let _0x36c55c=-0x656+0x2*0x2f9+0x64;const _0x240a02=[_0x3ea1db['asERE'],'src'],_0x218ea7=['**/node_modules/**',_0x3ea1db[_0x1dc4ba(0x1fb)],'**/assets/**',_0x1dc4ba(0x1cf),_0x1dc4ba(a7_0x31dda1._0x2e6c28),_0x3ea1db['rAnbg'],_0x1dc4ba(0x214),'**/refactor_*.js','**/undo_*.js',_0x1dc4ba(0x1fd)];_0x240a02[_0x1dc4ba(0x20c)](_0x39893e=>{const a7_0x3b8e41={_0xf4c81d:0x210,_0x1679e8:0x1d4,_0x4c61b0:0x212,_0x2db048:0x1fe,_0x4ef73e:0x203,_0x1ae11d:0x1fe},a7_0x15a693={_0x2b8f15:0x1d9,_0x338a5f:0x1ef,_0x33a5a7:0x1f4,_0x5b0734:0x205,_0xd00c84:0x1d9,_0x24b7c6:0x1ef,_0x2bec49:0x1d3,_0x2f62e6:0x1ef,_0xde990:0x1d3,_0x10ffb9:0x1d7,_0x52375e:0x1e8},_0x2a7c90=_0x1dc4ba,_0x328fd5={'CTmoJ':function(_0x24bf74,_0x77b770){return _0x3ea1db['hLegX'](_0x24bf74,_0x77b770);}},_0x4339f0=node_path_1[_0x2a7c90(0x1fe)]['join'](_0x4b9c70,_0x39893e),_0x3a41b4=glob_1['glob'][_0x2a7c90(0x218)](_0x4339f0+'/**/*.{js,ts}',{'ignore':_0x218ea7,'dot':!![]});_0x3a41b4['forEach'](_0x2234ea=>{const a7_0x590bc3={_0x27237d:0x1de,_0x2048e8:0x20e,_0x5d026e:0x206},_0x55dada=_0x2a7c90,_0x4ba485={'EyvkE':function(_0xd73997,_0x5e737f){return _0xd73997===_0x5e737f;},'tKWzg':'BinaryExpression','VVtyS':_0x3ea1db[_0x55dada(a7_0x3b8e41._0xf4c81d)]};_0x36c55c++,process['stdout'][_0x55dada(0x1ce)](_0x55dada(a7_0x3b8e41._0x1679e8)+_0x36c55c+_0x55dada(a7_0x3b8e41._0x4c61b0));try{const _0x147b6b=node_fs_1[_0x55dada(a7_0x3b8e41._0x2db048)]['readFileSync'](_0x2234ea,'utf8'),_0x56490b=parser['parse'](_0x147b6b,{'sourceType':'module','plugins':['typescript',_0x55dada(a7_0x3b8e41._0x4ef73e),'classProperties',_0x55dada(0x1dd)],'errorRecovery':!![]});(0x2017+0xd1*0xd+-0x2ab4,traverse_1[_0x55dada(a7_0x3b8e41._0x1ae11d)])(_0x56490b,{'CallExpression'(_0x4c2c8c){const _0x407c4d=_0x55dada,_0x5143d7=_0x4c2c8c[_0x407c4d(0x1cd)];if(_0x328fd5[_0x407c4d(0x1d6)](_0x5143d7['callee'][_0x407c4d(0x208)],'Identifier')&&_0x5143d7[_0x407c4d(a7_0x590bc3._0x27237d)]['name']==='t'){if(_0x5143d7[_0x407c4d(a7_0x590bc3._0x2048e8)][_0x407c4d(a7_0x590bc3._0x5d026e)]>=0x23dd+0x4f*-0x17+0x4cb*-0x6){const _0x47e8bb=_0x5143d7['arguments'][0x1118+-0x154c+0x1*0x435];_0x3e0025(_0x47e8bb);}}}});function _0x3e0025(_0x18d69f){const _0x16386d=_0x55dada;if(_0x18d69f['type']==='StringLiteral'){_0x3f115c[_0x16386d(a7_0x15a693._0x2b8f15)](_0x18d69f[_0x16386d(a7_0x15a693._0x338a5f)]);return;}if(_0x4ba485['EyvkE'](_0x18d69f['type'],'TemplateLiteral')){if(_0x18d69f['quasis'][_0x16386d(0x206)]===-0x16a*-0x15+0xd59+0x1*-0x2b0a&&_0x18d69f[_0x16386d(0x1eb)]['length']===0x16a4+0x5*-0x78d+0xf1d){_0x3f115c[_0x16386d(0x1d9)](_0x18d69f[_0x16386d(a7_0x15a693._0x33a5a7)][0x14*-0xda+-0x1497*-0x1+-0x38f][_0x16386d(0x1ef)]['raw']);return;}let _0x260b55='';_0x18d69f['quasis'][_0x16386d(0x20c)]((_0x219e5c,_0xca6d26)=>{const _0x22e5a5=_0x16386d;_0x260b55+=_0x219e5c[_0x22e5a5(0x1ef)][_0x22e5a5(0x20a)];if(!_0x219e5c['tail'])_0x260b55+='*';}),_0x260b55=_0x260b55[_0x16386d(a7_0x15a693._0x5b0734)](/_/g,'.'),_0x294b7f[_0x16386d(a7_0x15a693._0xd00c84)](_0x260b55);return;}if(_0x18d69f['type']===_0x4ba485['tKWzg']&&_0x18d69f['operator']==='+'){if(_0x18d69f['left']['type']===_0x4ba485[_0x16386d(0x217)]&&_0x18d69f[_0x16386d(0x1d3)]['type']==='StringLiteral')_0x3f115c['add'](_0x18d69f['left'][_0x16386d(a7_0x15a693._0x24b7c6)]+_0x18d69f[_0x16386d(a7_0x15a693._0x2bec49)][_0x16386d(a7_0x15a693._0x2f62e6)]);else{if(_0x18d69f['left'][_0x16386d(0x208)]===_0x4ba485[_0x16386d(0x217)])_0x294b7f[_0x16386d(a7_0x15a693._0xd00c84)](_0x18d69f[_0x16386d(0x1e3)]['value']+'*');else _0x18d69f[_0x16386d(a7_0x15a693._0xde990)]['type']===_0x4ba485[_0x16386d(0x217)]&&_0x294b7f[_0x16386d(a7_0x15a693._0xd00c84)]('*'+_0x18d69f[_0x16386d(0x1d3)][_0x16386d(0x1ef)]);}return;}if(_0x18d69f['type']===_0x16386d(a7_0x15a693._0x10ffb9)){_0x3e0025(_0x18d69f['consequent']),_0x3e0025(_0x18d69f[_0x16386d(a7_0x15a693._0x52375e)]);return;}}}catch(_0x5616db){}});}),console[_0x1dc4ba(0x211)]('\x0aScan\x20complete.\x20Found\x20'+_0x3f115c[_0x1dc4ba(0x1d8)]+_0x1dc4ba(a7_0x31dda1._0xbe2391));_0x294b7f[_0x1dc4ba(0x1d8)]>0x1*0x110c+-0xffd*-0x1+-0x2109&&console['log']('(Ignored\x20'+_0x294b7f['size']+_0x1dc4ba(0x21e));let _0x1b0333={};try{const _0x6f681c=node_path_1[_0x1dc4ba(0x1fe)][_0x1dc4ba(a7_0x31dda1._0x250e4c)](_0x4b9c70,'node_modules/kythia-core/src/lang',_0xebd9ab+'.json');node_fs_1['default']['existsSync'](_0x6f681c)&&(_0x1b0333=JSON['parse'](node_fs_1[_0x1dc4ba(0x1fe)]['readFileSync'](_0x6f681c,'utf8')),console[_0x1dc4ba(0x211)](_0x1dc4ba(0x1db)));}catch(_0x53eac0){console['warn']('\x20\x20>\x20⚠️\x20Could\x20not\x20load\x20kythia-core\x20definitions.'),console['error'](_0x53eac0);}const _0x449860={},_0x3c3c7f=node_path_1[_0x1dc4ba(0x1fe)][_0x1dc4ba(0x20b)](_0x4b9c70,'lang',_0xebd9ab+'.json'),_0x54c6cd=node_path_1['default']['join'](_0x4b9c70,_0x3ea1db['ASWES'],_0x3ea1db['OdlVx'],_0xebd9ab+'.json');let _0x1bda9d=node_fs_1['default']['existsSync'](_0x3c3c7f)?_0x3c3c7f:_0x54c6cd;if(!node_fs_1[_0x1dc4ba(a7_0x31dda1._0x18a934)][_0x1dc4ba(a7_0x31dda1._0x3ccc34)](_0x1bda9d)){if(!node_fs_1[_0x1dc4ba(0x1fe)]['existsSync'](node_path_1['default']['join'](_0x4b9c70,_0x1dc4ba(0x207))))node_fs_1[_0x1dc4ba(0x1fe)][_0x1dc4ba(0x1e0)](node_path_1['default'][_0x1dc4ba(0x20b)](_0x4b9c70,'lang'));node_fs_1['default'][_0x1dc4ba(a7_0x31dda1._0x391a15)](_0x3c3c7f,'{}'),_0x1bda9d=_0x3c3c7f;}const _0x2b17e2=glob_1[_0x1dc4ba(a7_0x31dda1._0x3630f4)][_0x1dc4ba(a7_0x31dda1._0x53b767)]('addons/**/lang/'+_0xebd9ab+'.json',{'cwd':_0x4b9c70,'absolute':!![]});_0x2b17e2[_0x1dc4ba(0x20c)](_0x5b1f59=>{const _0x5163d4=_0x1dc4ba,_0x1a3007=_0x5b1f59[_0x5163d4(a7_0x6f418._0x4ab1b9)](/addons[\\/]([^\\/]+)[\\/]lang/);_0x1a3007?.[-0x22f*-0x11+0x1d7e+-0x429c]&&(_0x449860[_0x1a3007[0x234d+-0xd2d+-0x161f]]=_0x5b1f59);});const _0x77bc94={};for(const _0x23d8fa of _0x3f115c){if(hasNestedKey(_0x1b0333,_0x23d8fa))continue;const _0x40b85f=_0x23d8fa['split']('.'),_0x2ad26c=_0x40b85f[0x1972+0xd3e+0x10*-0x26b];let _0x3ce734=_0x1bda9d;_0x449860[_0x2ad26c]&&(_0x3ce734=_0x449860[_0x2ad26c]);let _0x324b7c={};try{node_fs_1['default'][_0x1dc4ba(a7_0x31dda1._0x3ccc34)](_0x3ce734)&&(_0x324b7c=JSON['parse'](node_fs_1['default'][_0x1dc4ba(0x1f8)](_0x3ce734,'utf8')));}catch(_0x303edc){}if(!hasNestedKey(_0x324b7c,_0x23d8fa)){if(setNestedValue(_0x324b7c,_0x23d8fa,'__MISSING__')){node_fs_1['default']['writeFileSync'](_0x3ce734,JSON[_0x1dc4ba(0x1dc)](_0x324b7c,null,'\x09'));if(!_0x77bc94[_0x3ce734])_0x77bc94[_0x3ce734]=0x8b*0x2+0x1fd0+-0x20e6;_0x77bc94[_0x3ce734]++;}}}console[_0x1dc4ba(a7_0x31dda1._0x24c252)](_0x1dc4ba(0x209));const _0x2c5b2d=Object[_0x1dc4ba(0x1ed)](_0x77bc94);_0x2c5b2d[_0x1dc4ba(0x206)]>0x1949+0x148c+0xf47*-0x3?(_0x2c5b2d['forEach'](_0x26c21b=>{const _0x1222d4=_0x1dc4ba;console[_0x1222d4(0x211)]('📝\x20'+node_path_1['default'][_0x1222d4(0x200)](_0x4b9c70,_0x26c21b)+':\x20+'+_0x77bc94[_0x26c21b]+_0x1222d4(a7_0x4678f2._0x1dc7db));}),console[_0x1dc4ba(0x211)]('\x0a\x1b[32m✨\x20Done!\x20Search\x20for\x20\x22__MISSING__\x22\x20in\x20your\x20JSON\x20files\x20to\x20fill\x20translations.\x1b[0m')):console['log'](_0x1dc4ba(a7_0x31dda1._0x3bcd9b));}}exports['default']=LangSyncCommand;
@@ -1,224 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const genai_1 = require("@google/genai");
7
- const dotenvx_1 = require("@dotenvx/dotenvx");
8
- const Command_1 = __importDefault(require("../Command"));
9
- const node_path_1 = __importDefault(require("node:path"));
10
- const picocolors_1 = __importDefault(require("picocolors"));
11
- const node_fs_1 = __importDefault(require("node:fs"));
12
- (0, dotenvx_1.config)({
13
- quiet: true,
14
- });
15
- class LangTranslateCommand extends Command_1.default {
16
- signature = 'lang:translate <target>';
17
- description = 'Translate en.json to target language using Gemini AI';
18
- async handle(_options, target) {
19
- const API_KEYS = (process.env.GEMINI_API_KEYS || '')
20
- .split(',')
21
- .filter(Boolean);
22
- const targetLang = target || 'ja';
23
- const TARGET_LANGUAGE = targetLang === 'ja' ? 'Japan (ja)' : `${targetLang}`;
24
- const rootDir = process.cwd();
25
- const INPUT_FILE_SAFE = node_path_1.default.join(rootDir, 'addons', 'core', 'lang', 'en.json');
26
- const OUTPUT_FILE_SAFE = node_path_1.default.join(rootDir, 'addons', 'core', 'lang', `${targetLang}.json`);
27
- const BATCH_SIZE = 80;
28
- const GEMINI_MODEL = 'gemini-2.5-flash';
29
- const DELAY_BETWEEN_BATCHES_MS = 5000;
30
- const DELAY_ON_ERROR_MS = 5000;
31
- if (API_KEYS.length === 0) {
32
- console.error(picocolors_1.default.red('❌ FATAL: GEMINI_API_KEYS not found in .env!'));
33
- process.exit(1);
34
- }
35
- let keyIndex = 0;
36
- function getNextGenAI(nextIndex = null) {
37
- if (typeof nextIndex === 'number') {
38
- keyIndex = nextIndex % API_KEYS.length;
39
- }
40
- const apiKey = API_KEYS[keyIndex];
41
- keyIndex = (keyIndex + 1) % API_KEYS.length;
42
- console.log(`[Key Rotator] Using API Key #${keyIndex === 0 ? API_KEYS.length : keyIndex}`);
43
- return new genai_1.GoogleGenAI({ apiKey });
44
- }
45
- function flattenObject(obj, parentKey = '', result = {}) {
46
- for (const key in obj) {
47
- const newKey = parentKey ? `${parentKey}.${key}` : key;
48
- if (typeof obj[key] === 'object' &&
49
- obj[key] !== null &&
50
- !Array.isArray(obj[key])) {
51
- flattenObject(obj[key], newKey, result);
52
- }
53
- else {
54
- result[newKey] = obj[key];
55
- }
56
- }
57
- return result;
58
- }
59
- function unflattenObject(obj) {
60
- const result = {};
61
- for (const key in obj) {
62
- const keys = key.split('.');
63
- keys.reduce((acc, cur, i) => {
64
- if (i === keys.length - 1) {
65
- acc[cur] = obj[key];
66
- }
67
- else {
68
- acc[cur] = acc[cur] || {};
69
- }
70
- return acc[cur];
71
- }, result);
72
- }
73
- return result;
74
- }
75
- async function translateBatch(batch) {
76
- const placeholderMap = new Map();
77
- let placeholderCounter = 0;
78
- const processedBatch = JSON.parse(JSON.stringify(batch), (_key, value) => {
79
- if (typeof value !== 'string')
80
- return value;
81
- return value.replace(/{([^{}]*)}/g, (match) => {
82
- if (!placeholderMap.has(match)) {
83
- placeholderMap.set(`__P_${placeholderCounter}__`, match);
84
- placeholderCounter++;
85
- }
86
- for (const [token, ph] of placeholderMap.entries()) {
87
- if (ph === match)
88
- return token;
89
- }
90
- return match;
91
- });
92
- });
93
- const prompt = `
94
- You are a professional localization expert. Translate the JSON values from english to ${TARGET_LANGUAGE}.
95
-
96
- - **Target Locale:** ${targetLang} (choose naturally)
97
- - **DO NOT** translate the JSON keys.
98
- - **DO NOT** translate any placeholder tokens that look like \`__P_N__\`. Keep them exactly as they are.
99
- - **KEEP** all original markdown (\`##\`, \`*\`, \`\\\`\`, \`\n\`).
100
- - Respond ONLY with the translated JSON object, in a VALID JSON format.
101
-
102
- Input:
103
- ${JSON.stringify(processedBatch, null, 2)}
104
-
105
- Output:
106
- `;
107
- let attempt = 1;
108
- let usedKeyIndex = keyIndex;
109
- while (true) {
110
- let genAI = getNextGenAI();
111
- const GEMINI_API_CLIENT = genAI;
112
- try {
113
- console.log(`[Batch] Attempt #${attempt}...`);
114
- const response = await GEMINI_API_CLIENT.models.generateContent({
115
- model: GEMINI_MODEL,
116
- contents: [{ role: 'user', parts: [{ text: prompt }] }],
117
- });
118
- let text;
119
- const respAny = response;
120
- if (respAny && typeof respAny.text === 'function') {
121
- text = respAny.text();
122
- }
123
- else if (respAny && typeof respAny.text === 'string') {
124
- text = respAny.text;
125
- }
126
- text = typeof text === 'string' ? text.trim() : '';
127
- if (text.startsWith('```json')) {
128
- text = text.substring(7, text.length - 3).trim();
129
- }
130
- else if (text.startsWith('```')) {
131
- text = text
132
- .replace(/^```[a-z]*\n?/, '')
133
- .replace(/```$/, '')
134
- .trim();
135
- }
136
- let translatedBatch = JSON.parse(text);
137
- translatedBatch = JSON.parse(JSON.stringify(translatedBatch), (_key, value) => {
138
- if (typeof value !== 'string')
139
- return value;
140
- return value.replace(/__P_(\d+)__/g, (match) => placeholderMap.get(match) || match);
141
- });
142
- return translatedBatch;
143
- }
144
- catch (e) {
145
- const errorMessage = e.message || '';
146
- console.error(picocolors_1.default.red(`❌ Error in batch (Attempt ${attempt})...`), errorMessage);
147
- if (errorMessage.includes('429') ||
148
- errorMessage.includes('RESOURCE_EXHAUSTED')) {
149
- usedKeyIndex = (usedKeyIndex + 1) % API_KEYS.length;
150
- console.warn(picocolors_1.default.yellow(`[RATE LIMIT] Got 429! Rotating to next API key [#${usedKeyIndex + 1}] and retrying.`));
151
- genAI = getNextGenAI(usedKeyIndex);
152
- }
153
- else {
154
- console.warn(picocolors_1.default.yellow(`[OTHER ERROR] Waiting ${DELAY_ON_ERROR_MS / 1000} seconds...`));
155
- await new Promise((resolve) => setTimeout(resolve, DELAY_ON_ERROR_MS));
156
- }
157
- attempt++;
158
- }
159
- }
160
- }
161
- console.log(picocolors_1.default.cyan(`🚀 Starting translation process (to ${targetLang})...`));
162
- console.log(picocolors_1.default.dim(` Input: ${INPUT_FILE_SAFE}`));
163
- console.log(picocolors_1.default.dim(` Output: ${OUTPUT_FILE_SAFE}`));
164
- if (!node_fs_1.default.existsSync(INPUT_FILE_SAFE)) {
165
- console.error(picocolors_1.default.red(`❌ Input file not found: ${INPUT_FILE_SAFE}`));
166
- process.exit(1);
167
- }
168
- const idJsonString = node_fs_1.default.readFileSync(INPUT_FILE_SAFE, 'utf8');
169
- const idJson = JSON.parse(idJsonString);
170
- console.log(picocolors_1.default.dim('Flattening JSON...'));
171
- const flatIdJson = flattenObject(idJson);
172
- const flatLangJson = {};
173
- const allKeys = Object.keys(flatIdJson);
174
- let existingLangJson = {};
175
- if (node_fs_1.default.existsSync(OUTPUT_FILE_SAFE)) {
176
- console.log(picocolors_1.default.yellow(`[INFO] File ${OUTPUT_FILE_SAFE} exists, continuing work...`));
177
- try {
178
- existingLangJson = flattenObject(JSON.parse(node_fs_1.default.readFileSync(OUTPUT_FILE_SAFE, 'utf8')));
179
- }
180
- catch (_e) {
181
- console.warn(picocolors_1.default.yellow(`[WARN] File ${OUTPUT_FILE_SAFE} is corrupted, will be overwritten.`));
182
- }
183
- }
184
- const keysToTranslate = allKeys.filter((key) => typeof flatIdJson[key] === 'string' &&
185
- (!existingLangJson[key] || existingLangJson[key] === flatIdJson[key]));
186
- allKeys.forEach((key) => {
187
- if (!keysToTranslate.includes(key)) {
188
- flatLangJson[key] = existingLangJson[key] || flatIdJson[key];
189
- }
190
- });
191
- const totalBatches = Math.ceil(keysToTranslate.length / BATCH_SIZE);
192
- console.log(picocolors_1.default.green(`✅ Total of ${allKeys.length} keys.`));
193
- console.log(picocolors_1.default.green(`✅ Found ${keysToTranslate.length} keys that need translation.`));
194
- console.log(picocolors_1.default.green(`✅ Divided into ${totalBatches} batches (up to ${BATCH_SIZE} keys per batch).`));
195
- for (let i = 0; i < totalBatches; i++) {
196
- console.log(picocolors_1.default.cyan(`--- 🏃 Working on Batch ${i + 1} / ${totalBatches} ---`));
197
- const batchKeys = keysToTranslate.slice(i * BATCH_SIZE, (i + 1) * BATCH_SIZE);
198
- const batchToTranslate = {};
199
- batchKeys.forEach((key) => {
200
- batchToTranslate[key] = flatIdJson[key];
201
- });
202
- if (Object.keys(batchToTranslate).length > 0) {
203
- const translatedBatch = await translateBatch(batchToTranslate);
204
- if (translatedBatch) {
205
- Object.assign(flatLangJson, translatedBatch);
206
- }
207
- else {
208
- Object.assign(flatLangJson, batchToTranslate);
209
- }
210
- }
211
- if (i < totalBatches - 1) {
212
- console.log(picocolors_1.default.yellow(`--- 😴 Waiting ${DELAY_BETWEEN_BATCHES_MS / 1000} seconds between batches ---`));
213
- await new Promise((resolve) => setTimeout(resolve, DELAY_BETWEEN_BATCHES_MS));
214
- }
215
- }
216
- console.log(picocolors_1.default.dim('Unflattening JSON...'));
217
- const langJson = unflattenObject(flatLangJson);
218
- console.log(picocolors_1.default.green(`Saving to file: ${OUTPUT_FILE_SAFE}`));
219
- node_fs_1.default.writeFileSync(OUTPUT_FILE_SAFE, JSON.stringify(langJson, null, 2), 'utf8');
220
- console.log(picocolors_1.default.green('🎉 Done! Translation file generated successfully.'));
221
- }
222
- }
223
- exports.default = LangTranslateCommand;
224
- //# sourceMappingURL=LangTranslateCommand.js.map
1
+ 'use strict';const a8_0x5154bb=a8_0x5713;function a8_0x2734(){const _0x1419de=['AgfUzgXL','lI4U','D2fYBG','AM9PBG','C3rYAw5N','igv4Axn0CYWGy29UDgLUDwLUzYb3B3jRlI4U','y29UzMLN','x19qxW','y29Yzq','z3jLzw4','zw4UANnVBG','rMXHDhrLBMLUzYbku09olI4U','v3boA3G','ks4UlG','mtq1nda2odbkvM5TEva','DxrMoa','4P2mievYCM9YigLUigjHDgnOicHbDhrLBxb0ia','ntiXndm3B0L3ANHx','zxjYB3i','ndCXmdeYsxH0qwLT','yxnZAwDU','y3LHBG','DhjPBq','m1j5Bwfsta','C3rHCNrZv2L0Aa','uKvtt1vsq0vFrvHiqvvtveve','EwvSBg93','BM9KztPMCW','nJm5nZq3yxjVu0j0','zgLT','mtCWody0B05bDe1u','BgvUz3rO','C3rYAw5NAwz5','cGPpDxrWDxq6cG','vw5MBgf0DgvUAw5NiePtt04UlI4','AxnbCNjHEq','zgvMyxvSDa','zgvMAw5LuhjVCgvYDhK','zM9YrwfJAa','zxHPC3rZu3LUyW','vMHnt0u','8j+AGcbtDgfYDgLUzYb0CMfUC2XHDgLVBIbWCM9JzxnZicH0BYa','ygbGANnVBG','CMvWBgfJzq','ue5zr2S','Dgv4Da','igTLExmU','igTLExmGCgvYigjHDgnOks4','CMvK','mtaXmZuXmNLQD0zjBW','ls0TipcFJ4mGv29YA2LUzYbVBIbcyxrJAca','BM9KztPWyxrO','A2v5CW','mta3nhzhweHRAW','w0TLEsbsB3rHDg9YxsbvC2LUzYbbueKGs2v5icm','icaGt3v0Chv0oIa','mZjLENv2qxK','nZK2meHywffgDG','icaGsw5WDxq6ia','lMPZB24','zw50CMLLCW','w09usevsievsuK9sxsbxywL0Aw5Nia','lGOklsaQkLrHCMDLDcbmB2nHBgu6kIOG','qu9KuMu','zMLSDgvY','zxHPDa','Bg9N','4P2miezbvefmoIbhru1jtKLFqvbjx0TfwvmGBM90igzVDw5KigLUic5LBNyH','nZbbzNDkD2u','zw52','sMfWyw4GkgPHkq','r29Vz2XLr2vUquK','Aw5JBhvKzxm','zgvZy3jPChrPB24','icHJAg9VC2uGBMf0DxjHBgX5kqOTicOQre8GtK9ukIOGDhjHBNnSyxrLihrOzsbku09oigTLExmUcI0GkIPetYbot1qQkIb0CMfUC2XHDguGyw55ihbSywnLAg9SzgvYihrVA2vUCYb0Agf0igXVB2SGBgLRzsbGx19qx05Fx2aUieTLzxaGDgHLBsbLEgfJDgX5igfZihrOzxKGyxjLlGOTicOQs0vfucOQigfSBcbVCMLNAw5HBcbTyxjRzg93BIaOycmJycWGycPGlcbGxgbGlcbGcMaPlGOTifjLC3bVBMqGt05mwsb3AxrOihrOzsb0CMfUC2XHDgvKiePtt04GB2jQzwn0lcbPBIbHifzbteLeiePtt04GzM9YBwf0lGOksw5WDxq6cG','C2LNBMf0DxjL','8j+oIsbeB25LisbuCMfUC2XHDgLVBIbMAwXLigDLBMvYyxrLzcbZDwnJzxnZzNvSBhKU','z2vUzxjHDgvdB250zw50','CgfYC2u'];a8_0x2734=function(){return _0x1419de;};return a8_0x2734();}(function(_0x43cf93,_0x1d86ce){const a8_0x1fe028={_0x3f83b3:0x6d,_0x47eeba:0x75,_0x471c68:0x71},_0x1fb5bc=a8_0x5713,_0x435f61=_0x43cf93();while(!![]){try{const _0x3ca8c7=-parseInt(_0x1fb5bc(0xa9))/(-0x1cf4+0x25*-0xfd+0x1*0x4186)+-parseInt(_0x1fb5bc(a8_0x1fe028._0x3f83b3))/(-0x19*-0x23+-0x1a7d+0x1714)+parseInt(_0x1fb5bc(0xa2))/(0x8dd*0x2+-0xb95+-0xa*0x9d)*(parseInt(_0x1fb5bc(0x9e))/(-0x2369+0xee9*0x1+0x1484))+-parseInt(_0x1fb5bc(a8_0x1fe028._0x47eeba))/(0x1b8a+-0x15*-0x1a+-0x1*0x1da7)*(parseInt(_0x1fb5bc(a8_0x1fe028._0x471c68))/(-0x658+-0x1602+0x1c60))+-parseInt(_0x1fb5bc(0x9c))/(0x512*-0x4+0x2443*0x1+-0x7fa*0x2)*(-parseInt(_0x1fb5bc(0x74))/(0x11c*-0xc+0x1*0x4fd+0x85b))+parseInt(_0x1fb5bc(0xa7))/(0x2304+0x27a*0xa+-0xbf3*0x5)*(-parseInt(_0x1fb5bc(0x80))/(0x1*-0xea2+-0x148f+0x233b))+parseInt(_0x1fb5bc(0x99))/(-0xcf8+-0xd81+-0x1*-0x1a84);if(_0x3ca8c7===_0x1d86ce)break;else _0x435f61['push'](_0x435f61['shift']());}catch(_0x1db9a3){_0x435f61['push'](_0x435f61['shift']());}}}(a8_0x2734,-0x139*-0x2cc+-0x51f5e+-0x2*-0x2f7d3));function a8_0x5713(_0xf5650d,_0xd0a4c2){_0xf5650d=_0xf5650d-(0x81+0x76*0x1a+-0xc19);const _0x5272eb=a8_0x2734();let _0x15962e=_0x5272eb[_0xf5650d];if(a8_0x5713['qEoGJl']===undefined){var _0x4209d0=function(_0x556203){const _0x2f3ace='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x31ac36='',_0x394f8c='';for(let _0x49ad95=0x14e*-0x1+0xa*0x2ab+-0x1960,_0x4d6992,_0x172f88,_0x576104=0x5*0x5ce+-0x25e0+-0x8da*-0x1;_0x172f88=_0x556203['charAt'](_0x576104++);~_0x172f88&&(_0x4d6992=_0x49ad95%(0x1844+0x51*0x73+-0x3ca3)?_0x4d6992*(-0x3d*-0x7+0x1a32+-0x1b9d)+_0x172f88:_0x172f88,_0x49ad95++%(0xb*0x217+0x146b+-0x2b64))?_0x31ac36+=String['fromCharCode'](-0x56d+-0x23e2*-0x1+-0x1d76&_0x4d6992>>(-(0x43f*-0x7+0x19b*-0xb+0x2f64*0x1)*_0x49ad95&0x1*-0x18fd+0x2*0xddb+-0x2b3)):-0x17*0x17b+-0xc31*-0x3+-0x286){_0x172f88=_0x2f3ace['indexOf'](_0x172f88);}for(let _0x1a5d35=-0x341+0x84*-0x3+-0x1*-0x4cd,_0x314da2=_0x31ac36['length'];_0x1a5d35<_0x314da2;_0x1a5d35++){_0x394f8c+='%'+('00'+_0x31ac36['charCodeAt'](_0x1a5d35)['toString'](-0xc46+-0x221e+0x2e74))['slice'](-(-0xf*-0x2+0x266a+-0x2*0x1343));}return decodeURIComponent(_0x394f8c);};a8_0x5713['ILbJIA']=_0x4209d0,a8_0x5713['LszIkL']={},a8_0x5713['qEoGJl']=!![];}const _0x3f7fdd=_0x5272eb[-0xb9*-0x1f+0x1d9+-0x1*0x1840],_0x75b71d=_0xf5650d+_0x3f7fdd,_0x136237=a8_0x5713['LszIkL'][_0x75b71d];return!_0x136237?(_0x15962e=a8_0x5713['ILbJIA'](_0x15962e),a8_0x5713['LszIkL'][_0x75b71d]=_0x15962e):_0x15962e=_0x136237,_0x15962e;}var __importDefault=this&&this['__importDefault']||function(_0x5e25aa){return _0x5e25aa&&_0x5e25aa['__esModule']?_0x5e25aa:{'default':_0x5e25aa};};Object[a8_0x5154bb(0xb0)](exports,'__esModule',{'value':!![]});const genai_1=require('@google/genai'),dotenvx_1=require('@dotenvx/dotenvx'),Command_1=__importDefault(require('../Command')),node_path_1=__importDefault(require(a8_0x5154bb(0x6f))),picocolors_1=__importDefault(require('picocolors')),node_fs_1=__importDefault(require(a8_0x5154bb(0xa6)));(-0x1*0x175f+0x710*-0x5+0x3aaf,dotenvx_1[a8_0x5154bb(0x91)])({'quiet':!![]});class LangTranslateCommand extends Command_1['default']{[a8_0x5154bb(0x87)]='lang:translate\x20<target>';[a8_0x5154bb(0x85)]='Translate\x20en.json\x20to\x20target\x20language\x20using\x20Gemini\x20AI';async[a8_0x5154bb(0x8b)](_0x373ef8,_0xb0649b){const a8_0x487112={_0xa08e5e:0x7c,_0x1fb7c4:0x82,_0x5728fe:0x8e,_0x5ebe1a:0x95,_0x8f2f1b:0xaf,_0x2a1a02:0x77,_0x551acd:0x7d,_0x3a31e6:0xa8,_0x5dfc68:0x73,_0x3300f5:0x96,_0x56cded:0x70,_0x222e28:0x8a,_0x46bafb:0xb1,_0x48e779:0x7e,_0x4c7c6f:0x6a,_0x50c295:0x94,_0x3b5613:0xaf,_0x14b558:0xa0,_0x4decd5:0x6e,_0x587947:0xaa,_0x444dbc:0x9f,_0x447167:0xaf},a8_0x1bc1e6={_0x4747b7:0x84},a8_0x2666a3={_0x14d80b:0x8a,_0x4bde23:0x7a,_0x4e8489:0x86,_0x3ebf6b:0x7e,_0x468163:0x69,_0x4fbc1b:0x8f,_0x1e9e1e:0x69,_0x1d51b2:0x67,_0x1cfb42:0x8a,_0x1348de:0x84,_0x39e282:0x7b,_0x4fee99:0x8d},a8_0x5c0b02={_0x25b74f:0x8f},a8_0x4d54a9={_0xd613fa:0x97,_0x4c1480:0xae},a8_0x3cb2bc={_0x4cee6d:0xaa,_0x1093ac:0x83},_0x20eda5=a8_0x5154bb,_0x46168c={'PNYGk':'number','goMNN':function(_0x2c2085,_0x4b137c){return _0x2c2085===_0x4b137c;},'WpNkx':function(_0x40694e,_0x28e764){return _0x40694e!==_0x28e764;},'JfPap':function(_0x198dd2){return _0x198dd2();},'nsJkF':'```','AOdRe':'429','VhMOE':function(_0x25509f,_0x5e6642){return _0x25509f%_0x5e6642;},'kWNEb':function(_0x2c78ec,_0x187f52){return _0x2c78ec(_0x187f52);}},_0x31181b=(process[_0x20eda5(0x81)]['GEMINI_API_KEYS']||'')['split'](',')[_0x20eda5(a8_0x487112._0xa08e5e)](Boolean),_0x3e44d7=_0xb0649b||'ja',_0x23af2c=_0x3e44d7==='ja'?_0x20eda5(a8_0x487112._0x1fb7c4):''+_0x3e44d7,_0x205cf4=process['cwd'](),_0x55967f=node_path_1['default'][_0x20eda5(a8_0x487112._0x5728fe)](_0x205cf4,'addons','core','lang',_0x20eda5(a8_0x487112._0x5ebe1a)),_0x2b1579=node_path_1[_0x20eda5(a8_0x487112._0x8f2f1b)][_0x20eda5(0x8e)](_0x205cf4,'addons',_0x20eda5(0x93),'lang',_0x3e44d7+_0x20eda5(a8_0x487112._0x2a1a02)),_0x3a116b=-0x1a*-0xba+-0x7*-0x13d+-0x4b*0x5d,_0x46c410='gemini-2.5-flash',_0x81280b=0x323*0x9+-0x1b23*-0x1+-0x23d6,_0x3a4c1=-0x4*-0x279+-0x9bd*0x3+0x26db;_0x31181b['length']===-0xf*-0x16e+0x2093*0x1+0x3605*-0x1&&(console[_0x20eda5(0x9d)](picocolors_1[_0x20eda5(0xaf)]['red'](_0x20eda5(0x7f))),process[_0x20eda5(a8_0x487112._0x551acd)](0x1*0x160f+0x9*-0x31a+0x5dc));let _0x350691=-0x3*-0xb6b+-0x1*-0x2701+0x4942*-0x1;function _0x5ea30a(_0x2d4f33=null){const _0x438c01=_0x20eda5;typeof _0x2d4f33===_0x46168c[_0x438c01(0x68)]&&(_0x350691=_0x2d4f33%_0x31181b['length']);const _0x98efd7=_0x31181b[_0x350691];return _0x350691=(_0x350691+(-0xaa5+-0x6c6*-0x1+0x3e0))%_0x31181b[_0x438c01(a8_0x3cb2bc._0x4cee6d)],console['log'](_0x438c01(0x72)+(_0x46168c['goMNN'](_0x350691,0x16*-0x31+0xd4a+-0x914)?_0x31181b[_0x438c01(0xaa)]:_0x350691)),new genai_1[(_0x438c01(a8_0x3cb2bc._0x1093ac))]({'apiKey':_0x98efd7});}function _0x543f5a(_0x54ec32,_0x7d3f4='',_0x347e18={}){const _0x513f2f=_0x20eda5;for(const _0x116e0c in _0x54ec32){const _0x2f762d=_0x7d3f4?_0x7d3f4+'.'+_0x116e0c:_0x116e0c;typeof _0x54ec32[_0x116e0c]==='object'&&_0x46168c[_0x513f2f(a8_0x4d54a9._0xd613fa)](_0x54ec32[_0x116e0c],null)&&!Array[_0x513f2f(a8_0x4d54a9._0x4c1480)](_0x54ec32[_0x116e0c])?_0x543f5a(_0x54ec32[_0x116e0c],_0x2f762d,_0x347e18):_0x347e18[_0x2f762d]=_0x54ec32[_0x116e0c];}return _0x347e18;}function _0xbfc362(_0x351730){const _0xf47764={};for(const _0x4ff468 in _0x351730){const _0x335fcb=_0x4ff468['split']('.');_0x335fcb['reduce']((_0x45b311,_0x37da48,_0x2abeda)=>{return _0x2abeda===_0x335fcb['length']-(-0xad+0x1*-0x9eb+0xa99)?_0x45b311[_0x37da48]=_0x351730[_0x4ff468]:_0x45b311[_0x37da48]=_0x45b311[_0x37da48]||{},_0x45b311[_0x37da48];},_0xf47764);}return _0xf47764;}async function _0x4db5fc(_0x25b9e6){const a8_0x3494f7={_0x5834df:0x8f},_0x1e1e72=_0x20eda5,_0x1c8033=new Map();let _0xf5afab=0x23e*-0x11+-0x10*0x130+0x391e;const _0x4ad6d8=JSON[_0x1e1e72(a8_0x2666a3._0x14d80b)](JSON['stringify'](_0x25b9e6),(_0x118095,_0xbf2b6c)=>{const a8_0x2b1e86={_0x57fe76:0x78},_0x18d7ba=_0x1e1e72;if(typeof _0xbf2b6c!==_0x18d7ba(a8_0x5c0b02._0x25b74f))return _0xbf2b6c;return _0xbf2b6c['replace'](/{([^{}]*)}/g,_0x1bbd87=>{const _0x364421=_0x18d7ba;!_0x1c8033['has'](_0x1bbd87)&&(_0x1c8033['set'](_0x364421(0x92)+_0xf5afab+'__',_0x1bbd87),_0xf5afab++);for(const [_0x1f4531,_0x3eecc0]of _0x1c8033[_0x364421(a8_0x2b1e86._0x57fe76)]()){if(_0x3eecc0===_0x1bbd87)return _0x1f4531;}return _0x1bbd87;});}),_0x1d007f='\x0aYou\x20are\x20a\x20professional\x20localization\x20expert.\x20Translate\x20the\x20JSON\x20values\x20from\x20english\x20to\x20'+_0x23af2c+_0x1e1e72(a8_0x2666a3._0x4bde23)+_0x3e44d7+_0x1e1e72(a8_0x2666a3._0x4e8489)+JSON['stringify'](_0x4ad6d8,null,-0x56*0x43+0x599*-0x3+-0x274f*-0x1)+_0x1e1e72(0xac);let _0xb639ae=0xfe4+-0x9*0x2c3+0x8f8,_0x5c4121=_0x350691;while(!![]){let _0xd89e57=_0x46168c['JfPap'](_0x5ea30a);const _0x223e5c=_0xd89e57;try{console[_0x1e1e72(a8_0x2666a3._0x3ebf6b)]('[Batch]\x20Attempt\x20#'+_0xb639ae+_0x1e1e72(0x8c));const _0x621b11=await _0x223e5c['models'][_0x1e1e72(0x89)]({'model':_0x46c410,'contents':[{'role':'user','parts':[{'text':_0x1d007f}]}]});let _0x188dc0;const _0x5a6b29=_0x621b11;if(_0x5a6b29&&typeof _0x5a6b29[_0x1e1e72(a8_0x2666a3._0x468163)]==='function')_0x188dc0=_0x5a6b29['text']();else _0x5a6b29&&typeof _0x5a6b29['text']===_0x1e1e72(a8_0x2666a3._0x4fbc1b)&&(_0x188dc0=_0x5a6b29[_0x1e1e72(a8_0x2666a3._0x1e9e1e)]);_0x188dc0=typeof _0x188dc0==='string'?_0x188dc0[_0x1e1e72(0xa1)]():'';if(_0x188dc0[_0x1e1e72(0xa3)](_0x1e1e72(0x66)))_0x188dc0=_0x188dc0['substring'](0x2341+0xc1f*-0x3+0x123,_0x188dc0['length']-(0x1676*-0x1+-0x22e2+0x395b))['trim']();else _0x188dc0[_0x1e1e72(0xa3)](_0x46168c['nsJkF'])&&(_0x188dc0=_0x188dc0[_0x1e1e72(a8_0x2666a3._0x1d51b2)](/^```[a-z]*\n?/,'')['replace'](/```$/,'')[_0x1e1e72(0xa1)]());let _0x41cb73=JSON['parse'](_0x188dc0);return _0x41cb73=JSON[_0x1e1e72(a8_0x2666a3._0x1cfb42)](JSON['stringify'](_0x41cb73),(_0x36091f,_0x464d1c)=>{const _0x290810=_0x1e1e72;if(typeof _0x464d1c!==_0x290810(a8_0x3494f7._0x5834df))return _0x464d1c;return _0x464d1c[_0x290810(0x67)](/__P_(\d+)__/g,_0x24f382=>_0x1c8033['get'](_0x24f382)||_0x24f382);}),_0x41cb73;}catch(_0x13f123){const _0x269fff=_0x13f123['message']||'';console['error'](picocolors_1[_0x1e1e72(0xaf)][_0x1e1e72(0x6c)](_0x1e1e72(0x9b)+_0xb639ae+_0x1e1e72(0x98)),_0x269fff),_0x269fff[_0x1e1e72(a8_0x2666a3._0x1348de)](_0x46168c[_0x1e1e72(a8_0x2666a3._0x39e282)])||_0x269fff['includes'](_0x1e1e72(0xa4))?(_0x5c4121=_0x46168c[_0x1e1e72(0x64)](_0x5c4121+(-0x7d4+-0xa3a+0x120f),_0x31181b[_0x1e1e72(0xaa)]),console['warn'](picocolors_1['default'][_0x1e1e72(0xa5)]('[RATE\x20LIMIT]\x20Got\x20429!\x20Rotating\x20to\x20next\x20API\x20key\x20[#'+(_0x5c4121+(0x1*0x54f+-0x3*-0x2e1+-0xdf1))+']\x20and\x20retrying.')),_0xd89e57=_0x5ea30a(_0x5c4121)):(console[_0x1e1e72(a8_0x2666a3._0x4fee99)](picocolors_1[_0x1e1e72(0xaf)]['yellow'](_0x1e1e72(0x79)+_0x3a4c1/(-0x5cd+-0x1*-0x2535+0xa0*-0x2c)+'\x20seconds...')),await new Promise(_0x32c672=>setTimeout(_0x32c672,_0x3a4c1))),_0xb639ae++;}}}console['log'](picocolors_1['default'][_0x20eda5(0xa0)](_0x20eda5(0x65)+_0x3e44d7+')...')),console['log'](picocolors_1['default'][_0x20eda5(a8_0x487112._0x3a31e6)](_0x20eda5(0x76)+_0x55967f)),console['log'](picocolors_1[_0x20eda5(a8_0x487112._0x8f2f1b)]['dim'](_0x20eda5(a8_0x487112._0x5dfc68)+_0x2b1579));!node_fs_1['default'][_0x20eda5(0xb2)](_0x55967f)&&(console[_0x20eda5(0x9d)](picocolors_1['default']['red']('❌\x20Input\x20file\x20not\x20found:\x20'+_0x55967f)),process['exit'](-0x50b*0x1+0x17f5+-0x2f*0x67));const _0x92faf4=node_fs_1['default']['readFileSync'](_0x55967f,'utf8'),_0x4821be=JSON['parse'](_0x92faf4);console['log'](picocolors_1['default'][_0x20eda5(0xa8)](_0x20eda5(a8_0x487112._0x3300f5)));const _0x4c212b=_0x543f5a(_0x4821be),_0x1c3dd0={},_0x4b3746=Object[_0x20eda5(a8_0x487112._0x56cded)](_0x4c212b);let _0xec2d61={};if(node_fs_1['default']['existsSync'](_0x2b1579)){console[_0x20eda5(0x7e)](picocolors_1['default'][_0x20eda5(0xa5)]('[INFO]\x20File\x20'+_0x2b1579+_0x20eda5(0x90)));try{_0xec2d61=_0x543f5a(JSON[_0x20eda5(a8_0x487112._0x222e28)](node_fs_1['default']['readFileSync'](_0x2b1579,'utf8')));}catch(_0x2d30d3){console[_0x20eda5(0x8d)](picocolors_1['default']['yellow']('[WARN]\x20File\x20'+_0x2b1579+'\x20is\x20corrupted,\x20will\x20be\x20overwritten.'));}}const _0x3559d8=_0x4b3746[_0x20eda5(a8_0x487112._0xa08e5e)](_0x1170f7=>typeof _0x4c212b[_0x1170f7]===_0x20eda5(0x8f)&&(!_0xec2d61[_0x1170f7]||_0xec2d61[_0x1170f7]===_0x4c212b[_0x1170f7]));_0x4b3746[_0x20eda5(a8_0x487112._0x46bafb)](_0x372b0f=>{const _0x3a4bd5=_0x20eda5;!_0x3559d8[_0x3a4bd5(a8_0x1bc1e6._0x4747b7)](_0x372b0f)&&(_0x1c3dd0[_0x372b0f]=_0xec2d61[_0x372b0f]||_0x4c212b[_0x372b0f]);});const _0x418657=Math['ceil'](_0x3559d8['length']/_0x3a116b);console[_0x20eda5(a8_0x487112._0x48e779)](picocolors_1['default'][_0x20eda5(0x94)]('✅\x20Total\x20of\x20'+_0x4b3746['length']+_0x20eda5(a8_0x487112._0x4c7c6f))),console['log'](picocolors_1['default'][_0x20eda5(a8_0x487112._0x50c295)]('✅\x20Found\x20'+_0x3559d8['length']+'\x20keys\x20that\x20need\x20translation.')),console['log'](picocolors_1['default']['green']('✅\x20Divided\x20into\x20'+_0x418657+'\x20batches\x20(up\x20to\x20'+_0x3a116b+_0x20eda5(0x6b)));for(let _0x1793ea=0x37*0x57+-0x2244+-0x1bb*-0x9;_0x1793ea<_0x418657;_0x1793ea++){console['log'](picocolors_1[_0x20eda5(a8_0x487112._0x3b5613)][_0x20eda5(a8_0x487112._0x14b558)](_0x20eda5(a8_0x487112._0x4decd5)+(_0x1793ea+(-0x1*0x31c+0x1884+-0x1*0x1567))+'\x20/\x20'+_0x418657+'\x20---'));const _0x3ff4eb=_0x3559d8['slice'](_0x1793ea*_0x3a116b,(_0x1793ea+(0x24ec+0xa7c+-0x2f67))*_0x3a116b),_0x3e61e4={};_0x3ff4eb['forEach'](_0x22a499=>{_0x3e61e4[_0x22a499]=_0x4c212b[_0x22a499];});if(Object['keys'](_0x3e61e4)[_0x20eda5(a8_0x487112._0x587947)]>0x1a2d+-0x133*0x5+0x23e*-0x9){const _0x297c81=await _0x4db5fc(_0x3e61e4);_0x297c81?Object[_0x20eda5(a8_0x487112._0x444dbc)](_0x1c3dd0,_0x297c81):Object['assign'](_0x1c3dd0,_0x3e61e4);}_0x1793ea<_0x418657-(-0xf15+-0x1a8d+-0x3*-0xde1)&&(console[_0x20eda5(a8_0x487112._0x48e779)](picocolors_1[_0x20eda5(0xaf)]['yellow']('---\x20😴\x20Waiting\x20'+_0x81280b/(-0x1cea+-0x2*0xa24+0x351a)+'\x20seconds\x20between\x20batches\x20---')),await new Promise(_0x41b149=>setTimeout(_0x41b149,_0x81280b)));}console[_0x20eda5(0x7e)](picocolors_1[_0x20eda5(a8_0x487112._0x447167)]['dim'](_0x20eda5(0xad)));const _0x85d19c=_0x46168c['kWNEb'](_0xbfc362,_0x1c3dd0);console['log'](picocolors_1['default'][_0x20eda5(0x94)]('Saving\x20to\x20file:\x20'+_0x2b1579)),node_fs_1[_0x20eda5(0xaf)]['writeFileSync'](_0x2b1579,JSON[_0x20eda5(0xab)](_0x85d19c,null,0x4*-0x553+0xa37*-0x2+0x29bc),_0x20eda5(0x9a)),console['log'](picocolors_1['default']['green'](_0x20eda5(0x88)));}}exports['default']=LangTranslateCommand;
@@ -1,55 +1 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const Command_1 = __importDefault(require("../Command"));
7
- const node_fs_1 = __importDefault(require("node:fs"));
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const picocolors_1 = __importDefault(require("picocolors"));
10
- class MakeMigrationCommand extends Command_1.default {
11
- signature = 'make:migration <name> <addon>';
12
- description = 'Create a new migration file for an addon';
13
- async handle(_options, name, addon) {
14
- const rootDir = process.cwd();
15
- const targetDir = node_path_1.default.join(rootDir, 'addons', addon, 'database', 'migrations');
16
- if (!node_fs_1.default.existsSync(node_path_1.default.join(rootDir, 'addons', addon))) {
17
- console.error(picocolors_1.default.red(`❌ Addon '${addon}' not found!`));
18
- process.exit(1);
19
- }
20
- if (!node_fs_1.default.existsSync(targetDir)) {
21
- node_fs_1.default.mkdirSync(targetDir, { recursive: true });
22
- }
23
- const now = new Date();
24
- const timestamp = now
25
- .toISOString()
26
- .replace(/T/, '_')
27
- .replace(/[-:]/g, '')
28
- .split('.')[0];
29
- const fileName = `${timestamp}_${name}.js`;
30
- const filePath = node_path_1.default.join(targetDir, fileName);
31
- const template = `/**
32
- * @namespace: addons/${addon}/database/migrations/${fileName}
33
- * @type: Database Migration
34
- * @copyright © 2025 kenndeclouv
35
- * @assistant chaa & graa
36
- * @version 0.12.5-beta
37
- */
38
- module.exports = {
39
- async up(queryInterface, DataTypes) {
40
- // await queryInterface.createTable('table_name', {
41
- // id: DataTypes.INTEGER
42
- // });
43
- },
44
-
45
- async down(queryInterface, DataTypes) {
46
- // await queryInterface.dropTable('table_name');
47
- }
48
- };`;
49
- node_fs_1.default.writeFileSync(filePath, template);
50
- console.log(picocolors_1.default.green('✅ Created migration:'));
51
- console.log(picocolors_1.default.dim(` addons/${addon}/database/migrations/${fileName}`));
52
- }
53
- }
54
- exports.default = MakeMigrationCommand;
55
- //# sourceMappingURL=MakeMigrationCommand.js.map
1
+ 'use strict';const a9_0x4d7999=a9_0x2baa;(function(_0x3f4f9f,_0x1036d3){const a9_0x4d0fca={_0x17b48d:0xa3,_0x508b08:0x90,_0x2c0058:0x9f,_0x4e123d:0x91},_0x1cd717=a9_0x2baa,_0xa8d408=_0x3f4f9f();while(!![]){try{const _0x2b126b=parseInt(_0x1cd717(0x9a))/(0x5*0x4f4+-0xcff+-0xbc4)+-parseInt(_0x1cd717(0x8f))/(0xbab*0x3+-0xd47+-0xadc*0x2)+-parseInt(_0x1cd717(a9_0x4d0fca._0x17b48d))/(-0x1db8+0x2f1*0x9+0x342)+-parseInt(_0x1cd717(a9_0x4d0fca._0x508b08))/(-0xf1+-0x12ec+0x13e1*0x1)+parseInt(_0x1cd717(0x92))/(0x2c5*-0x6+-0x2649+0x36ec)+parseInt(_0x1cd717(a9_0x4d0fca._0x2c0058))/(0x17d6+0x1952+-0x3122)+parseInt(_0x1cd717(a9_0x4d0fca._0x4e123d))/(0x4f7*-0x7+0x1704+0xbc4);if(_0x2b126b===_0x1036d3)break;else _0xa8d408['push'](_0xa8d408['shift']());}catch(_0x3c2e19){_0xa8d408['push'](_0xa8d408['shift']());}}}(a9_0x1f70,-0x2bb44*-0x2+0xf249a+0x1*-0xc470d));function a9_0x2baa(_0x1eda6e,_0x3e10f0){_0x1eda6e=_0x1eda6e-(0x19e7+-0x1f29+0x4*0x174);const _0x33bff7=a9_0x1f70();let _0x203387=_0x33bff7[_0x1eda6e];if(a9_0x2baa['VWOTaZ']===undefined){var _0x2a2a1c=function(_0x81f53b){const _0x11793d='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5c340d='',_0x1eb028='';for(let _0x35db79=-0x123b+0x2101*-0x1+0x333c,_0x2da381,_0x19136e,_0xf679ef=0x14cb+-0x19b7*0x1+0x276*0x2;_0x19136e=_0x81f53b['charAt'](_0xf679ef++);~_0x19136e&&(_0x2da381=_0x35db79%(0x780+-0x36*0x83+-0x2*-0xa13)?_0x2da381*(0x1*0x197f+0x26f*0x1+-0x3*0x93a)+_0x19136e:_0x19136e,_0x35db79++%(-0x2472+0x17bf+-0x28b*-0x5))?_0x5c340d+=String['fromCharCode'](0xcac+0x1*-0xb07+-0xa6&_0x2da381>>(-(0x1420+-0x370+-0x10ae)*_0x35db79&-0x4*0x455+-0x7a4+0x18fe)):0xdf5*-0x1+-0x2fe*-0x7+-0x6fd){_0x19136e=_0x11793d['indexOf'](_0x19136e);}for(let _0x44751c=0x17b4+-0x13f0+-0x3c4,_0x310afc=_0x5c340d['length'];_0x44751c<_0x310afc;_0x44751c++){_0x1eb028+='%'+('00'+_0x5c340d['charCodeAt'](_0x44751c)['toString'](-0xb*-0xe9+0x1*0x513+-0xf06))['slice'](-(0x100a+0xffd*-0x1+-0xb));}return decodeURIComponent(_0x1eb028);};a9_0x2baa['bteLRa']=_0x2a2a1c,a9_0x2baa['KZooWu']={},a9_0x2baa['VWOTaZ']=!![];}const _0xb2e376=_0x33bff7[0xe75+-0x29*0x53+-0x12a],_0x2884f2=_0x1eda6e+_0xb2e376,_0x2e1689=a9_0x2baa['KZooWu'][_0x2884f2];return!_0x2e1689?(_0x203387=a9_0x2baa['bteLRa'](_0x203387),a9_0x2baa['KZooWu'][_0x2884f2]=_0x203387):_0x203387=_0x2e1689,_0x203387;}var __importDefault=this&&this['__importDefault']||function(_0x4a34ba){const a9_0x338956={_0x677718:0x95},_0x21cb20=a9_0x2baa;return _0x4a34ba&&_0x4a34ba[_0x21cb20(a9_0x338956._0x677718)]?_0x4a34ba:{'default':_0x4a34ba};};Object['defineProperty'](exports,'__esModule',{'value':!![]});function a9_0x1f70(){const _0x435352=['otyXnZq2muThufvYsa','mty0ntKXmfjbqKXhAa','zgvZy3jPChrPB24','lMPZ','x19LC01VzhvSzq','ywrKB25Z','zgvMyxvSDa','BwfRztPTAwDYyxrPB24Gpg5HBwu+idXHzgrVBJ4','BwLNCMf0Aw9UCW','ndq1mdrzCur5BMK','4PYfienYzwf0zwqGBwLNCMf0Aw9UoG','zxHPC3rZu3LUyW','CMvK','lI4Vq29TBwfUza','ntu3otiYD1vorMzV','z3jLzw4','AM9PBG','Bg9N','mtCXmdmWm1P4vxPkyG','BwTKAxjtEw5J','nJC4ndy2tefHrMvT','mtu0mtC5nMzovhnXsa'];a9_0x1f70=function(){return _0x435352;};return a9_0x1f70();}const Command_1=__importDefault(require(a9_0x4d7999(0x9e))),node_fs_1=__importDefault(require('node:fs')),node_path_1=__importDefault(require('node:path')),picocolors_1=__importDefault(require('picocolors'));class MakeMigrationCommand extends Command_1['default']{['signature']=a9_0x4d7999(0x98);[a9_0x4d7999(0x93)]='Create\x20a\x20new\x20migration\x20file\x20for\x20an\x20addon';async['handle'](_0x339642,_0xbff60,_0x43439e){const a9_0x5b084a={_0x14a438:0x99,_0x22ffc1:0x97,_0x21011d:0x9d,_0x2f15bf:0x9c,_0x3b2ee6:0x8e,_0x7cb294:0x94,_0x475ad8:0xa1,_0x229fa2:0xa2},_0x3ea13c=a9_0x4d7999,_0x1c2ce4=process['cwd'](),_0x137f95=node_path_1[_0x3ea13c(0x97)]['join'](_0x1c2ce4,'addons',_0x43439e,'database',_0x3ea13c(a9_0x5b084a._0x14a438));!node_fs_1['default']['existsSync'](node_path_1[_0x3ea13c(0x97)][_0x3ea13c(0xa1)](_0x1c2ce4,_0x3ea13c(0x96),_0x43439e))&&(console['error'](picocolors_1[_0x3ea13c(a9_0x5b084a._0x22ffc1)][_0x3ea13c(a9_0x5b084a._0x21011d)]('❌\x20Addon\x20\x27'+_0x43439e+'\x27\x20not\x20found!')),process['exit'](0x2672+0xc58+-0x32c9*0x1));!node_fs_1[_0x3ea13c(a9_0x5b084a._0x22ffc1)][_0x3ea13c(a9_0x5b084a._0x2f15bf)](_0x137f95)&&node_fs_1['default'][_0x3ea13c(a9_0x5b084a._0x3b2ee6)](_0x137f95,{'recursive':!![]});const _0x5066dd=new Date(),_0x5ec1da=_0x5066dd['toISOString']()['replace'](/T/,'_')['replace'](/[-:]/g,'')['split']('.')[-0x2270+0x3*-0xcba+-0x6e*-0xa9],_0x1404bf=_0x5ec1da+'_'+_0xbff60+_0x3ea13c(a9_0x5b084a._0x7cb294),_0x415517=node_path_1[_0x3ea13c(0x97)][_0x3ea13c(a9_0x5b084a._0x475ad8)](_0x137f95,_0x1404bf),_0x1f765f='/**\x0a\x20*\x20@namespace:\x20addons/'+_0x43439e+'/database/migrations/'+_0x1404bf+'\x0a\x20*\x20@type:\x20Database\x20Migration\x0a\x20*\x20@copyright\x20©\x202025\x20kenndeclouv\x0a\x20*\x20@assistant\x20graa\x20&\x20chaa\x0a\x20*\x20@version\x200.12.7-beta\x0a\x20*/\x0amodule.exports\x20=\x20{\x0a\x20\x20\x20\x20async\x20up(queryInterface,\x20DataTypes)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20await\x20queryInterface.createTable(\x27table_name\x27,\x20{\x20\x0a\x09\x09//\x20\x09\x09id:\x20DataTypes.INTEGER\x20\x0a\x09\x09//\x20});\x0a\x20\x20\x20\x20},\x0a\x0a\x20\x20\x20\x20async\x20down(queryInterface,\x20DataTypes)\x20{\x0a\x20\x20\x20\x20\x20\x20\x20\x20//\x20await\x20queryInterface.dropTable(\x27table_name\x27);\x0a\x20\x20\x20\x20}\x0a};';node_fs_1['default']['writeFileSync'](_0x415517,_0x1f765f),console[_0x3ea13c(0xa2)](picocolors_1[_0x3ea13c(0x97)][_0x3ea13c(0xa0)](_0x3ea13c(0x9b))),console[_0x3ea13c(a9_0x5b084a._0x229fa2)](picocolors_1['default']['dim']('\x20\x20\x20addons/'+_0x43439e+'/database/migrations/'+_0x1404bf));}}exports['default']=MakeMigrationCommand;