@zintrust/d1-migrator 0.4.6 → 0.4.27

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,15 +1,15 @@
1
1
  {
2
2
  "name": "@zintrust/d1-migrator",
3
- "version": "0.1.0",
4
- "buildDate": "2026-03-20T13:11:40.471Z",
3
+ "version": "0.4.6",
4
+ "buildDate": "2026-03-26T14:37:09.731Z",
5
5
  "buildEnvironment": {
6
6
  "node": "v22.22.1",
7
7
  "platform": "darwin",
8
8
  "arch": "arm64"
9
9
  },
10
10
  "git": {
11
- "commit": "e0e7e31c",
12
- "branch": "release"
11
+ "commit": "94caf69e",
12
+ "branch": "dev"
13
13
  },
14
14
  "package": {
15
15
  "engines": {
@@ -29,7 +29,7 @@
29
29
  "files": {
30
30
  "build-manifest.json": {
31
31
  "size": 5804,
32
- "sha256": "d093f50bf4b90acf6721932a0c2a3eb6a27a3790a38947e80b653ea5a3e67726"
32
+ "sha256": "1a153aa3e004070aed4f7808720ef934e5c668a128cb293efe8fc6998156b4a1"
33
33
  },
34
34
  "cli/DataMigrator.d.ts": {
35
35
  "size": 3355,
@@ -37,23 +37,23 @@
37
37
  },
38
38
  "cli/DataMigrator.d.ts.map": {
39
39
  "size": 2120,
40
- "sha256": "a5014c02e70e462fd5729418e1bf1b3d4823105bb37512f43b82c609cc4970a0"
40
+ "sha256": "6fb9eade2112a8985f9a86ecf5bd3c4a5cc9504fabb55b75ee43ad000e27226d"
41
41
  },
42
42
  "cli/DataMigrator.js": {
43
- "size": 17563,
44
- "sha256": "ea88b7ee3d2f2696a6b55d420fb90cb87cf2a27bc98efd495b286f2f31ace69b"
43
+ "size": 18347,
44
+ "sha256": "7325cdb942ee70b1cdfa584f386c9b1081178ef07ad937779dfae87979b627f8"
45
45
  },
46
46
  "cli/MigrateToD1Command.d.ts": {
47
47
  "size": 1589,
48
48
  "sha256": "c1bffb405e91cc1ff61507a51bf80baaeb89ce5a1a98ae591ecaa8e35450a8d2"
49
49
  },
50
50
  "cli/MigrateToD1Command.d.ts.map": {
51
- "size": 1232,
52
- "sha256": "3101b87c31658e34a9e25b703e40b6918b293e7310fbd57bddee3f48e9390fab"
51
+ "size": 1233,
52
+ "sha256": "884676d4ce94415255ec848e8466efa2d69265c3ad015b4b287fea7f4fc16a37"
53
53
  },
54
54
  "cli/MigrateToD1Command.js": {
55
- "size": 25636,
56
- "sha256": "8a9c816b014648a0afd0a2a7fde150a00c124b240e08fdf51023753249793f73"
55
+ "size": 28588,
56
+ "sha256": "07dce8e69a7a328bcf058fd002d468998593d46ae09cc00913cbb512486f4cfd"
57
57
  },
58
58
  "cli/ProgressTracker.d.ts": {
59
59
  "size": 942,
@@ -88,8 +88,8 @@
88
88
  "sha256": "685c4e8b49c8a86f53feacb7c42e3b8268b9402ae3ae7e47cb46e7b78a9bf78b"
89
89
  },
90
90
  "index.js": {
91
- "size": 1204,
92
- "sha256": "a4c5cc454b6a6ebd61ec92822d3147b75a39c588f518bb2bb4c9c6f824d73bf9"
91
+ "size": 1262,
92
+ "sha256": "d6350a9e6bff776ea2eb44370180a29cee46c2951ca3077fe21d0728ef41c48c"
93
93
  },
94
94
  "register.d.ts": {
95
95
  "size": 159,
@@ -1 +1 @@
1
- {"version":3,"file":"MigrateToD1Command.d.ts","sourceRoot":"","sources":["../../src/cli/MigrateToD1Command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAOhD,KAAK,iBAAiB,GAAG;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,IAAI,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B,CAAC;AAubF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,iBAgG/B,CAAC;AAEH;;GAEG;AACH,iBAAe,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CActE;AAED;;GAEG;AACH,iBAAe,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGxE;AAED;;GAEG;AACH,iBAAe,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGtE;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BrF;AAGD,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC"}
1
+ {"version":3,"file":"MigrateToD1Command.d.ts","sourceRoot":"","sources":["../../src/cli/MigrateToD1Command.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAe,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGzC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAOhD,KAAK,iBAAiB,GAAG;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,IAAI,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAC/B,CAAC;AAkgBF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,iBAgG/B,CAAC;AAEH;;GAEG;AACH,iBAAe,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CActE;AAED;;GAEG;AACH,iBAAe,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkGxE;AAED;;GAEG;AACH,iBAAe,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiGtE;AAED;;GAEG;AACH,iBAAS,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA2BrF;AAGD,eAAO,MAAM,iBAAiB;;;;;EAK5B,CAAC"}
@@ -2,7 +2,7 @@
2
2
  * Migrate to D1 Command
3
3
  * CLI command for migrating databases to Cloudflare D1
4
4
  */
5
- import { ErrorFactory, Logger } from '@zintrust/core';
5
+ import { ErrorFactory, Logger, WranglerConfig } from '@zintrust/core';
6
6
  import { BaseCommand } from '@zintrust/core/cli';
7
7
  import { SchemaBuilder } from '../schema/SchemaBuilder.js';
8
8
  import { SchemaValidator } from '../schema/Validator.js';
@@ -47,8 +47,43 @@ const TARGET_DATABASE_ENV_KEYS = Object.freeze([
47
47
  'D1_TARGET_DB',
48
48
  'D1_DATABASE',
49
49
  'D1_DATABASE_ID',
50
- 'DB_DATABASE',
51
50
  ]);
51
+ const describeConfiguredD1Target = (config) => {
52
+ const parts = [];
53
+ if (typeof config.database_name === 'string' && config.database_name.trim() !== '') {
54
+ parts.push(`database_name=${config.database_name.trim()}`);
55
+ }
56
+ if (typeof config.binding === 'string' && config.binding.trim() !== '') {
57
+ parts.push(`binding=${config.binding.trim()}`);
58
+ }
59
+ return parts.length > 0 ? parts.join(', ') : 'unnamed-d1-entry';
60
+ };
61
+ const describeConfiguredD1Targets = (configured) => {
62
+ const rendered = configured
63
+ .map((config) => describeConfiguredD1Target(config))
64
+ .filter((entry) => entry.length > 0);
65
+ return rendered.length > 0 ? rendered.join(' | ') : 'none';
66
+ };
67
+ const getResolvedDefaultTargetName = (projectRoot) => {
68
+ const resolvedName = WranglerConfig.getDefaultD1DatabaseName(projectRoot);
69
+ if (typeof resolvedName === 'string' && resolvedName.trim() !== '') {
70
+ return resolvedName.trim();
71
+ }
72
+ throw ErrorFactory.createValidationError('Resolved Wrangler D1 target is missing both database_name and binding');
73
+ };
74
+ const createTargetDatabaseResolutionError = (target, resolution) => {
75
+ const configuredTargets = describeConfiguredD1Targets(resolution.configured);
76
+ if (resolution.status === 'ambiguous') {
77
+ if (target === undefined || resolution.matchedBy === 'multiple-configured') {
78
+ return ErrorFactory.createValidationError(`Target D1 database is required because multiple Wrangler D1 targets are configured. Re-run with --target-database <database_name|binding> or set D1_TARGET_DB. Configured D1 targets: ${configuredTargets}`);
79
+ }
80
+ return ErrorFactory.createValidationError(`Target D1 database "${target}" is ambiguous by ${resolution.matchedBy}. Matching entries: ${describeConfiguredD1Targets(resolution.matches)}. Re-run with a unique binding via --target-database <binding> or set D1_TARGET_DB. Configured D1 targets: ${configuredTargets}`);
81
+ }
82
+ if (target === undefined) {
83
+ return ErrorFactory.createValidationError(`Target D1 database could not be inferred because no default Wrangler D1 target could be resolved. Re-run with --target-database <database_name|binding> or set D1_TARGET_DB. Configured D1 targets: ${configuredTargets}`);
84
+ }
85
+ return ErrorFactory.createValidationError(`Unable to resolve target D1 database "${target}". Tried database_name first, then binding. Configured D1 targets: ${configuredTargets}`);
86
+ };
52
87
  const readOptionString = (options, keys) => {
53
88
  for (const key of keys) {
54
89
  const optionValue = options[key];
@@ -255,15 +290,22 @@ const resolveTargetType = (options) => {
255
290
  return targetType ?? 'd1';
256
291
  };
257
292
  const resolveTargetDatabase = (options) => {
293
+ const projectRoot = process.cwd();
258
294
  const fromOption = readOptionString(options, ['target-database', 'targetDatabase']);
259
- if (fromOption !== undefined) {
260
- return fromOption;
261
- }
262
295
  const fromEnv = readEnvString(TARGET_DATABASE_ENV_KEYS);
263
- if (fromEnv !== undefined) {
264
- return fromEnv;
296
+ const explicitTarget = fromOption ?? fromEnv;
297
+ if (explicitTarget !== undefined) {
298
+ const resolution = WranglerConfig.resolveD1Database(projectRoot, explicitTarget);
299
+ if (resolution.status !== 'resolved') {
300
+ throw createTargetDatabaseResolutionError(explicitTarget, resolution);
301
+ }
302
+ return explicitTarget;
303
+ }
304
+ const resolution = WranglerConfig.resolveD1Database(projectRoot);
305
+ if (resolution.status === 'resolved') {
306
+ return getResolvedDefaultTargetName(projectRoot);
265
307
  }
266
- return 'd1';
308
+ throw createTargetDatabaseResolutionError(undefined, resolution);
267
309
  };
268
310
  const resolveMigrationConfig = (options) => {
269
311
  const sourceDriver = resolveSourceDriver(options);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zintrust/d1-migrator",
3
- "version": "0.4.6",
3
+ "version": "0.4.27",
4
4
  "description": "Resumable database migration toolkit for moving data to Cloudflare D1 with ZinTrust.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -23,7 +23,7 @@
23
23
  "node": ">=20.0.0"
24
24
  },
25
25
  "peerDependencies": {
26
- "@zintrust/core": "^0.4.6"
26
+ "@zintrust/core": "^0.4.27"
27
27
  },
28
28
  "publishConfig": {
29
29
  "access": "public"