@ftschopp/dynatable-migrations 1.2.5 → 1.3.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 (56) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +12 -0
  3. package/dist/cli-utils.d.ts +8 -0
  4. package/dist/cli-utils.d.ts.map +1 -0
  5. package/dist/cli-utils.js +21 -0
  6. package/dist/cli-utils.js.map +1 -0
  7. package/dist/cli.js +25 -6
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/create.js +1 -1
  10. package/dist/commands/create.js.map +1 -1
  11. package/dist/commands/down.d.ts +1 -1
  12. package/dist/commands/down.d.ts.map +1 -1
  13. package/dist/commands/down.js +61 -1
  14. package/dist/commands/down.js.map +1 -1
  15. package/dist/commands/unlock.d.ts +8 -0
  16. package/dist/commands/unlock.d.ts.map +1 -0
  17. package/dist/commands/unlock.js +87 -0
  18. package/dist/commands/unlock.js.map +1 -0
  19. package/dist/core/config.d.ts.map +1 -1
  20. package/dist/core/config.js +14 -1
  21. package/dist/core/config.js.map +1 -1
  22. package/dist/core/loader.d.ts +7 -1
  23. package/dist/core/loader.d.ts.map +1 -1
  24. package/dist/core/loader.js +35 -6
  25. package/dist/core/loader.js.map +1 -1
  26. package/dist/core/runner.d.ts.map +1 -1
  27. package/dist/core/runner.js +6 -0
  28. package/dist/core/runner.js.map +1 -1
  29. package/dist/core/tracker.d.ts.map +1 -1
  30. package/dist/core/tracker.js +23 -12
  31. package/dist/core/tracker.js.map +1 -1
  32. package/package.json +35 -4
  33. package/.gitkeep +0 -0
  34. package/jest.config.js +0 -8
  35. package/migrations/.gitkeep +0 -0
  36. package/src/cli.ts +0 -111
  37. package/src/commands/create.ts +0 -111
  38. package/src/commands/down.ts +0 -26
  39. package/src/commands/init.ts +0 -37
  40. package/src/commands/status.ts +0 -75
  41. package/src/commands/up.ts +0 -26
  42. package/src/core/client.ts +0 -24
  43. package/src/core/config.ts +0 -140
  44. package/src/core/errors.ts +0 -55
  45. package/src/core/loader.ts +0 -256
  46. package/src/core/lock-heartbeat.test.ts +0 -78
  47. package/src/core/lock-heartbeat.ts +0 -48
  48. package/src/core/runner.ts +0 -303
  49. package/src/core/semver.test.ts +0 -33
  50. package/src/core/semver.ts +0 -26
  51. package/src/core/tracker.test.ts +0 -281
  52. package/src/core/tracker.ts +0 -559
  53. package/src/index.ts +0 -25
  54. package/src/templates/migration.ts +0 -92
  55. package/src/types/index.ts +0 -220
  56. package/tsconfig.json +0 -19
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # @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)
2
+
3
+
4
+ ### Features
5
+
6
+ * **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)
7
+
8
+ ## @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)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **migrations:** reject non-positive --steps and --limit at the CLI boundary ([#30](https://github.com/ftschopp/dynatable/issues/30)) ([9e8484c](https://github.com/ftschopp/dynatable/commit/9e8484c039b486722e591d61af93631bd29ec238)), closes [#12](https://github.com/ftschopp/dynatable/issues/12)
14
+
1
15
  ## @ftschopp/dynatable-migrations [1.2.5](https://github.com/ftschopp/dynatable/compare/@ftschopp/dynatable-migrations@1.2.4...@ftschopp/dynatable-migrations@1.2.5) (2026-05-08)
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
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Commander value parser that accepts only positive integers. Used for
3
+ * `--limit` and `--steps` so `0`, negative numbers, and non-numeric input
4
+ * fail at parse time with a clean usage error instead of silently feeding
5
+ * `Array.prototype.slice` and producing surprising rollbacks.
6
+ */
7
+ export declare function parsePositiveInt(name: string): (raw: string) => number;
8
+ //# sourceMappingURL=cli-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.d.ts","sourceRoot":"","sources":["../src/cli-utils.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAStE"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parsePositiveInt = parsePositiveInt;
4
+ const commander_1 = require("commander");
5
+ /**
6
+ * Commander value parser that accepts only positive integers. Used for
7
+ * `--limit` and `--steps` so `0`, negative numbers, and non-numeric input
8
+ * fail at parse time with a clean usage error instead of silently feeding
9
+ * `Array.prototype.slice` and producing surprising rollbacks.
10
+ */
11
+ function parsePositiveInt(name) {
12
+ return (raw) => {
13
+ const trimmed = raw.trim();
14
+ const n = Number.parseInt(trimmed, 10);
15
+ if (!Number.isInteger(n) || n <= 0 || String(n) !== trimmed) {
16
+ throw new commander_1.InvalidArgumentError(`--${name} must be a positive integer (got "${raw}").`);
17
+ }
18
+ return n;
19
+ };
20
+ }
21
+ //# sourceMappingURL=cli-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-utils.js","sourceRoot":"","sources":["../src/cli-utils.ts"],"names":[],"mappings":";;AAQA,4CASC;AAjBD,yCAAiD;AAEjD;;;;;GAKG;AACH,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,CAAC,GAAW,EAAE,EAAE;QACrB,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC5D,MAAM,IAAI,gCAAoB,CAAC,KAAK,IAAI,qCAAqC,GAAG,KAAK,CAAC,CAAC;QACzF,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC"}
package/dist/cli.js CHANGED
@@ -8,6 +8,8 @@ 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");
12
+ const cli_utils_1 = require("./cli-utils");
11
13
  // Read version from package.json
