@deepbrainspace/nx-surrealdb
Version:
NX plugin for SurrealDB migrations with modular architecture
105 lines ⢠5.21 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = runExecutor;
const devkit_1 = require("@nx/devkit");
const migration_service_1 = require("../../lib/domain/migration-service");
const debug_1 = require("../../lib/infrastructure/debug");
async function runExecutor(options, context) {
const engine = new migration_service_1.MigrationService(context);
const debug = debug_1.Debug.scope('migrate-executor');
// Enable debug mode if requested
debug_1.Debug.setEnabled(!!options.debug);
try {
// Initialize migration engine
await engine.initialize({
url: options.url || '',
user: options.user || '',
pass: options.pass || '',
namespace: options.namespace,
database: options.database,
envFile: options.envFile,
useTransactions: options.useTransactions,
initPath: options.initPath || 'database',
schemaPath: options.schemaPath,
force: options.force || false,
configPath: options.configPath,
debug: options.debug,
dryRun: options.dryRun || false,
});
// Determine target modules and filenames
const targetModules = options.module !== undefined && options.module !== ''
? String(options.module)
.split(',')
.map(m => m.trim())
.filter(m => m.length > 0)
: undefined;
const targetFilenames = options.filename !== undefined && options.filename !== ''
? String(options.filename)
.split(',')
.map(f => f.trim())
.filter(f => f.length > 0)
: undefined;
debug.log(`Target modules: ${targetModules ? targetModules.join(', ') : 'all'}`);
debug.log(`Target filenames: ${targetFilenames ? targetFilenames.join(', ') : 'all'}`);
// Execute migrations
if (options.dryRun) {
devkit_1.logger.info('Dry run mode - showing pending migrations without applying them');
}
else if (options.debug) {
devkit_1.logger.info('š Starting migration execution...');
}
const result = await engine.executeMigrations(targetModules, 'migrate', targetFilenames);
if (result.success) {
if (result.filesProcessed === 0 && result.results.length === 0) {
devkit_1.logger.info(`ā
All migrations are up to date - no pending migrations found`);
devkit_1.logger.info(` Execution time: ${result.executionTimeMs}ms`);
}
else {
devkit_1.logger.info(`ā
Migration completed successfully!`);
devkit_1.logger.info(` Files processed: ${result.filesProcessed}`);
devkit_1.logger.info(` Files skipped: ${result.filesSkipped}`);
devkit_1.logger.info(` Execution time: ${result.executionTimeMs}ms`);
}
if (result.results.length > 0) {
devkit_1.logger.info('\nš Migration Details:');
for (const fileResult of result.results) {
const status = fileResult.success ? 'ā
' : fileResult.skipped ? 'āļø' : 'ā';
const reason = fileResult.skipped
? ` (${fileResult.skipReason})`
: fileResult.error
? ` (${fileResult.error})`
: '';
devkit_1.logger.info(` ${status} ${fileResult.file.moduleId}/${fileResult.file.filename}${reason}`);
// Show detailed information when detailed flag is used
if (options.detailed && (fileResult.success || fileResult.skipped)) {
devkit_1.logger.info(` File: ${fileResult.file.number}_${fileResult.file.name}_${fileResult.file.direction}.surql`);
devkit_1.logger.info(` Execution time: ${fileResult.executionTimeMs}ms`);
if (fileResult.file.checksum) {
devkit_1.logger.info(` Checksum: ${fileResult.file.checksum.substring(0, 12)}...`);
}
}
}
}
}
else {
devkit_1.logger.error('ā Migration failed!');
for (const fileResult of result.results) {
if (!fileResult.success && !fileResult.skipped) {
devkit_1.logger.error(` ā ${fileResult.file.moduleId}/${fileResult.file.filename}: ${fileResult.error}`);
}
}
devkit_1.logger.info(` Files processed: ${result.filesProcessed}`);
devkit_1.logger.info(` Execution time: ${result.executionTimeMs}ms`);
}
return { success: result.success };
}
catch (error) {
devkit_1.logger.error('š„ Migration execution failed:');
devkit_1.logger.error(error instanceof Error ? error.message : String(error));
return { success: false };
}
finally {
await engine.close();
}
}
//# sourceMappingURL=executor.js.map