@@ -105,6 +105,8 @@ type ConstructFieldDefinition<
105
105
Field
106
106
> = Field extends { star : true }
107
107
? Row
108
+ : Field extends { children : [ ] }
109
+ ? { }
108
110
: Field extends { spread : true ; original : string ; children : unknown [ ] }
109
111
? GetResultHelper <
110
112
Schema ,
@@ -289,6 +291,8 @@ type ParseField<Input extends string> = Input extends ''
289
291
* - a field, as defined above
290
292
* - a renamed field, `renamed_field:field`
291
293
* - a spread field, `...field`
294
+ *
295
+ * Returns a tuple of ["Parsed node", "Remainder of text"] or an error.
292
296
*/
293
297
type ParseNode < Input extends string > = Input extends ''
294
298
? ParserError < 'Empty string' >
@@ -339,19 +343,22 @@ type ParseJsonAccessor<Input extends string> = Input extends `->${infer Remainde
339
343
340
344
/**
341
345
* Parses an embedded resource, which is an opening `(`, followed by a sequence of
342
- * nodes, separated by `,`, then a closing `)`.
346
+ * 0 or more nodes separated by `,`, then a closing `)`.
343
347
*
344
348
* Returns a tuple of ["Parsed fields", "Remainder of text"], an error,
345
349
* or the original string input indicating that no opening `(` was found.
346
350
*/
347
351
type ParseEmbeddedResource < Input extends string > = Input extends `(${infer Remainder } `
348
352
? ParseNodes < EatWhitespace < Remainder > > extends [ infer Fields , `${infer Remainder } `]
349
353
? EatWhitespace < Remainder > extends `)${infer Remainder } `
350
- ? Fields extends [ ]
351
- ? ParserError < 'Expected fields after `(`' >
352
- : [ Fields , EatWhitespace < Remainder > ]
354
+ ? [ Fields , EatWhitespace < Remainder > ]
353
355
: ParserError < `Expected ")"`>
354
- : ParseNodes < EatWhitespace < Remainder > >
356
+ : // If no nodes were detected, check for `)` for empty embedded resources `()`.
357
+ ParseNodes < EatWhitespace < Remainder > > extends ParserError < string >
358
+ ? EatWhitespace < Remainder > extends `)${infer Remainder } `
359
+ ? [ [ ] , EatWhitespace < Remainder > ]
360
+ : ParseNodes < EatWhitespace < Remainder > >
361
+ : ParserError < 'Expected embedded resource fields or `)`' >
355
362
: Input
356
363
357
364
/**
0 commit comments