@contember/client-content 1.3.0-alpha.10

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 (145) hide show
  1. package/dist/development/ContentClient.cjs +27 -0
  2. package/dist/development/ContentClient.cjs.map +1 -0
  3. package/dist/development/ContentClient.js +27 -0
  4. package/dist/development/ContentClient.js.map +1 -0
  5. package/dist/development/ContentQueryBuilder.cjs +147 -0
  6. package/dist/development/ContentQueryBuilder.cjs.map +1 -0
  7. package/dist/development/ContentQueryBuilder.js +147 -0
  8. package/dist/development/ContentQueryBuilder.js.map +1 -0
  9. package/dist/development/index.cjs +11 -0
  10. package/dist/development/index.cjs.map +1 -0
  11. package/dist/development/index.js +11 -0
  12. package/dist/development/index.js.map +1 -0
  13. package/dist/development/nodes/ContentEntitySelection.cjs +161 -0
  14. package/dist/development/nodes/ContentEntitySelection.cjs.map +1 -0
  15. package/dist/development/nodes/ContentEntitySelection.js +161 -0
  16. package/dist/development/nodes/ContentEntitySelection.js.map +1 -0
  17. package/dist/development/nodes/ContentOperation.cjs +16 -0
  18. package/dist/development/nodes/ContentOperation.cjs.map +1 -0
  19. package/dist/development/nodes/ContentOperation.js +16 -0
  20. package/dist/development/nodes/ContentOperation.js.map +1 -0
  21. package/dist/development/utils/ContentOperationSet.cjs +10 -0
  22. package/dist/development/utils/ContentOperationSet.cjs.map +1 -0
  23. package/dist/development/utils/ContentOperationSet.js +10 -0
  24. package/dist/development/utils/ContentOperationSet.js.map +1 -0
  25. package/dist/development/utils/createListArgs.cjs +24 -0
  26. package/dist/development/utils/createListArgs.cjs.map +1 -0
  27. package/dist/development/utils/createListArgs.js +24 -0
  28. package/dist/development/utils/createListArgs.js.map +1 -0
  29. package/dist/development/utils/createMutationOperationSet.cjs +37 -0
  30. package/dist/development/utils/createMutationOperationSet.cjs.map +1 -0
  31. package/dist/development/utils/createMutationOperationSet.js +37 -0
  32. package/dist/development/utils/createMutationOperationSet.js.map +1 -0
  33. package/dist/development/utils/createQueryOperationSet.cjs +19 -0
  34. package/dist/development/utils/createQueryOperationSet.cjs.map +1 -0
  35. package/dist/development/utils/createQueryOperationSet.js +19 -0
  36. package/dist/development/utils/createQueryOperationSet.js.map +1 -0
  37. package/dist/development/utils/createTypedArgs.cjs +14 -0
  38. package/dist/development/utils/createTypedArgs.cjs.map +1 -0
  39. package/dist/development/utils/createTypedArgs.js +14 -0
  40. package/dist/development/utils/createTypedArgs.js.map +1 -0
  41. package/dist/development/utils/mutationFragments.cjs +55 -0
  42. package/dist/development/utils/mutationFragments.cjs.map +1 -0
  43. package/dist/development/utils/mutationFragments.js +55 -0
  44. package/dist/development/utils/mutationFragments.js.map +1 -0
  45. package/dist/production/ContentClient.cjs +27 -0
  46. package/dist/production/ContentClient.cjs.map +1 -0
  47. package/dist/production/ContentClient.js +27 -0
  48. package/dist/production/ContentClient.js.map +1 -0
  49. package/dist/production/ContentQueryBuilder.cjs +147 -0
  50. package/dist/production/ContentQueryBuilder.cjs.map +1 -0
  51. package/dist/production/ContentQueryBuilder.js +147 -0
  52. package/dist/production/ContentQueryBuilder.js.map +1 -0
  53. package/dist/production/index.cjs +11 -0
  54. package/dist/production/index.cjs.map +1 -0
  55. package/dist/production/index.js +11 -0
  56. package/dist/production/index.js.map +1 -0
  57. package/dist/production/nodes/ContentEntitySelection.cjs +161 -0
  58. package/dist/production/nodes/ContentEntitySelection.cjs.map +1 -0
  59. package/dist/production/nodes/ContentEntitySelection.js +161 -0
  60. package/dist/production/nodes/ContentEntitySelection.js.map +1 -0
  61. package/dist/production/nodes/ContentOperation.cjs +16 -0
  62. package/dist/production/nodes/ContentOperation.cjs.map +1 -0
  63. package/dist/production/nodes/ContentOperation.js +16 -0
  64. package/dist/production/nodes/ContentOperation.js.map +1 -0
  65. package/dist/production/utils/ContentOperationSet.cjs +10 -0
  66. package/dist/production/utils/ContentOperationSet.cjs.map +1 -0
  67. package/dist/production/utils/ContentOperationSet.js +10 -0
  68. package/dist/production/utils/ContentOperationSet.js.map +1 -0
  69. package/dist/production/utils/createListArgs.cjs +24 -0
  70. package/dist/production/utils/createListArgs.cjs.map +1 -0
  71. package/dist/production/utils/createListArgs.js +24 -0
  72. package/dist/production/utils/createListArgs.js.map +1 -0
  73. package/dist/production/utils/createMutationOperationSet.cjs +37 -0
  74. package/dist/production/utils/createMutationOperationSet.cjs.map +1 -0
  75. package/dist/production/utils/createMutationOperationSet.js +37 -0
  76. package/dist/production/utils/createMutationOperationSet.js.map +1 -0
  77. package/dist/production/utils/createQueryOperationSet.cjs +19 -0
  78. package/dist/production/utils/createQueryOperationSet.cjs.map +1 -0
  79. package/dist/production/utils/createQueryOperationSet.js +19 -0
  80. package/dist/production/utils/createQueryOperationSet.js.map +1 -0
  81. package/dist/production/utils/createTypedArgs.cjs +14 -0
  82. package/dist/production/utils/createTypedArgs.cjs.map +1 -0
  83. package/dist/production/utils/createTypedArgs.js +14 -0
  84. package/dist/production/utils/createTypedArgs.js.map +1 -0
  85. package/dist/production/utils/mutationFragments.cjs +55 -0
  86. package/dist/production/utils/mutationFragments.cjs.map +1 -0
  87. package/dist/production/utils/mutationFragments.js +55 -0
  88. package/dist/production/utils/mutationFragments.js.map +1 -0
  89. package/dist/types/ContentClient.d.ts +17 -0
  90. package/dist/types/ContentClient.d.ts.map +1 -0
  91. package/dist/types/ContentQueryBuilder.d.ts +25 -0
  92. package/dist/types/ContentQueryBuilder.d.ts.map +1 -0
  93. package/dist/types/TypedContentQueryBuilder.d.ts +21 -0
  94. package/dist/types/TypedContentQueryBuilder.d.ts.map +1 -0
  95. package/dist/types/index.d.ts +6 -0
  96. package/dist/types/index.d.ts.map +1 -0
  97. package/dist/types/nodes/ContentEntitySelection.d.ts +51 -0
  98. package/dist/types/nodes/ContentEntitySelection.d.ts.map +1 -0
  99. package/dist/types/nodes/ContentOperation.d.ts +30 -0
  100. package/dist/types/nodes/ContentOperation.d.ts.map +1 -0
  101. package/dist/types/nodes/TypedEntitySelection.d.ts +45 -0
  102. package/dist/types/nodes/TypedEntitySelection.d.ts.map +1 -0
  103. package/dist/types/nodes/index.d.ts +4 -0
  104. package/dist/types/nodes/index.d.ts.map +1 -0
  105. package/dist/types/tsconfig.tsbuildinfo +1 -0
  106. package/dist/types/types/Input.d.ts +203 -0
  107. package/dist/types/types/Input.d.ts.map +1 -0
  108. package/dist/types/types/Result.d.ts +39 -0
  109. package/dist/types/types/Result.d.ts.map +1 -0
  110. package/dist/types/types/Schema.d.ts +43 -0
  111. package/dist/types/types/Schema.d.ts.map +1 -0
  112. package/dist/types/types/index.d.ts +4 -0
  113. package/dist/types/types/index.d.ts.map +1 -0
  114. package/dist/types/utils/ContentOperationSet.d.ts +13 -0
  115. package/dist/types/utils/ContentOperationSet.d.ts.map +1 -0
  116. package/dist/types/utils/createListArgs.d.ts +9 -0
  117. package/dist/types/utils/createListArgs.d.ts.map +1 -0
  118. package/dist/types/utils/createMutationOperationSet.d.ts +4 -0
  119. package/dist/types/utils/createMutationOperationSet.d.ts.map +1 -0
  120. package/dist/types/utils/createQueryOperationSet.d.ts +4 -0
  121. package/dist/types/utils/createQueryOperationSet.d.ts.map +1 -0
  122. package/dist/types/utils/createTypedArgs.d.ts +3 -0
  123. package/dist/types/utils/createTypedArgs.d.ts.map +1 -0
  124. package/dist/types/utils/mutationFragments.d.ts +3 -0
  125. package/dist/types/utils/mutationFragments.d.ts.map +1 -0
  126. package/package.json +48 -0
  127. package/src/ContentClient.ts +41 -0
  128. package/src/ContentQueryBuilder.ts +204 -0
  129. package/src/TypedContentQueryBuilder.ts +76 -0
  130. package/src/index.ts +5 -0
  131. package/src/nodes/ContentEntitySelection.ts +240 -0
  132. package/src/nodes/ContentOperation.ts +23 -0
  133. package/src/nodes/TypedEntitySelection.ts +111 -0
  134. package/src/nodes/index.ts +3 -0
  135. package/src/tsconfig.json +14 -0
  136. package/src/types/Input.ts +281 -0
  137. package/src/types/Result.ts +43 -0
  138. package/src/types/Schema.ts +49 -0
  139. package/src/types/index.ts +3 -0
  140. package/src/utils/ContentOperationSet.ts +11 -0
  141. package/src/utils/createListArgs.ts +23 -0
  142. package/src/utils/createMutationOperationSet.ts +42 -0
  143. package/src/utils/createQueryOperationSet.ts +20 -0
  144. package/src/utils/createTypedArgs.ts +15 -0
  145. package/src/utils/mutationFragments.ts +52 -0
