@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.cjs
CHANGED
|
@@ -6290,6 +6290,7 @@ __name(processCasing, "processCasing");
|
|
|
6290
6290
|
// src/client/helpers/schema-db-pusher.ts
|
|
6291
6291
|
var import_common_helpers11 = require("@zenstackhq/common-helpers");
|
|
6292
6292
|
var import_kysely15 = require("kysely");
|
|
6293
|
+
var import_toposort = __toESM(require("toposort"), 1);
|
|
6293
6294
|
var import_ts_pattern18 = require("ts-pattern");
|
|
6294
6295
|
var SchemaDbPusher = class {
|
|
6295
6296
|
static {
|
|
@@ -6309,41 +6310,79 @@ var SchemaDbPusher = class {
|
|
|
6309
6310
|
await createEnum.execute();
|
|
6310
6311
|
}
|
|
6311
6312
|
}
|
|
6312
|
-
|
|
6313
|
-
|
|
6313
|
+
const sortedModels = this.sortModels(this.schema.models);
|
|
6314
|
+
for (const modelDef of sortedModels) {
|
|
6315
|
+
const createTable = this.createModelTable(tx, modelDef);
|
|
6314
6316
|
await createTable.execute();
|
|
6315
6317
|
}
|
|
6316
6318
|
});
|
|
6317
6319
|
}
|
|
6318
|
-
|
|
6319
|
-
|
|
6320
|
-
const
|
|
6320
|
+
sortModels(models) {
|
|
6321
|
+
const graph = [];
|
|
6322
|
+
for (const model of Object.values(models)) {
|
|
6323
|
+
let added = false;
|
|
6324
|
+
if (model.baseModel) {
|
|
6325
|
+
const baseDef = requireModel(this.schema, model.baseModel);
|
|
6326
|
+
graph.push([
|
|
6327
|
+
model,
|
|
6328
|
+
baseDef
|
|
6329
|
+
]);
|
|
6330
|
+
added = true;
|
|
6331
|
+
}
|
|
6332
|
+
for (const field of Object.values(model.fields)) {
|
|
6333
|
+
if (field.relation && field.relation.fields && field.relation.references) {
|
|
6334
|
+
const targetModel = requireModel(this.schema, field.type);
|
|
6335
|
+
graph.push([
|
|
6336
|
+
model,
|
|
6337
|
+
targetModel
|
|
6338
|
+
]);
|
|
6339
|
+
added = true;
|
|
6340
|
+
}
|
|
6341
|
+
}
|
|
6342
|
+
if (!added) {
|
|
6343
|
+
graph.push([
|
|
6344
|
+
model,
|
|
6345
|
+
void 0
|
|
6346
|
+
]);
|
|
6347
|
+
}
|
|
6348
|
+
}
|
|
6349
|
+
return (0, import_toposort.default)(graph).reverse().filter((m) => !!m);
|
|
6350
|
+
}
|
|
6351
|
+
createModelTable(kysely, modelDef) {
|
|
6352
|
+
let table = kysely.schema.createTable(modelDef.name).ifNotExists();
|
|
6321
6353
|
for (const [fieldName, fieldDef] of Object.entries(modelDef.fields)) {
|
|
6354
|
+
if (fieldDef.originModel && !fieldDef.id) {
|
|
6355
|
+
continue;
|
|
6356
|
+
}
|
|
6322
6357
|
if (fieldDef.relation) {
|
|
6323
|
-
table = this.addForeignKeyConstraint(table,
|
|
6358
|
+
table = this.addForeignKeyConstraint(table, modelDef.name, fieldName, fieldDef);
|
|
6324
6359
|
} else if (!this.isComputedField(fieldDef)) {
|
|
6325
|
-
table = this.createModelField(table,
|
|
6360
|
+
table = this.createModelField(table, fieldDef, modelDef);
|
|
6326
6361
|
}
|
|
6327
6362
|
}
|
|
6328
|
-
|
|
6329
|
-
|
|
6363
|
+
if (modelDef.baseModel) {
|
|
6364
|
+
const baseModelDef = requireModel(this.schema, modelDef.baseModel);
|
|
6365
|
+
table = table.addForeignKeyConstraint(`fk_${modelDef.baseModel}_delegate`, baseModelDef.idFields, modelDef.baseModel, baseModelDef.idFields, (cb) => cb.onDelete("cascade").onUpdate("cascade"));
|
|
6366
|
+
}
|
|
6367
|
+
table = this.addPrimaryKeyConstraint(table, modelDef);
|
|
6368
|
+
table = this.addUniqueConstraint(table, modelDef);
|
|
6330
6369
|
return table;
|
|
6331
6370
|
}
|
|
6332
6371
|
isComputedField(fieldDef) {
|
|
6333
6372
|
return fieldDef.attributes?.some((a) => a.name === "@computed");
|
|
6334
6373
|
}
|
|
6335
|
-
addPrimaryKeyConstraint(table,
|
|
6374
|
+
addPrimaryKeyConstraint(table, modelDef) {
|
|
6336
6375
|
if (modelDef.idFields.length === 1) {
|
|
6337
6376
|
if (Object.values(modelDef.fields).some((f) => f.id)) {
|
|
6338
6377
|
return table;
|
|
6339
6378
|
}
|
|
6340
6379
|
}
|
|
6341
6380
|
if (modelDef.idFields.length > 0) {
|
|
6342
|
-
table = table.addPrimaryKeyConstraint(`pk_${
|
|
6381
|
+
table = table.addPrimaryKeyConstraint(`pk_${modelDef.name}`, modelDef.idFields);
|
|
6343
6382
|
}
|
|
6344
6383
|
return table;
|
|
6345
6384
|
}
|
|
6346
|
-
addUniqueConstraint(table,
|
|
6385
|
+
addUniqueConstraint(table, modelDef) {
|
|
6347
6386
|
for (const [key, value] of Object.entries(modelDef.uniqueFields)) {
|
|
6348
6387
|
(0, import_common_helpers11.invariant)(typeof value === "object", "expecting an object");
|
|
6349
6388
|
if ("type" in value) {
|
|
@@ -6351,17 +6390,17 @@ var SchemaDbPusher = class {
|
|
|
6351
6390
|
if (fieldDef.unique) {
|
|
6352
6391
|
continue;
|
|
6353
6392
|
}
|
|
6354
|
-
table = table.addUniqueConstraint(`unique_${
|
|
6393
|
+
table = table.addUniqueConstraint(`unique_${modelDef.name}_${key}`, [
|
|
6355
6394
|
key
|
|
6356
6395
|
]);
|
|
6357
6396
|
} else {
|
|
6358
|
-
table = table.addUniqueConstraint(`unique_${
|
|
6397
|
+
table = table.addUniqueConstraint(`unique_${modelDef.name}_${key}`, Object.keys(value));
|
|
6359
6398
|
}
|
|
6360
6399
|
}
|
|
6361
6400
|
return table;
|
|
6362
6401
|
}
|
|
6363
|
-
createModelField(table,
|
|
6364
|
-
return table.addColumn(
|
|
6402
|
+
createModelField(table, fieldDef, modelDef) {
|
|
6403
|
+
return table.addColumn(fieldDef.name, this.mapFieldType(fieldDef), (col) => {
|
|
6365
6404
|
if (fieldDef.id && modelDef.idFields.length === 1) {
|
|
6366
6405
|
col = col.primaryKey();
|
|
6367
6406
|
}
|