@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.
Files changed (73) hide show
  1. package/.gitkeep +0 -0
  2. package/CHANGELOG.md +13 -0
  3. package/README.md +421 -0
  4. package/USAGE.md +557 -0
  5. package/bin/dynatable-migrate.js +30 -0
  6. package/dist/cli.d.ts +3 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +104 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/commands/create.d.ts +2 -0
  11. package/dist/commands/create.d.ts.map +1 -0
  12. package/dist/commands/create.js +123 -0
  13. package/dist/commands/create.js.map +1 -0
  14. package/dist/commands/down.d.ts +3 -0
  15. package/dist/commands/down.d.ts.map +1 -0
  16. package/dist/commands/down.js +37 -0
  17. package/dist/commands/down.js.map +1 -0
  18. package/dist/commands/init.d.ts +2 -0
  19. package/dist/commands/init.d.ts.map +1 -0
  20. package/dist/commands/init.js +70 -0
  21. package/dist/commands/init.js.map +1 -0
  22. package/dist/commands/status.d.ts +3 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +84 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/commands/up.d.ts +3 -0
  27. package/dist/commands/up.d.ts.map +1 -0
  28. package/dist/commands/up.js +37 -0
  29. package/dist/commands/up.js.map +1 -0
  30. package/dist/core/config.d.ts +29 -0
  31. package/dist/core/config.d.ts.map +1 -0
  32. package/dist/core/config.js +160 -0
  33. package/dist/core/config.js.map +1 -0
  34. package/dist/core/loader.d.ts +47 -0
  35. package/dist/core/loader.d.ts.map +1 -0
  36. package/dist/core/loader.js +226 -0
  37. package/dist/core/loader.js.map +1 -0
  38. package/dist/core/runner.d.ts +38 -0
  39. package/dist/core/runner.d.ts.map +1 -0
  40. package/dist/core/runner.js +166 -0
  41. package/dist/core/runner.js.map +1 -0
  42. package/dist/core/tracker.d.ts +19 -0
  43. package/dist/core/tracker.d.ts.map +1 -0
  44. package/dist/core/tracker.js +172 -0
  45. package/dist/core/tracker.js.map +1 -0
  46. package/dist/index.d.ts +16 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +48 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/templates/migration.d.ts +5 -0
  51. package/dist/templates/migration.d.ts.map +1 -0
  52. package/dist/templates/migration.js +96 -0
  53. package/dist/templates/migration.js.map +1 -0
  54. package/dist/types/index.d.ts +159 -0
  55. package/dist/types/index.d.ts.map +1 -0
  56. package/dist/types/index.js +3 -0
  57. package/dist/types/index.js.map +1 -0
  58. package/migrations/.gitkeep +0 -0
  59. package/package.json +43 -0
  60. package/src/cli.ts +106 -0
  61. package/src/commands/create.ts +110 -0
  62. package/src/commands/down.ts +42 -0
  63. package/src/commands/init.ts +37 -0
  64. package/src/commands/status.ts +92 -0
  65. package/src/commands/up.ts +39 -0
  66. package/src/core/config.ts +140 -0
  67. package/src/core/loader.ts +233 -0
  68. package/src/core/runner.ts +223 -0
  69. package/src/core/tracker.ts +219 -0
  70. package/src/index.ts +23 -0
  71. package/src/templates/migration.ts +92 -0
  72. package/src/types/index.ts +196 -0
  73. 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"}