webpack 5.92.1 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +36 -21
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +76 -69
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +5 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +104 -64
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +132 -70
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +12 -10
  94. package/lib/UseStrictPlugin.js +8 -1
  95. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  96. package/lib/WatchIgnorePlugin.js +26 -9
  97. package/lib/Watching.js +10 -5
  98. package/lib/WebpackOptionsApply.js +89 -62
  99. package/lib/asset/AssetGenerator.js +107 -42
  100. package/lib/asset/AssetModulesPlugin.js +29 -23
  101. package/lib/asset/AssetSourceGenerator.js +2 -7
  102. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  103. package/lib/buildChunkGraph.js +14 -19
  104. package/lib/cache/IdleFileCachePlugin.js +4 -4
  105. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  106. package/lib/cache/PackFileCacheStrategy.js +51 -50
  107. package/lib/cache/ResolverCachePlugin.js +6 -6
  108. package/lib/cache/mergeEtags.js +16 -21
  109. package/lib/cli.js +148 -104
  110. package/lib/config/browserslistTargetHandler.js +16 -13
  111. package/lib/config/defaults.js +31 -28
  112. package/lib/config/normalization.js +335 -344
  113. package/lib/config/target.js +42 -52
  114. package/lib/container/ContainerEntryModule.js +2 -2
  115. package/lib/container/ContainerPlugin.js +1 -1
  116. package/lib/container/RemoteRuntimeModule.js +11 -8
  117. package/lib/container/options.js +18 -4
  118. package/lib/css/CssExportsGenerator.js +39 -40
  119. package/lib/css/CssGenerator.js +11 -14
  120. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  121. package/lib/css/CssModulesPlugin.js +127 -47
  122. package/lib/css/CssParser.js +20 -18
  123. package/lib/css/walkCssTokens.js +80 -95
  124. package/lib/debug/ProfilingPlugin.js +19 -20
  125. package/lib/dependencies/AMDDefineDependency.js +1 -1
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  127. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  128. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  129. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  130. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  131. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  132. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  133. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  134. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  135. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  136. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  137. package/lib/dependencies/ConstDependency.js +1 -1
  138. package/lib/dependencies/ContextDependency.js +1 -1
  139. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  140. package/lib/dependencies/ContextElementDependency.js +2 -2
  141. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  142. package/lib/dependencies/CssExportDependency.js +72 -9
  143. package/lib/dependencies/CssImportDependency.js +0 -2
  144. package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
  145. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  146. package/lib/dependencies/CssUrlDependency.js +4 -5
  147. package/lib/dependencies/DynamicExports.js +5 -5
  148. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  149. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  150. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  151. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  152. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  153. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  154. package/lib/dependencies/HarmonyExports.js +2 -2
  155. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  156. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  157. package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
  158. package/lib/dependencies/ImportDependency.js +1 -1
  159. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  160. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  161. package/lib/dependencies/ImportParserPlugin.js +39 -44
  162. package/lib/dependencies/JsonExportsDependency.js +22 -18
  163. package/lib/dependencies/LoaderPlugin.js +47 -36
  164. package/lib/dependencies/LocalModule.js +1 -1
  165. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  166. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  167. package/lib/dependencies/ProvidedDependency.js +1 -1
  168. package/lib/dependencies/PureExpressionDependency.js +6 -6
  169. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  170. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  171. package/lib/dependencies/SystemPlugin.js +1 -1
  172. package/lib/dependencies/URLDependency.js +3 -3
  173. package/lib/dependencies/URLPlugin.js +66 -12
  174. package/lib/dependencies/WorkerPlugin.js +25 -24
  175. package/lib/dependencies/processExportInfo.js +3 -1
  176. package/lib/electron/ElectronTargetPlugin.js +1 -0
  177. package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
  178. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  179. package/lib/formatLocation.js +1 -2
  180. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  181. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  182. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  183. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  184. package/lib/hmr/lazyCompilationBackend.js +64 -40
  185. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  186. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  187. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  188. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  189. package/lib/ids/IdHelpers.js +29 -39
  190. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  191. package/lib/index.js +1 -5
  192. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
  193. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  194. package/lib/javascript/ChunkHelpers.js +1 -1
  195. package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
  196. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  197. package/lib/javascript/JavascriptGenerator.js +23 -7
  198. package/lib/javascript/JavascriptModulesPlugin.js +97 -70
  199. package/lib/javascript/JavascriptParser.js +179 -200
  200. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  201. package/lib/javascript/StartupHelpers.js +41 -13
  202. package/lib/json/JsonGenerator.js +7 -13
  203. package/lib/json/JsonModulesPlugin.js +1 -4
  204. package/lib/json/JsonParser.js +5 -3
  205. package/lib/library/AmdLibraryPlugin.js +12 -16
  206. package/lib/library/AssignLibraryPlugin.js +9 -11
  207. package/lib/library/EnableLibraryPlugin.js +25 -15
  208. package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
  209. package/lib/library/JsonpLibraryPlugin.js +2 -1
  210. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  211. package/lib/library/ModuleLibraryPlugin.js +2 -1
  212. package/lib/library/SystemLibraryPlugin.js +2 -1
  213. package/lib/library/UmdLibraryPlugin.js +66 -92
  214. package/lib/logging/Logger.js +32 -4
  215. package/lib/logging/createConsoleLogger.js +12 -13
  216. package/lib/logging/runtime.js +7 -8
  217. package/lib/logging/truncateArgs.js +5 -8
  218. package/lib/node/NodeWatchFileSystem.js +3 -18
  219. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  221. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  222. package/lib/node/nodeConsole.js +22 -22
  223. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  224. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  225. package/lib/optimize/ConcatenatedModule.js +144 -61
  226. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  227. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  228. package/lib/optimize/InnerGraph.js +17 -17
  229. package/lib/optimize/InnerGraphPlugin.js +8 -7
  230. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  231. package/lib/optimize/MangleExportsPlugin.js +1 -0
  232. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  233. package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
  234. package/lib/optimize/RealContentHashPlugin.js +7 -10
  235. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  236. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  237. package/lib/optimize/SplitChunksPlugin.js +34 -30
  238. package/lib/performance/SizeLimitsPlugin.js +2 -2
  239. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
  240. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  241. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  242. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  243. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  244. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  245. package/lib/rules/RuleSetCompiler.js +41 -22
  246. package/lib/rules/UseEffectRulePlugin.js +36 -32
  247. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  248. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  249. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  250. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  251. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  253. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  254. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  255. package/lib/schemes/DataUriPlugin.js +1 -1
  256. package/lib/schemes/HttpUriPlugin.js +241 -126
  257. package/lib/serialization/BinaryMiddleware.js +44 -28
  258. package/lib/serialization/DateObjectSerializer.js +1 -0
  259. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  260. package/lib/serialization/FileMiddleware.js +154 -106
  261. package/lib/serialization/MapObjectSerializer.js +2 -1
  262. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  263. package/lib/serialization/ObjectMiddleware.js +52 -56
  264. package/lib/serialization/PlainObjectSerializer.js +32 -6
  265. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  266. package/lib/serialization/Serializer.js +4 -5
  267. package/lib/serialization/SerializerMiddleware.js +6 -6
  268. package/lib/serialization/SetObjectSerializer.js +2 -1
  269. package/lib/sharing/ConsumeSharedModule.js +19 -14
  270. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  271. package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
  272. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  273. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  274. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  275. package/lib/sharing/utils.js +15 -27
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  277. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  279. package/lib/stats/StatsFactory.js +127 -56
  280. package/lib/stats/StatsPrinter.js +75 -44
  281. package/lib/util/ArrayHelpers.js +8 -4
  282. package/lib/util/ArrayQueue.js +1 -1
  283. package/lib/util/AsyncQueue.js +31 -12
  284. package/lib/util/IterableHelpers.js +3 -4
  285. package/lib/util/LazyBucketSortedSet.js +60 -44
  286. package/lib/util/LazySet.js +1 -0
  287. package/lib/util/MapHelpers.js +1 -3
  288. package/lib/util/ParallelismFactorCalculator.js +1 -1
  289. package/lib/util/Queue.js +1 -1
  290. package/lib/util/Semaphore.js +4 -7
  291. package/lib/util/SetHelpers.js +5 -5
  292. package/lib/util/SortableSet.js +4 -3
  293. package/lib/util/StackedCacheMap.js +4 -6
  294. package/lib/util/StackedMap.js +1 -3
  295. package/lib/util/StringXor.js +0 -5
  296. package/lib/util/TupleQueue.js +1 -1
  297. package/lib/util/TupleSet.js +15 -5
  298. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  299. package/lib/util/WeakTupleMap.js +19 -21
  300. package/lib/util/binarySearchBounds.js +5 -12
  301. package/lib/util/chainedImports.js +1 -1
  302. package/lib/util/cleverMerge.js +21 -19
  303. package/lib/util/comparators.js +57 -52
  304. package/lib/util/compileBooleanMatcher.js +3 -6
  305. package/lib/util/conventions.js +10 -13
  306. package/lib/util/createHash.js +9 -6
  307. package/lib/util/deprecation.js +22 -12
  308. package/lib/util/deterministicGrouping.js +19 -26
  309. package/lib/util/findGraphRoots.js +2 -2
  310. package/lib/util/fs.js +31 -31
  311. package/lib/util/hash/md4.js +2 -2
  312. package/lib/util/hash/wasm-hash.js +7 -7
  313. package/lib/util/hash/xxhash64.js +2 -2
  314. package/lib/util/identifier.js +81 -59
  315. package/lib/util/memoize.js +8 -10
  316. package/lib/util/mergeScope.js +6 -9
  317. package/lib/util/nonNumericOnlyHash.js +2 -2
  318. package/lib/util/numberHash.js +1 -6
  319. package/lib/util/objectToMap.js +0 -1
  320. package/lib/util/propertyAccess.js +2 -5
  321. package/lib/util/propertyName.js +1 -3
  322. package/lib/util/registerExternalSerializer.js +1 -1
  323. package/lib/util/runtime.js +103 -113
  324. package/lib/util/semver.js +29 -27
  325. package/lib/util/serialization.js +16 -1
  326. package/lib/util/smartGrouping.js +5 -5
  327. package/lib/util/source.js +1 -1
  328. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  329. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  330. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  331. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  332. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  333. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  334. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  336. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  337. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  338. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  339. package/package.json +17 -16
  340. package/schemas/WebpackOptions.check.js +1 -1
  341. package/schemas/WebpackOptions.json +17 -0
  342. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  343. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  344. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  345. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  346. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  347. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  348. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  349. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  350. package/types.d.ts +682 -347
