@query-graph/core 1.1.4 → 1.1.5
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/README.md +95 -969
- package/definition.d.ts +11 -0
- package/definition.js +1 -2
- package/docs/authoring.md +161 -0
- package/docs/composition.md +100 -0
- package/docs/diagnostics.md +52 -0
- package/docs/sql.md +68 -0
- package/docs/type-system.md +86 -0
- package/dsl.d.ts +182 -1839
- package/dsl.js +57 -763
- package/index.d.ts +8 -100
- package/index.js +13 -568
- package/lib/authoring/definition.js +425 -0
- package/lib/authoring/primitives.js +433 -0
- package/lib/authoring/symbols.js +4 -0
- package/{composition.js → lib/composition.js} +9 -35
- package/lib/configuration.js +66 -0
- package/native.d.ts +98 -0
- package/native.js +714 -0
- package/package.json +16 -11
- package/types/authoring.d.ts +667 -0
- package/types/composition.d.ts +327 -0
- package/types/model.d.ts +425 -0
- package/types/result.d.ts +394 -0
- package/types/runtime.d.ts +168 -0
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AllNullability,
|
|
3
|
+
AnyNullability,
|
|
4
|
+
GraphDefinitionInput,
|
|
5
|
+
JsonValue,
|
|
6
|
+
NullabilityExpression,
|
|
7
|
+
ProjectionFieldDefinition,
|
|
8
|
+
ProjectionObjectDefinition,
|
|
9
|
+
ProjectionObjectTypeMetadata,
|
|
10
|
+
ProjectionTypeMetadata,
|
|
11
|
+
RelationDefinition,
|
|
12
|
+
SourceFieldNullability,
|
|
13
|
+
} from './model.js'
|
|
14
|
+
import type {
|
|
15
|
+
DefinitionOf,
|
|
16
|
+
DefinitionProjectionField,
|
|
17
|
+
DefinitionProjectionObject,
|
|
18
|
+
DefinitionProjectionPath,
|
|
19
|
+
DefinitionRelation,
|
|
20
|
+
DefinitionRoot,
|
|
21
|
+
QueryGraph,
|
|
22
|
+
RelationalQueryGraph,
|
|
23
|
+
} from './runtime.js'
|
|
24
|
+
import type { BatchQuery, BatchRelation, ComposedQueryGraph } from './composition.js'
|
|
25
|
+
|
|
26
|
+
type BooleanOr<Value extends boolean> = true extends Value ? true : false
|
|
27
|
+
|
|
28
|
+
type BatchQueryGraph<Query extends BatchQuery> =
|
|
29
|
+
Query extends BatchQuery<infer Child, infer _KeyPath, infer _KeyParameter> ? Child : never
|
|
30
|
+
|
|
31
|
+
type ChildPathsForRelation<Relation extends BatchRelation> = Relation extends BatchRelation
|
|
32
|
+
? `${Relation['name']}.${DefinitionProjectionPath<DefinitionOf<BatchQueryGraph<Relation['query']>>>}`
|
|
33
|
+
: never
|
|
34
|
+
|
|
35
|
+
type ChildPaths<Relations extends readonly BatchRelation[]> = ChildPathsForRelation<Relations[number]>
|
|
36
|
+
|
|
37
|
+
export interface ScalarOutputTypeMap {
|
|
38
|
+
boolean: unknown
|
|
39
|
+
int32: unknown
|
|
40
|
+
int64: unknown
|
|
41
|
+
float64: unknown
|
|
42
|
+
decimal: unknown
|
|
43
|
+
string: unknown
|
|
44
|
+
date: unknown
|
|
45
|
+
dateTime: unknown
|
|
46
|
+
binary: unknown
|
|
47
|
+
json: unknown
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface DefaultScalarOutputTypeMap extends ScalarOutputTypeMap {
|
|
51
|
+
boolean: boolean
|
|
52
|
+
int32: number
|
|
53
|
+
int64: number | string
|
|
54
|
+
float64: number
|
|
55
|
+
decimal: number | string
|
|
56
|
+
string: string
|
|
57
|
+
date: string
|
|
58
|
+
dateTime: string
|
|
59
|
+
binary: string
|
|
60
|
+
json: JsonValue
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
type IncomingRelation<Definition extends GraphDefinitionInput, Source extends string> =
|
|
64
|
+
DefinitionRelation<Definition> extends infer Candidate
|
|
65
|
+
? Candidate extends RelationDefinition<infer _Name, infer _From, infer To, infer _Required, infer _Cardinality>
|
|
66
|
+
? Source extends To
|
|
67
|
+
? Candidate
|
|
68
|
+
: never
|
|
69
|
+
: never
|
|
70
|
+
: never
|
|
71
|
+
|
|
72
|
+
type RelationPathNullability<
|
|
73
|
+
Definition extends GraphDefinitionInput,
|
|
74
|
+
Relation,
|
|
75
|
+
Visited extends string,
|
|
76
|
+
Depth extends readonly unknown[],
|
|
77
|
+
> =
|
|
78
|
+
Relation extends RelationDefinition<infer _Name, infer From, infer _To, infer Required, infer _Cardinality>
|
|
79
|
+
? BooleanOr<
|
|
80
|
+
| (Required extends true ? false : true)
|
|
81
|
+
| SourceOuterNullable<Definition, From, Visited, readonly [...Depth, unknown]>
|
|
82
|
+
>
|
|
83
|
+
: boolean
|
|
84
|
+
|
|
85
|
+
type SourceOuterNullable<
|
|
86
|
+
Definition extends GraphDefinitionInput,
|
|
87
|
+
Source extends string,
|
|
88
|
+
Visited extends string = never,
|
|
89
|
+
Depth extends readonly unknown[] = readonly [],
|
|
90
|
+
> = Depth['length'] extends 12
|
|
91
|
+
? boolean
|
|
92
|
+
: string extends Source
|
|
93
|
+
? boolean
|
|
94
|
+
: string extends DefinitionRoot<Definition>
|
|
95
|
+
? boolean
|
|
96
|
+
: Source extends DefinitionRoot<Definition>
|
|
97
|
+
? false
|
|
98
|
+
: Source extends Visited
|
|
99
|
+
? boolean
|
|
100
|
+
: [IncomingRelation<Definition, Source>] extends [never]
|
|
101
|
+
? boolean
|
|
102
|
+
: BooleanOr<
|
|
103
|
+
RelationPathNullability<Definition, IncomingRelation<Definition, Source>, Visited | Source, Depth>
|
|
104
|
+
>
|
|
105
|
+
|
|
106
|
+
type CombineAllNullability<Left extends boolean, Right extends boolean> = [Left] extends [false]
|
|
107
|
+
? false
|
|
108
|
+
: [Right] extends [false]
|
|
109
|
+
? false
|
|
110
|
+
: [Left] extends [true]
|
|
111
|
+
? Right
|
|
112
|
+
: [Right] extends [true]
|
|
113
|
+
? Left
|
|
114
|
+
: boolean
|
|
115
|
+
|
|
116
|
+
type EvaluateAnyNullability<
|
|
117
|
+
Definition extends GraphDefinitionInput,
|
|
118
|
+
Values,
|
|
119
|
+
Depth extends readonly unknown[],
|
|
120
|
+
> = Values extends readonly []
|
|
121
|
+
? false
|
|
122
|
+
: Values extends readonly [
|
|
123
|
+
infer First extends NullabilityExpression,
|
|
124
|
+
...infer Rest extends readonly NullabilityExpression[],
|
|
125
|
+
]
|
|
126
|
+
? BooleanOr<
|
|
127
|
+
| EvaluateNullability<Definition, First, readonly [...Depth, unknown]>
|
|
128
|
+
| EvaluateAnyNullability<Definition, Rest, readonly [...Depth, unknown]>
|
|
129
|
+
>
|
|
130
|
+
: Values extends readonly (infer Value extends NullabilityExpression)[]
|
|
131
|
+
? BooleanOr<EvaluateNullability<Definition, Value, readonly [...Depth, unknown]>>
|
|
132
|
+
: boolean
|
|
133
|
+
|
|
134
|
+
type EvaluateAllNullability<
|
|
135
|
+
Definition extends GraphDefinitionInput,
|
|
136
|
+
Values,
|
|
137
|
+
Depth extends readonly unknown[],
|
|
138
|
+
> = Values extends readonly []
|
|
139
|
+
? true
|
|
140
|
+
: Values extends readonly [
|
|
141
|
+
infer First extends NullabilityExpression,
|
|
142
|
+
...infer Rest extends readonly NullabilityExpression[],
|
|
143
|
+
]
|
|
144
|
+
? CombineAllNullability<
|
|
145
|
+
EvaluateNullability<Definition, First, readonly [...Depth, unknown]>,
|
|
146
|
+
EvaluateAllNullability<Definition, Rest, readonly [...Depth, unknown]>
|
|
147
|
+
>
|
|
148
|
+
: boolean
|
|
149
|
+
|
|
150
|
+
type EvaluateNullability<
|
|
151
|
+
Definition extends GraphDefinitionInput,
|
|
152
|
+
Formula extends NullabilityExpression,
|
|
153
|
+
Depth extends readonly unknown[] = readonly [],
|
|
154
|
+
> = Depth['length'] extends 16
|
|
155
|
+
? boolean
|
|
156
|
+
: NullabilityExpression extends Formula
|
|
157
|
+
? boolean
|
|
158
|
+
: Formula extends boolean
|
|
159
|
+
? Formula
|
|
160
|
+
: Formula extends SourceFieldNullability<infer Source, infer FieldNullable>
|
|
161
|
+
? BooleanOr<FieldNullable | SourceOuterNullable<Definition, Source, never, Depth>>
|
|
162
|
+
: Formula extends AnyNullability<infer Values>
|
|
163
|
+
? EvaluateAnyNullability<Definition, Values, Depth>
|
|
164
|
+
: Formula extends AllNullability<infer Values>
|
|
165
|
+
? EvaluateAllNullability<Definition, Values, Depth>
|
|
166
|
+
: boolean
|
|
167
|
+
|
|
168
|
+
type ProjectionFieldPath<Field> =
|
|
169
|
+
Field extends ProjectionTypeMetadata<infer Path, infer _Type, infer _Nullability, infer _SelectedByDefault>
|
|
170
|
+
? Path
|
|
171
|
+
: Field extends ProjectionFieldDefinition<infer Path>
|
|
172
|
+
? Path
|
|
173
|
+
: never
|
|
174
|
+
|
|
175
|
+
type ProjectionObjectPath<Object> =
|
|
176
|
+
Object extends ProjectionObjectTypeMetadata<infer Path, infer _Nullability>
|
|
177
|
+
? Path
|
|
178
|
+
: Object extends ProjectionObjectDefinition<infer Path>
|
|
179
|
+
? Path
|
|
180
|
+
: never
|
|
181
|
+
|
|
182
|
+
type ProjectionObjectNullability<Object> =
|
|
183
|
+
Object extends ProjectionObjectTypeMetadata<infer _Path, infer Nullability>
|
|
184
|
+
? Nullability
|
|
185
|
+
: Object extends ProjectionObjectDefinition<infer _Path, infer Nullability>
|
|
186
|
+
? Nullability
|
|
187
|
+
: boolean
|
|
188
|
+
|
|
189
|
+
type ProjectionObjectIsNullable<Definition extends GraphDefinitionInput, Object> =
|
|
190
|
+
true extends EvaluateNullability<Definition, ProjectionObjectNullability<Object>> ? true : false
|
|
191
|
+
|
|
192
|
+
type ProjectionFieldValue<Definition extends GraphDefinitionInput, Field, TypeMap extends ScalarOutputTypeMap> =
|
|
193
|
+
Field extends ProjectionTypeMetadata<infer _Path, infer Type, infer Nullability, infer _SelectedByDefault>
|
|
194
|
+
? true extends EvaluateNullability<Definition, Nullability>
|
|
195
|
+
? TypeMap[Type] | null
|
|
196
|
+
: TypeMap[Type]
|
|
197
|
+
: Field extends ProjectionFieldDefinition<infer _Path, infer Type, infer Nullability, infer _SelectedByDefault>
|
|
198
|
+
? true extends EvaluateNullability<Definition, Nullability>
|
|
199
|
+
? TypeMap[Type] | null
|
|
200
|
+
: TypeMap[Type]
|
|
201
|
+
: never
|
|
202
|
+
|
|
203
|
+
type ProjectionFieldByPath<Field, Path extends string> = Field extends ProjectionFieldDefinition
|
|
204
|
+
? ProjectionFieldPath<Field> extends Path
|
|
205
|
+
? Field
|
|
206
|
+
: never
|
|
207
|
+
: never
|
|
208
|
+
|
|
209
|
+
type ProjectionDefaultAtPath<Field, Path extends string> =
|
|
210
|
+
Field extends ProjectionTypeMetadata<infer FieldPath, infer _Type, infer _Nullability, infer SelectedByDefault>
|
|
211
|
+
? FieldPath extends Path
|
|
212
|
+
? SelectedByDefault
|
|
213
|
+
: never
|
|
214
|
+
: Field extends ProjectionFieldDefinition
|
|
215
|
+
? ProjectionFieldPath<Field> extends Path
|
|
216
|
+
? Field extends { selectedByDefault: true }
|
|
217
|
+
? true
|
|
218
|
+
: false
|
|
219
|
+
: never
|
|
220
|
+
: never
|
|
221
|
+
|
|
222
|
+
type DefaultProjectionPath<Field, Path extends string = ProjectionFieldPath<Field>> = Path extends unknown
|
|
223
|
+
? [ProjectionDefaultAtPath<Field, Path>] extends [never]
|
|
224
|
+
? never
|
|
225
|
+
: ProjectionDefaultAtPath<Field, Path> extends true
|
|
226
|
+
? Path
|
|
227
|
+
: never
|
|
228
|
+
: never
|
|
229
|
+
|
|
230
|
+
type DefaultProjectionField<Field> = ProjectionFieldByPath<Field, DefaultProjectionPath<Field>>
|
|
231
|
+
|
|
232
|
+
type SelectedProjectionField<Definition extends GraphDefinitionInput, Operation> = [Operation] extends [undefined]
|
|
233
|
+
? DefaultProjectionField<DefinitionProjectionField<Definition>>
|
|
234
|
+
: Operation extends { select: readonly (infer Path extends string)[] }
|
|
235
|
+
? ProjectionFieldByPath<DefinitionProjectionField<Definition>, Path>
|
|
236
|
+
: DefaultProjectionField<DefinitionProjectionField<Definition>>
|
|
237
|
+
|
|
238
|
+
type ProjectionObjectForField<Object, Field> = Object extends ProjectionObjectDefinition
|
|
239
|
+
? Field extends ProjectionFieldDefinition
|
|
240
|
+
? ProjectionFieldPath<Field> extends `${ProjectionObjectPath<Object>}.${string}`
|
|
241
|
+
? Object
|
|
242
|
+
: never
|
|
243
|
+
: never
|
|
244
|
+
: never
|
|
245
|
+
|
|
246
|
+
type SelectedProjectionObject<Definition extends GraphDefinitionInput, Field> = ProjectionObjectForField<
|
|
247
|
+
DefinitionProjectionObject<Definition>,
|
|
248
|
+
Field
|
|
249
|
+
>
|
|
250
|
+
|
|
251
|
+
type ProjectionEntry<
|
|
252
|
+
Definition extends GraphDefinitionInput,
|
|
253
|
+
Field,
|
|
254
|
+
TypeMap extends ScalarOutputTypeMap,
|
|
255
|
+
> = Field extends ProjectionFieldDefinition
|
|
256
|
+
? {
|
|
257
|
+
path: ProjectionFieldPath<Field>
|
|
258
|
+
value: ProjectionFieldValue<Definition, Field, TypeMap>
|
|
259
|
+
}
|
|
260
|
+
: never
|
|
261
|
+
|
|
262
|
+
type ProjectionObjectEntry<Definition extends GraphDefinitionInput, Object> = Object extends ProjectionObjectDefinition
|
|
263
|
+
? {
|
|
264
|
+
path: ProjectionObjectPath<Object>
|
|
265
|
+
nullable: ProjectionObjectIsNullable<Definition, Object>
|
|
266
|
+
}
|
|
267
|
+
: never
|
|
268
|
+
|
|
269
|
+
type ProjectionEntryHead<Entry> = Entry extends { path: infer Path extends string }
|
|
270
|
+
? Path extends `${infer Head}.${string}`
|
|
271
|
+
? Head
|
|
272
|
+
: Path
|
|
273
|
+
: never
|
|
274
|
+
|
|
275
|
+
type DirectProjectionEntryValue<Entry, Key extends string> = Entry extends {
|
|
276
|
+
path: infer Path extends string
|
|
277
|
+
value: infer Value
|
|
278
|
+
}
|
|
279
|
+
? Path extends Key
|
|
280
|
+
? Value
|
|
281
|
+
: never
|
|
282
|
+
: never
|
|
283
|
+
|
|
284
|
+
type NestedProjectionEntry<Entry, Key extends string> = Entry extends {
|
|
285
|
+
path: infer Path extends string
|
|
286
|
+
value: infer Value
|
|
287
|
+
}
|
|
288
|
+
? Path extends `${Key}.${infer Rest}`
|
|
289
|
+
? { path: Rest; value: Value }
|
|
290
|
+
: never
|
|
291
|
+
: never
|
|
292
|
+
|
|
293
|
+
type DirectProjectionObjectNullable<ObjectEntry, Key extends string> = ObjectEntry extends {
|
|
294
|
+
path: infer Path extends string
|
|
295
|
+
nullable: infer Nullable extends boolean
|
|
296
|
+
}
|
|
297
|
+
? Path extends Key
|
|
298
|
+
? Nullable
|
|
299
|
+
: never
|
|
300
|
+
: never
|
|
301
|
+
|
|
302
|
+
type NestedProjectionObjectEntry<ObjectEntry, Key extends string> = ObjectEntry extends {
|
|
303
|
+
path: infer Path extends string
|
|
304
|
+
nullable: infer Nullable extends boolean
|
|
305
|
+
}
|
|
306
|
+
? Path extends `${Key}.${infer Rest}`
|
|
307
|
+
? { path: Rest; nullable: Nullable }
|
|
308
|
+
: never
|
|
309
|
+
: never
|
|
310
|
+
|
|
311
|
+
type ApplyProjectionObjectNullability<Value, ObjectEntry, Key extends string> =
|
|
312
|
+
true extends DirectProjectionObjectNullable<ObjectEntry, Key> ? Value | null : Value
|
|
313
|
+
|
|
314
|
+
type ProjectionValueAtKeyWithoutObject<Entry, ObjectEntry, Key extends string> = [
|
|
315
|
+
NestedProjectionEntry<Entry, Key>,
|
|
316
|
+
] extends [never]
|
|
317
|
+
? DirectProjectionEntryValue<Entry, Key>
|
|
318
|
+
: [DirectProjectionEntryValue<Entry, Key>] extends [never]
|
|
319
|
+
? BuildProjectionResult<NestedProjectionEntry<Entry, Key>, NestedProjectionObjectEntry<ObjectEntry, Key>>
|
|
320
|
+
:
|
|
321
|
+
| DirectProjectionEntryValue<Entry, Key>
|
|
322
|
+
| BuildProjectionResult<NestedProjectionEntry<Entry, Key>, NestedProjectionObjectEntry<ObjectEntry, Key>>
|
|
323
|
+
|
|
324
|
+
type ProjectionValueAtKey<Entry, ObjectEntry, Key extends string> = ApplyProjectionObjectNullability<
|
|
325
|
+
ProjectionValueAtKeyWithoutObject<Entry, ObjectEntry, Key>,
|
|
326
|
+
ObjectEntry,
|
|
327
|
+
Key
|
|
328
|
+
>
|
|
329
|
+
|
|
330
|
+
type BuildProjectionResult<Entry, ObjectEntry = never> = [Entry] extends [never]
|
|
331
|
+
? Record<never, never>
|
|
332
|
+
: {
|
|
333
|
+
[Key in ProjectionEntryHead<Entry>]: ProjectionValueAtKey<Entry, ObjectEntry, Key>
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export type ResultOf<
|
|
337
|
+
Subject extends GraphDefinitionInput | QueryGraph | RelationalQueryGraph | ComposedQueryGraph,
|
|
338
|
+
Operation = undefined,
|
|
339
|
+
TypeMap extends ScalarOutputTypeMap = DefaultScalarOutputTypeMap,
|
|
340
|
+
> =
|
|
341
|
+
Subject extends ComposedQueryGraph<infer Root, infer Relations>
|
|
342
|
+
? ComposedResult<Root, Relations, Operation, TypeMap>
|
|
343
|
+
: DefinitionOf<
|
|
344
|
+
Extract<Subject, GraphDefinitionInput | QueryGraph | RelationalQueryGraph>
|
|
345
|
+
> extends infer Definition extends GraphDefinitionInput
|
|
346
|
+
? SelectedProjectionField<Definition, Operation> extends infer Field
|
|
347
|
+
? BuildProjectionResult<
|
|
348
|
+
ProjectionEntry<Definition, Field, TypeMap>,
|
|
349
|
+
ProjectionObjectEntry<Definition, SelectedProjectionObject<Definition, Field>>
|
|
350
|
+
>
|
|
351
|
+
: never
|
|
352
|
+
: never
|
|
353
|
+
|
|
354
|
+
type SelectedPaths<Operation> = Operation extends { select: readonly (infer Path extends string)[] } ? Path : never
|
|
355
|
+
|
|
356
|
+
type RootOperation<Operation, Relations extends readonly BatchRelation[]> = Operation extends {
|
|
357
|
+
select: readonly string[]
|
|
358
|
+
}
|
|
359
|
+
? { select: readonly Exclude<SelectedPaths<Operation>, ChildPaths<Relations>>[] }
|
|
360
|
+
: undefined
|
|
361
|
+
|
|
362
|
+
type SelectedChildPath<Operation, Name extends string> =
|
|
363
|
+
Extract<SelectedPaths<Operation>, `${Name}.${string}`> extends `${Name}.${infer Path}` ? Path : never
|
|
364
|
+
|
|
365
|
+
type ChildOperation<Operation, Name extends string> = {
|
|
366
|
+
select: readonly SelectedChildPath<Operation, Name>[]
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
type SelectedRelationCandidate<Relation extends BatchRelation, Operation> = Relation extends BatchRelation
|
|
370
|
+
? Extract<SelectedPaths<Operation>, `${Relation['name']}.${string}`> extends never
|
|
371
|
+
? never
|
|
372
|
+
: Relation
|
|
373
|
+
: never
|
|
374
|
+
|
|
375
|
+
type SelectedRelation<Relations extends readonly BatchRelation[], Operation> = SelectedRelationCandidate<
|
|
376
|
+
Relations[number],
|
|
377
|
+
Operation
|
|
378
|
+
>
|
|
379
|
+
|
|
380
|
+
type BatchResult<Relation extends BatchRelation, Operation, TypeMap extends ScalarOutputTypeMap> =
|
|
381
|
+
ResultOf<BatchQueryGraph<Relation['query']>, ChildOperation<Operation, Relation['name']>, TypeMap> extends infer Child
|
|
382
|
+
? Relation['cardinality'] extends 'many'
|
|
383
|
+
? Child[]
|
|
384
|
+
: Child | null
|
|
385
|
+
: never
|
|
386
|
+
|
|
387
|
+
type ComposedResult<
|
|
388
|
+
Root extends RelationalQueryGraph,
|
|
389
|
+
Relations extends readonly BatchRelation[],
|
|
390
|
+
Operation,
|
|
391
|
+
TypeMap extends ScalarOutputTypeMap,
|
|
392
|
+
> = ResultOf<Root, RootOperation<Operation, Relations>, TypeMap> & {
|
|
393
|
+
[Relation in SelectedRelation<Relations, Operation> as Relation['name']]: BatchResult<Relation, Operation, TypeMap>
|
|
394
|
+
}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
GraphDefinition,
|
|
3
|
+
GraphDefinitionInput,
|
|
4
|
+
OrderingDefinition,
|
|
5
|
+
ParameterDefinition,
|
|
6
|
+
ProjectionDefinitionInput,
|
|
7
|
+
RelationalMapping,
|
|
8
|
+
ScalarParameterValue,
|
|
9
|
+
} from './model.js'
|
|
10
|
+
|
|
11
|
+
export interface QueryOperationBase<SelectPath extends string = string, OrderingName extends string = string> {
|
|
12
|
+
select?: readonly SelectPath[]
|
|
13
|
+
ordering?: OrderingName
|
|
14
|
+
offset?: number
|
|
15
|
+
limit?: number
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export type DefinitionParameter<Definition extends GraphDefinitionInput> =
|
|
19
|
+
Definition extends GraphDefinition<
|
|
20
|
+
infer Parameter,
|
|
21
|
+
infer _ProjectionPath,
|
|
22
|
+
infer _OrderingName,
|
|
23
|
+
infer _ProjectionField,
|
|
24
|
+
infer _Relation,
|
|
25
|
+
infer _Root
|
|
26
|
+
>
|
|
27
|
+
? Parameter
|
|
28
|
+
: NonNullable<Definition['parameters']>[number]
|
|
29
|
+
|
|
30
|
+
export type DefinitionProjectionPath<Definition extends GraphDefinitionInput> =
|
|
31
|
+
Definition extends GraphDefinition<
|
|
32
|
+
infer _Parameter,
|
|
33
|
+
infer ProjectionPath,
|
|
34
|
+
infer _OrderingName,
|
|
35
|
+
infer _ProjectionField,
|
|
36
|
+
infer _Relation,
|
|
37
|
+
infer _Root
|
|
38
|
+
>
|
|
39
|
+
? ProjectionPath
|
|
40
|
+
: Definition['projection'] extends ProjectionDefinitionInput<infer ProjectionPath>
|
|
41
|
+
? ProjectionPath
|
|
42
|
+
: string
|
|
43
|
+
|
|
44
|
+
export type DefinitionOrderingName<Definition extends GraphDefinitionInput> =
|
|
45
|
+
Definition extends GraphDefinition<
|
|
46
|
+
infer _Parameter,
|
|
47
|
+
infer _ProjectionPath,
|
|
48
|
+
infer OrderingName,
|
|
49
|
+
infer _ProjectionField,
|
|
50
|
+
infer _Relation,
|
|
51
|
+
infer _Root
|
|
52
|
+
>
|
|
53
|
+
? OrderingName
|
|
54
|
+
: NonNullable<Definition['orderings']>[number] extends OrderingDefinition<infer OrderingName>
|
|
55
|
+
? OrderingName
|
|
56
|
+
: never
|
|
57
|
+
|
|
58
|
+
export type DefinitionProjectionField<Definition extends GraphDefinitionInput> = NonNullable<
|
|
59
|
+
NonNullable<Definition['projection']>['fields']
|
|
60
|
+
>[number]
|
|
61
|
+
export type DefinitionProjectionObject<Definition extends GraphDefinitionInput> = NonNullable<
|
|
62
|
+
NonNullable<Definition['projection']>['objects']
|
|
63
|
+
>[number]
|
|
64
|
+
|
|
65
|
+
export type DefinitionRelation<Definition extends GraphDefinitionInput> = NonNullable<Definition['relations']>[number]
|
|
66
|
+
|
|
67
|
+
export type DefinitionRoot<Definition extends GraphDefinitionInput> = Definition['root']
|
|
68
|
+
|
|
69
|
+
export type ParameterValue<Parameter extends ParameterDefinition> = Parameter extends { shape: 'list' }
|
|
70
|
+
? readonly ScalarParameterValue<Parameter['scalarType']>[]
|
|
71
|
+
: ScalarParameterValue<Parameter['scalarType']>
|
|
72
|
+
|
|
73
|
+
type RequiredParameter<Parameter extends ParameterDefinition> = Parameter extends unknown
|
|
74
|
+
? Parameter extends { required?: true }
|
|
75
|
+
? Parameter
|
|
76
|
+
: never
|
|
77
|
+
: never
|
|
78
|
+
|
|
79
|
+
type OptionalParameter<Parameter extends ParameterDefinition> = Parameter extends unknown
|
|
80
|
+
? Parameter extends { required?: true }
|
|
81
|
+
? never
|
|
82
|
+
: Parameter
|
|
83
|
+
: never
|
|
84
|
+
|
|
85
|
+
export type OperationParameters<Definition extends GraphDefinitionInput> = {
|
|
86
|
+
[Parameter in RequiredParameter<DefinitionParameter<Definition>> as Parameter['name']]-?: ParameterValue<Parameter>
|
|
87
|
+
} & {
|
|
88
|
+
[Parameter in OptionalParameter<DefinitionParameter<Definition>> as Parameter['name']]?: ParameterValue<Parameter>
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
type OperationParameterInput<Definition extends GraphDefinitionInput> = [DefinitionParameter<Definition>] extends [
|
|
92
|
+
never,
|
|
93
|
+
]
|
|
94
|
+
? { parameters?: never }
|
|
95
|
+
: [RequiredParameter<DefinitionParameter<Definition>>] extends [never]
|
|
96
|
+
? { parameters?: OperationParameters<Definition> }
|
|
97
|
+
: { parameters: OperationParameters<Definition> }
|
|
98
|
+
|
|
99
|
+
export type QueryOperation<Definition extends GraphDefinitionInput = GraphDefinitionInput> = QueryOperationBase<
|
|
100
|
+
DefinitionProjectionPath<Definition>,
|
|
101
|
+
DefinitionOrderingName<Definition>
|
|
102
|
+
> &
|
|
103
|
+
OperationParameterInput<Definition>
|
|
104
|
+
|
|
105
|
+
declare const graphDefinitionType: unique symbol
|
|
106
|
+
|
|
107
|
+
export interface QueryGraph<Definition extends GraphDefinitionInput = GraphDefinitionInput> {
|
|
108
|
+
readonly [graphDefinitionType]?: Definition
|
|
109
|
+
readonly name: string
|
|
110
|
+
readonly root: string
|
|
111
|
+
readonly sourceCount: number
|
|
112
|
+
readonly relationCount: number
|
|
113
|
+
hasSource(source: string): boolean
|
|
114
|
+
hasField(source: string, field: string): boolean
|
|
115
|
+
hasParameter(parameter: string): boolean
|
|
116
|
+
hasRelation(relation: string): boolean
|
|
117
|
+
selectableFields(): Array<DefinitionProjectionPath<Definition>>
|
|
118
|
+
withRelationalMapping(mapping: RelationalMapping): RelationalQueryGraph<Definition>
|
|
119
|
+
withRelationalMappings(mappings: readonly RelationalMapping[]): RelationalQueryGraph<Definition>
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface RelationalQueryGraph<Definition extends GraphDefinitionInput = GraphDefinitionInput> {
|
|
123
|
+
readonly [graphDefinitionType]?: Definition
|
|
124
|
+
readonly name: string
|
|
125
|
+
compileSqlServer(
|
|
126
|
+
operation: QueryOperation<Definition>,
|
|
127
|
+
options?: SqlServerCompileOptions,
|
|
128
|
+
): import('../native.js').CompiledSqlStatement
|
|
129
|
+
compileOracle(
|
|
130
|
+
operation: QueryOperation<Definition>,
|
|
131
|
+
options?: OracleCompileOptions,
|
|
132
|
+
): import('../native.js').CompiledSqlStatement
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export type DefinitionOf<Subject extends GraphDefinitionInput | QueryGraph | RelationalQueryGraph> =
|
|
136
|
+
Subject extends GraphDefinitionInput
|
|
137
|
+
? Subject
|
|
138
|
+
: Subject extends QueryGraph<infer Definition>
|
|
139
|
+
? Definition
|
|
140
|
+
: Subject extends RelationalQueryGraph<infer Definition>
|
|
141
|
+
? Definition
|
|
142
|
+
: never
|
|
143
|
+
|
|
144
|
+
export type SqlServerVersion = '2008' | '2012' | '2016' | '2019' | '2022'
|
|
145
|
+
export type OracleVersion = '11g' | '12c' | '19c' | '21c' | '23ai'
|
|
146
|
+
|
|
147
|
+
export interface SqlServerCompileOptions {
|
|
148
|
+
version?: SqlServerVersion
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
export interface OracleCompileOptions {
|
|
152
|
+
version?: OracleVersion
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export type QueryGraphErrorPhase = 'definition' | 'mapping' | 'composition' | 'operation' | 'sql'
|
|
156
|
+
|
|
157
|
+
export interface QueryGraphDiagnostic {
|
|
158
|
+
code: string
|
|
159
|
+
location: string
|
|
160
|
+
message: string
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
export interface QueryGraphError extends Error {
|
|
164
|
+
readonly name: 'QueryGraphError'
|
|
165
|
+
readonly code: string
|
|
166
|
+
readonly phase: QueryGraphErrorPhase
|
|
167
|
+
readonly issues: readonly QueryGraphDiagnostic[]
|
|
168
|
+
}
|