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
@@ -13,10 +13,13 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
13
13
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
14
14
  /** @typedef {import("../Chunk")} Chunk */
15
15
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
16
- /** @typedef {import("../Compiler")} Compiler */
17
16
  /** @typedef {import("../javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
18
17
  /** @typedef {import("../util/Hash")} Hash */
19
- /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
18
+
19
+ /**
20
+ * @template T
21
+ * @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T>
22
+ */
20
23
 
21
24
  /**
22
25
  * @typedef {object} JsonpLibraryPluginOptions
@@ -6,21 +6,30 @@
6
6
  "use strict";
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
+ const { UsageState } = require("../ExportsInfo");
9
10
  const RuntimeGlobals = require("../RuntimeGlobals");
10
11
  const Template = require("../Template");
12
+ const ConcatenatedModule = require("../optimize/ConcatenatedModule");
11
13
  const propertyAccess = require("../util/propertyAccess");
14
+ const { getEntryRuntime } = require("../util/runtime");
12
15
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
13
16
 
14
17
  /** @typedef {import("webpack-sources").Source} Source */
15
18
  /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
16
19
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
20
+ /** @typedef {import("../../declarations/WebpackOptions").LibraryExport} LibraryExport */
17
21
  /** @typedef {import("../Chunk")} Chunk */
18
- /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
19
22
  /** @typedef {import("../Compiler")} Compiler */
20
23
  /** @typedef {import("../Module")} Module */
24
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
25
+ /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
21
26
  /** @typedef {import("../javascript/JavascriptModulesPlugin").StartupRenderContext} StartupRenderContext */
22
- /** @typedef {import("../util/Hash")} Hash */
23
- /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
27
+ /** @typedef {import("../javascript/JavascriptModulesPlugin").ModuleRenderContext} ModuleRenderContext */
28
+
29
+ /**
30
+ * @template T
31
+ * @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T>
32
+ */
24
33
 
25
34
  /**
26
35
  * @typedef {object} ModuleLibraryPluginOptions
@@ -30,8 +39,11 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
30
39
  /**
31
40
  * @typedef {object} ModuleLibraryPluginParsed
32
41
  * @property {string} name
42
+ * @property {LibraryExport=} export
33
43
  */
34
44
 
45
+ const PLUGIN_NAME = "ModuleLibraryPlugin";
46
+
35
47
  /**
36
48
  * @typedef {ModuleLibraryPluginParsed} T
37
49
  * @extends {AbstractLibraryPlugin<ModuleLibraryPluginParsed>}
@@ -47,6 +59,73 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
47
59
  });
48
60
  }
49
61
 
62
+ /**
63
+ * Apply the plugin
64
+ * @param {Compiler} compiler the compiler instance
65
+ * @returns {void}
66
+ */
67
+ apply(compiler) {
68
+ super.apply(compiler);
69
+
70
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
71
+ const { onDemandExportsGeneration } =
72
+ ConcatenatedModule.getCompilationHooks(compilation);
73
+ onDemandExportsGeneration.tap(
74
+ PLUGIN_NAME,
75
+ (module, runtimes, source, finalName) => {
76
+ /** @type {BuildMeta} */
77
+ const buildMeta = module.buildMeta || (module.buildMeta = {});
78
+
79
+ const exportsSourceByRuntime =
80
+ buildMeta.exportsSourceByRuntime ||
81
+ (buildMeta.exportsSourceByRuntime = new Map());
82
+
83
+ const exportsFinalNameByRuntime =
84
+ buildMeta.exportsFinalNameByRuntime ||
85
+ (buildMeta.exportsFinalNameByRuntime = new Map());
86
+
87
+ for (const runtime of runtimes) {
88
+ exportsSourceByRuntime.set(runtime, source);
89
+ exportsFinalNameByRuntime.set(runtime, finalName);
90
+ }
91
+
92
+ return true;
93
+ }
94
+ );
95
+ });
96
+ }
97
+
98
+ /**
99
+ * @param {Module} module the exporting entry module
100
+ * @param {string} entryName the name of the entrypoint
101
+ * @param {LibraryContext<T>} libraryContext context
102
+ * @returns {void}
103
+ */
104
+ finishEntryModule(
105
+ module,
106
+ entryName,
107
+ { options, compilation, compilation: { moduleGraph } }
108
+ ) {
109
+ const runtime = getEntryRuntime(compilation, entryName);
110
+ if (options.export) {
111
+ const exportsInfo = moduleGraph.getExportInfo(
112
+ module,
113
+ Array.isArray(options.export) ? options.export[0] : options.export
114
+ );
115
+ exportsInfo.setUsed(UsageState.Used, runtime);
116
+ exportsInfo.canMangleUse = false;
117
+ } else {
118
+ const exportsInfo = moduleGraph.getExportsInfo(module);
119
+ // If the entry module is commonjs, its exports cannot be mangled
120
+ if (module.buildMeta && module.buildMeta.treatAsCommonJs) {
121
+ exportsInfo.setUsedInUnknownWay(runtime);
122
+ } else {
123
+ exportsInfo.setAllKnownExportsUsed(runtime);
124
+ }
125
+ }
126
+ moduleGraph.addExtraReason(module, "used as library export");
127
+ }
128
+
50
129
  /**
51
130
  * @param {LibraryOptions} library normalized library option
52
131
  * @returns {T | false} preprocess as needed by overriding
@@ -60,7 +139,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
60
139
  }
61
140
  const _name = /** @type {string} */ (name);
