@zenstackhq/orm 3.5.3 → 3.5.4

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.d.cts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _zenstackhq_schema from '@zenstackhq/schema';
2
- import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetModelFields, FieldHasDefault, GetModelFieldType, ModelFieldIsOptional, GetModelField, NonRelationFields, GetModel, ProcedureDef, BuiltinType, FieldDef, ModelDef, DataSourceProviderType, IsDelegateModel, RelationFields, FieldIsArray, RelationFieldType, FieldIsRelation, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefField, TypeDefFieldIsOptional, GetTypeDefFieldType, TypeDefFieldIsArray, UpdatedAtInfo, FieldIsDelegateDiscriminator, FieldType, RelationInfo, Expression as Expression$1, LiteralExpression, ArrayExpression, FieldExpression, MemberExpression, BinaryExpression, UnaryExpression, CallExpression, BindingExpression, ThisExpression, NullExpression } from '@zenstackhq/schema';
2
+ import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetModelFields, FieldHasDefault, GetModelFieldType, ModelFieldIsOptional, GetModelField, NonRelationFields, GetModel, ProcedureDef, BuiltinType, FieldDef, ModelDef, DataSourceProviderType, IsDelegateModel, RelationFields, FieldIsArray, RelationFieldType, FieldIsRelation, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefField, TypeDefFieldIsOptional, GetTypeDefFieldType, TypeDefFieldIsArray, GetModelDiscriminator, GetSubModels, UpdatedAtInfo, FieldIsDelegateDiscriminator, FieldType, RelationInfo, Expression as Expression$1, LiteralExpression, ArrayExpression, FieldExpression, MemberExpression, BinaryExpression, UnaryExpression, CallExpression, BindingExpression, ThisExpression, NullExpression } from '@zenstackhq/schema';
3
3
  import * as kysely from 'kysely';
4
4
  import { Kysely, OperationNodeVisitor, OperationNode, SelectQueryNode, SelectionNode, ColumnNode, AliasNode, TableNode, FromNode, ReferenceNode, AndNode, OrNode, ValueListNode, ParensNode, JoinNode, RawNode, WhereNode, InsertQueryNode, DeleteQueryNode, ReturningNode, CreateTableNode, AddColumnNode, ColumnDefinitionNode, DropTableNode, OrderByNode, OrderByItemNode, GroupByNode, GroupByItemNode, UpdateQueryNode, ColumnUpdateNode, LimitNode, OffsetNode, OnConflictNode, OnDuplicateKeyNode, CheckConstraintNode, DataTypeNode, SelectAllNode, IdentifierNode, SchemableIdentifierNode, ValueNode, PrimitiveValueListNode, OperatorNode, CreateIndexNode, DropIndexNode, ListNode, PrimaryKeyConstraintNode, UniqueConstraintNode, ReferencesNode, WithNode, CommonTableExpressionNode, CommonTableExpressionNameNode, HavingNode, CreateSchemaNode, DropSchemaNode, AlterTableNode, DropColumnNode, RenameColumnNode, AlterColumnNode, ModifyColumnNode, AddConstraintNode, DropConstraintNode, ForeignKeyConstraintNode, CreateViewNode, DropViewNode, GeneratedNode, DefaultValueNode, OnNode, ValuesNode, SelectModifierNode, CreateTypeNode, DropTypeNode, ExplainNode, DefaultInsertValueNode, AggregateFunctionNode, OverNode, PartitionByNode, PartitionByItemNode, SetOperationNode, BinaryOperationNode, UnaryOperationNode, UsingNode, FunctionNode, CaseNode, WhenNode, JSONReferenceNode, JSONPathNode, JSONPathLegNode, JSONOperatorChainNode, TupleNode, MergeQueryNode, MatchedNode, AddIndexNode, CastNode, FetchNode, TopNode, OutputNode, RenameConstraintNode, RefreshMaterializedViewNode, OrActionNode, CollateNode, Generated, QueryId, RootOperationNode, QueryResult, UnknownRow, Dialect, ExpressionBuilder, Expression, KyselyConfig, OperandExpression, SelectQueryBuilder, SqlBool, AliasableExpression, ExpressionWrapper } from 'kysely';
