File tree 3 files changed +18
-3
lines changed
3 files changed +18
-3
lines changed Original file line number Diff line number Diff line change @@ -84,6 +84,11 @@ describe('Parser', () => {
84
84
` ) ;
85
85
} ) ;
86
86
87
+ it ( 'exposes the tokenCount' , ( ) => {
88
+ expect ( parse ( '{ foo }' ) . tokenCount ) . to . equal ( 3 ) ;
89
+ expect ( parse ( '{ foo(bar: "baz") }' ) . tokenCount ) . to . equal ( 8 ) ;
90
+ } ) ;
91
+
87
92
it ( 'limit maximum number of tokens' , ( ) => {
88
93
expect ( ( ) => parse ( '{ foo }' , { maxTokens : 3 } ) ) . to . not . throw ( ) ;
89
94
expect ( ( ) => parse ( '{ foo }' , { maxTokens : 2 } ) ) . to . throw (
Original file line number Diff line number Diff line change @@ -302,6 +302,7 @@ export interface DocumentNode {
302
302
readonly kind : Kind . DOCUMENT ;
303
303
readonly loc ?: Location ;
304
304
readonly definitions : ReadonlyArray < DefinitionNode > ;
305
+ readonly tokenCount ?: number | undefined ;
305
306
}
306
307
307
308
export type DefinitionNode =
Original file line number Diff line number Diff line change @@ -114,7 +114,12 @@ export function parse(
114
114
options ?: ParseOptions | undefined ,
115
115
) : DocumentNode {
116
116
const parser = new Parser ( source , options ) ;
117
- return parser . parseDocument ( ) ;
117
+ const document = parser . parseDocument ( ) ;
118
+ Object . defineProperty ( document , 'tokenCount' , {
119
+ enumerable : false ,
120
+ value : parser . tokenCount ,
121
+ } ) ;
122
+ return document ;
118
123
}
119
124
120
125
/**
@@ -198,6 +203,10 @@ export class Parser {
198
203
this . _tokenCounter = 0 ;
199
204
}
200
205
206
+ get tokenCount ( ) : number {
207
+ return this . _tokenCounter ;
208
+ }
209
+
201
210
/**
202
211
* Converts a name lex token into a name parse node.
203
212
*/
@@ -1564,9 +1573,9 @@ export class Parser {
1564
1573
const { maxTokens } = this . _options ;
1565
1574
const token = this . _lexer . advance ( ) ;
1566
1575
1567
- if ( maxTokens !== undefined && token . kind !== TokenKind . EOF ) {
1576
+ if ( token . kind !== TokenKind . EOF ) {
1568
1577
++ this . _tokenCounter ;
1569
- if ( this . _tokenCounter > maxTokens ) {
1578
+ if ( maxTokens !== undefined && this . _tokenCounter > maxTokens ) {
1570
1579
throw syntaxError (
1571
1580
this . _lexer . source ,
1572
1581
token . start ,
You can’t perform that action at this time.
0 commit comments