@ftschopp/dynatable-migrations 1.2.3 → 1.2.5

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.
@@ -1,9 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DynamoDBMigrationTracker = void 0;
3
+ exports.DynamoDBMigrationTracker = exports.DEFAULT_LOCK_TTL_SECONDS = void 0;
4
4
  const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
5
5
  const semver_1 = require("./semver");
6
- const LOCK_TTL_SECONDS = 300; // 5 minutes
6
+ const errors_1 = require("./errors");
7
+ /** Default lock TTL in seconds. Configurable via MigrationConfig.lockTtlSeconds. */
8
+ exports.DEFAULT_LOCK_TTL_SECONDS = 300; // 5 minutes
7
9
  class DynamoDBMigrationTracker {
8
10
  constructor(client, config) {
9
11
  this.lockId = null;
@@ -11,6 +13,34 @@ class DynamoDBMigrationTracker {
11
13
  this.tableName = config.tableName;
12
14
  this.trackingPrefix = config.trackingPrefix || '_SCHEMA#VERSION';
13
15
  this.gsi1Name = config.gsi1Name || 'GSI1';
16
+ this.lockTtlSeconds = config.lockTtlSeconds ?? exports.DEFAULT_LOCK_TTL_SECONDS;
17
+ }
18
+ get lockKey() {
19
+ return {
20
+ PK: `${this.trackingPrefix}#LOCK`,
21
+ SK: `${this.trackingPrefix}#LOCK`,
22
+ };
23
+ }
24
+ /** Throws if there is no active lock. Call before any tracker write. */
25
+ requireLock() {
26
+ if (!this.lockId) {
27
+ throw new Error('Tracker has no active lock; refusing to issue tracker mutations. ' +
28
+ 'Call acquireLock() first.');
29
+ }
30
+ }
31
+ /** Builds a TransactWrite ConditionCheck that asserts we still own the lock. */
32
+ lockOwnershipCheck() {
33
+ this.requireLock();
34
+ return {
35
+ ConditionCheck: {
36
+ TableName: this.tableName,
37
+ Key: this.lockKey,
38
+ ConditionExpression: 'lockId = :lockId',
39
+ ExpressionAttributeValues: {
40
+ ':lockId': this.lockId,
41
+ },
42
+ },
43
+ };
14
44
  }
15
45
  async initialize() {
16
46
  // Check if current version pointer exists, if not create it
@@ -34,24 +64,21 @@ class DynamoDBMigrationTracker {
34
64
  * Acquire a distributed lock to prevent concurrent migrations
35
65
  */
36
66
  async acquireLock() {
37
- const lockKey = {
38
- PK: `${this.trackingPrefix}#LOCK`,
39
- SK: `${this.trackingPrefix}#LOCK`,
40
- };
41
67
  const now = Date.now();
42
- const expiresAt = now + LOCK_TTL_SECONDS * 1000;
68
+ const expiresAt = now + this.lockTtlSeconds * 1000;
43
69
  this.lockId = `lock-${now}-${Math.random().toString(36).substring(7)}`;
44
70
  try {
45
71
  await this.client.send(new lib_dynamodb_1.PutCommand({
46
72
  TableName: this.tableName,
47
73
  Item: {
48
- ...lockKey,
74
+ ...this.lockKey,
49
75
  lockId: this.lockId,
50
76
  acquiredAt: new Date().toISOString(),
51
77
  expiresAt,
52
78
  },
53
- // Only succeed if lock doesn't exist or has expired
54
- ConditionExpression: 'attribute_not_exists(PK) OR expiresAt < :now',
79
+ // Only succeed if lock doesn't exist or has expired. The `<=`
80
+ // covers the boundary where two clocks read the exact ms.
81
+ ConditionExpression: 'attribute_not_exists(PK) OR expiresAt <= :now',
55
82
  ExpressionAttributeValues: {
56
83
  ':now': now,
57
84
  },
@@ -66,20 +93,37 @@ class DynamoDBMigrationTracker {
66
93
  throw error;
67
94
  }
68
95
  }
96
+ /**
97
+ * Extend the lock's expiration by another `lockTtlSeconds`. Throws
98
+ * `ConditionalCheckFailedException` if another worker has already taken
99
+ * the lock — callers should treat that as "we lost the race; stop
100
+ * making writes". Silent no-op if no lock is currently held.
101
+ */
102
+ async refreshLock() {
103
+ if (!this.lockId)
104
+ return;
105
+ const newExpiresAt = Date.now() + this.lockTtlSeconds * 1000;
106
+ await this.client.send(new lib_dynamodb_1.UpdateCommand({
107
+ TableName: this.tableName,
108
+ Key: this.lockKey,
109
+ UpdateExpression: 'SET expiresAt = :exp',
110
+ ConditionExpression: 'lockId = :lockId',
111
+ ExpressionAttributeValues: {
112
+ ':exp': newExpiresAt,
113
+ ':lockId': this.lockId,
114
+ },
115
+ }));
116
+ }
69
117
  /**
70
118
  * Release the distributed lock
71
119
  */
72
120
  async releaseLock() {
73
121
  if (!this.lockId)
74
122
  return;
75
- const lockKey = {
76
- PK: `${this.trackingPrefix}#LOCK`,
77
- SK: `${this.trackingPrefix}#LOCK`,
78
- };
79
123
  try {
80
124
  await this.client.send(new lib_dynamodb_1.DeleteCommand({
81
125
  TableName: this.tableName,
82
- Key: lockKey,
126
+ Key: this.lockKey,
83
127
  // Only delete if we own the lock
84
128
  ConditionExpression: 'lockId = :lockId',
85
129
  ExpressionAttributeValues: {
@@ -132,114 +176,159 @@ class DynamoDBMigrationTracker {
132
176
  * Handles both new migrations and re-applying rolled back migrations
133
177
  */
134
178
  async markAsApplied(version, name, schemaDefinition, schemaChanges, checksum) {
179
+ this.requireLock();
135
180
  const now = new Date().toISOString();
136
181
  // Check if migration record already exists (e.g., rolled back or failed)
137
182
  const existing = await this.getMigration(version);
138
- if (existing) {
139
- // Update existing record (re-applying a rolled back or failed migration)
140
- // Build dynamic update expression - DynamoDB doesn't accept undefined values
141
- const setParts = ['#status = :status', 'appliedAt = :appliedAt', '#name = :name'];
142
- const expressionValues = {
143
- ':status': 'applied',
144
- ':appliedAt': now,
145
- ':name': name,
146
- };
147
- if (schemaDefinition !== undefined) {
148
- setParts.push('schemaDefinition = :schemaDef');
149
- expressionValues[':schemaDef'] = schemaDefinition;
150
- }
151
- if (schemaChanges !== undefined) {
152
- setParts.push('schemaChanges = :schemaChanges');
153
- expressionValues[':schemaChanges'] = schemaChanges;
154
- }
155
- if (checksum !== undefined) {
156
- setParts.push('checksum = :checksum');
157
- expressionValues[':checksum'] = checksum;
158
- }
159
- await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
160
- TransactItems: [
161
- {
162
- Update: {
163
- TableName: this.tableName,
164
- Key: {
165
- PK: this.trackingPrefix,
166
- SK: version,
167
- },
168
- UpdateExpression: `SET ${setParts.join(', ')} REMOVE #error, failedAt, rolledBackAt`,
169
- ExpressionAttributeNames: {
170
- '#status': 'status',
171
- '#name': 'name',
172
- '#error': 'error',
183
+ try {
184
+ if (existing) {
185
+ // Update existing record (re-applying a rolled back or failed migration)
186
+ // Build dynamic update expression - DynamoDB doesn't accept undefined values
187
+ const setParts = ['#status = :status', 'appliedAt = :appliedAt', '#name = :name'];
188
+ const expressionValues = {
189
+ ':status': 'applied',
190
+ ':appliedAt': now,
191
+ ':name': name,
192
+ };
193
+ if (schemaDefinition !== undefined) {
194
+ setParts.push('schemaDefinition = :schemaDef');
195
+ expressionValues[':schemaDef'] = schemaDefinition;
196
+ }
197
+ if (schemaChanges !== undefined) {
198
+ setParts.push('schemaChanges = :schemaChanges');
199
+ expressionValues[':schemaChanges'] = schemaChanges;
200
+ }
201
+ if (checksum !== undefined) {
202
+ setParts.push('checksum = :checksum');
203
+ expressionValues[':checksum'] = checksum;
204
+ }
205
+ await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
206
+ TransactItems: [
207
+ this.lockOwnershipCheck(),
208
+ {
209
+ Update: {
210
+ TableName: this.tableName,
211
+ Key: {
212
+ PK: this.trackingPrefix,
213
+ SK: version,
214
+ },
215
+ UpdateExpression: `SET ${setParts.join(', ')} REMOVE #error, failedAt, rolledBackAt`,
216
+ ExpressionAttributeNames: {
217
+ '#status': 'status',
218
+ '#name': 'name',
219
+ '#error': 'error',
220
+ },
221
+ ExpressionAttributeValues: expressionValues,
222
+ // Only allow re-applying if not currently applied
223
+ ConditionExpression: '#status <> :status',
173
224
  },
174
- ExpressionAttributeValues: expressionValues,
175
- // Only allow re-applying if not currently applied
176
- ConditionExpression: '#status <> :status',
177
225
  },
178
- },
179
- {
180
- Update: {
181
- TableName: this.tableName,
182
- Key: {
183
- PK: `${this.trackingPrefix}#CURRENT`,
184
- SK: `${this.trackingPrefix}#CURRENT`,
185
- },
186
- UpdateExpression: 'SET currentVersion = :version, updatedAt = :updatedAt, GSI1SK = :gsi1sk',
187
- ExpressionAttributeValues: {
188
- ':version': version,
189
- ':updatedAt': now,
190
- ':gsi1sk': version,
226
+ {
227
+ Update: {
228
+ TableName: this.tableName,
229
+ Key: {
230
+ PK: `${this.trackingPrefix}#CURRENT`,
231
+ SK: `${this.trackingPrefix}#CURRENT`,
232
+ },
233
+ UpdateExpression: 'SET currentVersion = :version, updatedAt = :updatedAt, GSI1SK = :gsi1sk',
234
+ ExpressionAttributeValues: {
235
+ ':version': version,
236
+ ':updatedAt': now,
237
+ ':gsi1sk': version,
238
+ },
191
239
  },
192
240
  },
193
- },
194
- ],
195
- }));
196
- }
197
- else {
198
- // Create new migration record
199
- await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
200
- TransactItems: [
201
- {
202
- Put: {
203
- TableName: this.tableName,
204
- Item: {
205
- PK: this.trackingPrefix,
206
- SK: version,
207
- version,
208
- name,
209
- timestamp: now,
210
- appliedAt: now,
211
- status: 'applied',
212
- schemaDefinition,
213
- schemaChanges,
214
- checksum,
241
+ ],
242
+ }));
243
+ }
244
+ else {
245
+ // Create new migration record
246
+ await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
247
+ TransactItems: [
248
+ this.lockOwnershipCheck(),
249
+ {
250
+ Put: {
251
+ TableName: this.tableName,
252
+ Item: {
253
+ PK: this.trackingPrefix,
254
+ SK: version,
255
+ version,
256
+ name,
257
+ timestamp: now,
258
+ appliedAt: now,
259
+ status: 'applied',
260
+ schemaDefinition,
261
+ schemaChanges,
262
+ checksum,
263
+ },
264
+ // Ensure migration wasn't already applied (uniqueness on
265
+ // SK; PK is shared across all migration rows).
266
+ ConditionExpression: 'attribute_not_exists(SK)',
215
267
  },
216
- // Ensure migration wasn't already applied
217
- ConditionExpression: 'attribute_not_exists(PK)',
218
268
  },
219
- },
220
- {
221
- Update: {
222
- TableName: this.tableName,
223
- Key: {
224
- PK: `${this.trackingPrefix}#CURRENT`,
225
- SK: `${this.trackingPrefix}#CURRENT`,
226
- },
227
- UpdateExpression: 'SET currentVersion = :version, updatedAt = :updatedAt, GSI1SK = :gsi1sk',
228
- ExpressionAttributeValues: {
229
- ':version': version,
230
- ':updatedAt': now,
231
- ':gsi1sk': version,
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': version,
279
+ ':updatedAt': now,
280
+ ':gsi1sk': version,
281
+ },
232
282
  },
233
283
  },
234
- },
235
- ],
236
- }));
284
+ ],
285
+ }));
286
+ }
287
+ }
288
+ catch (err) {
289
+ await this.handleMarkAsAppliedCancellation(err, version);
237
290
  }
238
291
  }
292
+ /**
293
+ * Inspect a `TransactionCanceledException` raised by `markAsApplied` and
294
+ * either swallow it (idempotent re-apply) or re-throw a typed error.
295
+ *
296
+ * The TransactWrite items are: [lockOwnershipCheck, migrationRow, currentPointer].
297
+ * Each item produces an entry in `CancellationReasons`.
298
+ * - reasons[0] failing → the lock was lost → MigrationLockLostError.
299
+ * - reasons[1] failing → the migration row already exists in a state the
300
+ * write refused. Re-fetch the record:
301
+ * * status === 'applied' → idempotent re-apply, return silently.
302
+ * * other states → MigrationAlreadyAppliedError with the
303
+ * current state, so the caller can decide what to do.
304
+ */
305
+ async handleMarkAsAppliedCancellation(err, version) {
306
+ const error = err;
307
+ if (error?.name !== 'TransactionCanceledException') {
308
+ throw err;
309
+ }
310
+ const reasons = error.CancellationReasons ?? [];
311
+ const lockReason = reasons[0];
312
+ const migrationReason = reasons[1];
313
+ if (lockReason?.Code === 'ConditionalCheckFailed') {
314
+ throw new errors_1.MigrationLockLostError(version);
315
+ }
316
+ if (migrationReason?.Code === 'ConditionalCheckFailed') {
317
+ const current = await this.getMigration(version);
318
+ if (current?.status === 'applied') {
319
+ // Either we re-tried our own write or another worker applied the same
320
+ // version. Either way, the desired post-state is already satisfied.
321
+ return;
322
+ }
323
+ throw new errors_1.MigrationAlreadyAppliedError(version, current?.status);
324
+ }
325
+ throw err;
326
+ }
239
327
  /**
240
328
  * Mark migration as rolled back using TransactWrite for atomicity
241
329
  */
242
330
  async markAsRolledBack(version) {
331
+ this.requireLock();
243
332
  const now = new Date().toISOString();
244
333
  // Find previous version
245
334
  const migrations = await this.getAppliedMigrations();
@@ -250,6 +339,7 @@ class DynamoDBMigrationTracker {
250
339
  // Use TransactWrite to atomically update record and pointer
251
340
  await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
252
341
  TransactItems: [
342
+ this.lockOwnershipCheck(),
253
343
  {
254
344
  Update: {
255
345
  TableName: this.tableName,
@@ -286,62 +376,86 @@ class DynamoDBMigrationTracker {
286
376
  }));
287
377
  }
288
378
  async markAsFailed(version, error) {
379
+ this.requireLock();
289
380
  // Check if the migration record exists first
290
381
  const existing = await this.getMigration(version);
382
+ const now = new Date().toISOString();
291
383
  if (existing) {
292
- // Update existing record
293
- await this.client.send(new lib_dynamodb_1.UpdateCommand({
294
- TableName: this.tableName,
295
- Key: {
296
- PK: this.trackingPrefix,
297
- SK: version,
298
- },
299
- UpdateExpression: 'SET #status = :status, #error = :error, failedAt = :timestamp',
300
- ExpressionAttributeNames: {
301
- '#status': 'status',
302
- '#error': 'error',
303
- },
304
- ExpressionAttributeValues: {
305
- ':status': 'failed',
306
- ':error': error,
307
- ':timestamp': new Date().toISOString(),
308
- },
384
+ // Update existing record, gated by lock ownership
385
+ await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
386
+ TransactItems: [
387
+ this.lockOwnershipCheck(),
388
+ {
389
+ Update: {
390
+ TableName: this.tableName,
391
+ Key: {
392
+ PK: this.trackingPrefix,
393
+ SK: version,
394
+ },
395
+ UpdateExpression: 'SET #status = :status, #error = :error, failedAt = :timestamp',
396
+ ExpressionAttributeNames: {
397
+ '#status': 'status',
398
+ '#error': 'error',
399
+ },
400
+ ExpressionAttributeValues: {
401
+ ':status': 'failed',
402
+ ':error': error,
403
+ ':timestamp': now,
404
+ },
405
+ },
406
+ },
407
+ ],
309
408
  }));
310
409
  }
311
410
  else {
312
- // Create new record for failed migration
313
- await this.client.send(new lib_dynamodb_1.PutCommand({
314
- TableName: this.tableName,
315
- Item: {
316
- PK: this.trackingPrefix,
317
- SK: version,
318
- version,
319
- name: 'unknown',
320
- status: 'failed',
321
- error,
322
- failedAt: new Date().toISOString(),
323
- timestamp: new Date().toISOString(),
324
- },
411
+ // Create new record for failed migration, gated by lock ownership
412
+ await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
413
+ TransactItems: [
414
+ this.lockOwnershipCheck(),
415
+ {
416
+ Put: {
417
+ TableName: this.tableName,
418
+ Item: {
419
+ PK: this.trackingPrefix,
420
+ SK: version,
421
+ version,
422
+ name: 'unknown',
423
+ status: 'failed',
424
+ error,
425
+ failedAt: now,
426
+ timestamp: now,
427
+ },
428
+ },
429
+ },
430
+ ],
325
431
  }));
326
432
  }
327
433
  }
328
434
  async recordSchemaChange(change) {
435
+ this.requireLock();
329
436
  const currentVersion = await this.getCurrentVersion();
330
437
  if (!currentVersion || currentVersion === 'v0000') {
331
438
  throw new Error('Cannot record schema change: No migration has been applied yet');
332
439
  }
333
- // Append to schemaChanges array
334
- await this.client.send(new lib_dynamodb_1.UpdateCommand({
335
- TableName: this.tableName,
336
- Key: {
337
- PK: this.trackingPrefix,
338
- SK: currentVersion,
339
- },
340
- UpdateExpression: 'SET schemaChanges = list_append(if_not_exists(schemaChanges, :empty_list), :change)',
341
- ExpressionAttributeValues: {
342
- ':empty_list': [],
343
- ':change': [change],
344
- },
440
+ // Append to schemaChanges array, gated by lock ownership
441
+ await this.client.send(new lib_dynamodb_1.TransactWriteCommand({
442
+ TransactItems: [
443
+ this.lockOwnershipCheck(),
444
+ {
445
+ Update: {
446
+ TableName: this.tableName,
447
+ Key: {
448
+ PK: this.trackingPrefix,
449
+ SK: currentVersion,
450
+ },
451
+ UpdateExpression: 'SET schemaChanges = list_append(if_not_exists(schemaChanges, :empty_list), :change)',
452
+ ExpressionAttributeValues: {
453
+ ':empty_list': [],
454
+ ':change': [change],
455
+ },
456
+ },
457
+ },
458
+ ],
345
459
  }));
346
460
  }
347
461
  async getMigration(version) {
@@ -1 +1 @@
1
- {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracker.js","sourceRoot":"","sources":["../../src/core/tracker.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,6 +8,7 @@ export { MigrationLoader } from './core/loader';
8
8
  export { MigrationRunner, type RunOptions } from './core/runner';
9
9
  export { ConfigLoader, loadConfig } from './core/config';
10
10
  export { createDynamoDBClient } from './core/client';
11
+ export { MigrationAlreadyAppliedError, MigrationLockLostError } from './core/errors';
11
12
  export { generateMigrationTemplate } from './templates/migration';
12
13
  export { createMigration } from './commands/create';
13
14
  export { runMigrations } from './commands/up';
@@ -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,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"}
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;AACrD,OAAO,EAAE,4BAA4B,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAGrF,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.createDynamoDBClient = 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.MigrationLockLostError = exports.MigrationAlreadyAppliedError = 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
@@ -33,6 +33,9 @@ Object.defineProperty(exports, "ConfigLoader", { enumerable: true, get: function
33
33
  Object.defineProperty(exports, "loadConfig", { enumerable: true, get: function () { return config_1.loadConfig; } });
34
34
  var client_1 = require("./core/client");
35
35
  Object.defineProperty(exports, "createDynamoDBClient", { enumerable: true, get: function () { return client_1.createDynamoDBClient; } });
36
+ var errors_1 = require("./core/errors");
37
+ Object.defineProperty(exports, "MigrationAlreadyAppliedError", { enumerable: true, get: function () { return errors_1.MigrationAlreadyAppliedError; } });
38
+ Object.defineProperty(exports, "MigrationLockLostError", { enumerable: true, get: function () { return errors_1.MigrationLockLostError; } });
36
39
  // Template
37
40
  var migration_1 = require("./templates/migration");
38
41
  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,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"}
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;AAC7B,wCAAqF;AAA5E,sHAAA,4BAA4B,OAAA;AAAE,gHAAA,sBAAsB,OAAA;AAE7D,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"}
@@ -95,6 +95,12 @@ export interface MigrationConfig {
95
95
  migrationsDir?: string;
96
96
  trackingPrefix?: string;
97
97
  gsi1Name?: string;
98
+ /**
99
+ * How long an acquired migration lock stays valid before another worker
100
+ * can take it over, in seconds. The runner sends a heartbeat every
101
+ * `lockTtlSeconds / 3` to extend it. Default: 300 (5 minutes).
102
+ */
103
+ lockTtlSeconds?: number;
98
104
  }
99
105
  /**
100
106
  * Migration tracker interface
@@ -120,6 +126,11 @@ export interface MigrationTracker {
120
126
  * Release the distributed lock
121
127
  */
122
128
  releaseLock(): Promise<void>;
129
+ /**
130
+ * Extend the lock's expiration. Throws `ConditionalCheckFailedException`
131
+ * if the lock has already been taken by someone else.
132
+ */
133
+ refreshLock(): Promise<void>;
123
134
  /**
124
135
  * Mark migration as applied
125
136
  */