webpack 5.59.0 → 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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -5,9 +5,12 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { fileURLToPath } = require("url");
8
9
  const CommentCompilationWarning = require("../CommentCompilationWarning");
9
10
  const RuntimeGlobals = require("../RuntimeGlobals");
10
11
  const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
12
+ const WebpackError = require("../WebpackError");
13
+ const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
11
14
  const {
12
15
  evaluateToIdentifier,
13
16
  evaluateToString,
@@ -26,7 +29,17 @@ const RequireResolveContextDependency = require("./RequireResolveContextDependen
26
29
  const RequireResolveDependency = require("./RequireResolveDependency");
27
30
  const RequireResolveHeaderDependency = require("./RequireResolveHeaderDependency");
28
31
 
32
+ /** @typedef {import("estree").CallExpression} CallExpression */
33
+ /** @typedef {import("estree").Expression} Expression */
34
+ /** @typedef {import("estree").NewExpression} NewExpression */
29
35
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
36
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
37
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
38
+ /** @typedef {import("../javascript/JavascriptParser").ImportSource} ImportSource */
39
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
40
+
41
+ const createRequireSpecifierTag = Symbol("createRequire");
42
+ const createdRequireIdentifierTag = Symbol("createRequire()");
30
43
 
31
44
  class CommonJsImportsParserPlugin {
32
45
  /**
@@ -36,54 +49,86 @@ class CommonJsImportsParserPlugin {
36
49
  this.options = options;
37
50
  }
38
51
 
52
+ /**
53
+ * @param {JavascriptParser} parser the parser
54
+ * @returns {void}
55
+ */
39
56
  apply(parser) {
40
57
  const options = this.options;
41
58
 
42
- // metadata //
59
+ const getContext = () => {
60
+ if (parser.currentTagData) {
61
+ const { context } = parser.currentTagData;
62
+ return context;
63
+ }
64
+ };
65
+
66
+ // #region metadata
67
+ /**
68
+ * @param {string} expression expression
69
+ * @param {() => string[]} getMembers get members
70
+ */
43
71
  const tapRequireExpression = (expression, getMembers) => {
44
72
  parser.hooks.typeof
45
73
  .for(expression)
46
74
  .tap(
47
- "CommonJsPlugin",
75
+ "CommonJsImportsParserPlugin",
48
76
  toConstantDependency(parser, JSON.stringify("function"))
49
77
  );
50
78
  parser.hooks.evaluateTypeof
51
79
  .for(expression)
52
- .tap("CommonJsPlugin", evaluateToString("function"));
80
+ .tap("CommonJsImportsParserPlugin", evaluateToString("function"));
53
81
  parser.hooks.evaluateIdentifier
54
82
  .for(expression)
55
83
  .tap(
56
- "CommonJsPlugin",
84
+ "CommonJsImportsParserPlugin",
57
85
  evaluateToIdentifier(expression, "require", getMembers, true)
58
86
  );
59
87
  };
88
+ /**
89
+ * @param {string | symbol} tag tag
90
+ */
91
+ const tapRequireExpressionTag = tag => {
92
+ parser.hooks.typeof
93
+ .for(tag)
94
+ .tap(
95
+ "CommonJsImportsParserPlugin",
96
+ toConstantDependency(parser, JSON.stringify("function"))
97
+ );
98
+ parser.hooks.evaluateTypeof
99
+ .for(tag)
100
+ .tap("CommonJsImportsParserPlugin", evaluateToString("function"));
101
+ };
60
102
  tapRequireExpression("require", () => []);
61
103
  tapRequireExpression("require.resolve", () => ["resolve"]);
62
104
  tapRequireExpression("require.resolveWeak", () => ["resolveWeak"]);
105
+ // #endregion
63
106
 
64
107
  // Weird stuff //
65
- parser.hooks.assign.for("require").tap("CommonJsPlugin", expr => {
66
- // to not leak to global "require", we need to define a local require here.
67
- const dep = new ConstDependency("var require;", 0);
68
- dep.loc = expr.loc;
69
- parser.state.module.addPresentationalDependency(dep);
70
- return true;
71
- });
108
+ parser.hooks.assign
109
+ .for("require")
110
+ .tap("CommonJsImportsParserPlugin", expr => {
111
+ // to not leak to global "require", we need to define a local require here.
112
+ const dep = new ConstDependency("var require;", 0);
113
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
114
+ parser.state.module.addPresentationalDependency(dep);
115
+ return true;
116
+ });
72
117
 
73
- // Unsupported //
118
+ // #region Unsupported
74
119
  parser.hooks.expression
75
- .for("require.main.require")
120
+ .for("require.main")
76
121
  .tap(
77
- "CommonJsPlugin",
122
+ "CommonJsImportsParserPlugin",
78
123
  expressionIsUnsupported(
79
124
  parser,
80
- "require.main.require is not supported by webpack."
125
+ "require.main is not supported by webpack."
81
126
  )
82
127
  );
83
128
  parser.hooks.call
84
129
  .for("require.main.require")
85
130
  .tap(
86
- "CommonJsPlugin",
131
+ "CommonJsImportsParserPlugin",
87
132
  expressionIsUnsupported(
88
133
  parser,
89
134
  "require.main.require is not supported by webpack."
@@ -92,7 +137,7 @@ class CommonJsImportsParserPlugin {
92
137
  parser.hooks.expression
93
138
  .for("module.parent.require")
94
139
  .tap(
95
- "CommonJsPlugin",
140
+ "CommonJsImportsParserPlugin",
96
141
  expressionIsUnsupported(
97
142
  parser,
98
143
  "module.parent.require is not supported by webpack."
@@ -101,89 +146,136 @@ class CommonJsImportsParserPlugin {
101
146
  parser.hooks.call
102
147
  .for("module.parent.require")
103
148
  .tap(
104
- "CommonJsPlugin",
149
+ "CommonJsImportsParserPlugin",
105
150
  expressionIsUnsupported(
106
151
  parser,
107
152
  "module.parent.require is not supported by webpack."
108
153
  )
109
154
  );
155
+ // #endregion
110
156
 
111
- // renaming //
112
- parser.hooks.canRename.for("require").tap("CommonJsPlugin", () => true);
113
- parser.hooks.rename.for("require").tap("CommonJsPlugin", expr => {
157
+ // #region Renaming
158
+ /**
159
+ * @param {Expression} expr expression
160
+ * @returns {boolean} true when set undefined
161
+ */
162
+ const defineUndefined = expr => {
114
163
  // To avoid "not defined" error, replace the value with undefined
115
- const dep = new ConstDependency("undefined", expr.range);
116
- dep.loc = expr.loc;
164
+ const dep = new ConstDependency(
165
+ "undefined",
166
+ /** @type {Range} */ (expr.range)
167
+ );
168
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
117
169
  parser.state.module.addPresentationalDependency(dep);
118
170
  return false;
119
- });
171
+ };
172
+ parser.hooks.canRename
173
+ .for("require")
174
+ .tap("CommonJsImportsParserPlugin", () => true);
175
+ parser.hooks.rename
176
+ .for("require")
177
+ .tap("CommonJsImportsParserPlugin", defineUndefined);
178
+ // #endregion
179
+
180
+ // #region Inspection
181
+ const requireCache = toConstantDependency(
182
+ parser,
183
+ RuntimeGlobals.moduleCache,
184
+ [
185
+ RuntimeGlobals.moduleCache,
186
+ RuntimeGlobals.moduleId,
187
+ RuntimeGlobals.moduleLoaded
188
+ ]
189
+ );
120
190
 
121
- // inspection //
122
191
  parser.hooks.expression
123
192
  .for("require.cache")
124
- .tap(
125
- "CommonJsImportsParserPlugin",
126
- toConstantDependency(parser, RuntimeGlobals.moduleCache, [
127
- RuntimeGlobals.moduleCache,
128
- RuntimeGlobals.moduleId,
129
- RuntimeGlobals.moduleLoaded
130
- ])
131
- );
193
+ .tap("CommonJsImportsParserPlugin", requireCache);
194
+ // #endregion
132
195
 
133
- // require as expression //
196
+ // #region Require as expression
197
+ /**
198
+ * @param {Expression} expr expression
199
+ * @returns {boolean} true when handled
200
+ */
201
+ const requireAsExpressionHandler = expr => {
202
+ const dep = new CommonJsRequireContextDependency(
203
+ {
204
+ request: options.unknownContextRequest,
205
+ recursive: options.unknownContextRecursive,
206
+ regExp: options.unknownContextRegExp,
207
+ mode: "sync"
208
+ },
209
+ /** @type {Range} */ (expr.range),
210
+ undefined,
211
+ parser.scope.inShorthand,
212
+ getContext()
213
+ );
214
+ dep.critical =
215
+ options.unknownContextCritical &&
216
+ "require function is used in a way in which dependencies cannot be statically extracted";
217
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
218
+ dep.optional = Boolean(parser.scope.inTry);
219
+ parser.state.current.addDependency(dep);
220
+ return true;
221
+ };
134
222
  parser.hooks.expression
135
223
  .for("require")
136
- .tap("CommonJsImportsParserPlugin", expr => {
137
- const dep = new CommonJsRequireContextDependency(
138
- {
139
- request: options.unknownContextRequest,
140
- recursive: options.unknownContextRecursive,
141
- regExp: options.unknownContextRegExp,
142
- mode: "sync"
143
- },
144
- expr.range
145
- );
146
- dep.critical =
147
- options.unknownContextCritical &&
148
- "require function is used in a way in which dependencies cannot be statically extracted";
149
- dep.loc = expr.loc;
150
- dep.optional = !!parser.scope.inTry;
151
- parser.state.current.addDependency(dep);
152
- return true;
153
- });
224
+ .tap("CommonJsImportsParserPlugin", requireAsExpressionHandler);
225
+ // #endregion
154
226
 
155
- // require //
227
+ // #region Require
228
+ /**
229
+ * @param {CallExpression | NewExpression} expr expression
230
+ * @param {BasicEvaluatedExpression} param param
231
+ * @returns {boolean | void} true when handled
232
+ */
156
233
  const processRequireItem = (expr, param) => {
157
234
  if (param.isString()) {
158
- const dep = new CommonJsRequireDependency(param.string, param.range);
159
- dep.loc = expr.loc;
160
- dep.optional = !!parser.scope.inTry;
235
+ const dep = new CommonJsRequireDependency(
236
+ /** @type {string} */ (param.string),
237
+ /** @type {Range} */ (param.range),
238
+ getContext()
239
+ );
240
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
241
+ dep.optional = Boolean(parser.scope.inTry);
161
242
  parser.state.current.addDependency(dep);
162
243
  return true;
163
244
  }
164
245
  };
246
+ /**
247
+ * @param {CallExpression | NewExpression} expr expression
248
+ * @param {BasicEvaluatedExpression} param param
249
+ * @returns {boolean | void} true when handled
250
+ */
165
251
  const processRequireContext = (expr, param) => {
166
252
  const dep = ContextDependencyHelpers.create(
167
253
  CommonJsRequireContextDependency,
168
- expr.range,
254
+ /** @type {Range} */ (expr.range),
169
255
  param,
170
256
  expr,
171
257
  options,
172
258
  {
173
259
  category: "commonjs"
174
260
  },
175
- parser
261
+ parser,
262
+ undefined,
263
+ getContext()
176
264
  );
177
265
  if (!dep) return;
178
- dep.loc = expr.loc;
179
- dep.optional = !!parser.scope.inTry;
266
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
267
+ dep.optional = Boolean(parser.scope.inTry);
180
268
  parser.state.current.addDependency(dep);
181
269
  return true;
182
270
  };
271
+ /**
272
+ * @param {boolean} callNew true, when require is called with new
273
+ * @returns {(expr: CallExpression | NewExpression) => (boolean | void)} handler
274
+ */
183
275
  const createRequireHandler = callNew => expr => {
184
276
  if (options.commonjsMagicComments) {
185
277
  const { options: requireOptions, errors: commentErrors } =
186
- parser.parseCommentOptions(expr.range);
278
+ parser.parseCommentOptions(/** @type {Range} */ (expr.range));
187
279
 
188
280
  if (commentErrors) {
189
281
  for (const e of commentErrors) {
@@ -196,21 +288,17 @@ class CommonJsImportsParserPlugin {
196
288
  );
197
289
  }
198
290
  }
199
- if (requireOptions) {
200
- if (requireOptions.webpackIgnore !== undefined) {
201
- if (typeof requireOptions.webpackIgnore !== "boolean") {
202
- parser.state.module.addWarning(
203
- new UnsupportedFeatureWarning(
204
- `\`webpackIgnore\` expected a boolean, but received: ${requireOptions.webpackIgnore}.`,
205
- expr.loc
206
- )
207
- );
208
- } else {
209
- // Do not instrument `require()` if `webpackIgnore` is `true`
210
- if (requireOptions.webpackIgnore) {
211
- return true;
212
- }
213
- }
291
+ if (requireOptions && requireOptions.webpackIgnore !== undefined) {
292
+ if (typeof requireOptions.webpackIgnore !== "boolean") {
293
+ parser.state.module.addWarning(
294
+ new UnsupportedFeatureWarning(
295
+ `\`webpackIgnore\` expected a boolean, but received: ${requireOptions.webpackIgnore}.`,
296
+ /** @type {DependencyLocation} */ (expr.loc)
297
+ )
298
+ );
299
+ } else if (requireOptions.webpackIgnore) {
300
+ // Do not instrument `require()` if `webpackIgnore` is `true`
301
+ return true;
214
302
  }
215
303
  }
216
304
  }
@@ -220,39 +308,51 @@ class CommonJsImportsParserPlugin {
220
308
  const param = parser.evaluateExpression(expr.arguments[0]);
221
309
  if (param.isConditional()) {
222
310
  let isExpression = false;
223
- for (const p of param.options) {
311
+ for (const p of /** @type {BasicEvaluatedExpression[]} */ (
312
+ param.options
313
+ )) {
224
314
  const result = processRequireItem(expr, p);
225
315
  if (result === undefined) {
226
316
  isExpression = true;
227
317
  }
228
318
  }
229
319
  if (!isExpression) {
230
- const dep = new RequireHeaderDependency(expr.callee.range);
231
- dep.loc = expr.loc;
320
+ const dep = new RequireHeaderDependency(
321
+ /** @type {Range} */ (expr.callee.range)
322
+ );
323
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
232
324
  parser.state.module.addPresentationalDependency(dep);
233
325
  return true;
234
326
  }
235
327
  }
236
328
  if (
237
329
  param.isString() &&
238
- (localModule = getLocalModule(parser.state, param.string))
330
+ (localModule = getLocalModule(
331
+ parser.state,
332
+ /** @type {string} */ (param.string)
333
+ ))
239
334
  ) {
240
335
  localModule.flagUsed();
241
- const dep = new LocalModuleDependency(localModule, expr.range, callNew);
242
- dep.loc = expr.loc;
336
+ const dep = new LocalModuleDependency(
337
+ localModule,
338
+ /** @type {Range} */ (expr.range),
339
+ callNew
340
+ );
341
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
243
342
  parser.state.module.addPresentationalDependency(dep);
244
- return true;
245
343
  } else {
246
344
  const result = processRequireItem(expr, param);
247
345
  if (result === undefined) {
248
346
  processRequireContext(expr, param);
249
347
  } else {
250
- const dep = new RequireHeaderDependency(expr.callee.range);
251
- dep.loc = expr.loc;
348
+ const dep = new RequireHeaderDependency(
349
+ /** @type {Range} */ (expr.callee.range)
350
+ );
351
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
252
352
  parser.state.module.addPresentationalDependency(dep);
253
353
  }
254
- return true;
255
354
  }
355
+ return true;
256
356
  };
257
357
  parser.hooks.call
258
358
  .for("require")
@@ -266,38 +366,79 @@ class CommonJsImportsParserPlugin {
266
366
  parser.hooks.new
267
367
  .for("module.require")
268
368
  .tap("CommonJsImportsParserPlugin", createRequireHandler(true));
369
+ // #endregion
269
370
 
270
- // require with property access //
271
- const chainHandler = (expr, calleeMembers, callExpr, members) => {
371
+ // #region Require with property access
372
+ /**
373
+ * @param {Expression} expr expression
374
+ * @param {string[]} calleeMembers callee members
375
+ * @param {CallExpression} callExpr call expression
376
+ * @param {string[]} members members
377
+ * @param {Range[]} memberRanges member ranges
378
+ * @returns {boolean | void} true when handled
379
+ */
380
+ const chainHandler = (
381
+ expr,
382
+ calleeMembers,
383
+ callExpr,
384
+ members,
385
+ memberRanges
386
+ ) => {
272
387
  if (callExpr.arguments.length !== 1) return;
273
388
  const param = parser.evaluateExpression(callExpr.arguments[0]);
274
- if (param.isString() && !getLocalModule(parser.state, param.string)) {
389
+ if (
390
+ param.isString() &&
391
+ !getLocalModule(parser.state, /** @type {string} */ (param.string))
392
+ ) {
275
393
  const dep = new CommonJsFullRequireDependency(
276
- param.string,
277
- expr.range,
278
- members
394
+ /** @type {string} */ (param.string),
395
+ /** @type {Range} */ (expr.range),
396
+ members,
397
+ /** @type {Range[]} */ memberRanges
398
+ );
399
+ dep.asiSafe = !parser.isAsiPosition(
400
+ /** @type {Range} */ (expr.range)[0]
279
401
  );
280
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
281
- dep.optional = !!parser.scope.inTry;
282
- dep.loc = expr.loc;
283
- parser.state.module.addDependency(dep);
402
+ dep.optional = Boolean(parser.scope.inTry);
403
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
404
+ parser.state.current.addDependency(dep);
284
405
  return true;
285
406
  }
286
407
  };
287
- const callChainHandler = (expr, calleeMembers, callExpr, members) => {
408
+ /**
409
+ * @param {CallExpression} expr expression
410
+ * @param {string[]} calleeMembers callee members
411
+ * @param {CallExpression} callExpr call expression
412
+ * @param {string[]} members members
413
+ * @param {Range[]} memberRanges member ranges
414
+ * @returns {boolean | void} true when handled
415
+ */
416
+ const callChainHandler = (
417
+ expr,
418
+ calleeMembers,
419
+ callExpr,
420
+ members,
421
+ memberRanges
422
+ ) => {
288
423
  if (callExpr.arguments.length !== 1) return;
289
424
  const param = parser.evaluateExpression(callExpr.arguments[0]);
290
- if (param.isString() && !getLocalModule(parser.state, param.string)) {
425
+ if (
426
+ param.isString() &&
427
+ !getLocalModule(parser.state, /** @type {string} */ (param.string))
428
+ ) {
291
429
  const dep = new CommonJsFullRequireDependency(
292
- param.string,
293
- expr.callee.range,
294
- members
430
+ /** @type {string} */ (param.string),
431
+ /** @type {Range} */ (expr.callee.range),
432
+ members,
433
+ /** @type {Range[]} */ memberRanges
295
434
  );
296
435
  dep.call = true;
297
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
298
- dep.optional = !!parser.scope.inTry;
299
- dep.loc = expr.callee.loc;
300
- parser.state.module.addDependency(dep);
436
+ dep.asiSafe = !parser.isAsiPosition(
437
+ /** @type {Range} */ (expr.range)[0]
438
+ );
439
+ dep.optional = Boolean(parser.scope.inTry);
440
+ dep.loc = /** @type {DependencyLocation} */ (expr.callee.loc);
441
+ parser.state.current.addDependency(dep);
301
442
  parser.walkExpressions(expr.arguments);
302
443
  return true;
303
444
  }
@@ -314,47 +455,74 @@ class CommonJsImportsParserPlugin {
314
455
  parser.hooks.callMemberChainOfCallMemberChain
315
456
  .for("module.require")
316
457
  .tap("CommonJsImportsParserPlugin", callChainHandler);
458
+ // #endregion
317
459
 
318
- // require.resolve //
460
+ // #region Require.resolve
461
+ /**
462
+ * @param {CallExpression} expr call expression
463
+ * @param {boolean} weak weak
464
+ * @returns {boolean | void} true when handled
465
+ */
319
466
  const processResolve = (expr, weak) => {
320
467
  if (expr.arguments.length !== 1) return;
321
468
  const param = parser.evaluateExpression(expr.arguments[0]);
322
469
  if (param.isConditional()) {
323
- for (const option of param.options) {
470
+ for (const option of /** @type {BasicEvaluatedExpression[]} */ (
471
+ param.options
472
+ )) {
324
473
  const result = processResolveItem(expr, option, weak);
325
474
  if (result === undefined) {
326
475
  processResolveContext(expr, option, weak);
327
476
  }
328
477
  }
329
- const dep = new RequireResolveHeaderDependency(expr.callee.range);
330
- dep.loc = expr.loc;
331
- parser.state.module.addPresentationalDependency(dep);
332
- return true;
333
- } else {
334
- const result = processResolveItem(expr, param, weak);
335
- if (result === undefined) {
336
- processResolveContext(expr, param, weak);
337
- }
338
- const dep = new RequireResolveHeaderDependency(expr.callee.range);
339
- dep.loc = expr.loc;
478
+ const dep = new RequireResolveHeaderDependency(
479
+ /** @type {Range} */ (expr.callee.range)
480
+ );
481
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
340
482
  parser.state.module.addPresentationalDependency(dep);
341
483
  return true;
342
484
  }
485
+ const result = processResolveItem(expr, param, weak);
486
+ if (result === undefined) {
487
+ processResolveContext(expr, param, weak);
488
+ }
489
+ const dep = new RequireResolveHeaderDependency(
490
+ /** @type {Range} */ (expr.callee.range)
491
+ );
492
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
493
+ parser.state.module.addPresentationalDependency(dep);
494
+ return true;
343
495
  };
496
+ /**
497
+ * @param {CallExpression} expr call expression
498
+ * @param {BasicEvaluatedExpression} param param
499
+ * @param {boolean} weak weak
500
+ * @returns {boolean | void} true when handled
501
+ */
344
502
  const processResolveItem = (expr, param, weak) => {
345
503
  if (param.isString()) {
346
- const dep = new RequireResolveDependency(param.string, param.range);
347
- dep.loc = expr.loc;
348
- dep.optional = !!parser.scope.inTry;
504
+ const dep = new RequireResolveDependency(
505
+ /** @type {string} */ (param.string),
506
+ /** @type {Range} */ (param.range),
507
+ getContext()
508
+ );
509
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
510
+ dep.optional = Boolean(parser.scope.inTry);
349
511
  dep.weak = weak;
350
512
  parser.state.current.addDependency(dep);
351
513
  return true;
352
514
  }
353
515
  };
516
+ /**
517
+ * @param {CallExpression} expr call expression
518
+ * @param {BasicEvaluatedExpression} param param
519
+ * @param {boolean} weak weak
520
+ * @returns {boolean | void} true when handled
521
+ */
354
522
  const processResolveContext = (expr, param, weak) => {
355
523
  const dep = ContextDependencyHelpers.create(
356
524
  RequireResolveContextDependency,
357
- param.range,
525
+ /** @type {Range} */ (param.range),
358
526
  param,
359
527
  expr,
360
528
  options,
@@ -362,25 +530,257 @@ class CommonJsImportsParserPlugin {
362
530
  category: "commonjs",
363
531
  mode: weak ? "weak" : "sync"
364
532
  },
365
- parser
533
+ parser,
534
+ getContext()
366
535
  );
367
536
  if (!dep) return;
368
- dep.loc = expr.loc;
369
- dep.optional = !!parser.scope.inTry;
537
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
538
+ dep.optional = Boolean(parser.scope.inTry);
370
539
  parser.state.current.addDependency(dep);
371
540
  return true;
372
541
  };
373
542
 
374
543
  parser.hooks.call
375
544
  .for("require.resolve")
376
- .tap("RequireResolveDependencyParserPlugin", expr => {
377
- return processResolve(expr, false);
378
- });
545
+ .tap("CommonJsImportsParserPlugin", expr => processResolve(expr, false));
379
546
  parser.hooks.call
380
547
  .for("require.resolveWeak")
381
- .tap("RequireResolveDependencyParserPlugin", expr => {
382
- return processResolve(expr, true);
548
+ .tap("CommonJsImportsParserPlugin", expr => processResolve(expr, true));
549
+ // #endregion
550
+
551
+ // #region Create require
552
+
553
+ if (!options.createRequire) return;
554
+
555
+ /** @type {ImportSource[]} */
556
+ let moduleName = [];
557
+ /** @type {string | undefined} */
558
+ let specifierName;
559
+
560
+ if (options.createRequire === true) {
561
+ moduleName = ["module", "node:module"];
562
+ specifierName = "createRequire";
563
+ } else {
564
+ let moduleName;
565
+ const match = /^(.*) from (.*)$/.exec(options.createRequire);
566
+ if (match) {
567
+ [, specifierName, moduleName] = match;
568
+ }
569
+ if (!specifierName || !moduleName) {
570
+ const err = new WebpackError(
571
+ `Parsing javascript parser option "createRequire" failed, got ${JSON.stringify(
572
+ options.createRequire
573
+ )}`
574
+ );
575
+ err.details =
576
+ 'Expected string in format "createRequire from module", where "createRequire" is specifier name and "module" name of the module';
577
+ throw err;
578
+ }
579
+ }
580
+
581
+ tapRequireExpressionTag(createdRequireIdentifierTag);
582
+ tapRequireExpressionTag(createRequireSpecifierTag);
583
+ parser.hooks.evaluateCallExpression
584
+ .for(createRequireSpecifierTag)
585
+ .tap("CommonJsImportsParserPlugin", expr => {
586
+ const context = parseCreateRequireArguments(expr);
587
+ if (context === undefined) return;
588
+ const ident = parser.evaluatedVariable({
589
+ tag: createdRequireIdentifierTag,
590
+ data: { context },
591
+ next: undefined
592
+ });
593
+ return new BasicEvaluatedExpression()
594
+ .setIdentifier(
595
+ /** @type {TODO} */ (ident),
596
+ /** @type {TODO} */ (ident),
597
+ () => []
598
+ )
599
+ .setSideEffects(false)
600
+ .setRange(/** @type {Range} */ (expr.range));
601
+ });
602
+ parser.hooks.unhandledExpressionMemberChain
603
+ .for(createdRequireIdentifierTag)
604
+ .tap("CommonJsImportsParserPlugin", (expr, members) =>
605
+ expressionIsUnsupported(
606
+ parser,
607
+ `createRequire().${members.join(".")} is not supported by webpack.`
608
+ )(expr)
609
+ );
610
+ parser.hooks.canRename
611
+ .for(createdRequireIdentifierTag)
612
+ .tap("CommonJsImportsParserPlugin", () => true);
613
+ parser.hooks.canRename
614
+ .for(createRequireSpecifierTag)
615
+ .tap("CommonJsImportsParserPlugin", () => true);
616
+ parser.hooks.rename
617
+ .for(createRequireSpecifierTag)
618
+ .tap("CommonJsImportsParserPlugin", defineUndefined);
619
+ parser.hooks.expression
620
+ .for(createdRequireIdentifierTag)
621
+ .tap("CommonJsImportsParserPlugin", requireAsExpressionHandler);
622
+ parser.hooks.call
623
+ .for(createdRequireIdentifierTag)
624
+ .tap("CommonJsImportsParserPlugin", createRequireHandler(false));
625
+ /**
626
+ * @param {CallExpression} expr call expression
627
+ * @returns {string | void} context
628
+ */
629
+ const parseCreateRequireArguments = expr => {
630
+ const args = expr.arguments;
631
+ if (args.length !== 1) {
632
+ const err = new WebpackError(
633
+ "module.createRequire supports only one argument."
634
+ );
635
+ err.loc = /** @type {DependencyLocation} */ (expr.loc);
636
+ parser.state.module.addWarning(err);
637
+ return;
638
+ }
639
+ const arg = args[0];
640
+ const evaluated = parser.evaluateExpression(arg);
641
+ if (!evaluated.isString()) {
642
+ const err = new WebpackError(
643
+ "module.createRequire failed parsing argument."
644
+ );
645
+ err.loc = /** @type {DependencyLocation} */ (arg.loc);
646
+ parser.state.module.addWarning(err);
647
+ return;
648
+ }
649
+ const ctx = /** @type {string} */ (evaluated.string).startsWith("file://")
650
+ ? fileURLToPath(/** @type {string} */ (evaluated.string))
651
+ : /** @type {string} */ (evaluated.string);
652
+ // argument always should be a filename
653
+ return ctx.slice(0, ctx.lastIndexOf(ctx.startsWith("/") ? "/" : "\\"));
654
+ };
655
+
656
+ parser.hooks.import.tap(
657
+ {
658
+ name: "CommonJsImportsParserPlugin",
659
+ stage: -10
660
+ },
661
+ (statement, source) => {
662
+ if (
663
+ !moduleName.includes(source) ||
664
+ statement.specifiers.length !== 1 ||
665
+ statement.specifiers[0].type !== "ImportSpecifier" ||
666
+ statement.specifiers[0].imported.type !== "Identifier" ||
667
+ statement.specifiers[0].imported.name !== specifierName
668
+ )
669
+ return;
670
+ // clear for 'import { createRequire as x } from "module"'
671
+ // if any other specifier was used import module
672
+ const clearDep = new ConstDependency(
673
+ parser.isAsiPosition(/** @type {Range} */ (statement.range)[0])
674
+ ? ";"
675
+ : "",
676
+ /** @type {Range} */ (statement.range)
677
+ );
678
+ clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
679
+ parser.state.module.addPresentationalDependency(clearDep);
680
+ parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
681
+ return true;
682
+ }
683
+ );
684
+ parser.hooks.importSpecifier.tap(
685
+ {
686
+ name: "CommonJsImportsParserPlugin",
687
+ stage: -10
688
+ },
689
+ (statement, source, id, name) => {
690
+ if (!moduleName.includes(source) || id !== specifierName) return;
691
+ parser.tagVariable(name, createRequireSpecifierTag);
692
+ return true;
693
+ }
694
+ );
695
+ parser.hooks.preDeclarator.tap(
696
+ "CommonJsImportsParserPlugin",
697
+ declarator => {
698
+ if (
699
+ declarator.id.type !== "Identifier" ||
700
+ !declarator.init ||
701
+ declarator.init.type !== "CallExpression" ||
702
+ declarator.init.callee.type !== "Identifier"
703
+ )
704
+ return;
705
+ const variableInfo =
706
+ /** @type {TODO} */
707
+ (parser.getVariableInfo(declarator.init.callee.name));
708
+ if (
709
+ variableInfo &&
710
+ variableInfo.tagInfo &&
711
+ variableInfo.tagInfo.tag === createRequireSpecifierTag
712
+ ) {
713
+ const context = parseCreateRequireArguments(declarator.init);
714
+ if (context === undefined) return;
715
+ parser.tagVariable(declarator.id.name, createdRequireIdentifierTag, {
716
+ name: declarator.id.name,
717
+ context
718
+ });
719
+ return true;
720
+ }
721
+ }
722
+ );
723
+
724
+ parser.hooks.memberChainOfCallMemberChain
725
+ .for(createRequireSpecifierTag)
726
+ .tap(
727
+ "CommonJsImportsParserPlugin",
728
+ (expr, calleeMembers, callExpr, members) => {
729
+ if (
730
+ calleeMembers.length !== 0 ||
731
+ members.length !== 1 ||
732
+ members[0] !== "cache"
733
+ )
734
+ return;
735
+ // createRequire().cache
736
+ const context = parseCreateRequireArguments(callExpr);
737
+ if (context === undefined) return;
738
+ return requireCache(expr);
739
+ }
740
+ );
741
+ parser.hooks.callMemberChainOfCallMemberChain
742
+ .for(createRequireSpecifierTag)
743
+ .tap(
744
+ "CommonJsImportsParserPlugin",
745
+ (expr, calleeMembers, innerCallExpression, members) => {
746
+ if (
747
+ calleeMembers.length !== 0 ||
748
+ members.length !== 1 ||
749
+ members[0] !== "resolve"
750
+ )
751
+ return;
752
+ // createRequire().resolve()
753
+ return processResolve(expr, false);
754
+ }
755
+ );
756
+ parser.hooks.expressionMemberChain
757
+ .for(createdRequireIdentifierTag)
758
+ .tap("CommonJsImportsParserPlugin", (expr, members) => {
759
+ // require.cache
760
+ if (members.length === 1 && members[0] === "cache") {
761
+ return requireCache(expr);
762
+ }
763
+ });
764
+ parser.hooks.callMemberChain
765
+ .for(createdRequireIdentifierTag)
766
+ .tap("CommonJsImportsParserPlugin", (expr, members) => {
767
+ // require.resolve()
768
+ if (members.length === 1 && members[0] === "resolve") {
769
+ return processResolve(expr, false);
770
+ }
771
+ });
772
+ parser.hooks.call
773
+ .for(createRequireSpecifierTag)
774
+ .tap("CommonJsImportsParserPlugin", expr => {
775
+ const clearDep = new ConstDependency(
776
+ "/* createRequire() */ undefined",
777
+ /** @type {Range} */ (expr.range)
778
+ );
779
+ clearDep.loc = /** @type {DependencyLocation} */ (expr.loc);
780
+ parser.state.module.addPresentationalDependency(clearDep);
781
+ return true;
383
782
  });
783
+ // #endregion
384
784
  }
385
785
  }
386
786
  module.exports = CommonJsImportsParserPlugin;