webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -26,7 +26,7 @@ const COMMON_LIBRARY_NAME_MESSAGE =
26
26
 
27
27
  /**
28
28
  * @template T
29
- * @typedef {Object} LibraryContext
29
+ * @typedef {object} LibraryContext
30
30
  * @property {Compilation} compilation
31
31
  * @property {ChunkGraph} chunkGraph
32
32
  * @property {T} options
@@ -37,7 +37,7 @@ const COMMON_LIBRARY_NAME_MESSAGE =
37
37
  */
38
38
  class AbstractLibraryPlugin {
39
39
  /**
40
- * @param {Object} options options
40
+ * @param {object} options options
41
41
  * @param {string} options.pluginName name of the plugin
42
42
  * @param {LibraryType} options.type used library type
43
43
  */
@@ -87,6 +87,10 @@ class AbstractLibraryPlugin {
87
87
  }
88
88
  );
89
89
 
90
+ /**
91
+ * @param {Chunk} chunk chunk
92
+ * @returns {TODO} options for the chunk
93
+ */
90
94
  const getOptionsForChunk = chunk => {
91
95
  if (compilation.chunkGraph.getNumberOfEntryModules(chunk) === 0)
92
96
  return false;
@@ -21,14 +21,15 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
21
21
  /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
22
22
 
23
23
  /**
24
- * @typedef {Object} AmdLibraryPluginOptions
24
+ * @typedef {object} AmdLibraryPluginOptions
25
25
  * @property {LibraryType} type
26
26
  * @property {boolean=} requireAsWrapper
27
27
  */
28
28
 
29
29
  /**
30
- * @typedef {Object} AmdLibraryPluginParsed
30
+ * @typedef {object} AmdLibraryPluginParsed
31
31
  * @property {string} name
32
+ * @property {string} amdContainer
32
33
  */
33
34
 
34
35
  /**
@@ -52,23 +53,21 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
52
53
  * @returns {T | false} preprocess as needed by overriding
53
54
  */
54
55
  parseOptions(library) {
55
- const { name } = library;
56
+ const { name, amdContainer } = library;
56
57
  if (this.requireAsWrapper) {
57
58
  if (name) {
58
59
  throw new Error(
59
60
  `AMD library name must be unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
60
61
  );
61
62
  }
62
- } else {
63
- if (name && typeof name !== "string") {
64
- throw new Error(
65
- `AMD library name must be a simple string or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
66
- );
67
- }
63
+ } else if (name && typeof name !== "string") {
64
+ throw new Error(
65
+ `AMD library name must be a simple string or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
66
+ );
68
67
  }
69
- return {
70
- name: /** @type {string=} */ (name)
71
- };
68
+ const _name = /** @type {string} */ (name);
69
+ const _amdContainer = /** @type {string} */ (amdContainer);
70
+ return { name: _name, amdContainer: _amdContainer };
72
71
  }
73
72
 
74
73
  /**
@@ -85,7 +84,11 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
85
84
  const modern = runtimeTemplate.supportsArrowFunction();
86
85
  const modules = chunkGraph
87
86
  .getChunkModules(chunk)
88
- .filter(m => m instanceof ExternalModule);
87
+ .filter(
88
+ m =>
89
+ m instanceof ExternalModule &&
90
+ (m.externalType === "amd" || m.externalType === "amd-require")
91
+ );
89
92
  const externals = /** @type {ExternalModule[]} */ (modules);
90
93
  const externalsDepsArray = JSON.stringify(
91
94
  externals.map(m =>
@@ -111,9 +114,14 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
111
114
  (iife || !chunk.hasRuntime() ? " return " : "\n");
112
115
  const fnEnd = iife ? ";\n}" : "\n}";
113
116
 
117
+ let amdContainerPrefix = "";
118
+ if (options.amdContainer) {
119
+ amdContainerPrefix = `${options.amdContainer}.`;
120
+ }
121
+
114
122
  if (this.requireAsWrapper) {
115
123
  return new ConcatSource(
116
- `require(${externalsDepsArray}, ${fnStart}`,
124
+ `${amdContainerPrefix}require(${externalsDepsArray}, ${fnStart}`,
117
125
  source,
118
126
  `${fnEnd});`
119
127
  );
@@ -123,19 +131,24 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
123
131
  });
124
132
 
125
133
  return new ConcatSource(
126
- `define(${JSON.stringify(name)}, ${externalsDepsArray}, ${fnStart}`,
134
+ `${amdContainerPrefix}define(${JSON.stringify(
135
+ name
136
+ )}, ${externalsDepsArray}, ${fnStart}`,
127
137
  source,
128
138
  `${fnEnd});`
129
139
  );
130
140
  } else if (externalsArguments) {
131
141
  return new ConcatSource(
132
- `define(${externalsDepsArray}, ${fnStart}`,
142
+ `${amdContainerPrefix}define(${externalsDepsArray}, ${fnStart}`,
133
143
  source,
134
144
  `${fnEnd});`
135
145
  );
136
- } else {
137
- return new ConcatSource(`define(${fnStart}`, source, `${fnEnd});`);
138
146
  }
147
+ return new ConcatSource(
148
+ `${amdContainerPrefix}define(${fnStart}`,
149
+ source,
150
+ `${fnEnd});`
151
+ );
139
152
  }
140
153
 
141
154
  /**
@@ -155,6 +168,9 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
155
168
  chunk
156
169
  });
157
170
  hash.update(name);
171
+ } else if (options.amdContainer) {
172
+ hash.update("amdContainer");
173
+ hash.update(options.amdContainer);
158
174
  }
159
175
  }
160
176
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
9
  const { UsageState } = require("../ExportsInfo");
10
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
11
  const Template = require("../Template");
11
12
  const propertyAccess = require("../util/propertyAccess");
12
13
  const { getEntryRuntime } = require("../util/runtime");
@@ -16,6 +17,7 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
16
17
  /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
17
18
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
18
19
  /** @typedef {import("../Chunk")} Chunk */
20
+ /** @typedef {import("../Compilation")} Compilation */
19
21
  /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
20
22
  /** @typedef {import("../Compiler")} Compiler */
21
23
  /** @typedef {import("../Module")} Module */
@@ -34,9 +36,8 @@ const IDENTIFIER_REGEX =
34
36
  * @param {string} name name to be validated
35
37
  * @returns {boolean} true, when valid
36
38
  */
37
- const isNameValid = name => {
38
- return !KEYWORD_REGEX.test(name) && IDENTIFIER_REGEX.test(name);
39
- };
39
+ const isNameValid = name =>
40
+ !KEYWORD_REGEX.test(name) && IDENTIFIER_REGEX.test(name);
40
41
 
41
42
  /**
42
43
  * @param {string[]} accessor variable plus properties
@@ -58,6 +59,7 @@ const accessWithInit = (accessor, existingLength, initLast = false) => {
58
59
  let i = 1;
59
60
 
60
61
  // all properties printed so far (excluding base)
62
+ /** @type {string[] | undefined} */
61
63
  let propsSoFar;
62
64
 
63
65
  // if there is existingLength, print all properties until this position as property access
@@ -88,16 +90,16 @@ const accessWithInit = (accessor, existingLength, initLast = false) => {
88
90
  };
89
91
 
90
92
  /**
91
- * @typedef {Object} AssignLibraryPluginOptions
93
+ * @typedef {object} AssignLibraryPluginOptions
92
94
  * @property {LibraryType} type
93
95
  * @property {string[] | "global"} prefix name prefix
94
96
  * @property {string | false} declare declare name as variable
95
- * @property {"error"|"copy"|"assign"} unnamed behavior for unnamed library name
97
+ * @property {"error"|"static"|"copy"|"assign"} unnamed behavior for unnamed library name
96
98
  * @property {"copy"|"assign"=} named behavior for named library name
97
99
  */
98
100
 
99
101
  /**
100
- * @typedef {Object} AssignLibraryPluginParsed
102
+ * @typedef {object} AssignLibraryPluginParsed
101
103
  * @property {string | string[]} name
102
104
  * @property {string | string[] | undefined} export
103
105
  */
@@ -133,15 +135,14 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
133
135
  `Library name must be a string or string array. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
134
136
  );
135
137
  }
136
- } else {
137
- if (name && typeof name !== "string" && !Array.isArray(name)) {
138
- throw new Error(
139
- `Library name must be a string, string array or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
140
- );
141
- }
138
+ } else if (name && typeof name !== "string" && !Array.isArray(name)) {
139
+ throw new Error(
140
+ `Library name must be a string, string array or unset. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
141
+ );
142
142
  }
143
+ const _name = /** @type {string | string[]} */ (name);
143
144
  return {
144
- name: /** @type {string|string[]=} */ (name),
145
+ name: _name,
145
146
  export: library.export
146
147
  };
147
148
  }
@@ -172,12 +173,22 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
172
173
  moduleGraph.addExtraReason(module, "used as library export");
173
174
  }
174
175
 
176
+ /**
177
+ * @param {Compilation} compilation the compilation
178
+ * @returns {string[]} the prefix
179
+ */
175
180
  _getPrefix(compilation) {
176
181
  return this.prefix === "global"
177
- ? [compilation.outputOptions.globalObject]
182
+ ? [compilation.runtimeTemplate.globalObject]
178
183
  : this.prefix;
179
184
  }
180
185
 
186
+ /**
187
+ * @param {AssignLibraryPluginParsed} options the library options
188
+ * @param {Chunk} chunk the chunk
189
+ * @param {Compilation} compilation the compilation
190
+ * @returns {Array<string>} the resolved full name
191
+ */
181
192
  _getResolvedFullName(options, chunk, compilation) {
182
193
  const prefix = this._getPrefix(compilation);
183
194
  const fullName = options.name ? prefix.concat(options.name) : prefix;
@@ -222,9 +233,15 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
222
233
  * @param {LibraryContext<T>} libraryContext context
223
234
  * @returns {string | undefined} bailout reason
224
235
  */
225
- embedInRuntimeBailout(module, { chunk }, { options, compilation }) {
236
+ embedInRuntimeBailout(
237
+ module,
238
+ { chunk, codeGenerationResults },
239
+ { options, compilation }
240
+ ) {
241
+ const { data } = codeGenerationResults.get(module, chunk.runtime);
226
242
  const topLevelDeclarations =
227
- module.buildInfo && module.buildInfo.topLevelDeclarations;
243
+ (data && data.get("topLevelDeclarations")) ||
244
+ (module.buildInfo && module.buildInfo.topLevelDeclarations);
228
245
  if (!topLevelDeclarations)
229
246
  return "it doesn't tell about top level declarations.";
230
247
  const fullNameResolved = this._getResolvedFullName(
@@ -261,19 +278,42 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
261
278
  * @param {LibraryContext<T>} libraryContext context
262
279
  * @returns {Source} source with library export
263
280
  */
264
- renderStartup(source, module, { chunk }, { options, compilation }) {
281
+ renderStartup(
282
+ source,
283
+ module,
284
+ { moduleGraph, chunk },
285
+ { options, compilation }
286
+ ) {
265
287
  const fullNameResolved = this._getResolvedFullName(
266
288
  options,
267
289
  chunk,
268
290
  compilation
269
291
  );
292
+ const staticExports = this.unnamed === "static";
270
293
  const exportAccess = options.export
271
294
  ? propertyAccess(
272
295
  Array.isArray(options.export) ? options.export : [options.export]
273
- )
296
+ )
274
297
  : "";
275
298
  const result = new ConcatSource(source);
276
- if (options.name ? this.named === "copy" : this.unnamed === "copy") {
299
+ if (staticExports) {
300
+ const exportsInfo = moduleGraph.getExportsInfo(module);
301
+ const exportTarget = accessWithInit(
302
+ fullNameResolved,
303
+ this._getPrefix(compilation).length,
304
+ true
305
+ );
306
+ for (const exportInfo of exportsInfo.orderedExports) {
307
+ if (!exportInfo.provided) continue;
308
+ const nameAccess = propertyAccess([exportInfo.name]);
309
+ result.add(
310
+ `${exportTarget}${nameAccess} = ${RuntimeGlobals.exports}${exportAccess}${nameAccess};\n`
311
+ );
312
+ }
313
+ result.add(
314
+ `Object.defineProperty(${exportTarget}, "__esModule", { value: true });\n`
315
+ );
316
+ } else if (options.name ? this.named === "copy" : this.unnamed === "copy") {
277
317
  result.add(
278
318
  `var __webpack_export_target__ = ${accessWithInit(
279
319
  fullNameResolved,
@@ -281,10 +321,11 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
281
321
  true
282
322
  )};\n`
283
323
  );
284
- let exports = "__webpack_exports__";
324
+ /** @type {string} */
325
+ let exports = RuntimeGlobals.exports;
285
326
  if (exportAccess) {
286
327
  result.add(
287
- `var __webpack_exports_export__ = __webpack_exports__${exportAccess};\n`
328
+ `var __webpack_exports_export__ = ${RuntimeGlobals.exports}${exportAccess};\n`
288
329
  );
289
330
  exports = "__webpack_exports_export__";
290
331
  }
@@ -300,7 +341,7 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
300
341
  fullNameResolved,
301
342
  this._getPrefix(compilation).length,
302
343
  false
303
- )} = __webpack_exports__${exportAccess};\n`
344
+ )} = ${RuntimeGlobals.exports}${exportAccess};\n`
304
345
  );
305
346
  }
306
347
  return result;
@@ -313,7 +354,7 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
313
354
  * @returns {void}
314
355
  */
315
356
  runtimeRequirements(chunk, set, libraryContext) {
316
- // we don't need to return exports from runtime
357
+ set.add(RuntimeGlobals.exports);
317
358
  }
318
359
 
319
360
  /**
@@ -325,15 +366,10 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
325
366
  */
326
367
  chunkHash(chunk, hash, chunkHashContext, { options, compilation }) {
327
368
  hash.update("AssignLibraryPlugin");
328
- const prefix =
329
- this.prefix === "global"
330
- ? [compilation.outputOptions.globalObject]
331
- : this.prefix;
332
- const fullName = options.name ? prefix.concat(options.name) : prefix;
333
- const fullNameResolved = fullName.map(n =>
334
- compilation.getPath(n, {
335
- chunk
336
- })
369
+ const fullNameResolved = this._getResolvedFullName(
370
+ options,
371
+ chunk,
372
+ compilation
337
373
  );
338
374
  if (options.name ? this.named === "copy" : this.unnamed === "copy") {
339
375
  hash.update("copy");
@@ -12,6 +12,10 @@
12
12
  /** @type {WeakMap<Compiler, Set<LibraryType>>} */
13
13
  const enabledTypes = new WeakMap();
14
14
 
15
+ /**
16
+ * @param {Compiler} compiler the compiler instance
17
+ * @returns {Set<LibraryType>} enabled types
18
+ */
15
19
  const getEnabledTypes = compiler => {
16
20
  let set = enabledTypes.get(compiler);
17
21
  if (set === undefined) {
@@ -48,10 +52,11 @@ class EnableLibraryPlugin {
48
52
  throw new Error(
49
53
  `Library type "${type}" is not enabled. ` +
50
54
  "EnableLibraryPlugin need to be used to enable this type of library. " +
51
- 'This usually happens through the "output.enabledLibraryTypes" option. ' +
52
- 'If you are using a function as entry which sets "library", you need to add all potential library types to "output.enabledLibraryTypes". ' +
53
- "These types are enabled: " +
54
- Array.from(getEnabledTypes(compiler)).join(", ")
55
+ `This usually happens through the "output.enabledLibraryTypes" option. ` +
56
+ `If you are using a function as entry which sets "library", you need to add all potential library types to "output.enabledLibraryTypes". ` +
57
+ `These types are enabled: ${Array.from(
58
+ getEnabledTypes(compiler)
59
+ ).join(", ")}`
55
60
  );
56
61
  }
57
62
  }
@@ -74,12 +79,13 @@ class EnableLibraryPlugin {
74
79
  const ExportPropertyTemplatePlugin = require("./ExportPropertyLibraryPlugin");
75
80
  new ExportPropertyTemplatePlugin({
76
81
  type,
77
- nsObjectUsed: type !== "module"
82
+ nsObjectUsed: !["module", "modern-module"].includes(type),
83
+ runtimeExportsUsed: type !== "modern-module"
78
84
  }).apply(compiler);
79
85
  };
80
86
  switch (type) {
81
87
  case "var": {
82
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
88
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
83
89
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
84
90
  new AssignLibraryPlugin({
85
91
  type,
@@ -90,7 +96,7 @@ class EnableLibraryPlugin {
90
96
  break;
91
97
  }
92
98
  case "assign-properties": {
93
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
99
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
94
100
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
95
101
  new AssignLibraryPlugin({
96
102
  type,
@@ -102,7 +108,7 @@ class EnableLibraryPlugin {
102
108
  break;
103
109
  }
104
110
  case "assign": {
105
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
111
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
106
112
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
107
113
  new AssignLibraryPlugin({
108
114
  type,
@@ -113,7 +119,7 @@ class EnableLibraryPlugin {
113
119
  break;
114
120
  }
115
121
  case "this": {
116
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
122
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
117
123
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
118
124
  new AssignLibraryPlugin({
119
125
  type,
@@ -124,7 +130,7 @@ class EnableLibraryPlugin {
124
130
  break;
125
131
  }
126
132
  case "window": {
127
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
133
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
128
134
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
129
135
  new AssignLibraryPlugin({
130
136
  type,
@@ -135,7 +141,7 @@ class EnableLibraryPlugin {
135
141
  break;
136
142
  }
137
143
  case "self": {
138
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
144
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
139
145
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
140
146
  new AssignLibraryPlugin({
141
147
  type,
@@ -146,7 +152,7 @@ class EnableLibraryPlugin {
146
152
  break;
147
153
  }
148
154
  case "global": {
149
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
155
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
150
156
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
151
157
  new AssignLibraryPlugin({
152
158
  type,
@@ -157,7 +163,7 @@ class EnableLibraryPlugin {
157
163
  break;
158
164
  }
159
165
  case "commonjs": {
160
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
166
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
161
167
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
162
168
  new AssignLibraryPlugin({
163
169
  type,
@@ -167,9 +173,20 @@ class EnableLibraryPlugin {
167
173
  }).apply(compiler);
168
174
  break;
169
175
  }
176
+ case "commonjs-static": {
177
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
178
+ const AssignLibraryPlugin = require("./AssignLibraryPlugin");
179
+ new AssignLibraryPlugin({
180
+ type,
181
+ prefix: ["exports"],
182
+ declare: false,
183
+ unnamed: "static"
184
+ }).apply(compiler);
185
+ break;
186
+ }
170
187
  case "commonjs2":
171
188
  case "commonjs-module": {
172
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
189
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
173
190
  const AssignLibraryPlugin = require("./AssignLibraryPlugin");
174
191
  new AssignLibraryPlugin({
175
192
  type,
@@ -223,6 +240,14 @@ class EnableLibraryPlugin {
223
240
  }).apply(compiler);
224
241
  break;
225
242
  }
243
+ case "modern-module": {
244
+ enableExportProperty();
245
+ const ModernModuleLibraryPlugin = require("./ModernModuleLibraryPlugin");
246
+ new ModernModuleLibraryPlugin({
247
+ type
248
+ }).apply(compiler);
249
+ break;
250
+ }
226
251
  default:
227
252
  throw new Error(`Unsupported library type ${type}.
228
253
  Plugins which provide custom library types must call EnableLibraryPlugin.setEnabled(compiler, type) to disable this error.`);
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
9
  const { UsageState } = require("../ExportsInfo");
10
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
11
  const propertyAccess = require("../util/propertyAccess");
11
12
  const { getEntryRuntime } = require("../util/runtime");
12
13
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
@@ -21,14 +22,15 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
21
22
  /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
22
23
 
23
24
  /**
24
- * @typedef {Object} ExportPropertyLibraryPluginParsed
25
+ * @typedef {object} ExportPropertyLibraryPluginParsed
25
26
  * @property {string | string[]} export
26
27
  */
27
28
 
28
29
  /**
29
- * @typedef {Object} ExportPropertyLibraryPluginOptions
30
+ * @typedef {object} ExportPropertyLibraryPluginOptions
30
31
  * @property {LibraryType} type
31
32
  * @property {boolean} nsObjectUsed the namespace object is used
33
+ * @property {boolean} runtimeExportsUsed runtime exports are used
32
34
  */
33
35
  /**
34
36
  * @typedef {ExportPropertyLibraryPluginParsed} T
@@ -38,12 +40,13 @@ class ExportPropertyLibraryPlugin extends AbstractLibraryPlugin {
38
40
  /**
39
41
  * @param {ExportPropertyLibraryPluginOptions} options options
40
42
  */
41
- constructor({ type, nsObjectUsed }) {
43
+ constructor({ type, nsObjectUsed, runtimeExportsUsed }) {
42
44
  super({
43
45
  pluginName: "ExportPropertyLibraryPlugin",
44
46
  type
45
47
  });
46
48
  this.nsObjectUsed = nsObjectUsed;
49
+ this.runtimeExportsUsed = runtimeExportsUsed;
47
50
  }
48
51
 
49
52
  /**
@@ -92,7 +95,11 @@ class ExportPropertyLibraryPlugin extends AbstractLibraryPlugin {
92
95
  * @param {LibraryContext<T>} libraryContext context
93
96
  * @returns {void}
94
97
  */
95
- runtimeRequirements(chunk, set, libraryContext) {}
98
+ runtimeRequirements(chunk, set, libraryContext) {
99
+ if (this.runtimeExportsUsed) {
100
+ set.add(RuntimeGlobals.exports);
101
+ }
102
+ }
96
103
 
97
104
  /**
98
105
  * @param {Source} source source
@@ -103,7 +110,9 @@ class ExportPropertyLibraryPlugin extends AbstractLibraryPlugin {
103
110
  */
104
111
  renderStartup(source, module, renderContext, { options }) {
105
112
  if (!options.export) return source;
106
- const postfix = `__webpack_exports__ = __webpack_exports__${propertyAccess(
113
+ const postfix = `${RuntimeGlobals.exports} = ${
114
+ RuntimeGlobals.exports
115
+ }${propertyAccess(
107
116
  Array.isArray(options.export) ? options.export : [options.export]
108
117
  )};\n`;
109
118
  return new ConcatSource(source, postfix);
@@ -19,12 +19,12 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
19
19
  /** @template T @typedef {import("./AbstractLibraryPlugin").LibraryContext<T>} LibraryContext<T> */
20
20
 
21
21
  /**
22
- * @typedef {Object} JsonpLibraryPluginOptions
22
+ * @typedef {object} JsonpLibraryPluginOptions
23
23
  * @property {LibraryType} type
24
24
  */
25
25
 
26
26
  /**
27
- * @typedef {Object} JsonpLibraryPluginParsed
27
+ * @typedef {object} JsonpLibraryPluginParsed
28
28
  * @property {string} name
29
29
  */
30
30
 
@@ -54,8 +54,9 @@ class JsonpLibraryPlugin extends AbstractLibraryPlugin {
54
54
  `Jsonp library name must be a simple string. ${AbstractLibraryPlugin.COMMON_LIBRARY_NAME_MESSAGE}`
55
55
  );
56
56
  }
57
+ const _name = /** @type {string} */ (name);
57
58
  return {
58
- name: /** @type {string} */ (name)
59
+ name: _name
59
60
  };
60
61
  }
61
62