@zenstackhq/orm 3.0.0-beta.25 → 3.0.0-beta.26

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.js CHANGED
@@ -1098,7 +1098,7 @@ var BaseCrudDialect = class {
1098
1098
  if (isRelationField(this.schema, model, field)) {
1099
1099
  continue;
1100
1100
  }
1101
- if (omit?.[field] === true) {
1101
+ if (this.shouldOmitField(omit, model, field)) {
1102
1102
  continue;
1103
1103
  }
1104
1104
  result = this.buildSelectField(result, model, modelAlias, field);
@@ -1119,6 +1119,16 @@ var BaseCrudDialect = class {
1119
1119
  }
1120
1120
  return result;
1121
1121
  }
1122
+ shouldOmitField(omit, model, field) {
1123
+ if (omit && typeof omit === "object" && typeof omit[field] === "boolean") {
1124
+ return omit[field];
1125
+ }
1126
+ if (this.options.omit?.[model] && typeof this.options.omit[model] === "object" && typeof this.options.omit[model][field] === "boolean") {
1127
+ return this.options.omit[model][field];
1128
+ }
1129
+ const fieldDef = requireField(this.schema, model, field);
1130
+ return !!fieldDef.omit;
1131
+ }
1122
1132
  buildModelSelect(model, subQueryAlias, payload, selectAllFields) {
1123
1133
  let subQuery = this.buildSelectModel(model, subQueryAlias);
1124
1134
  if (selectAllFields) {
@@ -1382,7 +1392,8 @@ var PostgresCrudDialect = class extends BaseCrudDialect {
1382
1392
  ]).flatMap((v) => v));
1383
1393
  }
1384
1394
  if (payload === true || !payload.select) {
1385
- objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !(typeof payload === "object" && payload.omit?.[name] === true)).map(([field]) => [
1395
+ const omit = typeof payload === "object" ? payload.omit : void 0;
1396
+ objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !this.shouldOmitField(omit, relationModel, name)).map(([field]) => [
1386
1397
  sql2.lit(field),
1387
1398
  this.fieldRef(relationModel, field, relationModelAlias, false)
1388
1399
  ]).flatMap((v) => v));
@@ -1593,7 +1604,8 @@ var SqliteCrudDialect = class extends BaseCrudDialect {
1593
1604
  ]).flatMap((v) => v));
1594
1605
  }
1595
1606
  if (payload === true || !payload.select) {
1596
- objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !(typeof payload === "object" && payload.omit?.[name] === true)).map(([field]) => [
1607
+ const omit = typeof payload === "object" ? payload.omit : void 0;
1608
+ objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !this.shouldOmitField(omit, relationModel, name)).map(([field]) => [
1597
1609
  sql3.lit(field),
1598
1610
  this.fieldRef(relationModel, field, subQueryName, false)
1599
1611
  ]).flatMap((v) => v));
