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
@@ -12,13 +12,15 @@ const { UsageState } = require("./ExportsInfo");
12
12
  const InitFragment = require("./InitFragment");
13
13
  const Module = require("./Module");
14
14
  const {
15
- JS_TYPES,
15
+ CSS_IMPORT_TYPES,
16
16
  CSS_URL_TYPES,
17
- CSS_IMPORT_TYPES
18
- } = require("./ModuleSourceTypesConstants");
17
+ JAVASCRIPT_TYPE,
18
+ JAVASCRIPT_TYPES
19
+ } = require("./ModuleSourceTypeConstants");
19
20
  const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
20
21
  const RuntimeGlobals = require("./RuntimeGlobals");
21
22
  const Template = require("./Template");
23
+ const { DEFAULTS } = require("./config/defaults");
22
24
  const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
23
25
  const createHash = require("./util/createHash");
24
26
  const extractUrlAndGlobal = require("./util/extractUrlAndGlobal");
@@ -27,20 +29,26 @@ const propertyAccess = require("./util/propertyAccess");
27
29
  const { register } = require("./util/serialization");
28
30
 
29
31
  /** @typedef {import("webpack-sources").Source} Source */
30
- /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
32
+ /** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
33
+ /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
34
+ /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
31
35
  /** @typedef {import("./Chunk")} Chunk */
32
36
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
33
37
  /** @typedef {import("./Compilation")} Compilation */
38
+ /** @typedef {import("./Compilation").UnsafeCacheData} UnsafeCacheData */
34
39
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
35
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
36
40
  /** @typedef {import("./ExportsInfo")} ExportsInfo */
37
41
  /** @typedef {import("./Generator").GenerateContext} GenerateContext */
38
42
  /** @typedef {import("./Generator").SourceTypes} SourceTypes */
43
+ /** @typedef {import("./Module").ModuleId} ModuleId */
44
+ /** @typedef {import("./Module").BuildCallback} BuildCallback */
39
45
  /** @typedef {import("./Module").BuildInfo} BuildInfo */
40
46
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
41
47
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
42
48
  /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
43
49
  /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
50
+ /** @typedef {import("./Module").LibIdent} LibIdent */
51
+ /** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
44
52
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
45
53
  /** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
46
54
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
@@ -48,13 +56,11 @@ const { register } = require("./util/serialization");
48
56
  /** @typedef {import("./RequestShortener")} RequestShortener */
49
57
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
50
58
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
51
- /** @typedef {import("./WebpackError")} WebpackError */
52
59
  /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
53
60
  /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
54
61
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
55
62
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
56
63
  /** @typedef {import("./util/Hash")} Hash */
57
- /** @typedef {typeof import("./util/Hash")} HashConstructor */
58
64
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
59
65
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
60
66
 
@@ -71,17 +77,20 @@ const { register } = require("./util/serialization");
71
77
  * @property {string} expression
72
78
  * @property {InitFragment<ChunkRenderContext>[]=} chunkInitFragments
73
79
  * @property {ReadOnlyRuntimeRequirements=} runtimeRequirements
80
+ * @property {[string, string][]=} specifiers
74
81
  */
75
82
 
83
+ /** @typedef {true | [string, string][]} Imported */
84
+
76
85
  const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
77
86
  const RUNTIME_REQUIREMENTS_FOR_SCRIPT = new Set([RuntimeGlobals.loadScript]);
78
87
  const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
79
88
  RuntimeGlobals.definePropertyGetters
80
89
  ]);
81
- const EMPTY_RUNTIME_REQUIREMENTS = new Set([]);
90
+ const EMPTY_RUNTIME_REQUIREMENTS = new Set();
82
91
 
83
92
  /**
84
- * @param {string|string[]} variableName the variable name or path
93
+ * @param {string | string[]} variableName the variable name or path
85
94
  * @param {string} type the module system
86
95
  * @returns {SourceData} the generated source
87
96
  */