12
14
  const packageJson = require('../package.json');
13
15
  const program = new commander_1.Command();
@@ -58,13 +60,12 @@ program
58
60
  .command('up')
59
61
  .description('Run pending migrations')
60
62
  .option('-c, --config <path>', 'Path to config file')
61
- .option('-l, --limit <number>', 'Limit number of migrations to run')
63
+ .option('-l, --limit <number>', 'Limit number of migrations to run', (0, cli_utils_1.parsePositiveInt)('limit'))
62
64
  .option('-d, --dry-run', 'Show what would be done without making changes')
63
65
  .action(async (options) => {
64
66
  try {
65
67
  const config = await (0, config_1.loadConfig)(options.config);
66
- const limit = options.limit ? parseInt(options.limit, 10) : undefined;
67
- await (0, up_1.runMigrations)(config, limit, options.dryRun);
68
+ await (0, up_1.runMigrations)(config, options.limit, options.dryRun);
68
69
  }
69
70
  catch (error) {
70
71
  console.error(`Error: ${error.message}`);
@@ -76,13 +77,13 @@ program
76
77
  .command('down')
77
78
  .description('Rollback migrations')
78
79
  .option('-c, --config <path>', 'Path to config file')
79
- .option('-s, --steps <number>', 'Number of migrations to rollback', '1')
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
- const steps = parseInt(options.steps, 10);
85
- await (0, down_1.rollbackMigrations)(config, steps, options.dryRun);
86
+ await (0, down_1.rollbackMigrations)(config, options.steps, options.dryRun, options.yes);
86
87
  }
87
88
  catch (error) {
88
89
  console.error(`Error: ${error.message}`);
@@ -104,5 +105,23 @@ program
104
105
  process.exit(1);
105
106
  }
106
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
+ });
107
126
  program.parse(process.argv);
108
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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"}
@@ -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['loadMigrations']();
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":"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"}
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,cAAc,EAAE,CAAC;IAEjD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,MAAM,WAAW,GAAG,aAAa,EAAE,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB,KAAK,OAAO;gBACV,OAAO,OAAO,CAAC;YACjB;gBACE,OAAO,OAAO,CAAC;QACnB,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAErC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;QACnC,KAAK,OAAO;YACV,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QAC1C;YACE,OAAO,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;IAC5C,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,IAAY,EACZ,gBAAwB,cAAc,EACtC,QAAiB,EACjB,eAAwB;IAExB,qCAAqC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,EAAE,CAAC,SAAS,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,oCAAoC,aAAa,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,IAAI,wBAAe,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,OAAe,CAAC;IAEpB,IAAI,eAAe,EAAE,CAAC;QACpB,sCAAsC;QACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CACb,2BAA2B,eAAe,wCAAwC,CACnF,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,eAAe,CAAC;IAC5B,CAAC;SAAM,IAAI,QAAQ,EAAE,CAAC;QACpB,qBAAqB;QACrB,MAAM,UAAU,GAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAA2B,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,oCAAoC,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,QAA2B,CAAC,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,2BAA2B;QAC3B,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED,oEAAoE;IACpE,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAEvE,qBAAqB;IACrB,MAAM,QAAQ,GAAG,GAAG,OAAO,IAAI,aAAa,KAAK,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAEpD,+BAA+B;IAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,kCAAkC,QAAQ,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,6BAA6B;IAC7B,MAAM,OAAO,GAAG,IAAA,qCAAyB,EAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAElE,aAAa;IACb,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;IAE7C,mDAAmD;IACnD,MAAM,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;IAE/F,OAAO,CAAC,GAAG,CAAC,0BAA0B,QAAQ,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,KAAK,WAAW,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC;IACrC,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;AAClD,CAAC"}
@@ -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":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,eAAe,EACvB,KAAK,GAAE,MAAU,EACjB,MAAM,GAAE,OAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAiBf"}
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"}
@@ -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
- async function rollbackMigrations(config, steps = 1, dryRun = false) {
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":";;AAIA,gDAqBC;AAzBD,2CAAiD;AACjD,2CAAsD;AAG/C,KAAK,UAAU,kBAAkB,CACtC,MAAuB,EACvB,QAAgB,CAAC,EACjB,SAAkB,KAAK;IAEvB,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,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"}
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;IAsBlC;;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"}
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"}
@@ -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: config.migrationsDir || './migrations',
124
+ migrationsDir,
112
125
  trackingPrefix: config.trackingPrefix || '_SCHEMA#VERSION',
113
126
  gsi1Name: config.gsi1Name || 'GSI1',
114
127
  };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,13 @@ export declare class MigrationLoader {
18
18
  */
19
19
  private loadMigration;
20
20
  /**
21
- * Register ts-node for TypeScript file loading
21
+ * Register ts-node for TypeScript file loading.
22
+ *
23
+ * `ts-node` and `typescript` are declared as optional peerDependencies of
24
+ * this package — consumers who only ever write `.js` migrations don't pay
25
+ * the install cost. The lazy `require` here keeps the module out of the
26
+ * runtime graph until a `.ts` migration is actually loaded, so JS-only
27
+ * users never hit this path.
22
28
  */
23
29
  private registerTsNode;
24
30
  /**
@@ -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;AAGpD;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,EAAE,MAAM;IAIjC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAkChD;;OAEG;YACW,aAAa;IA2D3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA8BtB;;;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"}
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;gBAElB,aAAa,EAAE,MAAM;IAIjC;;OAEG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAK3C;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAkChD;;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"}
@@ -38,6 +38,26 @@ 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
  */
@@ -99,8 +119,7 @@ class MigrationLoader {
99
119
  module = require(absolutePath);
100
120
  }
101
121
  catch (error) {
102
- throw new Error(`Failed to load TypeScript migration ${filePath}: ${error.message}. ` +
103
- `Ensure ts-node is installed and the file has valid TypeScript syntax.`);
122
+ throw new Error(`${categorizeLoadError(error)} loading TypeScript migration ${filePath}: ${error.message}`);
104
123
  }
105
124
  }