@@ -3069,12 +3081,11 @@ var BaseOperationHandler = class {
3069
3081
  const allFields = Object.keys(modelDef.fields);
3070
3082
  const relationFields = Object.values(modelDef.fields).filter((f) => f.relation).map((f) => f.name);
3071
3083
  const computedFields = Object.values(modelDef.fields).filter((f) => f.computed).map((f) => f.name);
3072
- const omit = Object.entries(args.omit ?? {}).filter(([, v]) => v).map(([k]) => k);
3073
3084
  const allFieldsSelected = [];
3074
3085
  if (!args.select || typeof args.select !== "object") {
3075
- allFieldsSelected.push(...allFields.filter((f) => !relationFields.includes(f) && !omit.includes(f)));
3086
+ allFieldsSelected.push(...allFields.filter((f) => !relationFields.includes(f) && !this.dialect.shouldOmitField(args.omit, model, f)));
3076
3087
  } else {
3077
- allFieldsSelected.push(...Object.entries(args.select).filter(([k, v]) => v && !omit.includes(k)).map(([k]) => k));
3088
+ allFieldsSelected.push(...Object.entries(args.select).filter(([k, v]) => v && !this.dialect.shouldOmitField(args.omit, model, k)).map(([k]) => k));
3078
3089
  }
3079
3090
  if (allFieldsSelected.some((f) => relationFields.includes(f) || computedFields.includes(f))) {
3080
3091
  return {
@@ -3972,6 +3983,9 @@ var InputValidator = class {
3972
3983
  get schema() {
3973
3984
  return this.client.$schema;
3974
3985
  }
3986
+ get options() {
3987
+ return this.client.$options;
3988
+ }
3975
3989
  get extraValidationsEnabled() {
3976
3990
  return this.client.$options.validateInput !== false;
3977
3991
  }
@@ -4461,7 +4475,11 @@ var InputValidator = class {
4461
4475
  for (const field of Object.keys(modelDef.fields)) {
4462
4476
  const fieldDef = requireField(this.schema, model, field);
4463
4477
  if (!fieldDef.relation) {
4464
- fields[field] = z2.boolean().optional();
4478
+ if (this.options.allowQueryTimeOmitOverride !== false) {
4479
+ fields[field] = z2.boolean().optional();
4480
+ } else {
4481
+ fields[field] = z2.literal(true).optional();
4482
+ }
4465
4483
  }
4466
4484
  }
4467
4485
  return z2.strictObject(fields);
@@ -4874,7 +4892,8 @@ var InputValidator = class {
4874
4892
  let schema = z2.strictObject({
4875
4893
  where: this.makeWhereSchema(model, true),
4876
4894
  select: this.makeSelectSchema(model).optional().nullable(),
4877
- include: this.makeIncludeSchema(model).optional().nullable()
4895
+ include: this.makeIncludeSchema(model).optional().nullable(),
4896
+ omit: this.makeOmitSchema(model).optional().nullable()
4878
4897
  });
4879
4898
  schema = this.refineForSelectIncludeMutuallyExclusive(schema);
4880
4899
  schema = this.refineForSelectOmitMutuallyExclusive(schema);
@@ -6796,6 +6815,9 @@ var ClientImpl = class _ClientImpl {
6796
6815
  get $auth() {
6797
6816
  return this.auth;
6798
6817
  }
6818
+ $setOptions(options) {
6819
+ return new _ClientImpl(this.schema, options, this);
6820
+ }
6799
6821
  $setInputValidation(enable) {
6800
6822
  const newOptions = {
6801
6823
  ...this.options,
@@ -7275,7 +7297,8 @@ var DefaultOperationNodeVisitor = class extends OperationNodeVisitor {
7275
7297
  // src/utils/schema-utils.ts
7276
7298
  var schema_utils_exports = {};
7277
7299
  __export(schema_utils_exports, {
7278
- ExpressionVisitor: () => ExpressionVisitor
7300
+ ExpressionVisitor: () => ExpressionVisitor,
7301
+ MatchingExpressionVisitor: () => MatchingExpressionVisitor
7279
7302
  });
7280
7303
  import { match as match17 } from "ts-pattern";
7281
7304
  var ExpressionVisitor = class {
@@ -7283,7 +7306,7 @@ var ExpressionVisitor = class {
7283
7306
  __name(this, "ExpressionVisitor");
7284
7307
  }
7285
7308
  visit(expr) {
7286
- match17(expr).with({
7309
+ return match17(expr).with({
7287
7310
  kind: "literal"
7288
7311
  }, (e) => this.visitLiteral(e)).with({
7289
7312
  kind: "array"
@@ -7306,28 +7329,67 @@ var ExpressionVisitor = class {
7306
7329
  visitLiteral(_e) {
7307
7330
  }
7308
7331
  visitArray(e) {
7309
- e.items.forEach((item) => this.visit(item));
7332
+ for (const item of e.items) {
7333
+ const result = this.visit(item);
7334
+ if (result?.abort) {
7335
+ return result;
7336
+ }
7337
+ }
7310
7338
  }
7311
7339
  visitField(_e) {
7312
7340
  }
7313
7341
  visitMember(e) {
7314
- this.visit(e.receiver);
7342
+ return this.visit(e.receiver);
7315
7343
  }
7316
7344
  visitBinary(e) {
7317
- this.visit(e.left);
7318
- this.visit(e.right);
7345
+ const l = this.visit(e.left);
7346
+ if (l?.abort) {
7347
+ return l;
7348
+ } else {
7349
+ return this.visit(e.right);
7350
+ }
7319
7351
  }
7320
7352
  visitUnary(e) {
7321
- this.visit(e.operand);
7353
+ return this.visit(e.operand);
7322
7354
  }
7323
7355
  visitCall(e) {
7324
- e.args?.forEach((arg) => this.visit(arg));
7356
+ for (const arg of e.args ?? []) {
7357
+ const r = this.visit(arg);
7358
+ if (r?.abort) {
7359
+ return r;
7360
+ }
7361
+ }
7325
7362
  }
7326
7363
  visitThis(_e) {
7327
7364
  }
7328
7365
  visitNull(_e) {
7329
7366
  }
7330
7367
  };
7368
+ var MatchingExpressionVisitor = class extends ExpressionVisitor {
7369
+ static {
7370
+ __name(this, "MatchingExpressionVisitor");
7371
+ }
7372
+ predicate;
7373
+ found = false;
7374
+ constructor(predicate) {
7375
+ super(), this.predicate = predicate;
7376
+ }
7377
+ find(expr) {
7378
+ this.found = false;
7379
+ this.visit(expr);
7380
+ return this.found;
7381
+ }
7382
+ visit(expr) {
7383
+ if (this.predicate(expr)) {
7384
+ this.found = true;
7385
+ return {
7386
+ abort: true
7387
+ };
7388
+ } else {
7389
+ return super.visit(expr);
7390
+ }
7391
+ }
7392
+ };
7331
7393
  export {
7332
7394
  BaseCrudDialect,
7333
7395
  CRUD,