62
141
  return {
63
- name: _name
142
+ name: _name,
143
+ export: library.export
64
144
  };
65
145
  }
66
146
 
@@ -74,36 +154,168 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
74
154
  renderStartup(
75
155
  source,
76
156
  module,
77
- { moduleGraph, chunk },
157
+ {
158
+ moduleGraph,
159
+ chunk,
160
+ codeGenerationResults,
161
+ inlined,
162
+ inlinedInIIFE,
163
+ runtimeTemplate
164
+ },
78
165
  { options, compilation }
79
166
  ) {
80
167
  const result = new ConcatSource(source);
81
- const exportsInfo = moduleGraph.getExportsInfo(module);
168
+
169
+ const exportsInfo = options.export
170
+ ? [
171
+ moduleGraph.getExportInfo(
172
+ module,
173
+ Array.isArray(options.export) ? options.export[0] : options.export
174
+ )
175
+ ]
176
+ : moduleGraph.getExportsInfo(module).orderedExports;
177
+
178
+ const exportsFinalNameByRuntime =
179
+ (module.buildMeta &&
180
+ module.buildMeta.exportsFinalNameByRuntime &&
181
+ module.buildMeta.exportsFinalNameByRuntime.get(chunk.runtime)) ||
182
+ {};
183
+
184
+ const definitions =
185
+ inlined && !inlinedInIIFE ? exportsFinalNameByRuntime : {};
186
+
187
+ /** @type {string[]} */
188
+ const shortHandedExports = [];
189
+ /** @type {[string, string][]} */
82
190
  const exports = [];
83
191
  const isAsync = moduleGraph.isAsync(module);
192
+
193
+ const treatAsCommonJs =
194
+ module.buildMeta && module.buildMeta.treatAsCommonJs;
195
+ const skipRenderDefaultExport = Boolean(treatAsCommonJs);
196
+
84
197
  if (isAsync) {
85
198
  result.add(
86
199
  `${RuntimeGlobals.exports} = await ${RuntimeGlobals.exports};\n`
87
200
  );
88
201
  }
89
- for (const exportInfo of exportsInfo.orderedExports) {
202
+
203
+ outer: for (const exportInfo of exportsInfo) {
90
204
  if (!exportInfo.provided) continue;
91
- const varName = `${RuntimeGlobals.exports}${Template.toIdentifier(
92
- exportInfo.name
93
- )}`;
205
+
206
+ const originalName = exportInfo.name;
207
+
208
+ if (skipRenderDefaultExport && originalName === "default") continue;
209
+
210
+ const target = exportInfo.findTarget(moduleGraph, (_m) => true);
211
+ if (target) {
212
+ const reexportsInfo = moduleGraph.getExportsInfo(target.module);
213
+
214
+ for (const reexportInfo of reexportsInfo.orderedExports) {
215
+ if (
216
+ reexportInfo.provided === false &&
217
+ reexportInfo.name !== "default" &&
218
+ reexportInfo.name === /** @type {string[]} */ (target.export)[0]
219
+ ) {
220
+ continue outer;
221
+ }
222
+ }
223
+ }
224
+
225
+ const usedName =
226
+ /** @type {string} */
227
+ (exportInfo.getUsedName(originalName, chunk.runtime));
228
+ /** @type {string | undefined} */
229
+ const definition = definitions[usedName];
230
+
231
+ /** @type {string | undefined} */
232
+ let finalName;
233
+
234
+ if (definition) {
235
+ finalName = definition;
236
+ } else {
237
+ finalName = `${RuntimeGlobals.exports}${Template.toIdentifier(originalName)}`;
238
+ result.add(
239
+ `${runtimeTemplate.renderConst()} ${finalName} = ${RuntimeGlobals.exports}${propertyAccess(
240
+ [usedName]
241
+ )};\n`
242
+ );
243
+ }
244
+
245
+ if (
246
+ finalName &&
247
+ (finalName.includes(".") ||
248
+ finalName.includes("[") ||
249
+ finalName.includes("("))
250
+ ) {
251
+ if (exportInfo.isReexport()) {
252
+ const { data } = codeGenerationResults.get(module, chunk.runtime);
253
+ const topLevelDeclarations =
254
+ (data && data.get("topLevelDeclarations")) ||
255
+ (module.buildInfo && module.buildInfo.topLevelDeclarations);
256
+
257
+ if (topLevelDeclarations && topLevelDeclarations.has(originalName)) {
258
+ const name = `${RuntimeGlobals.exports}${Template.toIdentifier(originalName)}`;
259
+ result.add(
260
+ `${runtimeTemplate.renderConst()} ${name} = ${finalName};\n`
261
+ );
262
+ shortHandedExports.push(`${name} as ${originalName}`);
263
+ } else {
264
+ exports.push([originalName, finalName]);
265
+ }
266
+ } else {
267
+ exports.push([originalName, finalName]);
268
+ }
269
+ } else {
270
+ shortHandedExports.push(
271
+ definition && finalName === originalName
272
+ ? finalName
273
+ : `${finalName} as ${originalName}`
274
+ );
275
+ }
276
+ }
277
+
278
+ if (treatAsCommonJs) {
279
+ shortHandedExports.push(`${RuntimeGlobals.exports} as default`);
280
+ }
281
+
282
+ if (shortHandedExports.length > 0) {
283
+ result.add(`export { ${shortHandedExports.join(", ")} };\n`);
284
+ }
285
+
286
+ for (const [exportName, final] of exports) {
94
287
  result.add(
95
- `var ${varName} = ${RuntimeGlobals.exports}${propertyAccess([
96
- /** @type {string} */
97
- (exportInfo.getUsedName(exportInfo.name, chunk.runtime))
98
- ])};\n`
288
+ `export ${runtimeTemplate.renderConst()} ${exportName} = ${final};\n`
99
289
  );
100
- exports.push(`${varName} as ${exportInfo.name}`);
101
- }
102
- if (exports.length > 0) {
103
- result.add(`export { ${exports.join(", ")} };\n`);
104
290
  }
291
+
105
292
  return result;
106
293
  }
294
+
295
+ /**
296
+ * @param {Source} source source
297
+ * @param {Module} module module
298
+ * @param {ModuleRenderContext} renderContext render context
299
+ * @param {Omit<LibraryContext<T>, "options">} libraryContext context
300
+ * @returns {Source} source with library export
301
+ */
302
+ renderModuleContent(
303
+ source,
304
+ module,
305
+ { factory, inlinedInIIFE, chunk },
306
+ libraryContext
307
+ ) {
308
+ const exportsSource =
309
+ module.buildMeta &&
310
+ module.buildMeta.exportsSourceByRuntime &&
311
+ module.buildMeta.exportsSourceByRuntime.get(chunk.runtime);
312
+
313
+ // Re-add the module's exports source when rendered in factory or as an inlined startup module wrapped in an IIFE
314
+ if ((inlinedInIIFE || factory) && exportsSource) {
315
+ return new ConcatSource(exportsSource, source);
316
+ }
317
+ return source;
318
+ }
107
319
  }
