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,92 @@
|
|
|
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_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const picocolors_1 = __importDefault(require("picocolors"));
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
class NamespaceCommand extends Command_1.default {
|
|
11
|
+
signature = 'dev:namespace';
|
|
12
|
+
description = 'Add or update JSDoc @namespace headers in command files';
|
|
13
|
+
async handle() {
|
|
14
|
+
console.log(picocolors_1.default.cyan('🚀 Starting namespace annotation process...'));
|
|
15
|
+
const rootDir = process.cwd();
|
|
16
|
+
function findJsFilesRecursive(dir) {
|
|
17
|
+
let results = [];
|
|
18
|
+
if (!node_fs_1.default.existsSync(dir))
|
|
19
|
+
return results;
|
|
20
|
+
const list = node_fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
21
|
+
for (const file of list) {
|
|
22
|
+
if (file.name === 'node_modules' || file.name === '.git')
|
|
23
|
+
continue;
|
|
24
|
+
const fullPath = node_path_1.default.join(dir, file.name);
|
|
25
|
+
if (file.isDirectory()) {
|
|
26
|
+
results = results.concat(findJsFilesRecursive(fullPath));
|
|
27
|
+
}
|
|
28
|
+
else if (file.name.endsWith('.js') || file.name.endsWith('.ts')) {
|
|
29
|
+
results.push(fullPath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return results;
|
|
33
|
+
}
|
|
34
|
+
function getFileType(filePath) {
|
|
35
|
+
const fileName = node_path_1.default.basename(filePath);
|
|
36
|
+
const parentDirName = node_path_1.default.basename(node_path_1.default.dirname(filePath));
|
|
37
|
+
const grandParentDirName = node_path_1.default.basename(node_path_1.default.dirname(node_path_1.default.dirname(filePath)));
|
|
38
|
+
if (fileName === '_command.js' || fileName === '_command.ts')
|
|
39
|
+
return 'Command Group Definition';
|
|
40
|
+
if (fileName === '_group.js' || fileName === '_group.ts')
|
|
41
|
+
return 'Subcommand Group Definition';
|
|
42
|
+
if (parentDirName === 'commands' || grandParentDirName === 'commands')
|
|
43
|
+
return 'Command';
|
|
44
|
+
if (parentDirName === 'events')
|
|
45
|
+
return 'Event Handler';
|
|
46
|
+
if (parentDirName === 'helpers')
|
|
47
|
+
return 'Helper Script';
|
|
48
|
+
if (parentDirName === 'models')
|
|
49
|
+
return 'Database Model';
|
|
50
|
+
if (parentDirName === 'migrations')
|
|
51
|
+
return 'Database Migration';
|
|
52
|
+
if (parentDirName === 'tasks')
|
|
53
|
+
return 'Scheduled Task';
|
|
54
|
+
return 'Module';
|
|
55
|
+
}
|
|
56
|
+
let filesToProcess = [];
|
|
57
|
+
const addonsPath = node_path_1.default.join(rootDir, 'addons');
|
|
58
|
+
if (node_fs_1.default.existsSync(addonsPath)) {
|
|
59
|
+
console.log(picocolors_1.default.dim('🔎 Scanning addons...'));
|
|
60
|
+
filesToProcess = filesToProcess.concat(findJsFilesRecursive(addonsPath));
|
|
61
|
+
}
|
|
62
|
+
const pkg = require(node_path_1.default.join(rootDir, 'package.json'));
|
|
63
|
+
const currentYear = new Date().getFullYear();
|
|
64
|
+
filesToProcess.forEach((filePath) => {
|
|
65
|
+
const relativePath = node_path_1.default.relative(rootDir, filePath).replace(/\\/g, '/');
|
|
66
|
+
const fileType = getFileType(filePath);
|
|
67
|
+
const newHeader = `/**
|
|
68
|
+
* @namespace: ${relativePath}
|
|
69
|
+
* @type: ${fileType}
|
|
70
|
+
* @copyright © ${currentYear} kenndeclouv
|
|
71
|
+
* @assistant chaa & graa
|
|
72
|
+
* @version ${pkg.version}
|
|
73
|
+
*/`;
|
|
74
|
+
const content = node_fs_1.default.readFileSync(filePath, 'utf8');
|
|
75
|
+
const headerRegex = /\/\*\*[\s\S]*?namespace:[\s\S]*?\*\//;
|
|
76
|
+
let newContent;
|
|
77
|
+
if (headerRegex.test(content)) {
|
|
78
|
+
newContent = content.replace(headerRegex, newHeader.trim());
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
newContent = `${newHeader}\n\n${content}`;
|
|
82
|
+
}
|
|
83
|
+
if (newContent.trim() !== content.trim()) {
|
|
84
|
+
node_fs_1.default.writeFileSync(filePath, newContent, 'utf8');
|
|
85
|
+
console.log(picocolors_1.default.green(`🔄 Updated: ${relativePath}`));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
console.log(picocolors_1.default.green('\n✅ Namespace annotation complete!'));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.default = NamespaceCommand;
|
|
92
|
+
//# sourceMappingURL=NamespaceCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NamespaceCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/NamespaceCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StructureCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/StructureCommand.ts"],"names":[],"mappings":"AAiBA,OAAO,OAAO,MAAM,YAAY,CAAC;AAKjC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IAC7C,SAAS,SAAmB;IAC5B,WAAW,SAAqD;IAE1D,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAyCpC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
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 StructureCommand extends Command_1.default {
|
|
11
|
+
signature = 'gen:structure';
|
|
12
|
+
description = 'Generate project structure to temp/structure.md';
|
|
13
|
+
async handle() {
|
|
14
|
+
const rootDir = process.cwd();
|
|
15
|
+
const outputDir = node_path_1.default.join(rootDir, 'temp');
|
|
16
|
+
const outputFile = node_path_1.default.join(outputDir, 'structure.md');
|
|
17
|
+
const exclude = [
|
|
18
|
+
'.git',
|
|
19
|
+
'.vscode',
|
|
20
|
+
'node_modules',
|
|
21
|
+
'dist',
|
|
22
|
+
'logs',
|
|
23
|
+
'.husky',
|
|
24
|
+
'.yalc',
|
|
25
|
+
];
|
|
26
|
+
function generateTree(dir, prefix = '') {
|
|
27
|
+
const items = node_fs_1.default
|
|
28
|
+
.readdirSync(dir)
|
|
29
|
+
.filter((item) => !exclude.includes(item));
|
|
30
|
+
let tree = '';
|
|
31
|
+
items.forEach((item, index) => {
|
|
32
|
+
const fullPath = node_path_1.default.join(dir, item);
|
|
33
|
+
const isLast = index === items.length - 1;
|
|
34
|
+
const connector = isLast ? '└── ' : '├── ';
|
|
35
|
+
tree += `${prefix}${connector}${item}\n`;
|
|
36
|
+
if (node_fs_1.default.statSync(fullPath).isDirectory()) {
|
|
37
|
+
tree += generateTree(fullPath, prefix + (isLast ? ' ' : '│ '));
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
return tree;
|
|
41
|
+
}
|
|
42
|
+
if (!node_fs_1.default.existsSync(outputDir)) {
|
|
43
|
+
node_fs_1.default.mkdirSync(outputDir, { recursive: true });
|
|
44
|
+
}
|
|
45
|
+
const tree = generateTree(rootDir);
|
|
46
|
+
node_fs_1.default.writeFileSync(outputFile, tree, 'utf8');
|
|
47
|
+
console.log(picocolors_1.default.green(`✅ Project structure saved to: ${outputFile}`));
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.default = StructureCommand;
|
|
51
|
+
//# sourceMappingURL=StructureCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StructureCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/StructureCommand.ts"],"names":[],"mappings":";;;;;AAiBA,yDAAiC;AACjC,sDAAyB;AACzB,0DAA6B;AAC7B,4DAA4B;AAE5B,MAAqB,gBAAiB,SAAQ,iBAAO;IAC7C,SAAS,GAAG,eAAe,CAAC;IAC5B,WAAW,GAAG,iDAAiD,CAAC;IAEhE,KAAK,CAAC,MAAM;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG;YACf,MAAM;YACN,SAAS;YACT,cAAc;YACd,MAAM;YACN,MAAM;YACN,QAAQ;YACR,OAAO;SACP,CAAC;QAEF,SAAS,YAAY,CAAC,GAAW,EAAE,MAAM,GAAG,EAAE;YAC7C,MAAM,KAAK,GAAG,iBAAE;iBACd,WAAW,CAAC,GAAG,CAAC;iBAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;gBAC7B,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;gBAC3C,IAAI,IAAI,GAAG,MAAM,GAAG,SAAS,GAAG,IAAI,IAAI,CAAC;gBAEzC,IAAI,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;oBACzC,IAAI,IAAI,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;gBACrE,CAAC;YACF,CAAC,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACb,CAAC;QAED,IAAI,CAAC,iBAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,iBAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;QAED,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,iBAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,oBAAE,CAAC,KAAK,CAAC,iCAAiC,UAAU,EAAE,CAAC,CAAC,CAAC;IACtE,CAAC;CACD;AA7CD,mCA6CC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpversionCommand.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/UpversionCommand.ts"],"names":[],"mappings":"AAkBA,OAAO,OAAO,MAAM,YAAY,CAAC;AAKjC,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,OAAO;IAC7C,SAAS,SAAgB;IACzB,WAAW,SAA4D;IAEjE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAiEpC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
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 UpversionCommand extends Command_1.default {
|
|
11
|
+
signature = 'version:up';
|
|
12
|
+
description = 'Update @version in JSDoc headers to match package.json';
|
|
13
|
+
async handle() {
|
|
14
|
+
const rootDir = process.cwd();
|
|
15
|
+
const pkgPath = node_path_1.default.join(rootDir, 'package.json');
|
|
16
|
+
if (!node_fs_1.default.existsSync(pkgPath)) {
|
|
17
|
+
console.error(picocolors_1.default.red('❌ package.json not found!'));
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const pkg = require(pkgPath);
|
|
21
|
+
const version = pkg.version;
|
|
22
|
+
console.log(picocolors_1.default.cyan(`✨ Using version from package.json: ${version}`));
|
|
23
|
+
const ignoredPaths = [
|
|
24
|
+
'node_modules',
|
|
25
|
+
'.git',
|
|
26
|
+
'.env',
|
|
27
|
+
'dist',
|
|
28
|
+
'obfuscate.js',
|
|
29
|
+
'.yalc',
|
|
30
|
+
];
|
|
31
|
+
function getAllJsFiles(dir, fileList = []) {
|
|
32
|
+
const files = node_fs_1.default.readdirSync(dir);
|
|
33
|
+
files.forEach((file) => {
|
|
34
|
+
const fullPath = node_path_1.default.join(dir, file);
|
|
35
|
+
if (ignoredPaths.includes(node_path_1.default.basename(fullPath)))
|
|
36
|
+
return;
|
|
37
|
+
const stat = node_fs_1.default.statSync(fullPath);
|
|
38
|
+
if (stat.isDirectory()) {
|
|
39
|
+
getAllJsFiles(fullPath, fileList);
|
|
40
|
+
}
|
|
41
|
+
else if (file.endsWith('.js') || file.endsWith('.ts')) {
|
|
42
|
+
fileList.push(fullPath);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return fileList;
|
|
46
|
+
}
|
|
47
|
+
const jsFiles = getAllJsFiles(rootDir);
|
|
48
|
+
const versionRegex = /(@version\s+)v?[\d.\-a-zA-Z]+/g;
|
|
49
|
+
let updatedCount = 0;
|
|
50
|
+
jsFiles.forEach((file) => {
|
|
51
|
+
try {
|
|
52
|
+
const originalContent = node_fs_1.default.readFileSync(file, 'utf8');
|
|
53
|
+
const newContent = originalContent.replace(versionRegex, `$1${version}`);
|
|
54
|
+
if (originalContent !== newContent) {
|
|
55
|
+
node_fs_1.default.writeFileSync(file, newContent, 'utf8');
|
|
56
|
+
console.log(picocolors_1.default.green(`✅ Updated: ${node_path_1.default.relative(rootDir, file)}`));
|
|
57
|
+
updatedCount++;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
console.error(picocolors_1.default.red(`❌ Failed to process: ${file}`), err.message);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
console.log(picocolors_1.default.green(`\n🎉 Version update complete! (${updatedCount} files changed)`));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
exports.default = UpversionCommand;
|
|
68
|
+
//# sourceMappingURL=UpversionCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpversionCommand.js","sourceRoot":"","sources":["../../../src/cli/commands/UpversionCommand.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
const commander_1 = require("commander");
|
|
8
|
+
const Command_1 = __importDefault(require("./Command"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
11
|
+
const pc = require('picocolors');
|
|
12
|
+
const { version } = require('../../package.json');
|
|
13
|
+
const program = new commander_1.Command();
|
|
14
|
+
program
|
|
15
|
+
.name('kythia')
|
|
16
|
+
.description(pc.cyan('🌸 Kythia Framework CLI'))
|
|
17
|
+
.version(version);
|
|
18
|
+
const commandsDir = node_path_1.default.join(__dirname, 'commands');
|
|
19
|
+
if (node_fs_1.default.existsSync(commandsDir)) {
|
|
20
|
+
const commandFiles = node_fs_1.default
|
|
21
|
+
.readdirSync(commandsDir)
|
|
22
|
+
.filter((file) => (file.endsWith('.js') || file.endsWith('.ts')) &&
|
|
23
|
+
!file.endsWith('.d.ts'));
|
|
24
|
+
for (const file of commandFiles) {
|
|
25
|
+
const filePath = node_path_1.default.join(commandsDir, file);
|
|
26
|
+
try {
|
|
27
|
+
const moduleExport = require(filePath);
|
|
28
|
+
const CommandClass = moduleExport.default || moduleExport;
|
|
29
|
+
if (typeof CommandClass === 'function' &&
|
|
30
|
+
CommandClass.prototype instanceof Command_1.default) {
|
|
31
|
+
const commandInstance = new CommandClass();
|
|
32
|
+
commandInstance.register(program);
|
|
33
|
+
}
|
|
34
|
+
else if (typeof CommandClass.register === 'function') {
|
|
35
|
+
CommandClass.register(program);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error(pc.red(`❌ Failed to load command ${file}:`), err);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
program.parse(process.argv);
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AAqBA,yCAAoC;AACpC,wDAAoC;AACpC,0DAA6B;AAC7B,sDAAyB;AAEzB,MAAM,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAIjC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACL,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;KAC/C,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnB,MAAM,WAAW,GAAG,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAErD,IAAI,iBAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IAChC,MAAM,YAAY,GAAG,iBAAE;SACrB,WAAW,CAAC,WAAW,CAAC;SAExB,MAAM,CACN,CAAC,IAAI,EAAE,EAAE,CACR,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CACxB,CAAC;IAEH,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,mBAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC;YAEJ,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;YAGvC,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC;YAG1D,IACC,OAAO,YAAY,KAAK,UAAU;gBAClC,YAAY,CAAC,SAAS,YAAY,iBAAW,EAC5C,CAAC;gBACF,MAAM,eAAe,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC3C,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC;iBAAM,IAAI,OAAO,YAAY,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAExD,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,4BAA4B,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;QACjE,CAAC;IACF,CAAC;AACF,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import 'dotenv/config';
|
|
2
|
+
import { Umzug } from 'umzug';
|
|
3
|
+
import { type QueryInterface } from 'sequelize';
|
|
4
|
+
import KythiaStorage from '../../database/KythiaStorage';
|
|
5
|
+
declare const sequelize: import("sequelize").Sequelize;
|
|
6
|
+
declare const storage: KythiaStorage;
|
|
7
|
+
declare const umzug: Umzug<QueryInterface>;
|
|
8
|
+
export { sequelize, umzug, storage };
|
|
9
|
+
//# sourceMappingURL=db.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/db.ts"],"names":[],"mappings":"AAoBA,OAAO,eAAe,CAAC;AAGvB,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AAK3D,OAAO,aAAa,MAAM,8BAA8B,CAAC;AAezD,QAAA,MAAM,SAAS,+BAAkC,CAAC;AAkClD,QAAA,MAAM,OAAO,eAAmC,CAAC;AAoCjD,QAAA,MAAM,KAAK,uBAkBT,CAAC;AAEH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
exports.storage = exports.umzug = exports.sequelize = void 0;
|
|
7
|
+
require("dotenv/config");
|
|
8
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
10
|
+
const umzug_1 = require("umzug");
|
|
11
|
+
const sequelize_1 = require("sequelize");
|
|
12
|
+
const pc = require('picocolors');
|
|
13
|
+
const KythiaSequelize_1 = __importDefault(require("../../database/KythiaSequelize"));
|
|
14
|
+
const KythiaStorage_1 = __importDefault(require("../../database/KythiaStorage"));
|
|
15
|
+
const configPath = node_path_1.default.resolve(process.cwd(), 'kythia.config.js');
|
|
16
|
+
if (!node_fs_1.default.existsSync(configPath)) {
|
|
17
|
+
console.error('❌ kythia.config.js not found in root directory!');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const config = require(configPath);
|
|
21
|
+
const sequelize = (0, KythiaSequelize_1.default)(config);
|
|
22
|
+
exports.sequelize = sequelize;
|
|
23
|
+
function getMigrationFiles() {
|
|
24
|
+
const rootDir = process.cwd();
|
|
25
|
+
const addonsDir = node_path_1.default.join(rootDir, 'addons');
|
|
26
|
+
if (!node_fs_1.default.existsSync(addonsDir))
|
|
27
|
+
return [];
|
|
28
|
+
const migrationFiles = [];
|
|
29
|
+
const addonFolders = node_fs_1.default
|
|
30
|
+
.readdirSync(addonsDir)
|
|
31
|
+
.filter((f) => node_fs_1.default.statSync(node_path_1.default.join(addonsDir, f)).isDirectory());
|
|
32
|
+
for (const addon of addonFolders) {
|
|
33
|
+
const migrationDir = node_path_1.default.join(addonsDir, addon, 'database', 'migrations');
|
|
34
|
+
if (node_fs_1.default.existsSync(migrationDir)) {
|
|
35
|
+
const files = node_fs_1.default
|
|
36
|
+
.readdirSync(migrationDir)
|
|
37
|
+
.filter((f) => f.endsWith('.js') || f.endsWith('.ts'))
|
|
38
|
+
.map((f) => ({
|
|
39
|
+
name: f,
|
|
40
|
+
path: node_path_1.default.join(migrationDir, f),
|
|
41
|
+
}));
|
|
42
|
+
migrationFiles.push(...files);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return migrationFiles.sort((a, b) => a.name.localeCompare(b.name));
|
|
46
|
+
}
|
|
47
|
+
const storage = new KythiaStorage_1.default({ sequelize });
|
|
48
|
+
exports.storage = storage;
|
|
49
|
+
const umzugLogger = {
|
|
50
|
+
info: (event) => {
|
|
51
|
+
if (typeof event === 'object') {
|
|
52
|
+
if (event.event === 'migrated') {
|
|
53
|
+
console.log(pc.green(`✅ Migrated: ${event.name} `) +
|
|
54
|
+
pc.gray(`(${event.durationSeconds}s)`));
|
|
55
|
+
}
|
|
56
|
+
else if (event.event === 'reverting') {
|
|
57
|
+
console.log(pc.yellow(`↩️ Reverting: ${event.name}`));
|
|
58
|
+
}
|
|
59
|
+
else if (event.event === 'reverted') {
|
|
60
|
+
console.log(pc.red(`❌ Reverted: ${event.name} `) +
|
|
61
|
+
pc.gray(`(${event.durationSeconds}s)`));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
console.log(pc.dim(event));
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
warn: (msg) => console.warn(pc.yellow(`⚠️ ${typeof msg === 'object' ? JSON.stringify(msg) : msg}`)),
|
|
69
|
+
error: (msg) => console.error(pc.red(`🔥 ${typeof msg === 'object' ? JSON.stringify(msg) : msg}`)),
|
|
70
|
+
debug: (msg) => console.debug(pc.gray(`🐛 ${typeof msg === 'object' ? JSON.stringify(msg) : msg}`)),
|
|
71
|
+
};
|
|
72
|
+
const umzug = new umzug_1.Umzug({
|
|
73
|
+
migrations: getMigrationFiles().map((m) => ({
|
|
74
|
+
name: m.name,
|
|
75
|
+
path: m.path,
|
|
76
|
+
up: async ({ context }) => {
|
|
77
|
+
const migration = require(m.path);
|
|
78
|
+
return migration.up(context, sequelize_1.DataTypes);
|
|
79
|
+
},
|
|
80
|
+
down: async ({ context }) => {
|
|
81
|
+
const migration = require(m.path);
|
|
82
|
+
return migration.down(context, sequelize_1.DataTypes);
|
|
83
|
+
},
|
|
84
|
+
})),
|
|
85
|
+
context: sequelize.getQueryInterface(),
|
|
86
|
+
storage: storage,
|
|
87
|
+
logger: umzugLogger,
|
|
88
|
+
});
|
|
89
|
+
exports.umzug = umzug;
|
|
90
|
+
//# sourceMappingURL=db.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"db.js","sourceRoot":"","sources":["../../../src/cli/utils/db.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KythiaMigrator.d.ts","sourceRoot":"","sources":["../../src/database/KythiaMigrator.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAoCtE,QAAA,MAAM,cAAc,EAAE,sBAkErB,CAAC;AAEF,SAAS,cAAc,CAAC"}
|
|
@@ -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
|
+
const KythiaStorage = require("./KythiaStorage");
|
|
6
|
+
const sequelize_1 = require("sequelize");
|
|
7
|
+
const umzug_1 = require("umzug");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
10
|
+
function getMigrationFiles(rootDir) {
|
|
11
|
+
const addonsDir = node_path_1.default.join(rootDir, 'addons');
|
|
12
|
+
if (!node_fs_1.default.existsSync(addonsDir))
|
|
13
|
+
return [];
|
|
14
|
+
const migrationFiles = [];
|
|
15
|
+
const addonFolders = node_fs_1.default
|
|
16
|
+
.readdirSync(addonsDir)
|
|
17
|
+
.filter((f) => node_fs_1.default.statSync(node_path_1.default.join(addonsDir, f)).isDirectory());
|
|
18
|
+
for (const addon of addonFolders) {
|
|
19
|
+
const migrationDir = node_path_1.default.join(addonsDir, addon, 'database', 'migrations');
|
|
20
|
+
if (node_fs_1.default.existsSync(migrationDir)) {
|
|
21
|
+
const files = node_fs_1.default
|
|
22
|
+
.readdirSync(migrationDir)
|
|
23
|
+
.filter((f) => f.endsWith('.js'))
|
|
24
|
+
.map((f) => ({
|
|
25
|
+
name: f,
|
|
26
|
+
path: node_path_1.default.join(migrationDir, f),
|
|
27
|
+
folder: migrationDir,
|
|
28
|
+
}));
|
|
29
|
+
migrationFiles.push(...files);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return migrationFiles.sort((a, b) => a.name.localeCompare(b.name));
|
|
33
|
+
}
|
|
34
|
+
const KythiaMigrator = async ({ sequelize, container, logger, }) => {
|
|
35
|
+
const rootDir = container.appRoot;
|
|
36
|
+
const migrations = getMigrationFiles(rootDir);
|
|
37
|
+
if (migrations.length === 0) {
|
|
38
|
+
logger.info('📭 No migrations found in addons.');
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const umzugLogger = {
|
|
42
|
+
info: (event) => {
|
|
43
|
+
if (typeof event === 'object') {
|
|
44
|
+
if (event.event === 'migrating') {
|
|
45
|
+
}
|
|
46
|
+
else if (event.event === 'migrated') {
|
|
47
|
+
logger.info(`✅ Migrated: ${event.name}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
logger.info(event);
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
warn: (msg) => logger.warn(msg),
|
|
55
|
+
error: (msg) => logger.error(msg),
|
|
56
|
+
debug: (msg) => logger.debug(msg),
|
|
57
|
+
};
|
|
58
|
+
const umzug = new umzug_1.Umzug({
|
|
59
|
+
migrations: migrations.map((m) => ({
|
|
60
|
+
name: m.name,
|
|
61
|
+
path: m.path,
|
|
62
|
+
up: async ({ context }) => {
|
|
63
|
+
const migration = require(m.path);
|
|
64
|
+
return migration.up(context, sequelize_1.DataTypes);
|
|
65
|
+
},
|
|
66
|
+
down: async ({ context }) => {
|
|
67
|
+
const migration = require(m.path);
|
|
68
|
+
return migration.down(context, sequelize_1.DataTypes);
|
|
69
|
+
},
|
|
70
|
+
})),
|
|
71
|
+
context: sequelize.getQueryInterface(),
|
|
72
|
+
storage: new KythiaStorage({ sequelize }),
|
|
73
|
+
logger: umzugLogger,
|
|
74
|
+
});
|
|
75
|
+
logger.info(`🚜 Checking migrations for ${migrations.length} files...`);
|
|
76
|
+
try {
|
|
77
|
+
const pending = await umzug.pending();
|
|
78
|
+
if (pending.length > 0) {
|
|
79
|
+
const executed = await umzug.up();
|
|
80
|
+
if (executed.length > 0) {
|
|
81
|
+
logger.info(`✨ Successfully applied ${executed.length} migrations.`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
logger.info('✨ Database is already up to date.');
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch (error) {
|
|
89
|
+
logger.error('🔥 Migration Failed:', error);
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
module.exports = KythiaMigrator;
|
|
94
|
+
//# sourceMappingURL=KythiaMigrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KythiaMigrator.js","sourceRoot":"","sources":["../../src/database/KythiaMigrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Model, DataTypes, type Sequelize, type InitOptions, type ModelAttributes } from 'sequelize';
|
|
2
|
+
import { LRUCache } from 'lru-cache';
|
|
3
|
+
import type { Redis } from 'ioredis';
|
|
4
|
+
import type { KythiaConfig } from '../types/KythiaConfig';
|
|
5
|
+
import type { CacheStats, KythiaModelDependencies, CacheEntry, KythiaModelStructure } from '../types/KythiaModel';
|
|
6
|
+
export declare class KythiaModel<T extends object = any, TCreationAttributes extends object = T> extends Model<T, TCreationAttributes> {
|
|
7
|
+
static client: any;
|
|
8
|
+
static redis: Redis | undefined;
|
|
9
|
+
static isRedisConnected: boolean;
|
|
10
|
+
static logger: any;
|
|
11
|
+
static config: KythiaConfig | {};
|
|
12
|
+
static CACHE_VERSION: string;
|
|
13
|
+
static localCache: LRUCache<string, {
|
|
14
|
+
data: any;
|
|
15
|
+
expires: number;
|
|
16
|
+
}, unknown>;
|
|
17
|
+
static localNegativeCache: Set<string>;
|
|
18
|
+
static MAX_LOCAL_CACHE_SIZE: number;
|
|
19
|
+
static DEFAULT_TTL: number;
|
|
20
|
+
static lastRedisOpts: string[] | null;
|
|
21
|
+
static reconnectTimeout: NodeJS.Timeout | null;
|
|
22
|
+
static lastAutoReconnectTs: number;
|
|
23
|
+
static pendingQueries: Map<string, Promise<any>>;
|
|
24
|
+
static cacheStats: CacheStats;
|
|
25
|
+
static redisErrorTimestamps: number[];
|
|
26
|
+
static isShardMode: boolean;
|
|
27
|
+
static _redisFallbackURLs: any[];
|
|
28
|
+
static _redisCurrentIndex: number;
|
|
29
|
+
static _redisFailedIndexes: Set<number>;
|
|
30
|
+
static _justFailedOver: boolean;
|
|
31
|
+
static fillable?: string[];
|
|
32
|
+
static guarded?: string[];
|
|
33
|
+
static structure?: KythiaModelStructure;
|
|
34
|
+
static table?: string;
|
|
35
|
+
static cacheKeys?: any[];
|
|
36
|
+
static CACHE_KEYS?: any[];
|
|
37
|
+
static CACHE_TTL?: number;
|
|
38
|
+
static customInvalidationTags?: string[];
|
|
39
|
+
static init(attributes: ModelAttributes<any, any>, options: InitOptions<any>): any;
|
|
40
|
+
static autoBoot(sequelize: Sequelize): Promise<typeof KythiaModel | undefined>;
|
|
41
|
+
static _mapDbTypeToSequelize(dbType: string): DataTypes.AbstractDataTypeConstructor;
|
|
42
|
+
static _setupLaravelHooks(): void;
|
|
43
|
+
static setDependencies({ logger, config, redis, redisOptions, }: KythiaModelDependencies): void;
|
|
44
|
+
static _trackRedisError(err: any): void;
|
|
45
|
+
static _tryRedisFailover(): boolean;
|
|
46
|
+
static _closeCurrentRedis(): void;
|
|
47
|
+
static initializeRedis(redisOptions?: any): Redis | null | undefined;
|
|
48
|
+
static _makeRetryStrategy(): (times: number) => number | null;
|
|
49
|
+
static _setupRedisEventHandlers(): void;
|
|
50
|
+
static _scheduleReconnect(): void;
|
|
51
|
+
static getCacheKey(queryIdentifier: any): string;
|
|
52
|
+
static normalizeQueryOptions(data: any): any;
|
|
53
|
+
static _generateSmartTags(instance: any): string[];
|
|
54
|
+
static setCacheEntry(cacheKeyOrQuery: any, data: any, ttl?: number, tags?: string[]): Promise<void>;
|
|
55
|
+
static getCachedEntry(cacheKeyOrQuery: any, includeOptions?: any): Promise<CacheEntry>;
|
|
56
|
+
static clearCache(keys: any): Promise<void>;
|
|
57
|
+
static _redisSetCacheEntry(cacheKey: string, data: any, ttl: number, tags?: string[]): Promise<void>;
|
|
58
|
+
static _redisGetCachedEntry(cacheKey: string, includeOptions: any): Promise<CacheEntry>;
|
|
59
|
+
static _redisClearCache(cacheKey: string): Promise<void>;
|
|
60
|
+
static invalidateByTags(tags: string[]): Promise<void>;
|
|
61
|
+
static _mapSetCacheEntry(cacheKey: string, data: any, ttl: number): void;
|
|
62
|
+
static _mapGetCachedEntry(cacheKey: string, includeOptions: any): CacheEntry;
|
|
63
|
+
static _mapClearCache(cacheKey: string): void;
|
|
64
|
+
static _mapClearAllModelCache(): void;
|
|
65
|
+
static _normalizeFindOptions(options: any): any;
|
|
66
|
+
static getCache(keys: any, options?: any): Promise<any>;
|
|
67
|
+
static getAllCache(options?: any): Promise<any>;
|
|
68
|
+
static scheduleAdd(keySuffix: string, score: number, value: string): Promise<void>;
|
|
69
|
+
static scheduleRemove(keySuffix: string, value: string): Promise<void>;
|
|
70
|
+
static scheduleGetExpired(keySuffix: string, scoreLimit?: number): Promise<string[]>;
|
|
71
|
+
static scheduleClear(keySuffix: string): Promise<void>;
|
|
72
|
+
static findOrCreateWithCache(options: any): Promise<any>;
|
|
73
|
+
static countWithCache(options?: any, ttl?: number): Promise<any>;
|
|
74
|
+
saveAndUpdateCache(): Promise<this>;
|
|
75
|
+
static clearNegativeCache(keys: any): Promise<void>;
|
|
76
|
+
static aggregateWithCache(options?: any, cacheOptions?: any): Promise<any>;
|
|
77
|
+
static initializeCacheHooks(): void;
|
|
78
|
+
static attachHooksToAllModels(sequelizeInstance: Sequelize, client: any): void;
|
|
79
|
+
static touchParent(childInstance: any, foreignKeyField: string, ParentModel: typeof KythiaModel, timestampField?: string): Promise<void>;
|
|
80
|
+
static setupParentTouch(foreignKeyField: string, ParentModel: typeof KythiaModel, timestampField?: string): void;
|
|
81
|
+
}
|
|
82
|
+
export default KythiaModel;
|
|
83
|
+
//# sourceMappingURL=KythiaModel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KythiaModel.d.ts","sourceRoot":"","sources":["../../src/database/KythiaModel.ts"],"names":[],"mappings":"AAsBA,OAAO,EACN,KAAK,EACL,SAAS,EACT,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,eAAe,EAEpB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EACX,UAAU,EACV,uBAAuB,EACvB,UAAU,EACV,oBAAoB,EACpB,MAAM,sBAAsB,CAAC;AA8B9B,qBAAa,WAAW,CACvB,CAAC,SAAS,MAAM,GAAG,GAAG,EACtB,mBAAmB,SAAS,MAAM,GAAG,CAAC,CACrC,SAAQ,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IACnB,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,CAAC;IAChC,MAAM,CAAC,gBAAgB,UAAS;IAChC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAgB;IAClC,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,EAAE,CAAM;IACtC,MAAM,CAAC,aAAa,SAAW;IAE/B,MAAM,CAAC,UAAU;cAAgC,GAAG;iBAAW,MAAM;gBAElE;IACH,MAAM,CAAC,kBAAkB,cAAqB;IAC9C,MAAM,CAAC,oBAAoB,SAAQ;IACnC,MAAM,CAAC,WAAW,SAAkB;IAEpC,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAC7C,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAQ;IACtD,MAAM,CAAC,mBAAmB,SAAK;IAE/B,MAAM,CAAC,cAAc,4BAAmC;IACxD,MAAM,CAAC,UAAU,EAAE,UAAU,CAO3B;IAEF,MAAM,CAAC,oBAAoB,EAAE,MAAM,EAAE,CAAM;IAE3C,MAAM,CAAC,WAAW,UAAS;IAE3B,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAM;IACtC,MAAM,CAAC,kBAAkB,SAAK;IAC9B,MAAM,CAAC,mBAAmB,cAAqB;IAC/C,MAAM,CAAC,eAAe,UAAS;IAG/B,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACxC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,CAAC;IACzB,MAAM,CAAC,UAAU,CAAC,EAAE,GAAG,EAAE,CAAC;IAC1B,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAQzC,MAAM,CAAC,IAAI,CACV,UAAU,EAAE,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,EACrC,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,GACvB,GAAG;WAqCO,QAAQ,CAAC,SAAS,EAAE,SAAS;IAmE1C,MAAM,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM;IAuC3C,MAAM,CAAC,kBAAkB;IA2CzB,MAAM,CAAC,eAAe,CAAC,EACtB,MAAM,EACN,MAAM,EACN,KAAK,EACL,YAAY,GACZ,EAAE,uBAAuB;IA4E1B,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG;IAsDhC,MAAM,CAAC,iBAAiB;IA2BxB,MAAM,CAAC,kBAAkB;IAgBzB,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE,GAAG;IAoFzC,MAAM,CAAC,kBAAkB,KAChB,OAAO,MAAM;IAuBtB,MAAM,CAAC,wBAAwB;IA2E/B,MAAM,CAAC,kBAAkB;IAoCzB,MAAM,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,GAAG,MAAM;IAgChD,MAAM,CAAC,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG;IAqB5C,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,GAAG;WAsC1B,aAAa,CACzB,eAAe,EAAE,GAAG,EACpB,IAAI,EAAE,GAAG,EACT,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,GAAE,MAAM,EAAO;WAqBP,cAAc,CAC1B,eAAe,EAAE,GAAG,EACpB,cAAc,CAAC,EAAE,GAAG,GAClB,OAAO,CAAC,UAAU,CAAC;WAmBT,UAAU,CAAC,IAAI,EAAE,GAAG;WAYpB,mBAAmB,CAC/B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,GAAG,EACT,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,MAAM,EAAO;WAgCP,oBAAoB,CAChC,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,GAAG,GACjB,OAAO,CAAC,UAAU,CAAC;WAiDT,gBAAgB,CAAC,QAAQ,EAAE,MAAM;WAajC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE;IAgC5C,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM;IAkCjE,MAAM,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,GAAG,UAAU;IAsD5E,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM;IAYtC,MAAM,CAAC,sBAAsB;IA6B7B,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG;WAuClC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,GAAE,GAAQ;WA8DrC,WAAW,CAAC,OAAO,GAAE,GAAQ;WA6C7B,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;WAa3D,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;WAc/C,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,SAAa;WAc7D,aAAa,CAAC,SAAS,EAAE,MAAM;WAc/B,qBAAqB,CAAC,OAAO,EAAE,GAAG;WAsGlC,cAAc,CAAC,OAAO,GAAE,GAAQ,EAAE,GAAG,SAAgB;IAwB5D,kBAAkB;WAsCX,kBAAkB,CAAC,IAAI,EAAE,GAAG;WAO5B,kBAAkB,CAAC,OAAO,GAAE,GAAQ,EAAE,YAAY,GAAE,GAAQ;IA4BzE,MAAM,CAAC,oBAAoB;IA0D3B,MAAM,CAAC,sBAAsB,CAAC,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG;WAqB1D,WAAW,CACvB,aAAa,EAAE,GAAG,EAClB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,OAAO,WAAW,EAC/B,cAAc,GAAE,MAAoB;IAyBrC,MAAM,CAAC,gBAAgB,CACtB,eAAe,EAAE,MAAM,EACvB,WAAW,EAAE,OAAO,WAAW,EAC/B,cAAc,SAAc;CA2B7B;AAED,eAAe,WAAW,CAAC"}
|