@@ -159,11 +159,9 @@ class VariableInfo {
159
159
  * Helper function for joining two ranges into a single range. This is useful
160
160
  * when working with AST nodes, as it allows you to combine the ranges of child nodes
161
161
  * to create the range of the _parent node_.
162
- *
163
162
  * @param {[number, number]} startRange start range to join
164
163
  * @param {[number, number]} endRange end range to join
165
164
  * @returns {[number, number]} joined range
166
- *
167
165
  * @example
168
166
  * ```js
169
167
  * const startRange = [0, 5];
@@ -171,7 +169,6 @@ class VariableInfo {
171
169
  * const joinedRange = joinRanges(startRange, endRange);
172
170
  * console.log(joinedRange); // [0, 15]
173
171
  * ```
174
- *
175
172
  */
176
173
  const joinRanges = (startRange, endRange) => {
177
174
  if (!endRange) return startRange;
@@ -182,7 +179,6 @@ const joinRanges = (startRange, endRange) => {
182
179
  /**
183
180
  * Helper function used to generate a string representation of a
184
181
  * [member expression](https://github.com/estree/estree/blob/master/es5.md#memberexpression).
185
- *
186
182
  * @param {string} object object to name
187
183
  * @param {string[]} membersReversed reversed list of members
188
184
  * @returns {string} member expression as a string
@@ -193,12 +189,11 @@ const joinRanges = (startRange, endRange) => {
193
189
  *
194
190
  * console.log(name); // "myObject.property1.property2.property3"
195
191
  * ```
196
- *
197
192
  */
198
193
  const objectAndMembersToName = (object, membersReversed) => {
199
194
  let name = object;
200
195
  for (let i = membersReversed.length - 1; i >= 0; i--) {
201
- name = name + "." + membersReversed[i];
196
+ name = `${name}.${membersReversed[i]}`;
202
197
  }
203
198
  return name;
204
199
  };
@@ -209,8 +204,7 @@ const objectAndMembersToName = (object, membersReversed) => {
209
204
  * [ThisExpressions](https://github.com/estree/estree/blob/master/es5.md#identifier), and
210
205
  * [MetaProperties](https://github.com/estree/estree/blob/master/es2015.md#metaproperty) which is
211
206
  * specifically for handling the `new.target` meta property.
212
- *
213
- * @param {Expression | Super} expression expression
207
+ * @param {Expression | SpreadElement | Super} expression expression
214
208
  * @returns {string | "this" | undefined} name or variable info
215
209
  */
216
210
  const getRootName = expression => {
@@ -254,7 +248,7 @@ class JavascriptParser extends Parser {
254
248
  this.hooks = Object.freeze({
255
249
  /** @type {HookMap<SyncBailHook<[UnaryExpression], BasicEvaluatedExpression | undefined | null>>} */
256
250
  evaluateTypeof: new HookMap(() => new SyncBailHook(["expression"])),
257
- /** @type {HookMap<SyncBailHook<[Expression], BasicEvaluatedExpression | undefined | null>>} */
251
+ /** @type {HookMap<SyncBailHook<[Expression | SpreadElement], BasicEvaluatedExpression | undefined | null>>} */
258
252
  evaluate: new HookMap(() => new SyncBailHook(["expression"])),
259
253
  /** @type {HookMap<SyncBailHook<[Identifier | ThisExpression | MemberExpression | MetaProperty], BasicEvaluatedExpression | undefined | null>>} */
260
254
  evaluateIdentifier: new HookMap(() => new SyncBailHook(["expression"])),
@@ -504,7 +498,7 @@ class JavascriptParser extends Parser {
504
498
  )
505
499
  return;
506
500
 
507
- let regExp, flags;
501
+ let regExp;
508
502
  const arg1 = expr.arguments[0];
509
503
 
510
504
  if (arg1) {
@@ -518,11 +512,15 @@ class JavascriptParser extends Parser {
518
512
 
519
513
  if (!regExp) return;
520
514
  } else {
521
- return new BasicEvaluatedExpression()
522
- .setRegExp(new RegExp(""))
523
- .setRange(/** @type {Range} */ (expr.range));
515
+ return (
516
+ new BasicEvaluatedExpression()
517
+ // eslint-disable-next-line prefer-regex-literals
518
+ .setRegExp(new RegExp(""))
519
+ .setRange(/** @type {Range} */ (expr.range))
520
+ );
524
521
  }
525
522
 
523
+ let flags;
526
524
  const arg2 = expr.arguments[1];
527
525
 
528
526
  if (arg2) {
@@ -669,7 +667,6 @@ class JavascriptParser extends Parser {
669
667
 
670
668
  /**
671
669
  * Evaluates a binary expression if and only if it is a const operation (e.g. 1 + 2, "a" + "b", etc.).
672
- *
673
670
  * @template T
674
671
  * @param {(leftOperand: T, rightOperand: T) => boolean | number | bigint | string} operandHandler the handler for the operation (e.g. (a, b) => a + b)
675
672
  * @returns {BasicEvaluatedExpression | undefined} the evaluated expression
@@ -695,7 +692,6 @@ class JavascriptParser extends Parser {
695
692
  /**
696
693
  * Helper function to determine if two booleans are always different. This is used in `handleStrictEqualityComparison`
697
694
  * to determine if an expressions boolean or nullish conversion is equal or not.
698
- *
699
695
  * @param {boolean} a first boolean to compare
700
696
  * @param {boolean} b second boolean to compare
701
697
  * @returns {boolean} true if the two booleans are always different, false otherwise
@@ -984,7 +980,7 @@ class JavascriptParser extends Parser {
984
980
  res.setWrapped(
985
981
  left.prefix,
986
982
  new BasicEvaluatedExpression()
987
- .setString(right.number + "")
983
+ .setString(String(right.number))
988
984
  .setRange(/** @type {Range} */ (right.range)),
989
985
  left.wrappedInnerExpressions
990
986
  );
@@ -1013,25 +1009,23 @@ class JavascriptParser extends Parser {
1013
1009
  )
1014
1010
  );
1015
1011
  }
1012
+ } else if (right.isString()) {
1013
+ // left + "right"
1014
+ // => ([null] + left + "right")
1015
+ res.setWrapped(null, right, [left]);
1016
+ } else if (right.isWrapped()) {
1017
+ // left + (prefix + inner + "postfix")
1018
+ // => ([null] + left + prefix + inner + "postfix")
1019
+ res.setWrapped(
1020
+ null,
1021
+ right.postfix,
1022
+ right.wrappedInnerExpressions &&
1023
+ (right.prefix ? [left, right.prefix] : [left]).concat(
1024
+ right.wrappedInnerExpressions
1025
+ )
1026
+ );
1016
1027
  } else {
1017
- if (right.isString()) {
1018
- // left + "right"
1019
- // => ([null] + left + "right")
1020
- res.setWrapped(null, right, [left]);
1021
- } else if (right.isWrapped()) {
1022
- // left + (prefix + inner + "postfix")
1023
- // => ([null] + left + prefix + inner + "postfix")
1024
- res.setWrapped(
1025
- null,
1026
- right.postfix,
1027
- right.wrappedInnerExpressions &&
1028
- (right.prefix ? [left, right.prefix] : [left]).concat(
1029
- right.wrappedInnerExpressions
1030
- )
1031
- );
1032
- } else {
1033
- return;
1034
- }
1028
+ return;
1035
1029
  }
1036
1030
  if (left.couldHaveSideEffects() || right.couldHaveSideEffects())
1037
1031
  res.setSideEffects();
@@ -1082,7 +1076,6 @@ class JavascriptParser extends Parser {
1082
1076
 
1083
1077
  /**
1084
1078
  * Evaluates a UnaryExpression if and only if it is a basic const operator (e.g. +a, -a, ~a).
1085
- *
1086
1079
  * @template T
1087
1080
  * @param {(operand: T) => boolean | number | bigint | string} operandHandler handler for the operand
1088
1081
  * @returns {BasicEvaluatedExpression | undefined} evaluated expression
@@ -1197,16 +1190,19 @@ class JavascriptParser extends Parser {
1197
1190
  } else if (expr.operator === "~") {
1198
1191
  return handleConstOperation(v => ~v);
1199
1192
  } else if (expr.operator === "+") {
1193
+ // eslint-disable-next-line no-implicit-coercion
1200
1194
  return handleConstOperation(v => +v);
1201
1195
  } else if (expr.operator === "-") {
1202
1196
  return handleConstOperation(v => -v);
1203
1197
  }
1204
1198
  });
1205
- this.hooks.evaluateTypeof.for("undefined").tap("JavascriptParser", expr => {
1206
- return new BasicEvaluatedExpression()
1207
- .setString("undefined")
1208
- .setRange(/** @type {Range} */ (expr.range));
1209
- });
1199
+ this.hooks.evaluateTypeof
1200
+ .for("undefined")
1201
+ .tap("JavascriptParser", expr =>
1202
+ new BasicEvaluatedExpression()
1203
+ .setString("undefined")
1204
+ .setRange(/** @type {Range} */ (expr.range))
1205
+ );
1210
1206
  this.hooks.evaluate.for("Identifier").tap("JavascriptParser", expr => {
1211
1207
  if (/** @type {Identifier} */ (expr).name === "undefined") {
1212
1208
  return new BasicEvaluatedExpression()
@@ -1216,14 +1212,14 @@ class JavascriptParser extends Parser {
1216
1212
  });
1217
1213
  /**
1218
1214
  * @param {string} exprType expression type name
1219
- * @param {function(Expression): GetInfoResult | undefined} getInfo get info
1215
+ * @param {function(Expression | SpreadElement): GetInfoResult | undefined} getInfo get info
1220
1216
  * @returns {void}
1221
1217
  */
1222
1218
  const tapEvaluateWithVariableInfo = (exprType, getInfo) => {
1223
1219
  /** @type {Expression | undefined} */
1224
- let cachedExpression = undefined;
1220
+ let cachedExpression;
1225
1221
  /** @type {GetInfoResult | undefined} */
1226
- let cachedInfo = undefined;
1222
+ let cachedInfo;
1227
1223
  this.hooks.evaluate.for(exprType).tap("JavascriptParser", expr => {
1228
1224
  const expression = /** @type {MemberExpression} */ (expr);
1229
1225
 
@@ -1375,8 +1371,8 @@ class JavascriptParser extends Parser {
1375
1371
  if (expr.arguments.length !== 2) return;
1376
1372
  if (expr.arguments[0].type === "SpreadElement") return;
1377
1373
  if (expr.arguments[1].type === "SpreadElement") return;
1378
- let arg1 = this.evaluateExpression(expr.arguments[0]);
1379
- let arg2 = this.evaluateExpression(expr.arguments[1]);
1374
+ const arg1 = this.evaluateExpression(expr.arguments[0]);
1375
+ const arg2 = this.evaluateExpression(expr.arguments[1]);
1380
1376
  if (!arg1.isString() && !arg1.isRegExp()) return;
1381
1377
  const arg1Value = /** @type {string | RegExp} */ (
1382
1378
  arg1.regExp || arg1.string
@@ -1390,14 +1386,14 @@ class JavascriptParser extends Parser {
1390
1386
  .setSideEffects(param.couldHaveSideEffects())
1391
1387
  .setRange(/** @type {Range} */ (expr.range));
1392
1388
  });
1393
- ["substr", "substring", "slice"].forEach(fn => {
1389
+ for (const fn of ["substr", "substring", "slice"]) {
1394
1390
  this.hooks.evaluateCallExpressionMember
1395
1391
  .for(fn)
1396
1392
  .tap("JavascriptParser", (expr, param) => {
1397
1393
  if (!param.isString()) return;
1398
1394
  let arg1;
1399
- let result,
1400
- str = /** @type {string} */ (param.string);
1395
+ let result;
1396
+ const str = /** @type {string} */ (param.string);
1401
1397
  switch (expr.arguments.length) {
1402
1398
  case 1:
1403
1399
  if (expr.arguments[0].type === "SpreadElement") return;
@@ -1430,7 +1426,7 @@ class JavascriptParser extends Parser {
1430
1426
  .setSideEffects(param.couldHaveSideEffects())
1431
1427
  .setRange(/** @type {Range} */ (expr.range));
1432
1428
  });
1433
- });
1429
+ }
1434
1430
 
1435
1431
  /**
1436
1432
  * @param {"cooked" | "raw"} kind kind of values to get
@@ -1538,7 +1534,7 @@ class JavascriptParser extends Parser {
1538
1534
  /** @type {string} */
1539
1535
  const value = argExpr.isString()
1540
1536
  ? /** @type {string} */ (argExpr.string)
1541
- : "" + /** @type {number} */ (argExpr.number);
1537
+ : String(/** @type {number} */ (argExpr.number));
1542
1538
 
1543
1539
  /** @type {string} */
1544
1540
  const newString = value + (stringSuffix ? stringSuffix.string : "");
@@ -1572,18 +1568,17 @@ class JavascriptParser extends Parser {
1572
1568
  return new BasicEvaluatedExpression()
1573
1569
  .setWrapped(param.prefix, postfix, inner)
1574
1570
  .setRange(/** @type {Range} */ (expr.range));
1575
- } else {
1576
- const newString =
1577
- /** @type {string} */ (param.string) +
1578
- (stringSuffix ? stringSuffix.string : "");
1579
- return new BasicEvaluatedExpression()
1580
- .setString(newString)
1581
- .setSideEffects(
1582
- (stringSuffix && stringSuffix.couldHaveSideEffects()) ||
1583
- param.couldHaveSideEffects()
1584
- )
1585
- .setRange(/** @type {Range} */ (expr.range));
1586
1571
  }
1572
+ const newString =
1573
+ /** @type {string} */ (param.string) +
1574
+ (stringSuffix ? stringSuffix.string : "");
1575
+ return new BasicEvaluatedExpression()
1576
+ .setString(newString)
1577
+ .setSideEffects(
1578
+ (stringSuffix && stringSuffix.couldHaveSideEffects()) ||
1579
+ param.couldHaveSideEffects()
1580
+ )
1581
+ .setRange(/** @type {Range} */ (expr.range));
1587
1582
  });
1588
1583
  this.hooks.evaluateCallExpressionMember
1589
1584
  .for("split")
@@ -1649,13 +1644,12 @@ class JavascriptParser extends Parser {
1649
1644
  .tap("JavascriptParser", _expr => {
1650
1645
  const expr = /** @type {ArrayExpression} */ (_expr);
1651
1646
 
1652
- const items = expr.elements.map(element => {
1653
- return (
1647
+ const items = expr.elements.map(
1648
+ element =>
1654
1649
  element !== null &&
1655
1650
  element.type !== "SpreadElement" &&
1656
1651
  this.evaluateExpression(element)
1657
- );
1658
- });
1652
+ );
1659
1653
  if (!items.every(Boolean)) return;
1660
1654
  return new BasicEvaluatedExpression()
1661
1655
  .setItems(/** @type {BasicEvaluatedExpression[]} */ (items))
@@ -1712,7 +1706,7 @@ class JavascriptParser extends Parser {
1712
1706
  * @returns {Set<DestructuringAssignmentProperty> | undefined} destructured identifiers
1713
1707
  */
1714
1708
  destructuringAssignmentPropertiesFor(node) {
1715
- if (!this.destructuringAssignmentProperties) return undefined;
1709
+ if (!this.destructuringAssignmentProperties) return;
1716
1710
  return this.destructuringAssignmentProperties.get(node);
1717
1711
  }
1718
1712
 
@@ -1732,10 +1726,11 @@ class JavascriptParser extends Parser {
1732
1726
  * @returns {void}
1733
1727
  */
1734
1728
  walkClass(classy) {
1735
- if (classy.superClass) {
1736
- if (!this.hooks.classExtendsExpression.call(classy.superClass, classy)) {
1737
- this.walkExpression(classy.superClass);
1738
- }
1729
+ if (
1730
+ classy.superClass &&
1731
+ !this.hooks.classExtendsExpression.call(classy.superClass, classy)
1732
+ ) {
1733
+ this.walkExpression(classy.superClass);
1739
1734
  }
1740
1735
  if (classy.body && classy.body.type === "ClassBody") {
1741
1736
  const scopeParams = [];
@@ -1776,7 +1771,6 @@ class JavascriptParser extends Parser {
1776
1771
 
1777
1772
  /**
1778
1773
  * Pre walking iterates the scope for variable declarations
1779
- *
1780
1774
  * @param {(Statement | ModuleDeclaration)[]} statements statements
1781
1775
  */
1782
1776
  preWalkStatements(statements) {
@@ -1788,7 +1782,6 @@ class JavascriptParser extends Parser {
1788
1782
 
1789
1783
  /**
1790
1784
  * Block pre walking iterates the scope for block variable declarations
1791
- *
1792
1785
  * @param {(Statement | ModuleDeclaration)[]} statements statements
1793
1786
  */
1794
1787
  blockPreWalkStatements(statements) {
@@ -1800,7 +1793,6 @@ class JavascriptParser extends Parser {
1800
1793
 
1801
1794
  /**
1802
1795
  * Walking iterates the statements and expressions and processes them
1803
- *
1804
1796
  * @param {(Statement | ModuleDeclaration)[]} statements statements
1805
1797
  */
1806
1798
  walkStatements(statements) {
@@ -1812,7 +1804,6 @@ class JavascriptParser extends Parser {
1812
1804
 
1813
1805
  /**
1814
1806
  * Walking iterates the statements and expressions and processes them
1815
- *
1816
1807
  * @param {Statement | ModuleDeclaration} statement statement
1817
1808
  */
1818
1809
  preWalkStatement(statement) {
@@ -1974,7 +1965,6 @@ class JavascriptParser extends Parser {
1974
1965
  * Walks a statements that is nested within a parent statement
1975
1966
  * and can potentially be a non-block statement.
1976
1967
  * This enforces the nested statement to never be in ASI position.
1977
- *
1978
1968
  * @param {Statement} statement the nested statement
1979
1969
  */
1980
1970
  walkNestedStatement(statement) {
@@ -2031,12 +2021,10 @@ class JavascriptParser extends Parser {
2031
2021
  if (statement.alternate) {
2032
2022
  this.walkNestedStatement(statement.alternate);
2033
2023
  }
2034
- } else {
2035
- if (result) {
2036
- this.walkNestedStatement(statement.consequent);
2037
- } else if (statement.alternate) {
2038
- this.walkNestedStatement(statement.alternate);
2039
- }
2024
+ } else if (result) {
2025
+ this.walkNestedStatement(statement.consequent);
2026
+ } else if (statement.alternate) {
2027
+ this.walkNestedStatement(statement.alternate);
2040
2028
  }
2041
2029
  }
2042
2030
 
@@ -2168,10 +2156,8 @@ class JavascriptParser extends Parser {
2168
2156
  * @param {ForStatement} statement for statement
2169
2157
  */
2170
2158
  preWalkForStatement(statement) {
2171
- if (statement.init) {
2172
- if (statement.init.type === "VariableDeclaration") {
2173
- this.preWalkStatement(statement.init);
2174
- }
2159
+ if (statement.init && statement.init.type === "VariableDeclaration") {
2160
+ this.preWalkStatement(statement.init);
2175
2161
  }
2176
2162
  this.preWalkStatement(statement.body);
2177
2163
  }
@@ -2438,19 +2424,18 @@ class JavascriptParser extends Parser {
2438
2424
  } else {
2439
2425
  this.hooks.export.call(statement);
2440
2426
  }
2441
- if (statement.declaration) {
2442
- if (
2443
- !this.hooks.exportDeclaration.call(statement, statement.declaration)
2444
- ) {
2445
- const prev = this.prevStatement;
2446
- this.preWalkStatement(statement.declaration);
2447
- this.prevStatement = prev;
2448
- this.blockPreWalkStatement(statement.declaration);
2449
- let index = 0;
2450
- this.enterDeclaration(statement.declaration, def => {
2451
- this.hooks.exportSpecifier.call(statement, def, def, index++);
2452
- });
2453
- }
2427
+ if (
2428
+ statement.declaration &&
2429
+ !this.hooks.exportDeclaration.call(statement, statement.declaration)
2430
+ ) {
2431
+ const prev = this.prevStatement;
2432
+ this.preWalkStatement(statement.declaration);
2433
+ this.prevStatement = prev;
2434
+ this.blockPreWalkStatement(statement.declaration);
2435
+ let index = 0;
2436
+ this.enterDeclaration(statement.declaration, def => {
2437
+ this.hooks.exportSpecifier.call(statement, def, def, index++);
2438
+ });
2454
2439
  }
2455
2440
  if (statement.specifiers) {
2456
2441
  for (
@@ -3111,11 +3096,13 @@ class JavascriptParser extends Parser {
3111
3096
  currentStatement.expression === expression)
3112
3097
  ) {
3113
3098
  const old = /** @type {StatementPathItem} */ (this.statementPath.pop());
3099
+ const prev = this.prevStatement;
3114
3100
  for (const expr of expression.expressions) {
3115
3101
  this.statementPath.push(expr);
3116
3102
  this.walkExpression(expr);
3117
- this.statementPath.pop();
3103
+ this.prevStatement = this.statementPath.pop();
3118
3104
  }
3105
+ this.prevStatement = prev;
3119
3106
  this.statementPath.push(old);
3120
3107
  } else {
3121
3108
  this.walkExpressions(expression.expressions);
@@ -3176,10 +3163,8 @@ class JavascriptParser extends Parser {
3176
3163
  const result = this.hooks.expressionLogicalOperator.call(expression);
3177
3164
  if (result === undefined) {
3178
3165
  this.walkLeftRightExpression(expression);
3179
- } else {
3180
- if (result) {
3181
- this.walkExpression(expression.right);
3182
- }
3166
+ } else if (result) {
3167
+ this.walkExpression(expression.right);
3183
3168
  }
3184
3169
  }
3185
3170
 
@@ -3189,31 +3174,30 @@ class JavascriptParser extends Parser {
3189
3174
  walkAssignmentExpression(expression) {
3190
3175
  if (expression.left.type === "Identifier") {
3191
3176
  const renameIdentifier = this.getRenameIdentifier(expression.right);
3192
- if (renameIdentifier) {
3177
+ if (
3178
+ renameIdentifier &&
3179
+ this.callHooksForInfo(
3180
+ this.hooks.canRename,
3181
+ renameIdentifier,
3182
+ expression.right
3183
+ )
3184
+ ) {
3185
+ // renaming "a = b;"
3193
3186
  if (
3194
- this.callHooksForInfo(
3195
- this.hooks.canRename,
3187
+ !this.callHooksForInfo(
3188
+ this.hooks.rename,
3196
3189
  renameIdentifier,
3197
3190
  expression.right
3198
3191
  )
3199
3192
  ) {
3200
- // renaming "a = b;"
3201
- if (
3202
- !this.callHooksForInfo(
3203
- this.hooks.rename,
3204
- renameIdentifier,
3205
- expression.right
3206
- )
3207
- ) {
3208
- this.setVariable(
3209
- expression.left.name,
3210
- typeof renameIdentifier === "string"
3211
- ? this.getVariableInfo(renameIdentifier)
3212
- : renameIdentifier
3213
- );
3214
- }
3215
- return;
3193
+ this.setVariable(
3194
+ expression.left.name,
3195
+ typeof renameIdentifier === "string"
3196
+ ? this.getVariableInfo(renameIdentifier)
3197
+ : renameIdentifier
3198
+ );
3216
3199
  }
3200
+ return;
3217
3201
  }
3218
3202
  this.walkExpression(expression.right);
3219
3203
  this.enterPattern(expression.left, (name, decl) => {
@@ -3236,17 +3220,16 @@ class JavascriptParser extends Parser {
3236
3220
  expression.left,
3237
3221
  ALLOWED_MEMBER_TYPES_EXPRESSION
3238
3222
  );
3239
- if (exprName) {
3240
- if (
3241
- this.callHooksForInfo(
3242
- this.hooks.assignMemberChain,
3243
- exprName.rootInfo,
3244
- expression,
3245
- exprName.getMembers()
3246
- )
3247
- ) {
3248
- return;
3249
- }
3223
+ if (
3224
+ exprName &&
3225
+ this.callHooksForInfo(
3226
+ this.hooks.assignMemberChain,
3227
+ exprName.rootInfo,
3228
+ expression,
3229
+ exprName.getMembers()
3230
+ )
3231
+ ) {
3232
+ return;
3250
3233
  }
3251
3234
  this.walkExpression(expression.right);
3252
3235
  this.walkExpression(expression.left);
@@ -3267,12 +3250,10 @@ class JavascriptParser extends Parser {
3267
3250
  if (expression.alternate) {
3268
3251
  this.walkExpression(expression.alternate);
3269
3252
  }
3270
- } else {
3271
- if (result) {
3272
- this.walkExpression(expression.consequent);
3273
- } else if (expression.alternate) {
3274
- this.walkExpression(expression.alternate);
3275
- }
3253
+ } else if (result) {
3254
+ this.walkExpression(expression.consequent);
3255
+ } else if (expression.alternate) {
3256
+ this.walkExpression(expression.alternate);
3276
3257
  }
3277
3258
  }
3278
3259
 
@@ -3361,26 +3342,18 @@ class JavascriptParser extends Parser {
3361
3342
  const renameIdentifier = this.getRenameIdentifier(
3362
3343
  /** @type {Expression} */ (argOrThis)
3363
3344
  );
3364
- if (renameIdentifier) {
3365
- if (
3366
- this.callHooksForInfo(
3367
- this.hooks.canRename,
3368
- renameIdentifier,
3369
- argOrThis
3370
- )
3371
- ) {
3372
- if (
3373
- !this.callHooksForInfo(
3374
- this.hooks.rename,
3375
- renameIdentifier,
3376
- argOrThis
3377
- )
3378
- ) {
3379
- return typeof renameIdentifier === "string"
3380
- ? /** @type {string} */ (this.getVariableInfo(renameIdentifier))
3381
- : renameIdentifier;
3382
- }
3383
- }
3345
+ if (
3346
+ renameIdentifier &&
3347
+ this.callHooksForInfo(
3348
+ this.hooks.canRename,
3349
+ renameIdentifier,
3350
+ argOrThis
3351
+ ) &&
3352
+ !this.callHooksForInfo(this.hooks.rename, renameIdentifier, argOrThis)
3353
+ ) {
3354
+ return typeof renameIdentifier === "string"
3355
+ ? /** @type {string} */ (this.getVariableInfo(renameIdentifier))
3356
+ : renameIdentifier;
3384
3357
  }
3385
3358
  this.walkExpression(argOrThis);
3386
3359
  };
@@ -3429,7 +3402,7 @@ class JavascriptParser extends Parser {
3429
3402
  * @param {ImportExpression} expression import expression
3430
3403
  */
3431
3404
  walkImportExpression(expression) {
3432
- let result = this.hooks.importCall.call(expression);
3405
+ const result = this.hooks.importCall.call(expression);
3433
3406
  if (result === true) return;
3434
3407
 
3435
3408
  this.walkExpression(expression.source);
@@ -3439,9 +3412,8 @@ class JavascriptParser extends Parser {
3439
3412
  * @param {CallExpression} expression expression
3440
3413
  */
3441
3414
  walkCallExpression(expression) {
3442
- const isSimpleFunction = fn => {
3443
- return fn.params.every(p => p.type === "Identifier");
3444
- };
3415
+ const isSimpleFunction = fn =>
3416
+ fn.params.every(p => p.type === "Identifier");
3445
3417
  if (
3446
3418
  expression.callee.type === "MemberExpression" &&
3447
3419
  expression.callee.object.type.endsWith("FunctionExpression") &&
@@ -3656,6 +3628,7 @@ class JavascriptParser extends Parser {
3656
3628
  walkMetaProperty(metaProperty) {
3657
3629
  this.hooks.expression.for(getRootName(metaProperty)).call(metaProperty);
3658
3630
  }
3631
+
3659
3632
  /**
3660
3633
  * @template T
3661
3634
  * @template R
@@ -4060,7 +4033,7 @@ class JavascriptParser extends Parser {
4060
4033
  }
4061
4034
 
4062
4035
  /**
4063
- * @param {TODO} expression expression node
4036
+ * @param {Expression | SpreadElement} expression expression node
4064
4037
  * @returns {BasicEvaluatedExpression} evaluation result
4065
4038
  */
4066
4039
  evaluateExpression(expression) {
@@ -4073,8 +4046,8 @@ class JavascriptParser extends Parser {
4073
4046
  return result;
4074
4047
  }
4075
4048
  }
4076
- } catch (e) {
4077
- console.warn(e);
4049
+ } catch (err) {
4050
+ console.warn(err);
4078
4051
  // ignore error
4079
4052
  }
4080
4053
  return new BasicEvaluatedExpression()
@@ -4097,10 +4070,10 @@ class JavascriptParser extends Parser {
4097
4070
  }
4098
4071
  break;
4099
4072
  case "Literal":
4100
- return expression.value + "";
4073
+ return String(expression.value);
4101
4074
  }
4102
4075
  throw new Error(
4103
- expression.type + " is not supported as parameter for require"
4076
+ `${expression.type} is not supported as parameter for require`
4104
4077
  );
4105
4078
  }
4106
4079
 
@@ -4131,14 +4104,13 @@ class JavascriptParser extends Parser {
4131
4104
  code: true,
4132
4105
  conditional: false
4133
4106
  };
4134
- } else {
4135
- return {
4136
- range: [left.range[0], right.range[1]],
4137
- value: left.value + right.value,
4138
- code: false,
4139
- conditional: false
4140
- };
4141
4107
  }
4108
+ return {
4109
+ range: [left.range[0], right.range[1]],
4110
+ value: left.value + right.value,
4111
+ code: false,
4112
+ conditional: false
4113
+ };
4142
4114
  }
4143
4115
  break;
4144
4116
  case "ConditionalExpression": {
@@ -4169,7 +4141,7 @@ class JavascriptParser extends Parser {
4169
4141
  case "Literal":
4170
4142
  return {
4171
4143
  range: expression.range,
4172
- value: expression.value + "",
4144
+ value: String(expression.value),
4173
4145
  code: false,
4174
4146
  conditional: false
4175
4147
  };
@@ -4256,7 +4228,7 @@ class JavascriptParser extends Parser {
4256
4228
  * @returns {BasicEvaluatedExpression} evaluation result
4257
4229
  */
4258
4230
  evaluate(source) {
4259
- const ast = JavascriptParser._parse("(" + source + ")", {
4231
+ const ast = JavascriptParser._parse(`(${source})`, {
4260
4232
  sourceType: this.sourceType,
4261
4233
  locations: false
4262
4234
  });
@@ -4409,7 +4381,7 @@ class JavascriptParser extends Parser {
4409
4381
  const comments = /** @type {Comment[]} */ (this.comments);
4410
4382
  let idx = binarySearchBounds.ge(comments, rangeStart, compare);
4411
4383
  /** @type {Comment[]} */
4412
- let commentsInRange = [];
4384
+ const commentsInRange = [];
4413
4385
  while (
4414
4386
  comments[idx] &&
4415
4387
  /** @type {Range} */ (comments[idx].range)[1] <= rangeEnd
@@ -4444,6 +4416,14 @@ class JavascriptParser extends Parser {
4444
4416
  );
4445
4417
  }
4446
4418
 
4419
+ /**
4420
+ * @param {number} pos source code position
4421
+ * @returns {void}
4422
+ */
4423
+ setAsiPosition(pos) {
4424
+ /** @type {Set<number>} */ (this.semicolons).add(pos);
4425
+ }
4426
+
4447
4427
  /**
4448
4428
  * @param {number} pos source code position
4449
4429
  * @returns {void}
@@ -4551,9 +4531,8 @@ class JavascriptParser extends Parser {
4551
4531
  const value = this.scope.definitions.get(name);
4552
4532
  if (value === undefined) {
4553
4533
  return name;
4554
- } else {
4555
- return value;
4556
4534
  }
4535
+ return value;
4557
4536
  }
4558
4537
 
4559
4538
  /**
@@ -4593,9 +4572,9 @@ class JavascriptParser extends Parser {
4593
4572
  if (comments.length === 0) {
4594
4573
  return EMPTY_COMMENT_OPTIONS;
4595
4574
  }
4596
- let options = {};
4575
+ const options = {};
4597
4576
  /** @type {unknown[]} */
4598
- let errors = [];
4577
+ const errors = [];
4599
4578
  for (const comment of comments) {
4600
4579
  const { value } = comment;
4601
4580
  if (value && webpackCommentRegExp.test(value)) {
@@ -4608,14 +4587,16 @@ class JavascriptParser extends Parser {
4608
4587
  )
4609
4588
  )) {
4610
4589
  if (typeof val === "object" && val !== null) {
4611
- if (val.constructor.name === "RegExp") val = new RegExp(val);
4612
- else val = JSON.parse(JSON.stringify(val));
4590
+ val =
4591
+ val.constructor.name === "RegExp"
4592
+ ? new RegExp(val)
4593
+ : JSON.parse(JSON.stringify(val));
4613
4594
  }
4614
4595
  options[key] = val;
4615
4596
  }
4616
- } catch (e) {
4617
- const newErr = new Error(String(e.message));
4618
- newErr.stack = String(e.stack);
4597
+ } catch (err) {
4598
+ const newErr = new Error(String(err.message));
4599
+ newErr.stack = String(err.stack);
4619
4600
  Object.assign(newErr, { comment });
4620
4601
  errors.push(newErr);
4621
4602
  }
@@ -4665,9 +4646,9 @@ class JavascriptParser extends Parser {
4665
4646
  let name;
4666
4647
  if (info instanceof VariableInfo) {
4667
4648
  name = info.freeName;
4668
- if (typeof name !== "string") return undefined;
4649
+ if (typeof name !== "string") return;
4669
4650
  } else if (typeof info !== "string") {
4670
- return undefined;
4651
+ return;
4671
4652
  } else {
4672
4653
  name = info;
4673
4654
  }
@@ -4687,8 +4668,7 @@ class JavascriptParser extends Parser {
4687
4668
  this.extractMemberExpressionChain(expression);
4688
4669
  switch (object.type) {
4689
4670
  case "CallExpression": {
4690
- if ((allowedTypes & ALLOWED_MEMBER_TYPES_CALL_EXPRESSION) === 0)
4691
- return undefined;
4671
+ if ((allowedTypes & ALLOWED_MEMBER_TYPES_CALL_EXPRESSION) === 0) return;
4692
4672
  let callee = object.callee;
4693
4673
  let rootMembers = EMPTY_ARRAY;
4694
4674
  if (callee.type === "MemberExpression") {
@@ -4696,9 +4676,9 @@ class JavascriptParser extends Parser {
4696
4676
  this.extractMemberExpressionChain(callee));
4697
4677
  }
4698
4678
  const rootName = getRootName(callee);
4699
- if (!rootName) return undefined;
4679
+ if (!rootName) return;
4700
4680
  const result = this.getFreeInfoFromVariable(rootName);
4701
- if (!result) return undefined;
4681
+ if (!result) return;
4702
4682
  const { info: rootInfo, name: resolvedRoot } = result;
4703
4683
  const calleeName = objectAndMembersToName(resolvedRoot, rootMembers);
4704
4684
  return {
@@ -4716,13 +4696,12 @@ class JavascriptParser extends Parser {
4716
4696
  case "Identifier":
4717
4697
  case "MetaProperty":
4718
4698
  case "ThisExpression": {
4719
- if ((allowedTypes & ALLOWED_MEMBER_TYPES_EXPRESSION) === 0)
4720
- return undefined;
4699
+ if ((allowedTypes & ALLOWED_MEMBER_TYPES_EXPRESSION) === 0) return;
4721
4700
  const rootName = getRootName(object);
4722
- if (!rootName) return undefined;
4701
+ if (!rootName) return;
4723
4702
 
4724
4703
  const result = this.getFreeInfoFromVariable(rootName);
4725
- if (!result) return undefined;
4704
+ if (!result) return;
4726
4705
  const { info: rootInfo, name: resolvedRoot } = result;
4727
4706
  return {
4728
4707
  type: "expression",
@@ -4768,8 +4747,8 @@ class JavascriptParser extends Parser {
4768
4747
  let threw = false;
4769
4748
  try {
4770
4749
  ast = /** @type {AnyNode} */ (parser.parse(code, parserOptions));
4771
- } catch (e) {
4772
- error = e;
4750
+ } catch (err) {
4751
+ error = err;
4773
4752
  threw = true;
4774
4753
  }
4775
4754
 
@@ -4784,7 +4763,7 @@ class JavascriptParser extends Parser {
4784
4763
  try {
4785
4764
  ast = /** @type {AnyNode} */ (parser.parse(code, parserOptions));
4786
4765
  threw = false;
4787
- } catch (e) {
4766
+ } catch (_err) {
4788
4767
  // we use the error from first parse try
4789
4768
  // so nothing to do here
4790
4769
  }