@@ -202,6 +202,8 @@ type ConstructFieldDefinition<
202
202
Field [ 'children' ] ,
203
203
unknown
204
204
>
205
+ : Field extends { children : [ ] }
206
+ ? { }
205
207
: Field extends { name : string ; original : string ; hint : string ; children : unknown [ ] }
206
208
? {
207
209
[ _ in Field [ 'name' ] ] : GetResultHelper <
@@ -460,19 +462,22 @@ type ParseJsonAccessor<Input extends string> = Input extends `->${infer Remainde
460
462
461
463
/**
462
464
* Parses an embedded resource, which is an opening `(`, followed by a sequence of
463
- * nodes, separated by `,`, then a closing `)`.
465
+ * 0 or more nodes separated by `,`, then a closing `)`.
464
466
*
465
467
* Returns a tuple of ["Parsed fields", "Remainder of text"], an error,
466
468
* or the original string input indicating that no opening `(` was found.
467
469
*/
468
470
type ParseEmbeddedResource < Input extends string > = Input extends `(${infer Remainder } `
469
471
? ParseNodes < EatWhitespace < Remainder > > extends [ infer Fields , `${infer Remainder } `]
470
472
? EatWhitespace < Remainder > extends `)${infer Remainder } `
471
- ? Fields extends [ ]
472
- ? ParserError < 'Expected fields after `(`' >
473
- : [ Fields , EatWhitespace < Remainder > ]
473
+ ? [ Fields , EatWhitespace < Remainder > ]
474
474
: ParserError < `Expected ")"`>
475
- : ParseNodes < EatWhitespace < Remainder > >
475
+ : // If no nodes were detected, check for `)` for empty embedded resources `()`.
476
+ ParseNodes < EatWhitespace < Remainder > > extends ParserError < string >
477
+ ? EatWhitespace < Remainder > extends `)${infer Remainder } `
478
+ ? [ [ ] , EatWhitespace < Remainder > ]
479
+ : ParseNodes < EatWhitespace < Remainder > >
480
+ : ParserError < 'Expected embedded resource fields or `)`' >
476
481
: Input
477
482
478
483
/**
0 commit comments