@zenstackhq/orm 3.0.0-beta.24 → 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.cjs CHANGED
@@ -1128,7 +1128,7 @@ var BaseCrudDialect = class {
1128
1128
  if (isRelationField(this.schema, model, field)) {
1129
1129
  continue;
1130
1130
  }
1131
- if (omit?.[field] === true) {
1131
+ if (this.shouldOmitField(omit, model, field)) {
1132
1132
  continue;
1133
1133
  }
1134
1134
  result = this.buildSelectField(result, model, modelAlias, field);
@@ -1149,6 +1149,16 @@ var BaseCrudDialect = class {
1149
1149
  }
1150
1150
  return result;
1151
1151
  }
1152
+ shouldOmitField(omit, model, field) {
1153
+ if (omit && typeof omit === "object" && typeof omit[field] === "boolean") {
1154
+ return omit[field];
1155
+ }
1156
+ if (this.options.omit?.[model] && typeof this.options.omit[model] === "object" && typeof this.options.omit[model][field] === "boolean") {
1157
+ return this.options.omit[model][field];
1158
+ }
1159
+ const fieldDef = requireField(this.schema, model, field);
1160
+ return !!fieldDef.omit;
1161
+ }
1152
1162
  buildModelSelect(model, subQueryAlias, payload, selectAllFields) {
1153
1163
  let subQuery = this.buildSelectModel(model, subQueryAlias);
1154
1164
  if (selectAllFields) {
@@ -1412,7 +1422,8 @@ var PostgresCrudDialect = class extends BaseCrudDialect {
1412
1422
  ]).flatMap((v) => v));
1413
1423
  }
1414
1424
  if (payload === true || !payload.select) {
1415
- objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !(typeof payload === "object" && payload.omit?.[name] === true)).map(([field]) => [
1425
+ const omit = typeof payload === "object" ? payload.omit : void 0;
1426
+ objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !this.shouldOmitField(omit, relationModel, name)).map(([field]) => [
1416
1427
  import_kysely3.sql.lit(field),
1417
1428
  this.fieldRef(relationModel, field, relationModelAlias, false)
1418
1429
  ]).flatMap((v) => v));
@@ -1623,7 +1634,8 @@ var SqliteCrudDialect = class extends BaseCrudDialect {
1623
1634
  ]).flatMap((v) => v));
1624
1635
  }
