@zenstackhq/orm 3.0.0 → 3.1.1

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
@@ -560,8 +560,9 @@ function extractFieldName(node) {
560
560
  __name(extractFieldName, "extractFieldName");
561
561
 
562
562
  // src/client/crud/operations/base.ts
563
- import { createId } from "@paralleldrive/cuid2";
563
+ import { createId as cuid2 } from "@paralleldrive/cuid2";
564
564
  import { clone, enumerate as enumerate2, invariant as invariant5, isPlainObject as isPlainObject2 } from "@zenstackhq/common-helpers";
565
+ import { default as cuid1 } from "cuid";
565
566
  import { createQueryId, expressionBuilder as expressionBuilder2, sql as sql4 } from "kysely";
566
567
  import { nanoid } from "nanoid";
567
568
  import { match as match6 } from "ts-pattern";
@@ -2547,7 +2548,20 @@ var BaseOperationHandler = class {
2547
2548
  }
2548
2549
  evalGenerator(defaultValue) {
2549
2550
  if (schema_exports.ExpressionUtils.isCall(defaultValue)) {
2550
- return match6(defaultValue.function).with("cuid", () => createId()).with("uuid", () => defaultValue.args?.[0] && schema_exports.ExpressionUtils.isLiteral(defaultValue.args?.[0]) && defaultValue.args[0].value === 7 ? uuid.v7() : uuid.v4()).with("nanoid", () => defaultValue.args?.[0] && schema_exports.ExpressionUtils.isLiteral(defaultValue.args[0]) && typeof defaultValue.args[0].value === "number" ? nanoid(defaultValue.args[0].value) : nanoid()).with("ulid", () => ulid()).otherwise(() => void 0);
2551
+ const firstArgVal = defaultValue.args?.[0] && schema_exports.ExpressionUtils.isLiteral(defaultValue.args[0]) ? defaultValue.args[0].value : void 0;
2552
+ return match6(defaultValue.function).with("cuid", () => {
2553
+ const version = firstArgVal;
2554
+ const generated = version === 2 ? cuid2() : cuid1();
2555
+ return this.formatGeneratedValue(generated, defaultValue.args?.[1]);
2556
+ }).with("uuid", () => {
2557
+ const version = firstArgVal;
2558
+ const generated = version === 7 ? uuid.v7() : uuid.v4();
2559
+ return this.formatGeneratedValue(generated, defaultValue.args?.[1]);
2560
+ }).with("nanoid", () => {
2561
+ const length = firstArgVal;
2562
+ const generated = typeof length === "number" ? nanoid(length) : nanoid();
2563
+ return this.formatGeneratedValue(generated, defaultValue.args?.[1]);
2564
+ }).with("ulid", () => this.formatGeneratedValue(ulid(), defaultValue.args?.[0])).otherwise(() => void 0);
2551
2565
  } else if (schema_exports.ExpressionUtils.isMember(defaultValue) && schema_exports.ExpressionUtils.isCall(defaultValue.receiver) && defaultValue.receiver.function === "auth") {
2552
2566
  let val = this.client.$auth;
2553
2567
  for (const member of defaultValue.members) {
@@ -2558,6 +2572,12 @@ var BaseOperationHandler = class {
2558
2572
  return void 0;
2559
2573
  }
2560
2574
  }
2575
+ formatGeneratedValue(generated, formatExpr) {
2576
+ if (!formatExpr || !schema_exports.ExpressionUtils.isLiteral(formatExpr) || typeof formatExpr.value !== "string") {
2577
+ return generated;
2578
+ }
2579
+ return formatExpr.value.replace(/(?<!\\)%s/g, generated).replace(/\\%s/g, "%s");
2580
+ }
2561
2581
  async update(kysely, model, where, data, fromRelation, allowRelationUpdate = true, throwIfNotFound = true, fieldsToReturn) {
2562
2582
  if (!data || typeof data !== "object") {
2563
2583
  throw createInvalidInputError("data must be an object");
@@ -4462,8 +4482,11 @@ var InputValidator = class {
4462
4482
  fieldSchema
4463
4483
  ];
4464
4484
  })));
4465
- const finalSchema = z3.custom((v) => {
4466
- return schema.safeParse(v).success;
4485
+ const finalSchema = z3.any().superRefine((value, ctx) => {
4486
+ const parseResult = schema.safeParse(value);
4487
+ if (!parseResult.success) {
4488
+ parseResult.error.issues.forEach((issue) => ctx.addIssue(issue));
4489
+ }
4467
4490
  });
4468
4491
  this.setSchemaCache(key, finalSchema);
4469
4492
  return finalSchema;
@@ -4541,7 +4564,9 @@ var InputValidator = class {
4541
4564
  }
4542
4565
  }
4543
4566
  }
4544
- fields["$expr"] = z3.custom((v) => typeof v === "function").optional();
4567
+ fields["$expr"] = z3.custom((v) => typeof v === "function", {
4568
+ error: '"$expr" must be a function'
4569
+ }).optional();
4545
4570
  fields["AND"] = this.orArray(z3.lazy(() => this.makeWhereSchema(model, false, withoutRelationFields)), true).optional();
4546
4571
  fields["OR"] = z3.lazy(() => this.makeWhereSchema(model, false, withoutRelationFields)).array().optional();
4547
4572
  fields["NOT"] = this.orArray(z3.lazy(() => this.makeWhereSchema(model, false, withoutRelationFields)), true).optional();
@@ -5774,6 +5799,26 @@ var QueryNameMapper = class extends OperationNodeTransformer {
5774
5799
  const mappedName = this.mapFieldName(scope.model, node.column.name);
5775
5800
  return ColumnNode2.create(mappedName);
5776
5801
  }
5802
+ transformBinaryOperation(node) {
5803
+ if (ReferenceNode2.is(node.leftOperand) && ColumnNode2.is(node.leftOperand.column) && (ValueNode.is(node.rightOperand) || PrimitiveValueListNode.is(node.rightOperand))) {
5804
+ const columnNode = node.leftOperand.column;
5805
+ const resolvedScope = this.resolveFieldFromScopes(columnNode.column.name, node.leftOperand.table?.table.identifier.name);
5806
+ if (resolvedScope?.model) {
5807
+ const valueNode = node.rightOperand;
5808
+ let resultValue = valueNode;
5809
+ if (ValueNode.is(valueNode)) {
5810
+ resultValue = this.processEnumMappingForValue(resolvedScope.model, columnNode, valueNode);
5811
+ } else if (PrimitiveValueListNode.is(valueNode)) {
5812
+ resultValue = PrimitiveValueListNode.create(this.processEnumMappingForValues(resolvedScope.model, valueNode.values.map(() => columnNode), valueNode.values));
5813
+ }
5814
+ return super.transformBinaryOperation({
5815
+ ...node,
5816
+ rightOperand: resultValue
5817
+ });
5818
+ }
5819
+ }
5820
+ return super.transformBinaryOperation(node);
5821
+ }
5777
5822
  transformUpdateQuery(node) {
5778
5823
  if (!node.table) {
5779
5824
  return super.transformUpdateQuery(node);