@codemastersolutions/db-utility 0.0.1
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/LICENSE +21 -0
- package/LICENSE.es +21 -0
- package/LICENSE.pt-BR +21 -0
- package/README.es.md +155 -0
- package/README.md +155 -0
- package/README.pt-BR.md +155 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +314 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/AppConfig.d.ts +19 -0
- package/dist/config/AppConfig.d.ts.map +1 -0
- package/dist/config/AppConfig.js +142 -0
- package/dist/config/AppConfig.js.map +1 -0
- package/dist/config/ConfigInitializer.d.ts +10 -0
- package/dist/config/ConfigInitializer.d.ts.map +1 -0
- package/dist/config/ConfigInitializer.js +37 -0
- package/dist/config/ConfigInitializer.js.map +1 -0
- package/dist/config/ConfigLoader.d.ts +7 -0
- package/dist/config/ConfigLoader.d.ts.map +1 -0
- package/dist/config/ConfigLoader.js +94 -0
- package/dist/config/ConfigLoader.js.map +1 -0
- package/dist/database/ConnectionFactory.d.ts +5 -0
- package/dist/database/ConnectionFactory.d.ts.map +1 -0
- package/dist/database/ConnectionFactory.js +22 -0
- package/dist/database/ConnectionFactory.js.map +1 -0
- package/dist/database/SqlSafety.d.ts +7 -0
- package/dist/database/SqlSafety.d.ts.map +1 -0
- package/dist/database/SqlSafety.js +47 -0
- package/dist/database/SqlSafety.js.map +1 -0
- package/dist/database/connectors/MssqlConnector.d.ts +13 -0
- package/dist/database/connectors/MssqlConnector.d.ts.map +1 -0
- package/dist/database/connectors/MssqlConnector.js +72 -0
- package/dist/database/connectors/MssqlConnector.js.map +1 -0
- package/dist/database/connectors/MysqlConnector.d.ts +12 -0
- package/dist/database/connectors/MysqlConnector.d.ts.map +1 -0
- package/dist/database/connectors/MysqlConnector.js +70 -0
- package/dist/database/connectors/MysqlConnector.js.map +1 -0
- package/dist/database/connectors/PostgresConnector.d.ts +12 -0
- package/dist/database/connectors/PostgresConnector.d.ts.map +1 -0
- package/dist/database/connectors/PostgresConnector.js +65 -0
- package/dist/database/connectors/PostgresConnector.js.map +1 -0
- package/dist/errors/DbUtilityError.d.ts +7 -0
- package/dist/errors/DbUtilityError.d.ts.map +1 -0
- package/dist/errors/DbUtilityError.js +15 -0
- package/dist/errors/DbUtilityError.js.map +1 -0
- package/dist/generators/GeneratorTypes.d.ts +15 -0
- package/dist/generators/GeneratorTypes.d.ts.map +1 -0
- package/dist/generators/GeneratorTypes.js +3 -0
- package/dist/generators/GeneratorTypes.js.map +1 -0
- package/dist/generators/GeneratorWriter.d.ts +6 -0
- package/dist/generators/GeneratorWriter.d.ts.map +1 -0
- package/dist/generators/GeneratorWriter.js +25 -0
- package/dist/generators/GeneratorWriter.js.map +1 -0
- package/dist/generators/MongooseGenerator.d.ts +10 -0
- package/dist/generators/MongooseGenerator.d.ts.map +1 -0
- package/dist/generators/MongooseGenerator.js +75 -0
- package/dist/generators/MongooseGenerator.js.map +1 -0
- package/dist/generators/PrismaGenerator.d.ts +9 -0
- package/dist/generators/PrismaGenerator.d.ts.map +1 -0
- package/dist/generators/PrismaGenerator.js +87 -0
- package/dist/generators/PrismaGenerator.js.map +1 -0
- package/dist/generators/SequelizeGenerator.d.ts +12 -0
- package/dist/generators/SequelizeGenerator.d.ts.map +1 -0
- package/dist/generators/SequelizeGenerator.js +243 -0
- package/dist/generators/SequelizeGenerator.js.map +1 -0
- package/dist/generators/TypeORMGenerator.d.ts +12 -0
- package/dist/generators/TypeORMGenerator.d.ts.map +1 -0
- package/dist/generators/TypeORMGenerator.js +216 -0
- package/dist/generators/TypeORMGenerator.js.map +1 -0
- package/dist/i18n/messages.d.ts +49 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +149 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/introspection/DataExtractor.d.ts +10 -0
- package/dist/introspection/DataExtractor.d.ts.map +1 -0
- package/dist/introspection/DataExtractor.js +52 -0
- package/dist/introspection/DataExtractor.js.map +1 -0
- package/dist/introspection/IntrospectionLogger.d.ts +7 -0
- package/dist/introspection/IntrospectionLogger.d.ts.map +1 -0
- package/dist/introspection/IntrospectionLogger.js +30 -0
- package/dist/introspection/IntrospectionLogger.js.map +1 -0
- package/dist/introspection/IntrospectionService.d.ts +10 -0
- package/dist/introspection/IntrospectionService.d.ts.map +1 -0
- package/dist/introspection/IntrospectionService.js +37 -0
- package/dist/introspection/IntrospectionService.js.map +1 -0
- package/dist/introspection/Introspector.d.ts +11 -0
- package/dist/introspection/Introspector.d.ts.map +1 -0
- package/dist/introspection/Introspector.js +11 -0
- package/dist/introspection/Introspector.js.map +1 -0
- package/dist/introspection/MssqlIntrospector.d.ts +11 -0
- package/dist/introspection/MssqlIntrospector.d.ts.map +1 -0
- package/dist/introspection/MssqlIntrospector.js +193 -0
- package/dist/introspection/MssqlIntrospector.js.map +1 -0
- package/dist/introspection/MysqlIntrospector.d.ts +10 -0
- package/dist/introspection/MysqlIntrospector.d.ts.map +1 -0
- package/dist/introspection/MysqlIntrospector.js +175 -0
- package/dist/introspection/MysqlIntrospector.js.map +1 -0
- package/dist/introspection/PostgresIntrospector.d.ts +11 -0
- package/dist/introspection/PostgresIntrospector.d.ts.map +1 -0
- package/dist/introspection/PostgresIntrospector.js +192 -0
- package/dist/introspection/PostgresIntrospector.js.map +1 -0
- package/dist/testing/ContainerManager.d.ts +7 -0
- package/dist/testing/ContainerManager.d.ts.map +1 -0
- package/dist/testing/ContainerManager.js +68 -0
- package/dist/testing/ContainerManager.js.map +1 -0
- package/dist/testing/MigrationTester.d.ts +18 -0
- package/dist/testing/MigrationTester.d.ts.map +1 -0
- package/dist/testing/MigrationTester.js +399 -0
- package/dist/testing/MigrationTester.js.map +1 -0
- package/dist/testing/runners/MigrationRunner.d.ts +5 -0
- package/dist/testing/runners/MigrationRunner.d.ts.map +1 -0
- package/dist/testing/runners/MigrationRunner.js +3 -0
- package/dist/testing/runners/MigrationRunner.js.map +1 -0
- package/dist/testing/runners/SequelizeRunner.d.ts +8 -0
- package/dist/testing/runners/SequelizeRunner.d.ts.map +1 -0
- package/dist/testing/runners/SequelizeRunner.js +71 -0
- package/dist/testing/runners/SequelizeRunner.js.map +1 -0
- package/dist/testing/runners/TypeORMRunner.d.ts +8 -0
- package/dist/testing/runners/TypeORMRunner.d.ts.map +1 -0
- package/dist/testing/runners/TypeORMRunner.js +91 -0
- package/dist/testing/runners/TypeORMRunner.js.map +1 -0
- package/dist/types/database.d.ts +22 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/database.js +3 -0
- package/dist/types/database.js.map +1 -0
- package/dist/types/introspection.d.ts +43 -0
- package/dist/types/introspection.d.ts.map +1 -0
- package/dist/types/introspection.js +3 -0
- package/dist/types/introspection.js.map +1 -0
- package/dist/utils/PackageManager.d.ts +13 -0
- package/dist/utils/PackageManager.d.ts.map +1 -0
- package/dist/utils/PackageManager.js +114 -0
- package/dist/utils/PackageManager.js.map +1 -0
- package/dist/utils/topologicalSort.d.ts +3 -0
- package/dist/utils/topologicalSort.d.ts.map +1 -0
- package/dist/utils/topologicalSort.js +37 -0
- package/dist/utils/topologicalSort.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
const commander_1 = require("commander");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const path_1 = require("path");
|
|
7
|
+
const AppConfig_1 = require("../config/AppConfig");
|
|
8
|
+
const ConfigInitializer_1 = require("../config/ConfigInitializer");
|
|
9
|
+
const ConfigLoader_1 = require("../config/ConfigLoader");
|
|
10
|
+
const ConnectionFactory_1 = require("../database/ConnectionFactory");
|
|
11
|
+
const SqlSafety_1 = require("../database/SqlSafety");
|
|
12
|
+
const DbUtilityError_1 = require("../errors/DbUtilityError");
|
|
13
|
+
const GeneratorWriter_1 = require("../generators/GeneratorWriter");
|
|
14
|
+
const MongooseGenerator_1 = require("../generators/MongooseGenerator");
|
|
15
|
+
const PrismaGenerator_1 = require("../generators/PrismaGenerator");
|
|
16
|
+
const SequelizeGenerator_1 = require("../generators/SequelizeGenerator");
|
|
17
|
+
const TypeORMGenerator_1 = require("../generators/TypeORMGenerator");
|
|
18
|
+
const messages_1 = require("../i18n/messages");
|
|
19
|
+
const DataExtractor_1 = require("../introspection/DataExtractor");
|
|
20
|
+
const IntrospectionLogger_1 = require("../introspection/IntrospectionLogger");
|
|
21
|
+
const IntrospectionService_1 = require("../introspection/IntrospectionService");
|
|
22
|
+
const ContainerManager_1 = require("../testing/ContainerManager");
|
|
23
|
+
const MigrationTester_1 = require("../testing/MigrationTester");
|
|
24
|
+
const appConfig = AppConfig_1.AppConfigLoader.load();
|
|
25
|
+
const messages = (0, messages_1.getMessages)(appConfig.language);
|
|
26
|
+
const getPackageVersion = () => {
|
|
27
|
+
try {
|
|
28
|
+
const packageJsonPath = (0, path_1.join)(__dirname, '../../package.json');
|
|
29
|
+
const packageJson = JSON.parse((0, fs_1.readFileSync)(packageJsonPath, 'utf-8'));
|
|
30
|
+
return packageJson.version;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return '0.0.0';
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const program = new commander_1.Command();
|
|
37
|
+
program
|
|
38
|
+
.name('db-utility')
|
|
39
|
+
.alias('dbutility')
|
|
40
|
+
.description(messages.cli.appDescription)
|
|
41
|
+
.version(getPackageVersion());
|
|
42
|
+
program
|
|
43
|
+
.option('--init', messages.cli.initOptionDescription)
|
|
44
|
+
.option('-f, --force', messages.cli.forceOptionDescription);
|
|
45
|
+
const handleCliError = (error) => {
|
|
46
|
+
if (error instanceof SqlSafety_1.DbUtilitySecurityError) {
|
|
47
|
+
const text = error.code === 'UNSAFE_OPERATION'
|
|
48
|
+
? messages.cli.securitySqlUnsafeOperation
|
|
49
|
+
: messages.cli.securitySqlUnsafeDataSelect;
|
|
50
|
+
console.error(messages.cli.securityError, text);
|
|
51
|
+
}
|
|
52
|
+
else if (error instanceof DbUtilityError_1.DbUtilityError) {
|
|
53
|
+
let text;
|
|
54
|
+
switch (error.code) {
|
|
55
|
+
case 'INTROSPECTION_DB_TYPE_REQUIRED':
|
|
56
|
+
text = messages.cli.introspectionDbTypeRequired;
|
|
57
|
+
break;
|
|
58
|
+
case 'INTROSPECTION_DB_TYPE_UNSUPPORTED':
|
|
59
|
+
text = messages.cli.introspectionDbTypeUnsupported;
|
|
60
|
+
break;
|
|
61
|
+
case 'APP_CONFIG_FILE_NOT_FOUND':
|
|
62
|
+
text = messages.cli.appConfigFileNotFound(error.details || '?');
|
|
63
|
+
break;
|
|
64
|
+
case 'APP_CONFIG_FILE_FORMAT_UNSUPPORTED':
|
|
65
|
+
text = messages.cli.appConfigFileFormatUnsupported(error.details || '?');
|
|
66
|
+
break;
|
|
67
|
+
case 'CONFIG_FILE_NOT_FOUND':
|
|
68
|
+
text = messages.cli.configFileNotFound(error.details || '?');
|
|
69
|
+
break;
|
|
70
|
+
case 'CONFIG_FILE_FORMAT_UNSUPPORTED':
|
|
71
|
+
text = messages.cli.configFileFormatUnsupported(error.details || '?');
|
|
72
|
+
break;
|
|
73
|
+
case 'CONFIG_DB_TYPE_OR_CONNECTION_STRING_REQUIRED':
|
|
74
|
+
text = messages.cli.configDbTypeOrConnectionStringRequired;
|
|
75
|
+
break;
|
|
76
|
+
case 'CONFIG_DB_TYPE_REQUIRED':
|
|
77
|
+
text = messages.cli.configDbTypeRequired;
|
|
78
|
+
break;
|
|
79
|
+
case 'CONNECTION_FAILED':
|
|
80
|
+
text = messages.cli.connectionFailed;
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
text = error.message;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
console.error(messages.cli.genericError, text);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
console.error(messages.cli.genericError, error instanceof Error ? error.message : String(error));
|
|
90
|
+
}
|
|
91
|
+
process.exit(1);
|
|
92
|
+
};
|
|
93
|
+
const addConnectionOptions = (cmd) => {
|
|
94
|
+
return cmd
|
|
95
|
+
.option('-c, --config <path>', messages.cli.optionConfigPath)
|
|
96
|
+
.option('-t, --type <type>', messages.cli.optionType)
|
|
97
|
+
.option('-H, --host <host>', messages.cli.optionHost)
|
|
98
|
+
.option('-P, --port <port>', messages.cli.optionPort)
|
|
99
|
+
.option('-u, --username <username>', messages.cli.optionUsername)
|
|
100
|
+
.option('-p, --password <password>', messages.cli.optionPassword)
|
|
101
|
+
.option('-d, --database <database>', messages.cli.optionDatabase)
|
|
102
|
+
.option('--ssl', messages.cli.optionSsl);
|
|
103
|
+
};
|
|
104
|
+
const getGenerator = (target) => {
|
|
105
|
+
switch (target.toLowerCase()) {
|
|
106
|
+
case 'sequelize':
|
|
107
|
+
return new SequelizeGenerator_1.SequelizeGenerator();
|
|
108
|
+
case 'typeorm':
|
|
109
|
+
return new TypeORMGenerator_1.TypeORMGenerator();
|
|
110
|
+
case 'prisma':
|
|
111
|
+
return new PrismaGenerator_1.PrismaGenerator();
|
|
112
|
+
case 'mongoose':
|
|
113
|
+
case 'mongodb':
|
|
114
|
+
return new MongooseGenerator_1.MongooseGenerator();
|
|
115
|
+
default:
|
|
116
|
+
throw new Error(`Unknown target: ${target}`);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
const getConnectionConfig = async (options) => {
|
|
120
|
+
const overrides = {};
|
|
121
|
+
if (options.type)
|
|
122
|
+
overrides.type = options.type;
|
|
123
|
+
if (options.host)
|
|
124
|
+
overrides.host = options.host;
|
|
125
|
+
if (options.port)
|
|
126
|
+
overrides.port = parseInt(options.port, 10);
|
|
127
|
+
if (options.username)
|
|
128
|
+
overrides.username = options.username;
|
|
129
|
+
if (options.password)
|
|
130
|
+
overrides.password = options.password;
|
|
131
|
+
if (options.database)
|
|
132
|
+
overrides.database = options.database;
|
|
133
|
+
if (options.ssl)
|
|
134
|
+
overrides.ssl = true;
|
|
135
|
+
return ConfigLoader_1.ConfigLoader.load(options.config, overrides);
|
|
136
|
+
};
|
|
137
|
+
const withConnection = async (options, action) => {
|
|
138
|
+
let connector = null;
|
|
139
|
+
try {
|
|
140
|
+
const config = await getConnectionConfig(options);
|
|
141
|
+
console.log(messages.cli.connecting(config.type));
|
|
142
|
+
connector = ConnectionFactory_1.ConnectionFactory.create(config);
|
|
143
|
+
await connector.connect();
|
|
144
|
+
await action(connector, config);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
handleCliError(error);
|
|
148
|
+
}
|
|
149
|
+
finally {
|
|
150
|
+
if (connector) {
|
|
151
|
+
try {
|
|
152
|
+
await connector.disconnect();
|
|
153
|
+
console.log(messages.cli.connectionClosed);
|
|
154
|
+
}
|
|
155
|
+
catch (disconnectError) {
|
|
156
|
+
console.warn('Erro ao fechar conexão:', disconnectError instanceof Error ? disconnectError.message : String(disconnectError));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
const connectCommand = program.command('connect').description(messages.cli.connectDescription);
|
|
162
|
+
addConnectionOptions(connectCommand).action(async (options) => {
|
|
163
|
+
await withConnection(options, async () => {
|
|
164
|
+
console.log(messages.cli.connectSuccess);
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
const introspectCommand = program
|
|
168
|
+
.command('introspect')
|
|
169
|
+
.description(messages.cli.introspectDescription);
|
|
170
|
+
addConnectionOptions(introspectCommand).action(async (options) => {
|
|
171
|
+
await withConnection(options, async (connector, config) => {
|
|
172
|
+
console.log(messages.cli.introspectConnecting(config.database));
|
|
173
|
+
const service = new IntrospectionService_1.IntrospectionService(connector, config);
|
|
174
|
+
const schema = await service.introspect();
|
|
175
|
+
const runDir = IntrospectionLogger_1.IntrospectionLogger.logSchema(config, schema, process.cwd(), appConfig);
|
|
176
|
+
console.log(messages.cli.introspectDone(schema.tables.length));
|
|
177
|
+
console.log(messages.cli.introspectSavedAt(runDir));
|
|
178
|
+
});
|
|
179
|
+
});
|
|
180
|
+
const exportCommand = program.command('export').description(messages.cli.exportDescription);
|
|
181
|
+
addConnectionOptions(exportCommand)
|
|
182
|
+
.option('--target <target>', 'Target ORM: sequelize, typeorm, prisma, mongoose')
|
|
183
|
+
.option('--output <dir>', 'Output directory')
|
|
184
|
+
.action(async (options) => {
|
|
185
|
+
if (!options.target) {
|
|
186
|
+
handleCliError(new Error('Target is required (--target <target>)'));
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
await withConnection(options, async (connector, config) => {
|
|
190
|
+
console.log(messages.cli.introspectConnecting(config.database));
|
|
191
|
+
const service = new IntrospectionService_1.IntrospectionService(connector, config);
|
|
192
|
+
const schema = await service.introspect();
|
|
193
|
+
const generator = getGenerator(options.target);
|
|
194
|
+
console.log(`Generating models for ${options.target}...`);
|
|
195
|
+
const files = await generator.generate(schema);
|
|
196
|
+
const baseOutputDir = options.output || (0, path_1.join)(process.cwd(), 'exports', 'generated-models');
|
|
197
|
+
const outputDir = (0, path_1.join)(baseOutputDir, options.target.toLowerCase());
|
|
198
|
+
GeneratorWriter_1.GeneratorWriter.write(files, outputDir);
|
|
199
|
+
console.log(`Successfully generated ${files.length} files in ${outputDir}`);
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
const migrateCommand = program.command('migrate').description(messages.cli.migrateDescription);
|
|
203
|
+
addConnectionOptions(migrateCommand)
|
|
204
|
+
.option('--target <target>', 'Target ORM: sequelize, typeorm')
|
|
205
|
+
.option('--output <dir>', 'Output directory')
|
|
206
|
+
.option('--data', 'Generate data migration')
|
|
207
|
+
.option('--only-data', 'Generate only data migration')
|
|
208
|
+
.option('--tables <tables>', 'Comma separated list of tables to export data from')
|
|
209
|
+
.action(async (options) => {
|
|
210
|
+
if (!options.target) {
|
|
211
|
+
handleCliError(new Error('Target is required (--target <target>)'));
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
await withConnection(options, async (connector, config) => {
|
|
215
|
+
console.log(messages.cli.introspectConnecting(config.database));
|
|
216
|
+
const service = new IntrospectionService_1.IntrospectionService(connector, config);
|
|
217
|
+
const schema = await service.introspect();
|
|
218
|
+
const generator = getGenerator(options.target);
|
|
219
|
+
const generateData = options.onlyData || options.data;
|
|
220
|
+
const generateSchema = !options.onlyData;
|
|
221
|
+
let extractedData = [];
|
|
222
|
+
if (generateData) {
|
|
223
|
+
const tables = options.tables ? options.tables.split(',').map((t) => t.trim()) : [];
|
|
224
|
+
if (tables.length === 0) {
|
|
225
|
+
throw new Error('You must specify at least one table via --tables when using --data or --only-data');
|
|
226
|
+
}
|
|
227
|
+
console.log(`Extracting data from tables: ${tables.join(', ')}...`);
|
|
228
|
+
const extractor = new DataExtractor_1.DataExtractor(connector, config.type);
|
|
229
|
+
extractedData = await extractor.extract(schema, tables);
|
|
230
|
+
}
|
|
231
|
+
const version = await connector.getVersion();
|
|
232
|
+
const dbInfo = {
|
|
233
|
+
type: config.type,
|
|
234
|
+
version: version,
|
|
235
|
+
databaseName: config.database,
|
|
236
|
+
timestamp: new Date().toISOString(),
|
|
237
|
+
};
|
|
238
|
+
const baseOutputDir = options.output || (0, path_1.join)(process.cwd(), 'exports', 'generated-migrations');
|
|
239
|
+
const outputDir = (0, path_1.join)(baseOutputDir, options.target.toLowerCase());
|
|
240
|
+
if (generateSchema) {
|
|
241
|
+
if (!('generateMigrations' in generator)) {
|
|
242
|
+
throw new Error(`Target ${options.target} does not support migration generation`);
|
|
243
|
+
}
|
|
244
|
+
const migrationGenerator = generator;
|
|
245
|
+
console.log(`Generating migrations for ${options.target}...`);
|
|
246
|
+
const files = await migrationGenerator.generateMigrations(schema, options.data ? extractedData : undefined);
|
|
247
|
+
GeneratorWriter_1.GeneratorWriter.clean(outputDir);
|
|
248
|
+
GeneratorWriter_1.GeneratorWriter.write(files, outputDir);
|
|
249
|
+
GeneratorWriter_1.GeneratorWriter.write([
|
|
250
|
+
{
|
|
251
|
+
fileName: 'database-info.json',
|
|
252
|
+
content: JSON.stringify(dbInfo, null, 2),
|
|
253
|
+
},
|
|
254
|
+
], outputDir);
|
|
255
|
+
console.log(`Successfully generated ${files.length} migration files in ${outputDir}`);
|
|
256
|
+
}
|
|
257
|
+
else if (generateData) {
|
|
258
|
+
if (!('generateDataMigrations' in generator)) {
|
|
259
|
+
throw new Error(`Target ${options.target} does not support data migration generation`);
|
|
260
|
+
}
|
|
261
|
+
console.log(`Generating data migrations for ${options.target}...`);
|
|
262
|
+
const dataMigrationGenerator = generator;
|
|
263
|
+
const files = await dataMigrationGenerator.generateDataMigrations(extractedData);
|
|
264
|
+
GeneratorWriter_1.GeneratorWriter.clean(outputDir);
|
|
265
|
+
GeneratorWriter_1.GeneratorWriter.write(files, outputDir);
|
|
266
|
+
GeneratorWriter_1.GeneratorWriter.write([
|
|
267
|
+
{
|
|
268
|
+
fileName: 'database-info.json',
|
|
269
|
+
content: JSON.stringify(dbInfo, null, 2),
|
|
270
|
+
},
|
|
271
|
+
], outputDir);
|
|
272
|
+
console.log(`Successfully generated ${files.length} seed files in ${outputDir}`);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
const testCommand = program.command('test').description('Test generated migrations');
|
|
277
|
+
testCommand
|
|
278
|
+
.option('--target <target>', 'Target ORM: sequelize, typeorm')
|
|
279
|
+
.option('--dir <dir>', 'Migrations directory')
|
|
280
|
+
.option('--engines <engines>', 'Comma separated list of engines to test (e.g. postgres:14,mysql:8)')
|
|
281
|
+
.option('--backup', 'Export database backup from container')
|
|
282
|
+
.action(async (options) => {
|
|
283
|
+
if (!options.target) {
|
|
284
|
+
handleCliError(new Error('Target is required (--target <target>)'));
|
|
285
|
+
return;
|
|
286
|
+
}
|
|
287
|
+
const migrationsDir = options.dir ||
|
|
288
|
+
(0, path_1.join)(process.cwd(), 'exports', 'generated-migrations', options.target.toLowerCase());
|
|
289
|
+
const engines = options.engines ? options.engines.split(',').map((e) => e.trim()) : undefined;
|
|
290
|
+
const containerManager = new ContainerManager_1.ContainerManager();
|
|
291
|
+
const tester = new MigrationTester_1.MigrationTester(containerManager);
|
|
292
|
+
try {
|
|
293
|
+
await tester.test(options.target, migrationsDir, engines, options.backup);
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
handleCliError(error);
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
program.parse(process.argv);
|
|
300
|
+
const rootOptions = program.opts();
|
|
301
|
+
const hasSubCommand = program.args && program.args.length > 0;
|
|
302
|
+
if (rootOptions.init && !hasSubCommand) {
|
|
303
|
+
const result = ConfigInitializer_1.ConfigInitializer.init(process.cwd(), rootOptions.force === true);
|
|
304
|
+
if (result.recreated) {
|
|
305
|
+
console.log(messages.cli.initRecreated(result.path));
|
|
306
|
+
}
|
|
307
|
+
else if (result.created) {
|
|
308
|
+
console.log(messages.cli.initCreated(result.path));
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
console.log(messages.cli.initAlreadyExists(result.path));
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type AppLanguage = 'pt-BR' | 'en' | 'es';
|
|
2
|
+
export interface AppConfig {
|
|
3
|
+
language: AppLanguage;
|
|
4
|
+
introspection: {
|
|
5
|
+
outputDir: string;
|
|
6
|
+
};
|
|
7
|
+
migrations: {
|
|
8
|
+
outputDir: string;
|
|
9
|
+
fileNamePattern: 'timestamp-prefix' | 'prefix-timestamp';
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export declare class AppConfigLoader {
|
|
13
|
+
static load(configPath?: string): AppConfig;
|
|
14
|
+
private static loadFromFileRaw;
|
|
15
|
+
private static loadFromEnvRaw;
|
|
16
|
+
private static normalize;
|
|
17
|
+
private static normalizeLanguage;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AppConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppConfig.d.ts","sourceRoot":"","sources":["../../src/config/AppConfig.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE;QACb,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;KAC1D,CAAC;CACH;AAaD,qBAAa,eAAe;IAC1B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS;IA2D3C,OAAO,CAAC,MAAM,CAAC,eAAe;IAe9B,OAAO,CAAC,MAAM,CAAC,cAAc;IAiC7B,OAAO,CAAC,MAAM,CAAC,SAAS;IAiCxB,OAAO,CAAC,MAAM,CAAC,iBAAiB;CAiBjC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
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.AppConfigLoader = void 0;
|
|
7
|
+
const dotenv_1 = __importDefault(require("dotenv"));
|
|
8
|
+
const fs_1 = require("fs");
|
|
9
|
+
const path_1 = require("path");
|
|
10
|
+
const DbUtilityError_1 = require("../errors/DbUtilityError");
|
|
11
|
+
dotenv_1.default.config();
|
|
12
|
+
const defaultConfig = {
|
|
13
|
+
language: 'pt-BR',
|
|
14
|
+
introspection: {
|
|
15
|
+
outputDir: 'db-utility-introspect',
|
|
16
|
+
},
|
|
17
|
+
migrations: {
|
|
18
|
+
outputDir: 'db-utility-migrations',
|
|
19
|
+
fileNamePattern: 'timestamp-prefix',
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
class AppConfigLoader {
|
|
23
|
+
static load(configPath) {
|
|
24
|
+
const fromEnv = this.loadFromEnvRaw();
|
|
25
|
+
let fromFile = {};
|
|
26
|
+
if (configPath) {
|
|
27
|
+
fromFile = this.loadFromFileRaw(configPath);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const defaultFiles = [
|
|
31
|
+
'dbutility.config.json',
|
|
32
|
+
'db-utility.app.config.json',
|
|
33
|
+
'.db-utilityrc.app',
|
|
34
|
+
];
|
|
35
|
+
for (const file of defaultFiles) {
|
|
36
|
+
const path = (0, path_1.resolve)(process.cwd(), file);
|
|
37
|
+
if ((0, fs_1.existsSync)(path)) {
|
|
38
|
+
fromFile = this.loadFromFileRaw(path);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const merged = {
|
|
44
|
+
language: fromFile.language || fromEnv.language,
|
|
45
|
+
};
|
|
46
|
+
const envIntrospection = fromEnv.introspection;
|
|
47
|
+
const fileIntrospection = fromFile.introspection;
|
|
48
|
+
const introspectionOutputDir = fileIntrospection?.outputDir ?? envIntrospection?.outputDir;
|
|
49
|
+
if (introspectionOutputDir) {
|
|
50
|
+
merged.introspection = {
|
|
51
|
+
outputDir: introspectionOutputDir,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
const envMigrations = fromEnv.migrations;
|
|
55
|
+
const fileMigrations = fromFile.migrations;
|
|
56
|
+
const migrationsOutputDir = fileMigrations?.outputDir ?? envMigrations?.outputDir;
|
|
57
|
+
const migrationsFileNamePatternRaw = fileMigrations?.fileNamePattern ?? envMigrations?.fileNamePattern;
|
|
58
|
+
if (migrationsOutputDir || migrationsFileNamePatternRaw) {
|
|
59
|
+
const fileNamePattern = migrationsFileNamePatternRaw === 'prefix-timestamp'
|
|
60
|
+
? 'prefix-timestamp'
|
|
61
|
+
: 'timestamp-prefix';
|
|
62
|
+
merged.migrations = {
|
|
63
|
+
outputDir: migrationsOutputDir ?? defaultConfig.migrations.outputDir,
|
|
64
|
+
fileNamePattern,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return this.normalize(merged);
|
|
68
|
+
}
|
|
69
|
+
static loadFromFileRaw(pathStr) {
|
|
70
|
+
const absolutePath = (0, path_1.resolve)(process.cwd(), pathStr);
|
|
71
|
+
if (!(0, fs_1.existsSync)(absolutePath)) {
|
|
72
|
+
throw new DbUtilityError_1.DbUtilityError('APP_CONFIG_FILE_NOT_FOUND', absolutePath);
|
|
73
|
+
}
|
|
74
|
+
const ext = (0, path_1.extname)(absolutePath);
|
|
75
|
+
if (ext === '.json' || ext === '') {
|
|
76
|
+
const content = (0, fs_1.readFileSync)(absolutePath, 'utf-8');
|
|
77
|
+
return JSON.parse(content);
|
|
78
|
+
}
|
|
79
|
+
throw new DbUtilityError_1.DbUtilityError('APP_CONFIG_FILE_FORMAT_UNSUPPORTED', ext);
|
|
80
|
+
}
|
|
81
|
+
static loadFromEnvRaw() {
|
|
82
|
+
const rawLanguage = process.env.DB_UTILITY_LANG || process.env.DB_UTILITY_LANGUAGE || process.env.LANG;
|
|
83
|
+
const rawIntrospectionOutputDir = process.env.DB_UTILITY_INTROSPECTION_OUTPUT_DIR;
|
|
84
|
+
const rawMigrationsOutputDir = process.env.DB_UTILITY_MIGRATIONS_OUTPUT_DIR;
|
|
85
|
+
const rawMigrationsFileNamePattern = process.env.DB_UTILITY_MIGRATIONS_FILE_NAME_PATTERN;
|
|
86
|
+
const config = {};
|
|
87
|
+
if (rawLanguage) {
|
|
88
|
+
config.language = this.normalizeLanguage(rawLanguage);
|
|
89
|
+
}
|
|
90
|
+
if (rawIntrospectionOutputDir) {
|
|
91
|
+
config.introspection = { outputDir: rawIntrospectionOutputDir };
|
|
92
|
+
}
|
|
93
|
+
if (rawMigrationsOutputDir || rawMigrationsFileNamePattern) {
|
|
94
|
+
const fileNamePattern = rawMigrationsFileNamePattern === 'prefix-timestamp'
|
|
95
|
+
? 'prefix-timestamp'
|
|
96
|
+
: 'timestamp-prefix';
|
|
97
|
+
config.migrations = {
|
|
98
|
+
outputDir: rawMigrationsOutputDir ?? defaultConfig.migrations.outputDir,
|
|
99
|
+
fileNamePattern,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
return config;
|
|
103
|
+
}
|
|
104
|
+
static normalize(raw) {
|
|
105
|
+
const language = raw.language ? this.normalizeLanguage(raw.language) : defaultConfig.language;
|
|
106
|
+
const introspectionOutputDir = raw.introspection && raw.introspection.outputDir
|
|
107
|
+
? raw.introspection.outputDir
|
|
108
|
+
: defaultConfig.introspection.outputDir;
|
|
109
|
+
const migrationsOutputDir = raw.migrations && raw.migrations.outputDir
|
|
110
|
+
? raw.migrations.outputDir
|
|
111
|
+
: defaultConfig.migrations.outputDir;
|
|
112
|
+
const fileNamePatternRaw = raw.migrations && raw.migrations.fileNamePattern
|
|
113
|
+
? raw.migrations.fileNamePattern
|
|
114
|
+
: defaultConfig.migrations.fileNamePattern;
|
|
115
|
+
const fileNamePattern = fileNamePatternRaw === 'prefix-timestamp' ? 'prefix-timestamp' : 'timestamp-prefix';
|
|
116
|
+
return {
|
|
117
|
+
language,
|
|
118
|
+
introspection: {
|
|
119
|
+
outputDir: introspectionOutputDir,
|
|
120
|
+
},
|
|
121
|
+
migrations: {
|
|
122
|
+
outputDir: migrationsOutputDir,
|
|
123
|
+
fileNamePattern,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
static normalizeLanguage(value) {
|
|
128
|
+
const normalized = value.toLowerCase();
|
|
129
|
+
if (normalized === 'pt' || normalized === 'pt-br' || normalized === 'pt_br') {
|
|
130
|
+
return 'pt-BR';
|
|
131
|
+
}
|
|
132
|
+
if (normalized === 'en' || normalized === 'en-us' || normalized === 'en_gb') {
|
|
133
|
+
return 'en';
|
|
134
|
+
}
|
|
135
|
+
if (normalized === 'es' || normalized === 'es-es' || normalized === 'es_mx') {
|
|
136
|
+
return 'es';
|
|
137
|
+
}
|
|
138
|
+
return defaultConfig.language;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.AppConfigLoader = AppConfigLoader;
|
|
142
|
+
//# sourceMappingURL=AppConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppConfig.js","sourceRoot":"","sources":["../../src/config/AppConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigInitializer.d.ts","sourceRoot":"","sources":["../../src/config/ConfigInitializer.ts"],"names":[],"mappings":"AAIA,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB;AAwBD,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,UAAU;CAqBpD"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConfigInitializer = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const defaultConfig = {
|
|
7
|
+
language: 'pt-BR',
|
|
8
|
+
introspection: {
|
|
9
|
+
outputDir: 'db-utility-introspect',
|
|
10
|
+
},
|
|
11
|
+
migrations: {
|
|
12
|
+
outputDir: 'db-utility-migrations',
|
|
13
|
+
fileNamePattern: 'timestamp-prefix',
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
class ConfigInitializer {
|
|
17
|
+
static init(cwd, force = false) {
|
|
18
|
+
const filePath = (0, path_1.join)(cwd, 'dbutility.config.json');
|
|
19
|
+
const exists = (0, fs_1.existsSync)(filePath);
|
|
20
|
+
if (exists && !force) {
|
|
21
|
+
return {
|
|
22
|
+
created: false,
|
|
23
|
+
path: filePath,
|
|
24
|
+
recreated: false,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
const content = JSON.stringify(defaultConfig, null, 2);
|
|
28
|
+
(0, fs_1.writeFileSync)(filePath, `${content}\n`, 'utf-8');
|
|
29
|
+
return {
|
|
30
|
+
created: true,
|
|
31
|
+
path: filePath,
|
|
32
|
+
recreated: exists,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.ConfigInitializer = ConfigInitializer;
|
|
37
|
+
//# sourceMappingURL=ConfigInitializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigInitializer.js","sourceRoot":"","sources":["../../src/config/ConfigInitializer.ts"],"names":[],"mappings":";;;AAAA,2BAA+C;AAC/C,+BAA4B;AAoB5B,MAAM,aAAa,GAAsB;IACvC,QAAQ,EAAE,OAAO;IACjB,aAAa,EAAE;QACb,SAAS,EAAE,uBAAuB;KACnC;IACD,UAAU,EAAE;QACV,SAAS,EAAE,uBAAuB;QAClC,eAAe,EAAE,kBAAkB;KACpC;CACF,CAAC;AAEF,MAAa,iBAAiB;IAC5B,MAAM,CAAC,IAAI,CAAC,GAAW,EAAE,KAAK,GAAG,KAAK;QACpC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,GAAG,EAAE,uBAAuB,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAA,eAAU,EAAC,QAAQ,CAAC,CAAC;QAEpC,IAAI,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,IAAI,EAAE,QAAQ;gBACd,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACvD,IAAA,kBAAa,EAAC,QAAQ,EAAE,GAAG,OAAO,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjD,OAAO;YACL,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,QAAQ;YACd,SAAS,EAAE,MAAM;SAClB,CAAC;IACJ,CAAC;CACF;AAtBD,8CAsBC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DatabaseConfig } from '../types/database';
|
|
2
|
+
export declare class ConfigLoader {
|
|
3
|
+
static load(configPath?: string, overrides?: Partial<DatabaseConfig>): Promise<DatabaseConfig>;
|
|
4
|
+
private static loadFromFile;
|
|
5
|
+
private static loadFromEnv;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=ConfigLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAgB,MAAM,mBAAmB,CAAC;AAKjE,qBAAa,YAAY;WACV,IAAI,CACf,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAClC,OAAO,CAAC,cAAc,CAAC;mBAoDL,YAAY;IAmBjC,OAAO,CAAC,MAAM,CAAC,WAAW;CAiC3B"}
|