@@ -0,0 +1,240 @@
1
+ import { createListArgs } from '../utils/createListArgs'
2
+ import { ContentClientInput, SchemaEntityNames, SchemaNames } from '../types'
3
+ import { Input } from '@contember/schema'
4
+ import { GraphQlField, GraphQlFieldTypedArgs, GraphQlSelectionSet } from '@contember/graphql-builder'
5
+
6
+ /**
7
+ * @internal
8
+ */
9
+ export type ContentEntitySelectionContext<Name extends string> = {
10
+ entity: SchemaEntityNames<Name>
11
+ schema: SchemaNames
12
+ }
13
+
14
+ export type ContentEntitySelectionCallback = (select: ContentEntitySelection) => ContentEntitySelection
15
+
16
+ export type EntitySelectionCommonInput<Alias extends string | null = string | null> = { as?: Alias }
17
+ export type EntitySelectionManyArgs<Alias extends string | null = string | null> = ContentClientInput.AnyListQueryInput & EntitySelectionCommonInput<Alias>
18
+ export type EntitySelectionManyByArgs<Alias extends string | null = string | null> = { by: Input.UniqueWhere; filter?: Input.Where } & EntitySelectionCommonInput<Alias>
19
+ export type EntitySelectionOneArgs<Alias extends string | null = string | null> = { filter?: Input.Where } & EntitySelectionCommonInput<Alias>
20
+ export type EntitySelectionColumnArgs<Alias extends string | null = string | null> = EntitySelectionCommonInput<Alias>
21
+
22
+ export type EntitySelectionAnyArgs =
23
+ | EntitySelectionColumnArgs
24
+ | EntitySelectionManyArgs
25
+ | EntitySelectionManyByArgs
26
+ | EntitySelectionOneArgs
27
+
28
+ export type ContentEntitySelectionOrCallback = ContentEntitySelectionCallback | ContentEntitySelection
29
+
30
+
31
+ export class ContentEntitySelection {
32
+
33
+ /**
34
+ * @internal
35
+ */
36
+ constructor(
37
+ /** @internal */
38
+ public readonly context: ContentEntitySelectionContext<string>,
39
+ /** @internal */
40
+ public readonly selectionSet: GraphQlSelectionSet,
41
+ ) {
42
+ }
43
+
44
+
45
+ $(field: string, args?: EntitySelectionColumnArgs): ContentEntitySelection
46
+ $(field: string, args: EntitySelectionManyArgs, selection: ContentEntitySelectionOrCallback): ContentEntitySelection
47
+ $(field: string, args: EntitySelectionManyByArgs, selection: ContentEntitySelectionOrCallback): ContentEntitySelection
48
+ $(field: string, args: EntitySelectionOneArgs, selection: ContentEntitySelectionOrCallback): ContentEntitySelection
49
+ $(field: string, selection: ContentEntitySelectionOrCallback): ContentEntitySelection
50
+
51
+ $(field: string, argsOrSelection?: EntitySelectionAnyArgs | ContentEntitySelectionOrCallback, selectionIn?: ContentEntitySelectionOrCallback): ContentEntitySelection {
52
+ const [args, selection] = typeof argsOrSelection === 'function' || argsOrSelection instanceof ContentEntitySelection
53
+ ? [{}, argsOrSelection]
54
+ : [argsOrSelection ?? {}, selectionIn]
55
+ if (field === '__typename') {
56
+ return this.withField(new GraphQlField(args.as ?? null, '__typename'))
57
+ }
58
+ const fieldInfo = this.context.entity.fields[field]
59
+ if (!fieldInfo) {
60
+ if ('by' in args && field.includes('By')) {
61
+ if (!selection) {
62
+ throw new Error(`Selection is required for ${this.context.entity.name}.${field}.`)
63
+ }
64
+ return this._manyBy(field, args as EntitySelectionManyByArgs, selection)
65
+ }
66
+
67
+ throw new Error(`Field ${this.context.entity.name}.${field} does not exist.`)
68
+ }
69
+ if (fieldInfo.type === 'column') {
70
+ return this._column(field, args as EntitySelectionColumnArgs)
71
+ }
72
+ if (fieldInfo.type === 'many') {
73
+ if (!selection) {
74
+ throw new Error(`Selection is required for ${this.context.entity.name}.${field}.`)
75
+ }
76
+ return this._many(field, args as EntitySelectionManyArgs, selection)
77
+ }
78
+ if (fieldInfo.type === 'one') {
79
+ if (!selection) {
80
+ throw new Error(`Selection is required for ${this.context.entity.name}.${field}.`)
81
+ }
82
+ return this._one(field, args as EntitySelectionOneArgs, selection)
83
+ }
84
+ throw new Error(`Unknown field type ${fieldInfo.type}.`)
85
+ }
86
+
87
+ $$(): ContentEntitySelection {
88
+ const columns = this.context.entity.scalars
89
+ const nodes = [
90
+ ...this.selectionSet,
91
+ ...columns.map(col => new GraphQlField(null, col)),
92
+ ]
93
+ return new ContentEntitySelection(this.context, nodes)
94
+ }
95
+
96
+ private _column(
97
+ name: string,
98
+ args: EntitySelectionCommonInput = {},
99
+ ): ContentEntitySelection {
100
+ let fieldInfo = this.context.entity.fields[name]
101
+ if (!fieldInfo) {
102
+ throw new Error(`Field ${this.context.entity.name}.${name} does not exist.`)
103
+ }
104
+ if (fieldInfo?.type !== 'column') {
105
+ throw new Error(`Field ${this.context.entity.name}.${name} is not a column.`)
106
+ }
107
+
108
+ const alias = args.as ?? name
109
+
110
+ const field = new GraphQlField(alias, name, {})
111
+ return this.withField(field)
112
+ }
113
+
114
+
115
+ private _many(
116
+ name: string,
117
+ args: EntitySelectionManyArgs,
118
+ fields:
119
+ | ContentEntitySelectionCallback
120
+ | ContentEntitySelection,
121
+ ): ContentEntitySelection{
122
+ const alias = args.as ?? name
123
+ const fieldInfo = this.context.entity.fields[name]
124
+ if (!fieldInfo) {
125
+ throw new Error(`Field ${this.context.entity.name}.${name} does not exist.`)
126
+ }
127
+ if (fieldInfo?.type !== 'many') {
128
+ throw new Error(`Field ${this.context.entity.name}.${name} is not a has-many relation.`)
129
+ }
130
+ const entity = this.context.schema.entities[fieldInfo.entity]
131
+
132
+ const newContext = {
133
+ entity: entity,
134
+ schema: this.context.schema,
135
+ }
136
+
137
+ const entitySelection = typeof fields === 'function' ? fields(new ContentEntitySelection(newContext, [])) : fields
138
+ const newObjectField = new GraphQlField(
139
+ alias,
140
+ name,
141
+ createListArgs(entity, args),
142
+ entitySelection.selectionSet,
143
+ )
144
+ return this.withField(newObjectField)
145
+ }
146
+
147
+
148
+ private _manyBy(
149
+ name: string,
150
+ args: EntitySelectionManyByArgs,
151
+ fields:
152
+ | ContentEntitySelectionCallback
153
+ | ContentEntitySelection,
154
+ ): ContentEntitySelection {
155
+ const alias = args.as ?? name
156
+ const byField = Object.keys(args.by)[0]
157
+ const relationField = name.substring(0, name.length - byField.length - 2)
158
+
159
+ const field = this.context.entity.fields[relationField]
160
+ if (!field) {
161
+ throw new Error(`Field ${this.context.entity.name}.${relationField} does not exist.`)
162
+ }
163
+ if (field?.type !== 'many') {
164
+ throw new Error(`Field ${this.context.entity.name}.${relationField} is not a has-many relation.`)
165
+ }
166
+ const entity = this.context.schema.entities[field.entity]
167
+ const newContext = {
168
+ entity: entity,
169
+ schema: this.context.schema,
170
+ }
171
+ const fieldUpperFirst = name.charAt(0).toUpperCase() + name.slice(1)
172
+
173
+ const argsWithType: GraphQlFieldTypedArgs = {
174
+ filter: {
175
+ graphQlType: `${entity.name}Where`,
176
+ value: args.filter,
177
+ },
178
+ by: {
179
+ graphQlType: `${this.context.entity.name}${fieldUpperFirst}UniqueWhere!`,
180
+ value: args.by,
181
+ },
182
+ }
183
+
184
+ const entitySelection = typeof fields === 'function' ? fields(new ContentEntitySelection(newContext, []) as any) : fields
185
+ const newObjectField = new GraphQlField(
186
+ alias,
187
+ name,
188
+ argsWithType,
189
+ entitySelection.selectionSet,
190
+ )
191
+ return this.withField(newObjectField)
192
+ }
193
+
194
+ private _one(
195
+ name: string,
196
+ args: EntitySelectionOneArgs,
197
+ fields:
198
+ | ContentEntitySelectionCallback
199
+ | ContentEntitySelection,
200
+ ): ContentEntitySelection {
201
+ const alias = args.as ?? name
202
+ const fieldInfo = this.context.entity.fields[name]
203
+ if (!fieldInfo) {
204
+ throw new Error(`Field ${this.context.entity.name}.${name} does not exist.`)
205
+ }
206
+ if (fieldInfo?.type !== 'one') {
207
+ throw new Error(`Field ${this.context.entity.name}.${name} is not a has-one relation.`)
208
+ }
209
+ const entity = this.context.schema.entities[fieldInfo.entity]
210
+
211
+ const newContext: ContentEntitySelectionContext<(typeof entity)['name']> = {
212
+ entity: entity,
213
+ schema: this.context.schema,
214
+ }
215
+ const argsWithType: GraphQlFieldTypedArgs = {
216
+ filter: {
217
+ graphQlType: `${entity.name}Where`,
218
+ value: args.filter,
219
+ },
220
+ }
221
+ const entitySelection = typeof fields === 'function'
222
+ ? fields(new ContentEntitySelection(newContext, []) as any)
223
+ : fields
224
+ const newObjectField = new GraphQlField(
225
+ alias,
226
+ name,
227
+ argsWithType,
228
+ entitySelection.selectionSet,
229
+ )
230
+ return this.withField(newObjectField)
231
+ }
232
+
233
+
234
+ private withField(field: GraphQlField) {
235
+ return new ContentEntitySelection(this.context, [
236
+ ...this.selectionSet,
237
+ field,
238
+ ])
239
+ }
240
+ }
@@ -0,0 +1,23 @@
1
+ import { GraphQlFieldTypedArgs, GraphQlSelectionSet } from '@contember/graphql-builder'
2
+
3
+ export class ContentOperation<TValue, TType extends 'query' | 'mutation'> {
4
+ /**
5
+ * @internal
6
+ */
7
+ constructor(
8
+ /** @internal */
9
+ public readonly type: TType,
10
+ /** @internal */
11
+ public readonly fieldName: string,
12
+ /** @internal */
13
+ public readonly args: GraphQlFieldTypedArgs = {},
14
+ /** @internal */
15
+ public readonly selection?: GraphQlSelectionSet,
16
+ /** @internal */
17
+ public readonly parse: (value: any) => TValue = it => it as TValue,
18
+ ) {
19
+ }
20
+ }
21
+
22
+ export type ContentQuery<TValue> = ContentOperation<TValue, 'query'>
23
+ export type ContentMutation<TValue> = ContentOperation<TValue, 'mutation'>
@@ -0,0 +1,111 @@
1
+ import { EntityTypeLike, SchemaTypeLike } from '../types/Schema'
2
+ import { ContentClientInput } from '../types'
3
+ import { ContentEntitySelectionContext } from './ContentEntitySelection'
4
+
5
+ export type TypedEntitySelectionCallback<
6
+ TSchema extends SchemaTypeLike,
7
+ EntityName extends string,
8
+ TEntity extends EntityTypeLike,
9
+ TValue
10
+ > = (select: TypedEntitySelection<TSchema, EntityName, TEntity, {}>) => TypedEntitySelection<TSchema, EntityName, TEntity, TValue>
11
+
12
+ export interface TypedEntitySelection<TSchema extends SchemaTypeLike, TEntityName extends string, TEntity extends EntityTypeLike, TValue> {
13
+
14
+ /** @internal */
15
+ readonly context: ContentEntitySelectionContext<TEntityName>,
16
+
17
+ $$(): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
18
+ [key in keyof TEntity['columns']]: TEntity['columns'][key]
19
+ }>
20
+
21
+ $<
22
+ TKey extends (keyof TEntity['columns']) & string,
23
+ TAlias extends string | null = null
24
+ >(
25
+ name: TKey,
26
+ args?: {as?: TAlias},
27
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
28
+ [key in TAlias extends null ? TKey : TAlias]: TEntity['columns'][key]
29
+ }>
30
+
31
+ $<
32
+ TNestedValue,
33
+ TNestedKey extends keyof TEntity['hasMany'] & string,
34
+ TAlias extends string | null = null,
35
+ >(
36
+ name: TNestedKey,
37
+ args: ContentClientInput.HasManyRelationInput<TEntity['hasMany'][TNestedKey]> & { as?: TAlias },
38
+ fields:
39
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>
40
+ | TypedEntitySelection<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>,
41
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
42
+ [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue[]
43
+ }>
44
+
45
+ $<
46
+ TNestedValue,
47
+ TNestedKey extends keyof TEntity['hasMany'] & string,
48
+ TAlias extends string | null = null,
49
+ >(
50
+ name: TNestedKey,
51
+ fields:
52
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>
53
+ | TypedEntitySelection<TSchema, TEntity['hasMany'][TNestedKey]['name'], TEntity['hasMany'][TNestedKey], TNestedValue>,
54
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
55
+ [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue[]
56
+ }>
57
+
58
+ $<
59
+ TNestedValue,
60
+ TNestedKey extends keyof TEntity['hasManyBy'] & string,
61
+ TAlias extends string | null = null,
62
+ >(
63
+ name: TNestedKey,
64
+ args: ContentClientInput.HasManyByRelationInput<TEntity['hasManyBy'][TNestedKey]['entity'], TEntity['hasManyBy'][TNestedKey]['by']> & { as?: TAlias },
65
+ fields:
66
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>
67
+ | TypedEntitySelection<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>,
68
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
69
+ [key in TAlias extends null ? TNestedKey : TAlias]: null | TNestedValue
70
+ }>
71
+
72
+ $<
73
+ TNestedValue,
74
+ TNestedKey extends keyof TEntity['hasManyBy'] & string,
75
+ TAlias extends string | null = null,
76
+ >(
77
+ name: TNestedKey,
78
+ fields:
79
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>
80
+ | TypedEntitySelection<TSchema, TEntity['hasManyBy'][TNestedKey]['entity']['name'], TEntity['hasManyBy'][TNestedKey]['entity'], TNestedValue>,
81
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
82
+ [key in TAlias extends null ? TNestedKey : TAlias]: null | TNestedValue
83
+ }>
84
+
85
+ $<
86
+ TNestedValue extends { [K in string]: unknown },
87
+ TNestedKey extends keyof TEntity['hasOne'] & string,
88
+ TAlias extends string | null = null,
89
+ >(
90
+ name: TNestedKey,
91
+ args: ContentClientInput.HasOneRelationInput<TEntity['hasOne'][TNestedKey]> & { as?: TAlias },
92
+ fields:
93
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>
94
+ | TypedEntitySelection<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>,
95
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
96
+ [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue | null
97
+ }>
98
+
99
+ $<
100
+ TNestedValue extends { [K in string]: unknown },
101
+ TNestedKey extends keyof TEntity['hasOne'] & string,
102
+ TAlias extends string | null = null,
103
+ >(
104
+ name: TNestedKey,
105
+ fields:
106
+ | TypedEntitySelectionCallback<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>
107
+ | TypedEntitySelection<TSchema, TEntity['hasOne'][TNestedKey]['name'], TEntity['hasOne'][TNestedKey], TNestedValue>,
108
+ ): TypedEntitySelection<TSchema, TEntityName, TEntity, TValue & {
109
+ [key in TAlias extends null ? TNestedKey : TAlias]: TNestedValue | null
110
+ }>
111
+ }
@@ -0,0 +1,3 @@
1
+ export * from './ContentEntitySelection'
2
+ export * from './ContentOperation'
3
+ export * from './TypedEntitySelection'
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "../../../tsconfig.settings.json",
3
+ "compilerOptions": {
4
+ "outDir": "../dist/types"
5
+ },
6
+ "references": [
7
+ {
8
+ "path": "../../graphql-builder/src"
9
+ },
10
+ {
11
+ "path": "../../graphql-client/src"
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,281 @@
1
+ import { Input, JSONObject } from '@contember/schema'
2
+ import { EntityTypeLike } from './Schema'
3
+
4
+
5
+ export namespace ContentClientInput {
6
+ export type ConnectRelationInput<TEntity extends EntityTypeLike> = {
7
+ /** @internal */
8
+ readonly __typeGuard?: TEntity['name']
9
+ readonly connect: UniqueWhere<TEntity>
10
+ }
11
+
12
+ export type CreateRelationInput<TEntity extends EntityTypeLike> = {
13
+ /** @internal */
14
+ readonly __typeGuard?: TEntity['name']
15
+ readonly create: CreateDataInput<TEntity>
16
+ }
17
+
18
+ export type ConnectOrCreateInput<TEntity extends EntityTypeLike> = {
19
+ /** @internal */
20
+ readonly __typeGuard?: TEntity['name']
21
+ readonly connect: UniqueWhere<TEntity>
22
+ readonly create: CreateDataInput<TEntity>
23
+ }
24
+
25
+ export type ConnectOrCreateRelationInput<TEntity extends EntityTypeLike> = {
26
+ /** @internal */
27
+ readonly __typeGuard?: TEntity['name']
28
+ readonly connectOrCreate: ConnectOrCreateInput<TEntity>
29
+ }
30
+
31
+ export type DisconnectSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
32
+ /** @internal */
33
+ readonly __typeGuard?: TEntity['name']
34
+ readonly disconnect: UniqueWhere<TEntity>
35
+ }
36
+
37
+ export type DeleteSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
38
+ /** @internal */
39
+ readonly __typeGuard?: TEntity['name']
40
+ readonly delete: UniqueWhere<TEntity>
41
+ }
42
+
43
+ export type UpdateSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
44
+ /** @internal */
45
+ readonly __typeGuard?: TEntity['name']
46
+ readonly update: {
47
+ readonly by: UniqueWhere<TEntity>
48
+ readonly data: UpdateDataInput<TEntity>
49
+ }
50
+ }
51
+
52
+ export type UpsertSpecifiedRelationInput<TEntity extends EntityTypeLike> = {
53
+ /** @internal */
54
+ readonly __typeGuard?: TEntity['name']
55
+ readonly upsert: {
56
+ readonly by: UniqueWhere<TEntity>
57
+ readonly update: UpdateDataInput<TEntity>
58
+ readonly create: CreateDataInput<TEntity>
59
+ }
60
+ }
61
+
62
+ export type DisconnectRelationInput<TEntity extends EntityTypeLike> = {
63
+ /** @internal */
64
+ readonly __typeGuard?: TEntity['name']
65
+ readonly disconnect: true
66
+ }
67
+
68
+ export type UpdateRelationInput<TEntity extends EntityTypeLike> = {
69
+ /** @internal */
70
+ readonly __typeGuard?: TEntity['name']
71
+ readonly update: UpdateDataInput<TEntity>
72
+ }
73
+
74
+ export type DeleteRelationInput<TEntity extends EntityTypeLike> = {
75
+ /** @internal */
76
+ readonly __typeGuard?: TEntity['name']
77
+ readonly delete: true
78
+ }
79
+
80
+ export type UpsertRelationInput<TEntity extends EntityTypeLike> = {
81
+ /** @internal */
82
+ readonly __typeGuard?: TEntity['name']
83
+ readonly upsert: {
84
+ readonly update: UpdateDataInput<TEntity>
85
+ readonly create: CreateDataInput<TEntity>
86
+ }
87
+ }
88
+
89
+ export type CreateDataInput<TEntity extends EntityTypeLike> =
90
+ & {
91
+ /** @internal */
92
+ readonly __typeGuard?: TEntity['name']
93
+ }
94
+ & {
95
+ readonly [key in keyof TEntity['columns']]?: TEntity['columns'][key]
96
+ }
97
+ & {
98
+ readonly [key in keyof TEntity['hasMany']]?: CreateManyRelationInput<TEntity['hasMany'][key]>
99
+ }
100
+ & {
101
+ readonly [key in keyof TEntity['hasOne']]?: CreateOneRelationInput<TEntity['hasOne'][key]>
102
+ }
103
+
104
+ export type CreateOneRelationInput<TEntity extends EntityTypeLike> =
105
+ | ConnectRelationInput<TEntity>
106
+ | CreateRelationInput<TEntity>
107
+ | ConnectOrCreateRelationInput<TEntity>
108
+
109
+ export type CreateManyRelationInput<TEntity extends EntityTypeLike> = readonly CreateOneRelationInput<TEntity>[]
110
+
111
+
112
+ export type UpdateDataInput<TEntity extends EntityTypeLike> =
113
+ & {
114
+ /**
115
+ * @internal
116
+ */
117
+ readonly __typeGuard?: TEntity['name']
118
+ }
119
+ & {
120
+ readonly [key in keyof TEntity['columns']]?: TEntity['columns'][key]
121
+ }
122
+ & {
123
+ readonly [key in keyof TEntity['hasMany']]?: UpdateManyRelationInput<TEntity['hasMany'][key]>
124
+ }
125
+ & {
126
+ readonly [key in keyof TEntity['hasOne']]?: UpdateOneRelationInput<TEntity['hasOne'][key]>
127
+ }
128
+
129
+ export type UpdateInput<TEntity extends EntityTypeLike> = {
130
+ /** @internal */
131
+ readonly __typeGuard?: TEntity['name']
132
+ readonly by: UniqueWhere<TEntity>
133
+ readonly filter?: Where<TEntity>
134
+ readonly data: UpdateDataInput<TEntity>
135
+ }
136
+
137
+ export type UpsertInput<TEntity extends EntityTypeLike> = {
138
+ /** @internal */
139
+ readonly __typeGuard?: TEntity['name']
140
+ readonly by: UniqueWhere<TEntity>
141
+ readonly filter?: Where<TEntity>
142
+ readonly update: UpdateDataInput<TEntity>
143
+ readonly create: CreateDataInput<TEntity>
144
+ }
145
+
146
+ export type CreateInput<TEntity extends EntityTypeLike> = {
147
+ /** @internal */
148
+ readonly __typeGuard?: TEntity['name']
149
+ readonly data: CreateDataInput<TEntity>
150
+ }
151
+
152
+ export type DeleteInput<TEntity extends EntityTypeLike> = {
153
+ /** @internal */
154
+ readonly __typeGuard?: TEntity['name']
155
+ readonly by: UniqueWhere<TEntity>
156
+ readonly filter?: Where<TEntity>
157
+ }
158
+
159
+ export type UniqueQueryInput<TEntity extends EntityTypeLike> = {
160
+ /** @internal */
161
+ readonly __typeGuard?: TEntity['name']
162
+ readonly by: UniqueWhere<TEntity>
163
+ readonly filter?: Where<TEntity>
164
+ }
165
+
166
+ export type ListQueryInput<TEntity extends EntityTypeLike> = {
167
+ /** @internal */
168
+ readonly __typeGuard?: TEntity['name']
169
+ readonly filter?: Where<TEntity>
170
+ readonly orderBy?: readonly OrderBy<TEntity>[]
171
+ readonly offset?: number
172
+ readonly limit?: number
173
+ }
174
+
175
+ export type PaginationQueryInput<TEntity extends EntityTypeLike> = {
176
+ /** @internal */
177
+ readonly __typeGuard?: TEntity['name']
178
+ readonly filter?: Where<TEntity>
179
+ readonly orderBy?: readonly OrderBy<TEntity>[]
180
+ readonly skip?: number
181
+ readonly first?: number
182
+ }
183
+
184
+ export type HasOneRelationInput<TEntity extends EntityTypeLike> = {
185
+ /** @internal */
186
+ readonly __typeGuard?: TEntity['name']
187
+ readonly filter?: Where<TEntity>
188
+ }
189
+
190
+ export type HasManyByRelationInput<TEntity extends EntityTypeLike, TUnique extends JSONObject> = {
191
+ /** @internal */
192
+ readonly __typeGuard?: TEntity['name']
193
+ readonly by: TUnique
194
+ readonly filter?: Where<TEntity>
195
+ }
196
+
197
+ export type HasManyRelationInput<TEntity extends EntityTypeLike> = ListQueryInput<TEntity>
198
+ export type HasManyRelationPaginateInput<TEntity extends EntityTypeLike> = PaginationQueryInput<TEntity>
199
+
200
+
201
+ export type UpdateOneRelationInput<TEntity extends EntityTypeLike> =
202
+ | CreateRelationInput<TEntity>
203
+ | ConnectRelationInput<TEntity>
204
+ | ConnectOrCreateRelationInput<TEntity>
205
+ | DeleteRelationInput<TEntity>
206
+ | DisconnectRelationInput<TEntity>
207
+ | UpdateRelationInput<TEntity>
208
+ | UpsertRelationInput<TEntity>
209
+
210
+ export type UpdateManyRelationInputItem<TEntity extends EntityTypeLike> =
211
+ | CreateRelationInput<TEntity>
212
+ | ConnectRelationInput<TEntity>
213
+ | ConnectOrCreateRelationInput<TEntity>
214
+ | DeleteSpecifiedRelationInput<TEntity>
215
+ | DisconnectSpecifiedRelationInput<TEntity>
216
+ | UpdateSpecifiedRelationInput<TEntity>
217
+ | UpsertSpecifiedRelationInput<TEntity>
218
+
219
+
220
+ export type UpdateManyRelationInput<TEntity extends EntityTypeLike> = Array<UpdateManyRelationInputItem<TEntity>>
221
+
222
+
223
+ export type FieldOrderBy<TEntity extends EntityTypeLike> =
224
+ & {
225
+ /** @internal */
226
+ readonly __typeGuard?: TEntity['name']
227
+ }
228
+ & {
229
+ readonly [key in keyof TEntity['columns']]?: `${Input.OrderDirection}` | null
230
+ }
231
+ & {
232
+ readonly [key in keyof TEntity['hasMany']]?: FieldOrderBy<TEntity['hasMany'][key]> | null
233
+ }
234
+ & {
235
+ readonly [key in keyof TEntity['hasOne']]?: FieldOrderBy<TEntity['hasOne'][key]> | null
236
+ }
237
+
238
+ export type OrderBy<TEntity extends EntityTypeLike> =
239
+ & {
240
+ /** @internal */
241
+ readonly __typeGuard?: TEntity['name']
242
+ readonly _random?: boolean
243
+ readonly _randomSeeded?: number
244
+ }
245
+ & FieldOrderBy<TEntity>
246
+
247
+
248
+ export type UniqueWhere<TEntity extends EntityTypeLike> =
249
+ & {
250
+ /**
251
+ * @internal
252
+ */
253
+ readonly __typeGuard?: TEntity['name']
254
+ }
255
+ & TEntity['unique']
256
+
257
+
258
+ export type Where<TEntity extends EntityTypeLike> =
259
+ & {
260
+ /** @internal */
261
+ readonly __typeGuard?: TEntity['name']
262
+ readonly and?: (readonly (Where<TEntity>)[]) | null
263
+ readonly or?: (readonly (Where<TEntity>)[]) | null
264
+ readonly not?: Where<TEntity> | null
265
+ }
266
+ & {
267
+ readonly [key in keyof TEntity['columns']]?: Input.Condition<TEntity['columns'][key]> | null
268
+ }
269
+ & {
270
+ readonly [key in keyof TEntity['hasMany']]?: Where<TEntity['hasMany'][key]> | null
271
+ }
272
+ & {
273
+ readonly [key in keyof TEntity['hasOne']]?: Where<TEntity['hasOne'][key]> | null
274
+ }
275
+
276
+
277
+ export type AnyOrderBy = Input.OrderBy<`${Input.OrderDirection}`>[]
278
+ export type AnyListQueryInput =
279
+ & Omit<Input.ListQueryInput, 'orderBy'>
280
+ & { readonly orderBy?: AnyOrderBy }
281
+ }