@contember/client-content 1.3.0-alpha.9 → 2.0.0-alpha.2

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.
Files changed (54) hide show
  1. package/dist/development/ContentQueryBuilder.cjs +64 -36
  2. package/dist/development/ContentQueryBuilder.cjs.map +1 -1
  3. package/dist/development/ContentQueryBuilder.js +64 -36
  4. package/dist/development/ContentQueryBuilder.js.map +1 -1
  5. package/dist/development/index.cjs +2 -0
  6. package/dist/development/index.cjs.map +1 -1
  7. package/dist/development/index.js +3 -1
  8. package/dist/development/index.js.map +1 -1
  9. package/dist/development/nodes/ContentEntitySelection.cjs +36 -5
  10. package/dist/development/nodes/ContentEntitySelection.cjs.map +1 -1
  11. package/dist/development/nodes/ContentEntitySelection.js +36 -5
  12. package/dist/development/nodes/ContentEntitySelection.js.map +1 -1
  13. package/dist/development/utils/createTypedArgs.cjs +3 -0
  14. package/dist/development/utils/createTypedArgs.cjs.map +1 -1
  15. package/dist/development/utils/createTypedArgs.js +3 -0
  16. package/dist/development/utils/createTypedArgs.js.map +1 -1
  17. package/dist/production/ContentQueryBuilder.cjs +64 -36
  18. package/dist/production/ContentQueryBuilder.cjs.map +1 -1
  19. package/dist/production/ContentQueryBuilder.js +64 -36
  20. package/dist/production/ContentQueryBuilder.js.map +1 -1
  21. package/dist/production/index.cjs +2 -0
  22. package/dist/production/index.cjs.map +1 -1
  23. package/dist/production/index.js +3 -1
  24. package/dist/production/index.js.map +1 -1
  25. package/dist/production/nodes/ContentEntitySelection.cjs +36 -5
  26. package/dist/production/nodes/ContentEntitySelection.cjs.map +1 -1
  27. package/dist/production/nodes/ContentEntitySelection.js +36 -5
  28. package/dist/production/nodes/ContentEntitySelection.js.map +1 -1
  29. package/dist/production/utils/createTypedArgs.cjs +3 -0
  30. package/dist/production/utils/createTypedArgs.cjs.map +1 -1
  31. package/dist/production/utils/createTypedArgs.js +3 -0
  32. package/dist/production/utils/createTypedArgs.js.map +1 -1
  33. package/dist/types/ContentQueryBuilder.d.ts +3 -1
  34. package/dist/types/ContentQueryBuilder.d.ts.map +1 -1
  35. package/dist/types/index.d.ts +1 -0
  36. package/dist/types/index.d.ts.map +1 -1
  37. package/dist/types/nodes/ContentEntitySelection.d.ts +10 -1
  38. package/dist/types/nodes/ContentEntitySelection.d.ts.map +1 -1
  39. package/dist/types/nodes/TypedEntitySelection.d.ts +44 -34
  40. package/dist/types/nodes/TypedEntitySelection.d.ts.map +1 -1
  41. package/dist/types/tsconfig.tsbuildinfo +1 -1
  42. package/dist/types/types/Input.d.ts +66 -6
  43. package/dist/types/types/Input.d.ts.map +1 -1
  44. package/dist/types/types/Schema.d.ts +3 -3
  45. package/dist/types/types/Schema.d.ts.map +1 -1
  46. package/dist/types/utils/createTypedArgs.d.ts.map +1 -1
  47. package/package.json +7 -4
  48. package/src/ContentQueryBuilder.ts +74 -51
  49. package/src/index.ts +1 -0
  50. package/src/nodes/ContentEntitySelection.ts +43 -4
  51. package/src/nodes/TypedEntitySelection.ts +87 -86
  52. package/src/types/Input.ts +72 -7
  53. package/src/types/Schema.ts +3 -3
  54. package/src/utils/createTypedArgs.ts +3 -0
@@ -28,6 +28,10 @@ export type EntitySelectionAnyArgs =
28
28
  export type ContentEntitySelectionOrCallback = ContentEntitySelectionCallback | ContentEntitySelection
29
29
 
30
30
 
