@@ -25,6 +25,18 @@ const SyntaxKind = nodeUtils.SyntaxKind;
25
25
// Public
26
26
//------------------------------------------------------------------------------
27
27
28
+ let esTreeNodeToTSNodeMap = new WeakMap ( ) ;
29
+ let tsNodeToESTreeNodeMap = new WeakMap ( ) ;
30
+
31
+ function resetASTMaps ( ) {
32
+ esTreeNodeToTSNodeMap = new WeakMap ( ) ;
33
+ tsNodeToESTreeNodeMap = new WeakMap ( ) ;
34
+ }
35
+
36
+ function getASTMaps ( ) {
37
+ return { esTreeNodeToTSNodeMap, tsNodeToESTreeNodeMap } ;
38
+ }
39
+
28
40
/**
29
41
* Converts a TypeScript node into an ESTree node
30
42
* @param {Object } config configuration options for the conversion
@@ -53,7 +65,7 @@ module.exports = function convert(config) {
53
65
*/
54
66
let result = {
55
67
type : '' ,
56
- range : [ node . getStart ( ) , node . end ] ,
68
+ range : [ node . getStart ( ast ) , node . end ] ,
57
69
loc : nodeUtils . getLoc ( node , ast )
58
70
} ;
59
71
@@ -120,7 +132,11 @@ module.exports = function convert(config) {
120
132
typeArgumentsParent . kind === SyntaxKind . TypeReference )
121
133
) {
122
134
const lastTypeArgument = typeArguments [ typeArguments . length - 1 ] ;
123
- const greaterThanToken = nodeUtils . findNextToken ( lastTypeArgument , ast ) ;
135
+ const greaterThanToken = nodeUtils . findNextToken (
136
+ lastTypeArgument ,
137
+ ast ,
138
+ ast
139
+ ) ;
124
140
end = greaterThanToken . end ;
125
141
}
126
142
}
@@ -132,7 +148,7 @@ module.exports = function convert(config) {
132
148
if ( nodeUtils . isTypeKeyword ( typeArgument . kind ) ) {
133
149
return {
134
150
type : AST_NODE_TYPES [ `TS${ SyntaxKind [ typeArgument . kind ] } ` ] ,
135
- range : [ typeArgument . getStart ( ) , typeArgument . getEnd ( ) ] ,
151
+ range : [ typeArgument . getStart ( ast ) , typeArgument . getEnd ( ) ] ,
136
152
loc : nodeUtils . getLoc ( typeArgument , ast )
137
153
} ;
138
154
}
@@ -146,7 +162,7 @@ module.exports = function convert(config) {
146
162
}
147
163
return {
148
164
type : AST_NODE_TYPES . TSTypeReference ,
149
- range : [ typeArgument . getStart ( ) , typeArgument . getEnd ( ) ] ,
165
+ range : [ typeArgument . getStart ( ast ) , typeArgument . getEnd ( ) ] ,
150
166
loc : nodeUtils . getLoc ( typeArgument , ast ) ,
151
167
typeName : convertChild ( typeArgument . typeName || typeArgument ) ,
152
168
typeParameters : typeArgument . typeArguments
@@ -166,7 +182,11 @@ module.exports = function convert(config) {
166
182
const firstTypeParameter = typeParameters [ 0 ] ;
167
183
const lastTypeParameter = typeParameters [ typeParameters . length - 1 ] ;
168
184
169
- const greaterThanToken = nodeUtils . findNextToken ( lastTypeParameter , ast ) ;
185
+ const greaterThanToken = nodeUtils . findNextToken (
186
+ lastTypeParameter ,
187
+ ast ,
188
+ ast
189
+ ) ;
170
190
171
191
return {
172
192
type : AST_NODE_TYPES . TSTypeParameterDeclaration ,
@@ -199,7 +219,7 @@ module.exports = function convert(config) {
199
219
200
220
return {
201
221
type : AST_NODE_TYPES . TSTypeParameter ,
202
- range : [ typeParameter . getStart ( ) , typeParameter . getEnd ( ) ] ,
222
+ range : [ typeParameter . getStart ( ast ) , typeParameter . getEnd ( ) ] ,
203
223
loc : nodeUtils . getLoc ( typeParameter , ast ) ,
204
224
name,
205
225
constraint,
@@ -266,7 +286,7 @@ module.exports = function convert(config) {
266
286
const expression = convertChild ( decorator . expression ) ;
267
287
return {
268
288
type : AST_NODE_TYPES . Decorator ,
269
- range : [ decorator . getStart ( ) , decorator . end ] ,
289
+ range : [ decorator . getStart ( ast ) , decorator . end ] ,
270
290
loc : nodeUtils . getLoc ( decorator , ast ) ,
271
291
expression
272
292
} ;
@@ -477,7 +497,11 @@ module.exports = function convert(config) {
477
497
} ) ;
478
498
479
499
result . range [ 1 ] = node . endOfFileToken . end ;
480
- result . loc = nodeUtils . getLocFor ( node . getStart ( ) , result . range [ 1 ] , ast ) ;
500
+ result . loc = nodeUtils . getLocFor (
501
+ node . getStart ( ast ) ,
502
+ result . range [ 1 ] ,
503
+ ast
504
+ ) ;
481
505
break ;
482
506
483
507
case SyntaxKind . Block :
@@ -934,11 +958,12 @@ module.exports = function convert(config) {
934
958
return false ;
935
959
}
936
960
return nodeUtils . getTextForTokenKind ( token . kind ) === '(' ;
937
- }
961
+ } ,
962
+ ast
938
963
) ;
939
964
940
965
const methodLoc = ast . getLineAndCharacterOfPosition (
941
- openingParen . getStart ( )
966
+ openingParen . getStart ( ast )
942
967
) ,
943
968
nodeIsMethod = node . kind === SyntaxKind . MethodDeclaration ,
944
969
method = {
@@ -1045,7 +1070,7 @@ module.exports = function convert(config) {
1045
1070
node
1046
1071
) ,
1047
1072
firstConstructorToken = constructorIsStatic
1048
- ? nodeUtils . findNextToken ( node . getFirstToken ( ) , ast )
1073
+ ? nodeUtils . findNextToken ( node . getFirstToken ( ) , ast , ast )
1049
1074
: node . getFirstToken ( ) ,
1050
1075
constructorLoc = ast . getLineAndCharacterOfPosition (
1051
1076
node . parameters . pos - 1
@@ -1069,10 +1094,10 @@ module.exports = function convert(config) {
1069
1094
} ;
1070
1095
1071
1096
const constructorIdentifierLocStart = ast . getLineAndCharacterOfPosition (
1072
- firstConstructorToken . getStart ( )
1097
+ firstConstructorToken . getStart ( ast )
1073
1098
) ,
1074
1099
constructorIdentifierLocEnd = ast . getLineAndCharacterOfPosition (
1075
- firstConstructorToken . getEnd ( )
1100
+ firstConstructorToken . getEnd ( ast )
1076
1101
) ,
1077
1102
constructorIsComputed =
1078
1103
! ! node . name && nodeUtils . isComputedProperty ( node . name ) ;
@@ -1084,7 +1109,10 @@ module.exports = function convert(config) {
1084
1109
type : AST_NODE_TYPES . Literal ,
1085
1110
value : 'constructor' ,
1086
1111
raw : node . name . getText ( ) ,
1087
- range : [ firstConstructorToken . getStart ( ) , firstConstructorToken . end ] ,
1112
+ range : [
1113
+ firstConstructorToken . getStart ( ast ) ,
1114
+ firstConstructorToken . end
1115
+ ] ,
1088
1116
loc : {
1089
1117
start : {
1090
1118
line : constructorIdentifierLocStart . line + 1 ,
@@ -1100,7 +1128,10 @@ module.exports = function convert(config) {
1100
1128
constructorKey = {
1101
1129
type : AST_NODE_TYPES . Identifier ,
1102
1130
name : 'constructor' ,
1103
- range : [ firstConstructorToken . getStart ( ) , firstConstructorToken . end ] ,
1131
+ range : [
1132
+ firstConstructorToken . getStart ( ast ) ,
1133
+ firstConstructorToken . end
1134
+ ] ,
1104
1135
loc : {
1105
1136
start : {
1106
1137
line : constructorIdentifierLocStart . line + 1 ,
@@ -1233,9 +1264,9 @@ module.exports = function convert(config) {
1233
1264
type : AST_NODE_TYPES . AssignmentPattern ,
1234
1265
left : convertChild ( node . name ) ,
1235
1266
right : convertChild ( node . initializer ) ,
1236
- range : [ node . name . getStart ( ) , node . initializer . end ] ,
1267
+ range : [ node . name . getStart ( ast ) , node . initializer . end ] ,
1237
1268
loc : nodeUtils . getLocFor (
1238
- node . name . getStart ( ) ,
1269
+ node . name . getStart ( ast ) ,
1239
1270
node . initializer . end ,
1240
1271
ast
1241
1272
)
@@ -1292,7 +1323,7 @@ module.exports = function convert(config) {
1292
1323
{
1293
1324
type : AST_NODE_TYPES . TemplateElement ,
1294
1325
value : {
1295
- raw : ast . text . slice ( node . getStart ( ) + 1 , node . end - 1 ) ,
1326
+ raw : ast . text . slice ( node . getStart ( ast ) + 1 , node . end - 1 ) ,
1296
1327
cooked : node . text
1297
1328
} ,
1298
1329
tail : true ,
@@ -1335,7 +1366,10 @@ module.exports = function convert(config) {
1335
1366
Object . assign ( result , {
1336
1367
type : AST_NODE_TYPES . TemplateElement ,
1337
1368
value : {
1338
- raw : ast . text . slice ( node . getStart ( ) + 1 , node . end - ( tail ? 1 : 2 ) ) ,
1369
+ raw : ast . text . slice (
1370
+ node . getStart ( ast ) + 1 ,
1371
+ node . end - ( tail ? 1 : 2 )
1372
+ ) ,
1339
1373
cooked : node . text
1340
1374
} ,
1341
1375
tail
@@ -1426,7 +1460,7 @@ module.exports = function convert(config) {
1426
1460
if ( node . modifiers ) {
1427
1461
return {
1428
1462
type : AST_NODE_TYPES . TSParameterProperty ,
1429
- range : [ node . getStart ( ) , node . end ] ,
1463
+ range : [ node . getStart ( ast ) , node . end ] ,
1430
1464
loc : nodeUtils . getLoc ( node , ast ) ,
1431
1465
accessibility : nodeUtils . getTSNodeAccessibility ( node ) || undefined ,
1432
1466
readonly :
@@ -1459,7 +1493,7 @@ module.exports = function convert(config) {
1459
1493
node . typeParameters [ node . typeParameters . length - 1 ] ;
1460
1494
1461
1495
if ( ! lastClassToken || lastTypeParameter . pos > lastClassToken . pos ) {
1462
- lastClassToken = nodeUtils . findNextToken ( lastTypeParameter , ast ) ;
1496
+ lastClassToken = nodeUtils . findNextToken ( lastTypeParameter , ast , ast ) ;
1463
1497
}
1464
1498
result . typeParameters = convertTSTypeParametersToTypeParametersDeclaration (
1465
1499
node . typeParameters
@@ -1483,14 +1517,14 @@ module.exports = function convert(config) {
1483
1517
const lastModifier = node . modifiers [ node . modifiers . length - 1 ] ;
1484
1518
1485
1519
if ( ! lastClassToken || lastModifier . pos > lastClassToken . pos ) {
1486
- lastClassToken = nodeUtils . findNextToken ( lastModifier , ast ) ;
1520
+ lastClassToken = nodeUtils . findNextToken ( lastModifier , ast , ast ) ;
1487
1521
}
1488
1522
} else if ( ! lastClassToken ) {
1489
1523
// no name
1490
1524
lastClassToken = node . getFirstToken ( ) ;
1491
1525
}
1492
1526
1493
- const openBrace = nodeUtils . findNextToken ( lastClassToken , ast ) ;
1527
+ const openBrace = nodeUtils . findNextToken ( lastClassToken , ast , ast ) ;
1494
1528
const superClass = heritageClauses . find (
1495
1529
clause => clause . token === SyntaxKind . ExtendsKeyword
1496
1530
) ;
@@ -1523,8 +1557,8 @@ module.exports = function convert(config) {
1523
1557
body : [ ] ,
1524
1558
1525
1559
// TODO: Fix location info
1526
- range : [ openBrace . getStart ( ) , result . range [ 1 ] ] ,
1527
- loc : nodeUtils . getLocFor ( openBrace . getStart ( ) , node . end , ast )
1560
+ range : [ openBrace . getStart ( ast ) , result . range [ 1 ] ] ,
1561
+ loc : nodeUtils . getLocFor ( openBrace . getStart ( ast ) , node . end , ast )
1528
1562
} ,
1529
1563
superClass :
1530
1564
superClass && superClass . types [ 0 ]
@@ -2142,7 +2176,7 @@ module.exports = function convert(config) {
2142
2176
type : AST_NODE_TYPES . VariableDeclarator ,
2143
2177
id : convertChild ( node . name ) ,
2144
2178
init : convertChild ( node . type ) ,
2145
- range : [ node . name . getStart ( ) , node . end ]
2179
+ range : [ node . name . getStart ( ast ) , node . end ]
2146
2180
} ;
2147
2181
2148
2182
typeAliasDeclarator . loc = nodeUtils . getLocFor (
@@ -2278,6 +2312,7 @@ module.exports = function convert(config) {
2278
2312
) {
2279
2313
interfaceLastClassToken = nodeUtils . findNextToken (
2280
2314
interfaceLastTypeParameter ,
2315
+ ast ,
2281
2316
ast
2282
2317
) ;
2283
2318
}
@@ -2293,14 +2328,19 @@ module.exports = function convert(config) {
2293
2328
) ;
2294
2329
const interfaceOpenBrace = nodeUtils . findNextToken (
2295
2330
interfaceLastClassToken ,
2331
+ ast ,
2296
2332
ast
2297
2333
) ;
2298
2334
2299
2335
const interfaceBody = {
2300
2336
type : AST_NODE_TYPES . TSInterfaceBody ,
2301
2337
body : node . members . map ( member => convertChild ( member ) ) ,
2302
- range : [ interfaceOpenBrace . getStart ( ) , result . range [ 1 ] ] ,
2303
- loc : nodeUtils . getLocFor ( interfaceOpenBrace . getStart ( ) , node . end , ast )
2338
+ range : [ interfaceOpenBrace . getStart ( ast ) , result . range [ 1 ] ] ,
2339
+ loc : nodeUtils . getLocFor (
2340
+ interfaceOpenBrace . getStart ( ast ) ,
2341
+ node . end ,
2342
+ ast
2343
+ )
2304
2344
} ;
2305
2345
2306
2346
Object . assign ( result , {
@@ -2411,5 +2451,11 @@ module.exports = function convert(config) {
2411
2451
deeplyCopy ( ) ;
2412
2452
}
2413
2453
2454
+ tsNodeToESTreeNodeMap . set ( node , result ) ;
2455
+ esTreeNodeToTSNodeMap . set ( result , node ) ;
2456
+
2414
2457
return result ;
2415
2458
} ;
2459
+
2460
+ module . exports . getASTMaps = getASTMaps ;
2461
+ module . exports . resetASTMaps = resetASTMaps ;
0 commit comments