@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.cjs +184 -134
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +17 -4
- package/dist/index.d.ts +17 -4
- package/dist/index.js +63 -13
- package/dist/index.js.map +1 -1
- package/package.json +7 -7
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
|
|
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
|
-
|
|
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 || !
|
|
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
|
-
|
|
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 &&
|
|
4370
|
+
} else if (value && isPlainObject3(value)) {
|
|
4321
4371
|
this.doNormalizeArgs(value);
|
|
4322
4372
|
}
|
|
4323
4373
|
}
|