@ftschopp/dynatable-migrations 1.0.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/.gitkeep +0 -0
- package/CHANGELOG.md +13 -0
- package/README.md +421 -0
- package/USAGE.md +557 -0
- package/bin/dynatable-migrate.js +30 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +104 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/create.d.ts +2 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +123 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/down.d.ts +3 -0
- package/dist/commands/down.d.ts.map +1 -0
- package/dist/commands/down.js +37 -0
- package/dist/commands/down.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +70 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +84 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/up.d.ts +3 -0
- package/dist/commands/up.d.ts.map +1 -0
- package/dist/commands/up.js +37 -0
- package/dist/commands/up.js.map +1 -0
- package/dist/core/config.d.ts +29 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +160 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/loader.d.ts +47 -0
- package/dist/core/loader.d.ts.map +1 -0
- package/dist/core/loader.js +226 -0
- package/dist/core/loader.js.map +1 -0
- package/dist/core/runner.d.ts +38 -0
- package/dist/core/runner.d.ts.map +1 -0
- package/dist/core/runner.js +166 -0
- package/dist/core/runner.js.map +1 -0
- package/dist/core/tracker.d.ts +19 -0
- package/dist/core/tracker.d.ts.map +1 -0
- package/dist/core/tracker.js +172 -0
- package/dist/core/tracker.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/dist/templates/migration.d.ts +5 -0
- package/dist/templates/migration.d.ts.map +1 -0
- package/dist/templates/migration.js +96 -0
- package/dist/templates/migration.js.map +1 -0
- package/dist/types/index.d.ts +159 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/migrations/.gitkeep +0 -0
- package/package.json +43 -0
- package/src/cli.ts +106 -0
- package/src/commands/create.ts +110 -0
- package/src/commands/down.ts +42 -0
- package/src/commands/init.ts +37 -0
- package/src/commands/status.ts +92 -0
- package/src/commands/up.ts +39 -0
- package/src/core/config.ts +140 -0
- package/src/core/loader.ts +233 -0
- package/src/core/runner.ts +223 -0
- package/src/core/tracker.ts +219 -0
- package/src/index.ts +23 -0
- package/src/templates/migration.ts +92 -0
- package/src/types/index.ts +196 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MigrationFile } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Load all migration files from directory
|
|
4
|
+
*/
|
|
5
|
+
export declare class MigrationLoader {
|
|
6
|
+
private migrationsDir;
|
|
7
|
+
constructor(migrationsDir: string);
|
|
8
|
+
/**
|
|
9
|
+
* Load all migration files
|
|
10
|
+
*/
|
|
11
|
+
loadMigrations(): Promise<MigrationFile[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Load single migration file
|
|
14
|
+
*/
|
|
15
|
+
private loadMigration;
|
|
16
|
+
/**
|
|
17
|
+
* Validate migration file name format
|
|
18
|
+
* Expected: 1.0.0_migration_name.ts (semver format)
|
|
19
|
+
*/
|
|
20
|
+
private isValidMigrationFileName;
|
|
21
|
+
/**
|
|
22
|
+
* Parse version and name from file name
|
|
23
|
+
*/
|
|
24
|
+
private parseMigrationFileName;
|
|
25
|
+
/**
|
|
26
|
+
* Validate migration structure
|
|
27
|
+
*/
|
|
28
|
+
private validateMigration;
|
|
29
|
+
/**
|
|
30
|
+
* Get pending migrations (not yet applied)
|
|
31
|
+
*/
|
|
32
|
+
getPendingMigrations(appliedVersions: string[]): Promise<MigrationFile[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Get migration by version
|
|
35
|
+
*/
|
|
36
|
+
getMigration(version: string): Promise<MigrationFile | null>;
|
|
37
|
+
/**
|
|
38
|
+
* Generate next version number (increments patch by default)
|
|
39
|
+
*/
|
|
40
|
+
getNextVersion(): Promise<string>;
|
|
41
|
+
/**
|
|
42
|
+
* Compare semver versions
|
|
43
|
+
* Returns: -1 if a < b, 0 if a === b, 1 if a > b
|
|
44
|
+
*/
|
|
45
|
+
private compareSemver;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,aAAa,EAAE,MAAM,UAAU,CAAC;AAEpD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,EAAE,MAAM;IAIjC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAkChD;;OAEG;YACW,aAAa;IA6D3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAKhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAkB9B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkBzB;;OAEG;IACG,oBAAoB,CAAC,eAAe,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAK/E;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAKlE;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IA6BvC;;;OAGG;IACH,OAAO,CAAC,aAAa;CActB"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.MigrationLoader = void 0;
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
/**
|
|
40
|
+
* Load all migration files from directory
|
|
41
|
+
*/
|
|
42
|
+
class MigrationLoader {
|
|
43
|
+
constructor(migrationsDir) {
|
|
44
|
+
this.migrationsDir = migrationsDir;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Load all migration files
|
|
48
|
+
*/
|
|
49
|
+
async loadMigrations() {
|
|
50
|
+
if (!fs.existsSync(this.migrationsDir)) {
|
|
51
|
+
throw new Error(`Migrations directory not found: ${this.migrationsDir}`);
|
|
52
|
+
}
|
|
53
|
+
const files = fs
|
|
54
|
+
.readdirSync(this.migrationsDir)
|
|
55
|
+
.filter((f) => (f.endsWith('.ts') || f.endsWith('.js')) &&
|
|
56
|
+
!f.endsWith('.d.ts') &&
|
|
57
|
+
this.isValidMigrationFileName(f))
|
|
58
|
+
.sort((a, b) => {
|
|
59
|
+
// Sort by semver
|
|
60
|
+
const versionA = a.match(/^(\d+\.\d+\.\d+)/)?.[1] || '0.0.0';
|
|
61
|
+
const versionB = b.match(/^(\d+\.\d+\.\d+)/)?.[1] || '0.0.0';
|
|
62
|
+
return this.compareSemver(versionA, versionB);
|
|
63
|
+
});
|
|
64
|
+
const migrations = [];
|
|
65
|
+
for (const file of files) {
|
|
66
|
+
const filePath = path.join(this.migrationsDir, file);
|
|
67
|
+
const migration = await this.loadMigration(filePath);
|
|
68
|
+
if (migration) {
|
|
69
|
+
migrations.push(migration);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return migrations;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Load single migration file
|
|
76
|
+
*/
|
|
77
|
+
async loadMigration(filePath) {
|
|
78
|
+
try {
|
|
79
|
+
// Convert to absolute path
|
|
80
|
+
const absolutePath = path.isAbsolute(filePath)
|
|
81
|
+
? filePath
|
|
82
|
+
: path.resolve(process.cwd(), filePath);
|
|
83
|
+
let module;
|
|
84
|
+
// For TypeScript files, use require (ts-node must be registered)
|
|
85
|
+
if (absolutePath.endsWith('.ts')) {
|
|
86
|
+
// Register ts-node if not already registered
|
|
87
|
+
try {
|
|
88
|
+
require('ts-node').register({
|
|
89
|
+
transpileOnly: true,
|
|
90
|
+
skipProject: true, // Don't use project tsconfig
|
|
91
|
+
compilerOptions: {
|
|
92
|
+
module: 'commonjs',
|
|
93
|
+
target: 'ES2020',
|
|
94
|
+
esModuleInterop: true,
|
|
95
|
+
moduleResolution: 'node',
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
// ts-node might already be registered
|
|
101
|
+
}
|
|
102
|
+
// Clear require cache to reload file
|
|
103
|
+
delete require.cache[absolutePath];
|
|
104
|
+
module = require(absolutePath);
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
// For JavaScript files, use dynamic import
|
|
108
|
+
const fileUrl = `file://${absolutePath}`;
|
|
109
|
+
module = await Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
|
|
110
|
+
}
|
|
111
|
+
const migration = module.migration || module.default;
|
|
112
|
+
if (!migration) {
|
|
113
|
+
console.warn(`Warning: No migration export found in ${filePath}`);
|
|
114
|
+
return null;
|
|
115
|
+
}
|
|
116
|
+
// Validate migration structure
|
|
117
|
+
this.validateMigration(migration, filePath);
|
|
118
|
+
const fileName = path.basename(filePath);
|
|
119
|
+
const { version, name } = this.parseMigrationFileName(fileName);
|
|
120
|
+
return {
|
|
121
|
+
version,
|
|
122
|
+
name,
|
|
123
|
+
filePath,
|
|
124
|
+
migration,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw new Error(`Failed to load migration ${filePath}: ${error.message}`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Validate migration file name format
|
|
133
|
+
* Expected: 1.0.0_migration_name.ts (semver format)
|
|
134
|
+
*/
|
|
135
|
+
isValidMigrationFileName(fileName) {
|
|
136
|
+
// Match semver: 1.0.0_name.ts or 1.2.3_name.ts
|
|
137
|
+
return /^\d+\.\d+\.\d+_[\w-]+\.(ts|js)$/.test(fileName);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Parse version and name from file name
|
|
141
|
+
*/
|
|
142
|
+
parseMigrationFileName(fileName) {
|
|
143
|
+
const match = fileName.match(/^(\d+\.\d+\.\d+)_([\w-]+)\.(ts|js)$/);
|
|
144
|
+
if (!match || !match[1] || !match[2]) {
|
|
145
|
+
throw new Error(`Invalid migration file name format: ${fileName}. Expected: X.Y.Z_name.ts (semver)`);
|
|
146
|
+
}
|
|
147
|
+
const version = match[1];
|
|
148
|
+
const name = match[2];
|
|
149
|
+
return { version, name };
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Validate migration structure
|
|
153
|
+
*/
|
|
154
|
+
validateMigration(migration, filePath) {
|
|
155
|
+
if (!migration.version) {
|
|
156
|
+
throw new Error(`Migration ${filePath} is missing 'version' property`);
|
|
157
|
+
}
|
|
158
|
+
if (!migration.name) {
|
|
159
|
+
throw new Error(`Migration ${filePath} is missing 'name' property`);
|
|
160
|
+
}
|
|
161
|
+
if (typeof migration.up !== 'function') {
|
|
162
|
+
throw new Error(`Migration ${filePath} is missing 'up' function or it's not a function`);
|
|
163
|
+
}
|
|
164
|
+
if (typeof migration.down !== 'function') {
|
|
165
|
+
throw new Error(`Migration ${filePath} is missing 'down' function or it's not a function`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get pending migrations (not yet applied)
|
|
170
|
+
*/
|
|
171
|
+
async getPendingMigrations(appliedVersions) {
|
|
172
|
+
const allMigrations = await this.loadMigrations();
|
|
173
|
+
return allMigrations.filter((m) => !appliedVersions.includes(m.version));
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Get migration by version
|
|
177
|
+
*/
|
|
178
|
+
async getMigration(version) {
|
|
179
|
+
const migrations = await this.loadMigrations();
|
|
180
|
+
return migrations.find((m) => m.version === version) || null;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Generate next version number (increments patch by default)
|
|
184
|
+
*/
|
|
185
|
+
async getNextVersion() {
|
|
186
|
+
const migrations = await this.loadMigrations();
|
|
187
|
+
if (migrations.length === 0) {
|
|
188
|
+
return '0.1.0';
|
|
189
|
+
}
|
|
190
|
+
// Get last version
|
|
191
|
+
const lastMigration = migrations[migrations.length - 1];
|
|
192
|
+
if (!lastMigration) {
|
|
193
|
+
return '0.1.0';
|
|
194
|
+
}
|
|
195
|
+
const lastVersion = lastMigration.version;
|
|
196
|
+
// Parse semver and increment patch
|
|
197
|
+
const parts = lastVersion.split('.');
|
|
198
|
+
if (parts.length === 3 && parts[0] && parts[1] && parts[2]) {
|
|
199
|
+
const major = parseInt(parts[0], 10);
|
|
200
|
+
const minor = parseInt(parts[1], 10);
|
|
201
|
+
const patch = parseInt(parts[2], 10);
|
|
202
|
+
// Increment patch version
|
|
203
|
+
return `${major}.${minor}.${patch + 1}`;
|
|
204
|
+
}
|
|
205
|
+
return '0.1.0';
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Compare semver versions
|
|
209
|
+
* Returns: -1 if a < b, 0 if a === b, 1 if a > b
|
|
210
|
+
*/
|
|
211
|
+
compareSemver(a, b) {
|
|
212
|
+
const partsA = a.split('.').map((n) => parseInt(n, 10));
|
|
213
|
+
const partsB = b.split('.').map((n) => parseInt(n, 10));
|
|
214
|
+
for (let i = 0; i < 3; i++) {
|
|
215
|
+
const numA = partsA[i] || 0;
|
|
216
|
+
const numB = partsB[i] || 0;
|
|
217
|
+
if (numA > numB)
|
|
218
|
+
return 1;
|
|
219
|
+
if (numA < numB)
|
|
220
|
+
return -1;
|
|
221
|
+
}
|
|
222
|
+
return 0;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
exports.MigrationLoader = MigrationLoader;
|
|
226
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
import { MigrationConfig, MigrationFile, MigrationStatus } from '../types';
|
|
3
|
+
export declare class MigrationRunner {
|
|
4
|
+
private client;
|
|
5
|
+
private config;
|
|
6
|
+
private tracker;
|
|
7
|
+
private loader;
|
|
8
|
+
constructor(client: DynamoDBDocumentClient, config: MigrationConfig);
|
|
9
|
+
/**
|
|
10
|
+
* Initialize migration system
|
|
11
|
+
*/
|
|
12
|
+
initialize(): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Run all pending migrations
|
|
15
|
+
*/
|
|
16
|
+
up(limit?: number): Promise<MigrationFile[]>;
|
|
17
|
+
/**
|
|
18
|
+
* Rollback last migration
|
|
19
|
+
*/
|
|
20
|
+
down(steps?: number): Promise<MigrationFile[]>;
|
|
21
|
+
/**
|
|
22
|
+
* Get migration status
|
|
23
|
+
*/
|
|
24
|
+
status(): Promise<MigrationStatus[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Get current version
|
|
27
|
+
*/
|
|
28
|
+
getCurrentVersion(): Promise<string | null>;
|
|
29
|
+
/**
|
|
30
|
+
* Reset all migrations (rollback everything)
|
|
31
|
+
*/
|
|
32
|
+
reset(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Create migration context
|
|
35
|
+
*/
|
|
36
|
+
private createContext;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI7F,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,MAAM,CAAkB;gBAEpB,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAOnE;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,EAAE,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmDlD;;OAEG;IACG,IAAI,CAAC,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA+CvD;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IA6B1C;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAKjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5B;;OAEG;IACH,OAAO,CAAC,aAAa;CAkCtB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MigrationRunner = void 0;
|
|
4
|
+
const tracker_1 = require("./tracker");
|
|
5
|
+
const loader_1 = require("./loader");
|
|
6
|
+
class MigrationRunner {
|
|
7
|
+
constructor(client, config) {
|
|
8
|
+
this.client = client;
|
|
9
|
+
this.config = config;
|
|
10
|
+
this.tracker = new tracker_1.DynamoDBMigrationTracker(client, config);
|
|
11
|
+
this.loader = new loader_1.MigrationLoader(config.migrationsDir || './migrations');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Initialize migration system
|
|
15
|
+
*/
|
|
16
|
+
async initialize() {
|
|
17
|
+
await this.tracker.initialize();
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Run all pending migrations
|
|
21
|
+
*/
|
|
22
|
+
async up(limit) {
|
|
23
|
+
await this.initialize();
|
|
24
|
+
const appliedMigrations = await this.tracker.getAppliedMigrations();
|
|
25
|
+
const appliedVersions = appliedMigrations
|
|
26
|
+
.filter((m) => m.status === 'applied')
|
|
27
|
+
.map((m) => m.version);
|
|
28
|
+
let pendingMigrations = await this.loader.getPendingMigrations(appliedVersions);
|
|
29
|
+
// Apply limit if specified
|
|
30
|
+
if (limit) {
|
|
31
|
+
pendingMigrations = pendingMigrations.slice(0, limit);
|
|
32
|
+
}
|
|
33
|
+
if (pendingMigrations.length === 0) {
|
|
34
|
+
console.log('✅ No pending migrations');
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
console.log(`\n📦 Found ${pendingMigrations.length} pending migration(s)\n`);
|
|
38
|
+
const executed = [];
|
|
39
|
+
for (const migrationFile of pendingMigrations) {
|
|
40
|
+
try {
|
|
41
|
+
console.log(`⬆️ Applying ${migrationFile.version}: ${migrationFile.name}`);
|
|
42
|
+
const context = this.createContext();
|
|
43
|
+
await migrationFile.migration.up(context);
|
|
44
|
+
await this.tracker.markAsApplied(migrationFile.version, migrationFile.name, migrationFile.migration.schema);
|
|
45
|
+
console.log(`✅ Applied ${migrationFile.version}: ${migrationFile.name}\n`);
|
|
46
|
+
executed.push(migrationFile);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(`❌ Failed to apply ${migrationFile.version}: ${error.message}\n`);
|
|
50
|
+
await this.tracker.markAsFailed(migrationFile.version, error.message);
|
|
51
|
+
throw new Error(`Migration ${migrationFile.version} failed: ${error.message}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return executed;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Rollback last migration
|
|
58
|
+
*/
|
|
59
|
+
async down(steps = 1) {
|
|
60
|
+
await this.initialize();
|
|
61
|
+
const appliedMigrations = await this.tracker.getAppliedMigrations();
|
|
62
|
+
const applied = appliedMigrations
|
|
63
|
+
.filter((m) => m.status === 'applied')
|
|
64
|
+
.sort((a, b) => b.version.localeCompare(a.version))
|
|
65
|
+
.slice(0, steps);
|
|
66
|
+
if (applied.length === 0) {
|
|
67
|
+
console.log('✅ No migrations to rollback');
|
|
68
|
+
return [];
|
|
69
|
+
}
|
|
70
|
+
console.log(`\n📦 Rolling back ${applied.length} migration(s)\n`);
|
|
71
|
+
const rolledBack = [];
|
|
72
|
+
for (const record of applied) {
|
|
73
|
+
try {
|
|
74
|
+
const migrationFile = await this.loader.getMigration(record.version);
|
|
75
|
+
if (!migrationFile) {
|
|
76
|
+
throw new Error(`Migration file not found for version ${record.version}`);
|
|
77
|
+
}
|
|
78
|
+
console.log(`⬇️ Rolling back ${migrationFile.version}: ${migrationFile.name}`);
|
|
79
|
+
const context = this.createContext();
|
|
80
|
+
await migrationFile.migration.down(context);
|
|
81
|
+
await this.tracker.markAsRolledBack(migrationFile.version);
|
|
82
|
+
console.log(`✅ Rolled back ${migrationFile.version}: ${migrationFile.name}\n`);
|
|
83
|
+
rolledBack.push(migrationFile);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error(`❌ Failed to rollback ${record.version}: ${error.message}\n`);
|
|
87
|
+
await this.tracker.markAsFailed(record.version, error.message);
|
|
88
|
+
throw new Error(`Rollback of ${record.version} failed: ${error.message}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return rolledBack;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get migration status
|
|
95
|
+
*/
|
|
96
|
+
async status() {
|
|
97
|
+
await this.initialize();
|
|
98
|
+
const allMigrations = await this.loader.loadMigrations();
|
|
99
|
+
const appliedMigrations = await this.tracker.getAppliedMigrations();
|
|
100
|
+
const appliedMap = new Map(appliedMigrations.map((m) => [m.version, m]));
|
|
101
|
+
return allMigrations.map((migrationFile) => {
|
|
102
|
+
const record = appliedMap.get(migrationFile.version);
|
|
103
|
+
if (!record) {
|
|
104
|
+
return {
|
|
105
|
+
version: migrationFile.version,
|
|
106
|
+
name: migrationFile.name,
|
|
107
|
+
status: 'pending',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
return {
|
|
111
|
+
version: record.version,
|
|
112
|
+
name: record.name,
|
|
113
|
+
status: record.status,
|
|
114
|
+
appliedAt: record.appliedAt,
|
|
115
|
+
error: record.error,
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Get current version
|
|
121
|
+
*/
|
|
122
|
+
async getCurrentVersion() {
|
|
123
|
+
await this.initialize();
|
|
124
|
+
return this.tracker.getCurrentVersion();
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Reset all migrations (rollback everything)
|
|
128
|
+
*/
|
|
129
|
+
async reset() {
|
|
130
|
+
const appliedMigrations = await this.tracker.getAppliedMigrations();
|
|
131
|
+
const appliedCount = appliedMigrations.filter((m) => m.status === 'applied').length;
|
|
132
|
+
if (appliedCount === 0) {
|
|
133
|
+
console.log('✅ No migrations to reset');
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
console.log(`\n⚠️ Resetting ${appliedCount} migration(s)\n`);
|
|
137
|
+
await this.down(appliedCount);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Create migration context
|
|
141
|
+
*/
|
|
142
|
+
createContext() {
|
|
143
|
+
// Import DynamoDB commands
|
|
144
|
+
const { ScanCommand, QueryCommand, GetCommand, PutCommand, UpdateCommand, DeleteCommand, BatchGetCommand, BatchWriteCommand, TransactWriteCommand, TransactGetCommand, } = require('@aws-sdk/lib-dynamodb');
|
|
145
|
+
return {
|
|
146
|
+
client: this.client,
|
|
147
|
+
tableName: this.config.tableName,
|
|
148
|
+
tracker: this.tracker,
|
|
149
|
+
config: this.config,
|
|
150
|
+
dynamodb: {
|
|
151
|
+
ScanCommand,
|
|
152
|
+
QueryCommand,
|
|
153
|
+
GetCommand,
|
|
154
|
+
PutCommand,
|
|
155
|
+
UpdateCommand,
|
|
156
|
+
DeleteCommand,
|
|
157
|
+
BatchGetCommand,
|
|
158
|
+
BatchWriteCommand,
|
|
159
|
+
TransactWriteCommand,
|
|
160
|
+
TransactGetCommand,
|
|
161
|
+
},
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
exports.MigrationRunner = MigrationRunner;
|
|
166
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
import { MigrationTracker, MigrationRecord, SchemaChange, MigrationConfig } from '../types';
|
|
3
|
+
export declare class DynamoDBMigrationTracker implements MigrationTracker {
|
|
4
|
+
private client;
|
|
5
|
+
private tableName;
|
|
6
|
+
private trackingPrefix;
|
|
7
|
+
private gsi1Name;
|
|
8
|
+
constructor(client: DynamoDBDocumentClient, config: MigrationConfig);
|
|
9
|
+
initialize(): Promise<void>;
|
|
10
|
+
getAppliedMigrations(): Promise<MigrationRecord[]>;
|
|
11
|
+
getCurrentVersion(): Promise<string | null>;
|
|
12
|
+
markAsApplied(version: string, name: string, schemaDefinition?: Record<string, any>, schemaChanges?: SchemaChange[]): Promise<void>;
|
|
13
|
+
markAsRolledBack(version: string): Promise<void>;
|
|
14
|
+
markAsFailed(version: string, error: string): Promise<void>;
|
|
15
|
+
recordSchemaChange(change: SchemaChange): Promise<void>;
|
|
16
|
+
getMigration(version: string): Promise<MigrationRecord | null>;
|
|
17
|
+
isApplied(version: string): Promise<boolean>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE5F,qBAAa,wBAAyB,YAAW,gBAAgB;IAC/D,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAO7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB3B,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAclD,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAc3C,aAAa,CACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACtC,aAAa,CAAC,EAAE,YAAY,EAAE,GAC7B,OAAO,CAAC,IAAI,CAAC;IAuCV,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ChD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsB3D,kBAAkB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBvD,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;IAc9D,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAInD"}
|