@datacapy/migrate 0.1.0
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 +29 -0
- package/README.md +658 -0
- package/dist/cli/command-parser.d.ts +18 -0
- package/dist/cli/command-parser.d.ts.map +1 -0
- package/dist/cli/command-parser.js +159 -0
- package/dist/cli/command-parser.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 +22 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/runner.d.ts +6 -0
- package/dist/cli/runner.d.ts.map +1 -0
- package/dist/cli/runner.js +141 -0
- package/dist/cli/runner.js.map +1 -0
- package/dist/executor/patch-executor.d.ts +13 -0
- package/dist/executor/patch-executor.d.ts.map +1 -0
- package/dist/executor/patch-executor.js +58 -0
- package/dist/executor/patch-executor.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +20 -0
- package/dist/index.js.map +1 -0
- package/dist/interface/context-resolver.d.ts +4 -0
- package/dist/interface/context-resolver.d.ts.map +1 -0
- package/dist/interface/context-resolver.js +3 -0
- package/dist/interface/context-resolver.js.map +1 -0
- package/dist/interface/database-patch.d.ts +8 -0
- package/dist/interface/database-patch.d.ts.map +1 -0
- package/dist/interface/database-patch.js +3 -0
- package/dist/interface/database-patch.js.map +1 -0
- package/dist/interface/index.d.ts +4 -0
- package/dist/interface/index.d.ts.map +1 -0
- package/dist/interface/index.js +20 -0
- package/dist/interface/index.js.map +1 -0
- package/dist/interface/migration-config.d.ts +26 -0
- package/dist/interface/migration-config.d.ts.map +1 -0
- package/dist/interface/migration-config.js +3 -0
- package/dist/interface/migration-config.js.map +1 -0
- package/dist/interface/migration-result.d.ts +31 -0
- package/dist/interface/migration-result.d.ts.map +1 -0
- package/dist/interface/migration-result.js +3 -0
- package/dist/interface/migration-result.js.map +1 -0
- package/dist/logger/migration-logger.d.ts +21 -0
- package/dist/logger/migration-logger.d.ts.map +1 -0
- package/dist/logger/migration-logger.js +78 -0
- package/dist/logger/migration-logger.js.map +1 -0
- package/dist/manager/migration-manager.d.ts +12 -0
- package/dist/manager/migration-manager.d.ts.map +1 -0
- package/dist/manager/migration-manager.js +262 -0
- package/dist/manager/migration-manager.js.map +1 -0
- package/dist/meta/meta-table.d.ts +22 -0
- package/dist/meta/meta-table.d.ts.map +1 -0
- package/dist/meta/meta-table.js +86 -0
- package/dist/meta/meta-table.js.map +1 -0
- package/dist/scanner/patch-scanner.d.ts +11 -0
- package/dist/scanner/patch-scanner.d.ts.map +1 -0
- package/dist/scanner/patch-scanner.js +166 -0
- package/dist/scanner/patch-scanner.js.map +1 -0
- package/dist/version/version-manager.d.ts +11 -0
- package/dist/version/version-manager.d.ts.map +1 -0
- package/dist/version/version-manager.js +90 -0
- package/dist/version/version-manager.js.map +1 -0
- package/package.json +51 -0
- package/tsconfig.json +27 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-result.d.ts","sourceRoot":"","sources":["../../src/interface/migration-result.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAI1B,OAAO,EAAE,MAAM,CAAC;IAKhB,WAAW,EAAE,MAAM,CAAC;IAKpB,cAAc,EAAE,MAAM,CAAC;IAKvB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAKzC,QAAQ,EAAE,MAAM,CAAC;IAKjB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IAKF,SAAS,EAAE,IAAI,CAAC;CACjB;AAOD,MAAM,WAAW,eAAe;IAI9B,YAAY,EAAE,MAAM,CAAC;IAKrB,YAAY,EAAE,MAAM,CAAC;IAKrB,WAAW,EAAE,MAAM,CAAC;IAKpB,YAAY,EAAE,MAAM,CAAC;IAKrB,YAAY,EAAE,WAAW,EAAE,CAAC;IAK5B,eAAe,EAAE,MAAM,CAAC;IAKxB,cAAc,EAAE,MAAM,CAAC;IAKvB,aAAa,EAAE,MAAM,CAAC;IAKtB,MAAM,EAAE,OAAO,CAAC;IAKhB,SAAS,EAAE,IAAI,CAAC;IAKhB,OAAO,EAAE,IAAI,CAAC;CACf;AAOD,MAAM,WAAW,SAAS;IAIxB,OAAO,EAAE,MAAM,CAAC;IAKhB,QAAQ,EAAE,MAAM,CAAC;IAKjB,KAAK,EAAE,GAAG,CAAC;CACZ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-result.js","sourceRoot":"","sources":["../../src/interface/migration-result.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare class MigrationLogger {
|
|
2
|
+
private verbose;
|
|
3
|
+
private customLogger?;
|
|
4
|
+
constructor(verbose?: boolean, customLogger?: (message: string, level?: "info" | "warn" | "error") => void);
|
|
5
|
+
info(message: string): void;
|
|
6
|
+
warn(message: string): void;
|
|
7
|
+
error(message: string): void;
|
|
8
|
+
verboseLog(message: string): void;
|
|
9
|
+
success(message: string): void;
|
|
10
|
+
private log;
|
|
11
|
+
logMigrationStart(dataSourceName: string, patchCount: number): void;
|
|
12
|
+
logMigrationComplete(successCount: number, failedCount: number, duration: number): void;
|
|
13
|
+
logPatchStart(version: string, description: string): void;
|
|
14
|
+
logPatchSuccess(version: string, duration: number): void;
|
|
15
|
+
logPatchFailure(version: string, error: Error): void;
|
|
16
|
+
logPatchSkipped(version: string, reason: string): void;
|
|
17
|
+
logDryRun(): void;
|
|
18
|
+
logCurrentVersion(version: string): void;
|
|
19
|
+
logTargetVersion(version: string): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=migration-logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-logger.d.ts","sourceRoot":"","sources":["../../src/logger/migration-logger.ts"],"names":[],"mappings":"AAKA,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAAC,CAGX;gBAGR,OAAO,GAAE,OAAe,EACxB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,KAAK,IAAI;IAS7E,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO3B,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO5B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IASjC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO9B,OAAO,CAAC,GAAG;IAwBX,iBAAiB,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQnE,oBAAoB,CAClB,YAAY,EAAE,MAAM,EACpB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,GACf,IAAI;IASP,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAOzD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAOxD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAUpD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAOtD,SAAS,IAAI,IAAI;IAOjB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAOxC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAGxC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MigrationLogger = void 0;
|
|
4
|
+
class MigrationLogger {
|
|
5
|
+
constructor(verbose = false, customLogger) {
|
|
6
|
+
this.verbose = verbose;
|
|
7
|
+
this.customLogger = customLogger;
|
|
8
|
+
}
|
|
9
|
+
info(message) {
|
|
10
|
+
this.log(message, "info");
|
|
11
|
+
}
|
|
12
|
+
warn(message) {
|
|
13
|
+
this.log(message, "warn");
|
|
14
|
+
}
|
|
15
|
+
error(message) {
|
|
16
|
+
this.log(message, "error");
|
|
17
|
+
}
|
|
18
|
+
verboseLog(message) {
|
|
19
|
+
if (this.verbose) {
|
|
20
|
+
this.log(message, "info");
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
success(message) {
|
|
24
|
+
this.log(message, "info");
|
|
25
|
+
}
|
|
26
|
+
log(message, level) {
|
|
27
|
+
const timestamp = new Date().toISOString();
|
|
28
|
+
const formattedMessage = `[${timestamp}] [${level.toUpperCase()}] ${message}`;
|
|
29
|
+
if (this.customLogger) {
|
|
30
|
+
this.customLogger(formattedMessage, level);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
switch (level) {
|
|
34
|
+
case "error":
|
|
35
|
+
console.error(formattedMessage);
|
|
36
|
+
break;
|
|
37
|
+
case "warn":
|
|
38
|
+
console.warn(formattedMessage);
|
|
39
|
+
break;
|
|
40
|
+
default:
|
|
41
|
+
console.log(formattedMessage);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
logMigrationStart(dataSourceName, patchCount) {
|
|
46
|
+
this.info(`Starting migration for datasource: ${dataSourceName}`);
|
|
47
|
+
this.info(`Found ${patchCount} patches to apply`);
|
|
48
|
+
}
|
|
49
|
+
logMigrationComplete(successCount, failedCount, duration) {
|
|
50
|
+
this.success(`Migration complete: ${successCount} successful, ${failedCount} failed (${duration}ms)`);
|
|
51
|
+
}
|
|
52
|
+
logPatchStart(version, description) {
|
|
53
|
+
this.verboseLog(`Applying patch ${version}: ${description}`);
|
|
54
|
+
}
|
|
55
|
+
logPatchSuccess(version, duration) {
|
|
56
|
+
this.verboseLog(`✓ Patch ${version} applied successfully (${duration}ms)`);
|
|
57
|
+
}
|
|
58
|
+
logPatchFailure(version, error) {
|
|
59
|
+
this.error(`✗ Patch ${version} failed: ${error.message}`);
|
|
60
|
+
if (this.verbose && error.stack) {
|
|
61
|
+
this.error(error.stack);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
logPatchSkipped(version, reason) {
|
|
65
|
+
this.verboseLog(`⊘ Patch ${version} skipped: ${reason}`);
|
|
66
|
+
}
|
|
67
|
+
logDryRun() {
|
|
68
|
+
this.warn("DRY RUN MODE - No changes will be applied");
|
|
69
|
+
}
|
|
70
|
+
logCurrentVersion(version) {
|
|
71
|
+
this.info(`Current database version: ${version}`);
|
|
72
|
+
}
|
|
73
|
+
logTargetVersion(version) {
|
|
74
|
+
this.info(`Target version: ${version}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.MigrationLogger = MigrationLogger;
|
|
78
|
+
//# sourceMappingURL=migration-logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-logger.js","sourceRoot":"","sources":["../../src/logger/migration-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { MigrationConfig } from "../interface/migration-config";
|
|
2
|
+
import { MigrationResult } from "../interface/migration-result";
|
|
3
|
+
export declare class MigrationManager {
|
|
4
|
+
private config;
|
|
5
|
+
private logger;
|
|
6
|
+
constructor(config: MigrationConfig);
|
|
7
|
+
migrate(): Promise<MigrationResult>;
|
|
8
|
+
private migrateBatch;
|
|
9
|
+
private buildDataSourceContext;
|
|
10
|
+
private resolveDataSource;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=migration-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-manager.d.ts","sourceRoot":"","sources":["../../src/manager/migration-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEhB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,eAAe,EAAe,MAAM,+BAA+B,CAAC;AAiB7E,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,eAAe;IAoB7B,OAAO,IAAI,OAAO,CAAC,eAAe,CAAC;YA0L3B,YAAY;IAoI1B,OAAO,CAAC,sBAAsB;YAsBhB,iBAAiB;CAyDhC"}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MigrationManager = void 0;
|
|
4
|
+
const version_manager_1 = require("../version/version-manager");
|
|
5
|
+
const meta_table_1 = require("../meta/meta-table");
|
|
6
|
+
const patch_scanner_1 = require("../scanner/patch-scanner");
|
|
7
|
+
const patch_executor_1 = require("../executor/patch-executor");
|
|
8
|
+
const migration_logger_1 = require("../logger/migration-logger");
|
|
9
|
+
const data_source_1 = require("@datacapy/om/dist/data-source");
|
|
10
|
+
class MigrationManager {
|
|
11
|
+
constructor(config) {
|
|
12
|
+
this.config = {
|
|
13
|
+
...config,
|
|
14
|
+
patchDirectory: config.patchDirectory || "./migrate",
|
|
15
|
+
targetVersion: config.targetVersion || "latest",
|
|
16
|
+
metaTableName: config.metaTableName || "migrationMeta",
|
|
17
|
+
dryRun: config.dryRun || false,
|
|
18
|
+
verbose: config.verbose || false,
|
|
19
|
+
stopOnError: config.stopOnError !== undefined ? config.stopOnError : true,
|
|
20
|
+
};
|
|
21
|
+
this.logger = new migration_logger_1.MigrationLogger(this.config.verbose, this.config.logger);
|
|
22
|
+
}
|
|
23
|
+
async migrate() {
|
|
24
|
+
const startTime = new Date();
|
|
25
|
+
let releaseKey;
|
|
26
|
+
try {
|
|
27
|
+
if (this.config.contextLookup) {
|
|
28
|
+
return await this.migrateBatch(startTime);
|
|
29
|
+
}
|
|
30
|
+
if (this.config.dryRun) {
|
|
31
|
+
this.logger.logDryRun();
|
|
32
|
+
}
|
|
33
|
+
this.logger.verboseLog("Resolving target datasource...");
|
|
34
|
+
const resolved = await this.resolveDataSource();
|
|
35
|
+
const targetDataSource = resolved.dataSource;
|
|
36
|
+
releaseKey = resolved.releaseKey;
|
|
37
|
+
const dsContext = this.buildDataSourceContext();
|
|
38
|
+
if (dsContext) {
|
|
39
|
+
await this.config.modelManager.initDynamicReposForDataSource(this.config.dataSourceName, dsContext);
|
|
40
|
+
}
|
|
41
|
+
this.logger.verboseLog("Initializing meta table...");
|
|
42
|
+
const metaTable = new meta_table_1.MetaTable(targetDataSource, this.config.metaTableName);
|
|
43
|
+
await metaTable.initialize();
|
|
44
|
+
const currentVersion = await metaTable.getCurrentVersion();
|
|
45
|
+
this.logger.logCurrentVersion(currentVersion);
|
|
46
|
+
this.logger.verboseLog(`Scanning patches in ${this.config.patchDirectory}...`);
|
|
47
|
+
const scanner = new patch_scanner_1.PatchScanner(this.config.patchDirectory);
|
|
48
|
+
const allPatchFiles = await scanner.scanPatches();
|
|
49
|
+
const filteredPatchFiles = allPatchFiles.filter((pf) => pf.patch.dataSourceName === this.config.dataSourceName);
|
|
50
|
+
this.logger.verboseLog(`Found ${allPatchFiles.length} total patches, ${filteredPatchFiles.length} for datasource "${this.config.dataSourceName}"`);
|
|
51
|
+
const allVersions = filteredPatchFiles.map((pf) => pf.version);
|
|
52
|
+
const targetVersion = this.config.targetVersion === "latest"
|
|
53
|
+
? version_manager_1.VersionManager.getLatestVersion(allVersions)
|
|
54
|
+
: this.config.targetVersion;
|
|
55
|
+
if (targetVersion) {
|
|
56
|
+
this.logger.logTargetVersion(targetVersion);
|
|
57
|
+
}
|
|
58
|
+
const versionsToApply = version_manager_1.VersionManager.getVersionsToApply(allVersions, currentVersion, targetVersion);
|
|
59
|
+
const patchesToApply = filteredPatchFiles
|
|
60
|
+
.filter((pf) => versionsToApply.includes(pf.version))
|
|
61
|
+
.map((pf) => pf.patch);
|
|
62
|
+
if (patchesToApply.length === 0) {
|
|
63
|
+
this.logger.info("No patches to apply. Database is up to date.");
|
|
64
|
+
return {
|
|
65
|
+
totalPatches: 0,
|
|
66
|
+
successCount: 0,
|
|
67
|
+
failedCount: 0,
|
|
68
|
+
skippedCount: 0,
|
|
69
|
+
patchResults: [],
|
|
70
|
+
previousVersion: currentVersion,
|
|
71
|
+
currentVersion: currentVersion,
|
|
72
|
+
totalDuration: Date.now() - startTime.getTime(),
|
|
73
|
+
dryRun: this.config.dryRun,
|
|
74
|
+
startTime,
|
|
75
|
+
endTime: new Date(),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
this.logger.logMigrationStart(this.config.dataSourceName, patchesToApply.length);
|
|
79
|
+
const executor = new patch_executor_1.PatchExecutor(this.config.modelManager, this.logger, this.config.dryRun);
|
|
80
|
+
const patchResults = await executor.executePatches(patchesToApply, dsContext ?? new data_source_1.DataSourceContext(), this.config.stopOnError);
|
|
81
|
+
if (!this.config.dryRun) {
|
|
82
|
+
for (const result of patchResults) {
|
|
83
|
+
if (result.status === "success") {
|
|
84
|
+
await metaTable.recordPatch(result.version, result.description, result.duration);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const newCurrentVersion = this.config.dryRun
|
|
89
|
+
? currentVersion
|
|
90
|
+
: await metaTable.getCurrentVersion();
|
|
91
|
+
const successCount = patchResults.filter((r) => r.status === "success").length;
|
|
92
|
+
const failedCount = patchResults.filter((r) => r.status === "failed").length;
|
|
93
|
+
const skippedCount = patchResults.filter((r) => r.status === "skipped").length;
|
|
94
|
+
const endTime = new Date();
|
|
95
|
+
const totalDuration = endTime.getTime() - startTime.getTime();
|
|
96
|
+
this.logger.logMigrationComplete(successCount, failedCount, totalDuration);
|
|
97
|
+
return {
|
|
98
|
+
totalPatches: patchResults.length,
|
|
99
|
+
successCount,
|
|
100
|
+
failedCount,
|
|
101
|
+
skippedCount,
|
|
102
|
+
patchResults,
|
|
103
|
+
previousVersion: currentVersion,
|
|
104
|
+
currentVersion: newCurrentVersion,
|
|
105
|
+
totalDuration,
|
|
106
|
+
dryRun: this.config.dryRun,
|
|
107
|
+
startTime,
|
|
108
|
+
endTime,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const endTime = new Date();
|
|
113
|
+
this.logger.error(`Migration failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
if (releaseKey) {
|
|
118
|
+
this.config.modelManager.dataSourceRegistry?.release(releaseKey);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async migrateBatch(startTime) {
|
|
123
|
+
const { contextLookup, contextResolver } = this.config;
|
|
124
|
+
if (!contextResolver) {
|
|
125
|
+
throw new Error("contextResolver is required when contextLookup is provided");
|
|
126
|
+
}
|
|
127
|
+
if (!contextLookup) {
|
|
128
|
+
throw new Error("contextLookup pattern is required for batch migration");
|
|
129
|
+
}
|
|
130
|
+
this.logger.info(`Resolving context pattern: ${contextLookup}`);
|
|
131
|
+
let contexts;
|
|
132
|
+
try {
|
|
133
|
+
contexts = await contextResolver.resolve(contextLookup);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
throw new Error(`Failed to resolve context pattern "${contextLookup}": ${error instanceof Error ? error.message : String(error)}`);
|
|
137
|
+
}
|
|
138
|
+
if (contexts.length === 0) {
|
|
139
|
+
this.logger.info(`No contexts found for pattern "${contextLookup}"`);
|
|
140
|
+
return {
|
|
141
|
+
totalPatches: 0,
|
|
142
|
+
successCount: 0,
|
|
143
|
+
failedCount: 0,
|
|
144
|
+
skippedCount: 0,
|
|
145
|
+
patchResults: [],
|
|
146
|
+
previousVersion: null,
|
|
147
|
+
currentVersion: null,
|
|
148
|
+
totalDuration: Date.now() - startTime.getTime(),
|
|
149
|
+
dryRun: this.config.dryRun,
|
|
150
|
+
startTime,
|
|
151
|
+
endTime: new Date(),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
this.logger.info(`Found ${contexts.length} context(s) to migrate sequentially`);
|
|
155
|
+
if (this.config.dryRun) {
|
|
156
|
+
this.logger.logDryRun();
|
|
157
|
+
}
|
|
158
|
+
const allPatchResults = [];
|
|
159
|
+
let totalSuccessCount = 0;
|
|
160
|
+
let totalFailedCount = 0;
|
|
161
|
+
let totalSkippedCount = 0;
|
|
162
|
+
for (let i = 0; i < contexts.length; i++) {
|
|
163
|
+
const context = contexts[i];
|
|
164
|
+
const contextStr = JSON.stringify(context);
|
|
165
|
+
this.logger.info(`\n[${i + 1}/${contexts.length}] Migrating context: ${contextStr}`);
|
|
166
|
+
try {
|
|
167
|
+
const contextConfig = {
|
|
168
|
+
...this.config,
|
|
169
|
+
context,
|
|
170
|
+
contextLookup: undefined,
|
|
171
|
+
contextResolver: undefined,
|
|
172
|
+
};
|
|
173
|
+
const contextManager = new MigrationManager(contextConfig);
|
|
174
|
+
const result = await contextManager.migrate();
|
|
175
|
+
allPatchResults.push(...result.patchResults);
|
|
176
|
+
totalSuccessCount += result.successCount;
|
|
177
|
+
totalFailedCount += result.failedCount;
|
|
178
|
+
totalSkippedCount += result.skippedCount;
|
|
179
|
+
if (result.failedCount > 0) {
|
|
180
|
+
this.logger.error(`Migration failed for context ${contextStr}. Stopping batch migration.`);
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
this.logger.info(`✓ Context ${contextStr} migrated successfully (${result.successCount} patches applied)`);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
this.logger.error(`Migration failed for context ${contextStr}: ${error instanceof Error ? error.message : String(error)}`);
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
const endTime = new Date();
|
|
191
|
+
const totalDuration = endTime.getTime() - startTime.getTime();
|
|
192
|
+
this.logger.info("\n=== Batch Migration Summary ===");
|
|
193
|
+
this.logger.info(`Total contexts migrated: ${contexts.length}`);
|
|
194
|
+
this.logger.info(`Total patches applied: ${totalSuccessCount}`);
|
|
195
|
+
this.logger.info(`Total patches failed: ${totalFailedCount}`);
|
|
196
|
+
this.logger.info(`Total patches skipped: ${totalSkippedCount}`);
|
|
197
|
+
this.logger.info(`Total duration: ${totalDuration}ms`);
|
|
198
|
+
return {
|
|
199
|
+
totalPatches: allPatchResults.length,
|
|
200
|
+
successCount: totalSuccessCount,
|
|
201
|
+
failedCount: totalFailedCount,
|
|
202
|
+
skippedCount: totalSkippedCount,
|
|
203
|
+
patchResults: allPatchResults,
|
|
204
|
+
previousVersion: null,
|
|
205
|
+
currentVersion: null,
|
|
206
|
+
totalDuration,
|
|
207
|
+
dryRun: this.config.dryRun,
|
|
208
|
+
startTime,
|
|
209
|
+
endTime,
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
buildDataSourceContext() {
|
|
213
|
+
const { context, dataSourceName } = this.config;
|
|
214
|
+
if (!context)
|
|
215
|
+
return undefined;
|
|
216
|
+
if (context instanceof data_source_1.DataSourceContext)
|
|
217
|
+
return context;
|
|
218
|
+
const entry = Object.keys(context).reduce((acc, key) => {
|
|
219
|
+
acc[dataSourceName] = {
|
|
220
|
+
lookupKey: context[key],
|
|
221
|
+
};
|
|
222
|
+
return acc;
|
|
223
|
+
}, {});
|
|
224
|
+
return data_source_1.DataSourceContext.fromDataSources(entry);
|
|
225
|
+
}
|
|
226
|
+
async resolveDataSource() {
|
|
227
|
+
const { modelManager, dataSourceName } = this.config;
|
|
228
|
+
try {
|
|
229
|
+
const staticDataSource = modelManager.getDataSource(dataSourceName);
|
|
230
|
+
const isDynamic = staticDataSource &&
|
|
231
|
+
typeof staticDataSource.isDynamic === "function" &&
|
|
232
|
+
staticDataSource.isDynamic();
|
|
233
|
+
if (staticDataSource && !isDynamic) {
|
|
234
|
+
this.logger.verboseLog(`Resolved static datasource: ${dataSourceName}`);
|
|
235
|
+
return { dataSource: staticDataSource };
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
}
|
|
240
|
+
const dsContext = this.buildDataSourceContext();
|
|
241
|
+
if (!dsContext) {
|
|
242
|
+
throw new Error(`Datasource "${dataSourceName}" not found. If this is a dynamic datasource, provide context via --context argument.`);
|
|
243
|
+
}
|
|
244
|
+
const contextEntry = dsContext.getForDataSource(dataSourceName);
|
|
245
|
+
if (!contextEntry) {
|
|
246
|
+
throw new Error(`No context provided for dynamic datasource "${dataSourceName}"`);
|
|
247
|
+
}
|
|
248
|
+
try {
|
|
249
|
+
const dynamicDataSource = await modelManager.getDataSourceDynamic(dataSourceName, contextEntry);
|
|
250
|
+
this.logger.verboseLog(`Resolved dynamic datasource: ${dataSourceName} (lookupKey: ${contextEntry.lookupKey})`);
|
|
251
|
+
const releaseKey = contextEntry.lookupKey
|
|
252
|
+
? `${dataSourceName}:${contextEntry.lookupKey}`
|
|
253
|
+
: undefined;
|
|
254
|
+
return { dataSource: dynamicDataSource, releaseKey };
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
throw new Error(`Failed to resolve datasource "${dataSourceName}": ${error instanceof Error ? error.message : String(error)}`);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
exports.MigrationManager = MigrationManager;
|
|
262
|
+
//# sourceMappingURL=migration-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-manager.js","sourceRoot":"","sources":["../../src/manager/migration-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { DataSourceInterface } from "@datacapy/om/dist/data-source";
|
|
2
|
+
export interface MetaRecord {
|
|
3
|
+
_id?: string;
|
|
4
|
+
version: string;
|
|
5
|
+
description: string;
|
|
6
|
+
appliedAt: Date;
|
|
7
|
+
duration?: number;
|
|
8
|
+
}
|
|
9
|
+
export declare class MetaTable {
|
|
10
|
+
private dataSource;
|
|
11
|
+
private tableName;
|
|
12
|
+
constructor(dataSource: DataSourceInterface, tableName?: string);
|
|
13
|
+
initialize(): Promise<void>;
|
|
14
|
+
getCurrentVersion(): Promise<string>;
|
|
15
|
+
recordPatch(version: string, description: string, duration?: number): Promise<void>;
|
|
16
|
+
getAppliedPatches(): Promise<MetaRecord[]>;
|
|
17
|
+
isPatchApplied(version: string): Promise<boolean>;
|
|
18
|
+
getAppliedPatchCount(): Promise<number>;
|
|
19
|
+
deletePatchRecord(version: string): Promise<void>;
|
|
20
|
+
clearAll(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=meta-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-table.d.ts","sourceRoot":"","sources":["../../src/meta/meta-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAQpE,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,IAAI,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAQD,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,SAAS,CAAS;gBAGxB,UAAU,EAAE,mBAAmB,EAC/B,SAAS,GAAE,MAAwB;IAU/B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA0D3B,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBpC,WAAW,CACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAeV,iBAAiB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAc1C,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQjD,oBAAoB,IAAI,OAAO,CAAC,MAAM,CAAC;IAQvC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAGhC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MetaTable = void 0;
|
|
4
|
+
const id_1 = require("@datacapy/id");
|
|
5
|
+
class MetaTable {
|
|
6
|
+
constructor(dataSource, tableName = "migrationMeta") {
|
|
7
|
+
this.dataSource = dataSource;
|
|
8
|
+
this.tableName = tableName;
|
|
9
|
+
}
|
|
10
|
+
async initialize() {
|
|
11
|
+
try {
|
|
12
|
+
await this.dataSource.count(this.tableName);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
const dummyRecord = {
|
|
16
|
+
_id: (0, id_1.genUniqueId)(),
|
|
17
|
+
version: "0000-00-00_0000",
|
|
18
|
+
description: "Initial meta table creation",
|
|
19
|
+
appliedAt: new Date(),
|
|
20
|
+
};
|
|
21
|
+
try {
|
|
22
|
+
await this.dataSource.insertOne(this.tableName, dummyRecord);
|
|
23
|
+
await this.dataSource.deleteOne(this.tableName, {
|
|
24
|
+
version: "0000-00-00_0000",
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (insertError) {
|
|
28
|
+
try {
|
|
29
|
+
await this.dataSource.count(this.tableName);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new Error(`Failed to initialize meta table: ${insertError}`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await this.dataSource.createIndex(this.tableName, { version: 1 }, { name: "idx_migration_version", unique: true });
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
await this.dataSource.createIndex(this.tableName, { appliedAt: -1 }, { name: "idx_migration_appliedAt" });
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async getCurrentVersion() {
|
|
48
|
+
const records = (await this.dataSource.find(this.tableName, {}));
|
|
49
|
+
if (records.length === 0) {
|
|
50
|
+
return "0000-00-00_0000";
|
|
51
|
+
}
|
|
52
|
+
const sorted = records.sort((a, b) => b.version.localeCompare(a.version));
|
|
53
|
+
return sorted[0].version;
|
|
54
|
+
}
|
|
55
|
+
async recordPatch(version, description, duration) {
|
|
56
|
+
const record = {
|
|
57
|
+
_id: (0, id_1.genUniqueId)(),
|
|
58
|
+
version,
|
|
59
|
+
description,
|
|
60
|
+
appliedAt: new Date(),
|
|
61
|
+
duration,
|
|
62
|
+
};
|
|
63
|
+
await this.dataSource.insertOne(this.tableName, record);
|
|
64
|
+
}
|
|
65
|
+
async getAppliedPatches() {
|
|
66
|
+
const records = await this.dataSource.find(this.tableName, {}, {
|
|
67
|
+
sort: { appliedAt: 1 },
|
|
68
|
+
});
|
|
69
|
+
return records;
|
|
70
|
+
}
|
|
71
|
+
async isPatchApplied(version) {
|
|
72
|
+
const count = await this.dataSource.count(this.tableName, { version });
|
|
73
|
+
return count > 0;
|
|
74
|
+
}
|
|
75
|
+
async getAppliedPatchCount() {
|
|
76
|
+
return this.dataSource.count(this.tableName);
|
|
77
|
+
}
|
|
78
|
+
async deletePatchRecord(version) {
|
|
79
|
+
await this.dataSource.deleteOne(this.tableName, { version });
|
|
80
|
+
}
|
|
81
|
+
async clearAll() {
|
|
82
|
+
await this.dataSource.deleteMany(this.tableName, {});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.MetaTable = MetaTable;
|
|
86
|
+
//# sourceMappingURL=meta-table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-table.js","sourceRoot":"","sources":["../../src/meta/meta-table.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PatchFile } from "../interface/migration-result";
|
|
2
|
+
export declare class PatchScanner {
|
|
3
|
+
private patchDirectory;
|
|
4
|
+
constructor(patchDirectory: string);
|
|
5
|
+
scanPatches(): Promise<PatchFile[]>;
|
|
6
|
+
private loadPatchFile;
|
|
7
|
+
private validatePatch;
|
|
8
|
+
private getDirectories;
|
|
9
|
+
private getFiles;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=patch-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"patch-scanner.d.ts","sourceRoot":"","sources":["../../src/scanner/patch-scanner.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAQ1D,qBAAa,YAAY;IACvB,OAAO,CAAC,cAAc,CAAS;gBAEnB,cAAc,EAAE,MAAM;IAU5B,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YAoD3B,aAAa;IAmE3B,OAAO,CAAC,aAAa;IA6CrB,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,QAAQ;CAUjB"}
|