1625
1636
  if (payload === true || !payload.select) {
1626
- objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !(typeof payload === "object" && payload.omit?.[name] === true)).map(([field]) => [
1637
+ const omit = typeof payload === "object" ? payload.omit : void 0;
1638
+ objArgs.push(...Object.entries(relationModelDef.fields).filter(([, value]) => !value.relation).filter(([name]) => !this.shouldOmitField(omit, relationModel, name)).map(([field]) => [
1627
1639
  import_kysely4.sql.lit(field),
1628
1640
  this.fieldRef(relationModel, field, subQueryName, false)
1629
1641
  ]).flatMap((v) => v));
@@ -3099,12 +3111,11 @@ var BaseOperationHandler = class {
3099
3111
  const allFields = Object.keys(modelDef.fields);
3100
3112
  const relationFields = Object.values(modelDef.fields).filter((f) => f.relation).map((f) => f.name);
3101
3113
  const computedFields = Object.values(modelDef.fields).filter((f) => f.computed).map((f) => f.name);
3102
- const omit = Object.entries(args.omit ?? {}).filter(([, v]) => v).map(([k]) => k);
3103
3114
  const allFieldsSelected = [];
3104
3115
  if (!args.select || typeof args.select !== "object") {
3105
- allFieldsSelected.push(...allFields.filter((f) => !relationFields.includes(f) && !omit.includes(f)));
3116
+ allFieldsSelected.push(...allFields.filter((f) => !relationFields.includes(f) && !this.dialect.shouldOmitField(args.omit, model, f)));
3106
3117
  } else {
3107
- allFieldsSelected.push(...Object.entries(args.select).filter(([k, v]) => v && !omit.includes(k)).map(([k]) => k));
3118
+ allFieldsSelected.push(...Object.entries(args.select).filter(([k, v]) => v && !this.dialect.shouldOmitField(args.omit, model, k)).map(([k]) => k));
3108
3119
  }
3109
3120
  if (allFieldsSelected.some((f) => relationFields.includes(f) || computedFields.includes(f))) {
3110
3121
  return {
@@ -3727,15 +3738,14 @@ function addBigIntValidation(schema, attributes) {
3727
3738
  if (val === void 0) {
3728
3739
  continue;
3729
3740
  }
3730
- const bigIntVal = BigInt(val);
3731
3741
  (0, import_ts_pattern12.match)(attr.name).with("@gt", () => {
3732
- result = result.gt(bigIntVal);
3742
+ result = result.gt(BigInt(val));
3733
3743
  }).with("@gte", () => {
3734
- result = result.gte(bigIntVal);
3744
+ result = result.gte(BigInt(val));
3735
3745
  }).with("@lt", () => {
3736
- result = result.lt(bigIntVal);
3746
+ result = result.lt(BigInt(val));
3737
3747
  }).with("@lte", () => {
3738
- result = result.lte(bigIntVal);
3748
+ result = result.lte(BigInt(val));
3739
3749
  });
3740
3750
  }
3741
3751
  return result;
@@ -4003,6 +4013,9 @@ var InputValidator = class {
4003
4013
  get schema() {
4004
4014
  return this.client.$schema;
4005
4015
  }
4016
+ get options() {
4017
+ return this.client.$options;
4018
+ }
4006
4019
  get extraValidationsEnabled() {
4007
4020
  return this.client.$options.validateInput !== false;
4008
4021
  }
@@ -4492,7 +4505,11 @@ var InputValidator = class {
4492
4505
  for (const field of Object.keys(modelDef.fields)) {
4493
4506
  const fieldDef = requireField(this.schema, model, field);
4494
4507
  if (!fieldDef.relation) {
4495
- fields[field] = import_zod2.z.boolean().optional();
4508
+ if (this.options.allowQueryTimeOmitOverride !== false) {
4509
+ fields[field] = import_zod2.z.boolean().optional();
4510
+ } else {
4511
+ fields[field] = import_zod2.z.literal(true).optional();
4512
+ }
4496
4513
  }
4497
4514
  }
4498
4515
  return import_zod2.z.strictObject(fields);
@@ -4905,7 +4922,8 @@ var InputValidator = class {
4905
4922
  let schema = import_zod2.z.strictObject({
4906
4923
  where: this.makeWhereSchema(model, true),
4907
4924
  select: this.makeSelectSchema(model).optional().nullable(),
4908
- include: this.makeIncludeSchema(model).optional().nullable()
4925
+ include: this.makeIncludeSchema(model).optional().nullable(),
4926
+ omit: this.makeOmitSchema(model).optional().nullable()
4909
4927
  });
4910
4928
  schema = this.refineForSelectIncludeMutuallyExclusive(schema);
4911
4929
  schema = this.refineForSelectOmitMutuallyExclusive(schema);
@@ -6827,6 +6845,9 @@ var ClientImpl = class _ClientImpl {
6827
6845
  get $auth() {
6828
6846
  return this.auth;
6829
6847
  }
6848
+ $setOptions(options) {
6849
+ return new _ClientImpl(this.schema, options, this);
6850
+ }
6830
6851
  $setInputValidation(enable) {
6831
6852
  const newOptions = {
6832
6853
  ...this.options,
@@ -7306,7 +7327,8 @@ var DefaultOperationNodeVisitor = class extends import_kysely11.OperationNodeVis
7306
7327
  // src/utils/schema-utils.ts
7307
7328
  var schema_utils_exports = {};
7308
7329
  __export(schema_utils_exports, {
7309
- ExpressionVisitor: () => ExpressionVisitor
7330
+ ExpressionVisitor: () => ExpressionVisitor,
7331
+ MatchingExpressionVisitor: () => MatchingExpressionVisitor
7310
7332
  });
7311
7333
  var import_ts_pattern17 = require("ts-pattern");
7312
7334
  var ExpressionVisitor = class {
@@ -7314,7 +7336,7 @@ var ExpressionVisitor = class {
7314
7336
  __name(this, "ExpressionVisitor");
7315
7337
  }
7316
7338
  visit(expr) {
7317
- (0, import_ts_pattern17.match)(expr).with({
7339
+ return (0, import_ts_pattern17.match)(expr).with({
7318
7340
  kind: "literal"
7319
7341
  }, (e) => this.visitLiteral(e)).with({
7320
7342
  kind: "array"
@@ -7337,28 +7359,67 @@ var ExpressionVisitor = class {
7337
7359
  visitLiteral(_e) {
7338
7360
  }
7339
7361
  visitArray(e) {
7340
- e.items.forEach((item) => this.visit(item));
7362
+ for (const item of e.items) {
7363
+ const result = this.visit(item);
7364
+ if (result?.abort) {
7365
+ return result;
7366
+ }
7367
+ }
7341
7368
  }
7342
7369
  visitField(_e) {
7343
7370
  }
7344
7371
  visitMember(e) {
7345
- this.visit(e.receiver);
7372
+ return this.visit(e.receiver);
7346
7373
  }
7347
7374
  visitBinary(e) {
7348
- this.visit(e.left);
7349
- this.visit(e.right);
7375
+ const l = this.visit(e.left);
7376
+ if (l?.abort) {
7377
+ return l;
7378
+ } else {
7379
+ return this.visit(e.right);
7380
+ }
7350
7381
  }
7351
7382
  visitUnary(e) {
7352
- this.visit(e.operand);
7383
+ return this.visit(e.operand);
7353
7384
  }
7354
7385
  visitCall(e) {
7355
- e.args?.forEach((arg) => this.visit(arg));
7386
+ for (const arg of e.args ?? []) {
7387
+ const r = this.visit(arg);
7388
+ if (r?.abort) {
7389
+ return r;
7390
+ }
7391
+ }
7356
7392
  }
7357
7393
  visitThis(_e) {
7358
7394
  }
7359
7395
  visitNull(_e) {
7360
7396
  }
7361
7397
  };
7398
+ var MatchingExpressionVisitor = class extends ExpressionVisitor {
7399
+ static {
7400
+ __name(this, "MatchingExpressionVisitor");
7401
+ }
7402
+ predicate;
7403
+ found = false;
7404
+ constructor(predicate) {
7405
+ super(), this.predicate = predicate;
7406
+ }
7407
+ find(expr) {
7408
+ this.found = false;
7409
+ this.visit(expr);
7410
+ return this.found;
7411
+ }
7412
+ visit(expr) {
7413
+ if (this.predicate(expr)) {
7414
+ this.found = true;
7415
+ return {
7416
+ abort: true
7417
+ };
7418
+ } else {
7419
+ return super.visit(expr);
7420
+ }
7421
+ }
7422
+ };
7362
7423
  // Annotate the CommonJS export names for ESM import in node:
7363
7424
  0 && (module.exports = {
7364
7425
  BaseCrudDialect,