5
5
  import Decimal from 'decimal.js';
@@ -1103,13 +1103,26 @@ type GetAllFieldsExcludedFilterKinds<FieldsConfig> = '$all' extends keyof Fields
1103
1103
  excludedFilterKinds: readonly (infer EFK)[];
1104
1104
  } ? EFK : never : never;
1105
1105
 
1106
- type DefaultModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit = undefined, Options extends QueryOptions<Schema> = QueryOptions<Schema>, Optional = false, Array = false> = WrapType<{
1107
- [Key in NonRelationFields<Schema, Model> as ShouldOmitField<Schema, Model, Options, Key, Omit> extends true ? never : Key]: MapModelFieldType<Schema, Model, Key>;
1108
- }, Optional, Array>;
1106
+ type DefaultModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit = undefined, Options extends QueryOptions<Schema> = QueryOptions<Schema>, Optional = false, Array = false, IsGenericModel = [string] extends [Model] ? true : false> = WrapType<IsGenericModel extends true ? FlatModelResult<Schema, Model, Omit, Options> : IsDelegateModel<Schema, Model> extends true ? DelegateUnionResult<Schema, Model, Options, GetSubModels<Schema, Model>, Omit> : FlatModelResult<Schema, Model, Omit, Options>, Optional, Array>;
1109
1107
  type ShouldOmitField<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, Field extends GetModelFields<Schema, Model>, Omit> = QueryLevelOmit<Schema, Model, Field, Omit> extends boolean ? QueryLevelOmit<Schema, Model, Field, Omit> : OptionsLevelOmit<Schema, Model, Field, Options> extends boolean ? OptionsLevelOmit<Schema, Model, Field, Options> : SchemaLevelOmit<Schema, Model, Field>;
1110
1108
  type QueryLevelOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>, Omit> = Field extends keyof Omit ? (Omit[Field] extends boolean ? Omit[Field] : undefined) : undefined;
1111
1109
  type OptionsLevelOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>, Options extends QueryOptions<Schema>> = Uncapitalize<Model> extends keyof Options['omit'] ? Field extends keyof Options['omit'][Uncapitalize<Model>] ? Options['omit'][Uncapitalize<Model>][Field] extends boolean ? Options['omit'][Uncapitalize<Model>][Field] : undefined : undefined : undefined;
1112
1110
  type SchemaLevelOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>> = GetModelField<Schema, Model, Field>['omit'] extends true ? true : false;
