webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -5,42 +5,45 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const eslintScope = require("eslint-scope");
9
- const { SyncWaterfallHook, SyncHook, SyncBailHook } = require("tapable");
10
8
  const vm = require("vm");
9
+ const eslintScope = require("eslint-scope");
10
+ const { SyncBailHook, SyncHook, SyncWaterfallHook } = require("tapable");
11
11
  const {
12
+ CachedSource,
12
13
  ConcatSource,
13
14
  OriginalSource,
14
15
  PrefixSource,
15
16
  RawSource,
16
- CachedSource,
17
17
  ReplaceSource
18
18
  } = require("webpack-sources");
19
19
  const Compilation = require("../Compilation");
20
20
  const { tryRunOrWebpackError } = require("../HookWebpackError");
21
21
  const HotUpdateChunk = require("../HotUpdateChunk");
22
22
  const InitFragment = require("../InitFragment");
23
+ const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
23
24
  const {
24
25
  JAVASCRIPT_MODULE_TYPE_AUTO,
25
26
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
26
27
  JAVASCRIPT_MODULE_TYPE_ESM,
27
28
  WEBPACK_MODULE_TYPE_RUNTIME
28
29
  } = require("../ModuleTypeConstants");
30
+ const NormalModule = require("../NormalModule");
29
31
  const RuntimeGlobals = require("../RuntimeGlobals");
30
32
  const Template = require("../Template");
31
33
  const { last, someInIterable } = require("../util/IterableHelpers");
32
34
  const StringXor = require("../util/StringXor");
33
- const { compareModulesByIdentifier } = require("../util/comparators");
35
+ const { compareModulesByIdOrIdentifier } = require("../util/comparators");
34
36
  const {
35
- getPathInAst,
36
- getAllReferences,
37
37
  RESERVED_NAMES,
38
- findNewName,
39
38
  addScopeSymbols,
39
+ findNewName,
40
+ getAllReferences,
41
+ getPathInAst,
40
42
  getUsedNamesInScopeInfo
41
43
  } = require("../util/concatenate");
42
44
  const createHash = require("../util/createHash");
43
45
  const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
46
+ const removeBOM = require("../util/removeBOM");
44
47
  const { intersectRuntime } = require("../util/runtime");
45
48
  const JavascriptGenerator = require("./JavascriptGenerator");
46
49
  const JavascriptParser = require("./JavascriptParser");
@@ -48,13 +51,14 @@ const JavascriptParser = require("./JavascriptParser");
48
51
  /** @typedef {import("eslint-scope").Reference} Reference */
49
52
  /** @typedef {import("eslint-scope").Scope} Scope */
50
53
  /** @typedef {import("eslint-scope").Variable} Variable */
54
+ /** @typedef {import("estree").Program} Program */
51
55
  /** @typedef {import("webpack-sources").Source} Source */
52
- /** @typedef {import("../../declarations/WebpackOptions").Output} OutputOptions */
56
+ /** @typedef {import("../config/defaults").OutputNormalizedWithDefaults} OutputOptions */
53
57
  /** @typedef {import("../Chunk")} Chunk */
54
58
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
55
59
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
56
60
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
57
- /** @typedef {import("../Compilation").ModuleObject} ModuleObject */
61
+ /** @typedef {import("../Compilation").ExecuteModuleObject} ExecuteModuleObject */
58
62
  /** @typedef {import("../Compiler")} Compiler */
59
63
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
60
64
  /** @typedef {import("../Entrypoint")} Entrypoint */
@@ -66,7 +70,6 @@ const JavascriptParser = require("./JavascriptParser");
66
70
  /** @typedef {import("../WebpackError")} WebpackError */
67
71
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
68
72
  /** @typedef {import("../util/Hash")} Hash */
69
- /** @typedef {import("../util/createHash").Algorithm} Algorithm */
70
73
 
71
74
  /**
72
75
  * @param {Chunk} chunk a chunk
@@ -77,7 +80,7 @@ const chunkHasJs = (chunk, chunkGraph) => {
77
80
  if (chunkGraph.getNumberOfEntryModules(chunk) > 0) return true;
78
81
 
79
82
  return Boolean(
80
- chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
83
+ chunkGraph.getChunkModulesIterableBySourceType(chunk, JAVASCRIPT_TYPE)
81
84
  );
82
85
  };
83
86
 
@@ -92,11 +95,12 @@ const chunkHasRuntimeOrJs = (chunk, chunkGraph) => {
92
95
  chunk,
93
96
  WEBPACK_MODULE_TYPE_RUNTIME
94
97
  )
95
- )
98
+ ) {
96
99
  return true;
100
+ }
97
101
 
98
102
  return Boolean(
99
- chunkGraph.getChunkModulesIterableBySourceType(chunk, "javascript")
103
+ chunkGraph.getChunkModulesIterableBySourceType(chunk, JAVASCRIPT_TYPE)
100
104
  );
101
105
  };
102
106
 
@@ -113,10 +117,10 @@ const printGeneratedCodeForStack = (module, code) => {
113
117
  /**
114
118
  * @param {string} line the line
115
119
  * @param {number} i the index
116
- * @param {string[]} lines the lines
120
+ * @param {string[]} _lines the lines
117
121
  * @returns {string} the line with line number
118
122
  */