108
320
 
109
321
  module.exports = ModuleLibraryPlugin;
@@ -17,10 +17,12 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
17
17
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
18
18
  /** @typedef {import("../Chunk")} Chunk */
19
19
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
20
- /** @typedef {import("../Compiler")} Compiler */
21
20
  /** @typedef {import("../javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
22
21
  /** @typedef {import("../util/Hash")} Hash */
23
- /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
22
+ /**
23
+ * @template T
24
+ * @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T>
25
+ */
24
26
 
25
27
  /**
26
28
  * @typedef {object} SystemLibraryPluginOptions
@@ -73,7 +75,9 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
73
75
  render(source, { chunkGraph, moduleGraph, chunk }, { options, compilation }) {
74
76
  const modules = chunkGraph
75
77
  .getChunkModules(chunk)
76
- .filter(m => m instanceof ExternalModule && m.externalType === "system");
78
+ .filter(
79
+ (m) => m instanceof ExternalModule && m.externalType === "system"
80
+ );
77
81
  const externals = /** @type {ExternalModule[]} */ (modules);
78
82
 
79
83
  // The name this bundle should be registered as with System
@@ -83,7 +87,7 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
83
87
 
84
88
  // The array of dependencies that are external to webpack and will be provided by System
85
89
  const systemDependencies = JSON.stringify(
86
- externals.map(m =>
90
+ externals.map((m) =>
87
91
  typeof m.request === "object" && !Array.isArray(m.request)
88
92
  ? m.request.amd
89
93
  : m.request
@@ -95,7 +99,7 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
95
99
 
96
100
  // An array of the internal variable names for the webpack externals
97
101
  const externalWebpackNames = externals.map(
98
- m =>
102
+ (m) =>
99
103
  `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(
100
104
  `${chunkGraph.getModuleId(m)}`
101
105
  )}__`
@@ -103,7 +107,7 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
103
107
 
104
108
  // Declaring variables for the internal variable names for the webpack externals
105
109
  const externalVarDeclarations = externalWebpackNames
106
- .map(name => `var ${name} = {};`)
110
+ .map((name) => `var ${name} = {};`)
107
111
  .join("\n");
108
112
 
109
113
  // Define __esModule flag on all internal variables and helpers
@@ -133,11 +137,21 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
133
137
  );
134
138
  if (used) {
135
139
  if (otherUnused || used !== exportInfo.name) {
136
- instructions.push(
137
- `${external}${propertyAccess([
138
- used
139
- ])} = module${propertyAccess([exportInfo.name])};`
140
- );
140
+ if (exportInfo.name === "default") {
141
+ // Ideally we should use `module && module.__esModule ? module['default'] : module`
142
+ // But we need to keep compatibility with SystemJS format libraries (they are using `default`) and bundled SystemJS libraries from commonjs format
143
+ instructions.push(
144
+ `${external}${propertyAccess([
145
+ used
146
+ ])} = module["default"] || module;`
147
+ );
148
+ } else {
149
+ instructions.push(
150
+ `${external}${propertyAccess([
151
+ used
152
+ ])} = module${propertyAccess([exportInfo.name])};`
153
+ );
154
+ }
141
155
  handledNames.push(exportInfo.name);
142
156
  }
143
157
  } else {
@@ -153,6 +167,10 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
153
167
  `Object.defineProperty(${external}, "__esModule", { value: true });`
154
168
  );
155
169
  }
170
+ // See comment above
171
+ instructions.push(
172
+ `${external}["default"] = module["default"] || module;`
173
+ );
156
174
  if (handledNames.length > 0) {
157
175
  const name = `${external}handledNames`;
158
176
  externalVarInitialization.push(
@@ -16,26 +16,26 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
16
16
  /** @typedef {import("../../declarations/WebpackOptions").LibraryName} LibraryName */
17
17
  /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
18
18
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
19
- /** @typedef {import("../Compiler")} Compiler */
20
19
  /** @typedef {import("../javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
21
20
  /** @typedef {import("../ExternalModule").RequestRecord} RequestRecord */
22
- /** @typedef {import("../util/Hash")} Hash */
21
+
23
22
  /**
24
23
  * @template T
25
- * @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>}
26
- * LibraryContext<T>
24
+ * @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T>
27
25
  */
28
26
 
29
27
  /**
30
28
  * @param {string[]} accessor the accessor to convert to path
31
29
  * @returns {string} the path
32
30
  */
33
- const accessorToObjectAccess = accessor =>
34
- accessor.map(a => `[${JSON.stringify(a)}]`).join("");
31
+ const accessorToObjectAccess = (accessor) =>
32
+ accessor.map((a) => `[${JSON.stringify(a)}]`).join("");
33
+
34
+ /** @typedef {string | string[]} Accessor */
35
35
 
36
36
  /**
37
- * @param {string|undefined} base the path prefix
38
- * @param {string|string[]} accessor the accessor
37
+ * @param {string | undefined} base the path prefix
38
+ * @param {Accessor} accessor the accessor
39
39
  * @param {string=} joinWith the element separator
40
40
  * @returns {string} the path
41
41
  */
@@ -47,15 +47,14 @@ const accessorAccess = (base, accessor, joinWith = ", ") => {
47
47
  ? base + accessorToObjectAccess(accessors.slice(0, idx + 1))
48
48
  : accessors[0] + accessorToObjectAccess(accessors.slice(1, idx + 1));
49
49
  if (idx === accessors.length - 1) return a;
50
- if (idx === 0 && base === undefined)
50
+ if (idx === 0 && base === undefined) {
51
51
  return `${a} = typeof ${a} === "object" ? ${a} : {}`;
52
+ }
52
53
  return `${a} = ${a} || {}`;
53
54
  })
54
55
  .join(joinWith);
55
56
  };
56
57
 
57
- /** @typedef {string | string[] | LibraryCustomUmdObject} UmdLibraryPluginName */
58
-
59
58
  /**
60
59
  * @typedef {object} UmdLibraryPluginOptions
61
60
  * @property {LibraryType} type
@@ -130,7 +129,7 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
130
129
  const modules = chunkGraph
131
130
  .getChunkModules(chunk)
132
131
  .filter(
133
- m =>
132
+ (m) =>
134
133
  m instanceof ExternalModule &&
135
134
  (m.externalType === "umd" || m.externalType === "umd2")
136
135
  );
@@ -147,7 +146,7 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
147
146
  requiredExternals.push(m);
148
147
  }
149
148
  }
150
- externals = requiredExternals.concat(optionalExternals);
149
+ externals = [...requiredExternals, ...optionalExternals];
151
150
  } else {
152
151
  requiredExternals = externals;
153
152
  }
@@ -156,7 +155,7 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
156
155
  * @param {string} str the string to replace
157
156
  * @returns {string} the replaced keys
158
157
  */
159
- const replaceKeys = str =>
158
+ const replaceKeys = (str) =>
160
159
  compilation.getPath(str, {
161
160
  chunk
162
161
  });
@@ -165,10 +164,10 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
165
164
  * @param {ExternalModule[]} modules external modules
166
165
  * @returns {string} result
167
166
  */
168
- const externalsDepsArray = modules =>
167
+ const externalsDepsArray = (modules) =>
169
168
  `[${replaceKeys(
170
169
  modules
171
- .map(m =>
170
+ .map((m) =>
172
171
  JSON.stringify(
173
172
  typeof m.request === "object"
174
173
  ? /** @type {RequestRecord} */
@@ -183,16 +182,19 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
183
182
  * @param {ExternalModule[]} modules external modules
184
183
  * @returns {string} result
185
184
  */
186
- const externalsRootArray = modules =>
185
+ const externalsRootArray = (modules) =>
187
186
  replaceKeys(
188
187
  modules
189
- .map(m => {
188
+ .map((m) => {
190
189
  let request = m.request;
191
- if (typeof request === "object")
190
+ if (typeof request === "object") {
192
191
  request =
193
192
  /** @type {RequestRecord} */
194
193
  (request).root;
195
- return `root${accessorToObjectAccess(/** @type {string[]} */ ([]).concat(request))}`;
194
+ }
195
+ return `root${accessorToObjectAccess([
196
+ ...(Array.isArray(request) ? request : [request])
197
+ ])}`;
196
198
  })
197
199
  .join(", ")
198
200
  );
@@ -201,10 +203,10 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
201
203
  * @param {string} type the type
202
204
  * @returns {string} external require array
203
205
  */
204
- const externalsRequireArray = type =>
206
+ const externalsRequireArray = (type) =>
205
207
  replaceKeys(
206
208
  externals
207
- .map(m => {
209
+ .map((m) => {
208
210
  let expr;
209
211
  let request = m.request;
210
212
  if (typeof request === "object") {
@@ -234,10 +236,10 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
234
236
  * @param {ExternalModule[]} modules external modules
235
237
  * @returns {string} arguments
236
238
  */
237
- const externalsArguments = modules =>
239
+ const externalsArguments = (modules) =>
238
240
  modules
239
241
  .map(
240
- m =>
242
+ (m) =>
241
243
  `__WEBPACK_EXTERNAL_MODULE_${Template.toIdentifier(
242
244
  `${chunkGraph.getModuleId(m)}`
243
245
  )}__`
@@ -245,14 +247,14 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
245
247
  .join(", ");
246
248
 
247
249
  /**
248
- * @param {string| string[]} library library name
250
+ * @param {Accessor} library library name
249
251
  * @returns {string} stringified library name
250
252
  */
251
- const libraryName = library =>
253
+ const libraryName = (library) =>
252
254
  JSON.stringify(
253
255
  replaceKeys(
254
256
  /** @type {string} */
255
- (/** @type {string[]} */ ([]).concat(library).pop())
257
+ ([...(Array.isArray(library) ? library : [library])].pop())
256
258
  )
257
259
  );
258
260
 
@@ -279,10 +281,11 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
279
281
  * @param {keyof LibraryCustomUmdCommentObject} type type
280
282
  * @returns {string} comment
281
283
  */
282
- const getAuxiliaryComment = type => {
284
+ const getAuxiliaryComment = (type) => {
283
285
  if (auxiliaryComment) {
284
- if (typeof auxiliaryComment === "string")
286
+ if (typeof auxiliaryComment === "string") {
285
287
  return `\t//${auxiliaryComment}\n`;
288
+ }
286
289
  if (auxiliaryComment[type]) return `\t//${auxiliaryComment[type]}\n`;
287
290
  }
288
291
  return "";
@@ -315,7 +318,7 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
315
318
  "commonjs"
316
319
  )} else if(typeof exports === 'object')\n` +
317
320
  ` exports[${libraryName(
318
- /** @type {string | string[]} */
321
+ /** @type {Accessor} */
319
322
  (names.commonjs || names.root)
320
323
  )}] = factory(${externalsRequireArray(
321
324
  "commonjs"
@@ -323,7 +326,7 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
323
326
  ` ${replaceKeys(
324
327
  accessorAccess(
325
328
  "root",
326
- /** @type {string | string[]} */
329
+ /** @type {Accessor} */
327
330
  (names.root || names.commonjs)
328
331
  )
329
332
  )} = factory(${externalsRootArray(externals)});\n`
@@ -335,7 +338,7 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
335
338
  : " var a = factory();\n"
336
339
  } for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];\n` +
337
340
  " }\n"
338
- }})(${runtimeTemplate.outputOptions.globalObject}, ${
341
+ }})(${runtimeTemplate.globalObject}, ${
339
342
  runtimeTemplate.supportsArrowFunction()
340
343
  ? `(${externalsArguments(externals)}) =>`
341
344
  : `function(${externalsArguments(externals)})`