zenstack-kit 0.1.21 → 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;
|
|
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(
|
|
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(
|
|
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}, ${
|
|
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}, ${
|
|
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}, ${
|
|
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,
|