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
@@ -9,18 +9,20 @@ const { ConcatSource, RawSource } = require("webpack-sources");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const Template = require("../Template");
11
11
  const { getUndoPath } = require("../util/identifier");
12
+ const {
13
+ createChunkHashHandler,
14
+ getChunkInfo
15
+ } = require("./ChunkFormatHelpers");
12
16
  const {
13
17
  getChunkFilenameTemplate,
14
18
  getCompilationHooks
15
19
  } = require("./JavascriptModulesPlugin");
16
- const {
17
- generateEntryStartup,
18
- updateHashForEntryStartup
19
- } = require("./StartupHelpers");
20
+ const { generateEntryStartup } = require("./StartupHelpers");
20
21
 
21
22
  /** @typedef {import("../Chunk")} Chunk */
22
23
  /** @typedef {import("../Compiler")} Compiler */
23
- /** @typedef {import("../Entrypoint")} Entrypoint */
24
+
25
+ const PLUGIN_NAME = "CommonJsChunkFormatPlugin";
24
26
 
25
27
  class CommonJsChunkFormatPlugin {
26
28
  /**
@@ -29,146 +31,117 @@ class CommonJsChunkFormatPlugin {
29
31
  * @returns {void}
30
32
  */
31
33
  apply(compiler) {
32
- compiler.hooks.thisCompilation.tap(
33
- "CommonJsChunkFormatPlugin",
34
- compilation => {
35
- compilation.hooks.additionalChunkRuntimeRequirements.tap(
36
- "CommonJsChunkFormatPlugin",
37
- (chunk, set, { chunkGraph }) => {
38
- if (chunk.hasRuntime()) return;
39
- if (chunkGraph.getNumberOfEntryModules(chunk) > 0) {
40
- set.add(RuntimeGlobals.require);
41
- set.add(RuntimeGlobals.startupEntrypoint);
42
- set.add(RuntimeGlobals.externalInstallChunk);
43
- }
34
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
35
+ compilation.hooks.additionalChunkRuntimeRequirements.tap(
36
+ PLUGIN_NAME,
37
+ (chunk, set, { chunkGraph }) => {
38
+ if (chunk.hasRuntime()) return;
39
+ if (chunkGraph.getNumberOfEntryModules(chunk) > 0) {
40
+ set.add(RuntimeGlobals.require);
41
+ set.add(RuntimeGlobals.startupEntrypoint);
42
+ set.add(RuntimeGlobals.externalInstallChunk);
44
43
  }
45
- );
46
- const hooks = getCompilationHooks(compilation);
47
- hooks.renderChunk.tap(
48
- "CommonJsChunkFormatPlugin",
49
- (modules, renderContext) => {
50
- const { chunk, chunkGraph, runtimeTemplate } = renderContext;
51
- const source = new ConcatSource();
52
- source.add(`exports.id = ${JSON.stringify(chunk.id)};\n`);
53
- source.add(`exports.ids = ${JSON.stringify(chunk.ids)};\n`);
54
- source.add("exports.modules = ");
55
- source.add(modules);
56
- source.add(";\n");
57
- const runtimeModules =
58
- chunkGraph.getChunkRuntimeModulesInOrder(chunk);
59
- if (runtimeModules.length > 0) {
60
- source.add("exports.runtime =\n");
61
- source.add(
62
- Template.renderChunkRuntimeModules(
63
- runtimeModules,
64
- renderContext
65
- )
66
- );
67
- }
68
- const entries = Array.from(
69
- chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
70
- );
71
- if (entries.length > 0) {
72
- const runtimeChunk =
73
- /** @type {Entrypoint} */
74
- (entries[0][1]).getRuntimeChunk();
75
- const currentOutputName = compilation
76
- .getPath(
77
- getChunkFilenameTemplate(chunk, compilation.outputOptions),
78
- {
79
- chunk,
80
- contentHashType: "javascript"
81
- }
82
- )
83
- .replace(/^\/+/g, "")
84
- .split("/");
85
- const runtimeOutputName = compilation
86
- .getPath(
87
- getChunkFilenameTemplate(
88
- /** @type {Chunk} */
89
- (runtimeChunk),
90
- compilation.outputOptions
91
- ),
92
- {
93
- chunk: /** @type {Chunk} */ (runtimeChunk),
94
- contentHashType: "javascript"
95
- }
96
- )
97
- .replace(/^\/+/g, "")
98
- .split("/");
99
-
100
- // remove common parts
101
- while (
102
- currentOutputName.length > 1 &&
103
- runtimeOutputName.length > 1 &&
104
- currentOutputName[0] === runtimeOutputName[0]
105
- ) {
106
- currentOutputName.shift();
107
- runtimeOutputName.shift();
44
+ }
45
+ );
46
+ const hooks = getCompilationHooks(compilation);
47
+ hooks.renderChunk.tap(PLUGIN_NAME, (modules, renderContext) => {
48
+ const { chunk, chunkGraph, runtimeTemplate } = renderContext;
49
+ const source = new ConcatSource();
50
+ source.add(`exports.id = ${JSON.stringify(chunk.id)};\n`);
51
+ source.add(`exports.ids = ${JSON.stringify(chunk.ids)};\n`);
52
+ source.add("exports.modules = ");
53
+ source.add(modules);
54
+ source.add(";\n");
55
+ const runtimeModules = chunkGraph.getChunkRuntimeModulesInOrder(chunk);
56
+ if (runtimeModules.length > 0) {
57
+ source.add("exports.runtime =\n");
58
+ source.add(
59
+ Template.renderChunkRuntimeModules(runtimeModules, renderContext)
60
+ );
61
+ }
62
+ const { entries, runtimeChunk } = getChunkInfo(chunk, chunkGraph);
63
+ if (runtimeChunk) {
64
+ const currentOutputName = compilation
65
+ .getPath(
66
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
67
+ {
68
+ chunk,
69
+ contentHashType: "javascript"
70
+ }
71
+ )
72
+ .replace(/^\/+/g, "")
73
+ .split("/");
74
+ const runtimeOutputName = compilation
75
+ .getPath(
76
+ getChunkFilenameTemplate(
77
+ /** @type {Chunk} */
78
+ (runtimeChunk),
79
+ compilation.outputOptions
80
+ ),
81
+ {
82
+ chunk: /** @type {Chunk} */ (runtimeChunk),
83
+ contentHashType: "javascript"
108
84
  }
109
- const last = runtimeOutputName.join("/");
110
- // create final path
111
- const runtimePath =
112
- getUndoPath(currentOutputName.join("/"), last, true) + last;
85
+ )
86
+ .replace(/^\/+/g, "")
87
+ .split("/");
113
88
 
114
- const entrySource = new ConcatSource();
115
- entrySource.add(
116
- `(${
117
- runtimeTemplate.supportsArrowFunction()
118
- ? "() => "
119
- : "function() "
120
- }{\n`
121
- );
122
- entrySource.add("var exports = {};\n");
123
- entrySource.add(source);
124
- entrySource.add(";\n\n// load runtime\n");
125
- entrySource.add(
126
- `var ${RuntimeGlobals.require} = require(${JSON.stringify(
127
- runtimePath
128
- )});\n`
129
- );
130
- entrySource.add(
131
- `${RuntimeGlobals.externalInstallChunk}(exports);\n`
132
- );
133
- const startupSource = new RawSource(
134
- generateEntryStartup(
135
- chunkGraph,
136
- runtimeTemplate,
137
- entries,
138
- chunk,
139
- false
140
- )
141
- );
142
- entrySource.add(
143
- hooks.renderStartup.call(
144
- startupSource,
145
- entries[entries.length - 1][0],
146
- {
147
- ...renderContext,
148
- inlined: false
149
- }
150
- )
151
- );
152
- entrySource.add("\n})()");
153
- return entrySource;
154
- }
155
- return source;
89
+ // remove common parts
90
+ while (
91
+ currentOutputName.length > 1 &&
92
+ runtimeOutputName.length > 1 &&
93
+ currentOutputName[0] === runtimeOutputName[0]
94
+ ) {
95
+ currentOutputName.shift();
96
+ runtimeOutputName.shift();
156
97
  }
157
- );
158
- hooks.chunkHash.tap(
159
- "CommonJsChunkFormatPlugin",
160
- (chunk, hash, { chunkGraph }) => {
161
- if (chunk.hasRuntime()) return;
162
- hash.update("CommonJsChunkFormatPlugin");
163
- hash.update("1");
164
- const entries = Array.from(
165
- chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
166
- );
167
- updateHashForEntryStartup(hash, chunkGraph, entries, chunk);
168
- }
169
- );
170
- }
171
- );
98
+ const last = runtimeOutputName.join("/");
99
+ // create final path
100
+ const runtimePath =
101
+ getUndoPath(currentOutputName.join("/"), last, true) + last;
102
+
103
+ const entrySource = new ConcatSource();
104
+ entrySource.add(
105
+ `(${
106
+ runtimeTemplate.supportsArrowFunction() ? "() => " : "function() "
107
+ }{\n`
108
+ );
109
+ entrySource.add("var exports = {};\n");
110
+ entrySource.add(source);
111
+ entrySource.add(";\n\n// load runtime\n");
112
+ entrySource.add(
113
+ `var ${RuntimeGlobals.require} = require(${JSON.stringify(
114
+ runtimePath
115
+ )});\n`
116
+ );
117
+ entrySource.add(`${RuntimeGlobals.externalInstallChunk}(exports);\n`);
118
+ const startupSource = new RawSource(
119
+ generateEntryStartup(
120
+ chunkGraph,
121
+ runtimeTemplate,
122
+ entries,
123
+ chunk,
124
+ false
125
+ )
126
+ );
127
+ entrySource.add(
128
+ hooks.renderStartup.call(
129
+ startupSource,
130
+ entries[entries.length - 1][0],
131
+ {
132
+ ...renderContext,
133
+ inlined: false
134
+ }
135
+ )
136
+ );
137
+ entrySource.add("\n})()");
138
+ return entrySource;
139
+ }
140
+ return source;
141
+ });
142
+
143
+ hooks.chunkHash.tap(PLUGIN_NAME, createChunkHashHandler(PLUGIN_NAME));
144
+ });
172
145
  }
173
146
  }
174
147
 
@@ -15,7 +15,7 @@ const enabledTypes = new WeakMap();
15
15
  * @param {Compiler} compiler compiler
16
16
  * @returns {Set<ChunkLoadingType>} enabled types
17
17
  */
18
- const getEnabledTypes = compiler => {
18
+ const getEnabledTypes = (compiler) => {
19
19
  let set = enabledTypes.get(compiler);
20
20
  if (set === undefined) {
21
21
  set = new Set();
@@ -53,9 +53,7 @@ class EnableChunkLoadingPlugin {
53
53
  "EnableChunkLoadingPlugin need to be used to enable this type of chunk loading. " +
54
54
  'This usually happens through the "output.enabledChunkLoadingTypes" option. ' +
55
55
  'If you are using a function as entry which sets "chunkLoading", you need to add all potential chunk loading types to "output.enabledChunkLoadingTypes". ' +
56
- `These types are enabled: ${Array.from(
57
- getEnabledTypes(compiler)
58
- ).join(", ")}`
56
+ `These types are enabled: ${[...getEnabledTypes(compiler)].join(", ")}`
59
57
  );
60
58
  }
61
59
  }
@@ -77,17 +75,20 @@ class EnableChunkLoadingPlugin {
77
75
  switch (type) {
78
76
  case "jsonp": {
79
77
  const JsonpChunkLoadingPlugin = require("../web/JsonpChunkLoadingPlugin");
78
+
80
79
  new JsonpChunkLoadingPlugin().apply(compiler);
81
80
  break;
82
81
  }
83
82
  case "import-scripts": {
84
83
  const ImportScriptsChunkLoadingPlugin = require("../webworker/ImportScriptsChunkLoadingPlugin");
84
+
85
85
  new ImportScriptsChunkLoadingPlugin().apply(compiler);
86
86
  break;
87
87
  }
88
88
  case "require": {
89
89
  // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
90
90
  const CommonJsChunkLoadingPlugin = require("../node/CommonJsChunkLoadingPlugin");
91
+
91
92
  new CommonJsChunkLoadingPlugin({
92
93
  asyncChunkLoading: false
93
94
  }).apply(compiler);
@@ -96,6 +97,7 @@ class EnableChunkLoadingPlugin {
96
97
  case "async-node": {
97
98
  // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
98
99
  const CommonJsChunkLoadingPlugin = require("../node/CommonJsChunkLoadingPlugin");
100
+
99
101
  new CommonJsChunkLoadingPlugin({
100
102
  asyncChunkLoading: true
101
103
  }).apply(compiler);
@@ -104,6 +106,7 @@ class EnableChunkLoadingPlugin {
104
106
  case "import":
105
107
  case "universal": {
106
108
  const ModuleChunkLoadingPlugin = require("../esm/ModuleChunkLoadingPlugin");
109
+
107
110
  new ModuleChunkLoadingPlugin().apply(compiler);
108
111
  break;
109
112
  }
@@ -9,21 +9,33 @@ const util = require("util");
9
9
  const { RawSource, ReplaceSource } = require("webpack-sources");
10
10
  const Generator = require("../Generator");
11
11
  const InitFragment = require("../InitFragment");
12
- const { JS_TYPES } = require("../ModuleSourceTypesConstants");
12
+ const { JAVASCRIPT_TYPES } = require("../ModuleSourceTypeConstants");
13
13
  const HarmonyCompatibilityDependency = require("../dependencies/HarmonyCompatibilityDependency");
14
14
 
15
15
  /** @typedef {import("webpack-sources").Source} Source */
16
+ /** @typedef {import("../Compilation").DependencyConstructor} DependencyConstructor */
16
17
  /** @typedef {import("../DependenciesBlock")} DependenciesBlock */
17
18
  /** @typedef {import("../Dependency")} Dependency */
18
19
  /** @typedef {import("../DependencyTemplate")} DependencyTemplate */
19
20
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
20
- /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
21
21
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
22
22
  /** @typedef {import("../Module")} Module */
23
23
  /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
24
+ /** @typedef {import("../Module").SourceType} SourceType */
24
25
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
25
26
  /** @typedef {import("../NormalModule")} NormalModule */
26
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
27
+
28
+ const DEFAULT_SOURCE = {
29
+ source() {
30
+ return new RawSource("throw new Error('No source available');");
31
+ },
32
+ /**
33
+ * @returns {number} size of the DEFAULT_SOURCE.source()
34
+ */
35
+ size() {
36
+ return 39;
37
+ }
38
+ };
27
39
 
28
40
  // TODO: clean up this file
29
41
  // replace with newer constructs
@@ -36,7 +48,7 @@ const deprecatedGetInitFragments = util.deprecate(
36
48
  * @returns {InitFragment<GenerateContext>[]} init fragments
37
49
  */
38
50
  (template, dependency, templateContext) =>
39
- /** @type {DependencyTemplate & { getInitFragments: function(Dependency, DependencyTemplateContext): InitFragment<GenerateContext>[] }} */
51
+ /** @type {DependencyTemplate & { getInitFragments: (dependency: Dependency, dependencyTemplateContext: DependencyTemplateContext) => InitFragment<GenerateContext>[] }} */
40
52
  (template).getInitFragments(dependency, templateContext),
41
53
  "DependencyTemplate.getInitFragment is deprecated (use apply(dep, source, { initFragments }) instead)",
42
54
  "DEP_WEBPACK_JAVASCRIPT_GENERATOR_GET_INIT_FRAGMENTS"
@@ -48,18 +60,18 @@ class JavascriptGenerator extends Generator {
48
60
  * @returns {SourceTypes} available types (do not mutate)
49
61
  */
50
62
  getTypes(module) {
51
- return JS_TYPES;
63
+ return JAVASCRIPT_TYPES;
52
64
  }
53
65
 
54
66
  /**
55
67
  * @param {NormalModule} module the module
56
- * @param {string=} type source type
68
+ * @param {SourceType=} type source type
57
69
  * @returns {number} estimate size of the module
58
70
  */
59
71
  getSize(module, type) {
60
72
  const originalSource = module.originalSource();
61
73
  if (!originalSource) {
62
- return 39;
74
+ return DEFAULT_SOURCE.size();
63
75
  }
64
76
  return originalSource.size();
65
77
  }
@@ -76,7 +88,7 @@ class JavascriptGenerator extends Generator {
76
88
  module.buildMeta.exportsType !== "namespace" ||
77
89
  module.presentationalDependencies === undefined ||
78
90
  !module.presentationalDependencies.some(
79
- d => d instanceof HarmonyCompatibilityDependency
91
+ (d) => d instanceof HarmonyCompatibilityDependency
80
92
  )
81
93
  ) {
82
94
  return "Module is not an ECMAScript module";
@@ -90,97 +102,6 @@ class JavascriptGenerator extends Generator {
90
102
  }
91
103
  }
92
104
 
93
- /**
94
- * @param {NormalModule} module module for which the code should be generated
95
- * @param {GenerateContext} generateContext context for generate
96
- * @returns {Source | null} generated code
97
- */
98
- generate(module, generateContext) {
99
- const originalSource = module.originalSource();
100
- if (!originalSource) {
101
- return new RawSource("throw new Error('No source available');");
102
- }
103
-
104
- const source = new ReplaceSource(originalSource);
105
- /** @type {InitFragment<GenerateContext>[]} */
106
- const initFragments = [];
107
-
108
- this.sourceModule(module, initFragments, source, generateContext);
109
-
110
- return InitFragment.addToSource(source, initFragments, generateContext);
111
- }
112
-
113
- /**
114
- * @param {Module} module the module to generate
115
- * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
116
- * @param {ReplaceSource} source the current replace source which can be modified
117
- * @param {GenerateContext} generateContext the generateContext
118
- * @returns {void}
119
- */
120
- sourceModule(module, initFragments, source, generateContext) {
121
- for (const dependency of module.dependencies) {
122
- this.sourceDependency(
123
- module,
124
- dependency,
125
- initFragments,
126
- source,
127
- generateContext
128
- );
129
- }
130
-
131
- if (module.presentationalDependencies !== undefined) {
132
- for (const dependency of module.presentationalDependencies) {
133
- this.sourceDependency(
134
- module,
135
- dependency,
136
- initFragments,
137
- source,
138
- generateContext
139
- );
140
- }
141
- }
142
-
143
- for (const childBlock of module.blocks) {
144
- this.sourceBlock(
145
- module,
146
- childBlock,
147
- initFragments,
148
- source,
149
- generateContext
150
- );
151
- }
152
- }
153
-
154
- /**
155
- * @param {Module} module the module to generate
156
- * @param {DependenciesBlock} block the dependencies block which will be processed
157
- * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
158
- * @param {ReplaceSource} source the current replace source which can be modified
159
- * @param {GenerateContext} generateContext the generateContext
160
- * @returns {void}
161
- */
162
- sourceBlock(module, block, initFragments, source, generateContext) {
163
- for (const dependency of block.dependencies) {
164
- this.sourceDependency(
165
- module,
166
- dependency,
167
- initFragments,
168
- source,
169
- generateContext
170
- );
171
- }
172
-
173
- for (const childBlock of block.blocks) {
174
- this.sourceBlock(
175
- module,
176
- childBlock,
177
- initFragments,
178
- source,
179
- generateContext
180
- );
181
- }
182
- }
183
-
184
105
  /**
185
106
  * @param {Module} module the current module
186
107
  * @param {Dependency} dependency the dependency to generate
@@ -191,7 +112,7 @@ class JavascriptGenerator extends Generator {
191
112
  */
192
113
  sourceDependency(module, dependency, initFragments, source, generateContext) {
193
114
  const constructor =
194
- /** @type {new (...args: EXPECTED_ANY[]) => Dependency} */
115
+ /** @type {DependencyConstructor} */
195
116
  (dependency.constructor);
196
117
  const template = generateContext.dependencyTemplates.get(constructor);
197
118
  if (!template) {
@@ -250,6 +171,107 @@ class JavascriptGenerator extends Generator {
250
171
  }
251
172
  }
252
173
  }
174
+
175
+ /**
176
+ * @param {Module} module the module to generate
177
+ * @param {DependenciesBlock} block the dependencies block which will be processed
178
+ * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
179
+ * @param {ReplaceSource} source the current replace source which can be modified
180
+ * @param {GenerateContext} generateContext the generateContext
181
+ * @returns {void}
182
+ */
183
+ sourceBlock(module, block, initFragments, source, generateContext) {
184
+ for (const dependency of block.dependencies) {
185
+ this.sourceDependency(
186
+ module,
187
+ dependency,
188
+ initFragments,
189
+ source,
190
+ generateContext
191
+ );
192
+ }
193
+
194
+ for (const childBlock of block.blocks) {
195
+ this.sourceBlock(
196
+ module,
197
+ childBlock,
198
+ initFragments,
199
+ source,
200
+ generateContext
201
+ );
202
+ }
203
+ }
204
+
205
+ /**
206
+ * @param {Module} module the module to generate
207
+ * @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
208
+ * @param {ReplaceSource} source the current replace source which can be modified
209
+ * @param {GenerateContext} generateContext the generateContext
210
+ * @returns {void}
211
+ */
212
+ sourceModule(module, initFragments, source, generateContext) {
213
+ for (const dependency of module.dependencies) {
214
+ this.sourceDependency(
215
+ module,
216
+ dependency,
217
+ initFragments,
218
+ source,
219
+ generateContext
220
+ );
221
+ }
222
+
223
+ if (module.presentationalDependencies !== undefined) {
224
+ for (const dependency of module.presentationalDependencies) {
225
+ this.sourceDependency(
226
+ module,
227
+ dependency,
228
+ initFragments,
229
+ source,
230
+ generateContext
231
+ );
232
+ }
233
+ }
234
+
235
+ for (const childBlock of module.blocks) {
236
+ this.sourceBlock(
237
+ module,
238
+ childBlock,
239
+ initFragments,
240
+ source,
241
+ generateContext
242
+ );
243
+ }
244
+ }
245
+
246
+ /**
247
+ * @param {NormalModule} module module for which the code should be generated
248
+ * @param {GenerateContext} generateContext context for generate
249
+ * @returns {Source | null} generated code
250
+ */
251
+ generate(module, generateContext) {
252
+ const originalSource = module.originalSource();
253
+ if (!originalSource) {
254
+ return DEFAULT_SOURCE.source();
255
+ }
256
+
257
+ const source = new ReplaceSource(originalSource);
258
+ /** @type {InitFragment<GenerateContext>[]} */
259
+ const initFragments = [];
260
+
261
+ this.sourceModule(module, initFragments, source, generateContext);
262
+
263
+ return InitFragment.addToSource(source, initFragments, generateContext);
264
+ }
265
+
266
+ /**
267
+ * @param {Error} error the error
268
+ * @param {NormalModule} module module for which the code should be generated
269
+ * @param {GenerateContext} generateContext context for generate
270
+ * @returns {Source | null} generated code
271
+ */
272
+ generateError(error, module, generateContext) {
273
+ return new RawSource(`throw new Error(${JSON.stringify(error.message)});`);
274
+ }
253
275
  }
254
276
 
255
277
  module.exports = JavascriptGenerator;