@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.
- package/dist/development/ContentClient.cjs +27 -0
- package/dist/development/ContentClient.cjs.map +1 -0
- package/dist/development/ContentClient.js +27 -0
- package/dist/development/ContentClient.js.map +1 -0
- package/dist/development/ContentQueryBuilder.cjs +147 -0
- package/dist/development/ContentQueryBuilder.cjs.map +1 -0
- package/dist/development/ContentQueryBuilder.js +147 -0
- package/dist/development/ContentQueryBuilder.js.map +1 -0
- package/dist/development/index.cjs +11 -0
- package/dist/development/index.cjs.map +1 -0
- package/dist/development/index.js +11 -0
- package/dist/development/index.js.map +1 -0
- package/dist/development/nodes/ContentEntitySelection.cjs +161 -0
- package/dist/development/nodes/ContentEntitySelection.cjs.map +1 -0
- package/dist/development/nodes/ContentEntitySelection.js +161 -0
- package/dist/development/nodes/ContentEntitySelection.js.map +1 -0
- package/dist/development/nodes/ContentOperation.cjs +16 -0
- package/dist/development/nodes/ContentOperation.cjs.map +1 -0
- package/dist/development/nodes/ContentOperation.js +16 -0
- package/dist/development/nodes/ContentOperation.js.map +1 -0
- package/dist/development/utils/ContentOperationSet.cjs +10 -0
- package/dist/development/utils/ContentOperationSet.cjs.map +1 -0
- package/dist/development/utils/ContentOperationSet.js +10 -0
- package/dist/development/utils/ContentOperationSet.js.map +1 -0
- package/dist/development/utils/createListArgs.cjs +24 -0
- package/dist/development/utils/createListArgs.cjs.map +1 -0
- package/dist/development/utils/createListArgs.js +24 -0
- package/dist/development/utils/createListArgs.js.map +1 -0
- package/dist/development/utils/createMutationOperationSet.cjs +37 -0
- package/dist/development/utils/createMutationOperationSet.cjs.map +1 -0
- package/dist/development/utils/createMutationOperationSet.js +37 -0
- package/dist/development/utils/createMutationOperationSet.js.map +1 -0
- package/dist/development/utils/createQueryOperationSet.cjs +19 -0
- package/dist/development/utils/createQueryOperationSet.cjs.map +1 -0
- package/dist/development/utils/createQueryOperationSet.js +19 -0
- package/dist/development/utils/createQueryOperationSet.js.map +1 -0
- package/dist/development/utils/createTypedArgs.cjs +14 -0
- package/dist/development/utils/createTypedArgs.cjs.map +1 -0
- package/dist/development/utils/createTypedArgs.js +14 -0
- package/dist/development/utils/createTypedArgs.js.map +1 -0
- package/dist/development/utils/mutationFragments.cjs +55 -0
- package/dist/development/utils/mutationFragments.cjs.map +1 -0
- package/dist/development/utils/mutationFragments.js +55 -0
- package/dist/development/utils/mutationFragments.js.map +1 -0
- package/dist/production/ContentClient.cjs +27 -0
- package/dist/production/ContentClient.cjs.map +1 -0
- package/dist/production/ContentClient.js +27 -0
- package/dist/production/ContentClient.js.map +1 -0
- package/dist/production/ContentQueryBuilder.cjs +147 -0
- package/dist/production/ContentQueryBuilder.cjs.map +1 -0
- package/dist/production/ContentQueryBuilder.js +147 -0
- package/dist/production/ContentQueryBuilder.js.map +1 -0
- package/dist/production/index.cjs +11 -0
- package/dist/production/index.cjs.map +1 -0
- package/dist/production/index.js +11 -0
- package/dist/production/index.js.map +1 -0
- package/dist/production/nodes/ContentEntitySelection.cjs +161 -0
- package/dist/production/nodes/ContentEntitySelection.cjs.map +1 -0
- package/dist/production/nodes/ContentEntitySelection.js +161 -0
- package/dist/production/nodes/ContentEntitySelection.js.map +1 -0
- package/dist/production/nodes/ContentOperation.cjs +16 -0
- package/dist/production/nodes/ContentOperation.cjs.map +1 -0
- package/dist/production/nodes/ContentOperation.js +16 -0
- package/dist/production/nodes/ContentOperation.js.map +1 -0
- package/dist/production/utils/ContentOperationSet.cjs +10 -0
- package/dist/production/utils/ContentOperationSet.cjs.map +1 -0
- package/dist/production/utils/ContentOperationSet.js +10 -0
- package/dist/production/utils/ContentOperationSet.js.map +1 -0
- package/dist/production/utils/createListArgs.cjs +24 -0
- package/dist/production/utils/createListArgs.cjs.map +1 -0
- package/dist/production/utils/createListArgs.js +24 -0
- package/dist/production/utils/createListArgs.js.map +1 -0
- package/dist/production/utils/createMutationOperationSet.cjs +37 -0
- package/dist/production/utils/createMutationOperationSet.cjs.map +1 -0
- package/dist/production/utils/createMutationOperationSet.js +37 -0
- package/dist/production/utils/createMutationOperationSet.js.map +1 -0
- package/dist/production/utils/createQueryOperationSet.cjs +19 -0
- package/dist/production/utils/createQueryOperationSet.cjs.map +1 -0
- package/dist/production/utils/createQueryOperationSet.js +19 -0
- package/dist/production/utils/createQueryOperationSet.js.map +1 -0
- package/dist/production/utils/createTypedArgs.cjs +14 -0
- package/dist/production/utils/createTypedArgs.cjs.map +1 -0
- package/dist/production/utils/createTypedArgs.js +14 -0
- package/dist/production/utils/createTypedArgs.js.map +1 -0
- package/dist/production/utils/mutationFragments.cjs +55 -0
- package/dist/production/utils/mutationFragments.cjs.map +1 -0
- package/dist/production/utils/mutationFragments.js +55 -0
- package/dist/production/utils/mutationFragments.js.map +1 -0
- package/dist/types/ContentClient.d.ts +17 -0
- package/dist/types/ContentClient.d.ts.map +1 -0
- package/dist/types/ContentQueryBuilder.d.ts +25 -0
- package/dist/types/ContentQueryBuilder.d.ts.map +1 -0
- package/dist/types/TypedContentQueryBuilder.d.ts +21 -0
- package/dist/types/TypedContentQueryBuilder.d.ts.map +1 -0
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/nodes/ContentEntitySelection.d.ts +51 -0
- package/dist/types/nodes/ContentEntitySelection.d.ts.map +1 -0
- package/dist/types/nodes/ContentOperation.d.ts +30 -0
- package/dist/types/nodes/ContentOperation.d.ts.map +1 -0
- package/dist/types/nodes/TypedEntitySelection.d.ts +45 -0
- package/dist/types/nodes/TypedEntitySelection.d.ts.map +1 -0
- package/dist/types/nodes/index.d.ts +4 -0
- package/dist/types/nodes/index.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/dist/types/types/Input.d.ts +203 -0
- package/dist/types/types/Input.d.ts.map +1 -0
- package/dist/types/types/Result.d.ts +39 -0
- package/dist/types/types/Result.d.ts.map +1 -0
- package/dist/types/types/Schema.d.ts +43 -0
- package/dist/types/types/Schema.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +4 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/ContentOperationSet.d.ts +13 -0
- package/dist/types/utils/ContentOperationSet.d.ts.map +1 -0
- package/dist/types/utils/createListArgs.d.ts +9 -0
- package/dist/types/utils/createListArgs.d.ts.map +1 -0
- package/dist/types/utils/createMutationOperationSet.d.ts +4 -0
- package/dist/types/utils/createMutationOperationSet.d.ts.map +1 -0
- package/dist/types/utils/createQueryOperationSet.d.ts +4 -0
- package/dist/types/utils/createQueryOperationSet.d.ts.map +1 -0
- package/dist/types/utils/createTypedArgs.d.ts +3 -0
- package/dist/types/utils/createTypedArgs.d.ts.map +1 -0
- package/dist/types/utils/mutationFragments.d.ts +3 -0
- package/dist/types/utils/mutationFragments.d.ts.map +1 -0
- package/package.json +48 -0
- package/src/ContentClient.ts +41 -0
- package/src/ContentQueryBuilder.ts +204 -0
- package/src/TypedContentQueryBuilder.ts +76 -0
- package/src/index.ts +5 -0
- package/src/nodes/ContentEntitySelection.ts +240 -0
- package/src/nodes/ContentOperation.ts +23 -0
- package/src/nodes/TypedEntitySelection.ts +111 -0
- package/src/nodes/index.ts +3 -0
- package/src/tsconfig.json +14 -0
- package/src/types/Input.ts +281 -0
- package/src/types/Result.ts +43 -0
- package/src/types/Schema.ts +49 -0
- package/src/types/index.ts +3 -0
- package/src/utils/ContentOperationSet.ts +11 -0
- package/src/utils/createListArgs.ts +23 -0
- package/src/utils/createMutationOperationSet.ts +42 -0
- package/src/utils/createQueryOperationSet.ts +20 -0
- package/src/utils/createTypedArgs.ts +15 -0
- 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,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
|
+
}
|