@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.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 {
@@ -4002,6 +4013,9 @@ var InputValidator = class {
4002
4013
  get schema() {
4003
4014
  return this.client.$schema;
4004
4015
  }
4016
+ get options() {
4017
+ return this.client.$options;
4018
+ }
4005
4019
  get extraValidationsEnabled() {
4006
4020
  return this.client.$options.validateInput !== false;
4007
4021
  }
@@ -4491,7 +4505,11 @@ var InputValidator = class {
4491
4505
  for (const field of Object.keys(modelDef.fields)) {
4492
4506
  const fieldDef = requireField(this.schema, model, field);
4493
4507
  if (!fieldDef.relation) {
4494
- 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
+ }
4495
4513
  }
4496
4514
  }
4497
4515
  return import_zod2.z.strictObject(fields);
@@ -4904,7 +4922,8 @@ var InputValidator = class {
4904
4922
  let schema = import_zod2.z.strictObject({
4905
4923
  where: this.makeWhereSchema(model, true),
4906
4924
  select: this.makeSelectSchema(model).optional().nullable(),
4907
- include: this.makeIncludeSchema(model).optional().nullable()
4925
+ include: this.makeIncludeSchema(model).optional().nullable(),
4926
+ omit: this.makeOmitSchema(model).optional().nullable()
4908
4927
  });
4909
4928
  schema = this.refineForSelectIncludeMutuallyExclusive(schema);
4910
4929
  schema = this.refineForSelectOmitMutuallyExclusive(schema);
@@ -6826,6 +6845,9 @@ var ClientImpl = class _ClientImpl {
6826
6845
  get $auth() {
6827
6846
  return this.auth;
6828
6847
  }
6848
+ $setOptions(options) {
6849
+ return new _ClientImpl(this.schema, options, this);
6850
+ }
6829
6851
  $setInputValidation(enable) {
6830
6852
  const newOptions = {
6831
6853
  ...this.options,
@@ -7305,7 +7327,8 @@ var DefaultOperationNodeVisitor = class extends import_kysely11.OperationNodeVis
7305
7327
  // src/utils/schema-utils.ts
7306
7328
  var schema_utils_exports = {};
7307
7329
  __export(schema_utils_exports, {
7308
- ExpressionVisitor: () => ExpressionVisitor
7330
+ ExpressionVisitor: () => ExpressionVisitor,
7331
+ MatchingExpressionVisitor: () => MatchingExpressionVisitor
7309
7332
  });
7310
7333
  var import_ts_pattern17 = require("ts-pattern");
7311
7334
  var ExpressionVisitor = class {
@@ -7313,7 +7336,7 @@ var ExpressionVisitor = class {
7313
7336
  __name(this, "ExpressionVisitor");
7314
7337
  }
7315
7338
  visit(expr) {
7316
- (0, import_ts_pattern17.match)(expr).with({
7339
+ return (0, import_ts_pattern17.match)(expr).with({
7317
7340
  kind: "literal"
7318
7341
  }, (e) => this.visitLiteral(e)).with({
7319
7342
  kind: "array"
@@ -7336,28 +7359,67 @@ var ExpressionVisitor = class {
7336
7359
  visitLiteral(_e) {
7337
7360
  }
7338
7361
  visitArray(e) {
7339
- 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
+ }
7340
7368
  }
7341
7369
  visitField(_e) {
7342
7370
  }
7343
7371
  visitMember(e) {
7344
- this.visit(e.receiver);
7372
+ return this.visit(e.receiver);
7345
7373
  }
7346
7374
  visitBinary(e) {
7347
- this.visit(e.left);
7348
- 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
+ }
7349
7381
  }
7350
7382
  visitUnary(e) {
7351
- this.visit(e.operand);
7383
+ return this.visit(e.operand);
7352
7384
  }
7353
7385
  visitCall(e) {
7354
- 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
+ }
7355
7392
  }
7356
7393
  visitThis(_e) {
7357
7394
  }
7358
7395
  visitNull(_e) {
7359
7396
  }
7360
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
+ };
7361
7423
  // Annotate the CommonJS export names for ESM import in node:
7362
7424
  0 && (module.exports = {
7363
7425
  BaseCrudDialect,