@@ -191,6 +191,8 @@ type ConstructFieldDefinition<
191
191
Field
192
192
> = Field extends { star : true }
193
193
? Row
194
+ : Field extends { children : [ ] }
195
+ ? { }
194
196
: Field extends { name : string ; original : string ; hint : string ; children : unknown [ ] }
195
197
? {
196
198
[ _ in Field [ 'name' ] ] : GetResultHelper <
@@ -441,19 +443,22 @@ type ParseJsonAccessor<Input extends string> = Input extends `->${infer Remainde
441
443
442
444
/**
443
445
* Parses an embedded resource, which is an opening `(`, followed by a sequence of
444
- * nodes, separated by `,`, then a closing `)`.
446
+ * 0 or more nodes separated by `,`, then a closing `)`.
445
447
*
446
448
* Returns a tuple of ["Parsed fields", "Remainder of text"], an error,
447
449
* or the original string input indicating that no opening `(` was found.
448
450
*/
449
451
type ParseEmbeddedResource < Input extends string > = Input extends `(${infer Remainder } `
450
452
? ParseNodes < EatWhitespace < Remainder > > extends [ infer Fields , `${infer Remainder } `]
451
453
? EatWhitespace < Remainder > extends `)${infer Remainder } `
452
- ? Fields extends [ ]
453
- ? ParserError < 'Expected fields after `(`' >
454
- : [ Fields , EatWhitespace < Remainder > ]
454
+ ? [ Fields , EatWhitespace < Remainder > ]
455
455
: ParserError < `Expected ")"`>
456
- : ParseNodes < EatWhitespace < Remainder > >
456
+ : // If no nodes were detected, check for `)` for empty embedded resources `()`.
457
+ ParseNodes < EatWhitespace < Remainder > > extends ParserError < string >
458
+ ? EatWhitespace < Remainder > extends `)${infer Remainder } `
459
+ ? [ [ ] , EatWhitespace < Remainder > ]
460
+ : ParseNodes < EatWhitespace < Remainder > >
461
+ : ParserError < 'Expected embedded resource fields or `)`' >
457
462
: Input
458
463
459
464
/**
0 commit comments