@@ -94,7 +94,7 @@ const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
94
94
*/
95
95
/** @typedef {import("../Parser").ParserState } ParserState */
96
96
/** @typedef {import("../Parser").PreparsedAst } PreparsedAst */
97
- /** @typedef {{declaredScope: ScopeInfo, freeName: string | true, tagInfo: TagInfo | undefined} } VariableInfoInterface */
97
+ /** @typedef {{declaredScope: ScopeInfo, freeName: string | true | undefined , tagInfo: TagInfo | undefined} } VariableInfoInterface */
98
98
/** @typedef {{ name: string | VariableInfo, rootInfo: string | VariableInfo, getMembers: () => string[], getMembersOptionals: () => boolean[], getMemberRanges: () => Range[] } } GetInfoResult */
99
99
/** @typedef {Statement | ModuleDeclaration | Expression } StatementPathItem */
100
100
/** @typedef {TODO } OnIdent */
@@ -248,7 +248,7 @@ class JavascriptParser extends Parser {
248
248
this . hooks = Object . freeze ( {
249
249
/** @type {HookMap<SyncBailHook<[UnaryExpression], BasicEvaluatedExpression | undefined | null>> } */
250
250
evaluateTypeof : new HookMap ( ( ) => new SyncBailHook ( [ "expression" ] ) ) ,
251
- /** @type {HookMap<SyncBailHook<[Expression | SpreadElement], BasicEvaluatedExpression | undefined | null>> } */
251
+ /** @type {HookMap<SyncBailHook<[Expression | SpreadElement | PrivateIdentifier ], BasicEvaluatedExpression | undefined | null>> } */
252
252
evaluate : new HookMap ( ( ) => new SyncBailHook ( [ "expression" ] ) ) ,
253
253
/** @type {HookMap<SyncBailHook<[Identifier | ThisExpression | MemberExpression | MetaProperty], BasicEvaluatedExpression | undefined | null>> } */
254
254
evaluateIdentifier : new HookMap ( ( ) => new SyncBailHook ( [ "expression" ] ) ) ,
@@ -1211,7 +1211,7 @@ class JavascriptParser extends Parser {
1211
1211
}
1212
1212
} ) ;
1213
1213
/**
1214
- * @param {string } exprType expression type name
1214
+ * @param {"Identifier" | "ThisExpression" | "MemberExpression" } exprType expression type name
1215
1215
* @param {function(Expression | SpreadElement): GetInfoResult | undefined } getInfo get info
1216
1216
* @returns {void }
1217
1217
*/
@@ -1221,9 +1221,10 @@ class JavascriptParser extends Parser {
1221
1221
/** @type {GetInfoResult | undefined } */
1222
1222
let cachedInfo ;
1223
1223
this . hooks . evaluate . for ( exprType ) . tap ( "JavascriptParser" , expr => {
1224
- const expression = /** @type {MemberExpression } */ ( expr ) ;
1224
+ const expression =
1225
+ /** @type {Identifier | ThisExpression | MemberExpression } */ ( expr ) ;
1225
1226
1226
- const info = getInfo ( expr ) ;
1227
+ const info = getInfo ( expression ) ;
1227
1228
if ( info !== undefined ) {
1228
1229
return this . callHooksForInfoWithFallback (
1229
1230
this . hooks . evaluateIdentifier ,
@@ -1245,7 +1246,11 @@ class JavascriptParser extends Parser {
1245
1246
this . hooks . evaluate
1246
1247
. for ( exprType )
1247
1248
. tap ( { name : "JavascriptParser" , stage : 100 } , expr => {
1248
- const info = cachedExpression === expr ? cachedInfo : getInfo ( expr ) ;
1249
+ const expression =
1250
+ /** @type {Identifier | ThisExpression | MemberExpression } */
1251
+ ( expr ) ;
1252
+ const info =
1253
+ cachedExpression === expression ? cachedInfo : getInfo ( expression ) ;
1249
1254
if ( info !== undefined ) {
1250
1255
return new BasicEvaluatedExpression ( )
1251
1256
. setIdentifier (
@@ -1255,7 +1260,7 @@ class JavascriptParser extends Parser {
1255
1260
info . getMembersOptionals ,
1256
1261
info . getMemberRanges
1257
1262
)
1258
- . setRange ( /** @type {Range } */ ( expr . range ) ) ;
1263
+ . setRange ( /** @type {Range } */ ( expression . range ) ) ;
1259
1264
}
1260
1265
} ) ;
1261
1266
this . hooks . finish . tap ( "JavascriptParser" , ( ) => {
@@ -1298,7 +1303,7 @@ class JavascriptParser extends Parser {
1298
1303
1299
1304
return this . callHooksForName (
1300
1305
this . hooks . evaluateIdentifier ,
1301
- getRootName ( expr ) ,
1306
+ getRootName ( metaProperty ) ,
1302
1307
metaProperty
1303
1308
) ;
1304
1309
} ) ;
@@ -2365,12 +2370,13 @@ class JavascriptParser extends Parser {
2365
2370
! this . hooks . importSpecifier . call (
2366
2371
statement ,
2367
2372
source ,
2368
- specifier . imported . name ||
2369
- // eslint-disable-next-line no-warning-comments
2370
- // @ts -ignore
2371
- // Old version of acorn used it
2372
- // TODO drop it in webpack@6
2373
- specifier . imported . value ,
2373
+ /** @type {Identifier } */
2374
+ ( specifier . imported ) . name ||
2375
+ /** @type {string } */
2376
+ (
2377
+ /** @type {Literal } */
2378
+ ( specifier . imported ) . value
2379
+ ) ,
2374
2380
name
2375
2381
)
2376
2382
) {
@@ -2446,25 +2452,28 @@ class JavascriptParser extends Parser {
2446
2452
const specifier = statement . specifiers [ specifierIndex ] ;
2447
2453
switch ( specifier . type ) {
2448
2454
case "ExportSpecifier" : {
2455
+ const localName =
2456
+ /** @type {Identifier } */ ( specifier . local ) . name ||
2457
+ /** @type {string } */ (
2458
+ /** @type {Literal } */ ( specifier . local ) . value
2459
+ ) ;
2449
2460
const name =
2450
- specifier . exported . name ||
2451
- // eslint-disable-next-line no-warning-comments
2452
- // @ts -ignore
2453
- // Old version of acorn used it
2454
- // TODO drop it in webpack@6
2455
- specifier . exported . value ;
2461
+ /** @type {Identifier } */
2462
+ ( specifier . exported ) . name ||
2463
+ /** @type {string } */
2464
+ ( /** @type {Literal } */ ( specifier . exported ) . value ) ;
2456
2465
if ( source ) {
2457
2466
this . hooks . exportImportSpecifier . call (
2458
2467
statement ,
2459
2468
source ,
2460
- specifier . local . name ,
2469
+ localName ,
2461
2470
name ,
2462
2471
specifierIndex
2463
2472
) ;
2464
2473
} else {
2465
2474
this . hooks . exportSpecifier . call (
2466
2475
statement ,
2467
- specifier . local . name ,
2476
+ localName ,
2468
2477
name ,
2469
2478
specifierIndex
2470
2479
) ;
@@ -2567,7 +2576,12 @@ class JavascriptParser extends Parser {
2567
2576
*/
2568
2577
blockPreWalkExportAllDeclaration ( statement ) {
2569
2578
const source = /** @type {ImportSource } */ ( statement . source . value ) ;
2570
- const name = statement . exported ? statement . exported . name : null ;
2579
+ const name = statement . exported
2580
+ ? /** @type {Identifier } */
2581
+ ( statement . exported ) . name ||
2582
+ /** @type {string } */
2583
+ ( /** @type {Literal } */ ( statement . exported ) . value )
2584
+ : null ;
2571
2585
this . hooks . exportImport . call ( statement , source ) ;
2572
2586
this . hooks . exportImportSpecifier . call ( statement , source , null , name , 0 ) ;
2573
2587
}
@@ -4033,7 +4047,7 @@ class JavascriptParser extends Parser {
4033
4047
}
4034
4048
4035
4049
/**
4036
- * @param {Expression | SpreadElement } expression expression node
4050
+ * @param {Expression | SpreadElement | PrivateIdentifier } expression expression node
4037
4051
* @returns {BasicEvaluatedExpression } evaluation result
4038
4052
*/
4039
4053
evaluateExpression ( expression ) {
@@ -4064,7 +4078,7 @@ class JavascriptParser extends Parser {
4064
4078
case "BinaryExpression" :
4065
4079
if ( expression . operator === "+" ) {
4066
4080
return (
4067
- this . parseString ( expression . left ) +
4081
+ this . parseString ( /** @type { Expression } */ ( expression . left ) ) +
4068
4082
this . parseString ( expression . right )
4069
4083
) ;
4070
4084
}
@@ -4079,13 +4093,16 @@ class JavascriptParser extends Parser {
4079
4093
4080
4094
/**
4081
4095
* @param {Expression } expression expression
4082
- * @returns {TODO } result
4096
+ * @returns {{ range: Range, value: string, code: boolean, conditional: TODO } } result
4083
4097
*/
4084
4098
parseCalculatedString ( expression ) {
4085
4099
switch ( expression . type ) {
4086
4100
case "BinaryExpression" :
4087
4101
if ( expression . operator === "+" ) {
4088
- const left = this . parseCalculatedString ( expression . left ) ;
4102
+ const left = this . parseCalculatedString (
4103
+ /** @type {Expression } */
4104
+ ( expression . left )
4105
+ ) ;
4089
4106
const right = this . parseCalculatedString ( expression . right ) ;
4090
4107
if ( left . code ) {
4091
4108
return {
0 commit comments