@zenstackhq/runtime 2.16.0 → 3.0.0-alpha.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/LICENSE +1 -1
- package/dist/client.cjs +6094 -0
- package/dist/client.cjs.map +1 -0
- package/dist/client.d.cts +19 -0
- package/dist/client.d.ts +19 -0
- package/dist/client.js +6060 -0
- package/dist/client.js.map +1 -0
- package/dist/contract-DguafRNB.d.cts +1272 -0
- package/dist/contract-DguafRNB.d.ts +1272 -0
- package/dist/index.cjs +6088 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +14 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +6057 -0
- package/dist/index.js.map +1 -0
- package/dist/plugins/policy.cjs +2343 -0
- package/dist/plugins/policy.cjs.map +1 -0
- package/dist/plugins/policy.d.cts +24 -0
- package/dist/plugins/policy.d.ts +24 -0
- package/dist/plugins/policy.js +2307 -0
- package/dist/plugins/policy.js.map +1 -0
- package/dist/schema.cjs +110 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.cts +29 -0
- package/dist/schema.d.ts +29 -0
- package/dist/schema.js +85 -0
- package/dist/schema.js.map +1 -0
- package/dist/utils/pg-utils.cjs +39 -0
- package/dist/utils/pg-utils.cjs.map +1 -0
- package/dist/utils/pg-utils.d.cts +8 -0
- package/dist/utils/pg-utils.d.ts +8 -0
- package/dist/utils/pg-utils.js +16 -0
- package/dist/utils/pg-utils.js.map +1 -0
- package/{browser/index.js → dist/utils/sqlite-utils.cjs} +21 -37
- package/dist/utils/sqlite-utils.cjs.map +1 -0
- package/dist/utils/sqlite-utils.d.cts +8 -0
- package/dist/utils/sqlite-utils.d.ts +8 -0
- package/dist/utils/sqlite-utils.js +22 -0
- package/dist/utils/sqlite-utils.js.map +1 -0
- package/package.json +106 -117
- package/README.md +0 -5
- package/browser/index.d.mts +0 -13
- package/browser/index.d.ts +0 -13
- package/browser/index.js.map +0 -1
- package/browser/index.mjs +0 -33
- package/browser/index.mjs.map +0 -1
- package/constants.d.ts +0 -62
- package/constants.js +0 -76
- package/constants.js.map +0 -1
- package/cross/index.d.mts +0 -379
- package/cross/index.d.ts +0 -379
- package/cross/index.js +0 -923
- package/cross/index.js.map +0 -1
- package/cross/index.mjs +0 -881
- package/cross/index.mjs.map +0 -1
- package/edge.d.ts +0 -1
- package/edge.js +0 -18
- package/edge.js.map +0 -1
- package/encryption/index.d.ts +0 -25
- package/encryption/index.js +0 -74
- package/encryption/index.js.map +0 -1
- package/encryption/utils.d.ts +0 -9
- package/encryption/utils.js +0 -99
- package/encryption/utils.js.map +0 -1
- package/enhance-edge.d.ts +0 -1
- package/enhance-edge.js +0 -10
- package/enhance.d.ts +0 -1
- package/enhance.js +0 -10
- package/enhancements/edge/create-enhancement.d.ts +0 -42
- package/enhancements/edge/create-enhancement.js +0 -102
- package/enhancements/edge/create-enhancement.js.map +0 -1
- package/enhancements/edge/default-auth.d.ts +0 -8
- package/enhancements/edge/default-auth.js +0 -180
- package/enhancements/edge/default-auth.js.map +0 -1
- package/enhancements/edge/delegate.d.ts +0 -77
- package/enhancements/edge/delegate.js +0 -1293
- package/enhancements/edge/delegate.js.map +0 -1
- package/enhancements/edge/encryption.d.ts +0 -7
- package/enhancements/edge/encryption.js +0 -150
- package/enhancements/edge/encryption.js.map +0 -1
- package/enhancements/edge/index.d.ts +0 -4
- package/enhancements/edge/index.js +0 -21
- package/enhancements/edge/index.js.map +0 -1
- package/enhancements/edge/json-processor.d.ts +0 -7
- package/enhancements/edge/json-processor.js +0 -89
- package/enhancements/edge/json-processor.js.map +0 -1
- package/enhancements/edge/logger.d.ts +0 -29
- package/enhancements/edge/logger.js +0 -65
- package/enhancements/edge/logger.js.map +0 -1
- package/enhancements/edge/omit.d.ts +0 -7
- package/enhancements/edge/omit.js +0 -96
- package/enhancements/edge/omit.js.map +0 -1
- package/enhancements/edge/password.d.ts +0 -7
- package/enhancements/edge/password.js +0 -64
- package/enhancements/edge/password.js.map +0 -1
- package/enhancements/edge/policy/check-utils.d.ts +0 -5
- package/enhancements/edge/policy/check-utils.js +0 -20
- package/enhancements/edge/policy/check-utils.js.map +0 -1
- package/enhancements/edge/policy/handler.d.ts +0 -100
- package/enhancements/edge/policy/handler.js +0 -1440
- package/enhancements/edge/policy/handler.js.map +0 -1
- package/enhancements/edge/policy/index.d.ts +0 -19
- package/enhancements/edge/policy/index.js +0 -65
- package/enhancements/edge/policy/index.js.map +0 -1
- package/enhancements/edge/policy/policy-utils.d.ts +0 -181
- package/enhancements/edge/policy/policy-utils.js +0 -1356
- package/enhancements/edge/policy/policy-utils.js.map +0 -1
- package/enhancements/edge/promise.d.ts +0 -15
- package/enhancements/edge/promise.js +0 -99
- package/enhancements/edge/promise.js.map +0 -1
- package/enhancements/edge/proxy.d.ts +0 -120
- package/enhancements/edge/proxy.js +0 -287
- package/enhancements/edge/proxy.js.map +0 -1
- package/enhancements/edge/query-utils.d.ts +0 -53
- package/enhancements/edge/query-utils.js +0 -256
- package/enhancements/edge/query-utils.js.map +0 -1
- package/enhancements/edge/types.d.ts +0 -238
- package/enhancements/edge/types.js +0 -3
- package/enhancements/edge/types.js.map +0 -1
- package/enhancements/edge/utils.d.ts +0 -11
- package/enhancements/edge/utils.js +0 -49
- package/enhancements/edge/utils.js.map +0 -1
- package/enhancements/edge/where-visitor.d.ts +0 -32
- package/enhancements/edge/where-visitor.js +0 -86
- package/enhancements/edge/where-visitor.js.map +0 -1
- package/enhancements/node/create-enhancement.d.ts +0 -42
- package/enhancements/node/create-enhancement.js +0 -102
- package/enhancements/node/create-enhancement.js.map +0 -1
- package/enhancements/node/default-auth.d.ts +0 -8
- package/enhancements/node/default-auth.js +0 -180
- package/enhancements/node/default-auth.js.map +0 -1
- package/enhancements/node/delegate.d.ts +0 -77
- package/enhancements/node/delegate.js +0 -1293
- package/enhancements/node/delegate.js.map +0 -1
- package/enhancements/node/encryption.d.ts +0 -7
- package/enhancements/node/encryption.js +0 -150
- package/enhancements/node/encryption.js.map +0 -1
- package/enhancements/node/index.d.ts +0 -4
- package/enhancements/node/index.js +0 -21
- package/enhancements/node/index.js.map +0 -1
- package/enhancements/node/json-processor.d.ts +0 -7
- package/enhancements/node/json-processor.js +0 -89
- package/enhancements/node/json-processor.js.map +0 -1
- package/enhancements/node/logger.d.ts +0 -29
- package/enhancements/node/logger.js +0 -65
- package/enhancements/node/logger.js.map +0 -1
- package/enhancements/node/omit.d.ts +0 -7
- package/enhancements/node/omit.js +0 -96
- package/enhancements/node/omit.js.map +0 -1
- package/enhancements/node/password.d.ts +0 -7
- package/enhancements/node/password.js +0 -64
- package/enhancements/node/password.js.map +0 -1
- package/enhancements/node/policy/check-utils.d.ts +0 -5
- package/enhancements/node/policy/check-utils.js +0 -87
- package/enhancements/node/policy/check-utils.js.map +0 -1
- package/enhancements/node/policy/constraint-solver.d.ts +0 -27
- package/enhancements/node/policy/constraint-solver.js +0 -164
- package/enhancements/node/policy/constraint-solver.js.map +0 -1
- package/enhancements/node/policy/handler.d.ts +0 -100
- package/enhancements/node/policy/handler.js +0 -1440
- package/enhancements/node/policy/handler.js.map +0 -1
- package/enhancements/node/policy/index.d.ts +0 -19
- package/enhancements/node/policy/index.js +0 -65
- package/enhancements/node/policy/index.js.map +0 -1
- package/enhancements/node/policy/policy-utils.d.ts +0 -181
- package/enhancements/node/policy/policy-utils.js +0 -1356
- package/enhancements/node/policy/policy-utils.js.map +0 -1
- package/enhancements/node/promise.d.ts +0 -15
- package/enhancements/node/promise.js +0 -99
- package/enhancements/node/promise.js.map +0 -1
- package/enhancements/node/proxy.d.ts +0 -120
- package/enhancements/node/proxy.js +0 -287
- package/enhancements/node/proxy.js.map +0 -1
- package/enhancements/node/query-utils.d.ts +0 -53
- package/enhancements/node/query-utils.js +0 -256
- package/enhancements/node/query-utils.js.map +0 -1
- package/enhancements/node/types.d.ts +0 -238
- package/enhancements/node/types.js +0 -3
- package/enhancements/node/types.js.map +0 -1
- package/enhancements/node/utils.d.ts +0 -11
- package/enhancements/node/utils.js +0 -49
- package/enhancements/node/utils.js.map +0 -1
- package/enhancements/node/where-visitor.d.ts +0 -32
- package/enhancements/node/where-visitor.js +0 -86
- package/enhancements/node/where-visitor.js.map +0 -1
- package/error.d.ts +0 -11
- package/error.js +0 -22
- package/error.js.map +0 -1
- package/index.d.ts +0 -7
- package/index.js +0 -24
- package/index.js.map +0 -1
- package/local-helpers/index.d.ts +0 -6
- package/local-helpers/index.js +0 -23
- package/local-helpers/index.js.map +0 -1
- package/local-helpers/is-plain-object.d.ts +0 -1
- package/local-helpers/is-plain-object.js +0 -25
- package/local-helpers/is-plain-object.js.map +0 -1
- package/local-helpers/lower-case-first.d.ts +0 -1
- package/local-helpers/lower-case-first.js +0 -7
- package/local-helpers/lower-case-first.js.map +0 -1
- package/local-helpers/param-case.d.ts +0 -1
- package/local-helpers/param-case.js +0 -20
- package/local-helpers/param-case.js.map +0 -1
- package/local-helpers/sleep.d.ts +0 -1
- package/local-helpers/sleep.js +0 -9
- package/local-helpers/sleep.js.map +0 -1
- package/local-helpers/tiny-invariant.d.ts +0 -1
- package/local-helpers/tiny-invariant.js +0 -15
- package/local-helpers/tiny-invariant.js.map +0 -1
- package/local-helpers/upper-case-first.d.ts +0 -1
- package/local-helpers/upper-case-first.js +0 -7
- package/local-helpers/upper-case-first.js.map +0 -1
- package/model-meta.d.ts +0 -1
- package/model-meta.js +0 -10
- package/models.d.ts +0 -1
- package/models.js +0 -1
- package/types.d.ts +0 -200
- package/types.js +0 -4
- package/types.js.map +0 -1
- package/validation.d.ts +0 -24
- package/validation.js +0 -52
- package/validation.js.map +0 -1
- package/version.d.ts +0 -5
- package/version.js +0 -35
- package/version.js.map +0 -1
- package/zod/index.d.ts +0 -3
- package/zod/index.js +0 -5
- package/zod/input.d.ts +0 -1
- package/zod/input.js +0 -8
- package/zod/models.d.ts +0 -1
- package/zod/models.js +0 -8
- package/zod/objects.d.ts +0 -1
- package/zod/objects.js +0 -8
- package/zod-utils.d.ts +0 -12
- package/zod-utils.js +0 -97
- package/zod-utils.js.map +0 -1
|
@@ -0,0 +1,1272 @@
|
|
|
1
|
+
import { SchemaDef, GetModels, ScalarFields, ForeignKeyFields, GetFields, FieldHasDefault, GetFieldType, FieldIsOptional, RelationFields, RelationFieldType, FieldIsArray, GetEnums, GetEnum, BuiltinType, NonRelationFields, GetModel, FieldDef, GetField, FieldIsRelationArray, RelationInfo, FieldType, FieldIsRelation, DataSourceProviderType, ProcedureDef, DataSourceProvider } from '@zenstackhq/sdk/schema';
|
|
2
|
+
import Decimal, { Decimal as Decimal$1 } from 'decimal.js';
|
|
3
|
+
import { Kysely, Generated, ExpressionBuilder, OperandExpression, SqlBool, SelectQueryBuilder, Expression, ExpressionWrapper, RootOperationNode, QueryResult, UnknownRow, OperationNode, KyselyConfig, SqliteDialectConfig, PostgresDialectConfig } from 'kysely';
|
|
4
|
+
import { Optional } from 'utility-types';
|
|
5
|
+
import { Model } from '@zenstackhq/language/ast';
|
|
6
|
+
|
|
7
|
+
type NullableIf<T, Condition extends boolean> = Condition extends true ? T | null : T;
|
|
8
|
+
type WrapType<T, Optional = false, Array = false> = Optional extends true ? T | null : Array extends true ? T[] : T;
|
|
9
|
+
type MapBaseType$1<T> = T extends 'String' ? string : T extends 'Boolean' ? boolean : T extends 'Int' | 'Float' ? number : T extends 'BigInt' ? bigint : T extends 'Decimal' ? Decimal : T extends 'DateTime' ? Date : T extends 'Json' ? JsonValue : unknown;
|
|
10
|
+
type JsonValue = string | number | boolean | null | JsonObject | JsonArray;
|
|
11
|
+
type JsonObject = {
|
|
12
|
+
[key: string]: JsonValue;
|
|
13
|
+
};
|
|
14
|
+
type JsonArray = Array<JsonValue>;
|
|
15
|
+
type OrArray<T, IF extends boolean = true> = IF extends true ? T | T[] : T;
|
|
16
|
+
type NonEmptyArray<T> = [T, ...T[]];
|
|
17
|
+
type ValueOfPotentialTuple<T> = T extends unknown[] ? T[number] : T;
|
|
18
|
+
type NoExpand<T> = T extends unknown ? T : never;
|
|
19
|
+
type AtLeast<O extends object, K extends string> = NoExpand<O extends unknown ? (K extends keyof O ? {
|
|
20
|
+
[P in K]: O[P];
|
|
21
|
+
} & O : O) | ({
|
|
22
|
+
[P in keyof O as P extends K ? K : never]-?: O[P];
|
|
23
|
+
} & O) : never>;
|
|
24
|
+
type Without<T, U> = {
|
|
25
|
+
[P in Exclude<keyof T, keyof U>]?: never;
|
|
26
|
+
};
|
|
27
|
+
type XOR<T, U> = T extends object ? U extends object ? (Without<T, U> & U) | (Without<U, T> & T) : U : T;
|
|
28
|
+
type MaybePromise<T> = T | Promise<T>;
|
|
29
|
+
type PrependParameter<Param, Func> = Func extends (...args: any[]) => infer R ? (p: Param, ...args: Parameters<Func>) => R : never;
|
|
30
|
+
type OrUndefinedIf<T, Condition extends boolean> = Condition extends true ? T | undefined : T;
|
|
31
|
+
|
|
32
|
+
type ToKyselySchema<Schema extends SchemaDef> = {
|
|
33
|
+
[Model in GetModels<Schema>]: ToKyselyTable<Schema, Model>;
|
|
34
|
+
};
|
|
35
|
+
type ToKysely<Schema extends SchemaDef> = Kysely<ToKyselySchema<Schema>>;
|
|
36
|
+
type ToKyselyTable<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
37
|
+
[Field in ScalarFields<Schema, Model, false> | ForeignKeyFields<Schema, Model>]: toKyselyFieldType<Schema, Model, Field>;
|
|
38
|
+
};
|
|
39
|
+
type MapBaseType<T> = T extends 'String' ? string : T extends 'Boolean' ? boolean : T extends 'Int' | 'Float' ? number : T extends 'BigInt' ? bigint : T extends 'Decimal' ? Decimal : T extends 'DateTime' ? string : unknown;
|
|
40
|
+
type WrapNull<T, Null> = Null extends true ? T | null : T;
|
|
41
|
+
type MapType$1<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>> = WrapNull<MapBaseType<GetFieldType<Schema, Model, Field>>, FieldIsOptional<Schema, Model, Field>>;
|
|
42
|
+
type toKyselyFieldType<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>> = FieldHasDefault<Schema, Model, Field> extends true ? Generated<MapType$1<Schema, Model, Field>> : MapType$1<Schema, Model, Field>;
|
|
43
|
+
|
|
44
|
+
type DefaultModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Omit = undefined, Optional = false, Array = false> = WrapType<{
|
|
45
|
+
[Key in NonRelationFields<Schema, Model> as Key extends keyof Omit ? Omit[Key] extends true ? never : Key : Key]: MapFieldType<Schema, Model, Key>;
|
|
46
|
+
}, Optional, Array>;
|
|
47
|
+
type ModelSelectResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Select, Omit> = {
|
|
48
|
+
[Key in keyof Select as Select[Key] extends false | undefined ? never : Key extends keyof Omit ? Omit[Key] extends true ? never : Key : Key extends '_count' ? Select[Key] extends SelectCount<Schema, Model> ? Key : never : Key]: Key extends '_count' ? SelectCountResult<Schema, Model, Select[Key]> : Key extends NonRelationFields<Schema, Model> ? MapFieldType<Schema, Model, Key> : Key extends RelationFields<Schema, Model> ? Select[Key] extends FindArgs<Schema, RelationFieldType<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>> ? ModelResult<Schema, RelationFieldType<Schema, Model, Key>, Select[Key], FieldIsOptional<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>> : DefaultModelResult<Schema, RelationFieldType<Schema, Model, Key>, Omit, FieldIsOptional<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>> : never;
|
|
49
|
+
};
|
|
50
|
+
type SelectCountResult<Schema extends SchemaDef, Model extends GetModels<Schema>, C> = C extends true ? {
|
|
51
|
+
[Key in RelationFields<Schema, Model> as FieldIsArray<Schema, Model, Key> extends true ? Key : never]: number;
|
|
52
|
+
} : C extends {
|
|
53
|
+
select: infer S;
|
|
54
|
+
} ? {
|
|
55
|
+
[Key in keyof S]: number;
|
|
56
|
+
} : never;
|
|
57
|
+
type ModelResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Args extends SelectIncludeOmit<Schema, Model, boolean> = {}, Optional = false, Array = false> = WrapType<Args extends {
|
|
58
|
+
select: infer S;
|
|
59
|
+
omit?: infer O;
|
|
60
|
+
} ? ModelSelectResult<Schema, Model, S, O> : Args extends {
|
|
61
|
+
include: infer I;
|
|
62
|
+
omit?: infer O;
|
|
63
|
+
} ? DefaultModelResult<Schema, Model, O> & {
|
|
64
|
+
[Key in keyof I & RelationFields<Schema, Model> as I[Key] extends false | undefined ? never : Key]: I[Key] extends FindArgs<Schema, RelationFieldType<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>> ? ModelResult<Schema, RelationFieldType<Schema, Model, Key>, I[Key], FieldIsOptional<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>> : DefaultModelResult<Schema, RelationFieldType<Schema, Model, Key>, undefined, FieldIsOptional<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>>;
|
|
65
|
+
} : Args extends {
|
|
66
|
+
omit: infer O;
|
|
67
|
+
} ? DefaultModelResult<Schema, Model, O> : DefaultModelResult<Schema, Model>, Optional, Array>;
|
|
68
|
+
type BatchResult = {
|
|
69
|
+
count: number;
|
|
70
|
+
};
|
|
71
|
+
type WhereInput<Schema extends SchemaDef, Model extends GetModels<Schema>, ScalarOnly extends boolean = false> = {
|
|
72
|
+
[Key in GetFields<Schema, Model> as ScalarOnly extends true ? Key extends RelationFields<Schema, Model> ? never : Key : Key]?: Key extends RelationFields<Schema, Model> ? RelationFilter<Schema, Model, Key> : GetFieldType<Schema, Model, Key> extends GetEnums<Schema> ? EnumFilter<Schema, GetFieldType<Schema, Model, Key>, FieldIsOptional<Schema, Model, Key>> : FieldIsArray<Schema, Model, Key> extends true ? ArrayFilter<GetFieldType<Schema, Model, Key>> : PrimitiveFilter<GetFieldType<Schema, Model, Key>, FieldIsOptional<Schema, Model, Key>>;
|
|
73
|
+
} & {
|
|
74
|
+
$expr?: (eb: ExpressionBuilder<ToKyselySchema<Schema>, Model>) => OperandExpression<SqlBool>;
|
|
75
|
+
} & {
|
|
76
|
+
AND?: OrArray<WhereInput<Schema, Model, ScalarOnly>>;
|
|
77
|
+
OR?: WhereInput<Schema, Model, ScalarOnly>[];
|
|
78
|
+
NOT?: OrArray<WhereInput<Schema, Model, ScalarOnly>>;
|
|
79
|
+
};
|
|
80
|
+
type EnumFilter<Schema extends SchemaDef, T extends GetEnums<Schema>, Nullable extends boolean> = NullableIf<keyof GetEnum<Schema, T>, Nullable> | {
|
|
81
|
+
equals?: NullableIf<keyof GetEnum<Schema, T>, Nullable>;
|
|
82
|
+
in?: (keyof GetEnum<Schema, T>)[];
|
|
83
|
+
notIn?: (keyof GetEnum<Schema, T>)[];
|
|
84
|
+
not?: EnumFilter<Schema, T, Nullable>;
|
|
85
|
+
};
|
|
86
|
+
type ArrayFilter<T extends string> = {
|
|
87
|
+
equals?: MapBaseType$1<T>[];
|
|
88
|
+
has?: MapBaseType$1<T>;
|
|
89
|
+
hasEvery?: MapBaseType$1<T>[];
|
|
90
|
+
hasSome?: MapBaseType$1<T>[];
|
|
91
|
+
isEmpty?: boolean;
|
|
92
|
+
};
|
|
93
|
+
type PrimitiveFilter<T extends string, Nullable extends boolean> = T extends 'String' ? StringFilter<Nullable> : T extends 'Int' | 'Float' | 'Decimal' | 'BigInt' ? NumberFilter<T, Nullable> : T extends 'Boolean' ? BooleanFilter<Nullable> : T extends 'DateTime' ? DateTimeFilter<Nullable> : T extends 'Json' ? 'Not implemented yet' : never;
|
|
94
|
+
type CommonPrimitiveFilter<DataType, T extends BuiltinType, Nullable extends boolean> = {
|
|
95
|
+
equals?: NullableIf<DataType, Nullable>;
|
|
96
|
+
in?: DataType[];
|
|
97
|
+
notIn?: DataType[];
|
|
98
|
+
lt?: DataType;
|
|
99
|
+
lte?: DataType;
|
|
100
|
+
gt?: DataType;
|
|
101
|
+
gte?: DataType;
|
|
102
|
+
not?: PrimitiveFilter<T, Nullable>;
|
|
103
|
+
};
|
|
104
|
+
type StringFilter<Nullable extends boolean> = NullableIf<string, Nullable> | (CommonPrimitiveFilter<string, 'String', Nullable> & {
|
|
105
|
+
contains?: string;
|
|
106
|
+
startsWith?: string;
|
|
107
|
+
endsWith?: string;
|
|
108
|
+
mode?: 'default' | 'insensitive';
|
|
109
|
+
});
|
|
110
|
+
type NumberFilter<T extends 'Int' | 'Float' | 'Decimal' | 'BigInt', Nullable extends boolean> = NullableIf<number | bigint, Nullable> | CommonPrimitiveFilter<number, T, Nullable>;
|
|
111
|
+
type DateTimeFilter<Nullable extends boolean> = NullableIf<Date | string, Nullable> | CommonPrimitiveFilter<Date | string, 'DateTime', Nullable>;
|
|
112
|
+
type BytesFilter<Nullable extends boolean> = NullableIf<Uint8Array | Buffer, Nullable> | {
|
|
113
|
+
equals?: NullableIf<Uint8Array, Nullable>;
|
|
114
|
+
in?: Uint8Array[];
|
|
115
|
+
notIn?: Uint8Array[];
|
|
116
|
+
not?: BytesFilter<Nullable>;
|
|
117
|
+
};
|
|
118
|
+
type BooleanFilter<Nullable extends boolean> = NullableIf<boolean, Nullable> | {
|
|
119
|
+
equals?: NullableIf<boolean, Nullable>;
|
|
120
|
+
not?: BooleanFilter<Nullable>;
|
|
121
|
+
};
|
|
122
|
+
type SortOrder = 'asc' | 'desc';
|
|
123
|
+
type NullsOrder = 'first' | 'last';
|
|
124
|
+
type OrderBy<Schema extends SchemaDef, Model extends GetModels<Schema>, WithRelation extends boolean, WithAggregation extends boolean> = {
|
|
125
|
+
[Key in NonRelationFields<Schema, Model>]?: FieldIsOptional<Schema, Model, Key> extends true ? SortOrder | {
|
|
126
|
+
sort: SortOrder;
|
|
127
|
+
nulls?: NullsOrder;
|
|
128
|
+
} : SortOrder;
|
|
129
|
+
} & (WithRelation extends true ? {
|
|
130
|
+
[Key in RelationFields<Schema, Model>]?: FieldIsArray<Schema, Model, Key> extends true ? {
|
|
131
|
+
_count?: SortOrder;
|
|
132
|
+
} : OrderBy<Schema, RelationFieldType<Schema, Model, Key>, WithRelation, WithAggregation>;
|
|
133
|
+
} : {}) & (WithAggregation extends true ? {
|
|
134
|
+
_count?: OrderBy<Schema, Model, WithRelation, false>;
|
|
135
|
+
} & (NumericFields<Schema, Model> extends never ? {} : {
|
|
136
|
+
_avg?: SumAvgInput<Schema, Model>;
|
|
137
|
+
_sum?: SumAvgInput<Schema, Model>;
|
|
138
|
+
_min?: MinMaxInput<Schema, Model>;
|
|
139
|
+
_max?: MinMaxInput<Schema, Model>;
|
|
140
|
+
}) : {});
|
|
141
|
+
type WhereUniqueInput<Schema extends SchemaDef, Model extends GetModels<Schema>> = AtLeast<{
|
|
142
|
+
[Key in keyof GetModel<Schema, Model>['uniqueFields']]?: GetModel<Schema, Model>['uniqueFields'][Key] extends Pick<FieldDef, 'type'> ? MapFieldDefType<Schema, GetModel<Schema, Model>['uniqueFields'][Key]> : {
|
|
143
|
+
[Key1 in keyof GetModel<Schema, Model>['uniqueFields'][Key]]: GetModel<Schema, Model>['uniqueFields'][Key][Key1] extends Pick<FieldDef, 'type'> ? MapFieldDefType<Schema, GetModel<Schema, Model>['uniqueFields'][Key][Key1]> : never;
|
|
144
|
+
};
|
|
145
|
+
} & WhereInput<Schema, Model>, Extract<keyof GetModel<Schema, Model>['uniqueFields'], string>>;
|
|
146
|
+
type OmitFields<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
147
|
+
[Key in NonRelationFields<Schema, Model>]?: true;
|
|
148
|
+
};
|
|
149
|
+
type SelectIncludeOmit<Schema extends SchemaDef, Model extends GetModels<Schema>, AllowCount extends boolean> = {
|
|
150
|
+
select?: Select<Schema, Model, AllowCount, boolean>;
|
|
151
|
+
include?: Include<Schema, Model>;
|
|
152
|
+
omit?: OmitFields<Schema, Model>;
|
|
153
|
+
};
|
|
154
|
+
type Distinct<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
155
|
+
distinct?: OrArray<NonRelationFields<Schema, Model>>;
|
|
156
|
+
};
|
|
157
|
+
type Cursor<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
158
|
+
cursor?: WhereUniqueInput<Schema, Model>;
|
|
159
|
+
};
|
|
160
|
+
type Select<Schema extends SchemaDef, Model extends GetModels<Schema>, AllowCount extends Boolean, AllowRelation extends boolean = true> = {
|
|
161
|
+
[Key in NonRelationFields<Schema, Model>]?: true;
|
|
162
|
+
} & (AllowRelation extends true ? Include<Schema, Model> : {}) & // relation fields
|
|
163
|
+
(AllowCount extends true ? {
|
|
164
|
+
_count?: SelectCount<Schema, Model>;
|
|
165
|
+
} : {});
|
|
166
|
+
type SelectCount<Schema extends SchemaDef, Model extends GetModels<Schema>> = true | {
|
|
167
|
+
select: {
|
|
168
|
+
[Key in RelationFields<Schema, Model> as FieldIsArray<Schema, Model, Key> extends true ? Key : never]: true | {
|
|
169
|
+
where: WhereInput<Schema, RelationFieldType<Schema, Model, Key>, false>;
|
|
170
|
+
};
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
type Include<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
174
|
+
[Key in RelationFields<Schema, Model>]?: boolean | FindArgs<Schema, RelationFieldType<Schema, Model, Key>, FieldIsArray<Schema, Model, Key>, FieldIsArray<Schema, Model, Key> extends true ? true : FieldIsOptional<Schema, Model, Key> extends true ? true : false>;
|
|
175
|
+
};
|
|
176
|
+
type Subset<T, U> = {
|
|
177
|
+
[key in keyof T]: key extends keyof U ? T[key] : never;
|
|
178
|
+
};
|
|
179
|
+
type SelectSubset<T, U> = {
|
|
180
|
+
[key in keyof T]: key extends keyof U ? T[key] : never;
|
|
181
|
+
} & (T extends {
|
|
182
|
+
select: any;
|
|
183
|
+
include: any;
|
|
184
|
+
} ? 'Please either choose `select` or `include`.' : T extends {
|
|
185
|
+
select: any;
|
|
186
|
+
omit: any;
|
|
187
|
+
} ? 'Please either choose `select` or `omit`.' : {});
|
|
188
|
+
type ToManyRelationFilter<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = {
|
|
189
|
+
every?: WhereInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
190
|
+
some?: WhereInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
191
|
+
none?: WhereInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
192
|
+
};
|
|
193
|
+
type ToOneRelationFilter<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = NullableIf<WhereInput<Schema, RelationFieldType<Schema, Model, Field>> & {
|
|
194
|
+
is?: NullableIf<WhereInput<Schema, RelationFieldType<Schema, Model, Field>>, FieldIsOptional<Schema, Model, Field>>;
|
|
195
|
+
isNot?: NullableIf<WhereInput<Schema, RelationFieldType<Schema, Model, Field>>, FieldIsOptional<Schema, Model, Field>>;
|
|
196
|
+
}, FieldIsOptional<Schema, Model, Field>>;
|
|
197
|
+
type RelationFilter<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? ToManyRelationFilter<Schema, Model, Field> : ToOneRelationFilter<Schema, Model, Field>;
|
|
198
|
+
type MapFieldType<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>> = MapFieldDefType<Schema, GetField<Schema, Model, Field>>;
|
|
199
|
+
type MapFieldDefType<Schema extends SchemaDef, T extends Pick<FieldDef, 'type' | 'optional' | 'array'>> = WrapType<T['type'] extends GetEnums<Schema> ? keyof GetEnum<Schema, T['type']> : MapBaseType$1<T['type']>, T['optional'], T['array']>;
|
|
200
|
+
type OptionalFieldsForCreate<Schema extends SchemaDef, Model extends GetModels<Schema>> = keyof {
|
|
201
|
+
[Key in GetFields<Schema, Model> as FieldIsOptional<Schema, Model, Key> extends true ? Key : FieldHasDefault<Schema, Model, Key> extends true ? Key : GetField<Schema, Model, Key>['updatedAt'] extends true ? Key : FieldIsRelationArray<Schema, Model, Key> extends true ? Key : never]: GetField<Schema, Model, Key>;
|
|
202
|
+
};
|
|
203
|
+
type GetRelation<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>> = GetField<Schema, Model, Field>['relation'];
|
|
204
|
+
type OppositeRelation<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>, FT = FieldType<Schema, Model, Field>> = FT extends GetModels<Schema> ? GetRelation<Schema, Model, Field> extends RelationInfo ? GetRelation<Schema, Model, Field>['opposite'] extends GetFields<Schema, FT> ? Schema['models'][FT]['fields'][GetRelation<Schema, Model, Field>['opposite']]['relation'] : never : never : never;
|
|
205
|
+
type OppositeRelationFields<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>, Opposite = OppositeRelation<Schema, Model, Field>> = Opposite extends RelationInfo ? Opposite['fields'] extends string[] ? Opposite['fields'] : [] : [];
|
|
206
|
+
type OppositeRelationAndFK<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends GetFields<Schema, Model>, FT = FieldType<Schema, Model, Field>, Relation = GetField<Schema, Model, Field>['relation'], Opposite = Relation extends RelationInfo ? Relation['opposite'] : never> = FT extends GetModels<Schema> ? Opposite extends GetFields<Schema, FT> ? Opposite | OppositeRelationFields<Schema, Model, Field>[number] : never : never;
|
|
207
|
+
type FindArgs<Schema extends SchemaDef, Model extends GetModels<Schema>, Collection extends boolean, AllowFilter extends boolean = true> = (Collection extends true ? {
|
|
208
|
+
skip?: number;
|
|
209
|
+
take?: number;
|
|
210
|
+
orderBy?: OrArray<OrderBy<Schema, Model, true, false>>;
|
|
211
|
+
} : {}) & (AllowFilter extends true ? {
|
|
212
|
+
where?: WhereInput<Schema, Model>;
|
|
213
|
+
} : {}) & SelectIncludeOmit<Schema, Model, Collection> & Distinct<Schema, Model> & Cursor<Schema, Model>;
|
|
214
|
+
type FindUniqueArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
215
|
+
where?: WhereUniqueInput<Schema, Model>;
|
|
216
|
+
} & SelectIncludeOmit<Schema, Model, true>;
|
|
217
|
+
type CreateArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
218
|
+
data: CreateInput<Schema, Model>;
|
|
219
|
+
select?: Select<Schema, Model, true>;
|
|
220
|
+
include?: Include<Schema, Model>;
|
|
221
|
+
omit?: OmitFields<Schema, Model>;
|
|
222
|
+
};
|
|
223
|
+
type CreateManyArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = CreateManyPayload<Schema, Model>;
|
|
224
|
+
type CreateManyAndReturnArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = CreateManyPayload<Schema, Model> & {
|
|
225
|
+
select?: Select<Schema, Model, false, false>;
|
|
226
|
+
omit?: OmitFields<Schema, Model>;
|
|
227
|
+
};
|
|
228
|
+
type OptionalWrap<Schema extends SchemaDef, Model extends GetModels<Schema>, T extends object> = Optional<T, keyof T & OptionalFieldsForCreate<Schema, Model>>;
|
|
229
|
+
type CreateScalarPayload<Schema extends SchemaDef, Model extends GetModels<Schema>> = OptionalWrap<Schema, Model, {
|
|
230
|
+
[Key in ScalarFields<Schema, Model, false>]: ScalarCreatePayload<Schema, Model, Key>;
|
|
231
|
+
}>;
|
|
232
|
+
type ScalarCreatePayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends ScalarFields<Schema, Model, false>> = MapFieldType<Schema, Model, Field> | (FieldIsArray<Schema, Model, Field> extends true ? {
|
|
233
|
+
set?: MapFieldType<Schema, Model, Field>[];
|
|
234
|
+
} : never);
|
|
235
|
+
type CreateFKPayload<Schema extends SchemaDef, Model extends GetModels<Schema>> = OptionalWrap<Schema, Model, {
|
|
236
|
+
[Key in ForeignKeyFields<Schema, Model>]: MapFieldType<Schema, Model, Key>;
|
|
237
|
+
}>;
|
|
238
|
+
type CreateRelationFieldPayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = Omit<{
|
|
239
|
+
create?: NestedCreateInput<Schema, Model, Field>;
|
|
240
|
+
createMany?: NestedCreateManyInput<Schema, Model, Field>;
|
|
241
|
+
connect?: ConnectInput<Schema, Model, Field>;
|
|
242
|
+
connectOrCreate?: ConnectOrCreateInput<Schema, Model, Field>;
|
|
243
|
+
}, FieldIsArray<Schema, Model, Field> extends true ? never : 'createMany'>;
|
|
244
|
+
type CreateRelationPayload<Schema extends SchemaDef, Model extends GetModels<Schema>> = OptionalWrap<Schema, Model, {
|
|
245
|
+
[Key in RelationFields<Schema, Model>]: CreateRelationFieldPayload<Schema, Model, Key>;
|
|
246
|
+
}>;
|
|
247
|
+
type CreateWithFKInput<Schema extends SchemaDef, Model extends GetModels<Schema>> = CreateScalarPayload<Schema, Model> & CreateFKPayload<Schema, Model>;
|
|
248
|
+
type CreateWithRelationInput<Schema extends SchemaDef, Model extends GetModels<Schema>> = CreateScalarPayload<Schema, Model> & CreateRelationPayload<Schema, Model>;
|
|
249
|
+
type ConnectOrCreatePayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = {
|
|
250
|
+
where: WhereUniqueInput<Schema, Model>;
|
|
251
|
+
create: CreateInput<Schema, Model, Without>;
|
|
252
|
+
};
|
|
253
|
+
type CreateManyPayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = {
|
|
254
|
+
data: OrArray<Omit<CreateScalarPayload<Schema, Model>, Without> & Omit<CreateFKPayload<Schema, Model>, Without>>;
|
|
255
|
+
skipDuplicates?: boolean;
|
|
256
|
+
};
|
|
257
|
+
type CreateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = XOR<Omit<CreateWithFKInput<Schema, Model>, Without>, Omit<CreateWithRelationInput<Schema, Model>, Without>>;
|
|
258
|
+
type NestedCreateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = OrArray<CreateInput<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>, FieldIsArray<Schema, Model, Field>>;
|
|
259
|
+
type NestedCreateManyInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = CreateManyPayload<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>;
|
|
260
|
+
type UpdateArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
261
|
+
data: UpdateInput<Schema, Model>;
|
|
262
|
+
where: WhereUniqueInput<Schema, Model>;
|
|
263
|
+
select?: Select<Schema, Model, true>;
|
|
264
|
+
include?: Include<Schema, Model>;
|
|
265
|
+
omit?: OmitFields<Schema, Model>;
|
|
266
|
+
};
|
|
267
|
+
type UpdateManyArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = UpdateManyPayload<Schema, Model>;
|
|
268
|
+
type UpdateManyAndReturnArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = UpdateManyPayload<Schema, Model> & {
|
|
269
|
+
select?: Select<Schema, Model, false, false>;
|
|
270
|
+
omit?: OmitFields<Schema, Model>;
|
|
271
|
+
};
|
|
272
|
+
type UpdateManyPayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = {
|
|
273
|
+
data: OrArray<UpdateScalarInput<Schema, Model, Without>>;
|
|
274
|
+
where?: WhereInput<Schema, Model>;
|
|
275
|
+
limit?: number;
|
|
276
|
+
};
|
|
277
|
+
type UpsertArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
278
|
+
create: CreateInput<Schema, Model>;
|
|
279
|
+
update: UpdateInput<Schema, Model>;
|
|
280
|
+
where: WhereUniqueInput<Schema, Model>;
|
|
281
|
+
select?: Select<Schema, Model, true>;
|
|
282
|
+
include?: Include<Schema, Model>;
|
|
283
|
+
omit?: OmitFields<Schema, Model>;
|
|
284
|
+
};
|
|
285
|
+
type UpdateScalarInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = Omit<{
|
|
286
|
+
[Key in NonRelationFields<Schema, Model>]?: ScalarUpdatePayload<Schema, Model, Key>;
|
|
287
|
+
}, Without>;
|
|
288
|
+
type ScalarUpdatePayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends NonRelationFields<Schema, Model>> = MapFieldType<Schema, Model, Field> | (Field extends NumericFields<Schema, Model> ? {
|
|
289
|
+
set?: NullableIf<number, FieldIsOptional<Schema, Model, Field>>;
|
|
290
|
+
increment?: number;
|
|
291
|
+
decrement?: number;
|
|
292
|
+
multiply?: number;
|
|
293
|
+
divide?: number;
|
|
294
|
+
} : never) | (FieldIsArray<Schema, Model, Field> extends true ? {
|
|
295
|
+
set?: MapFieldType<Schema, Model, Field>[];
|
|
296
|
+
push?: OrArray<MapFieldType<Schema, Model, Field>, true>;
|
|
297
|
+
} : never);
|
|
298
|
+
type UpdateRelationInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = Omit<{
|
|
299
|
+
[Key in RelationFields<Schema, Model>]?: UpdateRelationFieldPayload<Schema, Model, Key>;
|
|
300
|
+
}, Without>;
|
|
301
|
+
type UpdateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Without extends string = never> = UpdateScalarInput<Schema, Model, Without> & UpdateRelationInput<Schema, Model, Without>;
|
|
302
|
+
type UpdateRelationFieldPayload<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? ToManyRelationUpdateInput<Schema, Model, Field> : ToOneRelationUpdateInput<Schema, Model, Field>;
|
|
303
|
+
type ToManyRelationUpdateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = {
|
|
304
|
+
create?: NestedCreateInput<Schema, Model, Field>;
|
|
305
|
+
createMany?: NestedCreateManyInput<Schema, Model, Field>;
|
|
306
|
+
connect?: ConnectInput<Schema, Model, Field>;
|
|
307
|
+
connectOrCreate?: ConnectOrCreateInput<Schema, Model, Field>;
|
|
308
|
+
disconnect?: DisconnectInput<Schema, Model, Field>;
|
|
309
|
+
update?: NestedUpdateInput<Schema, Model, Field>;
|
|
310
|
+
upsert?: NestedUpsertInput<Schema, Model, Field>;
|
|
311
|
+
updateMany?: NestedUpdateManyInput<Schema, Model, Field>;
|
|
312
|
+
delete?: NestedDeleteInput<Schema, Model, Field>;
|
|
313
|
+
deleteMany?: NestedDeleteManyInput<Schema, Model, Field>;
|
|
314
|
+
set?: SetRelationInput<Schema, Model, Field>;
|
|
315
|
+
};
|
|
316
|
+
type ToOneRelationUpdateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = {
|
|
317
|
+
create?: NestedCreateInput<Schema, Model, Field>;
|
|
318
|
+
connect?: ConnectInput<Schema, Model, Field>;
|
|
319
|
+
connectOrCreate?: ConnectOrCreateInput<Schema, Model, Field>;
|
|
320
|
+
update?: NestedUpdateInput<Schema, Model, Field>;
|
|
321
|
+
upsert?: NestedUpsertInput<Schema, Model, Field>;
|
|
322
|
+
} & (FieldIsOptional<Schema, Model, Field> extends true ? {
|
|
323
|
+
disconnect?: DisconnectInput<Schema, Model, Field>;
|
|
324
|
+
delete?: NestedDeleteInput<Schema, Model, Field>;
|
|
325
|
+
} : {});
|
|
326
|
+
type DeleteArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
327
|
+
where: WhereUniqueInput<Schema, Model>;
|
|
328
|
+
select?: Select<Schema, Model, true>;
|
|
329
|
+
include?: Include<Schema, Model>;
|
|
330
|
+
omit?: OmitFields<Schema, Model>;
|
|
331
|
+
};
|
|
332
|
+
type DeleteManyArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
333
|
+
where?: WhereInput<Schema, Model>;
|
|
334
|
+
limit?: number;
|
|
335
|
+
};
|
|
336
|
+
type CountArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = Omit<FindArgs<Schema, Model, true>, 'select' | 'include' | 'distinct' | 'omit'> & {
|
|
337
|
+
select?: CountAggregateInput<Schema, Model> | true;
|
|
338
|
+
};
|
|
339
|
+
type CountAggregateInput<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
340
|
+
[Key in NonRelationFields<Schema, Model>]?: true;
|
|
341
|
+
} & {
|
|
342
|
+
_all?: true;
|
|
343
|
+
};
|
|
344
|
+
type CountResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Args extends CountArgs<Schema, Model>> = Args extends {
|
|
345
|
+
select: infer S;
|
|
346
|
+
} ? S extends true ? number : {
|
|
347
|
+
[Key in keyof S]: number;
|
|
348
|
+
} : number;
|
|
349
|
+
type AggregateArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
350
|
+
where?: WhereInput<Schema, Model>;
|
|
351
|
+
skip?: number;
|
|
352
|
+
take?: number;
|
|
353
|
+
orderBy?: OrArray<OrderBy<Schema, Model, true, false>>;
|
|
354
|
+
} & {
|
|
355
|
+
_count?: true | CountAggregateInput<Schema, Model>;
|
|
356
|
+
} & (NumericFields<Schema, Model> extends never ? {} : {
|
|
357
|
+
_avg?: SumAvgInput<Schema, Model>;
|
|
358
|
+
_sum?: SumAvgInput<Schema, Model>;
|
|
359
|
+
_min?: MinMaxInput<Schema, Model>;
|
|
360
|
+
_max?: MinMaxInput<Schema, Model>;
|
|
361
|
+
});
|
|
362
|
+
type NumericFields<Schema extends SchemaDef, Model extends GetModels<Schema>> = keyof {
|
|
363
|
+
[Key in GetFields<Schema, Model> as GetFieldType<Schema, Model, Key> extends 'Int' | 'Float' | 'BigInt' | 'Decimal' ? FieldIsArray<Schema, Model, Key> extends true ? never : Key : never]: GetField<Schema, Model, Key>;
|
|
364
|
+
};
|
|
365
|
+
type SumAvgInput<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
366
|
+
[Key in NumericFields<Schema, Model>]?: true;
|
|
367
|
+
};
|
|
368
|
+
type MinMaxInput<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
369
|
+
[Key in GetFields<Schema, Model> as FieldIsArray<Schema, Model, Key> extends true ? never : FieldIsRelation<Schema, Model, Key> extends true ? never : Key]?: true;
|
|
370
|
+
};
|
|
371
|
+
type AggregateResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Args extends AggregateArgs<Schema, Model>> = (Args extends {
|
|
372
|
+
_count: infer Count;
|
|
373
|
+
} ? {
|
|
374
|
+
_count: AggCommonOutput<Count>;
|
|
375
|
+
} : {}) & (Args extends {
|
|
376
|
+
_sum: infer Sum;
|
|
377
|
+
} ? {
|
|
378
|
+
_sum: AggCommonOutput<Sum>;
|
|
379
|
+
} : {}) & (Args extends {
|
|
380
|
+
_avg: infer Avg;
|
|
381
|
+
} ? {
|
|
382
|
+
_avg: AggCommonOutput<Avg>;
|
|
383
|
+
} : {}) & (Args extends {
|
|
384
|
+
_min: infer Min;
|
|
385
|
+
} ? {
|
|
386
|
+
_min: AggCommonOutput<Min>;
|
|
387
|
+
} : {}) & (Args extends {
|
|
388
|
+
_max: infer Max;
|
|
389
|
+
} ? {
|
|
390
|
+
_max: AggCommonOutput<Max>;
|
|
391
|
+
} : {});
|
|
392
|
+
type AggCommonOutput<Input> = Input extends true ? number : Input extends {} ? {
|
|
393
|
+
[Key in keyof Input]: number;
|
|
394
|
+
} : never;
|
|
395
|
+
type GroupByArgs<Schema extends SchemaDef, Model extends GetModels<Schema>> = {
|
|
396
|
+
where?: WhereInput<Schema, Model>;
|
|
397
|
+
orderBy?: OrArray<OrderBy<Schema, Model, false, true>>;
|
|
398
|
+
by: NonRelationFields<Schema, Model> | NonEmptyArray<NonRelationFields<Schema, Model>>;
|
|
399
|
+
having?: WhereInput<Schema, Model, true>;
|
|
400
|
+
take?: number;
|
|
401
|
+
skip?: number;
|
|
402
|
+
_count?: true | CountAggregateInput<Schema, Model>;
|
|
403
|
+
} & (NumericFields<Schema, Model> extends never ? {} : {
|
|
404
|
+
_avg?: SumAvgInput<Schema, Model>;
|
|
405
|
+
_sum?: SumAvgInput<Schema, Model>;
|
|
406
|
+
_min?: MinMaxInput<Schema, Model>;
|
|
407
|
+
_max?: MinMaxInput<Schema, Model>;
|
|
408
|
+
});
|
|
409
|
+
type GroupByResult<Schema extends SchemaDef, Model extends GetModels<Schema>, Args extends GroupByArgs<Schema, Model>> = Array<{
|
|
410
|
+
[Key in NonRelationFields<Schema, Model> as Key extends ValueOfPotentialTuple<Args['by']> ? Key : never]: MapFieldType<Schema, Model, Key>;
|
|
411
|
+
} & (Args extends {
|
|
412
|
+
_count: infer Count;
|
|
413
|
+
} ? {
|
|
414
|
+
_count: AggCommonOutput<Count>;
|
|
415
|
+
} : {}) & (Args extends {
|
|
416
|
+
_avg: infer Avg;
|
|
417
|
+
} ? {
|
|
418
|
+
_avg: AggCommonOutput<Avg>;
|
|
419
|
+
} : {}) & (Args extends {
|
|
420
|
+
_sum: infer Sum;
|
|
421
|
+
} ? {
|
|
422
|
+
_sum: AggCommonOutput<Sum>;
|
|
423
|
+
} : {}) & (Args extends {
|
|
424
|
+
_min: infer Min;
|
|
425
|
+
} ? {
|
|
426
|
+
_min: AggCommonOutput<Min>;
|
|
427
|
+
} : {}) & (Args extends {
|
|
428
|
+
_max: infer Max;
|
|
429
|
+
} ? {
|
|
430
|
+
_max: AggCommonOutput<Max>;
|
|
431
|
+
} : {})>;
|
|
432
|
+
type ConnectInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? OrArray<WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>> : WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
433
|
+
type ConnectOrCreateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? OrArray<ConnectOrCreatePayload<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>> : ConnectOrCreatePayload<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>;
|
|
434
|
+
type DisconnectInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? OrArray<WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>, true> : boolean | WhereInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
435
|
+
type SetRelationInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = OrArray<WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>>;
|
|
436
|
+
type NestedUpdateInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? OrArray<{
|
|
437
|
+
where: WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
438
|
+
data: UpdateInput<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>;
|
|
439
|
+
}, true> : XOR<{
|
|
440
|
+
where: WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
441
|
+
data: UpdateInput<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>;
|
|
442
|
+
}, UpdateInput<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>>;
|
|
443
|
+
type NestedUpsertInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = OrArray<{
|
|
444
|
+
where: WhereUniqueInput<Schema, Model>;
|
|
445
|
+
create: CreateInput<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>;
|
|
446
|
+
update: UpdateInput<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>;
|
|
447
|
+
}, FieldIsArray<Schema, Model, Field>>;
|
|
448
|
+
type NestedUpdateManyInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = OrArray<UpdateManyPayload<Schema, RelationFieldType<Schema, Model, Field>, OppositeRelationAndFK<Schema, Model, Field>>>;
|
|
449
|
+
type NestedDeleteInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = FieldIsArray<Schema, Model, Field> extends true ? OrArray<WhereUniqueInput<Schema, RelationFieldType<Schema, Model, Field>>, true> : boolean | WhereInput<Schema, RelationFieldType<Schema, Model, Field>>;
|
|
450
|
+
type NestedDeleteManyInput<Schema extends SchemaDef, Model extends GetModels<Schema>, Field extends RelationFields<Schema, Model>> = OrArray<WhereInput<Schema, RelationFieldType<Schema, Model, Field>, true>>;
|
|
451
|
+
interface ModelOperations<Schema extends SchemaDef, Model extends GetModels<Schema>> {
|
|
452
|
+
/**
|
|
453
|
+
* Returns a list of entities.
|
|
454
|
+
* @param args - query args
|
|
455
|
+
* @returns a list of entities
|
|
456
|
+
*
|
|
457
|
+
* @example
|
|
458
|
+
* ```ts
|
|
459
|
+
* // find all users and return all scalar fields
|
|
460
|
+
* await client.user.findMany();
|
|
461
|
+
*
|
|
462
|
+
* // find all users with name 'Alex'
|
|
463
|
+
* await client.user.findMany({
|
|
464
|
+
* where: {
|
|
465
|
+
* name: 'Alex'
|
|
466
|
+
* }
|
|
467
|
+
* });
|
|
468
|
+
*
|
|
469
|
+
* // select fields
|
|
470
|
+
* await client.user.findMany({
|
|
471
|
+
* select: {
|
|
472
|
+
* name: true,
|
|
473
|
+
* email: true,
|
|
474
|
+
* }
|
|
475
|
+
* }); // result: `Array<{ name: string, email: string }>`
|
|
476
|
+
*
|
|
477
|
+
* // omit fields
|
|
478
|
+
* await client.user.findMany({
|
|
479
|
+
* omit: {
|
|
480
|
+
* name: true,
|
|
481
|
+
* }
|
|
482
|
+
* }); // result: `Array<{ id: number; email: string; ... }>`
|
|
483
|
+
*
|
|
484
|
+
* // include relations (and all scalar fields)
|
|
485
|
+
* await client.user.findMany({
|
|
486
|
+
* include: {
|
|
487
|
+
* posts: true,
|
|
488
|
+
* }
|
|
489
|
+
* }); // result: `Array<{ ...; posts: Post[] }>`
|
|
490
|
+
*
|
|
491
|
+
* // include relations with filter
|
|
492
|
+
* await client.user.findMany({
|
|
493
|
+
* include: {
|
|
494
|
+
* posts: {
|
|
495
|
+
* where: {
|
|
496
|
+
* published: true
|
|
497
|
+
* }
|
|
498
|
+
* }
|
|
499
|
+
* }
|
|
500
|
+
* });
|
|
501
|
+
*
|
|
502
|
+
* // pagination and sorting
|
|
503
|
+
* await client.user.findMany({
|
|
504
|
+
* skip: 10,
|
|
505
|
+
* take: 10,
|
|
506
|
+
* orderBy: [{ name: 'asc' }, { email: 'desc' }],
|
|
507
|
+
* });
|
|
508
|
+
*
|
|
509
|
+
* // pagination with cursor (https://www.prisma.io/docs/orm/prisma-client/queries/pagination#cursor-based-pagination)
|
|
510
|
+
* await client.user.findMany({
|
|
511
|
+
* cursor: { id: 10 },
|
|
512
|
+
* skip: 1,
|
|
513
|
+
* take: 10,
|
|
514
|
+
* orderBy: { id: 'asc' },
|
|
515
|
+
* });
|
|
516
|
+
*
|
|
517
|
+
* // distinct
|
|
518
|
+
* await client.user.findMany({
|
|
519
|
+
* distinct: ['name']
|
|
520
|
+
* });
|
|
521
|
+
*
|
|
522
|
+
* // count all relations
|
|
523
|
+
* await client.user.findMany({
|
|
524
|
+
* _count: true,
|
|
525
|
+
* }); // result: `{ _count: { posts: number; ... } }`
|
|
526
|
+
*
|
|
527
|
+
* // count selected relations
|
|
528
|
+
* await client.user.findMany({
|
|
529
|
+
* _count: { select: { posts: true } },
|
|
530
|
+
* }); // result: `{ _count: { posts: number } }`
|
|
531
|
+
* ```
|
|
532
|
+
*/
|
|
533
|
+
findMany<T extends FindArgs<Schema, Model, true>>(args?: SelectSubset<T, FindArgs<Schema, Model, true>>): Promise<ModelResult<Schema, Model, T>[]>;
|
|
534
|
+
/**
|
|
535
|
+
* Returns a uniquely identified entity.
|
|
536
|
+
* @param args - query args
|
|
537
|
+
* @returns a single entity or null if not found
|
|
538
|
+
* @see {@link findMany}
|
|
539
|
+
*/
|
|
540
|
+
findUnique<T extends FindUniqueArgs<Schema, Model>>(args?: SelectSubset<T, FindUniqueArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T> | null>;
|
|
541
|
+
/**
|
|
542
|
+
* Returns a uniquely identified entity or throws `NotFoundError` if not found.
|
|
543
|
+
* @param args - query args
|
|
544
|
+
* @returns a single entity
|
|
545
|
+
* @see {@link findMany}
|
|
546
|
+
*/
|
|
547
|
+
findUniqueOrThrow<T extends FindUniqueArgs<Schema, Model>>(args?: SelectSubset<T, FindUniqueArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T>>;
|
|
548
|
+
/**
|
|
549
|
+
* Returns the first entity.
|
|
550
|
+
* @param args - query args
|
|
551
|
+
* @returns a single entity or null if not found
|
|
552
|
+
* @see {@link findMany}
|
|
553
|
+
*/
|
|
554
|
+
findFirst<T extends FindArgs<Schema, Model, true>>(args?: SelectSubset<T, FindArgs<Schema, Model, true>>): Promise<ModelResult<Schema, Model, T> | null>;
|
|
555
|
+
/**
|
|
556
|
+
* Returns the first entity or throws `NotFoundError` if not found.
|
|
557
|
+
* @param args - query args
|
|
558
|
+
* @returns a single entity
|
|
559
|
+
* @see {@link findMany}
|
|
560
|
+
*/
|
|
561
|
+
findFirstOrThrow<T extends FindArgs<Schema, Model, true>>(args?: SelectSubset<T, FindArgs<Schema, Model, true>>): Promise<ModelResult<Schema, Model, T>>;
|
|
562
|
+
/**
|
|
563
|
+
* Creates a new entity.
|
|
564
|
+
* @param args - create args
|
|
565
|
+
* @returns the created entity
|
|
566
|
+
*
|
|
567
|
+
* @example
|
|
568
|
+
* ```ts
|
|
569
|
+
* // simple create
|
|
570
|
+
* await client.user.create({
|
|
571
|
+
* data: { name: 'Alex', email: 'alex@zenstack.dev' }
|
|
572
|
+
* });
|
|
573
|
+
*
|
|
574
|
+
* // nested create with relation
|
|
575
|
+
* await client.user.create({
|
|
576
|
+
* data: {
|
|
577
|
+
* email: 'alex@zenstack.dev',
|
|
578
|
+
* posts: { create: { title: 'Hello World' } }
|
|
579
|
+
* }
|
|
580
|
+
* });
|
|
581
|
+
*
|
|
582
|
+
* // you can use `select`, `omit`, and `include` to control
|
|
583
|
+
* // the fields returned by the query, as with `findMany`
|
|
584
|
+
* await client.user.create({
|
|
585
|
+
* data: {
|
|
586
|
+
* email: 'alex@zenstack.dev',
|
|
587
|
+
* posts: { create: { title: 'Hello World' } }
|
|
588
|
+
* },
|
|
589
|
+
* include: { posts: true }
|
|
590
|
+
* }); // result: `{ id: number; posts: Post[] }`
|
|
591
|
+
*
|
|
592
|
+
* // connect relations
|
|
593
|
+
* await client.user.create({
|
|
594
|
+
* data: {
|
|
595
|
+
* email: 'alex@zenstack.dev',
|
|
596
|
+
* posts: { connect: { id: 1 } }
|
|
597
|
+
* }
|
|
598
|
+
* });
|
|
599
|
+
*
|
|
600
|
+
* // connect relations, and create if not found
|
|
601
|
+
* await client.user.create({
|
|
602
|
+
* data: {
|
|
603
|
+
* email: 'alex@zenstack.dev',
|
|
604
|
+
* posts: {
|
|
605
|
+
* connectOrCreate: {
|
|
606
|
+
* where: { id: 1 },
|
|
607
|
+
* create: { title: 'Hello World' }
|
|
608
|
+
* }
|
|
609
|
+
* }
|
|
610
|
+
* }
|
|
611
|
+
* });
|
|
612
|
+
* ```
|
|
613
|
+
*/
|
|
614
|
+
create<T extends CreateArgs<Schema, Model>>(args: SelectSubset<T, CreateArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T>>;
|
|
615
|
+
/**
|
|
616
|
+
* Creates multiple entities. Only scalar fields are allowed.
|
|
617
|
+
* @param args - create args
|
|
618
|
+
* @returns count of created entities: `{ count: number }`
|
|
619
|
+
*
|
|
620
|
+
* @example
|
|
621
|
+
* ```ts
|
|
622
|
+
* // create multiple entities
|
|
623
|
+
* await client.user.createMany({
|
|
624
|
+
* data: [
|
|
625
|
+
* { name: 'Alex', email: 'alex@zenstack.dev' },
|
|
626
|
+
* { name: 'John', email: 'john@zenstack.dev' }
|
|
627
|
+
* ]
|
|
628
|
+
* });
|
|
629
|
+
*
|
|
630
|
+
* // skip items that cause unique constraint violation
|
|
631
|
+
* await client.user.createMany({
|
|
632
|
+
* data: [
|
|
633
|
+
* { name: 'Alex', email: 'alex@zenstack.dev' },
|
|
634
|
+
* { name: 'John', email: 'john@zenstack.dev' }
|
|
635
|
+
* ],
|
|
636
|
+
* skipDuplicates: true
|
|
637
|
+
* });
|
|
638
|
+
* ```
|
|
639
|
+
*/
|
|
640
|
+
createMany(args?: CreateManyPayload<Schema, Model>): Promise<BatchResult>;
|
|
641
|
+
/**
|
|
642
|
+
* Creates multiple entities and returns them.
|
|
643
|
+
* @param args - create args. See {@link createMany} for input. Use
|
|
644
|
+
* `select` and `omit` to control the fields returned.
|
|
645
|
+
* @returns the created entities
|
|
646
|
+
*
|
|
647
|
+
* @example
|
|
648
|
+
* ```ts
|
|
649
|
+
* // create multiple entities and return selected fields
|
|
650
|
+
* await client.user.createManyAndReturn({
|
|
651
|
+
* data: [
|
|
652
|
+
* { name: 'Alex', email: 'alex@zenstack.dev' },
|
|
653
|
+
* { name: 'John', email: 'john@zenstack.dev' }
|
|
654
|
+
* ],
|
|
655
|
+
* select: { id: true, email: true }
|
|
656
|
+
* });
|
|
657
|
+
* ```
|
|
658
|
+
*/
|
|
659
|
+
createManyAndReturn<T extends CreateManyAndReturnArgs<Schema, Model>>(args?: SelectSubset<T, CreateManyAndReturnArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T>[]>;
|
|
660
|
+
/**
|
|
661
|
+
* Updates a uniquely identified entity.
|
|
662
|
+
* @param args - update args. See {@link findMany} for how to control
|
|
663
|
+
* fields and relations returned.
|
|
664
|
+
* @returns the updated entity. Throws `NotFoundError` if the entity is not found.
|
|
665
|
+
*
|
|
666
|
+
* @example
|
|
667
|
+
* ```ts
|
|
668
|
+
* // update fields
|
|
669
|
+
* await client.user.update({
|
|
670
|
+
* where: { id: 1 },
|
|
671
|
+
* data: { name: 'Alex' }
|
|
672
|
+
* });
|
|
673
|
+
*
|
|
674
|
+
* // connect a relation
|
|
675
|
+
* await client.user.update({
|
|
676
|
+
* where: { id: 1 },
|
|
677
|
+
* data: { posts: { connect: { id: 1 } } }
|
|
678
|
+
* });
|
|
679
|
+
*
|
|
680
|
+
* // connect relation, and create if not found
|
|
681
|
+
* await client.user.update({
|
|
682
|
+
* where: { id: 1 },
|
|
683
|
+
* data: {
|
|
684
|
+
* posts: {
|
|
685
|
+
* connectOrCreate: {
|
|
686
|
+
* where: { id: 1 },
|
|
687
|
+
* create: { title: 'Hello World' }
|
|
688
|
+
* }
|
|
689
|
+
* }
|
|
690
|
+
* }
|
|
691
|
+
* });
|
|
692
|
+
*
|
|
693
|
+
* // create many related entities (only available for one-to-many relations)
|
|
694
|
+
* await client.user.update({
|
|
695
|
+
* where: { id: 1 },
|
|
696
|
+
* data: {
|
|
697
|
+
* posts: {
|
|
698
|
+
* createMany: {
|
|
699
|
+
* data: [{ title: 'Hello World' }, { title: 'Hello World 2' }],
|
|
700
|
+
* }
|
|
701
|
+
* }
|
|
702
|
+
* }
|
|
703
|
+
* });
|
|
704
|
+
*
|
|
705
|
+
* // disconnect a one-to-many relation
|
|
706
|
+
* await client.user.update({
|
|
707
|
+
* where: { id: 1 },
|
|
708
|
+
* data: { posts: { disconnect: { id: 1 } } }
|
|
709
|
+
* });
|
|
710
|
+
*
|
|
711
|
+
* // disconnect a one-to-one relation
|
|
712
|
+
* await client.user.update({
|
|
713
|
+
* where: { id: 1 },
|
|
714
|
+
* data: { profile: { disconnect: true } }
|
|
715
|
+
* });
|
|
716
|
+
*
|
|
717
|
+
* // replace a relation (only available for one-to-many relations)
|
|
718
|
+
* await client.user.update({
|
|
719
|
+
* where: { id: 1 },
|
|
720
|
+
* data: {
|
|
721
|
+
* posts: {
|
|
722
|
+
* set: [{ id: 1 }, { id: 2 }]
|
|
723
|
+
* }
|
|
724
|
+
* }
|
|
725
|
+
* });
|
|
726
|
+
*
|
|
727
|
+
* // update a relation
|
|
728
|
+
* await client.user.update({
|
|
729
|
+
* where: { id: 1 },
|
|
730
|
+
* data: {
|
|
731
|
+
* posts: {
|
|
732
|
+
* update: { where: { id: 1 }, data: { title: 'Hello World' } }
|
|
733
|
+
* }
|
|
734
|
+
* }
|
|
735
|
+
* });
|
|
736
|
+
*
|
|
737
|
+
* // upsert a relation
|
|
738
|
+
* await client.user.update({
|
|
739
|
+
* where: { id: 1 },
|
|
740
|
+
* data: {
|
|
741
|
+
* posts: {
|
|
742
|
+
* upsert: {
|
|
743
|
+
* where: { id: 1 },
|
|
744
|
+
* create: { title: 'Hello World' },
|
|
745
|
+
* update: { title: 'Hello World' }
|
|
746
|
+
* }
|
|
747
|
+
* }
|
|
748
|
+
* }
|
|
749
|
+
* });
|
|
750
|
+
*
|
|
751
|
+
* // update many related entities (only available for one-to-many relations)
|
|
752
|
+
* await client.user.update({
|
|
753
|
+
* where: { id: 1 },
|
|
754
|
+
* data: {
|
|
755
|
+
* posts: {
|
|
756
|
+
* updateMany: {
|
|
757
|
+
* where: { published: true },
|
|
758
|
+
* data: { title: 'Hello World' }
|
|
759
|
+
* }
|
|
760
|
+
* }
|
|
761
|
+
* }
|
|
762
|
+
* });
|
|
763
|
+
*
|
|
764
|
+
* // delete a one-to-many relation
|
|
765
|
+
* await client.user.update({
|
|
766
|
+
* where: { id: 1 },
|
|
767
|
+
* data: { posts: { delete: { id: 1 } } }
|
|
768
|
+
* });
|
|
769
|
+
*
|
|
770
|
+
* // delete a one-to-one relation
|
|
771
|
+
* await client.user.update({
|
|
772
|
+
* where: { id: 1 },
|
|
773
|
+
* data: { profile: { delete: true } }
|
|
774
|
+
* });
|
|
775
|
+
* ```
|
|
776
|
+
*/
|
|
777
|
+
update<T extends UpdateArgs<Schema, Model>>(args: SelectSubset<T, UpdateArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T>>;
|
|
778
|
+
/**
|
|
779
|
+
* Updates multiple entities.
|
|
780
|
+
* @param args - update args. Only scalar fields are allowed for data.
|
|
781
|
+
* @returns count of updated entities: `{ count: number }`
|
|
782
|
+
*
|
|
783
|
+
* @example
|
|
784
|
+
* ```ts
|
|
785
|
+
* // update many entities
|
|
786
|
+
* await client.user.updateMany({
|
|
787
|
+
* where: { email: { endsWith: '@zenstack.dev' } },
|
|
788
|
+
* data: { role: 'ADMIN' }
|
|
789
|
+
* });
|
|
790
|
+
*
|
|
791
|
+
* // limit the number of updated entities
|
|
792
|
+
* await client.user.updateMany({
|
|
793
|
+
* where: { email: { endsWith: '@zenstack.dev' } },
|
|
794
|
+
* data: { role: 'ADMIN' },
|
|
795
|
+
* limit: 10
|
|
796
|
+
* });
|
|
797
|
+
*/
|
|
798
|
+
updateMany<T extends UpdateManyArgs<Schema, Model>>(args: Subset<T, UpdateManyArgs<Schema, Model>>): Promise<BatchResult>;
|
|
799
|
+
/**
|
|
800
|
+
* Updates multiple entities and returns them.
|
|
801
|
+
* @param args - update args. Only scalar fields are allowed for data.
|
|
802
|
+
* @returns the updated entities
|
|
803
|
+
*
|
|
804
|
+
* @example
|
|
805
|
+
* ```ts
|
|
806
|
+
* // update many entities and return selected fields
|
|
807
|
+
* await client.user.updateManyAndReturn({
|
|
808
|
+
* where: { email: { endsWith: '@zenstack.dev' } },
|
|
809
|
+
* data: { role: 'ADMIN' },
|
|
810
|
+
* select: { id: true, email: true }
|
|
811
|
+
* }); // result: `Array<{ id: string; email: string }>`
|
|
812
|
+
*
|
|
813
|
+
* // limit the number of updated entities
|
|
814
|
+
* await client.user.updateManyAndReturn({
|
|
815
|
+
* where: { email: { endsWith: '@zenstack.dev' } },
|
|
816
|
+
* data: { role: 'ADMIN' },
|
|
817
|
+
* limit: 10
|
|
818
|
+
* });
|
|
819
|
+
* ```
|
|
820
|
+
*/
|
|
821
|
+
updateManyAndReturn<T extends UpdateManyAndReturnArgs<Schema, Model>>(args: Subset<T, UpdateManyAndReturnArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T>[]>;
|
|
822
|
+
/**
|
|
823
|
+
* Creates or updates an entity.
|
|
824
|
+
* @param args - upsert args
|
|
825
|
+
* @returns the upserted entity
|
|
826
|
+
*
|
|
827
|
+
* @example
|
|
828
|
+
* ```ts
|
|
829
|
+
* // upsert an entity
|
|
830
|
+
* await client.user.upsert({
|
|
831
|
+
* // `where` clause is used to find the entity
|
|
832
|
+
* where: { id: 1 },
|
|
833
|
+
* // `create` clause is used if the entity is not found
|
|
834
|
+
* create: { email: 'alex@zenstack.dev', name: 'Alex' },
|
|
835
|
+
* // `update` clause is used if the entity is found
|
|
836
|
+
* update: { name: 'Alex-new' },
|
|
837
|
+
* // `select` and `omit` can be used to control the returned fields
|
|
838
|
+
* ...
|
|
839
|
+
* });
|
|
840
|
+
* ```
|
|
841
|
+
*/
|
|
842
|
+
upsert<T extends UpsertArgs<Schema, Model>>(args: SelectSubset<T, UpsertArgs<Schema, Model>>): Promise<ModelResult<Schema, Model, T>>;
|
|
843
|
+
/**
|
|
844
|
+
* Deletes a uniquely identifiable entity.
|
|
845
|
+
* @param args - delete args
|
|
846
|
+
* @returns the deleted entity. Throws `NotFoundError` if the entity is not found.
|
|
847
|
+
*
|
|
848
|
+
* @example
|
|
849
|
+
* ```ts
|
|
850
|
+
* // delete an entity
|
|
851
|
+
* await client.user.delete({
|
|
852
|
+
* where: { id: 1 }
|
|
853
|
+
* });
|
|
854
|
+
*
|
|
855
|
+
* // delete an entity and return selected fields
|
|
856
|
+
* await client.user.delete({
|
|
857
|
+
* where: { id: 1 },
|
|
858
|
+
* select: { id: true, email: true }
|
|
859
|
+
* }); // result: `{ id: string; email: string }`
|
|
860
|
+
* ```
|
|
861
|
+
*/
|
|
862
|
+
delete<T extends DeleteArgs<Schema, Model>>(args: SelectSubset<T, DeleteArgs<Schema, Model>>): Promise<ModelResult<Schema, Model>>;
|
|
863
|
+
/**
|
|
864
|
+
* Deletes multiple entities.
|
|
865
|
+
* @param args - delete args
|
|
866
|
+
* @returns count of deleted entities: `{ count: number }`
|
|
867
|
+
*
|
|
868
|
+
* @example
|
|
869
|
+
* ```ts
|
|
870
|
+
* // delete many entities
|
|
871
|
+
* await client.user.deleteMany({
|
|
872
|
+
* where: { email: { endsWith: '@zenstack.dev' } }
|
|
873
|
+
* });
|
|
874
|
+
*
|
|
875
|
+
* // limit the number of deleted entities
|
|
876
|
+
* await client.user.deleteMany({
|
|
877
|
+
* where: { email: { endsWith: '@zenstack.dev' } },
|
|
878
|
+
* limit: 10
|
|
879
|
+
* });
|
|
880
|
+
* ```
|
|
881
|
+
*/
|
|
882
|
+
deleteMany<T extends DeleteManyArgs<Schema, Model>>(args?: Subset<T, DeleteManyArgs<Schema, Model>>): Promise<BatchResult>;
|
|
883
|
+
/**
|
|
884
|
+
* Counts rows or field values.
|
|
885
|
+
* @param args - count args
|
|
886
|
+
* @returns `number`, or an object containing count of selected relations
|
|
887
|
+
*
|
|
888
|
+
* @example
|
|
889
|
+
* ```ts
|
|
890
|
+
* // count all
|
|
891
|
+
* await client.user.count();
|
|
892
|
+
*
|
|
893
|
+
* // count with a filter
|
|
894
|
+
* await client.user.count({ where: { email: { endsWith: '@zenstack.dev' } } });
|
|
895
|
+
*
|
|
896
|
+
* // count rows and field values
|
|
897
|
+
* await client.user.count({
|
|
898
|
+
* select: { _all: true, email: true }
|
|
899
|
+
* }); // result: `{ _all: number, email: number }`
|
|
900
|
+
*/
|
|
901
|
+
count<T extends CountArgs<Schema, Model>>(args?: Subset<T, CountArgs<Schema, Model>>): Promise<CountResult<Schema, Model, T>>;
|
|
902
|
+
/**
|
|
903
|
+
* Aggregates rows.
|
|
904
|
+
* @param args - aggregation args
|
|
905
|
+
* @returns an object containing aggregated values
|
|
906
|
+
*
|
|
907
|
+
* @example
|
|
908
|
+
* ```ts
|
|
909
|
+
* // aggregate rows
|
|
910
|
+
* await client.profile.aggregate({
|
|
911
|
+
* where: { email: { endsWith: '@zenstack.dev' } },
|
|
912
|
+
* _count: true,
|
|
913
|
+
* _avg: { age: true },
|
|
914
|
+
* _sum: { age: true },
|
|
915
|
+
* _min: { age: true },
|
|
916
|
+
* _max: { age: true }
|
|
917
|
+
* }); // result: `{ _count: number, _avg: { age: number }, ... }`
|
|
918
|
+
*/
|
|
919
|
+
aggregate<T extends AggregateArgs<Schema, Model>>(args: Subset<T, AggregateArgs<Schema, Model>>): Promise<AggregateResult<Schema, Model, T>>;
|
|
920
|
+
/**
|
|
921
|
+
* Groups rows by columns.
|
|
922
|
+
* @param args - groupBy args
|
|
923
|
+
* @returns an object containing grouped values
|
|
924
|
+
*
|
|
925
|
+
* @example
|
|
926
|
+
* ```ts
|
|
927
|
+
* // group by a field
|
|
928
|
+
* await client.profile.groupBy({
|
|
929
|
+
* by: 'country',
|
|
930
|
+
* _count: true
|
|
931
|
+
* }); // result: `Array<{ country: string, _count: number }>`
|
|
932
|
+
*
|
|
933
|
+
* // group by multiple fields
|
|
934
|
+
* await client.profile.groupBy({
|
|
935
|
+
* by: ['country', 'city'],
|
|
936
|
+
* _count: true
|
|
937
|
+
* }); // result: `Array<{ country: string, city: string, _count: number }>`
|
|
938
|
+
*
|
|
939
|
+
* // group by with sorting, the `orderBy` fields must be in the `by` list
|
|
940
|
+
* await client.profile.groupBy({
|
|
941
|
+
* by: 'country',
|
|
942
|
+
* orderBy: { country: 'desc' }
|
|
943
|
+
* });
|
|
944
|
+
*
|
|
945
|
+
* // group by with having (post-aggregation filter), the `having` fields must
|
|
946
|
+
* // be in the `by` list
|
|
947
|
+
* await client.profile.groupBy({
|
|
948
|
+
* by: 'country',
|
|
949
|
+
* having: { country: 'US' }
|
|
950
|
+
* });
|
|
951
|
+
*/
|
|
952
|
+
groupBy<T extends GroupByArgs<Schema, Model>>(args: Subset<T, GroupByArgs<Schema, Model>>): Promise<GroupByResult<Schema, Model, T>>;
|
|
953
|
+
}
|
|
954
|
+
|
|
955
|
+
type AuthType<Schema extends SchemaDef> = string extends GetModels<Schema> ? Record<string, unknown> : Schema['authType'] extends GetModels<Schema> ? Partial<ModelResult<Schema, Schema['authType']>> : never;
|
|
956
|
+
|
|
957
|
+
declare abstract class BaseCrudDialect<Schema extends SchemaDef> {
|
|
958
|
+
protected readonly schema: Schema;
|
|
959
|
+
protected readonly options: ClientOptions<Schema>;
|
|
960
|
+
constructor(schema: Schema, options: ClientOptions<Schema>);
|
|
961
|
+
abstract get provider(): DataSourceProviderType;
|
|
962
|
+
transformPrimitive(value: unknown, _type: BuiltinType): unknown;
|
|
963
|
+
abstract buildRelationSelection(query: SelectQueryBuilder<any, any, any>, model: string, relationField: string, parentAlias: string, payload: true | FindArgs<Schema, GetModels<Schema>, true>): SelectQueryBuilder<any, any, any>;
|
|
964
|
+
abstract buildSkipTake(query: SelectQueryBuilder<any, any, any>, skip: number | undefined, take: number | undefined): SelectQueryBuilder<any, any, any>;
|
|
965
|
+
buildFilter(eb: ExpressionBuilder<any, any>, model: string, modelAlias: string, where: boolean | object | undefined): Expression<SqlBool>;
|
|
966
|
+
protected buildCompositeFilter(eb: ExpressionBuilder<any, any>, model: string, modelAlias: string, key: 'AND' | 'OR' | 'NOT', payload: any): Expression<SqlBool>;
|
|
967
|
+
private buildRelationFilter;
|
|
968
|
+
private buildToOneRelationFilter;
|
|
969
|
+
private buildToManyRelationFilter;
|
|
970
|
+
private buildArrayFilter;
|
|
971
|
+
buildPrimitiveFilter(eb: ExpressionBuilder<any, any>, model: string, modelAlias: string, field: string, fieldDef: FieldDef, payload: any): Expression<SqlBool>;
|
|
972
|
+
private buildLiteralFilter;
|
|
973
|
+
private buildStandardFilter;
|
|
974
|
+
private buildStringFilter;
|
|
975
|
+
private prepStringCasing;
|
|
976
|
+
private buildNumberFilter;
|
|
977
|
+
private buildBooleanFilter;
|
|
978
|
+
private buildDateTimeFilter;
|
|
979
|
+
private buildBytesFilter;
|
|
980
|
+
private buildEnumFilter;
|
|
981
|
+
buildOrderBy(query: SelectQueryBuilder<any, any, any>, model: string, modelAlias: string, orderBy: OrArray<OrderBy<Schema, GetModels<Schema>, boolean, boolean>> | undefined, useDefaultIfEmpty: boolean, negated: boolean): SelectQueryBuilder<any, any, any>;
|
|
982
|
+
private negateSort;
|
|
983
|
+
true(eb: ExpressionBuilder<any, any>): Expression<SqlBool>;
|
|
984
|
+
false(eb: ExpressionBuilder<any, any>): Expression<SqlBool>;
|
|
985
|
+
isTrue(expression: Expression<SqlBool>): boolean;
|
|
986
|
+
isFalse(expression: Expression<SqlBool>): boolean;
|
|
987
|
+
protected and(eb: ExpressionBuilder<any, any>, ...args: Expression<SqlBool>[]): Expression<SqlBool>;
|
|
988
|
+
protected or(eb: ExpressionBuilder<any, any>, ...args: Expression<SqlBool>[]): Expression<SqlBool>;
|
|
989
|
+
protected not(eb: ExpressionBuilder<any, any>, ...args: Expression<SqlBool>[]): ExpressionWrapper<any, any, SqlBool>;
|
|
990
|
+
/**
|
|
991
|
+
* Builds an Kysely expression that returns a JSON object for the given key-value pairs.
|
|
992
|
+
*/
|
|
993
|
+
abstract buildJsonObject(eb: ExpressionBuilder<any, any>, value: Record<string, Expression<unknown>>): ExpressionWrapper<any, any, unknown>;
|
|
994
|
+
/**
|
|
995
|
+
* Builds an Kysely expression that returns the length of an array.
|
|
996
|
+
*/
|
|
997
|
+
abstract buildArrayLength(eb: ExpressionBuilder<any, any>, array: Expression<unknown>): ExpressionWrapper<any, any, number>;
|
|
998
|
+
/**
|
|
999
|
+
* Builds an array literal SQL string for the given values.
|
|
1000
|
+
*/
|
|
1001
|
+
abstract buildArrayLiteralSQL(values: unknown[]): string;
|
|
1002
|
+
/**
|
|
1003
|
+
* Whether the dialect supports updating with a limit on the number of updated rows.
|
|
1004
|
+
*/
|
|
1005
|
+
abstract get supportsUpdateWithLimit(): boolean;
|
|
1006
|
+
/**
|
|
1007
|
+
* Whether the dialect supports deleting with a limit on the number of deleted rows.
|
|
1008
|
+
*/
|
|
1009
|
+
abstract get supportsDeleteWithLimit(): boolean;
|
|
1010
|
+
/**
|
|
1011
|
+
* Whether the dialect supports DISTINCT ON.
|
|
1012
|
+
*/
|
|
1013
|
+
abstract get supportsDistinctOn(): boolean;
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
type CrudOperation = 'findMany' | 'findUnique' | 'findFirst' | 'create' | 'createMany' | 'createManyAndReturn' | 'update' | 'updateMany' | 'updateManyAndReturn' | 'upsert' | 'delete' | 'deleteMany' | 'count' | 'aggregate' | 'groupBy';
|
|
1017
|
+
|
|
1018
|
+
type QueryContext<Schema extends SchemaDef> = {
|
|
1019
|
+
/**
|
|
1020
|
+
* The ZenStack client that's invoking the plugin.
|
|
1021
|
+
*/
|
|
1022
|
+
client: ClientContract<Schema>;
|
|
1023
|
+
/**
|
|
1024
|
+
* The model that is being queried.
|
|
1025
|
+
*/
|
|
1026
|
+
model: GetModels<Schema>;
|
|
1027
|
+
/**
|
|
1028
|
+
* The query operation that is being performed.
|
|
1029
|
+
*/
|
|
1030
|
+
operation: CrudOperation;
|
|
1031
|
+
/**
|
|
1032
|
+
* The query arguments.
|
|
1033
|
+
*/
|
|
1034
|
+
queryArgs: unknown;
|
|
1035
|
+
};
|
|
1036
|
+
/**
|
|
1037
|
+
* The result of the hooks interception filter.
|
|
1038
|
+
*/
|
|
1039
|
+
type MutationInterceptionFilterResult = {
|
|
1040
|
+
/**
|
|
1041
|
+
* Whether to intercept the mutation or not.
|
|
1042
|
+
*/
|
|
1043
|
+
intercept: boolean;
|
|
1044
|
+
/**
|
|
1045
|
+
* Whether to use a transaction for the mutation.
|
|
1046
|
+
*/
|
|
1047
|
+
useTransactionForMutation?: boolean;
|
|
1048
|
+
/**
|
|
1049
|
+
* Whether entities should be loaded before the mutation.
|
|
1050
|
+
*/
|
|
1051
|
+
loadBeforeMutationEntity?: boolean;
|
|
1052
|
+
/**
|
|
1053
|
+
* Whether entities should be loaded after the mutation.
|
|
1054
|
+
*/
|
|
1055
|
+
loadAfterMutationEntity?: boolean;
|
|
1056
|
+
};
|
|
1057
|
+
type MutationHooksArgs<Schema extends SchemaDef> = {
|
|
1058
|
+
/**
|
|
1059
|
+
* The model that is being mutated.
|
|
1060
|
+
*/
|
|
1061
|
+
model: GetModels<Schema>;
|
|
1062
|
+
/**
|
|
1063
|
+
* The mutation action that is being performed.
|
|
1064
|
+
*/
|
|
1065
|
+
action: 'create' | 'update' | 'delete';
|
|
1066
|
+
/**
|
|
1067
|
+
* The mutation data. Only available for create and update actions.
|
|
1068
|
+
*/
|
|
1069
|
+
queryNode: OperationNode;
|
|
1070
|
+
};
|
|
1071
|
+
type OnQueryArgs<Schema extends SchemaDef> = QueryContext<Schema> & {
|
|
1072
|
+
proceed: ProceedQueryFunction<Schema>;
|
|
1073
|
+
};
|
|
1074
|
+
type PluginBeforeEntityMutationArgs<Schema extends SchemaDef> = MutationHooksArgs<Schema> & {
|
|
1075
|
+
entities?: Record<string, unknown>[];
|
|
1076
|
+
};
|
|
1077
|
+
type PluginAfterEntityMutationArgs<Schema extends SchemaDef> = MutationHooksArgs<Schema> & {
|
|
1078
|
+
beforeMutationEntities?: Record<string, unknown>[];
|
|
1079
|
+
afterMutationEntities?: Record<string, unknown>[];
|
|
1080
|
+
};
|
|
1081
|
+
type ProceedQueryFunction<Schema extends SchemaDef> = (queryArgs: unknown, tx?: ClientContract<Schema>) => Promise<unknown>;
|
|
1082
|
+
type OnKyselyQueryTransactionCallback = (proceed: ProceedKyselyQueryFunction) => Promise<QueryResult<any>>;
|
|
1083
|
+
type OnKyselyQueryTransaction = (callback: OnKyselyQueryTransactionCallback) => Promise<QueryResult<any>>;
|
|
1084
|
+
type OnKyselyQueryArgs<Schema extends SchemaDef> = {
|
|
1085
|
+
kysely: ToKysely<Schema>;
|
|
1086
|
+
schema: SchemaDef;
|
|
1087
|
+
client: ClientContract<Schema>;
|
|
1088
|
+
query: RootOperationNode;
|
|
1089
|
+
proceed: ProceedKyselyQueryFunction;
|
|
1090
|
+
transaction: OnKyselyQueryTransaction;
|
|
1091
|
+
};
|
|
1092
|
+
type ProceedKyselyQueryFunction = (query: RootOperationNode) => Promise<QueryResult<any>>;
|
|
1093
|
+
/**
|
|
1094
|
+
* ZenStack runtime plugin.
|
|
1095
|
+
*/
|
|
1096
|
+
interface RuntimePlugin<Schema extends SchemaDef = SchemaDef> {
|
|
1097
|
+
/**
|
|
1098
|
+
* Plugin ID.
|
|
1099
|
+
*/
|
|
1100
|
+
id: string;
|
|
1101
|
+
/**
|
|
1102
|
+
* Plugin display name.
|
|
1103
|
+
*/
|
|
1104
|
+
name?: string;
|
|
1105
|
+
/**
|
|
1106
|
+
* Plugin description.
|
|
1107
|
+
*/
|
|
1108
|
+
description?: string;
|
|
1109
|
+
/**
|
|
1110
|
+
* Intercepts an ORM query.
|
|
1111
|
+
*/
|
|
1112
|
+
onQuery?: (args: OnQueryArgs<Schema>) => Promise<unknown>;
|
|
1113
|
+
/**
|
|
1114
|
+
* Intercepts a Kysely query.
|
|
1115
|
+
*/
|
|
1116
|
+
onKyselyQuery?: (args: OnKyselyQueryArgs<Schema>) => Promise<QueryResult<UnknownRow>>;
|
|
1117
|
+
/**
|
|
1118
|
+
* This callback determines whether a mutation should be intercepted, and if so,
|
|
1119
|
+
* what data should be loaded before and after the mutation.
|
|
1120
|
+
*/
|
|
1121
|
+
mutationInterceptionFilter?: (args: MutationHooksArgs<Schema>) => MaybePromise<MutationInterceptionFilterResult>;
|
|
1122
|
+
/**
|
|
1123
|
+
* Called before an entity is mutated.
|
|
1124
|
+
* @param args.entity Only available if `loadBeforeMutationEntity` is set to true in the
|
|
1125
|
+
* return value of {@link RuntimePlugin.mutationInterceptionFilter}.
|
|
1126
|
+
*/
|
|
1127
|
+
beforeEntityMutation?: (args: PluginBeforeEntityMutationArgs<Schema>) => MaybePromise<void>;
|
|
1128
|
+
/**
|
|
1129
|
+
* Called after an entity is mutated.
|
|
1130
|
+
* @param args.beforeMutationEntity Only available if `loadBeforeMutationEntity` is set to true in the
|
|
1131
|
+
* return value of {@link RuntimePlugin.mutationInterceptionFilter}.
|
|
1132
|
+
* @param args.afterMutationEntity Only available if `loadAfterMutationEntity` is set to true in the
|
|
1133
|
+
* return value of {@link RuntimePlugin.mutationInterceptionFilter}.
|
|
1134
|
+
*/
|
|
1135
|
+
afterEntityMutation?: (args: PluginAfterEntityMutationArgs<Schema>) => MaybePromise<void>;
|
|
1136
|
+
}
|
|
1137
|
+
type CliGeneratorContext = {
|
|
1138
|
+
model: Model;
|
|
1139
|
+
outputPath: string;
|
|
1140
|
+
tsSchemaFile: string;
|
|
1141
|
+
};
|
|
1142
|
+
type CliGenerator = (context: CliGeneratorContext) => MaybePromise<void>;
|
|
1143
|
+
|
|
1144
|
+
type DialectConfig<Provider extends DataSourceProvider> = Provider['type'] extends 'sqlite' ? Optional<SqliteDialectConfig, 'database'> : Provider extends 'postgresql' ? Optional<PostgresDialectConfig, 'pool'> : never;
|
|
1145
|
+
type ZModelFunctionContext<Schema extends SchemaDef> = {
|
|
1146
|
+
dialect: BaseCrudDialect<Schema>;
|
|
1147
|
+
model: GetModels<Schema>;
|
|
1148
|
+
operation: CRUD;
|
|
1149
|
+
};
|
|
1150
|
+
type ZModelFunction<Schema extends SchemaDef> = (eb: ExpressionBuilder<ToKyselySchema<Schema>, keyof ToKyselySchema<Schema>>, args: Expression<any>[], context: ZModelFunctionContext<Schema>) => Expression<unknown>;
|
|
1151
|
+
/**
|
|
1152
|
+
* ZenStack client options.
|
|
1153
|
+
*/
|
|
1154
|
+
type ClientOptions<Schema extends SchemaDef> = {
|
|
1155
|
+
/**
|
|
1156
|
+
* Database dialect configuration.
|
|
1157
|
+
*/
|
|
1158
|
+
dialectConfig?: DialectConfig<Schema['provider']>;
|
|
1159
|
+
/**
|
|
1160
|
+
* Custom function definitions.
|
|
1161
|
+
*/
|
|
1162
|
+
functions?: Record<string, ZModelFunction<Schema>>;
|
|
1163
|
+
/**
|
|
1164
|
+
* Plugins.
|
|
1165
|
+
*/
|
|
1166
|
+
plugins?: RuntimePlugin<Schema>[];
|
|
1167
|
+
/**
|
|
1168
|
+
* Logging configuration.
|
|
1169
|
+
*/
|
|
1170
|
+
log?: KyselyConfig['log'];
|
|
1171
|
+
} & (HasComputedFields<Schema> extends true ? {
|
|
1172
|
+
/**
|
|
1173
|
+
* Computed field definitions.
|
|
1174
|
+
*/
|
|
1175
|
+
computedFields: ComputedFieldsOptions<Schema>;
|
|
1176
|
+
} : {}) & (HasProcedures<Schema> extends true ? {
|
|
1177
|
+
/**
|
|
1178
|
+
* Custom procedure definitions.
|
|
1179
|
+
*/
|
|
1180
|
+
procedures: ProceduresOptions<Schema>;
|
|
1181
|
+
} : {});
|
|
1182
|
+
type ComputedFieldsOptions<Schema extends SchemaDef> = {
|
|
1183
|
+
[Model in GetModels<Schema> as 'computedFields' extends keyof GetModel<Schema, Model> ? Model : never]: {
|
|
1184
|
+
[Field in keyof Schema['models'][Model]['computedFields']]: PrependParameter<ExpressionBuilder<ToKyselySchema<Schema>, Model>, Schema['models'][Model]['computedFields'][Field]>;
|
|
1185
|
+
};
|
|
1186
|
+
};
|
|
1187
|
+
type HasComputedFields<Schema extends SchemaDef> = string extends GetModels<Schema> ? false : keyof ComputedFieldsOptions<Schema> extends never ? false : true;
|
|
1188
|
+
type ProceduresOptions<Schema extends SchemaDef> = Schema extends {
|
|
1189
|
+
procedures: Record<string, ProcedureDef>;
|
|
1190
|
+
} ? {
|
|
1191
|
+
[Key in keyof Schema['procedures']]: PrependParameter<ClientContract<Schema>, ProcedureFunc<Schema, Schema['procedures'][Key]>>;
|
|
1192
|
+
} : {};
|
|
1193
|
+
type HasProcedures<Schema extends SchemaDef> = Schema extends {
|
|
1194
|
+
procedures: Record<string, ProcedureDef>;
|
|
1195
|
+
} ? true : false;
|
|
1196
|
+
|
|
1197
|
+
/**
|
|
1198
|
+
* ZenStack client interface.
|
|
1199
|
+
*/
|
|
1200
|
+
type ClientContract<Schema extends SchemaDef> = {
|
|
1201
|
+
readonly $schema: Schema;
|
|
1202
|
+
/**
|
|
1203
|
+
* The client options.
|
|
1204
|
+
*/
|
|
1205
|
+
readonly $options: ClientOptions<Schema>;
|
|
1206
|
+
/**
|
|
1207
|
+
* The current user identity.
|
|
1208
|
+
*/
|
|
1209
|
+
get $auth(): AuthType<Schema> | undefined;
|
|
1210
|
+
/**
|
|
1211
|
+
* Sets the current user identity.
|
|
1212
|
+
*/
|
|
1213
|
+
$setAuth(auth: AuthType<Schema> | undefined): ClientContract<Schema>;
|
|
1214
|
+
/**
|
|
1215
|
+
* The Kysely query builder instance.
|
|
1216
|
+
*/
|
|
1217
|
+
readonly $qb: ToKysely<Schema>;
|
|
1218
|
+
/**
|
|
1219
|
+
* The raw Kysely query builder without any ZenStack enhancements.
|
|
1220
|
+
*/
|
|
1221
|
+
readonly $qbRaw: ToKysely<any>;
|
|
1222
|
+
/**
|
|
1223
|
+
* Starts a transaction.
|
|
1224
|
+
*/
|
|
1225
|
+
$transaction<T>(callback: (tx: ClientContract<Schema>) => Promise<T>): Promise<T>;
|
|
1226
|
+
/**
|
|
1227
|
+
* Returns a new client with the specified plugin installed.
|
|
1228
|
+
*/
|
|
1229
|
+
$use(plugin: RuntimePlugin<Schema>): ClientContract<Schema>;
|
|
1230
|
+
/**
|
|
1231
|
+
* Returns a new client with all plugins removed.
|
|
1232
|
+
*/
|
|
1233
|
+
$unuseAll(): ClientContract<Schema>;
|
|
1234
|
+
/**
|
|
1235
|
+
* Disconnects the underlying Kysely instance from the database.
|
|
1236
|
+
*/
|
|
1237
|
+
$disconnect(): Promise<void>;
|
|
1238
|
+
/**
|
|
1239
|
+
* Pushes the schema to the database. For testing purposes only.
|
|
1240
|
+
* @private
|
|
1241
|
+
*/
|
|
1242
|
+
$pushSchema(): Promise<void>;
|
|
1243
|
+
} & {
|
|
1244
|
+
[Key in GetModels<Schema> as Uncapitalize<Key>]: ModelOperations<Schema, Key>;
|
|
1245
|
+
} & Procedures<Schema>;
|
|
1246
|
+
type MapType<Schema extends SchemaDef, T extends string> = T extends 'String' ? string : T extends 'Int' ? number : T extends 'Float' ? number : T extends 'BigInt' ? bigint : T extends 'Decimal' ? Decimal$1 : T extends 'Boolean' ? boolean : T extends 'DateTime' ? Date : T extends GetModels<Schema> ? ModelResult<Schema, T> : unknown;
|
|
1247
|
+
type Procedures<Schema extends SchemaDef> = Schema['procedures'] extends Record<string, ProcedureDef> ? {
|
|
1248
|
+
$procedures: {
|
|
1249
|
+
[Key in keyof Schema['procedures']]: ProcedureFunc<Schema, Schema['procedures'][Key]>;
|
|
1250
|
+
};
|
|
1251
|
+
} : {};
|
|
1252
|
+
type ProcedureFunc<Schema extends SchemaDef, Proc extends ProcedureDef> = (...args: MapProcedureParams<Schema, Proc['params']>) => Promise<MapType<Schema, Proc['returnType']>>;
|
|
1253
|
+
type MapProcedureParams<Schema extends SchemaDef, Params> = {
|
|
1254
|
+
[P in keyof Params]: Params[P] extends {
|
|
1255
|
+
type: infer U;
|
|
1256
|
+
} ? OrUndefinedIf<MapType<Schema, U & string>, Params[P] extends {
|
|
1257
|
+
optional: true;
|
|
1258
|
+
} ? true : false> : never;
|
|
1259
|
+
};
|
|
1260
|
+
/**
|
|
1261
|
+
* Creates a new ZenStack client instance.
|
|
1262
|
+
*/
|
|
1263
|
+
interface ClientConstructor {
|
|
1264
|
+
new <Schema extends SchemaDef>(schema: HasComputedFields<Schema> extends false ? Schema : never): ClientContract<Schema>;
|
|
1265
|
+
new <Schema extends SchemaDef>(schema: Schema, options: ClientOptions<Schema>): ClientContract<Schema>;
|
|
1266
|
+
}
|
|
1267
|
+
/**
|
|
1268
|
+
* CRUD operations.
|
|
1269
|
+
*/
|
|
1270
|
+
type CRUD = 'create' | 'read' | 'update' | 'delete';
|
|
1271
|
+
|
|
1272
|
+
export type { UpdateInput as A, BatchResult as B, ClientConstructor as C, DateTimeFilter as D, DeleteArgs as E, FindArgs as F, DeleteManyArgs as G, CountArgs as H, CountAggregateInput as I, CountResult as J, AggregateArgs as K, AggregateResult as L, ModelResult as M, NumberFilter as N, OrderBy as O, GroupByArgs as P, GroupByResult as Q, ModelOperations as R, StringFilter as S, ToKysely as T, UpdateArgs as U, RuntimePlugin as V, WhereInput as W, OnKyselyQueryArgs as X, ClientContract as a, ClientOptions as b, CliGenerator as c, CommonPrimitiveFilter as d, BytesFilter as e, BooleanFilter as f, SortOrder as g, NullsOrder as h, WhereUniqueInput as i, SelectIncludeOmit as j, Subset as k, SelectSubset as l, MapFieldType as m, OptionalFieldsForCreate as n, OppositeRelationFields as o, OppositeRelationAndFK as p, FindUniqueArgs as q, CreateArgs as r, CreateManyArgs as s, CreateManyAndReturnArgs as t, CreateInput as u, UpdateManyArgs as v, UpdateManyAndReturnArgs as w, UpsertArgs as x, UpdateScalarInput as y, UpdateRelationInput as z };
|