1111
+ type FlatModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit, Options extends QueryOptions<Schema>> = {
1112
+ [Key in NonRelationFields<Schema, Model> as ShouldOmitField<Schema, Model, Options, Key, Omit> extends true ? never : Key]: MapModelFieldType<Schema, Model, Key>;
1113
+ };
1114
+ type DelegateUnionResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, SubModel extends GetModels<Schema>, Omit = undefined, Depth extends readonly 0[] = []> = Depth['length'] extends 10 ? SubModel extends string ? FlatModelResult<Schema, SubModel, Omit, Options> & {
1115
+ [K in GetModelDiscriminator<Schema, Model>]: SubModel;
1116
+ } : never : SubModel extends string ? IsDelegateModel<Schema, SubModel> extends true ? // sub-model is itself a delegate — recurse into its own sub-models so all
1117
+ DelegateUnionResult<Schema, SubModel, Options, GetSubModels<Schema, SubModel>, Omit, [
1118
+ ...Depth,
1119
+ 0
1120
+ ]> & {
1121
+ [K in GetModelDiscriminator<Schema, Model>]: SubModel;
1122
+ } : // leaf model — produce a flat scalar result and fix the discriminator
1123
+ FlatModelResult<Schema, SubModel, Omit, Options> & {
1124
+ [K in GetModelDiscriminator<Schema, Model>]: SubModel;
1125
+ } : never;
1113
1126
  type ModelSelectResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Select, Omit, Options extends QueryOptions<Schema>, ExtResult extends ExtResultBase<Schema> = {}> = {
1114
1127
  [Key in keyof Select as Select[Key] extends false | undefined ? never : Key extends keyof ExtractExtResult<ExtResult, Model & string> ? never : Key extends '_count' ? Select[Key] extends SelectCount<Schema, Model, Options> ? Key : never : Key extends keyof Omit ? Omit[Key] extends true ? never : Key : Key]: Key extends '_count' ? SelectCountResult<Schema, Model, Select[Key]> : Key extends NonRelationFields<Schema, Model> ? MapModelFieldType<Schema, Model, Key> : Key extends RelationFields<Schema, Model> ? ModelResult<Schema, RelationFieldType<Schema, Model, Key>, Select[Key], Options, ModelFieldIsOptional<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>, ExtResult> : never;
1115
1128
  };
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _zenstackhq_schema from '@zenstackhq/schema';
2
- import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetModelFields, FieldHasDefault, GetModelFieldType, ModelFieldIsOptional, GetModelField, NonRelationFields, GetModel, ProcedureDef, BuiltinType, FieldDef, ModelDef, DataSourceProviderType, IsDelegateModel, RelationFields, FieldIsArray, RelationFieldType, FieldIsRelation, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefField, TypeDefFieldIsOptional, GetTypeDefFieldType, TypeDefFieldIsArray, UpdatedAtInfo, FieldIsDelegateDiscriminator, FieldType, RelationInfo, Expression as Expression$1, LiteralExpression, ArrayExpression, FieldExpression, MemberExpression, BinaryExpression, UnaryExpression, CallExpression, BindingExpression, ThisExpression, NullExpression } from '@zenstackhq/schema';
2
+ import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetModelFields, FieldHasDefault, GetModelFieldType, ModelFieldIsOptional, GetModelField, NonRelationFields, GetModel, ProcedureDef, BuiltinType, FieldDef, ModelDef, DataSourceProviderType, IsDelegateModel, RelationFields, FieldIsArray, RelationFieldType, FieldIsRelation, GetEnums, GetEnum, GetTypeDefs, GetTypeDefFields, GetTypeDefField, TypeDefFieldIsOptional, GetTypeDefFieldType, TypeDefFieldIsArray, GetModelDiscriminator, GetSubModels, UpdatedAtInfo, FieldIsDelegateDiscriminator, FieldType, RelationInfo, Expression as Expression$1, LiteralExpression, ArrayExpression, FieldExpression, MemberExpression, BinaryExpression, UnaryExpression, CallExpression, BindingExpression, ThisExpression, NullExpression } from '@zenstackhq/schema';
3
3
  import * as kysely from 'kysely';
4
4
  import { Kysely, OperationNodeVisitor, OperationNode, SelectQueryNode, SelectionNode, ColumnNode, AliasNode, TableNode, FromNode, ReferenceNode, AndNode, OrNode, ValueListNode, ParensNode, JoinNode, RawNode, WhereNode, InsertQueryNode, DeleteQueryNode, ReturningNode, CreateTableNode, AddColumnNode, ColumnDefinitionNode, DropTableNode, OrderByNode, OrderByItemNode, GroupByNode, GroupByItemNode, UpdateQueryNode, ColumnUpdateNode, LimitNode, OffsetNode, OnConflictNode, OnDuplicateKeyNode, CheckConstraintNode, DataTypeNode, SelectAllNode, IdentifierNode, SchemableIdentifierNode, ValueNode, PrimitiveValueListNode, OperatorNode, CreateIndexNode, DropIndexNode, ListNode, PrimaryKeyConstraintNode, UniqueConstraintNode, ReferencesNode, WithNode, CommonTableExpressionNode, CommonTableExpressionNameNode, HavingNode, CreateSchemaNode, DropSchemaNode, AlterTableNode, DropColumnNode, RenameColumnNode, AlterColumnNode, ModifyColumnNode, AddConstraintNode, DropConstraintNode, ForeignKeyConstraintNode, CreateViewNode, DropViewNode, GeneratedNode, DefaultValueNode, OnNode, ValuesNode, SelectModifierNode, CreateTypeNode, DropTypeNode, ExplainNode, DefaultInsertValueNode, AggregateFunctionNode, OverNode, PartitionByNode, PartitionByItemNode, SetOperationNode, BinaryOperationNode, UnaryOperationNode, UsingNode, FunctionNode, CaseNode, WhenNode, JSONReferenceNode, JSONPathNode, JSONPathLegNode, JSONOperatorChainNode, TupleNode, MergeQueryNode, MatchedNode, AddIndexNode, CastNode, FetchNode, TopNode, OutputNode, RenameConstraintNode, RefreshMaterializedViewNode, OrActionNode, CollateNode, Generated, QueryId, RootOperationNode, QueryResult, UnknownRow, Dialect, ExpressionBuilder, Expression, KyselyConfig, OperandExpression, SelectQueryBuilder, SqlBool, AliasableExpression, ExpressionWrapper } from 'kysely';
