@@ -109,6 +109,13 @@ type ParserError<Message extends string> = { error: true } & Message
109
109
type GenericStringError = ParserError < 'Received a generic string' >
110
110
export type SelectQueryError < Message extends string > = { error : true } & Message
111
111
112
+ /**
113
+ * Creates a new {@link ParserError} if the given input is not already a parser error.
114
+ */
115
+ type CreateParserErrorIfRequired < Input , Message extends string > = Input extends ParserError < string >
116
+ ? Input
117
+ : ParserError < Message >
118
+
112
119
/**
113
120
* Trims whitespace from the left of the input.
114
121
*/
@@ -348,9 +355,10 @@ type ParseNode<Input extends string> = Input extends ''
348
355
? ParseEmbeddedResource < EatWhitespace < Remainder > > extends [ infer Fields , `${infer Remainder } `]
349
356
? // `field!inner(nodes)`
350
357
[ { name : Name ; original : Name ; children : Fields } , EatWhitespace < Remainder > ]
351
- : ParseEmbeddedResource < EatWhitespace < Remainder > > extends ParserError < string >
352
- ? ParseEmbeddedResource < EatWhitespace < Remainder > >
353
- : ParserError < 'Expected embedded resource after `!inner`' >
358
+ : CreateParserErrorIfRequired <
359
+ ParseEmbeddedResource < EatWhitespace < Remainder > > ,
360
+ 'Expected embedded resource after `!inner`'
361
+ >
354
362
: EatWhitespace < Remainder > extends `!${infer Remainder } `
355
363
? ParseIdentifier < EatWhitespace < Remainder > > extends [ infer Hint , `${infer Remainder } `]
356
364
? EatWhitespace < Remainder > extends `!inner${infer Remainder } `
@@ -360,18 +368,20 @@ type ParseNode<Input extends string> = Input extends ''
360
368
]
361
369
? // `field!hint!inner(nodes)`
362
370
[ { name : Name ; original : Name ; hint : Hint ; children : Fields } , EatWhitespace < Remainder > ]
363
- : ParseEmbeddedResource < EatWhitespace < Remainder > > extends ParserError < string >
364
- ? ParseEmbeddedResource < EatWhitespace < Remainder > >
365
- : ParserError < 'Expected embedded resource after `!inner`' >
371
+ : CreateParserErrorIfRequired <
372
+ ParseEmbeddedResource < EatWhitespace < Remainder > > ,
373
+ 'Expected embedded resource after `!inner`'
374
+ >
366
375
: ParseEmbeddedResource < EatWhitespace < Remainder > > extends [
367
376
infer Fields ,
368
377
`${infer Remainder } `
369
378
]
370
379
? // `field!hint(nodes)`
371
380
[ { name : Name ; original : Name ; hint : Hint ; children : Fields } , EatWhitespace < Remainder > ]
372
- : ParseEmbeddedResource < EatWhitespace < Remainder > > extends ParserError < string >
373
- ? ParseEmbeddedResource < EatWhitespace < Remainder > >
374
- : ParserError < 'Expected embedded resource after `!hint`' >
381
+ : CreateParserErrorIfRequired <
382
+ ParseEmbeddedResource < EatWhitespace < Remainder > > ,
383
+ 'Expected embedded resource after `!hint`'
384
+ >
375
385
: ParserError < 'Expected identifier after `!`' >
376
386
: EatWhitespace < Remainder > extends `:${infer Remainder } `
377
387
? ParseIdentifier < EatWhitespace < Remainder > > extends [ infer OriginalName , `${infer Remainder } `]
@@ -389,9 +399,10 @@ type ParseNode<Input extends string> = Input extends ''
389
399
]
390
400
? // `renamed_field:field!inner(nodes)`
391
401
[ { name : Name ; original : OriginalName ; children : Fields } , EatWhitespace < Remainder > ]
392
- : ParseEmbeddedResource < EatWhitespace < Remainder > > extends ParserError < string >
393
- ? ParseEmbeddedResource < EatWhitespace < Remainder > >
394
- : ParserError < 'Expected embedded resource after `!inner`' >
402
+ : CreateParserErrorIfRequired <
403
+ ParseEmbeddedResource < EatWhitespace < Remainder > > ,
404
+ 'Expected embedded resource after `!inner`'
405
+ >
395
406
: EatWhitespace < Remainder > extends `!${infer Remainder } `
396
407
? ParseIdentifier < EatWhitespace < Remainder > > extends [ infer Hint , `${infer Remainder } `]
397
408
? EatWhitespace < Remainder > extends `!inner${infer Remainder } `
@@ -404,9 +415,10 @@ type ParseNode<Input extends string> = Input extends ''
404
415
{ name : Name ; original : OriginalName ; hint : Hint ; children : Fields } ,
405
416
EatWhitespace < Remainder >
406
417
]
407
- : ParseEmbeddedResource < EatWhitespace < Remainder > > extends ParserError < string >
408
- ? ParseEmbeddedResource < EatWhitespace < Remainder > >
409
- : ParserError < 'Expected embedded resource after `!inner`' >
418
+ : CreateParserErrorIfRequired <
419
+ ParseEmbeddedResource < EatWhitespace < Remainder > > ,
420
+ 'Expected embedded resource after `!inner`'
421
+ >
410
422
: ParseEmbeddedResource < EatWhitespace < Remainder > > extends [
411
423
infer Fields ,
412
424
`${infer Remainder } `
@@ -421,9 +433,10 @@ type ParseNode<Input extends string> = Input extends ''
421
433
} ,
422
434
EatWhitespace < Remainder >
423
435
]
424
- : ParseEmbeddedResource < EatWhitespace < Remainder > > extends ParserError < string >
425
- ? ParseEmbeddedResource < EatWhitespace < Remainder > >
426
- : ParserError < 'Expected embedded resource after `!hint`' >
436
+ : CreateParserErrorIfRequired <
437
+ ParseEmbeddedResource < EatWhitespace < Remainder > > ,
438
+ 'Expected embedded resource after `!hint`'
439
+ >
427
440
: ParserError < 'Expected identifier after `!`' >
428
441
: ParseEmbeddedResource < EatWhitespace < Remainder > > extends [
429
442
infer Fields ,
0 commit comments