@uql/core 3.7.13 → 3.8.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/CHANGELOG.md +11 -2
- package/README.md +16 -8
- package/dist/browser/uql-browser.min.js +16 -15
- package/dist/browser/uql-browser.min.js.map +1 -1
- package/dist/dialect/abstractDialect.d.ts +7 -2
- package/dist/dialect/abstractDialect.d.ts.map +1 -1
- package/dist/dialect/abstractDialect.js +9 -1
- package/dist/dialect/abstractDialect.js.map +1 -1
- package/dist/dialect/abstractSqlDialect.d.ts +5 -6
- package/dist/dialect/abstractSqlDialect.d.ts.map +1 -1
- package/dist/dialect/abstractSqlDialect.js +14 -13
- package/dist/dialect/abstractSqlDialect.js.map +1 -1
- package/dist/dialect/dialectConfig.d.ts +17 -0
- package/dist/dialect/dialectConfig.d.ts.map +1 -0
- package/dist/dialect/dialectConfig.js +71 -0
- package/dist/dialect/dialectConfig.js.map +1 -0
- package/dist/dialect/index.d.ts +1 -0
- package/dist/dialect/index.d.ts.map +1 -1
- package/dist/dialect/index.js +1 -0
- package/dist/dialect/index.js.map +1 -1
- package/dist/entity/decorator/definition.d.ts.map +1 -1
- package/dist/entity/decorator/definition.js +2 -1
- package/dist/entity/decorator/definition.js.map +1 -1
- package/dist/entity/decorator/index-decorator.d.ts +36 -0
- package/dist/entity/decorator/index-decorator.d.ts.map +1 -0
- package/dist/entity/decorator/index-decorator.js +51 -0
- package/dist/entity/decorator/index-decorator.js.map +1 -0
- package/dist/entity/decorator/index.d.ts +1 -0
- package/dist/entity/decorator/index.d.ts.map +1 -1
- package/dist/entity/decorator/index.js +1 -0
- package/dist/entity/decorator/index.js.map +1 -1
- package/dist/maria/mariaDialect.d.ts +2 -1
- package/dist/maria/mariaDialect.d.ts.map +1 -1
- package/dist/maria/mariaDialect.js +3 -0
- package/dist/maria/mariaDialect.js.map +1 -1
- package/dist/migrate/builder/columnBuilder.d.ts +75 -0
- package/dist/migrate/builder/columnBuilder.d.ts.map +1 -0
- package/dist/migrate/builder/columnBuilder.js +149 -0
- package/dist/migrate/builder/columnBuilder.js.map +1 -0
- package/dist/migrate/builder/expressions.d.ts +87 -0
- package/dist/migrate/builder/expressions.d.ts.map +1 -0
- package/dist/migrate/builder/expressions.js +150 -0
- package/dist/migrate/builder/expressions.js.map +1 -0
- package/dist/migrate/builder/index.d.ts +6 -0
- package/dist/migrate/builder/index.d.ts.map +1 -0
- package/dist/migrate/builder/index.js +6 -0
- package/dist/migrate/builder/index.js.map +1 -0
- package/dist/migrate/builder/migrationBuilder.d.ts +73 -0
- package/dist/migrate/builder/migrationBuilder.d.ts.map +1 -0
- package/dist/migrate/builder/migrationBuilder.js +326 -0
- package/dist/migrate/builder/migrationBuilder.js.map +1 -0
- package/dist/migrate/builder/tableBuilder.d.ts +51 -0
- package/dist/migrate/builder/tableBuilder.d.ts.map +1 -0
- package/dist/migrate/builder/tableBuilder.js +278 -0
- package/dist/migrate/builder/tableBuilder.js.map +1 -0
- package/dist/migrate/builder/types.d.ts +462 -0
- package/dist/migrate/builder/types.d.ts.map +1 -0
- package/dist/migrate/builder/types.js +8 -0
- package/dist/migrate/builder/types.js.map +1 -0
- package/dist/migrate/cli.d.ts +4 -6
- package/dist/migrate/cli.d.ts.map +1 -1
- package/dist/migrate/cli.js +166 -23
- package/dist/migrate/cli.js.map +1 -1
- package/dist/migrate/codegen/entityCodeGenerator.d.ts +137 -0
- package/dist/migrate/codegen/entityCodeGenerator.d.ts.map +1 -0
- package/dist/migrate/codegen/entityCodeGenerator.js +401 -0
- package/dist/migrate/codegen/entityCodeGenerator.js.map +1 -0
- package/dist/migrate/codegen/entityMerger.d.ts +111 -0
- package/dist/migrate/codegen/entityMerger.d.ts.map +1 -0
- package/dist/migrate/codegen/entityMerger.js +291 -0
- package/dist/migrate/codegen/entityMerger.js.map +1 -0
- package/dist/migrate/codegen/index.d.ts +10 -0
- package/dist/migrate/codegen/index.d.ts.map +1 -0
- package/dist/migrate/codegen/index.js +14 -0
- package/dist/migrate/codegen/index.js.map +1 -0
- package/dist/migrate/codegen/migrationCodeGenerator.d.ts +62 -0
- package/dist/migrate/codegen/migrationCodeGenerator.d.ts.map +1 -0
- package/dist/migrate/codegen/migrationCodeGenerator.js +356 -0
- package/dist/migrate/codegen/migrationCodeGenerator.js.map +1 -0
- package/dist/migrate/codegen/smartRelationDetector.d.ts +48 -0
- package/dist/migrate/codegen/smartRelationDetector.d.ts.map +1 -0
- package/dist/migrate/codegen/smartRelationDetector.js +135 -0
- package/dist/migrate/codegen/smartRelationDetector.js.map +1 -0
- package/dist/migrate/drift/driftDetector.d.ts +81 -0
- package/dist/migrate/drift/driftDetector.d.ts.map +1 -0
- package/dist/migrate/drift/driftDetector.js +248 -0
- package/dist/migrate/drift/driftDetector.js.map +1 -0
- package/dist/migrate/drift/index.d.ts +7 -0
- package/dist/migrate/drift/index.d.ts.map +1 -0
- package/dist/migrate/drift/index.js +7 -0
- package/dist/migrate/drift/index.js.map +1 -0
- package/dist/migrate/generator/index.d.ts +1 -3
- package/dist/migrate/generator/index.d.ts.map +1 -1
- package/dist/migrate/generator/index.js +1 -3
- package/dist/migrate/generator/index.js.map +1 -1
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts +29 -3
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts.map +1 -1
- package/dist/migrate/generator/mongoSchemaGenerator.js +86 -4
- package/dist/migrate/generator/mongoSchemaGenerator.js.map +1 -1
- package/dist/migrate/index.d.ts +7 -8
- package/dist/migrate/index.d.ts.map +1 -1
- package/dist/migrate/index.js +11 -9
- package/dist/migrate/index.js.map +1 -1
- package/dist/migrate/introspection/baseSqlIntrospector.d.ts +28 -0
- package/dist/migrate/introspection/baseSqlIntrospector.d.ts.map +1 -0
- package/dist/migrate/introspection/baseSqlIntrospector.js +135 -0
- package/dist/migrate/introspection/baseSqlIntrospector.js.map +1 -0
- package/dist/migrate/introspection/mongoIntrospector.d.ts +6 -0
- package/dist/migrate/introspection/mongoIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/mongoIntrospector.js +54 -0
- package/dist/migrate/introspection/mongoIntrospector.js.map +1 -1
- package/dist/migrate/introspection/mysqlIntrospector.d.ts +2 -1
- package/dist/migrate/introspection/mysqlIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/mysqlIntrospector.js +8 -6
- package/dist/migrate/introspection/mysqlIntrospector.js.map +1 -1
- package/dist/migrate/introspection/postgresIntrospector.d.ts +2 -1
- package/dist/migrate/introspection/postgresIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/postgresIntrospector.js +3 -1
- package/dist/migrate/introspection/postgresIntrospector.js.map +1 -1
- package/dist/migrate/introspection/sqliteIntrospector.d.ts +2 -2
- package/dist/migrate/introspection/sqliteIntrospector.d.ts.map +1 -1
- package/dist/migrate/introspection/sqliteIntrospector.js +3 -4
- package/dist/migrate/introspection/sqliteIntrospector.js.map +1 -1
- package/dist/migrate/migrator.d.ts +29 -0
- package/dist/migrate/migrator.d.ts.map +1 -1
- package/dist/migrate/migrator.js +31 -23
- package/dist/migrate/migrator.js.map +1 -1
- package/dist/migrate/schemaGenerator.d.ts +72 -22
- package/dist/migrate/schemaGenerator.d.ts.map +1 -1
- package/dist/migrate/schemaGenerator.js +385 -153
- package/dist/migrate/schemaGenerator.js.map +1 -1
- package/dist/migrate/sync/index.d.ts +7 -0
- package/dist/migrate/sync/index.d.ts.map +1 -0
- package/dist/migrate/sync/index.js +7 -0
- package/dist/migrate/sync/index.js.map +1 -0
- package/dist/migrate/sync/schemaSync.d.ts +132 -0
- package/dist/migrate/sync/schemaSync.d.ts.map +1 -0
- package/dist/migrate/sync/schemaSync.js +260 -0
- package/dist/migrate/sync/schemaSync.js.map +1 -0
- package/dist/mongo/mongoDialect.d.ts +2 -1
- package/dist/mongo/mongoDialect.d.ts.map +1 -1
- package/dist/mongo/mongoDialect.js +3 -0
- package/dist/mongo/mongoDialect.js.map +1 -1
- package/dist/mysql/mysqlDialect.d.ts +2 -0
- package/dist/mysql/mysqlDialect.d.ts.map +1 -1
- package/dist/mysql/mysqlDialect.js +3 -0
- package/dist/mysql/mysqlDialect.js.map +1 -1
- package/dist/postgres/postgresDialect.js +1 -1
- package/dist/postgres/postgresDialect.js.map +1 -1
- package/dist/schema/canonicalType.d.ts +42 -0
- package/dist/schema/canonicalType.d.ts.map +1 -0
- package/dist/schema/canonicalType.js +524 -0
- package/dist/schema/canonicalType.js.map +1 -0
- package/dist/schema/index.d.ts +28 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +29 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/schemaAST.d.ts +155 -0
- package/dist/schema/schemaAST.d.ts.map +1 -0
- package/dist/schema/schemaAST.js +496 -0
- package/dist/schema/schemaAST.js.map +1 -0
- package/dist/schema/schemaASTBuilder.d.ts +58 -0
- package/dist/schema/schemaASTBuilder.d.ts.map +1 -0
- package/dist/schema/schemaASTBuilder.js +193 -0
- package/dist/schema/schemaASTBuilder.js.map +1 -0
- package/dist/schema/schemaASTDiffer.d.ts +84 -0
- package/dist/schema/schemaASTDiffer.d.ts.map +1 -0
- package/dist/schema/schemaASTDiffer.js +431 -0
- package/dist/schema/schemaASTDiffer.js.map +1 -0
- package/dist/schema/types.d.ts +347 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +11 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/sqlite/sqliteDialect.js +1 -1
- package/dist/sqlite/sqliteDialect.js.map +1 -1
- package/dist/sqlite/sqliteQuerierPool.js.map +1 -1
- package/dist/type/config.d.ts +6 -0
- package/dist/type/config.d.ts.map +1 -1
- package/dist/type/entity.d.ts +24 -0
- package/dist/type/entity.d.ts.map +1 -1
- package/dist/type/migration.d.ts +50 -4
- package/dist/type/migration.d.ts.map +1 -1
- package/dist/util/field.util.d.ts +0 -1
- package/dist/util/field.util.d.ts.map +1 -1
- package/dist/util/field.util.js +8 -2
- package/dist/util/field.util.js.map +1 -1
- package/dist/util/logger.d.ts.map +1 -1
- package/dist/util/logger.js +2 -1
- package/dist/util/logger.js.map +1 -1
- package/dist/util/string.util.d.ts +24 -0
- package/dist/util/string.util.d.ts.map +1 -1
- package/dist/util/string.util.js +57 -0
- package/dist/util/string.util.js.map +1 -1
- package/package.json +2 -2
- package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +0 -15
- package/dist/migrate/generator/mysqlSchemaGenerator.d.ts.map +0 -1
- package/dist/migrate/generator/mysqlSchemaGenerator.js +0 -88
- package/dist/migrate/generator/mysqlSchemaGenerator.js.map +0 -1
- package/dist/migrate/generator/postgresSchemaGenerator.d.ts +0 -19
- package/dist/migrate/generator/postgresSchemaGenerator.d.ts.map +0 -1
- package/dist/migrate/generator/postgresSchemaGenerator.js +0 -115
- package/dist/migrate/generator/postgresSchemaGenerator.js.map +0 -1
- package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +0 -16
- package/dist/migrate/generator/sqliteSchemaGenerator.d.ts.map +0 -1
- package/dist/migrate/generator/sqliteSchemaGenerator.js +0 -74
- package/dist/migrate/generator/sqliteSchemaGenerator.js.map +0 -1
- package/dist/migrate/type.d.ts +0 -2
- package/dist/migrate/type.d.ts.map +0 -1
- package/dist/migrate/type.js +0 -2
- package/dist/migrate/type.js.map +0 -1
package/dist/migrate/cli.js
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import { SchemaASTBuilder } from '../schema/index.js';
|
|
2
5
|
import { loadConfig } from './cli-config.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { PostgresSchemaGenerator } from './generator/postgresSchemaGenerator.js';
|
|
6
|
-
import { SqliteSchemaGenerator } from './generator/sqliteSchemaGenerator.js';
|
|
6
|
+
import { createEntityCodeGenerator } from './codegen/entityCodeGenerator.js';
|
|
7
|
+
import { detectDrift } from './drift/driftDetector.js';
|
|
7
8
|
import { Migrator } from './migrator.js';
|
|
9
|
+
import { createSchemaGenerator } from './schemaGenerator.js';
|
|
10
|
+
import { createSchemaSync } from './sync/schemaSync.js';
|
|
8
11
|
export function getSchemaGenerator(dialect, namingStrategy) {
|
|
9
|
-
|
|
10
|
-
case 'postgres':
|
|
11
|
-
return new PostgresSchemaGenerator(namingStrategy);
|
|
12
|
-
case 'mysql':
|
|
13
|
-
case 'mariadb':
|
|
14
|
-
return new MysqlSchemaGenerator(namingStrategy);
|
|
15
|
-
case 'sqlite':
|
|
16
|
-
return new SqliteSchemaGenerator(namingStrategy);
|
|
17
|
-
case 'mongodb':
|
|
18
|
-
return new MongoSchemaGenerator(namingStrategy);
|
|
19
|
-
default:
|
|
20
|
-
throw new TypeError(`Unknown dialect: ${dialect}`);
|
|
21
|
-
}
|
|
12
|
+
return createSchemaGenerator(dialect, namingStrategy);
|
|
22
13
|
}
|
|
23
14
|
export async function main(args = process.argv.slice(2)) {
|
|
24
15
|
let customPath;
|
|
@@ -70,12 +61,20 @@ export async function main(args = process.argv.slice(2)) {
|
|
|
70
61
|
case 'generate-entities':
|
|
71
62
|
await runGenerateFromEntities(migrator, filteredArgs.slice(1));
|
|
72
63
|
break;
|
|
64
|
+
case 'generate:from-db':
|
|
65
|
+
case 'generate-from-db':
|
|
66
|
+
await runGenerateFromDb(migrator, filteredArgs.slice(1), config);
|
|
67
|
+
break;
|
|
73
68
|
case 'sync':
|
|
74
|
-
await runSync(migrator, filteredArgs.slice(1));
|
|
69
|
+
await runSync(migrator, filteredArgs.slice(1), config);
|
|
75
70
|
break;
|
|
76
71
|
case 'pending':
|
|
77
72
|
await runPending(migrator);
|
|
78
73
|
break;
|
|
74
|
+
case 'drift:check':
|
|
75
|
+
case 'drift-check':
|
|
76
|
+
await runDriftCheck(migrator, config);
|
|
77
|
+
break;
|
|
79
78
|
default:
|
|
80
79
|
console.error(`Unknown command: ${command}`);
|
|
81
80
|
printHelp();
|
|
@@ -184,14 +183,144 @@ export async function runGenerateFromEntities(migrator, args) {
|
|
|
184
183
|
const filePath = await migrator.generateFromEntities(name);
|
|
185
184
|
console.log(`\nCreated migration from entities: ${filePath}`);
|
|
186
185
|
}
|
|
187
|
-
export async function runSync(migrator, args) {
|
|
186
|
+
export async function runSync(migrator, args, config) {
|
|
188
187
|
const force = args.includes('--force');
|
|
188
|
+
const push = args.includes('--push');
|
|
189
|
+
const pull = args.includes('--pull');
|
|
190
|
+
const dryRun = args.includes('--dry-run');
|
|
191
|
+
// Parse direction
|
|
192
|
+
let direction = 'bidirectional';
|
|
193
|
+
for (let i = 0; i < args.length; i++) {
|
|
194
|
+
if (args[i] === '--direction' && args[i + 1]) {
|
|
195
|
+
direction = args[++i];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Shorthand flags
|
|
199
|
+
if (push)
|
|
200
|
+
direction = 'entity-to-db';
|
|
201
|
+
if (pull)
|
|
202
|
+
direction = 'db-to-entity';
|
|
189
203
|
if (force) {
|
|
190
204
|
console.log('\n⚠️ WARNING: This will drop and recreate all tables!');
|
|
191
205
|
console.log(' All data will be lost. This should only be used in development.\n');
|
|
206
|
+
await migrator.sync({ force });
|
|
207
|
+
console.log('\nSchema sync completed.');
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
// Use SchemaSync for direction-aware sync
|
|
211
|
+
if (config.entities && migrator.schemaIntrospector) {
|
|
212
|
+
const schemaSync = createSchemaSync({
|
|
213
|
+
entities: config.entities,
|
|
214
|
+
introspector: migrator.schemaIntrospector,
|
|
215
|
+
direction,
|
|
216
|
+
safe: !args.includes('--unsafe'),
|
|
217
|
+
dryRun,
|
|
218
|
+
});
|
|
219
|
+
const result = await schemaSync.sync();
|
|
220
|
+
console.log('\n' + result.summary);
|
|
221
|
+
if (result.conflicts.length > 0) {
|
|
222
|
+
console.log('\n⚠️ Conflicts require manual resolution.');
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
else {
|
|
227
|
+
await migrator.sync({ force: false });
|
|
228
|
+
console.log('\nSchema sync completed.');
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
export async function runGenerateFromDb(migrator, args, config) {
|
|
232
|
+
// Parse output directory
|
|
233
|
+
let outputDir = './src/entities';
|
|
234
|
+
for (let i = 0; i < args.length; i++) {
|
|
235
|
+
if ((args[i] === '--output' || args[i] === '-o') && args[i + 1]) {
|
|
236
|
+
outputDir = args[++i];
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (!migrator.schemaIntrospector) {
|
|
240
|
+
console.error('No introspector available. Check your pool configuration.');
|
|
241
|
+
process.exit(1);
|
|
242
|
+
}
|
|
243
|
+
else {
|
|
244
|
+
console.log('\nAnalyzing database schema...');
|
|
245
|
+
const ast = await migrator.schemaIntrospector.introspect();
|
|
246
|
+
const tableCount = ast.tables.size;
|
|
247
|
+
console.log(`Found ${tableCount} table(s): ${Array.from(ast.tables.keys()).join(', ')}`);
|
|
248
|
+
console.log('\nGenerating entities...');
|
|
249
|
+
const generator = createEntityCodeGenerator(ast, {
|
|
250
|
+
addSyncComments: true,
|
|
251
|
+
includeRelations: true,
|
|
252
|
+
includeIndexes: true,
|
|
253
|
+
});
|
|
254
|
+
const entities = generator.generateAll();
|
|
255
|
+
// Ensure output directory exists
|
|
256
|
+
if (!fs.existsSync(outputDir)) {
|
|
257
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
258
|
+
}
|
|
259
|
+
// Write entity files
|
|
260
|
+
for (const entity of entities) {
|
|
261
|
+
const filePath = path.join(outputDir, entity.fileName);
|
|
262
|
+
fs.writeFileSync(filePath, entity.code, 'utf-8');
|
|
263
|
+
console.log(` ✓ ${entity.className} -> ${filePath}`);
|
|
264
|
+
}
|
|
265
|
+
console.log(`\nGenerated ${entities.length} entities to ${outputDir}`);
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
export async function runDriftCheck(migrator, config) {
|
|
269
|
+
if (!config.entities || config.entities.length === 0) {
|
|
270
|
+
console.error('No entities configured. Add entities to your uql config.');
|
|
271
|
+
process.exit(1);
|
|
272
|
+
}
|
|
273
|
+
else if (!migrator.schemaIntrospector) {
|
|
274
|
+
console.error('No introspector available. Check your pool configuration.');
|
|
275
|
+
process.exit(1);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
console.log('\nChecking for schema drift...');
|
|
279
|
+
// Build expected schema from entities
|
|
280
|
+
const builder = new SchemaASTBuilder();
|
|
281
|
+
const expectedAST = builder.fromEntities(config.entities);
|
|
282
|
+
// Build actual schema from database
|
|
283
|
+
const actualAST = await migrator.schemaIntrospector.introspect();
|
|
284
|
+
// Detect drift
|
|
285
|
+
const report = detectDrift(expectedAST, actualAST);
|
|
286
|
+
printDriftReport(report);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
function printDriftReport(report) {
|
|
290
|
+
console.log('\n=== Schema Drift Report ===\n');
|
|
291
|
+
if (report.status === 'in_sync') {
|
|
292
|
+
console.log('✓ Schema is in sync.');
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
295
|
+
const statusIcon = report.status === 'critical' ? '✗' : '⚠️';
|
|
296
|
+
console.log(`${statusIcon} Status: ${report.status.toUpperCase()} (${report.summary.critical} critical, ${report.summary.warning} warning, ${report.summary.info} info)\n`);
|
|
297
|
+
// Group by severity
|
|
298
|
+
const critical = report.drifts.filter((d) => d.severity === 'critical');
|
|
299
|
+
const warning = report.drifts.filter((d) => d.severity === 'warning');
|
|
300
|
+
const info = report.drifts.filter((d) => d.severity === 'info');
|
|
301
|
+
printDriftGroup('CRITICAL:', critical, '✗', true);
|
|
302
|
+
printDriftGroup('WARNINGS:', warning, '⚠', true);
|
|
303
|
+
printDriftGroup('INFO:', info, 'ℹ', false);
|
|
304
|
+
if (report.status === 'critical') {
|
|
305
|
+
process.exit(1);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
function printDriftGroup(title, drifts, icon, showSuggestion) {
|
|
310
|
+
if (drifts.length > 0) {
|
|
311
|
+
console.log(title);
|
|
312
|
+
for (const drift of drifts) {
|
|
313
|
+
console.log(` ${icon} ${drift.table}${drift.column ? '.' + drift.column : ''} - ${drift.type}`);
|
|
314
|
+
console.log(` ${drift.details}`);
|
|
315
|
+
if (drift.expected && drift.actual) {
|
|
316
|
+
console.log(` Expected: ${drift.expected}, Actual: ${drift.actual}`);
|
|
317
|
+
}
|
|
318
|
+
if (showSuggestion && drift.suggestion) {
|
|
319
|
+
console.log(` → ${drift.suggestion}`);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
console.log('');
|
|
192
323
|
}
|
|
193
|
-
await migrator.sync({ force });
|
|
194
|
-
console.log('\nSchema sync completed.');
|
|
195
324
|
}
|
|
196
325
|
export function printHelp() {
|
|
197
326
|
console.log(`
|
|
@@ -219,8 +348,18 @@ Commands:
|
|
|
219
348
|
generate:entities Generate migration from entity definitions
|
|
220
349
|
<name> Optional name for the migration
|
|
221
350
|
|
|
222
|
-
|
|
223
|
-
--
|
|
351
|
+
generate:from-db Generate TypeScript entities from database
|
|
352
|
+
--output, -o <dir> Output directory (default: ./src/entities)
|
|
353
|
+
|
|
354
|
+
sync Sync schema with direction support
|
|
355
|
+
--force Drop and recreate all tables (dangerous!)
|
|
356
|
+
--direction <mode> Sync direction: bidirectional, entity-to-db, db-to-entity
|
|
357
|
+
--push Shorthand for --direction entity-to-db
|
|
358
|
+
--pull Shorthand for --direction db-to-entity
|
|
359
|
+
--dry-run Preview changes without applying
|
|
360
|
+
--unsafe Allow destructive changes
|
|
361
|
+
|
|
362
|
+
drift:check Check for schema drift between entities and database
|
|
224
363
|
|
|
225
364
|
Configuration:
|
|
226
365
|
Create a uql.config.ts or uql.config.js file in your project root.
|
|
@@ -242,6 +381,10 @@ Examples:
|
|
|
242
381
|
@uql/core/migrate status
|
|
243
382
|
@uql/core/migrate generate add_users_table
|
|
244
383
|
@uql/core/migrate generate:entities initial_schema
|
|
384
|
+
@uql/core/migrate generate:from-db --output ./src/entities
|
|
385
|
+
@uql/core/migrate sync --push
|
|
386
|
+
@uql/core/migrate sync --pull
|
|
387
|
+
@uql/core/migrate drift:check
|
|
245
388
|
`);
|
|
246
389
|
}
|
|
247
390
|
//# sourceMappingURL=cli.js.map
|
package/dist/migrate/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/migrate/cli.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/migrate/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entity Code Generator
|
|
3
|
+
*
|
|
4
|
+
* Generates TypeScript entity files from SchemaAST.
|
|
5
|
+
* Supports:
|
|
6
|
+
* - ES Module syntax
|
|
7
|
+
* - TypeScript types
|
|
8
|
+
* - Relations with proper decorators
|
|
9
|
+
* - Indexes
|
|
10
|
+
* - JSDoc comments for sync-added fields
|
|
11
|
+
*/
|
|
12
|
+
import type { SchemaAST } from '../../schema/schemaAST.js';
|
|
13
|
+
/**
|
|
14
|
+
* Options for entity code generation.
|
|
15
|
+
*/
|
|
16
|
+
export interface EntityCodeGeneratorOptions {
|
|
17
|
+
/** Base import path for @uql/core (default: '@uql/core') */
|
|
18
|
+
uqlImportPath?: string;
|
|
19
|
+
/** Whether to add JSDoc with @sync-added for generated fields */
|
|
20
|
+
addSyncComments?: boolean;
|
|
21
|
+
/** Custom class name transformer (default: PascalCase singularized) */
|
|
22
|
+
classNameTransformer?: (tableName: string) => string;
|
|
23
|
+
/** Custom property name transformer (default: camelCase) */
|
|
24
|
+
propertyNameTransformer?: (columnName: string) => string;
|
|
25
|
+
/** Whether to generate relation properties (default: true) */
|
|
26
|
+
includeRelations?: boolean;
|
|
27
|
+
/** Whether to include index decorators (default: true) */
|
|
28
|
+
includeIndexes?: boolean;
|
|
29
|
+
/** Custom singularize function */
|
|
30
|
+
singularize?: (name: string) => string;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Generated entity result.
|
|
34
|
+
*/
|
|
35
|
+
export interface GeneratedEntity {
|
|
36
|
+
/** The entity class name */
|
|
37
|
+
className: string;
|
|
38
|
+
/** The table name */
|
|
39
|
+
tableName: string;
|
|
40
|
+
/** The generated TypeScript code */
|
|
41
|
+
code: string;
|
|
42
|
+
/** The suggested file name */
|
|
43
|
+
fileName: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Generates TypeScript entity code from SchemaAST.
|
|
47
|
+
*/
|
|
48
|
+
export declare class EntityCodeGenerator {
|
|
49
|
+
private readonly ast;
|
|
50
|
+
private readonly options;
|
|
51
|
+
constructor(ast: SchemaAST, options?: EntityCodeGeneratorOptions);
|
|
52
|
+
/**
|
|
53
|
+
* Generate entities for all tables in the AST.
|
|
54
|
+
*/
|
|
55
|
+
generateAll(): GeneratedEntity[];
|
|
56
|
+
/**
|
|
57
|
+
* Generate entity for a specific table.
|
|
58
|
+
*/
|
|
59
|
+
generateForTable(tableName: string): GeneratedEntity | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Generate entity code for a table.
|
|
62
|
+
*/
|
|
63
|
+
private generateEntity;
|
|
64
|
+
/**
|
|
65
|
+
* Build import statements.
|
|
66
|
+
*/
|
|
67
|
+
private buildImports;
|
|
68
|
+
/**
|
|
69
|
+
* Build entity decorators.
|
|
70
|
+
*/
|
|
71
|
+
private buildEntityDecorators;
|
|
72
|
+
/**
|
|
73
|
+
* Build field definitions.
|
|
74
|
+
*/
|
|
75
|
+
private buildFields;
|
|
76
|
+
/**
|
|
77
|
+
* Build a single field definition.
|
|
78
|
+
*/
|
|
79
|
+
private buildField;
|
|
80
|
+
/**
|
|
81
|
+
* Build Id decorator options.
|
|
82
|
+
*/
|
|
83
|
+
private buildIdOptions;
|
|
84
|
+
/**
|
|
85
|
+
* Build Field decorator options.
|
|
86
|
+
*/
|
|
87
|
+
private buildFieldOptions;
|
|
88
|
+
/**
|
|
89
|
+
* Build relation definitions.
|
|
90
|
+
*/
|
|
91
|
+
private buildRelations;
|
|
92
|
+
/**
|
|
93
|
+
* Build outgoing relation (ManyToOne or OneToOne where this table has FK).
|
|
94
|
+
*/
|
|
95
|
+
private buildOutgoingRelation;
|
|
96
|
+
/**
|
|
97
|
+
* Build incoming relation (OneToMany where other tables have FK to this).
|
|
98
|
+
*/
|
|
99
|
+
private buildIncomingRelation;
|
|
100
|
+
/**
|
|
101
|
+
* Get decorator name for relation type.
|
|
102
|
+
*/
|
|
103
|
+
private getRelationDecoratorName;
|
|
104
|
+
/**
|
|
105
|
+
* Format type for description.
|
|
106
|
+
*/
|
|
107
|
+
private formatTypeDescription;
|
|
108
|
+
/**
|
|
109
|
+
* Format default value for code.
|
|
110
|
+
*/
|
|
111
|
+
private formatDefaultValue;
|
|
112
|
+
/**
|
|
113
|
+
* Default class name transformer: table_name -> TableName (PascalCase, singular).
|
|
114
|
+
*/
|
|
115
|
+
private defaultClassNameTransformer;
|
|
116
|
+
/**
|
|
117
|
+
* Default property name transformer: column_name -> columnName (camelCase).
|
|
118
|
+
*/
|
|
119
|
+
private defaultPropertyNameTransformer;
|
|
120
|
+
/**
|
|
121
|
+
* Convert to PascalCase (delegates to shared utility).
|
|
122
|
+
*/
|
|
123
|
+
private toPascalCase;
|
|
124
|
+
/**
|
|
125
|
+
* Convert to camelCase (delegates to shared utility).
|
|
126
|
+
*/
|
|
127
|
+
private toCamelCase;
|
|
128
|
+
/**
|
|
129
|
+
* Default singularize function (delegates to shared utility).
|
|
130
|
+
*/
|
|
131
|
+
private defaultSingularize;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Create an EntityCodeGenerator from SchemaAST.
|
|
135
|
+
*/
|
|
136
|
+
export declare function createEntityCodeGenerator(ast: SchemaAST, options?: EntityCodeGeneratorOptions): EntityCodeGenerator;
|
|
137
|
+
//# sourceMappingURL=entityCodeGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entityCodeGenerator.d.ts","sourceRoot":"","sources":["../../../src/migrate/codegen/entityCodeGenerator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAI3D;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,4DAA4D;IAC5D,uBAAuB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAC;IACzD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0DAA0D;IAC1D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kCAAkC;IAClC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;CACxC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAI5B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHtB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;gBAG5C,GAAG,EAAE,SAAS,EAC/B,OAAO,GAAE,0BAA+B;IAa1C;;OAEG;IACH,WAAW,IAAI,eAAe,EAAE;IAUhC;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAMhE;;OAEG;IACH,OAAO,CAAC,cAAc;IAmBtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuCpB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwB7B;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAgClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoC7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAahC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAa7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAKnC;;OAEG;IACH,OAAO,CAAC,8BAA8B;IAItC;;OAEG;IACH,OAAO,CAAC,YAAY;IAIpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAG3B;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,0BAA0B,GAAG,mBAAmB,CAEnH"}
|