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
@@ -7,9 +7,11 @@
7
7
 
8
8
  const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const ConcatenationScope = require("./ConcatenationScope");
10
+ const EnvironmentNotSupportAsyncWarning = require("./EnvironmentNotSupportAsyncWarning");
10
11
  const { UsageState } = require("./ExportsInfo");
11
12
  const InitFragment = require("./InitFragment");
12
13
  const Module = require("./Module");
14
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
13
15
  const RuntimeGlobals = require("./RuntimeGlobals");
14
16
  const Template = require("./Template");
15
17
  const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
@@ -27,32 +29,46 @@ const { register } = require("./util/serialization");
27
29
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
28
30
  /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
29
31
  /** @typedef {import("./ExportsInfo")} ExportsInfo */
32
+ /** @typedef {import("./Generator").GenerateContext} GenerateContext */
33
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
30
34
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
31
35
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
32
36
  /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
33
37
  /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
34
38
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
39
+ /** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
40
+ /** @typedef {import("./Module").SourceTypes} SourceTypes */
41
+ /** @typedef {import("./ModuleGraph")} ModuleGraph */
35
42
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
36
43
  /** @typedef {import("./RequestShortener")} RequestShortener */
37
44
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
38
45
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
39
46
  /** @typedef {import("./WebpackError")} WebpackError */
40
47
  /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
48
+ /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
49
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
50
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
41
51
  /** @typedef {import("./util/Hash")} Hash */
42
52
  /** @typedef {typeof import("./util/Hash")} HashConstructor */
43
53
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
44
54
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
45
55
 
56
+ /** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
57
+ /** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
58
+
59
+ /** @typedef {ImportDependencyMeta | CssImportDependencyMeta} DependencyMeta */
60
+
46
61
  /**
47
- * @typedef {Object} SourceData
62
+ * @typedef {object} SourceData
48
63
  * @property {boolean=} iife
49
64
  * @property {string=} init
50
65
  * @property {string} expression
51
66
  * @property {InitFragment<ChunkRenderContext>[]=} chunkInitFragments
52
- * @property {ReadonlySet<string>=} runtimeRequirements
67
+ * @property {ReadOnlyRuntimeRequirements=} runtimeRequirements
53
68
  */
54
69
 
55
70
  const TYPES = new Set(["javascript"]);
71
+ const CSS_TYPES = new Set(["css-import"]);
56
72
  const RUNTIME_REQUIREMENTS = new Set([RuntimeGlobals.module]);
57
73
  const RUNTIME_REQUIREMENTS_FOR_SCRIPT = new Set([RuntimeGlobals.loadScript]);
58
74
  const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
