directus-deploy-cli 0.12.4 → 0.12.5
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/dist/lint.js +34 -11
- package/dist/lint.js.map +1 -1
- package/package.json +1 -1
package/dist/lint.js
CHANGED
|
@@ -42,19 +42,21 @@ function parseSql(sql) {
|
|
|
42
42
|
createTables.push(m[1].toLowerCase());
|
|
43
43
|
}
|
|
44
44
|
// Find each `ALTER TABLE <t> …` block, then within that block find every
|
|
45
|
-
// `ADD COLUMN (IF NOT EXISTS)? <c>`.
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
// ADD COLUMN b int;
|
|
49
|
-
// shape.
|
|
45
|
+
// `ADD COLUMN (IF NOT EXISTS)? <c>`. Track the guard per-column so callers
|
|
46
|
+
// can distinguish belt-and-suspenders (safe idiom with snapshot field) from
|
|
47
|
+
// an unguarded double-write (will 500 on apply).
|
|
50
48
|
const alterRe = /\bALTER\s+TABLE\s+(?:ONLY\s+)?"?([a-z_][a-z0-9_]*)"?\s*([\s\S]*?);/gi;
|
|
51
49
|
while ((m = alterRe.exec(stripped)) !== null) {
|
|
52
50
|
const table = m[1].toLowerCase();
|
|
53
51
|
const body = m[2];
|
|
54
|
-
const colRe = /\bADD\s+COLUMN\s+(
|
|
52
|
+
const colRe = /\bADD\s+COLUMN\s+(IF\s+NOT\s+EXISTS\s+)?"?([a-z_][a-z0-9_]*)"?/gi;
|
|
55
53
|
let cm;
|
|
56
54
|
while ((cm = colRe.exec(body)) !== null) {
|
|
57
|
-
addColumns.push({
|
|
55
|
+
addColumns.push({
|
|
56
|
+
table,
|
|
57
|
+
column: cm[2].toLowerCase(),
|
|
58
|
+
ifNotExists: !!cm[1],
|
|
59
|
+
});
|
|
58
60
|
}
|
|
59
61
|
}
|
|
60
62
|
return { createTables, addColumns };
|
|
@@ -103,17 +105,38 @@ export async function lintMigrations(input) {
|
|
|
103
105
|
});
|
|
104
106
|
}
|
|
105
107
|
}
|
|
106
|
-
for (const { table, column } of addColumns) {
|
|
108
|
+
for (const { table, column, ifNotExists } of addColumns) {
|
|
107
109
|
// Manifest match: table is listed AND either fields[column] exists or
|
|
108
110
|
// fields is undefined (walk-all-unregistered mode).
|
|
109
111
|
const manifest = manifests.get(table);
|
|
110
112
|
const manifestCovers = !!manifest &&
|
|
111
113
|
(manifest.fields === undefined ||
|
|
112
114
|
Object.prototype.hasOwnProperty.call(manifest.fields, column));
|
|
113
|
-
if (manifestCovers)
|
|
114
|
-
continue;
|
|
115
115
|
const snapshotType = await fieldSnapshotType(input.snapshotDir, table, column);
|
|
116
|
-
|
|
116
|
+
const snapshotCovers = !!snapshotType && snapshotType !== "unknown";
|
|
117
|
+
// Double-write with a snapshot field:
|
|
118
|
+
// - Guarded (IF NOT EXISTS): legitimate belt-and-suspenders idiom.
|
|
119
|
+
// POST /fields creates the column first (config-first ordering);
|
|
120
|
+
// the migration's IF NOT EXISTS clause is a no-op. Common when a
|
|
121
|
+
// migration exists to backfill / set a default the snapshot can't
|
|
122
|
+
// express. Not a violation.
|
|
123
|
+
// - Unguarded: the reason today's digests PR failed. Whichever step
|
|
124
|
+
// runs second hits `500 column already exists`. Hard error.
|
|
125
|
+
if (snapshotCovers && !ifNotExists) {
|
|
126
|
+
violations.push({
|
|
127
|
+
kind: "column",
|
|
128
|
+
file: f,
|
|
129
|
+
table,
|
|
130
|
+
column,
|
|
131
|
+
reason: `${table}.${column} — unguarded ADD COLUMN conflicts with snapshot field (type=${snapshotType}). Either add IF NOT EXISTS to the ADD COLUMN (belt-and-suspenders idiom, POST /fields creates the column first), or remove the ADD COLUMN entirely (let the snapshot field be the sole writer).`,
|
|
132
|
+
});
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
if (snapshotCovers && ifNotExists) {
|
|
136
|
+
// belt-and-suspenders idiom, safe; snapshot owns the column.
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
if (manifestCovers)
|
|
117
140
|
continue;
|
|
118
141
|
violations.push({
|
|
119
142
|
kind: "column",
|
package/dist/lint.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA8BjC,KAAK,UAAU,aAAa,CAC1B,GAAW;IAEX,MAAM,GAAG,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC5C,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QACnC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAiB,CAAC;YAChF,IAAI,MAAM,EAAE,KAAK;gBAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;QACrD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4DAA4D;AAC5D,0DAA0D;AAC1D,6EAA6E;AAC7E,mCAAmC;AACnC,SAAS,QAAQ,CAAC,GAAW;IAI3B,MAAM,YAAY,GAAa,EAAE,CAAC;IAClC,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../src/lint.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "directus-deploy-cli",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.5",
|
|
4
4
|
"description": "Per-entity, non-atomic Directus deployment tool. Reconciles collections/fields/relations/roles/policies/permissions/flows/operations/migrations/seeds from git to any environment.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|