@ftschopp/dynatable-migrations 1.2.6 → 1.3.1
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 +12 -0
- package/dist/cli.js +21 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/create.js +1 -1
- package/dist/commands/create.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 +61 -1
- package/dist/commands/down.js.map +1 -1
- package/dist/commands/unlock.d.ts +8 -0
- package/dist/commands/unlock.d.ts.map +1 -0
- package/dist/commands/unlock.js +87 -0
- package/dist/commands/unlock.js.map +1 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +14 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/loader.d.ts +22 -1
- package/dist/core/loader.d.ts.map +1 -1
- package/dist/core/loader.js +56 -6
- package/dist/core/loader.js.map +1 -1
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +29 -8
- package/dist/core/runner.js.map +1 -1
- package/dist/core/tracker.d.ts +18 -3
- package/dist/core/tracker.d.ts.map +1 -1
- package/dist/core/tracker.js +60 -23
- package/dist/core/tracker.js.map +1 -1
- package/dist/types/index.d.ts +7 -2
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +35 -4
- package/.gitkeep +0 -0
- package/jest.config.js +0 -8
- package/migrations/.gitkeep +0 -0
- package/src/cli-utils.test.ts +0 -45
- package/src/cli-utils.ts +0 -18
- package/src/cli.ts +0 -110
- package/src/commands/create.ts +0 -111
- package/src/commands/down.ts +0 -26
- package/src/commands/init.ts +0 -37
- package/src/commands/status.ts +0 -75
- package/src/commands/up.ts +0 -26
- package/src/core/client.ts +0 -24
- package/src/core/config.ts +0 -140
- package/src/core/errors.ts +0 -55
- package/src/core/loader.ts +0 -256
- package/src/core/lock-heartbeat.test.ts +0 -78
- package/src/core/lock-heartbeat.ts +0 -48
- package/src/core/runner.test.ts +0 -51
- package/src/core/runner.ts +0 -315
- package/src/core/semver.test.ts +0 -33
- package/src/core/semver.ts +0 -26
- package/src/core/tracker.test.ts +0 -281
- package/src/core/tracker.ts +0 -559
- package/src/index.ts +0 -25
- package/src/templates/migration.ts +0 -92
- package/src/types/index.ts +0 -220
- package/tsconfig.json +0 -19
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
## @ftschopp/dynatable-migrations [1.3.1](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-migrations@1.3.0...@ftschopp/dynatable-migrations@1.3.1) (2026-05-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Performance Improvements
|
|
5
|
+
|
|
6
|
+
* **migrations:** cache migration loader and avoid per-step rollback queries ([#43](https://github.com/ftschopp/dynatable/issues/43)) ([38724ef](https://github.com/ftschopp/dynatable/commit/38724efaf8b6c0b52696d4c55a3b9b2c47cc745c))
|
|
7
|
+
|
|
8
|
+
# @ftschopp/dynatable-migrations [1.3.0](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-migrations@1.2.6...@ftschopp/dynatable-migrations@1.3.0) (2026-05-09)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* **migrations:** down --yes confirmation, unlock cmd, config validation, init race fix, loader error categorization ([#37](https://github.com/ftschopp/dynatable/issues/37)) ([a2f65c6](https://github.com/ftschopp/dynatable/commit/a2f65c6891e0b9642117a491d61e63a3b88428d7)), closes [#17](https://github.com/ftschopp/dynatable/issues/17)
|
|
14
|
+
|
|
1
15
|
## @ftschopp/dynatable-migrations [1.2.6](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-migrations@1.2.5...@ftschopp/dynatable-migrations@1.2.6) (2026-05-09)
|
|
2
16
|
|
|
3
17
|
|
package/README.md
CHANGED
|
@@ -21,6 +21,18 @@ npm install @ftschopp/dynatable-migrations
|
|
|
21
21
|
yarn add @ftschopp/dynatable-migrations
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
+
### TypeScript migrations (optional)
|
|
25
|
+
|
|
26
|
+
If you write your migrations in TypeScript, also install `ts-node` and `typescript` as dev dependencies — they are declared as **optional peer dependencies** so projects with `.js` migrations don't pay the install cost.
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install --save-dev ts-node typescript
|
|
30
|
+
# or
|
|
31
|
+
yarn add --dev ts-node typescript
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If a `.ts` migration is loaded without `ts-node` available, the runner throws a clear error pointing at this section.
|
|
35
|
+
|
|
24
36
|
## Quick Start
|
|
25
37
|
|
|
26
38
|
### 1. Initialize
|
package/dist/cli.js
CHANGED
|
@@ -8,6 +8,7 @@ const up_1 = require("./commands/up");
|
|
|
8
8
|
const down_1 = require("./commands/down");
|
|
9
9
|
const status_1 = require("./commands/status");
|
|
10
10
|
const init_1 = require("./commands/init");
|
|
11
|
+
const unlock_1 = require("./commands/unlock");
|
|
11
12
|
const cli_utils_1 = require("./cli-utils");
|
|
12
13
|
// Read version from package.json
|
|
13
14
|
const packageJson = require('../package.json');
|
|
@@ -78,10 +79,11 @@ program
|
|
|
78
79
|
.option('-c, --config <path>', 'Path to config file')
|
|
79
80
|
.option('-s, --steps <number>', 'Number of migrations to rollback', (0, cli_utils_1.parsePositiveInt)('steps'), 1)
|
|
80
81
|
.option('-d, --dry-run', 'Show what would be done without making changes')
|
|
82
|
+
.option('-y, --yes', 'Skip the interactive confirmation prompt')
|
|
81
83
|
.action(async (options) => {
|
|
82
84
|
try {
|
|
83
85
|
const config = await (0, config_1.loadConfig)(options.config);
|
|
84
|
-
await (0, down_1.rollbackMigrations)(config, options.steps, options.dryRun);
|
|
86
|
+
await (0, down_1.rollbackMigrations)(config, options.steps, options.dryRun, options.yes);
|
|
85
87
|
}
|
|
86
88
|
catch (error) {
|
|
87
89
|
console.error(`Error: ${error.message}`);
|
|
@@ -103,5 +105,23 @@ program
|
|
|
103
105
|
process.exit(1);
|
|
104
106
|
}
|
|
105
107
|
});
|
|
108
|
+
// Unlock command — for emergency recovery when a migration process died
|
|
109
|
+
// hard without releasing its lock. The 5-minute TTL eventually clears
|
|
110
|
+
// the lock anyway, but waiting that long during an incident is rough.
|
|
111
|
+
program
|
|
112
|
+
.command('unlock')
|
|
113
|
+
.description('Forcefully release the migration lock (emergency recovery)')
|
|
114
|
+
.option('-c, --config <path>', 'Path to config file')
|
|
115
|
+
.option('-y, --yes', 'Skip the interactive confirmation prompt')
|
|
116
|
+
.action(async (options) => {
|
|
117
|
+
try {
|
|
118
|
+
const config = await (0, config_1.loadConfig)(options.config);
|
|
119
|
+
await (0, unlock_1.forceUnlock)(config, options.yes);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(`Error: ${error.message}`);
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
});
|
|
106
126
|
program.parse(process.argv);
|
|
107
127
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/create.js
CHANGED
|
@@ -42,7 +42,7 @@ const migration_1 = require("../templates/migration");
|
|
|
42
42
|
* Get next version based on bump type
|
|
43
43
|
*/
|
|
44
44
|
async function getNextVersion(loader, bumpType) {
|
|
45
|
-
const migrations = await loader
|
|
45
|
+
const migrations = await loader.loadMigrations();
|
|
46
46
|
const lastMigration = migrations.length > 0 ? migrations[migrations.length - 1] : null;
|
|
47
47
|
const lastVersion = lastMigration?.version;
|
|
48
48
|
const parts = lastVersion?.split('.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,0CAgEC;AA9GD,uCAAyB;AACzB,2CAA6B;AAC7B,2CAAiD;AACjD,sDAAmE;AAInE;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,QAAyB;IAC9E,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/down.d.ts
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { MigrationConfig } from '../types';
|
|
2
|
-
export declare function rollbackMigrations(config: MigrationConfig, steps?: number, dryRun?: boolean): Promise<void>;
|
|
2
|
+
export declare function rollbackMigrations(config: MigrationConfig, steps?: number, dryRun?: boolean, yes?: boolean): Promise<void>;
|
|
3
3
|
//# sourceMappingURL=down.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"down.d.ts","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAoB3C,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,GAAE,MAAU,EACjB,MAAM,GAAE,OAAe,EACvB,GAAG,GAAE,OAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
|
package/dist/commands/down.js
CHANGED
|
@@ -1,12 +1,72 @@
|
|
|
1
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
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.rollbackMigrations = rollbackMigrations;
|
|
37
|
+
const readline = __importStar(require("readline"));
|
|
4
38
|
const runner_1 = require("../core/runner");
|
|
5
39
|
const client_1 = require("../core/client");
|
|
6
|
-
|
|
40
|
+
/**
|
|
41
|
+
* Ask the user a yes/no question on stdin. Returns true only on an
|
|
42
|
+
* explicit "y" or "yes" (case-insensitive). Anything else — including
|
|
43
|
+
* EOF on a non-TTY pipe — counts as "no", so misconfigured CI doesn't
|
|
44
|
+
* accidentally roll back production.
|
|
45
|
+
*/
|
|
46
|
+
async function confirm(prompt) {
|
|
47
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
48
|
+
try {
|
|
49
|
+
const answer = await new Promise((resolve) => {
|
|
50
|
+
rl.question(prompt, resolve);
|
|
51
|
+
});
|
|
52
|
+
return /^(y|yes)$/i.test(answer.trim());
|
|
53
|
+
}
|
|
54
|
+
finally {
|
|
55
|
+
rl.close();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
async function rollbackMigrations(config, steps = 1, dryRun = false, yes = false) {
|
|
7
59
|
const client = (0, client_1.createDynamoDBClient)(config);
|
|
8
60
|
const runner = new runner_1.MigrationRunner(client, config);
|
|
9
61
|
try {
|
|
62
|
+
if (!dryRun && !yes) {
|
|
63
|
+
const ok = await confirm(`\n⚠️ About to roll back ${steps} migration(s) on table "${config.tableName}". ` +
|
|
64
|
+
`This will run each migration's down() handler.\nProceed? [y/N] `);
|
|
65
|
+
if (!ok) {
|
|
66
|
+
console.log('Aborted. No changes were made.\n');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
10
70
|
const rolledBack = await runner.down(steps, dryRun);
|
|
11
71
|
if (!dryRun && rolledBack.length > 0) {
|
|
12
72
|
console.log(`\n🎉 Successfully rolled back ${rolledBack.length} migration(s)`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"down.js","sourceRoot":"","sources":["../../src/commands/down.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBA,gDAiCC;AAxDD,mDAAqC;AACrC,2CAAiD;AACjD,2CAAsD;AAGtD;;;;;GAKG;AACH,KAAK,UAAU,OAAO,CAAC,MAAc;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,kBAAkB,CACtC,MAAuB,EACvB,QAAgB,CAAC,EACjB,SAAkB,KAAK,EACvB,MAAe,KAAK;IAEpB,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,MAAM,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,wBAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;YACpB,MAAM,EAAE,GAAG,MAAM,OAAO,CACtB,4BAA4B,KAAK,2BAA2B,MAAM,CAAC,SAAS,KAAK;gBAC/E,iEAAiE,CACpE,CAAC;YACF,IAAI,CAAC,EAAE,EAAE,CAAC;gBACR,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;QACH,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,iCAAiC,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;YAE/E,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,uBAAuB,cAAc,IAAI,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,wBAAwB,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { MigrationConfig } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Unconditionally delete the migration lock row. Use only when the
|
|
4
|
+
* lock owner has crashed and you need to retake the lock before the
|
|
5
|
+
* 5-minute TTL clears it on its own.
|
|
6
|
+
*/
|
|
7
|
+
export declare function forceUnlock(config: MigrationConfig, yes?: boolean): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=unlock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlock.d.ts","sourceRoot":"","sources":["../../src/commands/unlock.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAc3C;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAsC9F"}
|
|
@@ -0,0 +1,87 @@
|
|
|
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.forceUnlock = forceUnlock;
|
|
37
|
+
const readline = __importStar(require("readline"));
|
|
38
|
+
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
39
|
+
const client_1 = require("../core/client");
|
|
40
|
+
async function confirm(prompt) {
|
|
41
|
+
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
42
|
+
try {
|
|
43
|
+
const answer = await new Promise((resolve) => {
|
|
44
|
+
rl.question(prompt, resolve);
|
|
45
|
+
});
|
|
46
|
+
return /^(y|yes)$/i.test(answer.trim());
|
|
47
|
+
}
|
|
48
|
+
finally {
|
|
49
|
+
rl.close();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Unconditionally delete the migration lock row. Use only when the
|
|
54
|
+
* lock owner has crashed and you need to retake the lock before the
|
|
55
|
+
* 5-minute TTL clears it on its own.
|
|
56
|
+
*/
|
|
57
|
+
async function forceUnlock(config, yes = false) {
|
|
58
|
+
const trackingPrefix = config.trackingPrefix || '_SCHEMA#VERSION';
|
|
59
|
+
const lockKey = {
|
|
60
|
+
PK: `${trackingPrefix}#LOCK`,
|
|
61
|
+
SK: `${trackingPrefix}#LOCK`,
|
|
62
|
+
};
|
|
63
|
+
const client = (0, client_1.createDynamoDBClient)(config);
|
|
64
|
+
const existing = await client.send(new lib_dynamodb_1.GetCommand({ TableName: config.tableName, Key: lockKey }));
|
|
65
|
+
if (!existing.Item) {
|
|
66
|
+
console.log('✅ No migration lock is held — nothing to unlock.\n');
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const acquiredAt = existing.Item.acquiredAt ?? '<unknown>';
|
|
70
|
+
const expiresAt = existing.Item.expiresAt ?? '<unknown>';
|
|
71
|
+
const lockId = existing.Item.lockId ?? '<unknown>';
|
|
72
|
+
console.log(`\n⚠️ Force-unlock will delete the migration lock on "${config.tableName}":`);
|
|
73
|
+
console.log(` lockId: ${lockId}`);
|
|
74
|
+
console.log(` acquiredAt: ${acquiredAt}`);
|
|
75
|
+
console.log(` expiresAt: ${expiresAt} (epoch ms)`);
|
|
76
|
+
console.log('\n Only run this if you are certain the lock owner is no longer running.');
|
|
77
|
+
if (!yes) {
|
|
78
|
+
const ok = await confirm(' Proceed? [y/N] ');
|
|
79
|
+
if (!ok) {
|
|
80
|
+
console.log('Aborted. Lock left in place.\n');
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
await client.send(new lib_dynamodb_1.DeleteCommand({ TableName: config.tableName, Key: lockKey }));
|
|
85
|
+
console.log('🔓 Lock released.\n');
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=unlock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unlock.js","sourceRoot":"","sources":["../../src/commands/unlock.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,kCAsCC;AA5DD,mDAAqC;AACrC,wDAAkE;AAClE,2CAAsD;AAGtD,KAAK,UAAU,OAAO,CAAC,MAAc;IACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;IAC1C,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,WAAW,CAAC,MAAuB,EAAE,MAAe,KAAK;IAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,iBAAiB,CAAC;IAClE,MAAM,OAAO,GAAG;QACd,EAAE,EAAE,GAAG,cAAc,OAAO;QAC5B,EAAE,EAAE,GAAG,cAAc,OAAO;KAC7B,CAAC;IAEF,MAAM,MAAM,GAAG,IAAA,6BAAoB,EAAC,MAAM,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,IAAI,yBAAU,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAC9D,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC;IAC3D,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC;IACzD,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC;IAEnD,OAAO,CAAC,GAAG,CAAC,yDAAyD,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;IAC3F,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,EAAE,CAAC,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,aAAa,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAE1F,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,oBAAoB,CAAC,CAAC;QAC/C,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,4BAAa,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IACpF,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAI/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAyBtC;;OAEG;IACH,OAAO,CAAC,0BAA0B;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,CAAC,EAAE,MAAM;IAI/B;;OAEG;IACH,OAAO,CAAC,cAAc;IAyBtB;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAyBtC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAyClC;;OAEG;IACH,MAAM,CAAC,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;CAiCrD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAG9E"}
|
package/dist/core/config.js
CHANGED
|
@@ -98,9 +98,22 @@ class ConfigLoader {
|
|
|
98
98
|
if (!config.tableName) {
|
|
99
99
|
throw new Error("Configuration error: 'tableName' is required");
|
|
100
100
|
}
|
|
101
|
+
// DynamoDB table-name rules: 3-255 chars, alphanumeric plus . _ -.
|
|
102
|
+
// Cheapest place to catch typos before the SDK rejects the request.
|
|
103
|
+
if (!/^[a-zA-Z0-9._-]{3,255}$/.test(config.tableName)) {
|
|
104
|
+
throw new Error(`Configuration error: 'tableName' must be 3-255 characters and contain only ` +
|
|
105
|
+
`letters, numbers, '.', '_', or '-' (got: ${JSON.stringify(config.tableName)})`);
|
|
106
|
+
}
|
|
101
107
|
if (!config.client?.region) {
|
|
102
108
|
throw new Error("Configuration error: 'client.region' is required");
|
|
103
109
|
}
|
|
110
|
+
const migrationsDir = config.migrationsDir || './migrations';
|
|
111
|
+
// We don't auto-create the directory here — `dynatable-migrate init`
|
|
112
|
+
// and `create` both handle that. But if the user explicitly pointed
|
|
113
|
+
// at something that exists and isn't a directory, fail loudly.
|
|
114
|
+
if (fs.existsSync(migrationsDir) && !fs.statSync(migrationsDir).isDirectory()) {
|
|
115
|
+
throw new Error(`Configuration error: 'migrationsDir' (${migrationsDir}) exists but is not a directory.`);
|
|
116
|
+
}
|
|
104
117
|
return {
|
|
105
118
|
tableName: config.tableName,
|
|
106
119
|
client: {
|
|
@@ -108,7 +121,7 @@ class ConfigLoader {
|
|
|
108
121
|
endpoint: config.client.endpoint,
|
|
109
122
|
credentials: config.client.credentials,
|
|
110
123
|
},
|
|
111
|
-
migrationsDir
|
|
124
|
+
migrationsDir,
|
|
112
125
|
trackingPrefix: config.trackingPrefix || '_SCHEMA#VERSION',
|
|
113
126
|
gsi1Name: config.gsi1Name || 'GSI1',
|
|
114
127
|
};
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/loader.d.ts
CHANGED
|
@@ -4,11 +4,26 @@ import { MigrationFile } from '../types';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class MigrationLoader {
|
|
6
6
|
private migrationsDir;
|
|
7
|
+
/**
|
|
8
|
+
* Memoized result of `loadMigrations()`. Set on first successful load and
|
|
9
|
+
* reused for the lifetime of the loader instance. The runner consults the
|
|
10
|
+
* loader many times per command (per-version checksum check, per-rollback
|
|
11
|
+
* lookup, status display) — without this, each call re-runs `readdirSync`,
|
|
12
|
+
* re-imports every migration module, and re-md5s every file, turning an
|
|
13
|
+
* O(N) operation into O(N²) in IO and require()s. Call `invalidateCache()`
|
|
14
|
+
* if you need to pick up newly-added files mid-process.
|
|
15
|
+
*/
|
|
16
|
+
private cachedMigrations;
|
|
7
17
|
constructor(migrationsDir: string);
|
|
8
18
|
/**
|
|
9
19
|
* Calculate checksum of a file
|
|
10
20
|
*/
|
|
11
21
|
calculateChecksum(filePath: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Drop the in-memory cache so the next `loadMigrations()` call re-reads
|
|
24
|
+
* the directory. Use after generating a new migration file mid-process.
|
|
25
|
+
*/
|
|
26
|
+
invalidateCache(): void;
|
|
12
27
|
/**
|
|
13
28
|
* Load all migration files
|
|
14
29
|
*/
|
|
@@ -18,7 +33,13 @@ export declare class MigrationLoader {
|
|
|
18
33
|
*/
|
|
19
34
|
private loadMigration;
|
|
20
35
|
/**
|
|
21
|
-
* Register ts-node for TypeScript file loading
|
|
36
|
+
* Register ts-node for TypeScript file loading.
|
|
37
|
+
*
|
|
38
|
+
* `ts-node` and `typescript` are declared as optional peerDependencies of
|
|
39
|
+
* this package — consumers who only ever write `.js` migrations don't pay
|
|
40
|
+
* the install cost. The lazy `require` here keeps the module out of the
|
|
41
|
+
* runtime graph until a `.ts` migration is actually loaded, so JS-only
|
|
42
|
+
* users never hit this path.
|
|
22
43
|
*/
|
|
23
44
|
private registerTsNode;
|
|
24
45
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,aAAa,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,aAAa,EAAE,MAAM,UAAU,CAAC;AAwBpD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB,CAAgC;gBAE5C,aAAa,EAAE,MAAM;IAIjC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3C;;;OAGG;IACH,eAAe,IAAI,IAAI;IAIvB;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAuChD;;OAEG;YACW,aAAa;IA4D3B;;;;;;;;OAQG;IACH,OAAO,CAAC,cAAc;IAkCtB;;;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;CA6BxC"}
|
package/dist/core/loader.js
CHANGED
|
@@ -38,11 +38,41 @@ const fs = __importStar(require("fs"));
|
|
|
38
38
|
const path = __importStar(require("path"));
|
|
39
39
|
const crypto = __importStar(require("crypto"));
|
|
40
40
|
const semver_1 = require("./semver");
|
|
41
|
+
/**
|
|
42
|
+
* Map a require/import failure to a human-readable category. The same
|
|
43
|
+
* thrown error covers wildly different operator-facing problems —
|
|
44
|
+
* "your file has a syntax error", "you forgot to install a dep", "the
|
|
45
|
+
* code ran on import and threw" — and prefixing the message with the
|
|
46
|
+
* category cuts triage time significantly.
|
|
47
|
+
*/
|
|
48
|
+
function categorizeLoadError(error) {
|
|
49
|
+
const e = error;
|
|
50
|
+
const code = e?.code;
|
|
51
|
+
const name = e?.name;
|
|
52
|
+
const msg = e?.message ?? '';
|
|
53
|
+
if (code === 'MODULE_NOT_FOUND' || code === 'ERR_MODULE_NOT_FOUND') {
|
|
54
|
+
return 'Missing dependency';
|
|
55
|
+
}
|
|
56
|
+
if (name === 'SyntaxError' || /SyntaxError|TS\d{4}|ts-node/i.test(msg)) {
|
|
57
|
+
return 'Syntax error';
|
|
58
|
+
}
|
|
59
|
+
return 'Runtime error';
|
|
60
|
+
}
|
|
41
61
|
/**
|
|
42
62
|
* Load all migration files from directory
|
|
43
63
|
*/
|
|
44
64
|
class MigrationLoader {
|
|
45
65
|
constructor(migrationsDir) {
|
|
66
|
+
/**
|
|
67
|
+
* Memoized result of `loadMigrations()`. Set on first successful load and
|
|
68
|
+
* reused for the lifetime of the loader instance. The runner consults the
|
|
69
|
+
* loader many times per command (per-version checksum check, per-rollback
|
|
70
|
+
* lookup, status display) — without this, each call re-runs `readdirSync`,
|
|
71
|
+
* re-imports every migration module, and re-md5s every file, turning an
|
|
72
|
+
* O(N) operation into O(N²) in IO and require()s. Call `invalidateCache()`
|
|
73
|
+
* if you need to pick up newly-added files mid-process.
|
|
74
|
+
*/
|
|
75
|
+
this.cachedMigrations = null;
|
|
46
76
|
this.migrationsDir = migrationsDir;
|
|
47
77
|
}
|
|
48
78
|
/**
|
|
@@ -52,10 +82,20 @@ class MigrationLoader {
|
|
|
52
82
|
const content = fs.readFileSync(filePath, 'utf-8');
|
|
53
83
|
return crypto.createHash('md5').update(content).digest('hex');
|
|
54
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Drop the in-memory cache so the next `loadMigrations()` call re-reads
|
|
87
|
+
* the directory. Use after generating a new migration file mid-process.
|
|
88
|
+
*/
|
|
89
|
+
invalidateCache() {
|
|
90
|
+
this.cachedMigrations = null;
|
|
91
|
+
}
|
|
55
92
|
/**
|
|
56
93
|
* Load all migration files
|
|
57
94
|
*/
|
|
58
95
|
async loadMigrations() {
|
|
96
|
+
if (this.cachedMigrations) {
|
|
97
|
+
return this.cachedMigrations;
|
|
98
|
+
}
|
|
59
99
|
if (!fs.existsSync(this.migrationsDir)) {
|
|
60
100
|
throw new Error(`Migrations directory not found: ${this.migrationsDir}`);
|
|
61
101
|
}
|
|
@@ -78,6 +118,7 @@ class MigrationLoader {
|
|
|
78
118
|
migrations.push(migration);
|
|
79
119
|
}
|
|
80
120
|
}
|
|
121
|
+
this.cachedMigrations = migrations;
|
|
81
122
|
return migrations;
|
|
82
123
|
}
|
|
83
124
|
/**
|
|
@@ -99,8 +140,7 @@ class MigrationLoader {
|
|
|
99
140
|
module = require(absolutePath);
|
|
100
141
|
}
|
|
101
142
|
catch (error) {
|
|
102
|
-
throw new Error(
|
|
103
|
-
`Ensure ts-node is installed and the file has valid TypeScript syntax.`);
|
|
143
|
+
throw new Error(`${categorizeLoadError(error)} loading TypeScript migration ${filePath}: ${error.message}`);
|
|
104
144
|
}
|
|
105
145
|
}
|
|
106
146
|
else {
|
|
@@ -110,7 +150,7 @@ class MigrationLoader {
|
|
|
110
150
|
module = await Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
|
|
111
151
|
}
|
|
112
152
|
catch (error) {
|
|
113
|
-
throw new Error(
|
|
153
|
+
throw new Error(`${categorizeLoadError(error)} loading JavaScript migration ${filePath}: ${error.message}`);
|
|
114
154
|
}
|
|
115
155
|
}
|
|
116
156
|
const migration = module.migration || module.default;
|
|
@@ -133,7 +173,13 @@ class MigrationLoader {
|
|
|
133
173
|
};
|
|
134
174
|
}
|
|
135
175
|
/**
|
|
136
|
-
* Register ts-node for TypeScript file loading
|
|
176
|
+
* Register ts-node for TypeScript file loading.
|
|
177
|
+
*
|
|
178
|
+
* `ts-node` and `typescript` are declared as optional peerDependencies of
|
|
179
|
+
* this package — consumers who only ever write `.js` migrations don't pay
|
|
180
|
+
* the install cost. The lazy `require` here keeps the module out of the
|
|
181
|
+
* runtime graph until a `.ts` migration is actually loaded, so JS-only
|
|
182
|
+
* users never hit this path.
|
|
137
183
|
*/
|
|
138
184
|
registerTsNode() {
|
|
139
185
|
try {
|
|
@@ -155,8 +201,12 @@ class MigrationLoader {
|
|
|
155
201
|
}
|
|
156
202
|
catch (error) {
|
|
157
203
|
if (error.code === 'MODULE_NOT_FOUND') {
|
|
158
|
-
throw new Error('ts-node is required to load TypeScript migrations. ' +
|
|
159
|
-
'Install it
|
|
204
|
+
throw new Error('ts-node is required to load TypeScript migrations but is not installed. ' +
|
|
205
|
+
'Install it as a dev dependency:\n' +
|
|
206
|
+
' npm install --save-dev ts-node typescript\n' +
|
|
207
|
+
' # or\n' +
|
|
208
|
+
' yarn add --dev ts-node typescript\n' +
|
|
209
|
+
'If your migrations are JavaScript only, rename them from .ts to .js.');
|
|
160
210
|
}
|
|
161
211
|
// Other errors might mean ts-node is already registered differently
|
|
162
212
|
console.warn(`Warning: Could not register ts-node: ${error.message}`);
|
package/dist/core/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAyB;AACzB,2CAA6B;AAC7B,+CAAiC;AAEjC,qCAAyC;AAEzC;;GAEG;AACH,MAAa,eAAe;
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAa/D,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM7F,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,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,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/core/runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAa/D,OAAO,EAAE,eAAe,EAAoB,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAM7F,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,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,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAmH5D;;OAEG;IACG,IAAI,CAAC,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA6FhF;;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;CAoBtB"}
|