5
5
  import Decimal from 'decimal.js';
@@ -1103,13 +1103,26 @@ type GetAllFieldsExcludedFilterKinds<FieldsConfig> = '$all' extends keyof Fields
1103
1103
  excludedFilterKinds: readonly (infer EFK)[];
1104
1104
  } ? EFK : never : never;
1105
1105
 
1106
- type DefaultModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit = undefined, Options extends QueryOptions<Schema> = QueryOptions<Schema>, Optional = false, Array = false> = WrapType<{
1107
- [Key in NonRelationFields<Schema, Model> as ShouldOmitField<Schema, Model, Options, Key, Omit> extends true ? never : Key]: MapModelFieldType<Schema, Model, Key>;
1108
- }, Optional, Array>;
1106
+ type DefaultModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit = undefined, Options extends QueryOptions<Schema> = QueryOptions<Schema>, Optional = false, Array = false, IsGenericModel = [string] extends [Model] ? true : false> = WrapType<IsGenericModel extends true ? FlatModelResult<Schema, Model, Omit, Options> : IsDelegateModel<Schema, Model> extends true ? DelegateUnionResult<Schema, Model, Options, GetSubModels<Schema, Model>, Omit> : FlatModelResult<Schema, Model, Omit, Options>, Optional, Array>;
1109
1107
  type ShouldOmitField<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, Field extends GetModelFields<Schema, Model>, Omit> = QueryLevelOmit<Schema, Model, Field, Omit> extends boolean ? QueryLevelOmit<Schema, Model, Field, Omit> : OptionsLevelOmit<Schema, Model, Field, Options> extends boolean ? OptionsLevelOmit<Schema, Model, Field, Options> : SchemaLevelOmit<Schema, Model, Field>;
1110
1108
  type QueryLevelOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>, Omit> = Field extends keyof Omit ? (Omit[Field] extends boolean ? Omit[Field] : undefined) : undefined;
1111
1109
  type OptionsLevelOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>, Options extends QueryOptions<Schema>> = Uncapitalize<Model> extends keyof Options['omit'] ? Field extends keyof Options['omit'][Uncapitalize<Model>] ? Options['omit'][Uncapitalize<Model>][Field] extends boolean ? Options['omit'][Uncapitalize<Model>][Field] : undefined : undefined : undefined;
1112
1110
  type SchemaLevelOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetModelFields<Schema, Model>> = GetModelField<Schema, Model, Field>['omit'] extends true ? true : false;
