@zenstackhq/runtime 3.0.0-alpha.21 → 3.0.0-alpha.22
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/index.cjs +55 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +55 -16
- package/dist/index.js.map +1 -1
- package/package.json +10 -8
package/dist/index.js
CHANGED
|
@@ -6255,6 +6255,7 @@ __name(processCasing, "processCasing");
|
|
|
6255
6255
|
// src/client/helpers/schema-db-pusher.ts
|
|
6256
6256
|
import { invariant as invariant10 } from "@zenstackhq/common-helpers";
|
|
6257
6257
|
import { sql as sql8 } from "kysely";
|
|
6258
|
+
import toposort from "toposort";
|
|
6258
6259
|
import { match as match18 } from "ts-pattern";
|
|
6259
6260
|
var SchemaDbPusher = class {
|
|
6260
6261
|
static {
|
|
@@ -6274,41 +6275,79 @@ var SchemaDbPusher = class {
|
|
|
6274
6275
|
await createEnum.execute();
|
|
6275
6276
|
}
|
|
6276
6277
|
}
|
|
6277
|
-
|
|
6278
|
-
|
|
6278
|
+
const sortedModels = this.sortModels(this.schema.models);
|
|
6279
|
+
for (const modelDef of sortedModels) {
|
|
6280
|
+
const createTable = this.createModelTable(tx, modelDef);
|
|
6279
6281
|
await createTable.execute();
|
|
6280
6282
|
}
|
|
6281
6283
|
});
|
|
6282
6284
|
}
|
|
6283
|
-
|
|
6284
|
-
|
|
6285
|
-
const
|
|
6285
|
+
sortModels(models) {
|
|
6286
|
+
const graph = [];
|
|
6287
|
+
for (const model of Object.values(models)) {
|
|
6288
|
+
let added = false;
|
|
6289
|
+
if (model.baseModel) {
|
|
6290
|
+
const baseDef = requireModel(this.schema, model.baseModel);
|
|
6291
|
+
graph.push([
|
|
6292
|
+
model,
|
|
6293
|
+
baseDef
|
|
6294
|
+
]);
|
|
6295
|
+
added = true;
|
|
6296
|
+
}
|
|
6297
|
+
for (const field of Object.values(model.fields)) {
|
|
6298
|
+
if (field.relation && field.relation.fields && field.relation.references) {
|
|
6299
|
+
const targetModel = requireModel(this.schema, field.type);
|
|
6300
|
+
graph.push([
|
|
6301
|
+
model,
|
|
6302
|
+
targetModel
|
|
6303
|
+
]);
|
|
6304
|
+
added = true;
|
|
6305
|
+
}
|
|
6306
|
+
}
|
|
6307
|
+
if (!added) {
|
|
6308
|
+
graph.push([
|
|
6309
|
+
model,
|
|
6310
|
+
void 0
|
|
6311
|
+
]);
|
|
6312
|
+
}
|
|
6313
|
+
}
|
|
6314
|
+
return toposort(graph).reverse().filter((m) => !!m);
|
|
6315
|
+
}
|
|
6316
|
+
createModelTable(kysely, modelDef) {
|
|
6317
|
+
let table = kysely.schema.createTable(modelDef.name).ifNotExists();
|
|
6286
6318
|
for (const [fieldName, fieldDef] of Object.entries(modelDef.fields)) {
|
|
6319
|
+
if (fieldDef.originModel && !fieldDef.id) {
|
|
6320
|
+
continue;
|
|
6321
|
+
}
|
|
6287
6322
|
if (fieldDef.relation) {
|
|
6288
|
-
table = this.addForeignKeyConstraint(table,
|
|
6323
|
+
table = this.addForeignKeyConstraint(table, modelDef.name, fieldName, fieldDef);
|
|
6289
6324
|
} else if (!this.isComputedField(fieldDef)) {
|
|
6290
|
-
table = this.createModelField(table,
|
|
6325
|
+
table = this.createModelField(table, fieldDef, modelDef);
|
|
6291
6326
|
}
|
|
6292
6327
|
}
|
|
6293
|
-
|
|
6294
|
-
|
|
6328
|
+
if (modelDef.baseModel) {
|
|
6329
|
+
const baseModelDef = requireModel(this.schema, modelDef.baseModel);
|
|
6330
|
+
table = table.addForeignKeyConstraint(`fk_${modelDef.baseModel}_delegate`, baseModelDef.idFields, modelDef.baseModel, baseModelDef.idFields, (cb) => cb.onDelete("cascade").onUpdate("cascade"));
|
|
6331
|
+
}
|
|
6332
|
+
table = this.addPrimaryKeyConstraint(table, modelDef);
|
|
6333
|
+
table = this.addUniqueConstraint(table, modelDef);
|
|
6295
6334
|
return table;
|
|
6296
6335
|
}
|
|
6297
6336
|
isComputedField(fieldDef) {
|
|
6298
6337
|
return fieldDef.attributes?.some((a) => a.name === "@computed");
|
|
6299
6338
|
}
|
|
6300
|
-
addPrimaryKeyConstraint(table,
|
|
6339
|
+
addPrimaryKeyConstraint(table, modelDef) {
|
|
6301
6340
|
if (modelDef.idFields.length === 1) {
|
|
6302
6341
|
if (Object.values(modelDef.fields).some((f) => f.id)) {
|
|
6303
6342
|
return table;
|
|
6304
6343
|
}
|
|
6305
6344
|
}
|
|
6306
6345
|
if (modelDef.idFields.length > 0) {
|
|
6307
|
-
table = table.addPrimaryKeyConstraint(`pk_${
|
|
6346
|
+
table = table.addPrimaryKeyConstraint(`pk_${modelDef.name}`, modelDef.idFields);
|
|
6308
6347
|
}
|
|
6309
6348
|
return table;
|
|
6310
6349
|
}
|
|
6311
|
-
addUniqueConstraint(table,
|
|
6350
|
+
addUniqueConstraint(table, modelDef) {
|
|
6312
6351
|
for (const [key, value] of Object.entries(modelDef.uniqueFields)) {
|
|
6313
6352
|
invariant10(typeof value === "object", "expecting an object");
|
|
6314
6353
|
if ("type" in value) {
|
|
@@ -6316,17 +6355,17 @@ var SchemaDbPusher = class {
|
|
|
6316
6355
|
if (fieldDef.unique) {
|
|
6317
6356
|
continue;
|
|
6318
6357
|
}
|
|
6319
|
-
table = table.addUniqueConstraint(`unique_${
|
|
6358
|
+
table = table.addUniqueConstraint(`unique_${modelDef.name}_${key}`, [
|
|
6320
6359
|
key
|
|
6321
6360
|
]);
|
|
6322
6361
|
} else {
|
|
6323
|
-
table = table.addUniqueConstraint(`unique_${
|
|
6362
|
+
table = table.addUniqueConstraint(`unique_${modelDef.name}_${key}`, Object.keys(value));
|
|
6324
6363
|
}
|
|
6325
6364
|
}
|
|
6326
6365
|
return table;
|
|
6327
6366
|
}
|
|
6328
|
-
createModelField(table,
|
|
6329
|
-
return table.addColumn(
|
|
6367
|
+
createModelField(table, fieldDef, modelDef) {
|
|
6368
|
+
return table.addColumn(fieldDef.name, this.mapFieldType(fieldDef), (col) => {
|
|
6330
6369
|
if (fieldDef.id && modelDef.idFields.length === 1) {
|
|
6331
6370
|
col = col.primaryKey();
|
|
6332
6371
|
}
|