File tree Expand file tree Collapse file tree 3 files changed +18
-3
lines changed Expand file tree Collapse file tree 3 files changed +18
-3
lines changed Original file line number Diff line number Diff line change @@ -100,6 +100,11 @@ describe('Parser', () => {
100
100
) ;
101
101
} ) ;
102
102
103
+ it ( 'exposes the tokenCount' , ( ) => {
104
+ expect ( parse ( '{ foo }' ) . tokenCount ) . to . equal ( 3 ) ;
105
+ expect ( parse ( '{ foo(bar: "baz") }' ) . tokenCount ) . to . equal ( 8 ) ;
106
+ } ) ;
107
+
103
108
it ( 'parses variable inline values' , ( ) => {
104
109
expect ( ( ) =>
105
110
parse ( '{ field(complex: { a: { b: [ $var ] } }) }' ) ,
Original file line number Diff line number Diff line change @@ -312,6 +312,7 @@ export interface DocumentNode {
312
312
readonly kind : Kind . DOCUMENT ;
313
313
readonly loc ?: Location | undefined ;
314
314
readonly definitions : ReadonlyArray < DefinitionNode > ;
315
+ readonly tokenCount ?: number | undefined ;
315
316
}
316
317
317
318
export type DefinitionNode =
Original file line number Diff line number Diff line change @@ -119,7 +119,12 @@ export function parse(
119
119
options ?: ParseOptions | undefined ,
120
120
) : DocumentNode {
121
121
const parser = new Parser ( source , options ) ;
122
- return parser . parseDocument ( ) ;
122
+ const document = parser . parseDocument ( ) ;
123
+ Object . defineProperty ( document , 'tokenCount' , {
124
+ enumerable : false ,
125
+ value : parser . tokenCount ,
126
+ } ) ;
127
+ return document ;
123
128
}
124
129
125
130
/**
@@ -201,6 +206,10 @@ export class Parser {
201
206
this . _tokenCounter = 0 ;
202
207
}
203
208
209
+ get tokenCount ( ) : number {
210
+ return this . _tokenCounter ;
211
+ }
212
+
204
213
/**
205
214
* Converts a name lex token into a name parse node.
206
215
*/
@@ -1601,9 +1610,9 @@ export class Parser {
1601
1610
const { maxTokens } = this . _options ;
1602
1611
const token = this . _lexer . advance ( ) ;
1603
1612
1604
- if ( maxTokens !== undefined && token . kind !== TokenKind . EOF ) {
1613
+ if ( token . kind !== TokenKind . EOF ) {
1605
1614
++ this . _tokenCounter ;
1606
- if ( this . _tokenCounter > maxTokens ) {
1615
+ if ( maxTokens !== undefined && this . _tokenCounter > maxTokens ) {
1607
1616
throw syntaxError (
1608
1617
this . _lexer . source ,
1609
1618
token . start ,
You can’t perform that action at this time.
0 commit comments