106
125
  else {
@@ -110,7 +129,7 @@ class MigrationLoader {
110
129
  module = await Promise.resolve(`${fileUrl}`).then(s => __importStar(require(s)));
111
130
  }
112
131
  catch (error) {
113
- throw new Error(`Failed to load JavaScript migration ${filePath}: ${error.message}`);
132
+ throw new Error(`${categorizeLoadError(error)} loading JavaScript migration ${filePath}: ${error.message}`);
114
133
  }
115
134
  }
116
135
  const migration = module.migration || module.default;
@@ -133,7 +152,13 @@ class MigrationLoader {
133
152
  };
134
153
  }
135
154
  /**
136
- * Register ts-node for TypeScript file loading
155
+ * Register ts-node for TypeScript file loading.
156
+ *
157
+ * `ts-node` and `typescript` are declared as optional peerDependencies of
158
+ * this package — consumers who only ever write `.js` migrations don't pay
159
+ * the install cost. The lazy `require` here keeps the module out of the
160
+ * runtime graph until a `.ts` migration is actually loaded, so JS-only
161
+ * users never hit this path.
137
162
  */
138
163
  registerTsNode() {
139
164
  try {
@@ -155,8 +180,12 @@ class MigrationLoader {
155
180
  }
156
181
  catch (error) {
157
182
  if (error.code === 'MODULE_NOT_FOUND') {
158
- throw new Error('ts-node is required to load TypeScript migrations. ' +
159
- 'Install it with: npm install ts-node');
183
+ throw new Error('ts-node is required to load TypeScript migrations but is not installed. ' +
184
+ 'Install it as a dev dependency:\n' +
185
+ ' npm install --save-dev ts-node typescript\n' +
186
+ ' # or\n' +
187
+ ' yarn add --dev ts-node typescript\n' +
188
+ 'If your migrations are JavaScript only, rename them from .ts to .js.');
160
189
  }
161
190
  // Other errors might mean ts-node is already registered differently
162
191
  console.warn(`Warning: Could not register ts-node: ${error.message}`);
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/core/loader.ts"],"names":[],"mappings":"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"}
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;IAoG5D;;OAEG;IACG,IAAI,CAAC,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAyEhF;;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"}
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;IA0G5D;;OAEG;IACG,IAAI,CAAC,KAAK,GAAE,MAAU,EAAE,MAAM,GAAE,OAAe,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA+EhF;;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"}
@@ -24,6 +24,9 @@ class MigrationRunner {
24
24
  */
25
25
  async up(options = {}) {
26
26
  const { limit, dryRun = false } = options;
27
+ if (limit !== undefined && (!Number.isInteger(limit) || limit <= 0)) {
28
+ throw new Error(`runner.up({ limit }) requires a positive integer (got ${JSON.stringify(limit)}).`);
29
+ }
27
30
  await this.initialize();
28
31
  // Acquire lock unless dry run
29
32
  let stopHeartbeat;
@@ -101,6 +104,9 @@ class MigrationRunner {
101
104
  * Rollback last migration
102
105
  */
103
106
  async down(steps = 1, dryRun = false) {
107
+ if (!Number.isInteger(steps) || steps <= 0) {
108
+ throw new Error(`runner.down(steps) requires a positive integer (got ${JSON.stringify(steps)}).`);
109
+ }
104
110
  await this.initialize();
105
111
  // Acquire lock unless dry run
106
112
  let stopHeartbeat;