@@ -191,6 +191,17 @@ type ConstructFieldDefinition<
191
191
Field
192
192
> = Field extends { star : true }
193
193
? Row
194
+ : Field extends { spread : true ; original : string ; children : unknown [ ] }
195
+ ? GetResultHelper <
196
+ Schema ,
197
+ ( Schema [ 'Tables' ] & Schema [ 'Views' ] ) [ Field [ 'original' ] ] [ 'Row' ] ,
198
+ Field [ 'original' ] ,
199
+ ( Schema [ 'Tables' ] & Schema [ 'Views' ] ) [ Field [ 'original' ] ] extends { Relationships : infer R }
200
+ ? R
201
+ : unknown ,
202
+ Field [ 'children' ] ,
203
+ unknown
204
+ >
194
205
: Field extends { name : string ; original : string ; hint : string ; children : unknown [ ] }
195
206
? {
196
207
[ _ in Field [ 'name' ] ] : GetResultHelper <
@@ -394,12 +405,20 @@ type ParseField<Input extends string> = Input extends ''
394
405
* - `*`
395
406
* - a field, as defined above
396
407
* - a renamed field, `renamed_field:field`
408
+ * - a spread field, `...field`
397
409
*/
398
410
type ParseNode < Input extends string > = Input extends ''
399
411
? ParserError < 'Empty string' >
400
412
: // `*`
401
413
Input extends `*${infer Remainder } `
402
414
? [ { star : true } , EatWhitespace < Remainder > ]
415
+ : // `...field`
416
+ Input extends `...${infer Remainder } `
417
+ ? ParseField < EatWhitespace < Remainder > > extends [ infer Field , `${infer Remainder } `]
418
+ ? Field extends { children : unknown [ ] }
419
+ ? [ Prettify < { spread : true } & Field > , EatWhitespace < Remainder > ]
420
+ : ParserError < 'Unable to parse spread resource' >
421
+ : ParserError < 'Unable to parse spread resource' >
403
422
: ParseIdentifier < Input > extends [ infer Name , `${infer Remainder } `]
404
423
? EatWhitespace < Remainder > extends `::${infer _Remainder } `
405
424
? // `field::`
0 commit comments