kythia-core 0.11.0-beta → 0.12.0-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.
- package/dist/Kythia.d.ts +45 -0
- package/dist/Kythia.d.ts.map +1 -0
- package/dist/Kythia.js +443 -0
- package/dist/Kythia.js.map +1 -0
- package/dist/KythiaClient.d.ts +3 -0
- package/dist/KythiaClient.d.ts.map +1 -0
- package/dist/KythiaClient.js +69 -0
- package/dist/KythiaClient.js.map +1 -0
- package/dist/cli/Command.d.ts +9 -0
- package/dist/cli/Command.d.ts.map +1 -0
- package/dist/cli/Command.js +19 -0
- package/dist/cli/Command.js.map +1 -0
- package/dist/cli/commands/CacheClearCommand.d.ts +8 -0
- package/dist/cli/commands/CacheClearCommand.d.ts.map +1 -0
- package/dist/cli/commands/CacheClearCommand.js +94 -0
- package/dist/cli/commands/CacheClearCommand.js.map +1 -0
- package/dist/cli/commands/LangCheckCommand.d.ts +7 -0
- package/dist/cli/commands/LangCheckCommand.d.ts.map +1 -0
- package/dist/cli/commands/LangCheckCommand.js +345 -0
- package/dist/cli/commands/LangCheckCommand.js.map +1 -0
- package/dist/cli/commands/LangTranslateCommand.d.ts +8 -0
- package/dist/cli/commands/LangTranslateCommand.d.ts.map +1 -0
- package/dist/cli/commands/LangTranslateCommand.js +221 -0
- package/dist/cli/commands/LangTranslateCommand.js.map +1 -0
- package/dist/cli/commands/MakeMigrationCommand.d.ts +7 -0
- package/dist/cli/commands/MakeMigrationCommand.d.ts.map +1 -0
- package/dist/cli/commands/MakeMigrationCommand.js +55 -0
- package/dist/cli/commands/MakeMigrationCommand.js.map +1 -0
- package/dist/cli/commands/MakeModelCommand.d.ts +7 -0
- package/dist/cli/commands/MakeModelCommand.d.ts.map +1 -0
- package/dist/cli/commands/MakeModelCommand.js +56 -0
- package/dist/cli/commands/MakeModelCommand.js.map +1 -0
- package/dist/cli/commands/MigrateCommand.d.ts +14 -0
- package/dist/cli/commands/MigrateCommand.d.ts.map +1 -0
- package/dist/cli/commands/MigrateCommand.js +190 -0
- package/dist/cli/commands/MigrateCommand.js.map +1 -0
- package/dist/cli/commands/NamespaceCommand.d.ts +7 -0
- package/dist/cli/commands/NamespaceCommand.d.ts.map +1 -0
- package/dist/cli/commands/NamespaceCommand.js +92 -0
- package/dist/cli/commands/NamespaceCommand.js.map +1 -0
- package/dist/cli/commands/StructureCommand.d.ts +7 -0
- package/dist/cli/commands/StructureCommand.d.ts.map +1 -0
- package/dist/cli/commands/StructureCommand.js +51 -0
- package/dist/cli/commands/StructureCommand.js.map +1 -0
- package/dist/cli/commands/UpversionCommand.d.ts +7 -0
- package/dist/cli/commands/UpversionCommand.d.ts.map +1 -0
- package/dist/cli/commands/UpversionCommand.js +68 -0
- package/dist/cli/commands/UpversionCommand.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +44 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/db.d.ts +9 -0
- package/dist/cli/utils/db.d.ts.map +1 -0
- package/dist/cli/utils/db.js +90 -0
- package/dist/cli/utils/db.js.map +1 -0
- package/dist/database/KythiaMigrator.d.ts +4 -0
- package/dist/database/KythiaMigrator.d.ts.map +1 -0
- package/dist/database/KythiaMigrator.js +94 -0
- package/dist/database/KythiaMigrator.js.map +1 -0
- package/dist/database/KythiaModel.d.ts +83 -0
- package/dist/database/KythiaModel.d.ts.map +1 -0
- package/dist/database/KythiaModel.js +1121 -0
- package/dist/database/KythiaModel.js.map +1 -0
- package/dist/database/KythiaSequelize.d.ts +4 -0
- package/dist/database/KythiaSequelize.d.ts.map +1 -0
- package/dist/database/KythiaSequelize.js +99 -0
- package/dist/database/KythiaSequelize.js.map +1 -0
- package/dist/database/KythiaStorage.d.ts +21 -0
- package/dist/database/KythiaStorage.d.ts.map +1 -0
- package/dist/database/KythiaStorage.js +80 -0
- package/dist/database/KythiaStorage.js.map +1 -0
- package/dist/database/ModelLoader.d.ts +4 -0
- package/dist/database/ModelLoader.d.ts.map +1 -0
- package/dist/database/ModelLoader.js +54 -0
- package/dist/database/ModelLoader.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/lang/en.json +85 -0
- package/dist/managers/AddonManager.d.ts +45 -0
- package/dist/managers/AddonManager.d.ts.map +1 -0
- package/dist/managers/AddonManager.js +932 -0
- package/dist/managers/AddonManager.js.map +1 -0
- package/dist/managers/EventManager.d.ts +19 -0
- package/dist/managers/EventManager.d.ts.map +1 -0
- package/dist/managers/EventManager.js +55 -0
- package/dist/managers/EventManager.js.map +1 -0
- package/dist/managers/InteractionManager.d.ts +41 -0
- package/dist/managers/InteractionManager.d.ts.map +1 -0
- package/dist/managers/InteractionManager.js +441 -0
- package/dist/managers/InteractionManager.js.map +1 -0
- package/dist/managers/MiddlewareManager.d.ts +14 -0
- package/dist/managers/MiddlewareManager.d.ts.map +1 -0
- package/dist/managers/MiddlewareManager.js +75 -0
- package/dist/managers/MiddlewareManager.js.map +1 -0
- package/dist/managers/ShutdownManager.d.ts +22 -0
- package/dist/managers/ShutdownManager.d.ts.map +1 -0
- package/dist/managers/ShutdownManager.js +151 -0
- package/dist/managers/ShutdownManager.js.map +1 -0
- package/dist/managers/TranslatorManager.d.ts +19 -0
- package/dist/managers/TranslatorManager.d.ts.map +1 -0
- package/dist/managers/TranslatorManager.js +118 -0
- package/dist/managers/TranslatorManager.js.map +1 -0
- package/dist/middlewares/botPermissions.d.ts +4 -0
- package/dist/middlewares/botPermissions.d.ts.map +1 -0
- package/dist/middlewares/botPermissions.js +28 -0
- package/dist/middlewares/botPermissions.js.map +1 -0
- package/dist/middlewares/cooldown.d.ts +4 -0
- package/dist/middlewares/cooldown.d.ts.map +1 -0
- package/dist/middlewares/cooldown.js +42 -0
- package/dist/middlewares/cooldown.js.map +1 -0
- package/dist/middlewares/isInMainGuild.d.ts +4 -0
- package/dist/middlewares/isInMainGuild.d.ts.map +1 -0
- package/dist/middlewares/isInMainGuild.js +52 -0
- package/dist/middlewares/isInMainGuild.js.map +1 -0
- package/dist/middlewares/ownerOnly.d.ts +4 -0
- package/dist/middlewares/ownerOnly.d.ts.map +1 -0
- package/dist/middlewares/ownerOnly.js +24 -0
- package/dist/middlewares/ownerOnly.js.map +1 -0
- package/dist/middlewares/teamOnly.d.ts +4 -0
- package/dist/middlewares/teamOnly.d.ts.map +1 -0
- package/dist/middlewares/teamOnly.js +26 -0
- package/dist/middlewares/teamOnly.js.map +1 -0
- package/dist/middlewares/userPermissions.d.ts +4 -0
- package/dist/middlewares/userPermissions.d.ts.map +1 -0
- package/dist/middlewares/userPermissions.js +28 -0
- package/dist/middlewares/userPermissions.js.map +1 -0
- package/dist/middlewares/voteLocked.d.ts +4 -0
- package/dist/middlewares/voteLocked.d.ts.map +1 -0
- package/dist/middlewares/voteLocked.js +50 -0
- package/dist/middlewares/voteLocked.js.map +1 -0
- package/dist/structures/BaseCommand.d.ts +23 -0
- package/dist/structures/BaseCommand.d.ts.map +1 -0
- package/dist/structures/BaseCommand.js +42 -0
- package/dist/structures/BaseCommand.js.map +1 -0
- package/dist/types/AddonManager.d.ts +58 -0
- package/dist/types/AddonManager.d.ts.map +1 -0
- package/dist/types/AddonManager.js +3 -0
- package/dist/types/AddonManager.js.map +1 -0
- package/dist/types/DiscordHelpers.d.ts +7 -0
- package/dist/types/DiscordHelpers.d.ts.map +1 -0
- package/dist/types/DiscordHelpers.js +3 -0
- package/dist/types/DiscordHelpers.js.map +1 -0
- package/dist/types/EventManager.d.ts +10 -0
- package/dist/types/EventManager.d.ts.map +1 -0
- package/dist/types/EventManager.js +3 -0
- package/dist/types/EventManager.js.map +1 -0
- package/dist/types/InteractionManager.d.ts +35 -0
- package/dist/types/InteractionManager.d.ts.map +1 -0
- package/dist/types/InteractionManager.js +3 -0
- package/dist/types/InteractionManager.js.map +1 -0
- package/dist/types/KythiaClient.d.ts +9 -0
- package/dist/types/KythiaClient.d.ts.map +1 -0
- package/dist/types/KythiaClient.js +3 -0
- package/dist/types/KythiaClient.js.map +1 -0
- package/dist/types/KythiaConfig.d.ts +291 -0
- package/dist/types/KythiaConfig.d.ts.map +1 -0
- package/dist/types/KythiaConfig.js +3 -0
- package/dist/types/KythiaConfig.js.map +1 -0
- package/dist/types/KythiaContainer.d.ts +38 -0
- package/dist/types/KythiaContainer.d.ts.map +1 -0
- package/dist/types/KythiaContainer.js +3 -0
- package/dist/types/KythiaContainer.js.map +1 -0
- package/dist/types/KythiaLogger.d.ts +5 -0
- package/dist/types/KythiaLogger.d.ts.map +1 -0
- package/dist/types/KythiaLogger.js +3 -0
- package/dist/types/KythiaLogger.js.map +1 -0
- package/dist/types/KythiaMigrator.d.ts +9 -0
- package/dist/types/KythiaMigrator.d.ts.map +1 -0
- package/dist/types/KythiaMigrator.js +3 -0
- package/dist/types/KythiaMigrator.js.map +1 -0
- package/dist/types/KythiaModel.d.ts +31 -0
- package/dist/types/KythiaModel.d.ts.map +1 -0
- package/dist/types/KythiaModel.js +3 -0
- package/dist/types/KythiaModel.js.map +1 -0
- package/dist/types/KythiaOptions.d.ts +13 -0
- package/dist/types/KythiaOptions.d.ts.map +1 -0
- package/dist/types/KythiaOptions.js +3 -0
- package/dist/types/KythiaOptions.js.map +1 -0
- package/dist/types/KythiaSequelize.d.ts +13 -0
- package/dist/types/KythiaSequelize.d.ts.map +1 -0
- package/dist/types/KythiaSequelize.js +3 -0
- package/dist/types/KythiaSequelize.js.map +1 -0
- package/dist/types/KythiaStorage.d.ts +22 -0
- package/dist/types/KythiaStorage.d.ts.map +1 -0
- package/dist/types/KythiaStorage.js +3 -0
- package/dist/types/KythiaStorage.js.map +1 -0
- package/dist/types/MiddlewareManager.d.ts +14 -0
- package/dist/types/MiddlewareManager.d.ts.map +1 -0
- package/dist/types/MiddlewareManager.js +3 -0
- package/dist/types/MiddlewareManager.js.map +1 -0
- package/dist/types/ModelLoader.d.ts +8 -0
- package/dist/types/ModelLoader.d.ts.map +1 -0
- package/dist/types/ModelLoader.js +3 -0
- package/dist/types/ModelLoader.js.map +1 -0
- package/dist/types/ShutdownManager.d.ts +15 -0
- package/dist/types/ShutdownManager.d.ts.map +1 -0
- package/dist/types/ShutdownManager.js +3 -0
- package/dist/types/ShutdownManager.js.map +1 -0
- package/dist/types/TranslatorManager.d.ts +16 -0
- package/dist/types/TranslatorManager.d.ts.map +1 -0
- package/dist/types/TranslatorManager.js +3 -0
- package/dist/types/TranslatorManager.js.map +1 -0
- package/dist/types/index.d.ts +13 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +29 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/color.d.ts +15 -0
- package/dist/utils/color.d.ts.map +1 -0
- package/dist/utils/color.js +156 -0
- package/dist/utils/color.js.map +1 -0
- package/dist/utils/discord.d.ts +8 -0
- package/dist/utils/discord.d.ts.map +1 -0
- package/dist/utils/discord.js +53 -0
- package/dist/utils/discord.js.map +1 -0
- package/dist/utils/formatter.d.ts +3 -0
- package/dist/utils/formatter.d.ts.map +1 -0
- package/dist/utils/formatter.js +89 -0
- package/dist/utils/formatter.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +54 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/logger.d.ts +5 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +150 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +28 -6
- package/src/lang/en.json +85 -0
- package/changelog.md +0 -53
- package/index.js +0 -15
- package/src/Kythia.js +0 -556
- package/src/KythiaClient.js +0 -94
- package/src/cli/Command.js +0 -68
- package/src/cli/commands/CacheClearCommand.js +0 -136
- package/src/cli/commands/LangCheckCommand.js +0 -367
- package/src/cli/commands/LangTranslateCommand.js +0 -336
- package/src/cli/commands/MakeMigrationCommand.js +0 -82
- package/src/cli/commands/MakeModelCommand.js +0 -81
- package/src/cli/commands/MigrateCommand.js +0 -259
- package/src/cli/commands/NamespaceCommand.js +0 -112
- package/src/cli/commands/StructureCommand.js +0 -70
- package/src/cli/commands/UpversionCommand.js +0 -94
- package/src/cli/index.js +0 -69
- package/src/cli/utils/db.js +0 -117
- package/src/database/KythiaMigrator.js +0 -116
- package/src/database/KythiaModel.js +0 -1557
- package/src/database/KythiaSequelize.js +0 -128
- package/src/database/KythiaStorage.js +0 -117
- package/src/database/ModelLoader.js +0 -79
- package/src/managers/AddonManager.js +0 -1219
- package/src/managers/EventManager.js +0 -104
- package/src/managers/InteractionManager.js +0 -815
- package/src/managers/ShutdownManager.js +0 -218
- package/src/structures/BaseCommand.js +0 -53
- package/src/utils/color.js +0 -180
- package/src/utils/formatter.js +0 -99
- package/src/utils/index.js +0 -4
|
@@ -0,0 +1,94 @@
|
|
|
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 picocolors_1 = __importDefault(require("picocolors"));
|
|
8
|
+
const node_readline_1 = __importDefault(require("node:readline"));
|
|
9
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
|
10
|
+
require("dotenv/config");
|
|
11
|
+
function askQuestion(query) {
|
|
12
|
+
const rl = node_readline_1.default.createInterface({
|
|
13
|
+
input: process.stdin,
|
|
14
|
+
output: process.stdout,
|
|
15
|
+
});
|
|
16
|
+
return new Promise((resolve) => rl.question(query, (ans) => {
|
|
17
|
+
rl.close();
|
|
18
|
+
resolve(ans);
|
|
19
|
+
}));
|
|
20
|
+
}
|
|
21
|
+
class CacheClearCommand extends Command_1.default {
|
|
22
|
+
signature = 'cache:clear';
|
|
23
|
+
description = 'Flush Redis cache (supports multi-instance selection)';
|
|
24
|
+
async handle() {
|
|
25
|
+
console.log(picocolors_1.default.dim('🔍 Detecting Redis configuration...'));
|
|
26
|
+
const redisUrlsRaw = process.env.REDIS_URLS;
|
|
27
|
+
if (!redisUrlsRaw) {
|
|
28
|
+
console.error(picocolors_1.default.red('❌ REDIS_URLS not found in .env'));
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
const urls = redisUrlsRaw
|
|
32
|
+
.split(',')
|
|
33
|
+
.map((u) => u.trim())
|
|
34
|
+
.filter((u) => u.length > 0);
|
|
35
|
+
if (urls.length === 0) {
|
|
36
|
+
console.error(picocolors_1.default.red('❌ No valid Redis URLs found.'));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
let targets = [];
|
|
40
|
+
if (urls.length === 1) {
|
|
41
|
+
targets = [urls[0]];
|
|
42
|
+
console.log(picocolors_1.default.cyan(`🎯 Target: ${targets[0]}`));
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
console.log(picocolors_1.default.yellow(`⚠️ Multiple Redis instances detected (${urls.length}):`));
|
|
46
|
+
console.log(picocolors_1.default.dim('---------------------------------------------------'));
|
|
47
|
+
console.log(`0. ${picocolors_1.default.bgRed(picocolors_1.default.white(' FLUSH ALL INSTANCES '))}`);
|
|
48
|
+
urls.forEach((url, index) => {
|
|
49
|
+
const maskedUrl = url.replace(/:([^@]+)@/, ':****@');
|
|
50
|
+
console.log(`${index + 1}. ${maskedUrl}`);
|
|
51
|
+
});
|
|
52
|
+
console.log(picocolors_1.default.dim('---------------------------------------------------'));
|
|
53
|
+
const answer = await askQuestion(picocolors_1.default.cyan('Select target to flush (number): '));
|
|
54
|
+
const choice = parseInt(answer, 10);
|
|
55
|
+
if (Number.isNaN(choice) || choice < 0 || choice > urls.length) {
|
|
56
|
+
console.error(picocolors_1.default.red('❌ Invalid selection.'));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
if (choice === 0) {
|
|
60
|
+
targets = urls;
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
targets = [urls[choice - 1]];
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
const confirm = await askQuestion(picocolors_1.default.bgRed(picocolors_1.default.white(' DANGER ')) +
|
|
67
|
+
picocolors_1.default.yellow(` Are you sure you want to FLUSHALL ${targets.length} instance(s)? (y/n): `));
|
|
68
|
+
if (confirm.toLowerCase() !== 'y' && confirm.toLowerCase() !== 'yes') {
|
|
69
|
+
console.log(picocolors_1.default.cyan('🛡️ Operation cancelled.'));
|
|
70
|
+
process.exit(0);
|
|
71
|
+
}
|
|
72
|
+
console.log('');
|
|
73
|
+
for (const url of targets) {
|
|
74
|
+
const masked = url.replace(/:([^@]+)@/, ':****@');
|
|
75
|
+
try {
|
|
76
|
+
console.log(picocolors_1.default.dim(`🔌 Connecting to ${masked}...`));
|
|
77
|
+
const redis = new ioredis_1.default(url, {
|
|
78
|
+
maxRetriesPerRequest: 1,
|
|
79
|
+
retryStrategy: () => null,
|
|
80
|
+
});
|
|
81
|
+
await redis.flushall();
|
|
82
|
+
console.log(picocolors_1.default.green(`✅ FLUSHALL Success: ${masked}`));
|
|
83
|
+
redis.quit();
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(picocolors_1.default.red(`❌ Failed to flush ${masked}: ${err.message}`));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
console.log(picocolors_1.default.green('\n✨ Cache clearing process completed.'));
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.default = CacheClearCommand;
|
|
94
|
+
//# sourceMappingURL=CacheClearCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheClearCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/CacheClearCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LangCheckCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/LangCheckCommand.ts"],"names":[],"mappings":"AAkBA,OAAO,OAAO,MAAM,YAAY,CAAC;AA6CjC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IAC7C,SAAS,SAAgB;IACzB,WAAW,SACmD;IAExD,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAqUpC"}
|
|
@@ -0,0 +1,345 @@
|
|
|
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 deepMerge(target, source) {
|
|
46
|
+
if (typeof target !== 'object' || target === null)
|
|
47
|
+
return source;
|
|
48
|
+
if (typeof source !== 'object' || source === null)
|
|
49
|
+
return source;
|
|
50
|
+
for (const key of Object.keys(source)) {
|
|
51
|
+
if (source[key] instanceof Object &&
|
|
52
|
+
target[key] instanceof Object &&
|
|
53
|
+
!Array.isArray(source[key])) {
|
|
54
|
+
target[key] = deepMerge(target[key], source[key]);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
target[key] = source[key];
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return target;
|
|
61
|
+
}
|
|
62
|
+
function getAllKeys(obj, allDefinedKeys, prefix = '') {
|
|
63
|
+
Object.keys(obj).forEach((key) => {
|
|
64
|
+
if (key === '_value' || key === 'text') {
|
|
65
|
+
if (Object.keys(obj).length === 1)
|
|
66
|
+
return;
|
|
67
|
+
if (prefix)
|
|
68
|
+
allDefinedKeys.add(prefix);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const fullKey = prefix ? `${prefix}.${key}` : key;
|
|
72
|
+
if (typeof obj[key] === 'object' && obj[key] !== null) {
|
|
73
|
+
if (key !== 'jobs' && key !== 'shop') {
|
|
74
|
+
getAllKeys(obj[key], allDefinedKeys, fullKey);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
allDefinedKeys.add(fullKey);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
allDefinedKeys.add(fullKey);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
class LangCheckCommand extends Command_1.default {
|
|
86
|
+
signature = 'lang:check';
|
|
87
|
+
description = 'Lint translation key usage in code and language files (AST-based)';
|
|
88
|
+
async handle() {
|
|
89
|
+
const PROJECT_ROOT = process.cwd();
|
|
90
|
+
const SCAN_DIRECTORIES = ['addons', 'src'];
|
|
91
|
+
const DEFAULT_LANG = 'en';
|
|
92
|
+
const IGNORE_PATTERNS = [
|
|
93
|
+
'**/node_modules/**',
|
|
94
|
+
'**/dist/**',
|
|
95
|
+
'**/tests/**',
|
|
96
|
+
'**/assets/**',
|
|
97
|
+
'**/dashboard/web/public/**',
|
|
98
|
+
'**/temp/**',
|
|
99
|
+
'**/leetMap.js',
|
|
100
|
+
'**/generate_*.js',
|
|
101
|
+
'**/refactor_*.js',
|
|
102
|
+
'**/undo_*.js',
|
|
103
|
+
'**/*.d.ts',
|
|
104
|
+
];
|
|
105
|
+
const locales = {};
|
|
106
|
+
const usedStaticKeys = new Set();
|
|
107
|
+
const usedDynamicKeys = new Set();
|
|
108
|
+
const unanalyzableKeys = new Set();
|
|
109
|
+
let filesScanned = 0;
|
|
110
|
+
let filesWithErrors = 0;
|
|
111
|
+
console.log('--- Kythia AST Translation Linter ---');
|
|
112
|
+
function hasNestedKey(obj, pathExpr) {
|
|
113
|
+
if (!obj || !pathExpr)
|
|
114
|
+
return false;
|
|
115
|
+
const parts = pathExpr.split('.');
|
|
116
|
+
let current = obj;
|
|
117
|
+
for (const part of parts) {
|
|
118
|
+
if (typeof current !== 'object' ||
|
|
119
|
+
current === null ||
|
|
120
|
+
!Object.hasOwn(current, part)) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
current = current[part];
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
function _loadLocales() {
|
|
128
|
+
console.log(`\n🔍 Searching for language files in: ${PROJECT_ROOT}`);
|
|
129
|
+
try {
|
|
130
|
+
const langFiles = glob_1.glob.sync('**/lang/*.json', {
|
|
131
|
+
cwd: PROJECT_ROOT,
|
|
132
|
+
ignore: ['**/node_modules/**', '**/dist/**'],
|
|
133
|
+
absolute: true,
|
|
134
|
+
});
|
|
135
|
+
if (langFiles.length === 0) {
|
|
136
|
+
console.error('\x1b[31m%s\x1b[0m', '❌ No .json files found in any lang folder.');
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
let loadedCount = 0;
|
|
140
|
+
for (const file of langFiles) {
|
|
141
|
+
if (file.includes('_flat') || file.includes('_FLAT'))
|
|
142
|
+
continue;
|
|
143
|
+
const filename = node_path_1.default.basename(file);
|
|
144
|
+
const lang = filename.replace('.json', '');
|
|
145
|
+
const content = node_fs_1.default.readFileSync(file, 'utf8');
|
|
146
|
+
try {
|
|
147
|
+
const parsed = JSON.parse(content);
|
|
148
|
+
if (!locales[lang]) {
|
|
149
|
+
locales[lang] = parsed;
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
locales[lang] = deepMerge(locales[lang], parsed);
|
|
153
|
+
}
|
|
154
|
+
loadedCount++;
|
|
155
|
+
}
|
|
156
|
+
catch (jsonError) {
|
|
157
|
+
console.error(`\x1b[31m%s\x1b[0m`, `❌ Failed to parse JSON: ${node_path_1.default.relative(PROJECT_ROOT, file)} - ${jsonError.message}`);
|
|
158
|
+
filesWithErrors++;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
console.log(` > Successfully loaded ${loadedCount} language files.`);
|
|
162
|
+
if (!locales[DEFAULT_LANG]) {
|
|
163
|
+
console.error(`\x1b[31m%s\x1b[0m`, `❌ Default language (${DEFAULT_LANG}) not found in any loaded files!`);
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
console.error('\x1b[31m%s\x1b[0m', `❌ Failed to load language files: ${error.message}`);
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
if (!_loadLocales()) {
|
|
174
|
+
console.error('\x1b[31mCannot proceed (language files invalid).\x1b[0m');
|
|
175
|
+
process.exit(1);
|
|
176
|
+
}
|
|
177
|
+
console.log(`\nScanning .js/.ts files in: ${SCAN_DIRECTORIES.join(', ')}...`);
|
|
178
|
+
SCAN_DIRECTORIES.forEach((dirName) => {
|
|
179
|
+
const dirPath = node_path_1.default.join(PROJECT_ROOT, dirName);
|
|
180
|
+
const files = glob_1.glob.sync(`${dirPath}/**/*.{js,ts}`, {
|
|
181
|
+
ignore: IGNORE_PATTERNS,
|
|
182
|
+
dot: true,
|
|
183
|
+
});
|
|
184
|
+
files.forEach((filePath) => {
|
|
185
|
+
filesScanned++;
|
|
186
|
+
process.stdout.write(`\rScanning: ${filesScanned} files...`);
|
|
187
|
+
try {
|
|
188
|
+
const code = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
189
|
+
const ast = parser.parse(code, {
|
|
190
|
+
sourceType: 'module',
|
|
191
|
+
plugins: [
|
|
192
|
+
'typescript',
|
|
193
|
+
'jsx',
|
|
194
|
+
'classProperties',
|
|
195
|
+
'objectRestSpread',
|
|
196
|
+
],
|
|
197
|
+
errorRecovery: true,
|
|
198
|
+
});
|
|
199
|
+
(0, traverse_1.default)(ast, {
|
|
200
|
+
CallExpression(nodePath) {
|
|
201
|
+
const node = nodePath.node;
|
|
202
|
+
if (node.callee.type === 'Identifier' &&
|
|
203
|
+
node.callee.name === 't') {
|
|
204
|
+
if (node.arguments.length >= 2) {
|
|
205
|
+
const keyArg = node.arguments[1];
|
|
206
|
+
if (keyArg.type === 'StringLiteral') {
|
|
207
|
+
usedStaticKeys.add(keyArg.value);
|
|
208
|
+
}
|
|
209
|
+
else if (keyArg.type === 'TemplateLiteral') {
|
|
210
|
+
let pattern = '';
|
|
211
|
+
keyArg.quasis.forEach((quasi, _i) => {
|
|
212
|
+
pattern += quasi.value.raw;
|
|
213
|
+
if (!quasi.tail) {
|
|
214
|
+
pattern += '*';
|
|
215
|
+
}
|
|
216
|
+
});
|
|
217
|
+
pattern = pattern.replace(/_/g, '.');
|
|
218
|
+
usedDynamicKeys.add(pattern);
|
|
219
|
+
}
|
|
220
|
+
else if (keyArg.type === 'BinaryExpression' &&
|
|
221
|
+
keyArg.operator === '+') {
|
|
222
|
+
if (keyArg.left.type === 'StringLiteral') {
|
|
223
|
+
const pattern = `${keyArg.left.value.replace(/_/g, '.')}*`;
|
|
224
|
+
usedDynamicKeys.add(pattern);
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
unanalyzableKeys.add(`Complex (+) at ${node_path_1.default.relative(PROJECT_ROOT, filePath)}:${node.loc?.start.line}`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
unanalyzableKeys.add(`Variable/Other at ${node_path_1.default.relative(PROJECT_ROOT, filePath)}:${node.loc?.start.line}`);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
catch (parseError) {
|
|
239
|
+
if (parseError.message.includes('Unexpected token')) {
|
|
240
|
+
console.warn(`\n\x1b[33m[WARN] Syntax Error parsing ${node_path_1.default.relative(PROJECT_ROOT, filePath)}:${parseError.loc?.line} - ${parseError.message}\x1b[0m`);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
console.error(`\n\x1b[31m[ERROR] Failed to parse ${node_path_1.default.relative(PROJECT_ROOT, filePath)}: ${parseError.message}\x1b[0m`);
|
|
244
|
+
}
|
|
245
|
+
filesWithErrors++;
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
});
|
|
249
|
+
process.stdout.write(`${'\r'.padEnd(process.stdout.columns || 60)}\r`);
|
|
250
|
+
console.log(`\nScan completed. Total ${filesScanned} files processed.`);
|
|
251
|
+
console.log(` > Found \x1b[33m${usedStaticKeys.size}\x1b[0m static keys.`);
|
|
252
|
+
console.log(` > Found \x1b[33m${usedDynamicKeys.size}\x1b[0m dynamic key patterns (check manually!).`);
|
|
253
|
+
if (unanalyzableKeys.size > 0) {
|
|
254
|
+
console.log(` > \x1b[31m${unanalyzableKeys.size}\x1b[0m t() calls could not be analyzed (variable/complex).`);
|
|
255
|
+
}
|
|
256
|
+
console.log('\nVerifying static keys against language files...');
|
|
257
|
+
let totalMissingStatic = 0;
|
|
258
|
+
for (const lang in locales) {
|
|
259
|
+
const missingInLang = [];
|
|
260
|
+
for (const staticKey of usedStaticKeys) {
|
|
261
|
+
if (!hasNestedKey(locales[lang], staticKey)) {
|
|
262
|
+
missingInLang.push(staticKey);
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
if (missingInLang.length > 0) {
|
|
266
|
+
console.log(`\n❌ \x1b[31m[${lang.toUpperCase()}] Found ${missingInLang.length} missing static keys:\x1b[0m`);
|
|
267
|
+
missingInLang.sort().forEach((key) => {
|
|
268
|
+
console.log(` - ${key}`);
|
|
269
|
+
});
|
|
270
|
+
totalMissingStatic += missingInLang.length;
|
|
271
|
+
filesWithErrors++;
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
console.log(`\n✅ \x1b[32m[${lang.toUpperCase()}] All static keys found!\x1b[0m`);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (usedDynamicKeys.size > 0) {
|
|
278
|
+
console.log(`\n\n⚠️ \x1b[33mDynamic Key Patterns Detected (Check Manually):\x1b[0m`);
|
|
279
|
+
[...usedDynamicKeys].sort().forEach((pattern) => {
|
|
280
|
+
console.log(` - ${pattern}`);
|
|
281
|
+
});
|
|
282
|
+
console.log(` (Ensure all possible keys from these patterns exist in the language files)`);
|
|
283
|
+
}
|
|
284
|
+
if (unanalyzableKeys.size > 0) {
|
|
285
|
+
console.log(`\n\n⚠️ \x1b[31mComplex/Unanalyzable t() Calls (Check Manually):\x1b[0m`);
|
|
286
|
+
[...unanalyzableKeys].sort().forEach((loc) => {
|
|
287
|
+
console.log(` - ${loc}`);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
console.log(`\nChecking UNUSED keys (based on ${DEFAULT_LANG}.json)...`);
|
|
291
|
+
const defaultLocale = locales[DEFAULT_LANG];
|
|
292
|
+
const allDefinedKeys = new Set();
|
|
293
|
+
if (defaultLocale) {
|
|
294
|
+
try {
|
|
295
|
+
getAllKeys(defaultLocale, allDefinedKeys);
|
|
296
|
+
}
|
|
297
|
+
catch (e) {
|
|
298
|
+
console.error('Error collecting defined keys:', e);
|
|
299
|
+
}
|
|
300
|
+
const unusedKeys = [];
|
|
301
|
+
for (const definedKey of allDefinedKeys) {
|
|
302
|
+
if (!usedStaticKeys.has(definedKey)) {
|
|
303
|
+
let matchedByDynamic = false;
|
|
304
|
+
for (const dynamicPattern of usedDynamicKeys) {
|
|
305
|
+
const regexPattern = `^${dynamicPattern
|
|
306
|
+
.replace(/\./g, '\\.')
|
|
307
|
+
.replace(/\*/g, '[^.]+?')}$`;
|
|
308
|
+
if (new RegExp(regexPattern).test(definedKey)) {
|
|
309
|
+
matchedByDynamic = true;
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (!matchedByDynamic) {
|
|
314
|
+
unusedKeys.push(definedKey);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
if (unusedKeys.length > 0) {
|
|
319
|
+
console.log(`\n⚠️ \x1b[33mFound ${unusedKeys.length} UNUSED keys in ${DEFAULT_LANG}.json (don't match static/dynamic patterns):\x1b[0m`);
|
|
320
|
+
unusedKeys.sort().forEach((key) => {
|
|
321
|
+
console.log(` - ${key}`);
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
console.log(`\n✅ \x1b[32m[${DEFAULT_LANG.toUpperCase()}] No unused keys found.\x1b[0m`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
console.warn(`\n\x1b[33m[WARN] Cannot check unused keys because ${DEFAULT_LANG}.json failed to load.\x1b[0m`);
|
|
330
|
+
}
|
|
331
|
+
console.log('\n--- Done ---');
|
|
332
|
+
if (filesWithErrors > 0 || totalMissingStatic > 0) {
|
|
333
|
+
console.log(`\x1b[31mTotal ${totalMissingStatic} missing static key errors + ${filesWithErrors - totalMissingStatic} file errors found. Please fix them.\x1b[0m`);
|
|
334
|
+
process.exit(1);
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
337
|
+
console.log('\x1b[32mCongratulations! Language files (for static keys) are already synced with the code.\x1b[0m');
|
|
338
|
+
if (usedDynamicKeys.size > 0 || unanalyzableKeys.size > 0) {
|
|
339
|
+
console.log("\x1b[33mHowever, don't forget to manually check the reported dynamic/complex keys above!\x1b[0m");
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
exports.default = LangCheckCommand;
|
|
345
|
+
//# sourceMappingURL=LangCheckCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LangCheckCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/LangCheckCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import Command from '../Command';
|
|
3
|
+
export default class LangTranslateCommand extends Command {
|
|
4
|
+
signature: string;
|
|
5
|
+
description: string;
|
|
6
|
+
handle(_options: Record<string, any>, target: string): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=LangTranslateCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LangTranslateCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/LangTranslateCommand.ts"],"names":[],"mappings":"AAkBA,OAAO,eAAe,CAAC;AAIvB,OAAO,OAAO,MAAM,YAAY,CAAC;AAGjC,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IACjD,SAAS,SAA6B;IACtC,WAAW,SAA0D;IAE/D,MAAM,CAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC7B,MAAM,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;CAoThB"}
|