@ftschopp/dynatable-migrations 1.0.0 ā 1.2.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/CHANGELOG.md +14 -0
- package/README.md +102 -134
- package/USAGE.md +199 -60
- package/dist/cli.js +7 -3
- package/dist/cli.js.map +1 -1
- package/dist/commands/down.d.ts +1 -1
- package/dist/commands/down.d.ts.map +1 -1
- package/dist/commands/down.js +5 -20
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +2 -17
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/up.d.ts +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +5 -20
- package/dist/commands/up.js.map +1 -1
- package/dist/core/client.d.ts +7 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +25 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/loader.d.ts +8 -0
- package/dist/core/loader.d.ts.map +1 -1
- package/dist/core/loader.js +76 -43
- package/dist/core/loader.js.map +1 -1
- package/dist/core/runner.d.ts +6 -2
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +124 -67
- package/dist/core/runner.js.map +1 -1
- package/dist/core/tracker.d.ts +20 -1
- package/dist/core/tracker.d.ts.map +1 -1
- package/dist/core/tracker.js +273 -83
- package/dist/core/tracker.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +10 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -3
- package/src/cli.ts +8 -3
- package/src/commands/down.ts +6 -22
- package/src/commands/status.ts +2 -19
- package/src/commands/up.ts +9 -22
- package/src/core/client.ts +24 -0
- package/src/core/loader.ts +88 -46
- package/src/core/runner.ts +151 -78
- package/src/core/tracker.ts +306 -94
- package/src/index.ts +2 -1
- package/src/types/index.ts +13 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"tracker.d.ts","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAS/D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAI5F,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;IACzB,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,eAAe;IAO7D,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBjC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAsCrC;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BlC;;OAEG;IACG,oBAAoB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;IAuBlD,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAcjD;;;OAGG;IACG,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,EAC9B,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAmHhB;;OAEG;IACG,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDhD,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA6C3D,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"}
|
package/dist/core/tracker.js
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DynamoDBMigrationTracker = void 0;
|
|
4
4
|
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
5
|
+
const LOCK_TTL_SECONDS = 300; // 5 minutes
|
|
5
6
|
class DynamoDBMigrationTracker {
|
|
6
7
|
constructor(client, config) {
|
|
8
|
+
this.lockId = null;
|
|
7
9
|
this.client = client;
|
|
8
10
|
this.tableName = config.tableName;
|
|
9
11
|
this.trackingPrefix = config.trackingPrefix || '_SCHEMA#VERSION';
|
|
@@ -27,15 +29,92 @@ class DynamoDBMigrationTracker {
|
|
|
27
29
|
}));
|
|
28
30
|
}
|
|
29
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Acquire a distributed lock to prevent concurrent migrations
|
|
34
|
+
*/
|
|
35
|
+
async acquireLock() {
|
|
36
|
+
const lockKey = {
|
|
37
|
+
PK: `${this.trackingPrefix}#LOCK`,
|
|
38
|
+
SK: `${this.trackingPrefix}#LOCK`,
|
|
39
|
+
};
|
|
40
|
+
const now = Date.now();
|
|
41
|
+
const expiresAt = now + LOCK_TTL_SECONDS * 1000;
|
|
42
|
+
this.lockId = `lock-${now}-${Math.random().toString(36).substring(7)}`;
|
|
43
|
+
try {
|
|
44
|
+
await this.client.send(new lib_dynamodb_1.PutCommand({
|
|
45
|
+
TableName: this.tableName,
|
|
46
|
+
Item: {
|
|
47
|
+
...lockKey,
|
|
48
|
+
lockId: this.lockId,
|
|
49
|
+
acquiredAt: new Date().toISOString(),
|
|
50
|
+
expiresAt,
|
|
51
|
+
},
|
|
52
|
+
// Only succeed if lock doesn't exist or has expired
|
|
53
|
+
ConditionExpression: 'attribute_not_exists(PK) OR expiresAt < :now',
|
|
54
|
+
ExpressionAttributeValues: {
|
|
55
|
+
':now': now,
|
|
56
|
+
},
|
|
57
|
+
}));
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (error.name === 'ConditionalCheckFailedException') {
|
|
62
|
+
this.lockId = null;
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
throw error;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Release the distributed lock
|
|
70
|
+
*/
|
|
71
|
+
async releaseLock() {
|
|
72
|
+
if (!this.lockId)
|
|
73
|
+
return;
|
|
74
|
+
const lockKey = {
|
|
75
|
+
PK: `${this.trackingPrefix}#LOCK`,
|
|
76
|
+
SK: `${this.trackingPrefix}#LOCK`,
|
|
77
|
+
};
|
|
78
|
+
try {
|
|
79
|
+
await this.client.send(new lib_dynamodb_1.DeleteCommand({
|
|
80
|
+
TableName: this.tableName,
|
|
81
|
+
Key: lockKey,
|
|
82
|
+
// Only delete if we own the lock
|
|
83
|
+
ConditionExpression: 'lockId = :lockId',
|
|
84
|
+
ExpressionAttributeValues: {
|
|
85
|
+
':lockId': this.lockId,
|
|
86
|
+
},
|
|
87
|
+
}));
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
// Lock may have expired or been taken by someone else
|
|
91
|
+
if (error.name !== 'ConditionalCheckFailedException') {
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
this.lockId = null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get all applied migrations with pagination support
|
|
101
|
+
*/
|
|
30
102
|
async getAppliedMigrations() {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
103
|
+
const items = [];
|
|
104
|
+
let lastKey;
|
|
105
|
+
do {
|
|
106
|
+
const result = await this.client.send(new lib_dynamodb_1.QueryCommand({
|
|
107
|
+
TableName: this.tableName,
|
|
108
|
+
KeyConditionExpression: 'PK = :pk',
|
|
109
|
+
ExpressionAttributeValues: {
|
|
110
|
+
':pk': this.trackingPrefix,
|
|
111
|
+
},
|
|
112
|
+
ExclusiveStartKey: lastKey,
|
|
113
|
+
}));
|
|
114
|
+
items.push(...(result.Items || []));
|
|
115
|
+
lastKey = result.LastEvaluatedKey;
|
|
116
|
+
} while (lastKey);
|
|
117
|
+
return items;
|
|
39
118
|
}
|
|
40
119
|
async getCurrentVersion() {
|
|
41
120
|
const result = await this.client.send(new lib_dynamodb_1.GetCommand({
|
|
@@ -47,92 +126,203 @@ class DynamoDBMigrationTracker {
|
|
|
47
126
|
}));
|
|
48
127
|
return result.Item?.currentVersion || null;
|
|
49
128
|
}
|
|
50
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Mark migration as applied using TransactWrite for atomicity
|
|
131
|
+
* Handles both new migrations and re-applying rolled back migrations
|
|
132
|
+
*/
|
|
133
|
+
async markAsApplied(version, name, schemaDefinition, schemaChanges, checksum) {
|
|
51
134
|
const now = new Date().toISOString();
|
|
52
|
-
//
|
|
53
|
-
await this.
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
135
|
+
// Check if migration record already exists (e.g., rolled back or failed)
|
|
136
|
+
const existing = await this.getMigration(version);
|
|
137
|
+
if (existing) {
|
|
138
|
+
// Update existing record (re-applying a rolled back or failed migration)
|
|
139
|
+
// Build dynamic update expression - DynamoDB doesn't accept undefined values
|
|
140
|
+
const setParts = ['#status = :status', 'appliedAt = :appliedAt', '#name = :name'];
|
|
141
|
+
const expressionValues = {
|
|
142
|
+
':status': 'applied',
|
|
143
|
+
':appliedAt': now,
|
|
144
|
+
':name': name,
|
|
145
|
+
};
|
|
146
|
+
if (schemaDefinition !== undefined) {
|
|
147
|
+
setParts.push('schemaDefinition = :schemaDef');
|
|
148
|
+
expressionValues[':schemaDef'] = schemaDefinition;
|
|
149
|
+
}
|
|
150
|
+
if (schemaChanges !== undefined) {
|
|
151
|
+
setParts.push('schemaChanges = :schemaChanges');
|
|
152
|
+
expressionValues[':schemaChanges'] = schemaChanges;
|
|
153
|
+
}
|
|
154
|
+
if (checksum !== undefined) {
|
|
155
|
+
setParts.push('checksum = :checksum');
|
|
156
|
+
expressionValues[':checksum'] = checksum;
|
|
157
|
+
}
|
|
158
|
+
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
159
|
+
TransactItems: [
|
|
160
|
+
{
|
|
161
|
+
Update: {
|
|
162
|
+
TableName: this.tableName,
|
|
163
|
+
Key: {
|
|
164
|
+
PK: this.trackingPrefix,
|
|
165
|
+
SK: version,
|
|
166
|
+
},
|
|
167
|
+
UpdateExpression: `SET ${setParts.join(', ')} REMOVE #error, failedAt, rolledBackAt`,
|
|
168
|
+
ExpressionAttributeNames: {
|
|
169
|
+
'#status': 'status',
|
|
170
|
+
'#name': 'name',
|
|
171
|
+
'#error': 'error',
|
|
172
|
+
},
|
|
173
|
+
ExpressionAttributeValues: expressionValues,
|
|
174
|
+
// Only allow re-applying if not currently applied
|
|
175
|
+
ConditionExpression: '#status <> :status',
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
Update: {
|
|
180
|
+
TableName: this.tableName,
|
|
181
|
+
Key: {
|
|
182
|
+
PK: `${this.trackingPrefix}#CURRENT`,
|
|
183
|
+
SK: `${this.trackingPrefix}#CURRENT`,
|
|
184
|
+
},
|
|
185
|
+
UpdateExpression: 'SET currentVersion = :version, updatedAt = :updatedAt, GSI1SK = :gsi1sk',
|
|
186
|
+
ExpressionAttributeValues: {
|
|
187
|
+
':version': version,
|
|
188
|
+
':updatedAt': now,
|
|
189
|
+
':gsi1sk': version,
|
|
190
|
+
},
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
}));
|
|
195
|
+
}
|
|
196
|
+
else {
|
|
197
|
+
// Create new migration record
|
|
198
|
+
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
199
|
+
TransactItems: [
|
|
200
|
+
{
|
|
201
|
+
Put: {
|
|
202
|
+
TableName: this.tableName,
|
|
203
|
+
Item: {
|
|
204
|
+
PK: this.trackingPrefix,
|
|
205
|
+
SK: version,
|
|
206
|
+
version,
|
|
207
|
+
name,
|
|
208
|
+
timestamp: now,
|
|
209
|
+
appliedAt: now,
|
|
210
|
+
status: 'applied',
|
|
211
|
+
schemaDefinition,
|
|
212
|
+
schemaChanges,
|
|
213
|
+
checksum,
|
|
214
|
+
},
|
|
215
|
+
// Ensure migration wasn't already applied
|
|
216
|
+
ConditionExpression: 'attribute_not_exists(PK)',
|
|
217
|
+
},
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
Update: {
|
|
221
|
+
TableName: this.tableName,
|
|
222
|
+
Key: {
|
|
223
|
+
PK: `${this.trackingPrefix}#CURRENT`,
|
|
224
|
+
SK: `${this.trackingPrefix}#CURRENT`,
|
|
225
|
+
},
|
|
226
|
+
UpdateExpression: 'SET currentVersion = :version, updatedAt = :updatedAt, GSI1SK = :gsi1sk',
|
|
227
|
+
ExpressionAttributeValues: {
|
|
228
|
+
':version': version,
|
|
229
|
+
':updatedAt': now,
|
|
230
|
+
':gsi1sk': version,
|
|
231
|
+
},
|
|
232
|
+
},
|
|
233
|
+
},
|
|
234
|
+
],
|
|
235
|
+
}));
|
|
236
|
+
}
|
|
81
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* Mark migration as rolled back using TransactWrite for atomicity
|
|
240
|
+
*/
|
|
82
241
|
async markAsRolledBack(version) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
Key: {
|
|
86
|
-
PK: this.trackingPrefix,
|
|
87
|
-
SK: version,
|
|
88
|
-
},
|
|
89
|
-
UpdateExpression: 'SET #status = :status, rolledBackAt = :timestamp',
|
|
90
|
-
ExpressionAttributeNames: {
|
|
91
|
-
'#status': 'status',
|
|
92
|
-
},
|
|
93
|
-
ExpressionAttributeValues: {
|
|
94
|
-
':status': 'rolled_back',
|
|
95
|
-
':timestamp': new Date().toISOString(),
|
|
96
|
-
},
|
|
97
|
-
}));
|
|
98
|
-
// Find previous version and update current pointer
|
|
242
|
+
const now = new Date().toISOString();
|
|
243
|
+
// Find previous version
|
|
99
244
|
const migrations = await this.getAppliedMigrations();
|
|
100
245
|
const appliedMigrations = migrations
|
|
101
246
|
.filter((m) => m.status === 'applied' && m.version !== version)
|
|
102
247
|
.sort((a, b) => b.version.localeCompare(a.version));
|
|
103
248
|
const previousVersion = appliedMigrations[0]?.version || 'v0000';
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
249
|
+
// Use TransactWrite to atomically update record and pointer
|
|
250
|
+
await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
|
|
251
|
+
TransactItems: [
|
|
252
|
+
{
|
|
253
|
+
Update: {
|
|
254
|
+
TableName: this.tableName,
|
|
255
|
+
Key: {
|
|
256
|
+
PK: this.trackingPrefix,
|
|
257
|
+
SK: version,
|
|
258
|
+
},
|
|
259
|
+
UpdateExpression: 'SET #status = :status, rolledBackAt = :timestamp',
|
|
260
|
+
ExpressionAttributeNames: {
|
|
261
|
+
'#status': 'status',
|
|
262
|
+
},
|
|
263
|
+
ExpressionAttributeValues: {
|
|
264
|
+
':status': 'rolled_back',
|
|
265
|
+
':timestamp': now,
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
Update: {
|
|
271
|
+
TableName: this.tableName,
|
|
272
|
+
Key: {
|
|
273
|
+
PK: `${this.trackingPrefix}#CURRENT`,
|
|
274
|
+
SK: `${this.trackingPrefix}#CURRENT`,
|
|
275
|
+
},
|
|
276
|
+
UpdateExpression: 'SET currentVersion = :version, updatedAt = :updatedAt, GSI1SK = :gsi1sk',
|
|
277
|
+
ExpressionAttributeValues: {
|
|
278
|
+
':version': previousVersion,
|
|
279
|
+
':updatedAt': now,
|
|
280
|
+
':gsi1sk': previousVersion,
|
|
281
|
+
},
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
],
|
|
116
285
|
}));
|
|
117
286
|
}
|
|
118
287
|
async markAsFailed(version, error) {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
288
|
+
// Check if the migration record exists first
|
|
289
|
+
const existing = await this.getMigration(version);
|
|
290
|
+
if (existing) {
|
|
291
|
+
// Update existing record
|
|
292
|
+
await this.client.send(new lib_dynamodb_1.UpdateCommand({
|
|
293
|
+
TableName: this.tableName,
|
|
294
|
+
Key: {
|
|
295
|
+
PK: this.trackingPrefix,
|
|
296
|
+
SK: version,
|
|
297
|
+
},
|
|
298
|
+
UpdateExpression: 'SET #status = :status, #error = :error, failedAt = :timestamp',
|
|
299
|
+
ExpressionAttributeNames: {
|
|
300
|
+
'#status': 'status',
|
|
301
|
+
'#error': 'error',
|
|
302
|
+
},
|
|
303
|
+
ExpressionAttributeValues: {
|
|
304
|
+
':status': 'failed',
|
|
305
|
+
':error': error,
|
|
306
|
+
':timestamp': new Date().toISOString(),
|
|
307
|
+
},
|
|
308
|
+
}));
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
// Create new record for failed migration
|
|
312
|
+
await this.client.send(new lib_dynamodb_1.PutCommand({
|
|
313
|
+
TableName: this.tableName,
|
|
314
|
+
Item: {
|
|
315
|
+
PK: this.trackingPrefix,
|
|
316
|
+
SK: version,
|
|
317
|
+
version,
|
|
318
|
+
name: 'unknown',
|
|
319
|
+
status: 'failed',
|
|
320
|
+
error,
|
|
321
|
+
failedAt: new Date().toISOString(),
|
|
322
|
+
timestamp: new Date().toISOString(),
|
|
323
|
+
},
|
|
324
|
+
}));
|
|
325
|
+
}
|
|
136
326
|
}
|
|
137
327
|
async recordSchemaChange(change) {
|
|
138
328
|
const currentVersion = await this.getCurrentVersion();
|
package/dist/core/tracker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
export * from './types';
|
|
6
6
|
export { DynamoDBMigrationTracker } from './core/tracker';
|
|
7
7
|
export { MigrationLoader } from './core/loader';
|
|
8
|
-
export { MigrationRunner } from './core/runner';
|
|
8
|
+
export { MigrationRunner, type RunOptions } from './core/runner';
|
|
9
9
|
export { ConfigLoader, loadConfig } from './core/config';
|
|
10
|
+
export { createDynamoDBClient } from './core/client';
|
|
10
11
|
export { generateMigrationTemplate } from './templates/migration';
|
|
11
12
|
export { createMigration } from './commands/create';
|
|
12
13
|
export { runMigrations } from './commands/up';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAGlE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -18,7 +18,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.initProject = exports.showStatus = exports.rollbackMigrations = exports.runMigrations = exports.createMigration = exports.generateMigrationTemplate = exports.loadConfig = exports.ConfigLoader = exports.MigrationRunner = exports.MigrationLoader = exports.DynamoDBMigrationTracker = void 0;
|
|
21
|
+
exports.initProject = exports.showStatus = exports.rollbackMigrations = exports.runMigrations = exports.createMigration = exports.generateMigrationTemplate = exports.createDynamoDBClient = exports.loadConfig = exports.ConfigLoader = exports.MigrationRunner = exports.MigrationLoader = exports.DynamoDBMigrationTracker = void 0;
|
|
22
22
|
// Types
|
|
23
23
|
__exportStar(require("./types"), exports);
|
|
24
24
|
// Core
|
|
@@ -31,6 +31,8 @@ Object.defineProperty(exports, "MigrationRunner", { enumerable: true, get: funct
|
|
|
31
31
|
var config_1 = require("./core/config");
|
|
32
32
|
Object.defineProperty(exports, "ConfigLoader", { enumerable: true, get: function () { return config_1.ConfigLoader; } });
|
|
33
33
|
Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
|
|
34
|
+
var client_1 = require("./core/client");
|
|
35
|
+
Object.defineProperty(exports, "createDynamoDBClient", { enumerable: true, get: function () { return client_1.createDynamoDBClient; } });
|
|
34
36
|
// Template
|
|
35
37
|
var migration_1 = require("./templates/migration");
|
|
36
38
|
Object.defineProperty(exports, "generateMigrationTemplate", { enumerable: true, get: function () { return migration_1.generateMigrationTemplate; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,OAAO;AACP,0CAA0D;AAAjD,mHAAA,wBAAwB,OAAA;AACjC,wCAAgD;AAAvC,yGAAA,eAAe,OAAA;AACxB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,QAAQ;AACR,0CAAwB;AAExB,OAAO;AACP,0CAA0D;AAAjD,mHAAA,wBAAwB,OAAA;AACjC,wCAAgD;AAAvC,yGAAA,eAAe,OAAA;AACxB,wCAAiE;AAAxD,yGAAA,eAAe,OAAA;AACxB,wCAAyD;AAAhD,sGAAA,YAAY,OAAA;AAAE,oGAAA,UAAU,OAAA;AACjC,wCAAqD;AAA5C,8GAAA,oBAAoB,OAAA;AAE7B,WAAW;AACX,mDAAkE;AAAzD,sHAAA,yBAAyB,OAAA;AAElC,kCAAkC;AAClC,4CAAoD;AAA3C,yGAAA,eAAe,OAAA;AACxB,oCAA8C;AAArC,mGAAA,aAAa,OAAA;AACtB,wCAAqD;AAA5C,0GAAA,kBAAkB,OAAA;AAC3B,4CAA+C;AAAtC,oGAAA,UAAU,OAAA;AACnB,wCAA8C;AAArC,mGAAA,WAAW,OAAA"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -112,10 +112,18 @@ export interface MigrationTracker {
|
|
|
112
112
|
* Get current schema version
|
|
113
113
|
*/
|
|
114
114
|
getCurrentVersion(): Promise<string | null>;
|
|
115
|
+
/**
|
|
116
|
+
* Acquire a distributed lock
|
|
117
|
+
*/
|
|
118
|
+
acquireLock(): Promise<boolean>;
|
|
119
|
+
/**
|
|
120
|
+
* Release the distributed lock
|
|
121
|
+
*/
|
|
122
|
+
releaseLock(): Promise<void>;
|
|
115
123
|
/**
|
|
116
124
|
* Mark migration as applied
|
|
117
125
|
*/
|
|
118
|
-
markAsApplied(version: string, name: string, schemaDefinition?: Record<string, any>, schemaChanges?: SchemaChange[]): Promise<void>;
|
|
126
|
+
markAsApplied(version: string, name: string, schemaDefinition?: Record<string, any>, schemaChanges?: SchemaChange[], checksum?: string): Promise<void>;
|
|
119
127
|
/**
|
|
120
128
|
* Mark migration as rolled back
|
|
121
129
|
*/
|
|
@@ -145,6 +153,7 @@ export interface MigrationFile {
|
|
|
145
153
|
name: string;
|
|
146
154
|
filePath: string;
|
|
147
155
|
migration: Migration;
|
|
156
|
+
checksum?: string;
|
|
148
157
|
}
|
|
149
158
|
/**
|
|
150
159
|
* Migration status
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ftschopp/dynatable-migrations",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "DynamoDB migration tool for single table design with schema versioning",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -35,9 +35,7 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@aws-sdk/client-dynamodb": "^3.965.0",
|
|
37
37
|
"@aws-sdk/lib-dynamodb": "^3.965.0",
|
|
38
|
-
"chalk": "^5.6.2",
|
|
39
38
|
"commander": "^14.0.2",
|
|
40
|
-
"ora": "^9.0.0",
|
|
41
39
|
"ts-node": "^10.9.2"
|
|
42
40
|
}
|
|
43
41
|
}
|
package/src/cli.ts
CHANGED
|
@@ -8,12 +8,15 @@ import { rollbackMigrations } from './commands/down';
|
|
|
8
8
|
import { showStatus } from './commands/status';
|
|
9
9
|
import { initProject } from './commands/init';
|
|
10
10
|
|
|
11
|
+
// Read version from package.json
|
|
12
|
+
const packageJson = require('../package.json');
|
|
13
|
+
|
|
11
14
|
const program = new Command();
|
|
12
15
|
|
|
13
16
|
program
|
|
14
17
|
.name('dynatable-migrate')
|
|
15
18
|
.description('DynamoDB migration tool for single table design')
|
|
16
|
-
.version(
|
|
19
|
+
.version(packageJson.version);
|
|
17
20
|
|
|
18
21
|
// Init command
|
|
19
22
|
program
|
|
@@ -60,11 +63,12 @@ program
|
|
|
60
63
|
.description('Run pending migrations')
|
|
61
64
|
.option('-c, --config <path>', 'Path to config file')
|
|
62
65
|
.option('-l, --limit <number>', 'Limit number of migrations to run')
|
|
66
|
+
.option('-d, --dry-run', 'Show what would be done without making changes')
|
|
63
67
|
.action(async (options) => {
|
|
64
68
|
try {
|
|
65
69
|
const config = await loadConfig(options.config);
|
|
66
70
|
const limit = options.limit ? parseInt(options.limit, 10) : undefined;
|
|
67
|
-
await runMigrations(config, limit);
|
|
71
|
+
await runMigrations(config, limit, options.dryRun);
|
|
68
72
|
} catch (error: any) {
|
|
69
73
|
console.error(`Error: ${error.message}`);
|
|
70
74
|
process.exit(1);
|
|
@@ -77,11 +81,12 @@ program
|
|
|
77
81
|
.description('Rollback migrations')
|
|
78
82
|
.option('-c, --config <path>', 'Path to config file')
|
|
79
83
|
.option('-s, --steps <number>', 'Number of migrations to rollback', '1')
|
|
84
|
+
.option('-d, --dry-run', 'Show what would be done without making changes')
|
|
80
85
|
.action(async (options) => {
|
|
81
86
|
try {
|
|
82
87
|
const config = await loadConfig(options.config);
|
|
83
88
|
const steps = parseInt(options.steps, 10);
|
|
84
|
-
await rollbackMigrations(config, steps);
|
|
89
|
+
await rollbackMigrations(config, steps, options.dryRun);
|
|
85
90
|
} catch (error: any) {
|
|
86
91
|
console.error(`Error: ${error.message}`);
|
|
87
92
|
process.exit(1);
|
package/src/commands/down.ts
CHANGED
|
@@ -1,35 +1,19 @@
|
|
|
1
|
-
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
|
-
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
3
1
|
import { MigrationRunner } from '../core/runner';
|
|
2
|
+
import { createDynamoDBClient } from '../core/client';
|
|
4
3
|
import { MigrationConfig } from '../types';
|
|
5
4
|
|
|
6
5
|
export async function rollbackMigrations(
|
|
7
6
|
config: MigrationConfig,
|
|
8
|
-
steps: number = 1
|
|
7
|
+
steps: number = 1,
|
|
8
|
+
dryRun: boolean = false
|
|
9
9
|
): Promise<void> {
|
|
10
|
-
|
|
11
|
-
const ddbClient = new DynamoDBClient({
|
|
12
|
-
region: config.client.region,
|
|
13
|
-
endpoint: config.client.endpoint,
|
|
14
|
-
credentials: config.client.credentials,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const client = DynamoDBDocumentClient.from(ddbClient, {
|
|
18
|
-
marshallOptions: {
|
|
19
|
-
removeUndefinedValues: true,
|
|
20
|
-
convertClassInstanceToMap: true,
|
|
21
|
-
},
|
|
22
|
-
unmarshallOptions: {
|
|
23
|
-
wrapNumbers: false,
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
|
|
10
|
+
const client = createDynamoDBClient(config);
|
|
27
11
|
const runner = new MigrationRunner(client, config);
|
|
28
12
|
|
|
29
13
|
try {
|
|
30
|
-
const rolledBack = await runner.down(steps);
|
|
14
|
+
const rolledBack = await runner.down(steps, dryRun);
|
|
31
15
|
|
|
32
|
-
if (rolledBack.length > 0) {
|
|
16
|
+
if (!dryRun && rolledBack.length > 0) {
|
|
33
17
|
console.log(`\nš Successfully rolled back ${rolledBack.length} migration(s)`);
|
|
34
18
|
|
|
35
19
|
const currentVersion = await runner.getCurrentVersion();
|