zenstack-kit 0.1.22 → 0.1.23

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 +1 @@
1
- {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/migrations/prisma/apply.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE,MAAM,WAAW,4BAA4B;IAC3C,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,eAAe,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AA6QD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,2BAA2B,CAAC,CAyLtC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,6BAA6B,CAAC,CA0DxC"}
1
+ {"version":3,"file":"apply.d.ts","sourceRoot":"","sources":["../../../src/migrations/prisma/apply.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAIjE,MAAM,WAAW,4BAA4B;IAC3C,6BAA6B;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,uBAAuB;IACvB,OAAO,EAAE,aAAa,CAAC;IACvB,8BAA8B;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,uDAAuD;IACvD,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,KAAK,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,CAAC,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,eAAe,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,kBAAkB,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,gBAAgB,GAAG,mBAAmB,CAAC;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,uBAAuB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,6BAA6B;IAC5C,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC9C,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AA0RD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,2BAA2B,CAAC,CAyLtC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,4BAA4B,GACpC,OAAO,CAAC,6BAA6B,CAAC,CA0DxC"}
@@ -4,6 +4,15 @@ import * as crypto from "crypto";
4
4
  import { sql } from "kysely";
5
5
  import { createKyselyAdapter } from "../../sql/kysely-adapter.js";
6
6
  import { calculateChecksum, rehashWithSameVersion, readMigrationLog, writeMigrationLog } from "./log.js";
7
+ /**
8
+ * Strip version prefix from checksum for storage in the DB table.
9
+ * The DB checksum column is VARCHAR(64) (Prisma-compatible), so we store only the raw 64-char hex.
10
+ * The version prefix (e.g. "v2:") is preserved in the migration log file as the source of truth.
11
+ */
12
+ function checksumForDb(checksum) {
13
+ const colonIndex = checksum.indexOf(":");
14
+ return colonIndex !== -1 ? checksum.slice(colonIndex + 1) : checksum;
15
+ }
7
16
  /**
8
17
  * Ensure _prisma_migrations table exists
9
18
  */
@@ -27,7 +36,7 @@ async function ensureMigrationsTable(db, tableName, schema, dialect) {
27
36
  await sql `
28
37
  CREATE TABLE IF NOT EXISTS ${sql.raw(`"${schema}"."${tableName}"`)} (
29
38
  id VARCHAR(36) PRIMARY KEY,
30
- checksum VARCHAR(128) NOT NULL,
39
+ checksum VARCHAR(64) NOT NULL,
31
40
  finished_at TIMESTAMPTZ,
32
41
  migration_name VARCHAR(255) NOT NULL,
33
42
  logs TEXT,
@@ -41,7 +50,7 @@ async function ensureMigrationsTable(db, tableName, schema, dialect) {
41
50
  await sql `
42
51
  CREATE TABLE IF NOT EXISTS ${sql.raw(`\`${tableName}\``)} (
43
52
  id VARCHAR(36) PRIMARY KEY,
44
- checksum VARCHAR(128) NOT NULL,
53
+ checksum VARCHAR(64) NOT NULL,
45
54
  finished_at DATETIME,
46
55
  migration_name VARCHAR(255) NOT NULL,
47
56
  logs TEXT,
@@ -82,22 +91,23 @@ async function getAppliedMigrations(db, tableName, schema, dialect) {
82
91
  */
83
92
  async function recordMigration(db, tableName, schema, dialect, migrationName, checksum) {
84
93
  const id = crypto.randomUUID();
94
+ const dbChecksum = checksumForDb(checksum);
85
95
  if (dialect === "postgres" && schema) {
86
96
  await sql `
87
97
  INSERT INTO ${sql.raw(`"${schema}"."${tableName}"`)} (id, checksum, migration_name, finished_at, applied_steps_count)
88
- VALUES (${id}, ${checksum}, ${migrationName}, now(), 1)
98
+ VALUES (${id}, ${dbChecksum}, ${migrationName}, now(), 1)
89
99
  `.execute(db);
90
100
  }
91
101
  else if (dialect === "sqlite") {
92
102
  await sql `
93
103
  INSERT INTO ${sql.raw(`"${tableName}"`)} (id, checksum, migration_name, finished_at, applied_steps_count)
94
- VALUES (${id}, ${checksum}, ${migrationName}, datetime('now'), 1)
104
+ VALUES (${id}, ${dbChecksum}, ${migrationName}, datetime('now'), 1)
95
105
  `.execute(db);
96
106
  }
97
107
  else {
98
108
  await sql `
99
109
  INSERT INTO ${sql.raw(`\`${tableName}\``)} (id, checksum, migration_name, finished_at, applied_steps_count)
100
- VALUES (${id}, ${checksum}, ${migrationName}, NOW(), 1)
110
+ VALUES (${id}, ${dbChecksum}, ${migrationName}, NOW(), 1)
101
111
  `.execute(db);
102
112
  }
103
113
  }
@@ -160,8 +170,10 @@ function validateMigrationCoherence(appliedMigrations, migrationLog, migrationFo
160
170
  }
161
171
  lastAppliedIndex = i;
162
172
  // Check 3: Checksum validation for applied migrations
173
+ // Strip version prefix from both sides: new DB rows have bare hex, but old rows (written by
174
+ // Prisma, older versions of this tool, or direct inserts in tests) may still have "v2:".
163
175
  const dbRow = appliedMigrations.get(logEntry.name);
164
- if (dbRow.checksum !== logEntry.checksum) {
176
+ if (checksumForDb(dbRow.checksum) !== checksumForDb(logEntry.checksum)) {
165
177
  errors.push({
166
178
  type: "checksum_mismatch",
167
179
  migrationName: logEntry.name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zenstack-kit",
3
- "version": "0.1.22",
3
+ "version": "0.1.23",
4
4
  "description": "Drizzle-kit like CLI tooling for ZenStack schemas with Kysely support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",