prisma-guard 1.32.0 → 1.32.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.
@@ -1486,12 +1486,15 @@ function applyForcedCountWhere(container, forcedCountWhere) {
1486
1486
  }
1487
1487
  function resolvedWhereCoversConstraint(where, constraint) {
1488
1488
  if (constraint.fields.length === 1) {
1489
- return constraint.fields[0] in where;
1489
+ const value2 = where[constraint.fields[0]];
1490
+ return value2 !== null && value2 !== void 0;
1490
1491
  }
1491
1492
  const value = where[constraint.selector];
1492
1493
  if (!isPlainObject(value))
1493
1494
  return false;
1494
- return constraint.fields.every((field) => field in value);
1495
+ return constraint.fields.every(
1496
+ (field) => value[field] !== null && value[field] !== void 0
1497
+ );
1495
1498
  }
1496
1499
  function validateResolvedUniqueWhere(model, where, method, uniqueMap) {
1497
1500
  const constraints = uniqueMap[model];
@@ -1518,17 +1521,16 @@ function assertDirectUniqueShapeValue(model, field, value, typeMap) {
1518
1521
  );
1519
1522
  }
1520
1523
  }
1521
- if (isForcedValue(value))
1522
- return;
1523
- if (isPlainObject(value)) {
1524
- const keys = Object.keys(value);
1524
+ const actual = isForcedValue(value) ? value.value : value;
1525
+ if (isPlainObject(actual)) {
1526
+ const keys = Object.keys(actual);
1525
1527
  throw new ShapeError(
1526
1528
  `Invalid unique where shape for "${model ?? "unknown"}.${field}". Prisma WhereUniqueInput does not accept filter operator objects${keys.length ? `: ${keys.join(", ")}` : ""}. Use { ${field}: true } in guard shape and { ${field}: value } in request args.`
1527
1529
  );
1528
1530
  }
1529
- if (value === null || value === void 0) {
1531
+ if (actual === null || actual === void 0) {
1530
1532
  throw new ShapeError(
1531
- `Invalid unique where shape for "${model ?? "unknown"}.${field}". Unique fields must use true or a forced value.`
1533
+ `Invalid unique where shape for "${model ?? "unknown"}.${field}". Unique fields must use true or a forced non-null value.`
1532
1534
  );
1533
1535
  }
1534
1536
  }
@@ -1542,9 +1544,8 @@ function shapeCoversConstraint(where, constraint, model, typeMap) {
1542
1544
  }
1543
1545
  if (!(constraint.selector in where))
1544
1546
  return false;
1545
- const selectorValue = where[constraint.selector];
1546
- if (isForcedValue(selectorValue))
1547
- return true;
1547
+ const rawSelectorValue = where[constraint.selector];
1548
+ const selectorValue = isForcedValue(rawSelectorValue) ? rawSelectorValue.value : rawSelectorValue;
1548
1549
  if (!isPlainObject(selectorValue)) {
1549
1550
  throw new ShapeError(
1550
1551
  `Compound unique selector "${model}.${constraint.selector}" must be an object with fields: ${constraint.fields.join(", ")}`
@@ -2047,8 +2048,18 @@ function createWhereBuilder(typeMap, enumMap, scalarBase, uniqueMap = {}) {
2047
2048
  (constraint) => constraint.selector === selector
2048
2049
  ) ?? null;
2049
2050
  }
2050
- function parseForcedUniqueValue(model, fieldName, fieldMeta, value) {
2051
+ function buildUniqueWhereFieldSchema(fieldMeta, allowNullableFilter) {
2051
2052
  const schema = buildDirectScalarSchema(fieldMeta, enumMap, scalarBase);
2053
+ if (allowNullableFilter && !fieldMeta.isRequired) {
2054
+ return schema.nullable();
2055
+ }
2056
+ return schema;
2057
+ }
2058
+ function parseForcedUniqueValue(model, fieldName, fieldMeta, value, allowNullableFilter) {
2059
+ const schema = buildUniqueWhereFieldSchema(
2060
+ fieldMeta,
2061
+ allowNullableFilter
2062
+ );
2052
2063
  const actual = isForcedValue(value) ? value.value : value;
2053
2064
  try {
2054
2065
  return schema.parse(actual);
@@ -2126,10 +2137,9 @@ function createWhereBuilder(typeMap, enumMap, scalarBase, uniqueMap = {}) {
2126
2137
  `Invalid compound unique where shape for "${model}.${key}.${fieldName}". Prisma compound unique selectors do not accept filter operator objects${operators.length ? `: ${operators.join(", ")}` : ""}. Use direct values only.`
2127
2138
  );
2128
2139
  }
2129
- const directSchema2 = buildDirectScalarSchema(
2140
+ const directSchema2 = buildUniqueWhereFieldSchema(
2130
2141
  fieldMeta2,
2131
- enumMap,
2132
- scalarBase
2142
+ false
2133
2143
  );
2134
2144
  if (fieldValue === true) {
2135
2145
  nestedSchemas[fieldName] = directSchema2;
@@ -2138,7 +2148,8 @@ function createWhereBuilder(typeMap, enumMap, scalarBase, uniqueMap = {}) {
2138
2148
  model,
2139
2149
  fieldName,
2140
2150
  fieldMeta2,
2141
- fieldValue
2151
+ fieldValue,
2152
+ false
2142
2153
  );
2143
2154
  }
2144
2155
  }
@@ -2177,7 +2188,7 @@ function createWhereBuilder(typeMap, enumMap, scalarBase, uniqueMap = {}) {
2177
2188
  `Invalid unique where shape for "${model}.${key}". Prisma WhereUniqueInput does not accept operators: ${keys.join(", ")}. Use a direct unique value shape, for example { ${key}: true }.`
2178
2189
  );
2179
2190
  }
2180
- const directSchema = buildDirectScalarSchema(fieldMeta, enumMap, scalarBase);
2191
+ const directSchema = buildUniqueWhereFieldSchema(fieldMeta, true);
2181
2192
  if (value === true) {
2182
2193
  fieldSchemas[key] = directSchema;
2183
2194
  continue;
@@ -2186,7 +2197,8 @@ function createWhereBuilder(typeMap, enumMap, scalarBase, uniqueMap = {}) {
2186
2197
  model,
2187
2198
  key,
2188
2199
  fieldMeta,
2189
- value
2200
+ value,
2201
+ true
2190
2202
  );
2191
2203
  forcedOnlyKeys.add(key);
2192
2204
  }
@@ -3539,7 +3551,21 @@ function createQueryBuilder(typeMap, enumMap, uniqueMap, scalarBase) {
3539
3551
  built = builtCache.get(resolution.key);
3540
3552
  }
3541
3553
  }
3542
- return applyBuiltShape(built, normalizedBody, isUnique);
3554
+ const result = applyBuiltShape(
3555
+ built,
3556
+ normalizedBody,
3557
+ isUnique,
3558
+ model
3559
+ );
3560
+ if (isUnique && result.where) {
3561
+ validateResolvedUniqueWhere(
3562
+ model,
3563
+ result.where,
3564
+ method,
3565
+ uniqueMap
3566
+ );
3567
+ }
3568
+ return result;
3543
3569
  }
3544
3570
  };
3545
3571
  }