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
@@ -16,6 +16,26 @@ const DynamicExports = require("./DynamicExports");
16
16
  const LocalModuleDependency = require("./LocalModuleDependency");
17
17
  const { addLocalModule, getLocalModule } = require("./LocalModulesHelpers");
18
18
 
19
+ /** @typedef {import("estree").ArrowFunctionExpression} ArrowFunctionExpression */
20
+ /** @typedef {import("estree").CallExpression} CallExpression */
21
+ /** @typedef {import("estree").Expression} Expression */
22
+ /** @typedef {import("estree").FunctionExpression} FunctionExpression */
23
+ /** @typedef {import("estree").Identifier} Identifier */
24
+ /** @typedef {import("estree").Literal} Literal */
25
+ /** @typedef {import("estree").MemberExpression} MemberExpression */
26
+ /** @typedef {import("estree").ObjectExpression} ObjectExpression */
27
+ /** @typedef {import("estree").SimpleCallExpression} SimpleCallExpression */
28
+ /** @typedef {import("estree").SpreadElement} SpreadElement */
29
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
30
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
31
+ /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
32
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
33
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
34
+
35
+ /**
36
+ * @param {Expression | SpreadElement} expr expression
37
+ * @returns {expr is CallExpression} true if it's a bound function expression
38
+ */
19
39
  const isBoundFunctionExpression = expr => {
20
40
  if (expr.type !== "CallExpression") return false;
21
41
  if (expr.callee.type !== "MemberExpression") return false;
@@ -26,12 +46,22 @@ const isBoundFunctionExpression = expr => {
26
46
  return true;
27
47
  };
28
48
 
49
+ /** @typedef {FunctionExpression | ArrowFunctionExpression} UnboundFunctionExpression */
50
+
51
+ /**
52
+ * @param {Expression | SpreadElement} expr expression
53
+ * @returns {expr is FunctionExpression | ArrowFunctionExpression} true when unbound function expression
54
+ */
29
55
  const isUnboundFunctionExpression = expr => {
30
56
  if (expr.type === "FunctionExpression") return true;
31
57
  if (expr.type === "ArrowFunctionExpression") return true;
32
58
  return false;
33
59
  };
34
60
 
61
+ /**
62
+ * @param {Expression | SpreadElement} expr expression
63
+ * @returns {expr is FunctionExpression | ArrowFunctionExpression | CallExpression} true when callable
64
+ */
35
65
  const isCallable = expr => {
36
66
  if (isUnboundFunctionExpression(expr)) return true;
37
67
  if (isBoundFunctionExpression(expr)) return true;
@@ -39,10 +69,17 @@ const isCallable = expr => {
39
69
  };
40
70
 
41
71
  class AMDDefineDependencyParserPlugin {
72
+ /**
73
+ * @param {JavascriptParserOptions} options parserOptions
74
+ */
42
75
  constructor(options) {
43
76
  this.options = options;
44
77
  }
45
78
 
79
+ /**
80
+ * @param {JavascriptParser} parser the parser
81
+ * @returns {void}
82
+ */
46
83
  apply(parser) {
47
84
  parser.hooks.call
48
85
  .for("define")
@@ -52,94 +89,144 @@ class AMDDefineDependencyParserPlugin {
52
89
  );
53
90
  }
54
91
 
92
+ /**
93
+ * @param {JavascriptParser} parser the parser
94
+ * @param {CallExpression} expr call expression
95
+ * @param {BasicEvaluatedExpression} param param
96
+ * @param {Record<number, string>} identifiers identifiers
97
+ * @param {string=} namedModule named module
98
+ * @returns {boolean | undefined} result
99
+ */
55
100
  processArray(parser, expr, param, identifiers, namedModule) {
56
101
  if (param.isArray()) {
57
- param.items.forEach((param, idx) => {
102
+ const items = /** @type {BasicEvaluatedExpression[]} */ (param.items);
103
+ for (const [idx, item] of items.entries()) {
58
104
  if (
59
- param.isString() &&
60
- ["require", "module", "exports"].includes(param.string)
105
+ item.isString() &&
106
+ ["require", "module", "exports"].includes(
107
+ /** @type {string} */ (item.string)
108
+ )
61
109
  )
62
- identifiers[idx] = param.string;
63
- const result = this.processItem(parser, expr, param, namedModule);
110
+ identifiers[/** @type {number} */ (idx)] = /** @type {string} */ (
111
+ item.string
112
+ );
113
+ const result = this.processItem(parser, expr, item, namedModule);
64
114
  if (result === undefined) {
65
- this.processContext(parser, expr, param);
115
+ this.processContext(parser, expr, item);
66
116
  }
67
- });
117
+ }
68
118
  return true;
69
119
  } else if (param.isConstArray()) {
120
+ /** @type {(string | LocalModuleDependency | AMDRequireItemDependency)[]} */
70
121
  const deps = [];
71
- param.array.forEach((request, idx) => {
122
+ const array = /** @type {string[]} */ (param.array);
123
+ for (const [idx, request] of array.entries()) {
72
124
  let dep;
73
125
  let localModule;
74
126
  if (request === "require") {
75
127
  identifiers[idx] = request;
76
- dep = "__webpack_require__";
128
+ dep = RuntimeGlobals.require;
77
129
  } else if (["exports", "module"].includes(request)) {
78
130
  identifiers[idx] = request;
79
131
  dep = request;
80
132
  } else if ((localModule = getLocalModule(parser.state, request))) {
81
133
  localModule.flagUsed();
82
134
  dep = new LocalModuleDependency(localModule, undefined, false);
83
- dep.loc = expr.loc;
135
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
84
136
  parser.state.module.addPresentationalDependency(dep);
85
137
  } else {
86
138
  dep = this.newRequireItemDependency(request);
87
- dep.loc = expr.loc;
88
- dep.optional = !!parser.scope.inTry;
139
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
140
+ dep.optional = Boolean(parser.scope.inTry);
89
141
  parser.state.current.addDependency(dep);
90
142
  }
91
143
  deps.push(dep);
92
- });
93
- const dep = this.newRequireArrayDependency(deps, param.range);
94
- dep.loc = expr.loc;
95
- dep.optional = !!parser.scope.inTry;
144
+ }
145
+ const dep = this.newRequireArrayDependency(
146
+ deps,
147
+ /** @type {Range} */ (param.range)
148
+ );
149
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
150
+ dep.optional = Boolean(parser.scope.inTry);
96
151
  parser.state.module.addPresentationalDependency(dep);
97
152
  return true;
98
153
  }
99
154
  }
155
+
156
+ /**
157
+ * @param {JavascriptParser} parser the parser
158
+ * @param {CallExpression} expr call expression
159
+ * @param {BasicEvaluatedExpression} param param
160
+ * @param {string=} namedModule named module
161
+ * @returns {boolean | undefined} result
162
+ */
100
163
  processItem(parser, expr, param, namedModule) {
101
164
  if (param.isConditional()) {
102
- param.options.forEach(param => {
103
- const result = this.processItem(parser, expr, param);
165
+ const options = /** @type {BasicEvaluatedExpression[]} */ (param.options);
166
+ for (const item of options) {
167
+ const result = this.processItem(parser, expr, item);
104
168
  if (result === undefined) {
105
- this.processContext(parser, expr, param);
169
+ this.processContext(parser, expr, item);
106
170
  }
107
- });
171
+ }
172
+
108
173
  return true;
109
174
  } else if (param.isString()) {
110
- let dep, localModule;
175
+ let dep;
176
+ let localModule;
177
+
111
178
  if (param.string === "require") {
112
- dep = new ConstDependency("__webpack_require__", param.range, [
113
- RuntimeGlobals.require
114
- ]);
179
+ dep = new ConstDependency(
180
+ RuntimeGlobals.require,
181
+ /** @type {Range} */ (param.range),
182
+ [RuntimeGlobals.require]
183
+ );
115
184
  } else if (param.string === "exports") {
116
- dep = new ConstDependency("exports", param.range, [
117
- RuntimeGlobals.exports
118
- ]);
185
+ dep = new ConstDependency(
186
+ "exports",
187
+ /** @type {Range} */ (param.range),
188
+ [RuntimeGlobals.exports]
189
+ );
119
190
  } else if (param.string === "module") {
120
- dep = new ConstDependency("module", param.range, [
121
- RuntimeGlobals.module
122
- ]);
191
+ dep = new ConstDependency(
192
+ "module",
193
+ /** @type {Range} */ (param.range),
194
+ [RuntimeGlobals.module]
195
+ );
123
196
  } else if (
124
- (localModule = getLocalModule(parser.state, param.string, namedModule))
197
+ (localModule = getLocalModule(
198
+ parser.state,
199
+ /** @type {string} */ (param.string),
200
+ namedModule
201
+ ))
125
202
  ) {
126
203
  localModule.flagUsed();
127
204
  dep = new LocalModuleDependency(localModule, param.range, false);
128
205
  } else {
129
- dep = this.newRequireItemDependency(param.string, param.range);
130
- dep.optional = !!parser.scope.inTry;
206
+ dep = this.newRequireItemDependency(
207
+ /** @type {string} */ (param.string),
208
+ param.range
209
+ );
210
+ dep.optional = Boolean(parser.scope.inTry);
131
211
  parser.state.current.addDependency(dep);
132
212
  return true;
133
213
  }
134
- dep.loc = expr.loc;
214
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
135
215
  parser.state.module.addPresentationalDependency(dep);
136
216
  return true;
137
217
  }
138
218
  }
219
+
220
+ /**
221
+ * @param {JavascriptParser} parser the parser
222
+ * @param {CallExpression} expr call expression
223
+ * @param {BasicEvaluatedExpression} param param
224
+ * @returns {boolean | undefined} result
225
+ */
139
226
  processContext(parser, expr, param) {
140
227
  const dep = ContextDependencyHelpers.create(
141
228
  AMDRequireContextDependency,
142
- param.range,
229
+ /** @type {Range} */ (param.range),
143
230
  param,
144
231
  expr,
145
232
  this.options,
@@ -149,14 +236,26 @@ class AMDDefineDependencyParserPlugin {
149
236
  parser
150
237
  );
151
238
  if (!dep) return;
152
- dep.loc = expr.loc;
153
- dep.optional = !!parser.scope.inTry;
239
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
240
+ dep.optional = Boolean(parser.scope.inTry);
154
241
  parser.state.current.addDependency(dep);
155
242
  return true;
156
243
  }
157
244
 
245
+ /**
246
+ * @param {JavascriptParser} parser the parser
247
+ * @param {CallExpression} expr call expression
248
+ * @returns {boolean | undefined} result
249
+ */
158
250
  processCallDefine(parser, expr) {
159
- let array, fn, obj, namedModule;
251
+ /** @type {TODO} */
252
+ let array;
253
+ /** @type {FunctionExpression | ArrowFunctionExpression | CallExpression | Identifier | undefined} */
254
+ let fn;
255
+ /** @type {ObjectExpression | Identifier | undefined} */
256
+ let obj;
257
+ /** @type {string | undefined} */
258
+ let namedModule;
160
259
  switch (expr.arguments.length) {
161
260
  case 1:
162
261
  if (isCallable(expr.arguments[0])) {
@@ -168,12 +267,12 @@ class AMDDefineDependencyParserPlugin {
168
267
  } else {
169
268
  // define(expr)
170
269
  // unclear if function or object
171
- obj = fn = expr.arguments[0];
270
+ obj = fn = /** @type {Identifier} */ (expr.arguments[0]);
172
271
  }
173
272
  break;
174
273
  case 2:
175
274
  if (expr.arguments[0].type === "Literal") {
176
- namedModule = expr.arguments[0].value;
275
+ namedModule = /** @type {string} */ (expr.arguments[0].value);
177
276
  // define("…", …)
178
277
  if (isCallable(expr.arguments[1])) {
179
278
  // define("…", f() {…})
@@ -184,7 +283,7 @@ class AMDDefineDependencyParserPlugin {
184
283
  } else {
185
284
  // define("…", expr)
186
285
  // unclear if function or object
187
- obj = fn = expr.arguments[1];
286
+ obj = fn = /** @type {Identifier} */ (expr.arguments[1]);
188
287
  }
189
288
  } else {
190
289
  array = expr.arguments[0];
@@ -197,13 +296,18 @@ class AMDDefineDependencyParserPlugin {
197
296
  } else {
198
297
  // define([…], expr)
199
298
  // unclear if function or object
200
- obj = fn = expr.arguments[1];
299
+ obj = fn = /** @type {Identifier} */ (expr.arguments[1]);
201
300
  }
202
301
  }
203
302
  break;
204
303
  case 3:
205
304
  // define("…", […], f() {…})
206
- namedModule = expr.arguments[0].value;
305
+ namedModule =
306
+ /** @type {string} */
307
+ (
308
+ /** @type {Literal} */
309
+ (expr.arguments[0]).value
310
+ );
207
311
  array = expr.arguments[1];
208
312
  if (isCallable(expr.arguments[2])) {
209
313
  // define("…", […], f() {})
@@ -214,28 +318,38 @@ class AMDDefineDependencyParserPlugin {
214
318
  } else {
215
319
  // define("…", […], expr)
216
320
  // unclear if function or object
217
- obj = fn = expr.arguments[2];
321
+ obj = fn = /** @type {Identifier} */ (expr.arguments[2]);
218
322
  }
219
323
  break;
220
324
  default:
221
325
  return;
222
326
  }
223
327
  DynamicExports.bailout(parser.state);
328
+ /** @type {Identifier[] | null} */
224
329
  let fnParams = null;
225
330
  let fnParamsOffset = 0;
226
331
  if (fn) {
227
332
  if (isUnboundFunctionExpression(fn)) {
228
- fnParams = fn.params;
333
+ fnParams =
334
+ /** @type {Identifier[]} */
335
+ (fn.params);
229
336
  } else if (isBoundFunctionExpression(fn)) {
230
- fnParams = fn.callee.object.params;
337
+ const object =
338
+ /** @type {FunctionExpression} */
339
+ (/** @type {MemberExpression} */ (fn.callee).object);
340
+
341
+ fnParams =
342
+ /** @type {Identifier[]} */
343
+ (object.params);
231
344
  fnParamsOffset = fn.arguments.length - 1;
232
345
  if (fnParamsOffset < 0) {
233
346
  fnParamsOffset = 0;
234
347
  }
235
348
  }
236
349
  }
237
- let fnRenames = new Map();
350
+ const fnRenames = new Map();
238
351
  if (array) {
352
+ /** @type {Record<number, string>} */
239
353
  const identifiers = {};
240
354
  const param = parser.evaluateExpression(array);
241
355
  const result = this.processArray(
@@ -267,6 +381,7 @@ class AMDDefineDependencyParserPlugin {
267
381
  });
268
382
  }
269
383
  }
384
+ /** @type {boolean | undefined} */
270
385
  let inTry;
271
386
  if (fn && isUnboundFunctionExpression(fn)) {
272
387
  inTry = parser.scope.inTry;
@@ -274,7 +389,7 @@ class AMDDefineDependencyParserPlugin {
274
389
  for (const [name, varInfo] of fnRenames) {
275
390
  parser.setVariable(name, varInfo);
276
391
  }
277
- parser.scope.inTry = inTry;
392
+ parser.scope.inTry = /** @type {boolean} */ (inTry);
278
393
  if (fn.body.type === "BlockStatement") {
279
394
  parser.detectMode(fn.body.body);
280
395
  const prev = parser.prevStatement;
@@ -287,23 +402,30 @@ class AMDDefineDependencyParserPlugin {
287
402
  });
288
403
  } else if (fn && isBoundFunctionExpression(fn)) {
289
404
  inTry = parser.scope.inTry;
405
+
406
+ const object =
407
+ /** @type {FunctionExpression} */
408
+ (/** @type {MemberExpression} */ (fn.callee).object);
409
+
290
410
  parser.inScope(
291
- fn.callee.object.params.filter(
411
+ /** @type {Identifier[]} */
412
+ (object.params).filter(
292
413
  i => !["require", "module", "exports"].includes(i.name)
293
414
  ),
294
415
  () => {
295
416
  for (const [name, varInfo] of fnRenames) {
296
417
  parser.setVariable(name, varInfo);
297
418
  }
298
- parser.scope.inTry = inTry;
299
- if (fn.callee.object.body.type === "BlockStatement") {
300
- parser.detectMode(fn.callee.object.body.body);
419
+ parser.scope.inTry = /** @type {boolean} */ (inTry);
420
+
421
+ if (object.body.type === "BlockStatement") {
422
+ parser.detectMode(object.body.body);
301
423
  const prev = parser.prevStatement;
302
- parser.preWalkStatement(fn.callee.object.body);
424
+ parser.preWalkStatement(object.body);
303
425
  parser.prevStatement = prev;
304
- parser.walkStatement(fn.callee.object.body);
426
+ parser.walkStatement(object.body);
305
427
  } else {
306
- parser.walkExpression(fn.callee.object.body);
428
+ parser.walkExpression(object.body);
307
429
  }
308
430
  }
309
431
  );
@@ -315,13 +437,13 @@ class AMDDefineDependencyParserPlugin {
315
437
  }
316
438
 
317
439
  const dep = this.newDefineDependency(
318
- expr.range,
319
- array ? array.range : null,
320
- fn ? fn.range : null,
321
- obj ? obj.range : null,
322
- namedModule ? namedModule : null
440
+ /** @type {Range} */ (expr.range),
441
+ array ? /** @type {Range} */ (array.range) : null,
442
+ fn ? /** @type {Range} */ (fn.range) : null,
443
+ obj ? /** @type {Range} */ (obj.range) : null,
444
+ namedModule || null
323
445
  );
324
- dep.loc = expr.loc;
446
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
325
447
  if (namedModule) {
326
448
  dep.localModule = addLocalModule(parser.state, namedModule);
327
449
  }
@@ -329,6 +451,14 @@ class AMDDefineDependencyParserPlugin {
329
451
  return true;
330
452
  }
331
453
 
454
+ /**
455
+ * @param {Range} range range
456
+ * @param {Range | null} arrayRange array range
457
+ * @param {Range | null} functionRange function range
458
+ * @param {Range | null} objectRange object range
459
+ * @param {string | null} namedModule true, when define is called with a name
460
+ * @returns {AMDDefineDependency} AMDDefineDependency
461
+ */
332
462
  newDefineDependency(
333
463
  range,
334
464
  arrayRange,
@@ -344,11 +474,24 @@ class AMDDefineDependencyParserPlugin {
344
474
  namedModule
345
475
  );
346
476
  }
477
+
478
+ /**
479
+ * @param {(string | LocalModuleDependency | AMDRequireItemDependency)[]} depsArray deps array
480
+ * @param {Range} range range
481
+ * @returns {AMDRequireArrayDependency} AMDRequireArrayDependency
482
+ */
347
483
  newRequireArrayDependency(depsArray, range) {
348
484
  return new AMDRequireArrayDependency(depsArray, range);
349
485
  }
486
+
487
+ /**
488
+ * @param {string} request request
489
+ * @param {Range=} range range
490
+ * @returns {AMDRequireItemDependency} AMDRequireItemDependency
491
+ */
350
492
  newRequireItemDependency(request, range) {
351
493
  return new AMDRequireItemDependency(request, range);
352
494
  }
353
495
  }
496
+
354
497
  module.exports = AMDDefineDependencyParserPlugin;
@@ -5,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
11
+ } = require("../ModuleTypeConstants");
8
12
  const RuntimeGlobals = require("../RuntimeGlobals");
9
13
  const {
10
14
  approve,
@@ -28,8 +32,14 @@ const ConstDependency = require("./ConstDependency");
28
32
  const LocalModuleDependency = require("./LocalModuleDependency");
29
33
  const UnsupportedDependency = require("./UnsupportedDependency");
30
34
 
35
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
31
36
  /** @typedef {import("../../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
32
37
  /** @typedef {import("../Compiler")} Compiler */
38
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
39
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
40
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
41
+
42
+ const PLUGIN_NAME = "AMDPlugin";
33
43
 
34
44
  class AMDPlugin {
35
45
  /**
@@ -47,7 +57,7 @@ class AMDPlugin {
47
57
  apply(compiler) {
48
58
  const amdOptions = this.amdOptions;
49
59
  compiler.hooks.compilation.tap(
50
- "AMDPlugin",
60
+ PLUGIN_NAME,
51
61
  (compilation, { contextModuleFactory, normalModuleFactory }) => {
52
62
  compilation.dependencyTemplates.set(
53
63
  AMDRequireDependency,
@@ -94,39 +104,49 @@ class AMDPlugin {
94
104
 
95
105
  compilation.hooks.runtimeRequirementInModule
96
106
  .for(RuntimeGlobals.amdDefine)
97
- .tap("AMDPlugin", (module, set) => {
107
+ .tap(PLUGIN_NAME, (module, set) => {
98
108
  set.add(RuntimeGlobals.require);
99
109
  });
100
110
 
101
111
  compilation.hooks.runtimeRequirementInModule
102
112
  .for(RuntimeGlobals.amdOptions)
103
- .tap("AMDPlugin", (module, set) => {
113
+ .tap(PLUGIN_NAME, (module, set) => {
104
114
  set.add(RuntimeGlobals.requireScope);
105
115
  });
106
116
 
107
117
  compilation.hooks.runtimeRequirementInTree
108
118
  .for(RuntimeGlobals.amdDefine)
109
- .tap("AMDPlugin", (chunk, set) => {
119
+ .tap(PLUGIN_NAME, (chunk, set) => {
110
120
  compilation.addRuntimeModule(chunk, new AMDDefineRuntimeModule());
111
121
  });
112
122
 
113
123
  compilation.hooks.runtimeRequirementInTree
114
124
  .for(RuntimeGlobals.amdOptions)
115
- .tap("AMDPlugin", (chunk, set) => {
125
+ .tap(PLUGIN_NAME, (chunk, set) => {
116
126
  compilation.addRuntimeModule(
117
127
  chunk,
118
128
  new AMDOptionsRuntimeModule(amdOptions)
119
129
  );
120
130
  });
121
131
 
132
+ /**
133
+ * @param {Parser} parser parser parser
134
+ * @param {JavascriptParserOptions} parserOptions parserOptions
135
+ * @returns {void}
136
+ */
122
137
  const handler = (parser, parserOptions) => {
123
138
  if (parserOptions.amd !== undefined && !parserOptions.amd) return;
124
139
 
140
+ /**
141
+ * @param {string} optionExpr option expression
142
+ * @param {string} rootName root name
143
+ * @param {function(): TODO} getMembers callback
144
+ */
125
145
  const tapOptionsHooks = (optionExpr, rootName, getMembers) => {
126
146
  parser.hooks.expression
127
147
  .for(optionExpr)
128
148
  .tap(
129
- "AMDPlugin",
149
+ PLUGIN_NAME,
130
150
  toConstantDependency(parser, RuntimeGlobals.amdOptions, [
131
151
  RuntimeGlobals.amdOptions
132
152
  ])
@@ -134,16 +154,16 @@ class AMDPlugin {
134
154
  parser.hooks.evaluateIdentifier
135
155
  .for(optionExpr)
136
156
  .tap(
137
- "AMDPlugin",
157
+ PLUGIN_NAME,
138
158
  evaluateToIdentifier(optionExpr, rootName, getMembers, true)
139
159
  );
140
160
  parser.hooks.evaluateTypeof
141
161
  .for(optionExpr)
142
- .tap("AMDPlugin", evaluateToString("object"));
162
+ .tap(PLUGIN_NAME, evaluateToString("object"));
143
163
  parser.hooks.typeof
144
164
  .for(optionExpr)
145
165
  .tap(
146
- "AMDPlugin",
166
+ PLUGIN_NAME,
147
167
  toConstantDependency(parser, JSON.stringify("object"))
148
168
  );
149
169
  };
@@ -161,53 +181,53 @@ class AMDPlugin {
161
181
  () => []
162
182
  );
163
183
 
164
- parser.hooks.expression.for("define").tap("AMDPlugin", expr => {
184
+ parser.hooks.expression.for("define").tap(PLUGIN_NAME, expr => {
165
185
  const dep = new ConstDependency(
166
186
  RuntimeGlobals.amdDefine,
167
- expr.range,
187
+ /** @type {Range} */ (expr.range),
168
188
  [RuntimeGlobals.amdDefine]
169
189
  );
170
- dep.loc = expr.loc;
190
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
171
191
  parser.state.module.addPresentationalDependency(dep);
172
192
  return true;
173
193
  });
174
194
  parser.hooks.typeof
175
195
  .for("define")
176
196
  .tap(
177
- "AMDPlugin",
197
+ PLUGIN_NAME,
178
198
  toConstantDependency(parser, JSON.stringify("function"))
179
199
  );
180
200
  parser.hooks.evaluateTypeof
181
201
  .for("define")
182
- .tap("AMDPlugin", evaluateToString("function"));
183
- parser.hooks.canRename.for("define").tap("AMDPlugin", approve);
184
- parser.hooks.rename.for("define").tap("AMDPlugin", expr => {
202
+ .tap(PLUGIN_NAME, evaluateToString("function"));
203
+ parser.hooks.canRename.for("define").tap(PLUGIN_NAME, approve);
204
+ parser.hooks.rename.for("define").tap(PLUGIN_NAME, expr => {
185
205
  const dep = new ConstDependency(
186
206
  RuntimeGlobals.amdDefine,
187
- expr.range,
207
+ /** @type {Range} */ (expr.range),
188
208
  [RuntimeGlobals.amdDefine]
189
209
  );
190
- dep.loc = expr.loc;
210
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
191
211
  parser.state.module.addPresentationalDependency(dep);
192
212
  return false;
193
213
  });
194
214
  parser.hooks.typeof
195
215
  .for("require")
196
216
  .tap(
197
- "AMDPlugin",
217
+ PLUGIN_NAME,
198
218
  toConstantDependency(parser, JSON.stringify("function"))
199
219
  );
200
220
  parser.hooks.evaluateTypeof
201
221
  .for("require")
202
- .tap("AMDPlugin", evaluateToString("function"));
222
+ .tap(PLUGIN_NAME, evaluateToString("function"));
203
223
  };
204
224
 
205
225
  normalModuleFactory.hooks.parser
206
- .for("javascript/auto")
207
- .tap("AMDPlugin", handler);
226
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
227
+ .tap(PLUGIN_NAME, handler);
208
228
  normalModuleFactory.hooks.parser
209
- .for("javascript/dynamic")
210
- .tap("AMDPlugin", handler);
229
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
230
+ .tap(PLUGIN_NAME, handler);
211
231
  }
212
232
  );
213
233
  }