1111
+ type FlatModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit, Options extends QueryOptions<Schema>> = {
1112
+ [Key in NonRelationFields<Schema, Model> as ShouldOmitField<Schema, Model, Options, Key, Omit> extends true ? never : Key]: MapModelFieldType<Schema, Model, Key>;
1113
+ };
1114
+ type DelegateUnionResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Options extends QueryOptions<Schema>, SubModel extends GetModels<Schema>, Omit = undefined, Depth extends readonly 0[] = []> = Depth['length'] extends 10 ? SubModel extends string ? FlatModelResult<Schema, SubModel, Omit, Options> & {
1115
+ [K in GetModelDiscriminator<Schema, Model>]: SubModel;
1116
+ } : never : SubModel extends string ? IsDelegateModel<Schema, SubModel> extends true ? // sub-model is itself a delegate — recurse into its own sub-models so all
1117
+ DelegateUnionResult<Schema, SubModel, Options, GetSubModels<Schema, SubModel>, Omit, [
1118
+ ...Depth,
1119
+ 0
1120
+ ]> & {
1121
+ [K in GetModelDiscriminator<Schema, Model>]: SubModel;
1122
+ } : // leaf model — produce a flat scalar result and fix the discriminator
1123
+ FlatModelResult<Schema, SubModel, Omit, Options> & {
1124
+ [K in GetModelDiscriminator<Schema, Model>]: SubModel;
1125
+ } : never;
1113
1126
  type ModelSelectResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Select, Omit, Options extends QueryOptions<Schema>, ExtResult extends ExtResultBase<Schema> = {}> = {
1114
1127
  [Key in keyof Select as Select[Key] extends false | undefined ? never : Key extends keyof ExtractExtResult<ExtResult, Model & string> ? never : Key extends '_count' ? Select[Key] extends SelectCount<Schema, Model, Options> ? Key : never : Key extends keyof Omit ? Omit[Key] extends true ? never : Key : Key]: Key extends '_count' ? SelectCountResult<Schema, Model, Select[Key]> : Key extends NonRelationFields<Schema, Model> ? MapModelFieldType<Schema, Model, Key> : Key extends RelationFields<Schema, Model> ? ModelResult<Schema, RelationFieldType<Schema, Model, Key>, Select[Key], Options, ModelFieldIsOptional<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>, ExtResult> : never;
1115
1128
  };
package/dist/index.js CHANGED
@@ -82,6 +82,7 @@ __reExport(schema_exports, schema_star);
82
82
  import * as schema_star from "@zenstackhq/schema";
83
83
 
84
84
  // src/utils/object-utils.ts
85
+ import { isPlainObject } from "@zenstackhq/common-helpers";
85
86
  function extractFields(obj, fields) {
86
87
  return Object.fromEntries(Object.entries(obj).filter(([key]) => fields.includes(key)));
87
88
  }
@@ -93,6 +94,10 @@ function fieldsToSelectObject(fields) {
93
94
  ]));
94
95
  }
95
96
  __name(fieldsToSelectObject, "fieldsToSelectObject");
97
+ function isEmptyObject(x) {
98
+ return isPlainObject(x) && Object.keys(x).length === 0;
99
+ }
100
+ __name(isEmptyObject, "isEmptyObject");
96
101
 
97
102
  // src/client/executor/error-processor.ts