@@ -92,18 +101,22 @@ const getSourceForGlobalVariableExternal = (variableName, type) => {
92
101
  }
93
102
 
94
103
  // needed for e.g. window["some"]["thing"]
95
- const objectLookup = variableName.map(r => `[${JSON.stringify(r)}]`).join("");
104
+ const objectLookup = variableName
105
+ .map((r) => `[${JSON.stringify(r)}]`)
106
+ .join("");
96
107
  return {
97
108
  iife: type === "this",
98
109
  expression: `${type}${objectLookup}`
99
110
  };
100
111
  };
101
112
 
113
+ /** @typedef {string | string[]} ModuleAndSpecifiers */
114
+
102
115
  /**
103
- * @param {string|string[]} moduleAndSpecifiers the module request
116
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
104
117
  * @returns {SourceData} the generated source
105
118
  */
106
- const getSourceForCommonJsExternal = moduleAndSpecifiers => {
119
+ const getSourceForCommonJsExternal = (moduleAndSpecifiers) => {
107
120
  if (!Array.isArray(moduleAndSpecifiers)) {
108
121
  return {
109
122
  expression: `require(${JSON.stringify(moduleAndSpecifiers)})`
@@ -119,30 +132,38 @@ const getSourceForCommonJsExternal = moduleAndSpecifiers => {
119
132
  };
120
133
 
121
134
  /**
122
- * @param {string|string[]} moduleAndSpecifiers the module request
123
- * @param {string} importMetaName import.meta name
124
- * @param {boolean} needPrefix need to use `node:` prefix for `module` import
135
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
136
+ * @returns {InitFragment<ChunkRenderContext>} code
137
+ */
138
+ const getExternalModuleNodeCommonjsInitFragment = (runtimeTemplate) => {
139
+ const importMetaName = runtimeTemplate.outputOptions.importMetaName;
140
+
141
+ return new InitFragment(
142
+ `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from ${runtimeTemplate.renderNodePrefixForCoreModule(
143
+ "module"
144
+ )};\n${runtimeTemplate.renderConst()} __WEBPACK_EXTERNAL_createRequire_require = __WEBPACK_EXTERNAL_createRequire(${importMetaName}.url);\n`,
145
+ InitFragment.STAGE_HARMONY_IMPORTS,
146
+ 0,
147
+ "external module node-commonjs"
148
+ );
149
+ };
150
+
151
+ /**
152
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
153
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
125
154
  * @returns {SourceData} the generated source
126
155
  */
127
156
  const getSourceForCommonJsExternalInNodeModule = (
128
157
  moduleAndSpecifiers,
129
- importMetaName,
130
- needPrefix
158
+ runtimeTemplate
131
159
  ) => {
132
160
  const chunkInitFragments = [
133
- new InitFragment(
134
- `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "${
135
- needPrefix ? "node:" : ""
136
- }module";\n`,
137
- InitFragment.STAGE_HARMONY_IMPORTS,
138
- 0,
139
- "external module node-commonjs"
140
- )
161
+ getExternalModuleNodeCommonjsInitFragment(runtimeTemplate)
141
162
  ];
142
163
  if (!Array.isArray(moduleAndSpecifiers)) {
143
164
  return {
144
165
  chunkInitFragments,
145
- expression: `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)(${JSON.stringify(
166
+ expression: `__WEBPACK_EXTERNAL_createRequire_require(${JSON.stringify(
146
167
  moduleAndSpecifiers
147
168
  )})`
148
169
  };
@@ -150,14 +171,14 @@ const getSourceForCommonJsExternalInNodeModule = (
150
171
  const moduleName = moduleAndSpecifiers[0];
151
172
  return {
152
173
  chunkInitFragments,
153
- expression: `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)(${JSON.stringify(
174
+ expression: `__WEBPACK_EXTERNAL_createRequire_require(${JSON.stringify(
154
175
  moduleName
155
176
  )})${propertyAccess(moduleAndSpecifiers, 1)}`
156
177
  };
157
178
  };
158
179
 
159
180
  /**
160
- * @param {string|string[]} moduleAndSpecifiers the module request
181
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
161
182
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
162
183
  * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
163
184
  * @returns {SourceData} the generated source
@@ -212,8 +233,8 @@ const getSourceForImportExternal = (
212
233
 
213
234
  /**
214
235
  * @param {string} key key
215
- * @param {any | undefined} value value
216
- * @returns {undefined | string} replaced value
236
+ * @param {ImportAttributes | string | boolean | undefined} value value
237
+ * @returns {ImportAttributes | string | boolean | undefined} replaced value
217
238
  */
218
239
  const importAssertionReplacer = (key, value) => {
219
240
  if (key === "_isLegacyAssert") {
@@ -224,16 +245,23 @@ const importAssertionReplacer = (key, value) => {
224
245
  };
225
246
 
226
247
  /**
227
- * @extends {InitFragment<ChunkRenderContext>}
248
+ * @extends {InitFragment<GenerateContext>}
228
249
  */
229
250
  class ModuleExternalInitFragment extends InitFragment {
230
251
  /**
231
252
  * @param {string} request import source
253
+ * @param {Imported} imported the imported specifiers
232
254
  * @param {string=} ident recomputed ident
233
255
  * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
234
- * @param {string | HashConstructor=} hashFunction the hash function to use
256
+ * @param {HashFunction=} hashFunction the hash function to use
235
257
  */
236
- constructor(request, ident, dependencyMeta, hashFunction = "md4") {
258
+ constructor(
259
+ request,
260
+ imported,
261
+ ident,
262
+ dependencyMeta,
263
+ hashFunction = DEFAULTS.HASH_FUNCTION
264
+ ) {
237
265
  if (ident === undefined) {
238
266
  ident = Template.toIdentifier(request);
239
267
  if (ident !== request) {
@@ -243,31 +271,102 @@ class ModuleExternalInitFragment extends InitFragment {
243
271
  .slice(0, 8)}`;
244
272
  }
245
273
  }
246
- const identifier = `__WEBPACK_EXTERNAL_MODULE_${ident}__`;
274
+
247
275
  super(
248
- `import * as ${identifier} from ${JSON.stringify(request)}${
249
- dependencyMeta && dependencyMeta.attributes
250
- ? dependencyMeta.attributes._isLegacyAssert
251
- ? ` assert ${JSON.stringify(
252
- dependencyMeta.attributes,
253
- importAssertionReplacer
254
- )}`
255
- : ` with ${JSON.stringify(dependencyMeta.attributes)}`
256
- : ""
257
- };\n`,
276
+ "",
258
277
  InitFragment.STAGE_HARMONY_IMPORTS,
259
278
  0,
260
- `external module import ${ident}`
279
+ `external module import ${ident} ${imported === true ? imported : imported.join(" ")}`
261
280
  );
262
281
  this._ident = ident;
263
282
  this._request = request;
264
- this._dependencyMeta = request;
265
- this._identifier = identifier;
283
+ this._dependencyMeta = dependencyMeta;
284
+ this._identifier = this.buildIdentifier(ident);
285
+ this._imported = this.buildImported(imported);
286
+ }
287
+
288
+ /**
289
+ * @returns {Imported} imported
290
+ */
291
+ getImported() {
292
+ return this._imported;
293
+ }
294
+
295
+ /**
296
+ * @param {Imported} imported imported
297
+ */
298
+ setImported(imported) {
299
+ this._imported = imported;
300
+ }
301
+
302
+ /**
303
+ * @param {GenerateContext} context context
304
+ * @returns {string | Source | undefined} the source code that will be included as initialization code
305
+ */
306
+ getContent(context) {
307
+ const {
308
+ _dependencyMeta: dependencyMeta,
309
+ _imported: imported,
310
+ _request: request,
311
+ _identifier: identifier
312
+ } = this;
313
+ const attributes =
314
+ dependencyMeta && dependencyMeta.attributes
315
+ ? dependencyMeta.attributes._isLegacyAssert &&
316
+ dependencyMeta.attributes._isLegacyAssert
317
+ ? ` assert ${JSON.stringify(
318
+ dependencyMeta.attributes,
319
+ importAssertionReplacer
320
+ )}`
321
+ : ` with ${JSON.stringify(dependencyMeta.attributes)}`
322
+ : "";
323
+ let content = "";
324
+ if (imported === true) {
325
+ // namespace
326
+ content = `import * as ${identifier} from ${JSON.stringify(request)}${
327
+ attributes
328
+ };\n`;
329
+ } else if (imported.length === 0) {
330
+ // just import, no use
331
+ content = `import ${JSON.stringify(request)}${attributes};\n`;
332
+ } else {
333
+ content = `import { ${imported
334
+ .map(([name, finalName]) => {
335
+ if (name !== finalName) {
336
+ return `${name} as ${finalName}`;
337
+ }
338
+ return name;
339
+ })
340
+ .join(", ")} } from ${JSON.stringify(request)}${attributes};\n`;
341
+ }
342
+ return content;
266
343
  }
267
344
 
268
345
  getNamespaceIdentifier() {
269
346
  return this._identifier;
270
347
  }
348
+
349
+ /**
350
+ * @param {string} ident ident
351
+ * @returns {string} identifier
352
+ */
353
+ buildIdentifier(ident) {
354
+ return `__WEBPACK_EXTERNAL_MODULE_${ident}__`;
355
+ }
356
+
357
+ /**
358
+ * @param {Imported} imported imported
359
+ * @returns {Imported} normalized imported
360
+ */
361
+ buildImported(imported) {
362
+ if (Array.isArray(imported)) {
363
+ return imported.map(([name]) => {
364
+ const ident = `${this._ident}_${name}`;
365
+ return [name, this.buildIdentifier(ident)];
366
+ });
367
+ }
368
+ return imported;
369
+ }
271
370
  }
272
371
 
273
372
  register(
@@ -277,11 +376,12 @@ register(
277
376
  {
278
377
  serialize(obj, { write }) {
279
378
  write(obj._request);
379
+ write(obj._imported);
280
380
  write(obj._ident);
281
381
  write(obj._dependencyMeta);
282
382
  },
283
383
  deserialize({ read }) {
284
- return new ModuleExternalInitFragment(read(), read(), read());
384
+ return new ModuleExternalInitFragment(read(), read(), read(), read());
285
385
  }
286
386
  }
287
387
  );
@@ -328,11 +428,12 @@ const generateModuleRemapping = (
328
428
  };
329
429
 
330
430
  /**
331
- * @param {string|string[]} moduleAndSpecifiers the module request
431
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
332
432
  * @param {ExportsInfo} exportsInfo exports info of this module
333
433
  * @param {RuntimeSpec} runtime the runtime
334
434
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
335
435
  * @param {ImportDependencyMeta} dependencyMeta the dependency meta
436
+ * @param {ConcatenationScope=} concatenationScope concatenationScope
336
437
  * @returns {SourceData} the generated source
337
438
  */
338
439
  const getSourceForModuleExternal = (
@@ -340,27 +441,63 @@ const getSourceForModuleExternal = (
340
441
  exportsInfo,
341
442
  runtime,
342
443
  runtimeTemplate,
343
- dependencyMeta
444
+ dependencyMeta,
445
+ concatenationScope
344
446
  ) => {
345
- if (!Array.isArray(moduleAndSpecifiers))
447
+ /** @type {Imported} */
448
+ let imported = true;
449
+ if (concatenationScope) {
450
+ const usedExports = exportsInfo.getUsedExports(runtime);
451
+ switch (usedExports) {
452
+ case true:
453
+ case null:
454
+ // unknown exports
455
+ imported = true;
456
+ break;
457
+ case false:
458
+ // no used exports
459
+ imported = [];
460
+ break;
461
+ default:
462
+ imported = [...usedExports.entries()];
463
+ }
464
+ }
465
+
466
+ if (!Array.isArray(moduleAndSpecifiers)) {
346
467
  moduleAndSpecifiers = [moduleAndSpecifiers];
468
+ }
469
+
470
+ // Return to `namespace` when the external request includes a specific export
471
+ if (moduleAndSpecifiers.length > 1) {
472
+ imported = true;
473
+ }
474
+
347
475
  const initFragment = new ModuleExternalInitFragment(
348
476
  moduleAndSpecifiers[0],
477
+ imported,
349
478
  undefined,
350
479
  dependencyMeta,
351
480
  runtimeTemplate.outputOptions.hashFunction
352
481
  );
482
+ const normalizedImported = initFragment.getImported();
483
+
353
484
  const baseAccess = `${initFragment.getNamespaceIdentifier()}${propertyAccess(
354
485
  moduleAndSpecifiers,
355
486
  1
356
487
  )}`;
357
- const moduleRemapping = generateModuleRemapping(
358
- baseAccess,
359
- exportsInfo,
360
- runtime,
361
- runtimeTemplate
362
- );
363
- const expression = moduleRemapping || baseAccess;
488
+ let expression = baseAccess;
489
+
490
+ const useNamespace = imported === true;
491
+ let moduleRemapping;
492
+ if (useNamespace) {
493
+ moduleRemapping = generateModuleRemapping(
494
+ baseAccess,
495
+ exportsInfo,
496
+ runtime,
497
+ runtimeTemplate
498
+ );
499
+ expression = moduleRemapping || baseAccess;
500
+ }
364
501
  return {
365
502
  expression,
366
503
  init: moduleRemapping
@@ -372,15 +509,18 @@ const getSourceForModuleExternal = (
372
509
  "x"
373
510
  )}`
374
511
  : undefined,
512
+ specifiers: normalizedImported === true ? undefined : normalizedImported,
375
513
  runtimeRequirements: moduleRemapping
376
514
  ? RUNTIME_REQUIREMENTS_FOR_MODULE
377
515
  : undefined,
378
- chunkInitFragments: [initFragment]
516
+ chunkInitFragments: [
517
+ /** @type {InitFragment<EXPECTED_ANY>} */ (initFragment)
518
+ ]
379
519
  };
380
520
  };
381
521
 
382
522
  /**
383
- * @param {string|string[]} urlAndGlobal the script request
523
+ * @param {string | string[]} urlAndGlobal the script request
384
524
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
385
525
  * @returns {SourceData} the generated source
386
526
  */
@@ -428,9 +568,9 @@ const checkExternalVariable = (variableName, request, runtimeTemplate) =>
428
568
  )} }\n`;
429
569
 
430
570
  /**
431
- * @param {string|number} id the module id
571
+ * @param {ModuleId | string} id the module id
432
572
  * @param {boolean} optional true, if the module is optional
433
- * @param {string|string[]} request the request path
573
+ * @param {string | string[]} request the request path
434
574
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
435
575
  * @returns {SourceData} the generated source
436
576
  */
@@ -457,7 +597,7 @@ const getSourceForAmdOrUmdExternal = (
457
597
 
458
598
  /**
459
599
  * @param {boolean} optional true, if the module is optional
460
- * @param {string|string[]} request the request path
600
+ * @param {string | string[]} request the request path
461
601
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
462
602
  * @returns {SourceData} the generated source
463
603
  */
@@ -478,11 +618,12 @@ const getSourceForDefaultCase = (optional, request, runtimeTemplate) => {
478
618
  };
479
619
 
480
620
  /** @typedef {Record<string, string | string[]>} RequestRecord */
621
+ /** @typedef {string | string[] | RequestRecord} ExternalModuleRequest */
481
622
 
482
623
  class ExternalModule extends Module {
483
624
  /**
484
- * @param {string | string[] | RequestRecord} request request
485
- * @param {string} type type
625
+ * @param {ExternalModuleRequest} request request
626
+ * @param {ExternalsType} type type
486
627
  * @param {string} userRequest user request
487
628
  * @param {DependencyMeta=} dependencyMeta dependency meta
488
629
  */
@@ -490,9 +631,9 @@ class ExternalModule extends Module {
490
631
  super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
491
632
 
492
633
  // Info from Factory
493
- /** @type {string | string[] | Record<string, string | string[]>} */
634
+ /** @type {ExternalModuleRequest} */
494
635
  this.request = request;
495
- /** @type {string} */
636
+ /** @type {ExternalsType} */
496
637
  this.externalType = type;
497
638
  /** @type {string} */
498
639
  this.userRequest = userRequest;
@@ -515,12 +656,12 @@ class ExternalModule extends Module {
515
656
  return CSS_IMPORT_TYPES;
516
657
  }
517
658
 
518
- return JS_TYPES;
659
+ return JAVASCRIPT_TYPES;
519
660
  }
520
661
 
521
662
  /**
522
663
  * @param {LibIdentOptions} options options
523
- * @returns {string | null} an identifier for library inclusion
664
+ * @returns {LibIdent | null} an identifier for library inclusion
524
665
  */
525
666
  libIdent(options) {
526
667
  return this.userRequest;
@@ -554,7 +695,7 @@ class ExternalModule extends Module {
554
695
 
555
696
  /**
556
697
  * @param {NeedBuildContext} context context info
557
- * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
698
+ * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
558
699
  * @returns {void}
559
700
  */
560
701
  needBuild(context, callback) {
@@ -566,7 +707,7 @@ class ExternalModule extends Module {
566
707
  * @param {Compilation} compilation the compilation
567
708
  * @param {ResolverWithOptions} resolver the resolver
568
709
  * @param {InputFileSystem} fs the file system
569
- * @param {function(WebpackError=): void} callback callback function
710
+ * @param {BuildCallback} callback callback function
570
711
  * @returns {void}
571
712
  */
572
713
  build(options, compilation, resolver, fs, callback) {
@@ -577,7 +718,7 @@ class ExternalModule extends Module {
577
718
  this.buildInfo = {
578
719
  strict: true,
579
720
  topLevelDeclarations: new Set(),
580
- module: compilation.outputOptions.module
721
+ javascriptModule: compilation.outputOptions.module
581
722
  };
582
723
  const { request, externalType } = this._getRequestAndExternalType();
583
724
  this.buildMeta.exportsType = "dynamic";
@@ -594,7 +735,7 @@ class ExternalModule extends Module {
594
735
  }
595
736
  break;
596
737
  case "module":
597
- if (this.buildInfo.module) {
738
+ if (this.buildInfo.javascriptModule) {
598
739
  if (!Array.isArray(request) || request.length === 1) {
599
740
  this.buildMeta.exportsType = "namespace";
600
741
  canMangle = true;
@@ -647,7 +788,7 @@ class ExternalModule extends Module {
647
788
 
648
789
  /**
649
790
  * restore unsafe cache data
650
- * @param {object} unsafeCacheData data from getUnsafeCacheData
791
+ * @param {UnsafeCacheData} unsafeCacheData data from getUnsafeCacheData
651
792
  * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
652
793
  */
653
794
  restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
@@ -658,7 +799,7 @@ class ExternalModule extends Module {
658
799
  * @param {ConcatenationBailoutReasonContext} context context
659
800
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
660
801
  */
661
- getConcatenationBailoutReason({ moduleGraph }) {
802
+ getConcatenationBailoutReason(context) {
662
803
  switch (this.externalType) {
663
804
  case "amd":
664
805
  case "amd-require":
@@ -671,10 +812,15 @@ class ExternalModule extends Module {
671
812
  return undefined;
672
813
  }
673
814
 
815
+ /**
816
+ * @private
817
+ * @returns {{ request: string | string[], externalType: ExternalsType }} the request and external type
818
+ */
674
819
  _getRequestAndExternalType() {
675
820
  let { request, externalType } = this;
676
- if (typeof request === "object" && !Array.isArray(request))
821
+ if (typeof request === "object" && !Array.isArray(request)) {
677
822
  request = request[externalType];
823
+ }
678
824
  externalType = this._resolveExternalType(externalType);
679
825
  return { request, externalType };
680
826
  }
@@ -682,8 +828,8 @@ class ExternalModule extends Module {
682
828
  /**
683
829
  * Resolve the detailed external type from the raw external type.
684
830
  * e.g. resolve "module" or "import" from "module-import" type
685
- * @param {string} externalType raw external type
686
- * @returns {string} resolved external type
831
+ * @param {ExternalsType} externalType raw external type
832
+ * @returns {ExternalsType} resolved external type
687
833
  */
688
834
  _resolveExternalType(externalType) {
689
835
  if (externalType === "module-import") {
@@ -715,12 +861,13 @@ class ExternalModule extends Module {
715
861
  /**
716
862
  * @private
717
863
  * @param {string | string[]} request request
718
- * @param {string} externalType the external type
864
+ * @param {ExternalsType} externalType the external type
719
865
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
720
866
  * @param {ModuleGraph} moduleGraph the module graph
721
867
  * @param {ChunkGraph} chunkGraph the chunk graph
722
868
  * @param {RuntimeSpec} runtime the runtime
723
869
  * @param {DependencyMeta | undefined} dependencyMeta the dependency meta
870
+ * @param {ConcatenationScope=} concatenationScope concatenationScope
724
871
  * @returns {SourceData} the source data
725
872
  */
726
873
  _getSourceData(
@@ -730,7 +877,8 @@ class ExternalModule extends Module {
730
877
  moduleGraph,
731
878
  chunkGraph,
732
879
  runtime,
733
- dependencyMeta
880
+ dependencyMeta,
881
+ concatenationScope
734
882
  ) {
735
883
  switch (externalType) {
736
884
  case "this":
@@ -748,14 +896,8 @@ class ExternalModule extends Module {
748
896
  case "commonjs-static":
749
897
  return getSourceForCommonJsExternal(request);
750
898
  case "node-commonjs":
751
- return /** @type {BuildInfo} */ (this.buildInfo).module
752
- ? getSourceForCommonJsExternalInNodeModule(
753
- request,
754
- /** @type {string} */
755
- (runtimeTemplate.outputOptions.importMetaName),
756
- /** @type {boolean} */
757
- (runtimeTemplate.supportNodePrefixForCoreModules())
758
- )
899
+ return /** @type {BuildInfo} */ (this.buildInfo).javascriptModule
900
+ ? getSourceForCommonJsExternalInNodeModule(request, runtimeTemplate)
759
901
  : getSourceForCommonJsExternal(request);
760
902
  case "amd":
761
903
  case "amd-require":
@@ -780,7 +922,7 @@ class ExternalModule extends Module {
780
922
  case "script":
781
923
  return getSourceForScriptExternal(request, runtimeTemplate);
782
924
  case "module": {
783
- if (!(/** @type {BuildInfo} */ (this.buildInfo).module)) {
925
+ if (!(/** @type {BuildInfo} */ (this.buildInfo).javascriptModule)) {
784
926
  if (!runtimeTemplate.supportsDynamicImport()) {
785
927
  throw new Error(
786
928
  `The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script${
@@ -806,13 +948,12 @@ class ExternalModule extends Module {
806
948
  moduleGraph.getExportsInfo(this),
807
949
  runtime,
808
950
  runtimeTemplate,
809
- /** @type {ImportDependencyMeta} */ (dependencyMeta)
951
+ /** @type {ImportDependencyMeta} */ (dependencyMeta),
952
+ concatenationScope
810
953
  );
811
954
  }
812
955
  case "var":
813
956
  case "promise":
814
- case "const":
815
- case "let":
816
957
  case "assign":
817
958
  default:
818
959
  return getSourceForDefaultCase(
@@ -839,7 +980,7 @@ class ExternalModule extends Module {
839
980
  case "asset": {
840
981
  const sources = new Map();
841
982
  sources.set(
842
- "javascript",
983
+ JAVASCRIPT_TYPE,
843
984
  new RawSource(`module.exports = ${JSON.stringify(request)};`)
844
985
  );
845
986
  const data = new Map();
@@ -886,24 +1027,34 @@ class ExternalModule extends Module {
886
1027
  moduleGraph,
887
1028
  chunkGraph,
888
1029
  runtime,
889
- this.dependencyMeta
1030
+ this.dependencyMeta,
1031
+ concatenationScope
890
1032
  );
891
1033
 
1034
+ // sourceString can be empty str only when there is concatenationScope
892
1035
  let sourceString = sourceData.expression;
893
- if (sourceData.iife)
1036
+ if (sourceData.iife) {
894
1037
  sourceString = `(function() { return ${sourceString}; }())`;
895
- if (concatenationScope) {
896
- sourceString = `${
897
- runtimeTemplate.supportsConst() ? "const" : "var"
898
- } ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
1038
+ }
1039
+
1040
+ const specifiers = sourceData.specifiers;
1041
+ if (specifiers) {
1042
+ sourceString = "";
1043
+ const scope = /** @type {ConcatenationScope} */ (concatenationScope);
1044
+ for (const [specifier, finalName] of specifiers) {
1045
+ scope.registerRawExport(specifier, finalName);
1046
+ }
1047
+ } else if (concatenationScope) {
1048
+ sourceString = `${runtimeTemplate.renderConst()} ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
899
1049
  concatenationScope.registerNamespaceExport(
900
1050
  ConcatenationScope.NAMESPACE_OBJECT_EXPORT
901
1051
  );
902
1052
  } else {
903
1053
  sourceString = `module.exports = ${sourceString};`;
904
1054
  }
905
- if (sourceData.init)
1055
+ if (sourceData.init) {
906
1056
  sourceString = `${sourceData.init}\n${sourceString}`;
1057
+ }
907
1058
 
908
1059
  let data;
909
1060
  if (sourceData.chunkInitFragments) {
@@ -914,11 +1065,11 @@ class ExternalModule extends Module {
914
1065
  const sources = new Map();
915
1066
  if (this.useSourceMap || this.useSimpleSourceMap) {
916
1067
  sources.set(
917
- "javascript",
1068
+ JAVASCRIPT_TYPE,
918
1069
  new OriginalSource(sourceString, this.identifier())
919
1070
  );
920
1071
  } else {
921
- sources.set("javascript", new RawSource(sourceString));
1072
+ sources.set(JAVASCRIPT_TYPE, new RawSource(sourceString));
922
1073
  }
923
1074
 
924
1075
  let runtimeRequirements = sourceData.runtimeRequirements;
@@ -997,3 +1148,6 @@ class ExternalModule extends Module {
997
1148
  makeSerializable(ExternalModule, "webpack/lib/ExternalModule");
998
1149
 
999
1150
  module.exports = ExternalModule;
1151
+ module.exports.ModuleExternalInitFragment = ModuleExternalInitFragment;
1152
+ module.exports.getExternalModuleNodeCommonjsInitFragment =
1153
+ getExternalModuleNodeCommonjsInitFragment;