31
+ export type ContentTransformContext = {
32
+ rootValue: unknown
33
+ }
34
+
31
35
  export class ContentEntitySelection {
32
36
 
33
37
  /**
@@ -38,6 +42,8 @@ export class ContentEntitySelection {
38
42
  public readonly context: ContentEntitySelectionContext<string>,
39
43
  /** @internal */
40
44
  public readonly selectionSet: GraphQlSelectionSet,
45
+ /** @internal */
46
+ public readonly transformFn?: (value: any, ctx: ContentTransformContext) => any,
41
47
  ) {
42
48
  }
43
49
 
@@ -93,6 +99,13 @@ export class ContentEntitySelection {
93
99
  return new ContentEntitySelection(this.context, nodes)
94
100
  }
95
101
 
102
+
103
+ transform(transform: (value: any, context: ContentTransformContext) => any): ContentEntitySelection {
104
+ return new ContentEntitySelection(this.context, this.selectionSet, !this.transformFn ? transform : (value, ctx) => {
105
+ return transform(this.transformFn!(value, ctx), ctx)
106
+ })
107
+ }
108
+
96
109
  private _column(
97
110
  name: string,
98
111
  args: EntitySelectionCommonInput = {},
@@ -141,7 +154,12 @@ export class ContentEntitySelection {
141
154
  createListArgs(entity, args),
142
155
  entitySelection.selectionSet,
143
156
  )
144
- return this.withField(newObjectField)
157
+ const selectionWithField = this.withField(newObjectField)
158
+ const nestedTransform = entitySelection.transformFn
159
+ if (!nestedTransform) {
160
+ return selectionWithField
161
+ }
162
+ return this.withFieldTransform(alias, it => it.map(nestedTransform))
145
163
  }
146
164
 
147
165
 
@@ -188,7 +206,12 @@ export class ContentEntitySelection {
188
206
  argsWithType,
189
207
  entitySelection.selectionSet,
190
208
  )
191
- return this.withField(newObjectField)
209
+ const selectionWithField = this.withField(newObjectField)
210
+ const nestedTransform = entitySelection.transformFn
211
+ if (!nestedTransform) {
212
+ return selectionWithField
213
+ }
214
+ return this.withFieldTransform(alias, (it, ctx) => it !== null ? nestedTransform(it, ctx) : null)
192
215
  }
193
216
 
194
217
  private _one(
@@ -227,7 +250,12 @@ export class ContentEntitySelection {
227
250
  argsWithType,
228
251
  entitySelection.selectionSet,
229
252
  )
230
- return this.withField(newObjectField)
253
+ const selectionWithField = this.withField(newObjectField)
254
+ const nestedTransform = entitySelection.transformFn
255
+ if (!nestedTransform) {
256
+ return selectionWithField
257
+ }
258
+ return this.withFieldTransform(alias, (it, ctx) => it !== null ? nestedTransform(it, ctx) : null)
231
259
  }
232
260
 
233
261
 
@@ -235,6 +263,17 @@ export class ContentEntitySelection {
235
263
  return new ContentEntitySelection(this.context, [
236
264
  ...this.selectionSet,
237
265
  field,
238
- ])
266
+ ], this.transformFn)
267
+ }
268
+
269
+ private withFieldTransform(alias: string, transform: (value: any, ctx: ContentTransformContext) => any) {
270
+ return new ContentEntitySelection(this.context, this.selectionSet, (value, ctx) => {
271
+ const transformedValue = transform(value[alias], ctx)
272
+ const newValue = {
273
+ ...value,
274
+ [alias]: transformedValue,
275
+ }
276
+ return this.transformFn ? this.transformFn(newValue, ctx) : newValue
277
+ })
239
278
  }
240
279
  }
@@ -1,107 +1,108 @@
1
- import { EntityTypeLike, SchemaTypeLike } from '../types/Schema'
1
+ import { EntityTypeLike, SchemaTypeLike } from '../types'
2
2
  import { ContentClientInput } from '../types'
3
+ import { ContentEntitySelectionContext } from './ContentEntitySelection'
3
4
 
4
- export type TypedEntitySelectionCallback<
5
- TSchema extends SchemaTypeLike,
6
- EntityName extends string,
7
- TEntity extends EntityTypeLike,
8
- TValue
9
- > = (select: TypedEntitySelection<TSchema, EntityName, TEntity, {}>) => TypedEntitySelection<TSchema, EntityName, TEntity, TValue>
10
5
 