98
103
  function getDbErrorCode(error) {
@@ -605,7 +610,7 @@ __name(tmpAlias, "tmpAlias");
605
610
 
606
611
  // src/client/crud/operations/base.ts
607
612
  import { createId as cuid2 } from "@paralleldrive/cuid2";
608
- import { clone, enumerate as enumerate2, invariant as invariant7, isPlainObject as isPlainObject2 } from "@zenstackhq/common-helpers";
613
+ import { clone, enumerate as enumerate2, invariant as invariant7, isPlainObject as isPlainObject3 } from "@zenstackhq/common-helpers";
609
614
  import { default as cuid1 } from "cuid";
610
615
  import { createQueryId, expressionBuilder as expressionBuilder5, sql as sql5 } from "kysely";
611
616
  import { nanoid } from "nanoid";
@@ -729,7 +734,7 @@ var AnyNull = new AnyNullClass();
729
734
  import { invariant as invariant3 } from "@zenstackhq/common-helpers";
730
735
 
731
736
  // src/client/crud/dialects/base-dialect.ts
732
- import { enumerate, invariant as invariant2, isPlainObject, lowerCaseFirst } from "@zenstackhq/common-helpers";
737
+ import { enumerate, invariant as invariant2, isPlainObject as isPlainObject2, lowerCaseFirst } from "@zenstackhq/common-helpers";
733
738
  import { expressionBuilder, sql } from "kysely";
734
739
  import { match as match2, P } from "ts-pattern";
735
740
  var BaseCrudDialect = class {
@@ -857,7 +862,31 @@ var BaseCrudDialect = class {
857
862
  return LOGICAL_COMBINATORS.includes(key);
858
863
  }
859
864
  buildCompositeFilter(model, modelAlias, key, payload) {
860
- return match2(key).with("AND", () => this.and(...enumerate(payload).map((subPayload) => this.buildFilter(model, modelAlias, subPayload)))).with("OR", () => this.or(...enumerate(payload).map((subPayload) => this.buildFilter(model, modelAlias, subPayload)))).with("NOT", () => this.eb.not(this.buildCompositeFilter(model, modelAlias, "AND", payload))).exhaustive();
865
+ const normalizedPayload = enumerate(payload).filter((el) => {
866
+ if (typeof el === "object" && el !== null && !Array.isArray(el)) {
867
+ const entries = Object.entries(el);
868
+ return entries.some(([, v]) => v !== void 0);
869
+ } else {
870
+ return true;
871
+ }
872
+ });
873
+ const normalizedFilters = normalizedPayload.map((el) => this.buildFilter(model, modelAlias, el));
874
+ return match2(key).with("AND", () => {
875
+ if (normalizedFilters.length === 0) {
876
+ return this.true();
877
+ }
878
+ return this.and(...normalizedFilters);
879
+ }).with("OR", () => {
880
+ if (normalizedFilters.length === 0) {
881
+ return this.false();
882
+ }
883
+ return this.or(...normalizedFilters);
884
+ }).with("NOT", () => {
885
+ if (normalizedFilters.length === 0) {
886
+ return this.true();
887
+ }
888
+ return this.not(...normalizedFilters);
889
+ }).exhaustive();
861
890
  }
862
891
  buildRelationFilter(model, modelAlias, field, fieldDef, payload) {
863
892
  if (!fieldDef.array) {
@@ -1198,7 +1227,7 @@ var BaseCrudDialect = class {
1198
1227
  return this.eb(lhs, "=", this.transformInput(rhs, type, false));
1199
1228
  }
1200
1229
  buildStandardFilter(type, payload, lhs, getRhs, recurse, throwIfInvalid = false, onlyForKeys = void 0, excludeKeys = []) {
1201
- if (payload === null || !isPlainObject(payload)) {
1230
+ if (payload === null || !isPlainObject2(payload)) {
1202
1231
  return {
1203
1232
  conditions: [
1204
1233
  this.buildValueFilter(lhs, type, payload)
@@ -1215,6 +1244,9 @@ var BaseCrudDialect = class {
1215
1244
  if (excludeKeys.includes(op)) {
1216
1245
  continue;
1217
1246
  }
1247
+ if (value === void 0) {
1248
+ continue;
1249
+ }
1218
1250
  const rhs = Array.isArray(value) ? value.map(getRhs) : getRhs(value);
1219
1251
  const condition = match2(op).with("equals", () => rhs === null ? this.eb(lhs, "is", null) : this.eb(lhs, "=", rhs)).with("in", () => {
1220
1252
  invariant2(Array.isArray(rhs), "right hand side must be an array");
@@ -1272,6 +1304,9 @@ var BaseCrudDialect = class {
1272
1304
  if (key === "mode" || consumedKeys.includes(key)) {
1273
1305
  continue;
1274
1306
  }
1307
+ if (value === void 0) {
1308
+ continue;
1309
+ }
1275
1310
  invariant2(typeof value === "string", `${key} value must be a string`);
1276
1311
  const escapedValue = this.escapeLikePattern(value);
1277
1312
  const condition = match2(key).with("contains", () => this.buildStringLike(fieldRef, `%${escapedValue}%`, mode === "insensitive")).with("startsWith", () => this.buildStringLike(fieldRef, `${escapedValue}%`, mode === "insensitive")).with("endsWith", () => this.buildStringLike(fieldRef, `%${escapedValue}`, mode === "insensitive")).otherwise(() => {
@@ -3426,7 +3461,7 @@ var BaseOperationHandler = class {
3426
3461
  throw createInvalidInputError("data must be an object");
3427
3462
  }
3428
3463
  const parentWhere = await this.buildUpdateParentRelationFilter(kysely, fromRelation);
3429
- let combinedWhere = where ?? {};
3464
+ let combinedWhere = where ?? true;
3430
3465
  if (Object.keys(parentWhere).length > 0) {
3431
3466
  combinedWhere = Object.keys(combinedWhere).length > 0 ? {
3432
3467
  AND: [
@@ -3699,7 +3734,7 @@ var BaseOperationHandler = class {
3699
3734
  throw createNotSupportedError("Updating with a limit is not supported for polymorphic models");
3700
3735
  }
3701
3736
  const parentWhere = await this.buildUpdateParentRelationFilter(kysely, fromRelation);
3702
- let combinedWhere = where ?? {};
3737
+ let combinedWhere = where ?? true;
3703
3738
  if (Object.keys(parentWhere).length > 0) {
3704
3739
  combinedWhere = Object.keys(combinedWhere).length > 0 ? {
3705
3740
  AND: [
@@ -3891,11 +3926,11 @@ var BaseOperationHandler = class {
3891
3926
  break;
3892
3927
  }
3893
3928
  case "delete": {
3894
- await this.deleteRelation(kysely, fieldModel, value, fromRelationContext, true);
3929
+ await this.deleteRelation(kysely, fieldModel, value, fromRelationContext, true, true);
3895
3930
  break;
3896
3931
  }
3897
3932
  case "deleteMany": {
3898
- await this.deleteRelation(kysely, fieldModel, value, fromRelationContext, false);
3933
+ await this.deleteRelation(kysely, fieldModel, value, fromRelationContext, false, false);
3899
3934
  break;
3900
3935
  }
3901
3936
  default: {
@@ -3983,6 +4018,10 @@ var BaseOperationHandler = class {
3983
4018
  true
3984
4019
  ];
3985
4020
  }
4021
+ } else if (isEmptyObject(data)) {
4022
+ disconnectConditions = [
4023
+ true
4024
+ ];
3986
4025
  } else {
3987
4026
  disconnectConditions = this.normalizeRelationManipulationInput(model, data);
3988
4027
  if (disconnectConditions.length === 0) {
@@ -4105,9 +4144,9 @@ var BaseOperationHandler = class {
4105
4144
  }
4106
4145
  }
4107
4146
  }
4108
- async deleteRelation(kysely, model, data, fromRelation, throwForNotFound) {
4147
+ async deleteRelation(kysely, model, data, fromRelation, uniqueDelete, throwForNotFound) {
4109
4148
  let deleteConditions = [];
4110
- let expectedDeleteCount;
4149
+ let expectedDeleteCount = -1;
4111
4150
  if (typeof data === "boolean") {
4112
4151
  if (data === false) {
4113
4152
  return;
@@ -4115,6 +4154,15 @@ var BaseOperationHandler = class {
4115
4154
  deleteConditions = [
4116
4155
  true
4117
4156
  ];
4157
+ if (uniqueDelete) {
4158
+ expectedDeleteCount = 1;
4159
+ }
4160
+ }
4161
+ } else if (isEmptyObject(data)) {
4162
+ deleteConditions = [
4163
+ true
4164
+ ];
4165
+ if (uniqueDelete) {
4118
4166
  expectedDeleteCount = 1;
4119
4167
  }
4120
4168
  } else {
@@ -4122,7 +4170,9 @@ var BaseOperationHandler = class {
4122
4170
  if (deleteConditions.length === 0) {
4123
4171
  return;
4124
4172
  }
4125
- expectedDeleteCount = deleteConditions.length;
4173
+ if (uniqueDelete) {
4174
+ expectedDeleteCount = deleteConditions.length;
4175
+ }
4126
4176
  }
4127
4177
  let deleteResult;
4128
4178
  let deleteFromModel;
@@ -4182,7 +4232,7 @@ var BaseOperationHandler = class {
4182
4232
  });
4183
4233
  }
4184
4234
  }
4185
- if (throwForNotFound && expectedDeleteCount > (deleteResult.numAffectedRows ?? 0)) {
4235
+ if (throwForNotFound && expectedDeleteCount >= 0 && expectedDeleteCount > (deleteResult.numAffectedRows ?? 0)) {
4186
4236
  throw createNotFoundError(deleteFromModel);
4187
4237
  }
4188
4238
  }
@@ -4317,7 +4367,7 @@ var BaseOperationHandler = class {
4317
4367
  for (const [key, value] of Object.entries(args)) {
4318
4368
  if (value === void 0) {
4319
4369
  delete args[key];
4320
- } else if (value && isPlainObject2(value)) {
4370
+ } else if (value && isPlainObject3(value)) {
4321
4371
  this.doNormalizeArgs(value);
4322
4372
  }
4323
4373
  }