Skip to content

Commit a722fe5

Browse files
committed
fix(select query parser): support field!hint(nodes)
1 parent d29048f commit a722fe5

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/select-query-parser.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ type ParseIdentifier<Input extends string> = ReadLetters<Input>
117117
* - `*`
118118
* - `field`
119119
* - `field(nodes)`
120+
* - `field!hint(nodes)`
120121
* - `renamed_field:field`
121122
* - `renamed_field:field(nodes)`
122123
* - `renamed_field:field!hint(nodes)`
@@ -160,6 +161,18 @@ type ParseNode<Input extends string> = Input extends ''
160161
: // `renamed_field:field`
161162
[{ name: Name; original: OriginalName }, EatWhitespace<Remainder>]
162163
: ParseIdentifier<EatWhitespace<Remainder>>
164+
: EatWhitespace<Remainder> extends `!${infer Remainder}`
165+
? ParseIdentifier<EatWhitespace<Remainder>> extends [infer _Hint, `${infer Remainder}`]
166+
? ParseEmbeddedResource<EatWhitespace<Remainder>> extends [
167+
infer _Fields,
168+
`${infer Remainder}`
169+
]
170+
? // `field!hint(nodes)`
171+
[{ name: Name; foreignTable: true }, EatWhitespace<Remainder>]
172+
: ParseEmbeddedResource<EatWhitespace<Remainder>> extends ParserError<string>
173+
? ParseEmbeddedResource<EatWhitespace<Remainder>>
174+
: ParserError<'Expected embedded resource after `!hint`'>
175+
: ParserError<'Expected identifier after `!`'>
163176
: ParseEmbeddedResource<EatWhitespace<Remainder>> extends [infer _Fields, `${infer Remainder}`]
164177
? // `field(nodes)`
165178
[{ name: Name; foreignTable: true }, EatWhitespace<Remainder>]

0 commit comments

Comments
 (0)