119
- (line, i, lines) => {
123
+ (line, i, _lines) => {
120
124
  const iStr = `${i + 1}`;
121
125
  return `${" ".repeat(n - iStr.length)}${iStr} | ${line}`;
122
126
  }
@@ -169,20 +173,46 @@ const printGeneratedCodeForStack = (module, code) => {
169
173
  * @property {string} hash hash to be used for render call
170
174
  */
171
175
 
172
- /** @typedef {RenderContext & { inlined: boolean }} StartupRenderContext */
176
+ /**
177
+ * @typedef {object} StartupRenderContext
178
+ * @property {Chunk} chunk the chunk
179
+ * @property {DependencyTemplates} dependencyTemplates the dependency templates
180
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
181
+ * @property {ModuleGraph} moduleGraph the module graph
182
+ * @property {ChunkGraph} chunkGraph the chunk graph
183
+ * @property {CodeGenerationResults} codeGenerationResults results of code generation
184
+ * @property {boolean | undefined} strictMode rendering in strict context
185
+ * @property {boolean} inlined inlined
186
+ * @property {boolean=} inlinedInIIFE the inlined entry module is wrapped in an IIFE
187
+ */
188
+
189
+ /**
190
+ * @typedef {object} ModuleRenderContext
191
+ * @property {Chunk} chunk the chunk
192
+ * @property {DependencyTemplates} dependencyTemplates the dependency templates
193
+ * @property {RuntimeTemplate} runtimeTemplate the runtime template
194
+ * @property {ModuleGraph} moduleGraph the module graph
195
+ * @property {ChunkGraph} chunkGraph the chunk graph
196
+ * @property {CodeGenerationResults} codeGenerationResults results of code generation
197
+ * @property {InitFragment<ChunkRenderContext>[]} chunkInitFragments init fragments for the chunk
198
+ * @property {boolean | undefined} strictMode rendering in strict context
199
+ * @property {boolean} factory true: renders as factory method, false: pure module content
200
+ * @property {boolean=} inlinedInIIFE the inlined entry module is wrapped in an IIFE, existing only when `factory` is set to false
201
+ * @property {boolean=} renderInObject render module in object container
202
+ */
173
203
 
174
204
  /**
175
205
  * @typedef {object} CompilationHooks
176
- * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModuleContent
177
- * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModuleContainer
178
- * @property {SyncWaterfallHook<[Source, Module, ChunkRenderContext]>} renderModulePackage
206
+ * @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContent
207
+ * @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModuleContainer
208
+ * @property {SyncWaterfallHook<[Source, Module, ModuleRenderContext]>} renderModulePackage
179
209
  * @property {SyncWaterfallHook<[Source, RenderContext]>} renderChunk
180
210
  * @property {SyncWaterfallHook<[Source, RenderContext]>} renderMain
181
211
  * @property {SyncWaterfallHook<[Source, RenderContext]>} renderContent
182
212
  * @property {SyncWaterfallHook<[Source, RenderContext]>} render
183
213
  * @property {SyncWaterfallHook<[Source, Module, StartupRenderContext]>} renderStartup
184
214
  * @property {SyncWaterfallHook<[string, RenderBootstrapContext]>} renderRequire
185
- * @property {SyncBailHook<[Module, RenderBootstrapContext], string | void>} inlineInRuntimeBailout
215
+ * @property {SyncBailHook<[Module, Partial<RenderBootstrapContext>], string | void>} inlineInRuntimeBailout
186
216
  * @property {SyncBailHook<[Module, RenderContext], string | void>} embedInRuntimeBailout
187
217
  * @property {SyncBailHook<[RenderContext], string | void>} strictRuntimeBailout
188
218
  * @property {SyncHook<[Chunk, Hash, ChunkHashContext]>} chunkHash
@@ -213,17 +243,17 @@ class JavascriptModulesPlugin {
213
243
  renderModuleContent: new SyncWaterfallHook([
214
244
  "source",
215
245
  "module",
216
- "renderContext"
246
+ "moduleRenderContext"
217
247
  ]),
218
248
  renderModuleContainer: new SyncWaterfallHook([
219
249
  "source",
220
250
  "module",
221
- "renderContext"
251
+ "moduleRenderContext"
222
252
  ]),
223
253
  renderModulePackage: new SyncWaterfallHook([
224
254
  "source",
225
255
  "module",
226
- "renderContext"
256
+ "moduleRenderContext"
227
257
  ]),
228
258
  render: new SyncWaterfallHook(["source", "renderContext"]),
229
259
  renderContent: new SyncWaterfallHook(["source", "renderContext"]),
@@ -248,7 +278,7 @@ class JavascriptModulesPlugin {
248
278
 
249
279
  constructor(options = {}) {
250
280
  this.options = options;
251
- /** @type {WeakMap<Source, TODO>} */
281
+ /** @type {WeakMap<Source, { source: Source, needModule:boolean, needExports: boolean, needRequire: boolean, needThisAsExports: boolean, needStrict: boolean | undefined, renderShorthand: boolean }>} */
252
282
  this._moduleFactoryCache = new WeakMap();
253
283
  }
254
284
 
@@ -262,24 +292,49 @@ class JavascriptModulesPlugin {
262
292
  PLUGIN_NAME,
263
293
  (compilation, { normalModuleFactory }) => {
264
294
  const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
265
- normalModuleFactory.hooks.createParser
266
- .for(JAVASCRIPT_MODULE_TYPE_AUTO)
267
- .tap(PLUGIN_NAME, options => new JavascriptParser("auto"));
268
- normalModuleFactory.hooks.createParser
269
- .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
270
- .tap(PLUGIN_NAME, options => new JavascriptParser("script"));
271
- normalModuleFactory.hooks.createParser
272
- .for(JAVASCRIPT_MODULE_TYPE_ESM)
273
- .tap(PLUGIN_NAME, options => new JavascriptParser("module"));
274
- normalModuleFactory.hooks.createGenerator
275
- .for(JAVASCRIPT_MODULE_TYPE_AUTO)
276
- .tap(PLUGIN_NAME, () => new JavascriptGenerator());
277
- normalModuleFactory.hooks.createGenerator
278
- .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
279
- .tap(PLUGIN_NAME, () => new JavascriptGenerator());
280
- normalModuleFactory.hooks.createGenerator
281
- .for(JAVASCRIPT_MODULE_TYPE_ESM)
282
- .tap(PLUGIN_NAME, () => new JavascriptGenerator());
295
+
296
+ for (const type of [
297
+ JAVASCRIPT_MODULE_TYPE_AUTO,
298
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
299
+ JAVASCRIPT_MODULE_TYPE_ESM
300
+ ]) {
301
+ normalModuleFactory.hooks.createParser
302
+ .for(type)
303
+ .tap(PLUGIN_NAME, (options) => {
304
+ switch (type) {
305
+ case JAVASCRIPT_MODULE_TYPE_AUTO: {
306
+ return new JavascriptParser("auto", { parse: options.parse });
307
+ }
308
+ case JAVASCRIPT_MODULE_TYPE_DYNAMIC: {
309
+ return new JavascriptParser("script", {
310
+ parse: options.parse
311
+ });
312
+ }
313
+ case JAVASCRIPT_MODULE_TYPE_ESM: {
314
+ return new JavascriptParser("module", {
315
+ parse: options.parse
316
+ });
317
+ }
318
+ }
319
+ });
320
+ normalModuleFactory.hooks.createGenerator
321
+ .for(type)
322
+ .tap(PLUGIN_NAME, () => new JavascriptGenerator());
323
+
324
+ NormalModule.getCompilationHooks(compilation).processResult.tap(
325
+ PLUGIN_NAME,
326
+ (result, module) => {
327
+ if (module.type === type) {
328
+ const [source, ...rest] = result;
329
+
330
+ return [removeBOM(source), ...rest];
331
+ }
332
+
333
+ return result;
334
+ }
335
+ );
336
+ }
337
+
283
338
  compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
284
339
  const {
285
340
  hash,
@@ -392,10 +447,9 @@ class JavascriptModulesPlugin {
392
447
  );
393
448
  }
394
449
  });
395
- compilation.hooks.contentHash.tap(PLUGIN_NAME, chunk => {
450
+ compilation.hooks.contentHash.tap(PLUGIN_NAME, (chunk) => {
396
451
  const {
397
452
  chunkGraph,
398
- codeGenerationResults,
399
453
  moduleGraph,
400
454
  runtimeTemplate,
401
455
  outputOptions: {
@@ -405,7 +459,10 @@ class JavascriptModulesPlugin {
405
459
  hashFunction
406
460
  }
407
461
  } = compilation;
408
- const hash = createHash(/** @type {Algorithm} */ (hashFunction));
462
+ const codeGenerationResults =
463
+ /** @type {CodeGenerationResults} */
464
+ (compilation.codeGenerationResults);
465
+ const hash = createHash(hashFunction);
409
466
  if (hashSalt) hash.update(hashSalt);
410
467
  if (chunk.hasRuntime()) {
411
468
  this.updateHashWithBootstrap(
@@ -432,7 +489,7 @@ class JavascriptModulesPlugin {
432
489
  });
433
490
  const modules = chunkGraph.getChunkModulesIterableBySourceType(
434
491
  chunk,
435
- "javascript"
492
+ JAVASCRIPT_TYPE
436
493
  );
437
494
  if (modules) {
438
495
  const xor = new StringXor();
@@ -452,11 +509,10 @@ class JavascriptModulesPlugin {
452
509
  }
453
510
  xor.updateHash(hash);
454
511
  }
455
- const digest = /** @type {string} */ (hash.digest(hashDigest));
512
+ const digest = hash.digest(hashDigest);
456
513
  chunk.contentHash.javascript = nonNumericOnlyHash(
457
514
  digest,
458
- /** @type {number} */
459
- (hashDigestLength)
515
+ hashDigestLength
460
516
  );
461
517
  });
462
518
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
@@ -473,7 +529,8 @@ class JavascriptModulesPlugin {
473
529
  }
474
530
  );
475
531
  compilation.hooks.executeModule.tap(PLUGIN_NAME, (options, context) => {
476
- const source = options.codeGenerationResult.sources.get("javascript");
532
+ const source =
533
+ options.codeGenerationResult.sources.get(JAVASCRIPT_TYPE);
477
534
  if (source === undefined) return;
478
535
  const { module } = options;
479
536
  const code = source.source();
@@ -487,7 +544,7 @@ class JavascriptModulesPlugin {
487
544
  );
488
545
 
489
546
  const moduleObject =
490
- /** @type {ModuleObject} */
547
+ /** @type {ExecuteModuleObject} */
491
548
  (options.moduleObject);
492
549
 
493
550
  try {
@@ -541,37 +598,39 @@ class JavascriptModulesPlugin {
541
598
  if (chunk.filenameTemplate) {
542
599
  return chunk.filenameTemplate;
543
600
  } else if (chunk instanceof HotUpdateChunk) {
544
- return /** @type {TemplatePath} */ (outputOptions.hotUpdateChunkFilename);
601
+ return outputOptions.hotUpdateChunkFilename;
545
602
  } else if (chunk.canBeInitial()) {
546
- return /** @type {TemplatePath} */ (outputOptions.filename);
603
+ return outputOptions.filename;
547
604
  }
548
- return /** @type {TemplatePath} */ (outputOptions.chunkFilename);
605
+ return outputOptions.chunkFilename;
549
606
  }
550
607
 
551
608
  /**
552
609
  * @param {Module} module the rendered module
553
- * @param {ChunkRenderContext} renderContext options object
610
+ * @param {ModuleRenderContext} renderContext options object
554
611
  * @param {CompilationHooks} hooks hooks
555
- * @param {boolean} factory true: renders as factory method, false: pure module content
556
612
  * @returns {Source | null} the newly generated source from rendering
557
613
  */
558
- renderModule(module, renderContext, hooks, factory) {
614
+ renderModule(module, renderContext, hooks) {
559
615
  const {
560
616
  chunk,
561
617
  chunkGraph,
562
618
  runtimeTemplate,
563
619
  codeGenerationResults,
564
- strictMode
620
+ strictMode,
621
+ factory,
622
+ renderInObject
565
623
  } = renderContext;
566
624
  try {
567
625
  const codeGenResult = codeGenerationResults.get(module, chunk.runtime);
568
- const moduleSource = codeGenResult.sources.get("javascript");
626
+ const moduleSource = codeGenResult.sources.get(JAVASCRIPT_TYPE);
569
627
  if (!moduleSource) return null;
570
628
  if (codeGenResult.data !== undefined) {
571
629
  const chunkInitFragments = codeGenResult.data.get("chunkInitFragments");
572
630
  if (chunkInitFragments) {
573
- for (const i of chunkInitFragments)
631
+ for (const i of chunkInitFragments) {
574
632
  renderContext.chunkInitFragments.push(i);
633
+ }
575
634
  }
576
635
  }
577
636
  const moduleSourcePostContent = tryRunOrWebpackError(
@@ -599,6 +658,8 @@ class JavascriptModulesPlugin {
599
658
  const cacheEntry = this._moduleFactoryCache.get(
600
659
  moduleSourcePostContent
601
660
  );
661
+ const renderShorthand =
662
+ renderInObject === true && runtimeTemplate.supportsMethodShorthand();
602
663
  let source;
603
664
  if (
604
665
  cacheEntry &&
@@ -606,35 +667,46 @@ class JavascriptModulesPlugin {
606
667
  cacheEntry.needExports === needExports &&
607
668
  cacheEntry.needRequire === needRequire &&
608
669
  cacheEntry.needThisAsExports === needThisAsExports &&
609
- cacheEntry.needStrict === needStrict
670
+ cacheEntry.needStrict === needStrict &&
671
+ cacheEntry.renderShorthand === renderShorthand
610
672
  ) {
611
673
  source = cacheEntry.source;
612
674
  } else {
613
675
  const factorySource = new ConcatSource();
614
676
  const args = [];
615
- if (needExports || needRequire || needModule)
677
+ if (needExports || needRequire || needModule) {
616
678
  args.push(
617
679
  needModule
618
680
  ? module.moduleArgument
619
681
  : `__unused_webpack_${module.moduleArgument}`
620
682
  );
621
- if (needExports || needRequire)
683
+ }
684
+ if (needExports || needRequire) {
622
685
  args.push(
623
686
  needExports
624
687
  ? module.exportsArgument
625
688
  : `__unused_webpack_${module.exportsArgument}`
626
689
  );
690
+ }
627
691
  if (needRequire) args.push(RuntimeGlobals.require);
628
- if (!needThisAsExports && runtimeTemplate.supportsArrowFunction()) {
692
+
693
+ if (renderShorthand) {
694
+ // we can optimize function to methodShorthand if render module factory in object
695
+ factorySource.add(`(${args.join(", ")}) {\n\n`);
696
+ } else if (
697
+ !needThisAsExports &&
698
+ runtimeTemplate.supportsArrowFunction()
699
+ ) {
629
700
  factorySource.add(`/***/ ((${args.join(", ")}) => {\n\n`);
630
701
  } else {
631
702
  factorySource.add(`/***/ (function(${args.join(", ")}) {\n\n`);
632
703
  }
704
+
633
705
  if (needStrict) {
634
706
  factorySource.add('"use strict";\n');
635
707
  }
636
708
  factorySource.add(moduleSourcePostContent);
637
- factorySource.add("\n\n/***/ })");
709
+ factorySource.add(`\n\n/***/ }${renderShorthand ? "" : ")"}`);
638
710
  source = new CachedSource(factorySource);
639
711
  this._moduleFactoryCache.set(moduleSourcePostContent, {
640
712
  source,
@@ -642,7 +714,8 @@ class JavascriptModulesPlugin {
642
714
  needExports,
643
715
  needRequire,
644
716
  needThisAsExports,
645
- needStrict
717
+ needStrict,
718
+ renderShorthand
646
719
  });
647
720
  }
648
721
  moduleSourcePostContainer = tryRunOrWebpackError(
@@ -677,15 +750,15 @@ class JavascriptModulesPlugin {
677
750
  const { chunk, chunkGraph } = renderContext;
678
751
  const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
679
752
  chunk,
680
- "javascript",
681
- compareModulesByIdentifier
753
+ JAVASCRIPT_TYPE,
754
+ compareModulesByIdOrIdentifier(chunkGraph)
682
755
  );
683
- const allModules = modules ? Array.from(modules) : [];
756
+ const allModules = modules ? [...modules] : [];
684
757
  let strictHeader;
685
758
  let allStrict = renderContext.strictMode;
686
759
  if (
687
760
  !allStrict &&
688
- allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
761
+ allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict)
689
762
  ) {
690
763
  const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
691
764
  strictHeader = strictBailout
@@ -700,8 +773,15 @@ class JavascriptModulesPlugin {
700
773
  strictMode: allStrict
701
774
  };
702
775
  const moduleSources =
703
- Template.renderChunkModules(chunkRenderContext, allModules, module =>
704
- this.renderModule(module, chunkRenderContext, hooks, true)
776
+ Template.renderChunkModules(
777
+ chunkRenderContext,
778
+ allModules,
779
+ (module, renderInObject) =>
780
+ this.renderModule(
781
+ module,
782
+ { ...chunkRenderContext, factory: true, renderInObject },
783
+ hooks
784
+ )
705
785
  ) || new RawSource("{}");
706
786
  let source = tryRunOrWebpackError(
707
787
  () => hooks.renderChunk.call(moduleSources, chunkRenderContext),
@@ -753,13 +833,14 @@ class JavascriptModulesPlugin {
753
833
  const bootstrap = this.renderBootstrap(renderContext, hooks);
754
834
  const useSourceMap = hooks.useSourceMap.call(chunk, renderContext);
755
835
 
756
- const allModules = Array.from(
757
- chunkGraph.getOrderedChunkModulesIterableBySourceType(
836
+ /** @type {Module[]} */
837
+ const allModules = [
838
+ ...(chunkGraph.getOrderedChunkModulesIterableBySourceType(
758
839
  chunk,
759
- "javascript",
760
- compareModulesByIdentifier
761
- ) || []
762
- );
840
+ JAVASCRIPT_TYPE,
841
+ compareModulesByIdOrIdentifier(chunkGraph)
842
+ ) || [])
843
+ ];
763
844
 
764
845
  const hasEntryModules = chunkGraph.getNumberOfEntryModules(chunk) > 0;
765
846
  /** @type {Set<Module> | undefined} */
@@ -783,7 +864,7 @@ class JavascriptModulesPlugin {
783
864
  let allStrict = renderContext.strictMode;
784
865
  if (
785
866
  !allStrict &&
786
- allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict)
867
+ allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict)
787
868
  ) {
788
869
  const strictBailout = hooks.strictRuntimeBailout.call(renderContext);
789
870
  if (strictBailout) {
@@ -809,10 +890,15 @@ class JavascriptModulesPlugin {
809
890
  chunkRenderContext,
810
891
  inlinedModules
811
892
  ? allModules.filter(
812
- m => !(/** @type {Set<Module>} */ (inlinedModules).has(m))
893
+ (m) => !(/** @type {Set<Module>} */ (inlinedModules).has(m))
813
894
  )
814
895
  : allModules,
815
- module => this.renderModule(module, chunkRenderContext, hooks, true),
896
+ (module, renderInObject) =>
897
+ this.renderModule(
898
+ module,
899
+ { ...chunkRenderContext, factory: true, renderInObject },
900
+ hooks
901
+ ),
816
902
  prefix
817
903
  );
818
904
  if (
@@ -884,8 +970,11 @@ class JavascriptModulesPlugin {
884
970
  const avoidEntryIife = compilation.options.optimization.avoidEntryIife;
885
971
  /** @type {Map<Module, Source> | false} */
886
972
  let renamedInlinedModule = false;
973
+ let inlinedInIIFE = false;
974
+
887
975
  if (avoidEntryIife) {
888
- renamedInlinedModule = this.getRenamedInlineModule(
976
+ renamedInlinedModule = this._getRenamedInlineModule(
977
+ compilation,
889
978
  allModules,
890
979
  renderContext,
891
980
  inlinedModules,
@@ -897,31 +986,46 @@ class JavascriptModulesPlugin {
897
986
  }
898
987
 
899
988
  for (const m of inlinedModules) {
989
+ const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
990
+ m,
991
+ chunk.runtime
992
+ );
993
+ const exports = runtimeRequirements.has(RuntimeGlobals.exports);
994
+ const webpackExports =
995
+ exports && m.exportsArgument === RuntimeGlobals.exports;
996
+
997
+ const innerStrict =
998
+ !allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
999
+
1000
+ const iife = innerStrict
1001
+ ? "it needs to be in strict mode."
1002
+ : inlinedModules.size > 1
1003
+ ? // TODO check globals and top-level declarations of other entries and chunk modules
1004
+ // to make a better decision
1005
+ "it needs to be isolated against other entry modules."
1006
+ : chunkModules && !renamedInlinedModule
1007
+ ? "it needs to be isolated against other modules in the chunk."
1008
+ : exports && !webpackExports
1009
+ ? `it uses a non-standard name for the exports (${m.exportsArgument}).`
1010
+ : hooks.embedInRuntimeBailout.call(m, renderContext);
1011
+
1012
+ if (iife) {
1013
+ inlinedInIIFE = true;
1014
+ }
1015
+
900
1016
  const renderedModule = renamedInlinedModule
901
1017
  ? renamedInlinedModule.get(m)
902
- : this.renderModule(m, chunkRenderContext, hooks, false);
1018
+ : this.renderModule(
1019
+ m,
1020
+ {
1021
+ ...chunkRenderContext,
1022
+ factory: false,
1023
+ inlinedInIIFE
1024
+ },
1025
+ hooks
1026
+ );
903
1027
 
904
1028
  if (renderedModule) {
905
- const innerStrict =
906
- !allStrict && /** @type {BuildInfo} */ (m.buildInfo).strict;
907
- const runtimeRequirements = chunkGraph.getModuleRuntimeRequirements(
908
- m,
909
- chunk.runtime
910
- );
911
- const exports = runtimeRequirements.has(RuntimeGlobals.exports);
912
- const webpackExports =
913
- exports && m.exportsArgument === RuntimeGlobals.exports;
914
- const iife = innerStrict
915
- ? "it needs to be in strict mode."
916
- : inlinedModules.size > 1
917
- ? // TODO check globals and top-level declarations of other entries and chunk modules
918
- // to make a better decision
919
- "it needs to be isolated against other entry modules."
920
- : chunkModules && !renamedInlinedModule
921
- ? "it needs to be isolated against other modules in the chunk."
922
- : exports && !webpackExports
923
- ? `it uses a non-standard name for the exports (${m.exportsArgument}).`
924
- : hooks.embedInRuntimeBailout.call(m, renderContext);
925
1029
  let footer;
926
1030
  if (iife !== undefined) {
927
1031
  startupSource.add(
@@ -940,12 +1044,13 @@ class JavascriptModulesPlugin {
940
1044
  footer = "\n";
941
1045
  }
942
1046
  if (exports) {
943
- if (m !== lastInlinedModule)
1047
+ if (m !== lastInlinedModule) {
944
1048
  startupSource.add(`var ${m.exportsArgument} = {};\n`);
945
- else if (m.exportsArgument !== RuntimeGlobals.exports)
1049
+ } else if (m.exportsArgument !== RuntimeGlobals.exports) {
946
1050
  startupSource.add(
947
1051
  `var ${m.exportsArgument} = ${RuntimeGlobals.exports};\n`
948
1052
  );
1053
+ }
949
1054
  }
950
1055
  startupSource.add(renderedModule);
951
1056
  startupSource.add(footer);
@@ -959,7 +1064,8 @@ class JavascriptModulesPlugin {
959
1064
  source.add(
960
1065
  hooks.renderStartup.call(startupSource, lastInlinedModule, {
961
1066
  ...renderContext,
962
- inlined: true
1067
+ inlined: true,
1068
+ inlinedInIIFE
963
1069
  })
964
1070
  );
965
1071
  if (bootstrap.afterStartup.length > 0) {
@@ -977,11 +1083,11 @@ class JavascriptModulesPlugin {
977
1083
  const lastEntryModule =
978
1084
  /** @type {Module} */
979
1085
  (last(chunkGraph.getChunkEntryModulesIterable(chunk)));
980
- /** @type {function(string[], string): Source} */
1086
+ /** @type {(content: string[], name: string) => Source} */
981
1087
  const toSource = useSourceMap
982
1088
  ? (content, name) =>
983
1089
  new OriginalSource(Template.asString(content), name)
984
- : content => new RawSource(Template.asString(content));
1090
+ : (content) => new RawSource(Template.asString(content));
985
1091
  source.add(
986
1092
  new PrefixSource(
987
1093
  prefix,
@@ -989,7 +1095,7 @@ class JavascriptModulesPlugin {
989
1095
  toSource(bootstrap.beforeStartup, "webpack/before-startup"),
990
1096
  "\n",
991
1097
  hooks.renderStartup.call(
992
- toSource(bootstrap.startup.concat(""), "webpack/startup"),
1098
+ toSource([...bootstrap.startup, ""], "webpack/startup"),
993
1099
  lastEntryModule,
994
1100
  {
995
1101
  ...renderContext,
@@ -1138,6 +1244,16 @@ class JavascriptModulesPlugin {
1138
1244
  buf.push("");
1139
1245
  }
1140
1246
 
1247
+ if (runtimeRequirements.has(RuntimeGlobals.makeDeferredNamespaceObject)) {
1248
+ // in order to optimize of DeferredNamespaceObject, we remove all proxy handlers after the module initialize
1249
+ // (see MakeDeferredNamespaceObjectRuntimeModule)
1250
+ // This requires all deferred imports to a module can get the module export object before the module
1251
+ // is evaluated.
1252
+ buf.push("// The deferred module cache");
1253
+ buf.push("var __webpack_module_deferred_exports__ = {};");
1254
+ buf.push("");
1255
+ }
1256
+
1141
1257
  if (useRequire) {
1142
1258
  buf.push("// The require function");
1143
1259
  buf.push(`function ${RuntimeGlobals.require}(moduleId) {`);
@@ -1183,13 +1299,15 @@ class JavascriptModulesPlugin {
1183
1299
  entryModule,
1184
1300
  entrypoint
1185
1301
  ] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
1186
- if (!chunkGraph.getModuleSourceTypes(entryModule).has("javascript")) {
1302
+ if (
1303
+ !chunkGraph.getModuleSourceTypes(entryModule).has(JAVASCRIPT_TYPE)
1304
+ ) {
1187
1305
  i--;
1188
1306
  continue;
1189
1307
  }
1190
1308
  const chunks =
1191
1309
  /** @type {Entrypoint} */
1192
- (entrypoint).chunks.filter(c => c !== chunk);
1310
+ (entrypoint).chunks.filter((c) => c !== chunk);
1193
1311
  if (result.allowInlineStartup && chunks.length > 0) {
1194
1312
  buf2.push(
1195
1313
  "// This entry module depends on other loaded chunks and execution need to be delayed"
@@ -1202,10 +1320,10 @@ class JavascriptModulesPlugin {
1202
1320
  moduleGraph.getIncomingConnectionsByOriginModule(entryModule),
1203
1321
  ([originModule, connections]) =>
1204
1322
  originModule &&
1205
- connections.some(c => c.isTargetActive(chunk.runtime)) &&
1323
+ connections.some((c) => c.isTargetActive(chunk.runtime)) &&
1206
1324
  someInIterable(
1207
1325
  chunkGraph.getModuleRuntimes(originModule),
1208
- runtime =>
1326
+ (runtime) =>
1209
1327
  intersectRuntime(runtime, chunk.runtime) !== undefined
1210
1328
  )
1211
1329
  )
@@ -1264,12 +1382,22 @@ class JavascriptModulesPlugin {
1264
1382
  "// This entry module used 'module' so it can't be inlined"
1265
1383
  );
1266
1384
  }
1385
+ if (
1386
+ result.allowInlineStartup &&
1387
+ entryRuntimeRequirements.has(RuntimeGlobals.thisAsExports)
1388
+ ) {
1389
+ buf2.push(
1390
+ "// This entry module used `this` as exports so it can't be inlined"
1391
+ );
1392
+ result.allowInlineStartup = false;
1393
+ }
1394
+
1267
1395
  if (chunks.length > 0) {
1268
1396
  buf2.push(
1269
1397
  `${i === 0 ? `var ${RuntimeGlobals.exports} = ` : ""}${
1270
1398
  RuntimeGlobals.onChunksLoaded
1271
1399
  }(undefined, ${JSON.stringify(
1272
- chunks.map(c => c.id)
1400
+ chunks.map((c) => c.id)
1273
1401
  )}, ${runtimeTemplate.returningFunction(
1274
1402
  `${RuntimeGlobals.require}(${moduleIdExpr})`
1275
1403
  )})`
@@ -1282,21 +1410,33 @@ class JavascriptModulesPlugin {
1282
1410
  );
1283
1411
  } else {
1284
1412
  if (i === 0) buf2.push(`var ${RuntimeGlobals.exports} = {};`);
1285
- if (requireScopeUsed) {
1286
- buf2.push(
1287
- `__webpack_modules__[${moduleIdExpr}](0, ${
1288
- i === 0 ? RuntimeGlobals.exports : "{}"
1289
- }, ${RuntimeGlobals.require});`
1290
- );
1291
- } else if (entryRuntimeRequirements.has(RuntimeGlobals.exports)) {
1292
- buf2.push(
1293
- `__webpack_modules__[${moduleIdExpr}](0, ${
1294
- i === 0 ? RuntimeGlobals.exports : "{}"
1295
- });`
1296
- );
1297
- } else {
1298
- buf2.push(`__webpack_modules__[${moduleIdExpr}]();`);
1413
+ const needThisAsExports = entryRuntimeRequirements.has(
1414
+ RuntimeGlobals.thisAsExports
1415
+ );
1416
+
1417
+ /** @type {string[]} */
1418
+ const args = [];
1419
+ if (
1420
+ requireScopeUsed ||
1421
+ entryRuntimeRequirements.has(RuntimeGlobals.exports)
1422
+ ) {
1423
+ const exportsArg = i === 0 ? RuntimeGlobals.exports : "{}";
1424
+ args.push("0", exportsArg);
1425
+ if (requireScopeUsed) {
1426
+ args.push(RuntimeGlobals.require);
1427
+ }
1299
1428
  }
1429
+ buf2.push(
1430
+ Template.asString(
1431
+ (() => {
1432
+ if (needThisAsExports) {
1433
+ const comma = args.length ? "," : "";
1434
+ return `__webpack_modules__[${moduleIdExpr}].call(${RuntimeGlobals.exports}${comma}${args.join(",")});`;
1435
+ }
1436
+ return `__webpack_modules__[${moduleIdExpr}](${args.join(",")});`;
1437
+ })()
1438
+ )
1439
+ );
1300
1440
  }
1301
1441
  }
1302
1442
  if (runtimeRequirements.has(RuntimeGlobals.onChunksLoaded)) {
@@ -1407,6 +1547,9 @@ class JavascriptModulesPlugin {
1407
1547
  const needModuleLoaded = runtimeRequirements.has(
1408
1548
  RuntimeGlobals.moduleLoaded
1409
1549
  );
1550
+ const needModuleDefer = runtimeRequirements.has(
1551
+ RuntimeGlobals.makeDeferredNamespaceObject
1552
+ );
1410
1553
  const content = Template.asString([
1411
1554
  "// Check if module is in cache",
1412
1555
  "var cachedModule = __webpack_module_cache__[moduleId];",
@@ -1418,12 +1561,27 @@ class JavascriptModulesPlugin {
1418
1561
  ])
1419
1562
  : Template.indent("return cachedModule.exports;"),
1420
1563
  "}",
1564
+ // Add helpful error message in development mode when module is not found
1565
+ ...(outputOptions.pathinfo
1566
+ ? [
1567
+ "// Check if module exists (development only)",
1568
+ "if (__webpack_modules__[moduleId] === undefined) {",
1569
+ Template.indent([
1570
+ 'var e = new Error("Cannot find module \'" + moduleId + "\'");',
1571
+ "e.code = 'MODULE_NOT_FOUND';",
1572
+ "throw e;"
1573
+ ]),
1574
+ "}"
1575
+ ]
1576
+ : []),
1421
1577
  "// Create a new module (and put it into the cache)",
1422
1578
  "var module = __webpack_module_cache__[moduleId] = {",
1423
1579
  Template.indent([
1424
1580
  needModuleId ? "id: moduleId," : "// no module.id needed",
1425
1581
  needModuleLoaded ? "loaded: false," : "// no module.loaded needed",
1426
- "exports: {}"
1582
+ needModuleDefer
1583
+ ? "exports: __webpack_module_deferred_exports__[moduleId] || {}"
1584
+ : "exports: {}"
1427
1585
  ]),
1428
1586
  "};",
1429
1587
  "",
@@ -1432,7 +1590,13 @@ class JavascriptModulesPlugin {
1432
1590
  "// Execute the module function",
1433
1591
  "var threw = true;",
1434
1592
  "try {",
1435
- Template.indent([moduleExecution, "threw = false;"]),
1593
+ Template.indent([
1594
+ moduleExecution,
1595
+ "threw = false;",
1596
+ ...(needModuleDefer
1597
+ ? ["delete __webpack_module_deferred_exports__[moduleId];"]
1598
+ : [])
1599
+ ]),
1436
1600
  "} finally {",
1437
1601
  Template.indent([
1438
1602
  "if(threw) delete __webpack_module_cache__[moduleId];"
@@ -1443,14 +1607,24 @@ class JavascriptModulesPlugin {
1443
1607
  ? Template.asString([
1444
1608
  "// Execute the module function",
1445
1609
  "try {",
1446
- Template.indent(moduleExecution),
1610
+ Template.indent(
1611
+ needModuleDefer
1612
+ ? [
1613
+ moduleExecution,
1614
+ "delete __webpack_module_deferred_exports__[moduleId];"
1615
+ ]
1616
+ : moduleExecution
1617
+ ),
1447
1618
  "} catch(e) {",
1448
1619
  Template.indent(["module.error = e;", "throw e;"]),
1449
1620
  "}"
1450
1621
  ])
1451
1622
  : Template.asString([
1452
1623
  "// Execute the module function",
1453
- moduleExecution
1624
+ moduleExecution,
1625
+ ...(needModuleDefer
1626
+ ? ["delete __webpack_module_deferred_exports__[moduleId];"]
1627
+ : [])
1454
1628
  ]),
1455
1629
  needModuleLoaded
1456
1630
  ? Template.asString([
@@ -1470,6 +1644,7 @@ class JavascriptModulesPlugin {
1470
1644
  }
1471
1645
 
1472
1646
  /**
1647
+ * @param {Compilation} compilation compilation
1473
1648
  * @param {Module[]} allModules allModules
1474
1649
  * @param {MainRenderContext} renderContext renderContext
1475
1650
  * @param {Set<Module>} inlinedModules inlinedModules
@@ -1479,7 +1654,8 @@ class JavascriptModulesPlugin {
1479
1654
  * @param {boolean} hasChunkModules hasChunkModules
1480
1655
  * @returns {Map<Module, Source> | false} renamed inlined modules
1481
1656
  */
1482
- getRenamedInlineModule(
1657
+ _getRenamedInlineModule(
1658
+ compilation,
1483
1659
  allModules,
1484
1660
  renderContext,
1485
1661
  inlinedModules,
@@ -1490,10 +1666,9 @@ class JavascriptModulesPlugin {
1490
1666
  ) {
1491
1667
  const innerStrict =
1492
1668
  !allStrict &&
1493
- allModules.every(m => /** @type {BuildInfo} */ (m.buildInfo).strict);
1669
+ allModules.every((m) => /** @type {BuildInfo} */ (m.buildInfo).strict);
1494
1670
  const isMultipleEntries = inlinedModules.size > 1;
1495
1671
  const singleEntryWithModules = inlinedModules.size === 1 && hasChunkModules;
1496
-
1497
1672
  // TODO:
1498
1673
  // This step is before the IIFE reason calculation. Ideally, it should only be executed when this function can optimize the
1499
1674
  // IIFE reason. Otherwise, it should directly return false. There are four reasons now, we have skipped two already, the left
@@ -1506,27 +1681,35 @@ class JavascriptModulesPlugin {
1506
1681
  const renamedInlinedModules = new Map();
1507
1682
  const { runtimeTemplate } = renderContext;
1508
1683
 
1509
- /** @typedef {{ source: Source, module: Module, ast: any, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
1684
+ /** @typedef {{ source: Source, module: Module, ast: Program, variables: Set<Variable>, through: Set<Reference>, usedInNonInlined: Set<Variable>, moduleScope: Scope }} Info */
1510
1685
  /** @type {Map<Module, Info>} */
1511
1686
  const inlinedModulesToInfo = new Map();
1512
1687
  /** @type {Set<string>} */
1513
1688
  const nonInlinedModuleThroughIdentifiers = new Set();
1514
- /** @type {Map<Module, Source>} */
1515
1689
 
1516
1690
  for (const m of allModules) {
1517
1691
  const isInlinedModule = inlinedModules && inlinedModules.has(m);
1518
1692
  const moduleSource = this.renderModule(
1519
1693
  m,
1520
- chunkRenderContext,
1521
- hooks,
1522
- !isInlinedModule
1694
+ {
1695
+ ...chunkRenderContext,
1696
+ factory: !isInlinedModule,
1697
+ inlinedInIIFE: false
1698
+ },
1699
+ hooks
1523
1700
  );
1524
1701
 
1525
1702
  if (!moduleSource) continue;
1526
1703
  const code = /** @type {string} */ (moduleSource.source());
1527
- const ast = JavascriptParser._parse(code, {
1528
- sourceType: "auto"
1529
- });
1704
+
1705
+ const { ast } = JavascriptParser._parse(
1706
+ code,
1707
+ {
1708
+ sourceType: "auto",
1709
+ ranges: true
1710
+ },
1711
+ JavascriptParser._getModuleParseFunction(compilation, m)
1712
+ );
1530
1713
 
1531
1714
  const scopeManager = eslintScope.analyze(ast, {
1532
1715
  ecmaVersion: 6,
@@ -1575,7 +1758,7 @@ class JavascriptModulesPlugin {
1575
1758
 
1576
1759
  const info = /** @type {Info} */ (inlinedModulesToInfo.get(m));
1577
1760
  const allUsedNames = new Set(
1578
- Array.from(info.through, v => v.identifier.name)
1761
+ Array.from(info.through, (v) => v.identifier.name)
1579
1762
  );
1580
1763
 
1581
1764
  for (const variable of usedInNonInlined) {
@@ -1583,12 +1766,6 @@ class JavascriptModulesPlugin {
1583
1766
  }
1584
1767
 
1585
1768
  for (const variable of info.variables) {
1586
- allUsedNames.add(variable.name);
1587
- const references = getAllReferences(variable);
1588
- const allIdentifiers = new Set(
1589
- references.map(r => r.identifier).concat(variable.identifiers)
1590
- );
1591
-
1592
1769
  const usedNamesInScopeInfo = new Map();
1593
1770
  const ignoredScopes = new Set();
1594
1771
 
@@ -1601,6 +1778,10 @@ class JavascriptModulesPlugin {
1601
1778
 
1602
1779
  if (allUsedNames.has(name) || usedNames.has(name)) {
1603
1780
  const references = getAllReferences(variable);
1781
+ const allIdentifiers = new Set([
1782
+ ...references.map((r) => r.identifier),
1783
+ ...variable.identifiers
1784
+ ]);
1604
1785
  for (const ref of references) {
1605
1786
  addScopeSymbols(
1606
1787
  ref.from,
@@ -1635,9 +1816,8 @@ class JavascriptModulesPlugin {
1635
1816
  }
1636
1817
  source.replace(r[0], r[1] - 1, newName);
1637
1818
  }
1638
- } else {
1639
- allUsedNames.add(name);
1640
1819
  }
1820
+ allUsedNames.add(name);
1641
1821
  }
1642
1822
 
1643
1823
  renamedInlinedModules.set(m, source);