@@ -100,12 +116,20 @@ const getSourceForCommonJsExternal = moduleAndSpecifiers => {
100
116
 
101
117
  /**
102
118
  * @param {string|string[]} moduleAndSpecifiers the module request
119
+ * @param {string} importMetaName import.meta name
120
+ * @param {boolean} needPrefix need to use `node:` prefix for `module` import
103
121
  * @returns {SourceData} the generated source
104
122
  */
105
- const getSourceForCommonJsExternalInNodeModule = moduleAndSpecifiers => {
123
+ const getSourceForCommonJsExternalInNodeModule = (
124
+ moduleAndSpecifiers,
125
+ importMetaName,
126
+ needPrefix
127
+ ) => {
106
128
  const chunkInitFragments = [
107
129
  new InitFragment(
108
- 'import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "module";\n',
130
+ `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "${
131
+ needPrefix ? "node:" : ""
132
+ }module";\n`,
109
133
  InitFragment.STAGE_HARMONY_IMPORTS,
110
134
  0,
111
135
  "external module node-commonjs"
@@ -113,61 +137,99 @@ const getSourceForCommonJsExternalInNodeModule = moduleAndSpecifiers => {
113
137
  ];
114
138
  if (!Array.isArray(moduleAndSpecifiers)) {
115
139
  return {
116
- expression: `__WEBPACK_EXTERNAL_createRequire(import.meta.url)(${JSON.stringify(
140
+ chunkInitFragments,
141
+ expression: `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)(${JSON.stringify(
117
142
  moduleAndSpecifiers
118
- )})`,
119
- chunkInitFragments
143
+ )})`
120
144
  };
121
145
  }
122
146
  const moduleName = moduleAndSpecifiers[0];
123
147
  return {
124
- expression: `__WEBPACK_EXTERNAL_createRequire(import.meta.url)(${JSON.stringify(
148
+ chunkInitFragments,
149
+ expression: `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)(${JSON.stringify(
125
150
  moduleName
126
- )})${propertyAccess(moduleAndSpecifiers, 1)}`,
127
- chunkInitFragments
151
+ )})${propertyAccess(moduleAndSpecifiers, 1)}`
128
152
  };
129
153
  };
130
154
 
131
155
  /**
132
156
  * @param {string|string[]} moduleAndSpecifiers the module request
133
157
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
158
+ * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
134
159
  * @returns {SourceData} the generated source
135
160
  */
136
- const getSourceForImportExternal = (moduleAndSpecifiers, runtimeTemplate) => {
161
+ const getSourceForImportExternal = (
162
+ moduleAndSpecifiers,
163
+ runtimeTemplate,
164
+ dependencyMeta
165
+ ) => {
137
166
  const importName = runtimeTemplate.outputOptions.importFunctionName;
138
- if (!runtimeTemplate.supportsDynamicImport() && importName === "import") {
167
+ if (
168
+ !runtimeTemplate.supportsDynamicImport() &&
169
+ (importName === "import" || importName === "module-import")
170
+ ) {
139
171
  throw new Error(
140
172
  "The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
141
173
  );
142
174
  }
175
+ const attributes =
176
+ dependencyMeta && dependencyMeta.attributes
177
+ ? dependencyMeta.attributes._isLegacyAssert
178
+ ? `, { assert: ${JSON.stringify(
179
+ dependencyMeta.attributes,
180
+ importAssertionReplacer
181
+ )} }`
182
+ : `, { with: ${JSON.stringify(dependencyMeta.attributes)} }`
183
+ : "";
143
184
  if (!Array.isArray(moduleAndSpecifiers)) {
144
185
  return {
145
- expression: `${importName}(${JSON.stringify(moduleAndSpecifiers)});`
186
+ expression: `${importName}(${JSON.stringify(
187
+ moduleAndSpecifiers
188
+ )}${attributes});`
146
189
  };
147
190
  }
148
191
  if (moduleAndSpecifiers.length === 1) {
149
192
  return {
150
- expression: `${importName}(${JSON.stringify(moduleAndSpecifiers[0])});`
193
+ expression: `${importName}(${JSON.stringify(
194
+ moduleAndSpecifiers[0]
195
+ )}${attributes});`
151
196
  };
152
197
  }
153
198
  const moduleName = moduleAndSpecifiers[0];
154
199
  return {
155
200
  expression: `${importName}(${JSON.stringify(
156
201
  moduleName
157
- )}).then(${runtimeTemplate.returningFunction(
202
+ )}${attributes}).then(${runtimeTemplate.returningFunction(
158
203
  `module${propertyAccess(moduleAndSpecifiers, 1)}`,
159
204
  "module"
160
205
  )});`
161
206
  };
162
207
  };
163
208
 
209
+ /**
210
+ * @param {string} key key
211
+ * @param {any | undefined} value value
212
+ * @returns {undefined | string} replaced value
213
+ */
214
+ const importAssertionReplacer = (key, value) => {
215
+ if (key === "_isLegacyAssert") {
216
+ return;
217
+ }
218
+
219
+ return value;
220
+ };
221
+
222
+ /**
223
+ * @extends {InitFragment<ChunkRenderContext>}
224
+ */
164
225
  class ModuleExternalInitFragment extends InitFragment {
165
226
  /**
166
227
  * @param {string} request import source
167
228
  * @param {string=} ident recomputed ident
229
+ * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
168
230
  * @param {string | HashConstructor=} hashFunction the hash function to use
169
231
  */
170
- constructor(request, ident, hashFunction = "md4") {
232
+ constructor(request, ident, dependencyMeta, hashFunction = "md4") {
171
233
  if (ident === undefined) {
172
234
  ident = Template.toIdentifier(request);
173
235
  if (ident !== request) {
@@ -179,14 +241,24 @@ class ModuleExternalInitFragment extends InitFragment {
179
241
  }
180
242
  const identifier = `__WEBPACK_EXTERNAL_MODULE_${ident}__`;
181
243
  super(
182
- `import * as ${identifier} from ${JSON.stringify(request)};\n`,
244
+ `import * as ${identifier} from ${JSON.stringify(request)}${
245
+ dependencyMeta && dependencyMeta.attributes
246
+ ? dependencyMeta.attributes._isLegacyAssert
247
+ ? ` assert ${JSON.stringify(
248
+ dependencyMeta.attributes,
249
+ importAssertionReplacer
250
+ )}`
251
+ : ` with ${JSON.stringify(dependencyMeta.attributes)}`
252
+ : ""
253
+ };\n`,
183
254
  InitFragment.STAGE_HARMONY_IMPORTS,
184
255
  0,
185
256
  `external module import ${ident}`
186
257
  );
187
258
  this._ident = ident;
188
- this._identifier = identifier;
189
259
  this._request = request;
260
+ this._dependencyMeta = request;
261
+ this._identifier = identifier;
190
262
  }
191
263
 
192
264
  getNamespaceIdentifier() {
@@ -202,14 +274,27 @@ register(
202
274
  serialize(obj, { write }) {
203
275
  write(obj._request);
204
276
  write(obj._ident);
277
+ write(obj._dependencyMeta);
205
278
  },
206
279
  deserialize({ read }) {
207
- return new ModuleExternalInitFragment(read(), read());
280
+ return new ModuleExternalInitFragment(read(), read(), read());
208
281
  }
209
282
  }
210
283
  );
211
284
 
212
- const generateModuleRemapping = (input, exportsInfo, runtime) => {
285
+ /**
286
+ * @param {string} input input
287
+ * @param {ExportsInfo} exportsInfo the exports info
288
+ * @param {RuntimeSpec=} runtime the runtime
289
+ * @param {RuntimeTemplate=} runtimeTemplate the runtime template
290
+ * @returns {string | undefined} the module remapping
291
+ */
292
+ const generateModuleRemapping = (
293
+ input,
294
+ exportsInfo,
295
+ runtime,
296
+ runtimeTemplate
297
+ ) => {
213
298
  if (exportsInfo.otherExportsInfo.getUsed(runtime) === UsageState.Unused) {
214
299
  const properties = [];
215
300
  for (const exportInfo of exportsInfo.orderedExports) {
@@ -227,9 +312,11 @@ const generateModuleRemapping = (input, exportsInfo, runtime) => {
227
312
  }
228
313
  }
229
314
  properties.push(
230
- `[${JSON.stringify(used)}]: () => ${input}${propertyAccess([
231
- exportInfo.name
232
- ])}`
315
+ `[${JSON.stringify(used)}]: ${
316
+ /** @type {RuntimeTemplate} */ (runtimeTemplate).returningFunction(
317
+ `${input}${propertyAccess([exportInfo.name])}`
318
+ )
319
+ }`
233
320
  );
234
321
  }
235
322
  return `x({ ${properties.join(", ")} })`;
@@ -240,21 +327,24 @@ const generateModuleRemapping = (input, exportsInfo, runtime) => {
240
327
  * @param {string|string[]} moduleAndSpecifiers the module request
241
328
  * @param {ExportsInfo} exportsInfo exports info of this module
242
329
  * @param {RuntimeSpec} runtime the runtime
243
- * @param {string | HashConstructor=} hashFunction the hash function to use
330
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
331
+ * @param {ImportDependencyMeta} dependencyMeta the dependency meta
244
332
  * @returns {SourceData} the generated source
245
333
  */
246
334
  const getSourceForModuleExternal = (
247
335
  moduleAndSpecifiers,
248
336
  exportsInfo,
249
337
  runtime,
250
- hashFunction
338
+ runtimeTemplate,
339
+ dependencyMeta
251
340
  ) => {
252
341
  if (!Array.isArray(moduleAndSpecifiers))
253
342
  moduleAndSpecifiers = [moduleAndSpecifiers];
254
343
  const initFragment = new ModuleExternalInitFragment(
255
344
  moduleAndSpecifiers[0],
256
345
  undefined,
257
- hashFunction
346
+ dependencyMeta,
347
+ runtimeTemplate.outputOptions.hashFunction
258
348
  );
259
349
  const baseAccess = `${initFragment.getNamespaceIdentifier()}${propertyAccess(
260
350
  moduleAndSpecifiers,
@@ -263,12 +353,21 @@ const getSourceForModuleExternal = (
263
353
  const moduleRemapping = generateModuleRemapping(
264
354
  baseAccess,
265
355
  exportsInfo,
266
- runtime
356
+ runtime,
357
+ runtimeTemplate
267
358
  );
268
- let expression = moduleRemapping || baseAccess;
359
+ const expression = moduleRemapping || baseAccess;
269
360
  return {
270
361
  expression,
271
- init: `var x = y => { var x = {}; ${RuntimeGlobals.definePropertyGetters}(x, y); return x; }\nvar y = x => () => x`,
362
+ init: moduleRemapping
363
+ ? `var x = ${runtimeTemplate.basicFunction(
364
+ "y",
365
+ `var x = {}; ${RuntimeGlobals.definePropertyGetters}(x, y); return x`
366
+ )} \nvar y = ${runtimeTemplate.returningFunction(
367
+ runtimeTemplate.returningFunction("x"),
368
+ "x"
369
+ )}`
370
+ : undefined,
272
371
  runtimeRequirements: moduleRemapping
273
372
  ? RUNTIME_REQUIREMENTS_FOR_MODULE
274
373
  : undefined,
@@ -319,11 +418,10 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
319
418
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
320
419
  * @returns {string} the generated source
321
420
  */
322
- const checkExternalVariable = (variableName, request, runtimeTemplate) => {
323
- return `if(typeof ${variableName} === 'undefined') { ${runtimeTemplate.throwMissingModuleErrorBlock(
421
+ const checkExternalVariable = (variableName, request, runtimeTemplate) =>
422
+ `if(typeof ${variableName} === 'undefined') { ${runtimeTemplate.throwMissingModuleErrorBlock(
324
423
  { request }
325
424
  )} }\n`;
326
- };
327
425
 
328
426
  /**
329
427
  * @param {string|number} id the module id
@@ -347,7 +445,7 @@ const getSourceForAmdOrUmdExternal = (
347
445
  externalVariable,
348
446
  Array.isArray(request) ? request.join(".") : request,
349
447
  runtimeTemplate
350
- )
448
+ )
351
449
  : undefined,
352
450
  expression: externalVariable
353
451
  };
@@ -375,9 +473,17 @@ const getSourceForDefaultCase = (optional, request, runtimeTemplate) => {
375
473
  };
376
474
  };
377
475
 
476
+ /** @typedef {Record<string, string | string[]>} RequestRecord */
477
+
378
478
  class ExternalModule extends Module {
379
- constructor(request, type, userRequest) {
380
- super("javascript/dynamic", null);
479
+ /**
480
+ * @param {string | string[] | RequestRecord} request request
481
+ * @param {string} type type
482
+ * @param {string} userRequest user request
483
+ * @param {DependencyMeta=} dependencyMeta dependency meta
484
+ */
485
+ constructor(request, type, userRequest, dependencyMeta) {
486
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
381
487
 
382
488
  // Info from Factory
383
489
  /** @type {string | string[] | Record<string, string | string[]>} */
@@ -386,13 +492,15 @@ class ExternalModule extends Module {
386
492
  this.externalType = type;
387
493
  /** @type {string} */
388
494
  this.userRequest = userRequest;
495
+ /** @type {DependencyMeta=} */
496
+ this.dependencyMeta = dependencyMeta;
389
497
  }
390
498
 
391
499
  /**
392
- * @returns {Set<string>} types available (do not mutate)
500
+ * @returns {SourceTypes} types available (do not mutate)
393
501
  */
394
502
  getSourceTypes() {
395
- return TYPES;
503
+ return this.externalType === "css-import" ? CSS_TYPES : TYPES;
396
504
  }
397
505
 
398
506
  /**
@@ -409,7 +517,9 @@ class ExternalModule extends Module {
409
517
  * @returns {boolean} true, if the chunk is ok for the module
410
518
  */
411
519
  chunkCondition(chunk, { chunkGraph }) {
412
- return chunkGraph.getNumberOfEntryModules(chunk) > 0;
520
+ return this.externalType === "css-import"
521
+ ? true
522
+ : chunkGraph.getNumberOfEntryModules(chunk) > 0;
413
523
  }
414
524
 
415
525
  /**
@@ -424,18 +534,37 @@ class ExternalModule extends Module {
424
534
  * @returns {string} a user readable identifier of the module
425
535
  */
426
536
  readableIdentifier(requestShortener) {
427
- return "external " + JSON.stringify(this.request);
537
+ return `external ${JSON.stringify(this.request)}`;
428
538
  }
429
539
 
430
540
  /**
431
541
  * @param {NeedBuildContext} context context info
432
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
542
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
433
543
  * @returns {void}
434
544
  */
435
545
  needBuild(context, callback) {
436
546
  return callback(null, !this.buildMeta);
437
547
  }
438
548
 
549
+ /**
550
+ * @param {string} externalType raw external type
551
+ * @returns {string} resolved external type
552
+ */
553
+ getModuleImportType(externalType) {
554
+ if (externalType === "module-import") {
555
+ if (
556
+ this.dependencyMeta &&
557
+ /** @type {ImportDependencyMeta} */ (this.dependencyMeta).externalType
558
+ ) {
559
+ return /** @type {ImportDependencyMeta} */ (this.dependencyMeta)
560
+ .externalType;
561
+ }
562
+ return "module";
563
+ }
564
+
565
+ return externalType;
566
+ }
567
+
439
568
  /**
440
569
  * @param {WebpackOptions} options webpack options
441
570
  * @param {Compilation} compilation the compilation
@@ -468,36 +597,71 @@ class ExternalModule extends Module {
468
597
  canMangle = true;
469
598
  }
470
599
  break;
600
+ case "script":
601
+ this.buildMeta.async = true;
602
+ EnvironmentNotSupportAsyncWarning.check(
603
+ this,
604
+ compilation.runtimeTemplate,
605
+ "external script"
606
+ );
607
+ break;
608
+ case "promise":
609
+ this.buildMeta.async = true;
610
+ EnvironmentNotSupportAsyncWarning.check(
611
+ this,
612
+ compilation.runtimeTemplate,
613
+ "external promise"
614
+ );
615
+ break;
471
616
  case "module":
472
- if (this.buildInfo.module) {
473
- if (!Array.isArray(request) || request.length === 1) {
474
- this.buildMeta.exportsType = "namespace";
475
- canMangle = true;
617
+ case "import":
618
+ case "module-import": {
619
+ const type = this.getModuleImportType(externalType);
620
+ if (type === "module") {
621
+ if (this.buildInfo.module) {
622
+ if (!Array.isArray(request) || request.length === 1) {
623
+ this.buildMeta.exportsType = "namespace";
624
+ canMangle = true;
625
+ }
626
+ } else {
627
+ this.buildMeta.async = true;
628
+ EnvironmentNotSupportAsyncWarning.check(
629
+ this,
630
+ compilation.runtimeTemplate,
631
+ "external module"
632
+ );
633
+ if (!Array.isArray(request) || request.length === 1) {
634
+ this.buildMeta.exportsType = "namespace";
635
+ canMangle = false;
636
+ }
476
637
  }
477
- } else {
638
+ }
639
+
640
+ if (type === "import") {
478
641
  this.buildMeta.async = true;
642
+ EnvironmentNotSupportAsyncWarning.check(
643
+ this,
644
+ compilation.runtimeTemplate,
645
+ "external import"
646
+ );
479
647
  if (!Array.isArray(request) || request.length === 1) {
480
648
  this.buildMeta.exportsType = "namespace";
481
649
  canMangle = false;
482
650
  }
483
651
  }
652
+
484
653
  break;
485
- case "script":
486
- case "promise":
487
- this.buildMeta.async = true;
488
- break;
489
- case "import":
490
- this.buildMeta.async = true;
491
- if (!Array.isArray(request) || request.length === 1) {
492
- this.buildMeta.exportsType = "namespace";
493
- canMangle = false;
494
- }
495
- break;
654
+ }
496
655
  }
497
656
  this.addDependency(new StaticExportsDependency(true, canMangle));
498
657
  callback();
499
658
  }
500
659
 
660
+ /**
661
+ * restore unsafe cache data
662
+ * @param {object} unsafeCacheData data from getUnsafeCacheData
663
+ * @param {NormalModuleFactory} normalModuleFactory the normal module factory handling the unsafe caching
664
+ */
501
665
  restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory) {
502
666
  this._restoreFromUnsafeCache(unsafeCacheData, normalModuleFactory);
503
667
  }
@@ -526,8 +690,26 @@ class ExternalModule extends Module {
526
690
  return { request, externalType };
527
691
  }
528
692
 
529
- _getSourceData(runtimeTemplate, moduleGraph, chunkGraph, runtime) {
530
- const { request, externalType } = this._getRequestAndExternalType();
693
+ /**
694
+ * @private
695
+ * @param {string | string[]} request request
696
+ * @param {string} externalType the external type
697
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
698
+ * @param {ModuleGraph} moduleGraph the module graph
699
+ * @param {ChunkGraph} chunkGraph the chunk graph
700
+ * @param {RuntimeSpec} runtime the runtime
701
+ * @param {DependencyMeta | undefined} dependencyMeta the dependency meta
702
+ * @returns {SourceData} the source data
703
+ */
704
+ _getSourceData(
705
+ request,
706
+ externalType,
707
+ runtimeTemplate,
708
+ moduleGraph,
709
+ chunkGraph,
710
+ runtime,
711
+ dependencyMeta
712
+ ) {
531
713
  switch (externalType) {
532
714
  case "this":
533
715
  case "window":
@@ -536,15 +718,22 @@ class ExternalModule extends Module {
536
718
  case "global":
537
719
  return getSourceForGlobalVariableExternal(
538
720
  request,
539
- runtimeTemplate.outputOptions.globalObject
721
+ runtimeTemplate.globalObject
540
722
  );
541
723
  case "commonjs":
542
724
  case "commonjs2":
543
725
  case "commonjs-module":
726
+ case "commonjs-static":
544
727
  return getSourceForCommonJsExternal(request);
545
728
  case "node-commonjs":
546
- return this.buildInfo.module
547
- ? getSourceForCommonJsExternalInNodeModule(request)
729
+ return /** @type {BuildInfo} */ (this.buildInfo).module
730
+ ? getSourceForCommonJsExternalInNodeModule(
731
+ request,
732
+ /** @type {string} */
733
+ (runtimeTemplate.outputOptions.importMetaName),
734
+ /** @type {boolean} */
735
+ (runtimeTemplate.supportNodePrefixForCoreModules())
736
+ )
548
737
  : getSourceForCommonJsExternal(request);
549
738
  case "amd":
550
739
  case "amd-require":
@@ -560,33 +749,52 @@ class ExternalModule extends Module {
560
749
  runtimeTemplate
561
750
  );
562
751
  }
563
- case "import":
564
- return getSourceForImportExternal(request, runtimeTemplate);
565
752
  case "script":
566
753
  return getSourceForScriptExternal(request, runtimeTemplate);
567
- case "module": {
568
- if (!this.buildInfo.module) {
569
- if (!runtimeTemplate.supportsDynamicImport()) {
754
+ case "module":
755
+ case "import":
756
+ case "module-import": {
757
+ const type = this.getModuleImportType(externalType);
758
+ if (type === "import") {
759
+ return getSourceForImportExternal(
760
+ request,
761
+ runtimeTemplate,
762
+ /** @type {ImportDependencyMeta} */ (dependencyMeta)
763
+ );
764
+ }
765
+
766
+ if (type === "module") {
767
+ if (!(/** @type {BuildInfo} */ (this.buildInfo).module)) {
768
+ if (!runtimeTemplate.supportsDynamicImport()) {
769
+ throw new Error(
770
+ `The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script${
771
+ runtimeTemplate.supportsEcmaScriptModuleSyntax()
772
+ ? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
773
+ : ""
774
+ }`
775
+ );
776
+ }
777
+ return getSourceForImportExternal(
778
+ request,
779
+ runtimeTemplate,
780
+ /** @type {ImportDependencyMeta} */ (dependencyMeta)
781
+ );
782
+ }
783
+ if (!runtimeTemplate.supportsEcmaScriptModuleSyntax()) {
570
784
  throw new Error(
571
- "The target environment doesn't support dynamic import() syntax so it's not possible to use external type 'module' within a script" +
572
- (runtimeTemplate.supportsEcmaScriptModuleSyntax()
573
- ? "\nDid you mean to build a EcmaScript Module ('output.module: true')?"
574
- : "")
785
+ "The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
575
786
  );
576
787
  }
577
- return getSourceForImportExternal(request, runtimeTemplate);
578
- }
579
- if (!runtimeTemplate.supportsEcmaScriptModuleSyntax()) {
580
- throw new Error(
581
- "The target environment doesn't support EcmaScriptModule syntax so it's not possible to use external type 'module'"
788
+ return getSourceForModuleExternal(
789
+ request,
790
+ moduleGraph.getExportsInfo(this),
791
+ runtime,
792
+ runtimeTemplate,
793
+ /** @type {ImportDependencyMeta} */ (dependencyMeta)
582
794
  );
583
795
  }
584
- return getSourceForModuleExternal(
585
- request,
586
- moduleGraph.getExportsInfo(this),
587
- runtime,
588
- runtimeTemplate.outputOptions.hashFunction
589
- );
796
+
797
+ break;
590
798
  }
591
799
  case "var":
592
800
  case "promise":
@@ -613,60 +821,106 @@ class ExternalModule extends Module {
613
821
  runtime,
614
822
  concatenationScope
615
823
  }) {
616
- const sourceData = this._getSourceData(
617
- runtimeTemplate,
618
- moduleGraph,
619
- chunkGraph,
620
- runtime
621
- );
824
+ const { request, externalType } = this._getRequestAndExternalType();
825
+ switch (externalType) {
826
+ case "asset": {
827
+ const sources = new Map();
828
+ sources.set(
829
+ "javascript",
830
+ new RawSource(`module.exports = ${JSON.stringify(request)};`)
831
+ );
832
+ const data = new Map();
833
+ data.set("url", request);
834
+ return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
835
+ }
836
+ case "css-import": {
837
+ const sources = new Map();
838
+ const dependencyMeta = /** @type {CssImportDependencyMeta} */ (
839
+ this.dependencyMeta
840
+ );
841
+ const layer =
842
+ dependencyMeta.layer !== undefined
843
+ ? ` layer(${dependencyMeta.layer})`
844
+ : "";
845
+ const supports = dependencyMeta.supports
846
+ ? ` supports(${dependencyMeta.supports})`
847
+ : "";
848
+ const media = dependencyMeta.media ? ` ${dependencyMeta.media}` : "";
849
+ sources.set(
850
+ "css-import",
851
+ new RawSource(
852
+ `@import url(${JSON.stringify(
853
+ request
854
+ )})${layer}${supports}${media};`
855
+ )
856
+ );
857
+ return {
858
+ sources,
859
+ runtimeRequirements: EMPTY_RUNTIME_REQUIREMENTS
860
+ };
861
+ }
862
+ default: {
863
+ const sourceData = this._getSourceData(
864
+ request,
865
+ externalType,
866
+ runtimeTemplate,
867
+ moduleGraph,
868
+ chunkGraph,
869
+ runtime,
870
+ this.dependencyMeta
871
+ );
622
872
 
623
- let sourceString = sourceData.expression;
624
- if (sourceData.iife)
625
- sourceString = `(function() { return ${sourceString}; }())`;
626
- if (concatenationScope) {
627
- sourceString = `${runtimeTemplate.supportsConst() ? "const" : "var"} ${
628
- ConcatenationScope.NAMESPACE_OBJECT_EXPORT
629
- } = ${sourceString};`;
630
- concatenationScope.registerNamespaceExport(
631
- ConcatenationScope.NAMESPACE_OBJECT_EXPORT
632
- );
633
- } else {
634
- sourceString = `module.exports = ${sourceString};`;
635
- }
636
- if (sourceData.init) sourceString = `${sourceData.init}\n${sourceString}`;
873
+ let sourceString = sourceData.expression;
874
+ if (sourceData.iife)
875
+ sourceString = `(function() { return ${sourceString}; }())`;
876
+ if (concatenationScope) {
877
+ sourceString = `${
878
+ runtimeTemplate.supportsConst() ? "const" : "var"
879
+ } ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
880
+ concatenationScope.registerNamespaceExport(
881
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
882
+ );
883
+ } else {
884
+ sourceString = `module.exports = ${sourceString};`;
885
+ }
886
+ if (sourceData.init)
887
+ sourceString = `${sourceData.init}\n${sourceString}`;
637
888
 
638
- let data = undefined;
639
- if (sourceData.chunkInitFragments) {
640
- data = new Map();
641
- data.set("chunkInitFragments", sourceData.chunkInitFragments);
642
- }
889
+ let data;
890
+ if (sourceData.chunkInitFragments) {
891
+ data = new Map();
892
+ data.set("chunkInitFragments", sourceData.chunkInitFragments);
893
+ }
643
894
 
644
- const sources = new Map();
645
- if (this.useSourceMap || this.useSimpleSourceMap) {
646
- sources.set(
647
- "javascript",
648
- new OriginalSource(sourceString, this.identifier())
649
- );
650
- } else {
651
- sources.set("javascript", new RawSource(sourceString));
652
- }
895
+ const sources = new Map();
896
+ if (this.useSourceMap || this.useSimpleSourceMap) {
897
+ sources.set(
898
+ "javascript",
899
+ new OriginalSource(sourceString, this.identifier())
900
+ );
901
+ } else {
902
+ sources.set("javascript", new RawSource(sourceString));
903
+ }
904
+
905
+ let runtimeRequirements = sourceData.runtimeRequirements;
906
+ if (!concatenationScope) {
907
+ if (!runtimeRequirements) {
908
+ runtimeRequirements = RUNTIME_REQUIREMENTS;
909
+ } else {
910
+ const set = new Set(runtimeRequirements);
911
+ set.add(RuntimeGlobals.module);
912
+ runtimeRequirements = set;
913
+ }
914
+ }
653
915
 
654
- let runtimeRequirements = sourceData.runtimeRequirements;
655
- if (!concatenationScope) {
656
- if (!runtimeRequirements) {
657
- runtimeRequirements = RUNTIME_REQUIREMENTS;
658
- } else {
659
- const set = new Set(runtimeRequirements);
660
- set.add(RuntimeGlobals.module);
661
- runtimeRequirements = set;
916
+ return {
917
+ sources,
918
+ runtimeRequirements:
919
+ runtimeRequirements || EMPTY_RUNTIME_REQUIREMENTS,
920
+ data
921
+ };
662
922
  }
663
923
  }
664
-
665
- return {
666
- sources,
667
- runtimeRequirements: runtimeRequirements || EMPTY_RUNTIME_REQUIREMENTS,
668
- data
669
- };
670
924
  }
671
925
 
672
926
  /**
@@ -692,22 +946,30 @@ class ExternalModule extends Module {
692
946
  super.updateHash(hash, context);
693
947
  }
694
948
 
949
+ /**
950
+ * @param {ObjectSerializerContext} context context
951
+ */
695
952
  serialize(context) {
696
953
  const { write } = context;
697
954
 
698
955
  write(this.request);
699
956
  write(this.externalType);
700
957
  write(this.userRequest);
958
+ write(this.dependencyMeta);
701
959
 
702
960
  super.serialize(context);
703
961
  }
704
962
 
963
+ /**
964
+ * @param {ObjectDeserializerContext} context context
965
+ */
705
966
  deserialize(context) {
706
967
  const { read } = context;
707
968
 
708
969
  this.request = read();
709
970
  this.externalType = read();
710
971
  this.userRequest = read();
972
+ this.dependencyMeta = read();
711
973
 
712
974
  super.deserialize(context);
713
975
  }