11
6
  export interface TypedEntitySelection<TSchema extends SchemaTypeLike, TEntityName extends string, TEntity extends EntityTypeLike, TValue> {
12
7
 
8
+ /** @internal */
9
+ readonly context: ContentEntitySelectionContext<TEntityName>,
10
+
13
11
  $$(): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
14
12
  [key in keyof TEntity['columns']]: TEntity['columns'][key]
15
13
  }>
16
14
 
15
+
16
+ transform<T>(cb: (value: TValue) => T): TypedEntitySelection<TSchema, TEntityName, TEntity, T>
17
+
17
18
  $<
18
- TKey extends (keyof TEntity['columns']) & string,
19
+ TNestedValue,
20
+ TKey extends (keyof TEntity['columns'] | keyof TEntity['hasMany'] | keyof TEntity['hasManyBy'] | keyof TEntity['hasOne']) & string,
19
21
  TAlias extends string | null = null
20
22
  >(
21
23
  name: TKey,
22
- args?: {as?: TAlias},
24
+ ...args: TypedEntitySelectionParams<TSchema, TEntity, TKey, TNestedValue, TAlias>
23
25
  ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
24
- [key in TAlias extends null ? TKey : TAlias]: TEntity['columns'][key]
26
+ [key in TAlias extends null ? TKey : TAlias]: TypedEntitySelectionResult<TEntity, TKey, TNestedValue>
25
27
  }>
28
+ }
26
29
 
