@@ -105,6 +105,16 @@ type ConstructFieldDefinition<
105
105
Field
106
106
> = Field extends { star : true }
107
107
? Row
108
+ : Field extends { spread : true ; original : string ; children : unknown [ ] }
109
+ ? GetResultHelper <
110
+ Schema ,
111
+ ( Schema [ 'Tables' ] & Schema [ 'Views' ] ) [ Field [ 'original' ] ] [ 'Row' ] ,
112
+ ( Schema [ 'Tables' ] & Schema [ 'Views' ] ) [ Field [ 'original' ] ] extends { Relationships : infer R }
113
+ ? R
114
+ : unknown ,
115
+ Field [ 'children' ] ,
116
+ unknown
117
+ >
108
118
: Field extends { name : string ; original : string ; hint : string ; children : unknown [ ] }
109
119
? {
110
120
[ _ in Field [ 'name' ] ] : GetResultHelper <
@@ -278,12 +288,20 @@ type ParseField<Input extends string> = Input extends ''
278
288
* - `*`
279
289
* - a field, as defined above
280
290
* - a renamed field, `renamed_field:field`
291
+ * - a spread field, `...field`
281
292
*/
282
293
type ParseNode < Input extends string > = Input extends ''
283
294
? ParserError < 'Empty string' >
284
295
: // `*`
285
296
Input extends `*${infer Remainder } `
286
297
? [ { star : true } , EatWhitespace < Remainder > ]
298
+ : // `...field`
299
+ Input extends `...${infer Remainder } `
300
+ ? ParseField < EatWhitespace < Remainder > > extends [ infer Field , `${infer Remainder } `]
301
+ ? Field extends { children : unknown [ ] }
302
+ ? [ Prettify < { spread : true } & Field > , EatWhitespace < Remainder > ]
303
+ : ParserError < 'Unable to parse spread resource' >
304
+ : ParserError < 'Unable to parse spread resource' >
287
305
: ParseIdentifier < Input > extends [ infer Name , `${infer Remainder } `]
288
306
? EatWhitespace < Remainder > extends `:${infer Remainder } `
289
307
? // `renamed_field:`
0 commit comments