27
- $<
28
- TNestedValue,
29
- TNestedKey extends keyof TEntity['hasMany'] & string,
30
- TAlias extends string | null = null,
31
- >(
32
- name: TNestedKey,
33
- args: ContentClientInput.HasManyRelationInput<TEntity['hasMany'][TNestedKey]> & { as?: TAlias },
34
- fields:
35
- | TypedEntitySelectionCallback<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>
36
- | TypedEntitySelection<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>,
37
- ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
38
- [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue[]
39
- }>
30
+ export type TypedEntitySelectionCallback<
31
+ TSchema extends SchemaTypeLike,
32
+ EntityName extends string,
33
+ TEntity extends EntityTypeLike,
34
+ TValue,
35
+ > = (select: TypedEntitySelection<TSchema, EntityName, TEntity, {}>) => TypedEntitySelection<TSchema, EntityName, TEntity, TValue>
40
36
 
41
- $<
42
- TNestedValue,
43
- TNestedKey extends keyof TEntity['hasMany'] & string,
44
- TAlias extends string | null = null,
45
- >(
46
- name: TNestedKey,
47
- fields:
48
- | TypedEntitySelectionCallback<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>
49
- | TypedEntitySelection<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>,
50
- ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
51
- [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue[]
52
- }>
53
37
 
54
- $<
55
- TNestedValue,
56
- TNestedKey extends keyof TEntity['hasManyBy'] & string,
57
- TAlias extends string | null = null,
58
- >(
59
- name: TNestedKey,
60
- args: ContentClientInput.HasManyByRelationInput<TEntity['hasManyBy'][TNestedKey]['entity'], TEntity['hasManyBy'][TNestedKey]['by']> & { as?: TAlias },
61
- fields:
62
- | TypedEntitySelectionCallback<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>
63
- | TypedEntitySelection<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>,
64
- ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
65
- [key in TAlias extends null ? TNestedKey : TAlias]: null | TNestedValue
66
- }>
38
+ export type TypedHasManyArgs<TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasMany'] & string, TAlias extends string | null = null> =
39
+ & ContentClientInput.HasManyRelationInput<TEntity['hasMany'][TKey]>
40
+ & { as?: TAlias }
67
41
 
68
- $<
69
- TNestedValue,
70
- TNestedKey extends keyof TEntity['hasManyBy'] & string,
71
- TAlias extends string | null = null,
72
- >(
73
- name: TNestedKey,
74
- fields:
75
- | TypedEntitySelectionCallback<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>
76
- | TypedEntitySelection<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>,
77
- ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
78
- [key in TAlias extends null ? TNestedKey : TAlias]: null | TNestedValue
79
- }>
42
+ export type TypedHasManyFields<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasMany'] & string, TNestedValue> =
43
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasMany'][TKey]['name'], TEntity['hasMany'][TKey], TNestedValue>
44
+ | TypedEntitySelection<TSchema, TEntity['hasMany'][TKey]['name'], TEntity['hasMany'][TKey], TNestedValue>
80
45
 
81
- $<
82
- TNestedValue extends { [K in string]: unknown },
83
- TNestedKey extends keyof TEntity['hasOne'] & string,
84
- TAlias extends string | null = null,
85
- >(
86
- name: TNestedKey,
87
- args: ContentClientInput.HasOneRelationInput<TEntity['hasOne'][TNestedKey]> & { as?: TAlias },
88
- fields:
89
- | TypedEntitySelectionCallback<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>
90
- | TypedEntitySelection<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>,
91
- ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
92
- [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue | null
93
- }>
46
+ export type TypedHasManyParams<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasMany'] & string, TNestedValue, TAlias extends string | null = null> =
47
+ | [
48
+ args: TypedHasManyArgs<TEntity, TKey, TAlias>,
49
+ fields: TypedHasManyFields<TSchema, TEntity, TKey, TNestedValue>,
50
+ ]
51
+ | [
52
+ fields: TypedHasManyFields<TSchema, TEntity, TKey, TNestedValue>,
53
+ ]
94
54
 
95
- $<
96
- TNestedValue extends { [K in string]: unknown },
97
- TNestedKey extends keyof TEntity['hasOne'] & string,
98
- TAlias extends string | null = null,
99
- >(
100
- name: TNestedKey,
101
- fields:
102
- | TypedEntitySelectionCallback<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>
103
- | TypedEntitySelection<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>,
104
- ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
105
- [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue | null
106
- }>
107
- }
55
+
56
+ export type TypedHasManyByArgs<TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasManyBy'] & string, TAlias extends string | null = null> =
57
+ & ContentClientInput.HasManyByRelationInput<TEntity['hasManyBy'][TKey]['entity'], TEntity['hasManyBy'][TKey]['by']>
58
+ & { as?: TAlias }
59
+
60
+ export type TypedHasManyByFields<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasManyBy'] & string, TNestedValue> =
61
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasManyBy'][TKey]['entity']['name'], TEntity['hasManyBy'][TKey]['entity'], TNestedValue>
62
+ | TypedEntitySelection<TSchema, TEntity['hasManyBy'][TKey]['entity']['name'], TEntity['hasManyBy'][TKey]['entity'], TNestedValue>
63
+
64
+ export type TypedHasManyByParams<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasManyBy'] & string, TNestedValue, TAlias extends string | null = null> =
65
+ | [
66
+ args: TypedHasManyByArgs<TEntity, TKey, TAlias>,
67
+ fields: TypedHasManyByFields<TSchema, TEntity, TKey, TNestedValue>
68
+ ]
69
+
70
+
71
+ export type TypedHasOneArgs<TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasOne'] & string, TAlias extends string | null = null> =
72
+ & ContentClientInput.HasOneRelationInput<TEntity['hasOne'][TKey]>
73
+ & { as?: TAlias }
74
+
75
+ export type TypedHasOneFields<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasOne'] & string, TNestedValue> =
76
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasOne'][TKey]['name'], TEntity['hasOne'][TKey], TNestedValue>
77
+ | TypedEntitySelection<TSchema, TEntity['hasOne'][TKey]['name'], TEntity['hasOne'][TKey], TNestedValue>
78
+
79
+ export type TypedHasOneParams<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends keyof TEntity['hasOne'] & string, TNestedValue, TAlias extends string | null = null> =
80
+ | [
81
+ args: TypedHasOneArgs<TEntity, TKey, TAlias>,
82
+ fields: TypedHasOneFields<TSchema, TEntity, TKey, TNestedValue>
83
+ ]
84
+ | [
85
+ fields: TypedHasOneFields<TSchema, TEntity, TKey, TNestedValue>
86
+ ]
87
+
88
+
89
+ export type TypedColumnArgs<TAlias extends string | null = null> = { as?: TAlias }
90
+ export type TypedColumnParams<TAlias extends string | null = null> =
91
+ | [
92
+ args: TypedColumnArgs<TAlias>
93
+ ]
94
+ | []
95
+
96
+ export type TypedEntitySelectionParams<TSchema extends SchemaTypeLike, TEntity extends EntityTypeLike, TKey extends string, TNestedValue, TAlias extends string | null = null> =
97
+ TKey extends keyof TEntity['columns'] ? TypedColumnParams<TAlias>
98
+ : TKey extends keyof TEntity['hasMany'] ? TypedHasManyParams<TSchema, TEntity, TKey, TNestedValue, TAlias>
99
+ : TKey extends keyof TEntity['hasManyBy'] ? TypedHasManyByParams<TSchema, TEntity, TKey, TNestedValue, TAlias>
100
+ : TKey extends keyof TEntity['hasOne'] ? TypedHasOneParams<TSchema, TEntity, TKey, TNestedValue, TAlias>
101
+ : never
102
+
103
+ export type TypedEntitySelectionResult<TEntity extends EntityTypeLike, TKey extends string, TValue> =
104
+ TKey extends keyof TEntity['columns'] ? TEntity['columns'][TKey]
105
+ : TKey extends keyof TEntity['hasMany'] ? TValue[]
106
+ : TKey extends keyof TEntity['hasManyBy'] ? null | TValue
107
+ : TKey extends keyof TEntity['hasOne'] ? null | TValue
108
+ : never
@@ -4,31 +4,45 @@ import { EntityTypeLike } from './Schema'
4
4
 
5
5
  export namespace ContentClientInput {
6
6
  export type ConnectRelationInput<TEntity extends EntityTypeLike> = {
7
+ /** @internal */
8
+ readonly __typeGuard?: TEntity['name']
7
9
  readonly connect: UniqueWhere<TEntity>
8
10
  }
9
11
 
10
12
  export type CreateRelationInput<TEntity extends EntityTypeLike> = {
13
+ /** @internal */
14
+ readonly __typeGuard?: TEntity['name']
11
15
  readonly create: CreateDataInput<TEntity>
12
16
  }
13
17
 
14
18
  export type ConnectOrCreateInput<TEntity extends EntityTypeLike> = {
19
+ /** @internal */
20
+ readonly __typeGuard?: TEntity['name']
15
21
  readonly connect: UniqueWhere<TEntity>
16
22
  readonly create: CreateDataInput<TEntity>
17
23
  }
18
24
 
19
25
  export type ConnectOrCreateRelationInput<TEntity extends EntityTypeLike> = {
26
+ /** @internal */
27
+ readonly __typeGuard?: TEntity['name']
20
28
  readonly connectOrCreate: ConnectOrCreateInput<TEntity>
21
29
  }
22
30
 
23
31
  export type DisconnectSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
32
+ /** @internal */
33
+ readonly __typeGuard?: TEntity['name']
24
34
  readonly disconnect: UniqueWhere<TEntity>
25
35
  }
26
36
 
27
37
  export type DeleteSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
38
+ /** @internal */
39
+ readonly __typeGuard?: TEntity['name']
28
40
  readonly delete: UniqueWhere<TEntity>
29
41
  }
30
42
 
31
43
  export type UpdateSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
44
+ /** @internal */
45
+ readonly __typeGuard?: TEntity['name']
32
46
  readonly update: {
33
47
  readonly by: UniqueWhere<TEntity>
34
48
  readonly data: UpdateDataInput<TEntity>
@@ -36,6 +50,8 @@ export namespace ContentClientInput {
36
50
  }
37
51
 
38
52
  export type UpsertSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
53
+ /** @internal */
54
+ readonly __typeGuard?: TEntity['name']
39
55
  readonly upsert: {
40
56
  readonly by: UniqueWhere<TEntity>
41
57
  readonly update: UpdateDataInput<TEntity>
@@ -43,19 +59,27 @@ export namespace ContentClientInput {
43
59
  }
44
60
  }
45
61
 
46
- export type DisconnectRelationInput = {
62
+ export type DisconnectRelationInput<TEntity extends EntityTypeLike> = {
63
+ /** @internal */
64
+ readonly __typeGuard?: TEntity['name']
47
65
  readonly disconnect: true
48
66
  }
49
67
 
50
68
  export type UpdateRelationInput<TEntity extends EntityTypeLike> = {
69
+ /** @internal */
70
+ readonly __typeGuard?: TEntity['name']
51
71
  readonly update: UpdateDataInput<TEntity>
52
72
  }
53
73
 
54
- export type DeleteRelationInput = {
74
+ export type DeleteRelationInput<TEntity extends EntityTypeLike> = {
75
+ /** @internal */
76
+ readonly __typeGuard?: TEntity['name']
55
77
  readonly delete: true
56
78
  }
57
79
 
58
80
  export type UpsertRelationInput<TEntity extends EntityTypeLike> = {
81
+ /** @internal */
82
+ readonly __typeGuard?: TEntity['name']
59
83
  readonly upsert: {
60
84
  readonly update: UpdateDataInput<TEntity>
61
85
  readonly create: CreateDataInput<TEntity>
@@ -63,6 +87,10 @@ export namespace ContentClientInput {
63
87
  }
64
88
 
65
89
  export type CreateDataInput<TEntity extends EntityTypeLike> =
90
+ & {
91
+ /** @internal */
92
+ readonly __typeGuard?: TEntity['name']
93
+ }
66
94
  & {
67
95
  readonly [key in keyof TEntity['columns']]?: TEntity['columns'][key]
68
96
  }
@@ -80,7 +108,14 @@ export namespace ContentClientInput {
80
108
 
81
109
  export type CreateManyRelationInput<TEntity extends EntityTypeLike> = readonly CreateOneRelationInput<TEntity>[]
82
110
 
111
+
83
112
  export type UpdateDataInput<TEntity extends EntityTypeLike> =
113
+ & {
114
+ /**
115
+ * @internal
116
+ */
117
+ readonly __typeGuard?: TEntity['name']
118
+ }
84
119
  & {
85
120
  readonly [key in keyof TEntity['columns']]?: TEntity['columns'][key]
86
121
  }
@@ -92,12 +127,16 @@ export namespace ContentClientInput {
92
127
  }
93
128
 
94
129
  export type UpdateInput<TEntity extends EntityTypeLike> = {
130
+ /** @internal */
131
+ readonly __typeGuard?: TEntity['name']
95
132
  readonly by: UniqueWhere<TEntity>
96
133
  readonly filter?: Where<TEntity>
97
134
  readonly data: UpdateDataInput<TEntity>
98
135
  }
99
136
 
100
137
  export type UpsertInput<TEntity extends EntityTypeLike> = {
138
+ /** @internal */
139
+ readonly __typeGuard?: TEntity['name']
101
140
  readonly by: UniqueWhere<TEntity>
102
141
  readonly filter?: Where<TEntity>
103
142
  readonly update: UpdateDataInput<TEntity>
@@ -105,20 +144,28 @@ export namespace ContentClientInput {
105
144
  }
106
145
 
107
146
  export type CreateInput<TEntity extends EntityTypeLike> = {
147
+ /** @internal */
148
+ readonly __typeGuard?: TEntity['name']
108
149
  readonly data: CreateDataInput<TEntity>
109
150
  }
110
151
 
111
152
  export type DeleteInput<TEntity extends EntityTypeLike> = {
153
+ /** @internal */
154
+ readonly __typeGuard?: TEntity['name']
112
155
  readonly by: UniqueWhere<TEntity>
113
156
  readonly filter?: Where<TEntity>
114
157
  }
115
158
 
116
159
  export type UniqueQueryInput<TEntity extends EntityTypeLike> = {
160
+ /** @internal */
161
+ readonly __typeGuard?: TEntity['name']
117
162
  readonly by: UniqueWhere<TEntity>
118
163
  readonly filter?: Where<TEntity>
119
164
  }
120
165
 
121
166
  export type ListQueryInput<TEntity extends EntityTypeLike> = {
167
+ /** @internal */
168
+ readonly __typeGuard?: TEntity['name']
122
169
  readonly filter?: Where<TEntity>
123
170
  readonly orderBy?: readonly OrderBy<TEntity>[]
124
171
  readonly offset?: number
@@ -126,6 +173,8 @@ export namespace ContentClientInput {
126
173
  }
127
174
 
128
175
  export type PaginationQueryInput<TEntity extends EntityTypeLike> = {
176
+ /** @internal */
177
+ readonly __typeGuard?: TEntity['name']
129
178
  readonly filter?: Where<TEntity>
130
179
  readonly orderBy?: readonly OrderBy<TEntity>[]
131
180
  readonly skip?: number
@@ -133,10 +182,14 @@ export namespace ContentClientInput {
133
182
  }
134
183
 
135
184
  export type HasOneRelationInput<TEntity extends EntityTypeLike> = {
185
+ /** @internal */
186
+ readonly __typeGuard?: TEntity['name']
136
187
  readonly filter?: Where<TEntity>
137
188
  }
138
189
 
139
190
  export type HasManyByRelationInput<TEntity extends EntityTypeLike, TUnique extends JSONObject> = {
191
+ /** @internal */
192
+ readonly __typeGuard?: TEntity['name']
140
193
  readonly by: TUnique
141
194
  readonly filter?: Where<TEntity>
142
195
  }
@@ -149,8 +202,8 @@ export namespace ContentClientInput {
149
202
  | CreateRelationInput<TEntity>
150
203
  | ConnectRelationInput<TEntity>
151
204
  | ConnectOrCreateRelationInput<TEntity>
152
- | DeleteRelationInput
153
- | DisconnectRelationInput
205
+ | DeleteRelationInput<TEntity>
206
+ | DisconnectRelationInput<TEntity>
154
207
  | UpdateRelationInput<TEntity>
155
208
  | UpsertRelationInput<TEntity>
156
209
 
@@ -169,10 +222,11 @@ export namespace ContentClientInput {
169
222
 
170
223
  export type FieldOrderBy<TEntity extends EntityTypeLike> =
171
224
  & {
172
- readonly [key in keyof TEntity['columns']]?: `${Input.OrderDirection}` | null
225
+ /** @internal */
226
+ readonly __typeGuard?: TEntity['name']
173
227
  }
174
228
  & {
175
- readonly [key in keyof TEntity['hasMany']]?: FieldOrderBy<TEntity['hasMany'][key]> | null
229
+ readonly [key in keyof TEntity['columns']]?: `${Input.OrderDirection}` | null
176
230
  }
177
231
  & {
178
232
  readonly [key in keyof TEntity['hasOne']]?: FieldOrderBy<TEntity['hasOne'][key]> | null
@@ -180,17 +234,28 @@ export namespace ContentClientInput {
180
234
 
181
235
  export type OrderBy<TEntity extends EntityTypeLike> =
182
236
  & {
237
+ /** @internal */
238
+ readonly __typeGuard?: TEntity['name']
183
239
  readonly _random?: boolean
184
240
  readonly _randomSeeded?: number
185
241
  }
186
242
  & FieldOrderBy<TEntity>
187
243
 
188
244
 
189
- export type UniqueWhere<TEntity extends EntityTypeLike> = TEntity['unique']
245
+ export type UniqueWhere<TEntity extends EntityTypeLike> =
246
+ & {
247
+ /**
248
+ * @internal
249
+ */
250
+ readonly __typeGuard?: TEntity['name']
251
+ }
252
+ & TEntity['unique']
190
253
 
191
254
 
192
255
  export type Where<TEntity extends EntityTypeLike> =
193
256
  & {
257
+ /** @internal */
258
+ readonly __typeGuard?: TEntity['name']
194
259
  readonly and?: (readonly (Where<TEntity>)[]) | null
195
260
  readonly or?: (readonly (Where<TEntity>)[]) | null
196
261
  readonly not?: Where<TEntity> | null
@@ -28,14 +28,14 @@ export type EntityTypeLike = {
28
28
  [columnName: string]: any
29
29
  }
30
30
  hasOne: {
31
- [relationName: string]: EntityTypeLike
31
+ [relationName: string]: any
32
32
  }
33
33
  hasMany: {
34
- [relationName: string]: EntityTypeLike
34
+ [relationName: string]: any
35
35
  }
36
36
  hasManyBy: {
37
37
  [relationName: string]: {
38
- entity: EntityTypeLike
38
+ entity: any
39
39
  by: JSONObject
40
40
  }
41
41
  }
@@ -6,6 +6,9 @@ export const createTypedArgs = <TArgs extends Record<string, any>>(
6
6
  ): GraphQlFieldTypedArgs => {
7
7
  const typedArgs: GraphQlFieldTypedArgs = {}
8
8
  for (const key in args) {
9
+ if (!types.hasOwnProperty(key)) {
10
+ throw new Error(`Unknown argument ${key}`)
11
+ }
9
12
  typedArgs[key] = {
10
13
  graphQlType: types[key],
11
14
  value: args[key],