@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -8,22 +8,27 @@
8
8
  const { SyncBailHook } = require("tapable");
9
9
  const { OriginalSource, RawSource } = require("webpack-sources");
10
10
  const ConcatenationScope = require("./ConcatenationScope");
11
- const EnvironmentNotSupportAsyncWarning = require("./EnvironmentNotSupportAsyncWarning");
12
11
  const { UsageState } = require("./ExportsInfo");
13
12
  const InitFragment = require("./InitFragment");
14
13
  const Module = require("./Module");
15
14
  const {
15
+ ASSET_URL_TYPE,
16
+ ASSET_URL_TYPES,
16
17
  CSS_IMPORT_TYPES,
17
- CSS_URL_TYPES,
18
18
  JAVASCRIPT_TYPE,
19
19
  JAVASCRIPT_TYPES
20
20
  } = require("./ModuleSourceTypeConstants");
21
21
  const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
22
22
  const RuntimeGlobals = require("./RuntimeGlobals");
23
23
  const Template = require("./Template");
24
+ const WebpackError = require("./WebpackError");
24
25
  const { DEFAULTS } = require("./config/defaults");
26
+ const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
25
27
  const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
28
+ const EnvironmentNotSupportAsyncWarning = require("./errors/EnvironmentNotSupportAsyncWarning");
29
+ const { coreModules } = require("./node/nodeBuiltins");
26
30
  const createHash = require("./util/createHash");
31
+ const createHooksRegistry = require("./util/createHooksRegistry");
27
32
  const extractUrlAndGlobal = require("./util/extractUrlAndGlobal");
28
33
  const makeSerializable = require("./util/makeSerializable");
29
34
  const { propertyAccess } = require("./util/property");
@@ -62,19 +67,22 @@ const { register } = require("./util/serialization");
62
67
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
63
68
  /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
64
69
  /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
65
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
66
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
70
+ /** @typedef {import("./dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
71
+ /** @typedef {import("../declarations/WebpackOptions").ExternalItemInterop} ExternalInterop */
72
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext<[ExternalModuleRequest, ExternalsType, string, DependencyMeta | undefined, ExternalInterop | undefined]>} ObjectDeserializerContext */
73
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext<[ExternalModuleRequest, ExternalsType, string, DependencyMeta | undefined, ExternalInterop | undefined]>} ObjectSerializerContext */
67
74
  /** @typedef {import("./util/Hash")} Hash */
68
75
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
69
76
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
70
77
 
71
- /** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
78
+ /** @typedef {{ attributes?: ImportAttributes, phase?: ImportPhaseType, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
72
79
  /** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
73
- /** @typedef {{ sourceType: "css-url" }} AssetDependencyMeta */
80
+ /** @typedef {{ sourceType: "asset-url" | "css-url" }} AssetDependencyMeta */
74
81
 
75
82
  /** @typedef {ImportDependencyMeta | CssImportDependencyMeta | AssetDependencyMeta} DependencyMeta */
76
83
 
77
84
  /**
85
+ * Defines the source data type used by this module.
78
86
  * @typedef {object} SourceData
79
87
  * @property {boolean=} iife
80
88
  * @property {string=} init
@@ -97,7 +105,68 @@ const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
97
105
  /** @type {RuntimeRequirements} */
98
106
  const EMPTY_RUNTIME_REQUIREMENTS = new Set();
99
107
 
108
+ const NODE_PREFIX = "node:";
109
+
110
+ // externals of these types are wired by the library wrapper, which does its own per-key lookup on object externals
111
+ const LIBRARY_WIRED_EXTERNAL_TYPES = new Set([
112
+ "amd",
113
+ "amd-require",
114
+ "umd",
115
+ "umd2",
116
+ "system",
117
+ "jsonp"
118
+ ]);
119
+ // External types that emit a node.js-resolvable specifier (`require`/`import`).
120
+ const NODE_RESOLVING_EXTERNAL_TYPES = new Set([
121
+ "commonjs",
122
+ "commonjs2",
123
+ "commonjs-module",
124
+ "commonjs-static",
125
+ "node-commonjs",
126
+ "import",
127
+ "module"
128
+ ]);
129
+
100
130
  /**
131
+ * Normalizes a node.js core module specifier for the target. Strips `node:`
132
+ * when the target can't resolve a prefixed request, adds `node:` for a universal
133
+ * bundle (which may run on deno/bun where the prefix is required), and otherwise
134
+ * keeps the author's original notation.
135
+ * @param {string | string[]} request the external request
136
+ * @param {ExternalsType} externalType the resolved external type
137
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
138
+ * @returns {string | string[]} the normalized request
139
+ */
140
+ const normalizeNodeCoreModuleRequest = (
141
+ request,
142
+ externalType,
143
+ runtimeTemplate
144
+ ) => {
145
+ if (!NODE_RESOLVING_EXTERNAL_TYPES.has(externalType)) return request;
146
+ const name = Array.isArray(request) ? request[0] : request;
147
+ if (typeof name !== "string") return request;
148
+ /**
149
+ * @param {string} next replacement specifier
150
+ * @returns {string | string[]} request with the specifier swapped
151
+ */
152
+ const withName = (next) =>
153
+ Array.isArray(request) ? [next, ...request.slice(1)] : next;
154
+
155
+ if (
156
+ runtimeTemplate.outputOptions.environment.nodePrefixForCoreModules === false
157
+ ) {
158
+ if (!name.startsWith(NODE_PREFIX)) return request;
159
+ const stripped = name.slice(NODE_PREFIX.length);
160
+ return coreModules.has(stripped) ? withName(stripped) : request;
161
+ }
162
+ if (runtimeTemplate.isUniversalTarget() && !name.startsWith(NODE_PREFIX)) {
163
+ return coreModules.has(name) ? withName(NODE_PREFIX + name) : request;
164
+ }
165
+ return request;
166
+ };
167
+
168
+ /**
169
+ * Gets source for global variable external.
101
170
  * @param {string | string[]} variableName the variable name or path
102
171
  * @param {string} type the module system
103
172
  * @returns {SourceData} the generated source
@@ -121,6 +190,7 @@ const getSourceForGlobalVariableExternal = (variableName, type) => {
121
190
  /** @typedef {string | string[]} ModuleAndSpecifiers */
122
191
 
123
192
  /**
193
+ * Gets source for common js external.
124
194
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
125
195
  * @returns {SourceData} the generated source
126
196
  */
@@ -140,33 +210,55 @@ const getSourceForCommonJsExternal = (moduleAndSpecifiers) => {
140
210
  };
141
211
 
142
212
  /**
213
+ * Gets external module node commonjs init fragment.
143
214
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
215
+ * @param {boolean=} universal target may also run outside node (e.g. `["node", "web"]`)
144
216
  * @returns {InitFragment<ChunkRenderContext>} code
145
217
  */
146
- const getExternalModuleNodeCommonjsInitFragment = (runtimeTemplate) => {
218
+ const getExternalModuleNodeCommonjsInitFragment = (
219
+ runtimeTemplate,
220
+ universal = false
221
+ ) => {
147
222
  const importMetaName = runtimeTemplate.outputOptions.importMetaName;
223
+ const moduleId = runtimeTemplate.renderNodePrefixForCoreModule("module");
224
+
225
+ if (!universal) {
226
+ return new InitFragment(
227
+ `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from ${moduleId};\n${runtimeTemplate.renderConst()} __WEBPACK_EXTERNAL_createRequire_require = __WEBPACK_EXTERNAL_createRequire(${importMetaName}.url);\n`,
228
+ InitFragment.STAGE_HARMONY_IMPORTS,
229
+ 0,
230
+ "external module node-commonjs"
231
+ );
232
+ }
233
+
234
+ // defensively obtain `createRequire` so the universal bundle still loads off node
235
+ const content = `${runtimeTemplate.renderConst()} __WEBPACK_EXTERNAL_createRequire_require = ${runtimeTemplate.getBuiltinModule(
236
+ moduleId,
237
+ `.createRequire(${importMetaName}.url)`
238
+ )};\n`;
148
239
 
149
240
  return new InitFragment(
150
- `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from ${runtimeTemplate.renderNodePrefixForCoreModule(
151
- "module"
152
- )};\n${runtimeTemplate.renderConst()} __WEBPACK_EXTERNAL_createRequire_require = __WEBPACK_EXTERNAL_createRequire(${importMetaName}.url);\n`,
241
+ content,
153
242
  InitFragment.STAGE_HARMONY_IMPORTS,
154
243
  0,
155
- "external module node-commonjs"
244
+ "external module node-commonjs universal"
156
245
  );
157
246
  };
158
247
 
159
248
  /**
249
+ * Gets source for common js external in node module.
160
250
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
161
251
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
252
+ * @param {boolean=} universal target may also run outside node (e.g. `["node", "web"]`)
162
253
  * @returns {SourceData} the generated source
163
254
  */
164
255
  const getSourceForCommonJsExternalInNodeModule = (
165
256
  moduleAndSpecifiers,
166
- runtimeTemplate
257
+ runtimeTemplate,
258
+ universal = false
167
259
  ) => {
168
260
  const chunkInitFragments = [
169
- getExternalModuleNodeCommonjsInitFragment(runtimeTemplate)
261
+ getExternalModuleNodeCommonjsInitFragment(runtimeTemplate, universal)
170
262
  ];
171
263
  if (!Array.isArray(moduleAndSpecifiers)) {
172
264
  return {
@@ -186,6 +278,7 @@ const getSourceForCommonJsExternalInNodeModule = (
186
278
  };
187
279
 
188
280
  /**
281
+ * Gets source for import external.
189
282
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
190
283
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
191
284
  * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
@@ -196,15 +289,25 @@ const getSourceForImportExternal = (
196
289
  runtimeTemplate,
197
290
  dependencyMeta
198
291
  ) => {
199
- const importName = runtimeTemplate.outputOptions.importFunctionName;
292
+ const baseImportName = runtimeTemplate.outputOptions.importFunctionName;
200
293
  if (
201
294
  !runtimeTemplate.supportsDynamicImport() &&
202
- (importName === "import" || importName === "module-import")
295
+ (baseImportName === "import" || baseImportName === "module-import")
203
296
  ) {
204
297
  throw new Error(
205
298
  "The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
206
299
  );
207
300
  }
301
+ const phase = dependencyMeta && dependencyMeta.phase;
302
+ // `import.defer(…)` and `import.source(…)` are only valid forms of the
303
+ // native `import(…)` function, so we only emit the phase suffix when the
304
+ // importFunctionName is the default `"import"`.
305
+ const importName =
306
+ baseImportName === "import" && ImportPhaseUtils.isDefer(phase)
307
+ ? "import.defer"
308
+ : baseImportName === "import" && ImportPhaseUtils.isSource(phase)
309
+ ? "import.source"
310
+ : baseImportName;
208
311
  const attributes =
209
312
  dependencyMeta && dependencyMeta.attributes
210
313
  ? dependencyMeta.attributes._isLegacyAssert
@@ -240,6 +343,7 @@ const getSourceForImportExternal = (
240
343
  };
241
344
 
242
345
  /**
346
+ * Import assertion replacer.
243
347
  * @param {string} key key
244
348
  * @param {ImportAttributes | string | boolean | undefined} value value
245
349
  * @returns {ImportAttributes | string | boolean | undefined} replaced value
@@ -253,10 +357,12 @@ const importAssertionReplacer = (key, value) => {
253
357
  };
254
358
 
255
359
  /**
360
+ * Represents ModuleExternalInitFragment.
256
361
  * @extends {InitFragment<GenerateContext>}
257
362
  */
258
363
  class ModuleExternalInitFragment extends InitFragment {
259
364
  /**
365
+ * Creates an instance of ModuleExternalInitFragment.
260
366
  * @param {string} request import source
261
367
  * @param {Imported} imported the imported specifiers
262
368
  * @param {string=} ident recomputed ident
@@ -284,16 +390,24 @@ class ModuleExternalInitFragment extends InitFragment {
284
390
  "",
285
391
  InitFragment.STAGE_HARMONY_IMPORTS,
286
392
  0,
287
- `external module import ${ident} ${imported === true ? imported : imported.join(" ")}`
393
+ `external module import ${ident} ${
394
+ imported === true ? imported : imported.join(" ")
395
+ }`
288
396
  );
397
+ /** @type {string} */
289
398
  this._ident = ident;
399
+ /** @type {string} */
290
400
  this._request = request;
401
+ /** @type {ImportDependencyMeta | undefined} */
291
402
  this._dependencyMeta = dependencyMeta;
403
+ /** @type {string} */
292
404
  this._identifier = this.buildIdentifier(ident);
405
+ /** @type {Imported} */
293
406
  this._imported = this.buildImported(imported);
294
407
  }
295
408
 
296
409
  /**
410
+ * Returns imported.
297
411
  * @returns {Imported} imported
298
412
  */
299
413
  getImported() {
@@ -301,6 +415,7 @@ class ModuleExternalInitFragment extends InitFragment {
301
415
  }
302
416
 
303
417
  /**
418
+ * Updates imported using the provided imported.
304
419
  * @param {Imported} imported imported
305
420
  */
306
421
  setImported(imported) {
@@ -308,6 +423,7 @@ class ModuleExternalInitFragment extends InitFragment {
308
423
  }
309
424
 
310
425
  /**
426
+ * Returns the source code that will be included as initialization code.
311
427
  * @param {GenerateContext} context context
312
428
  * @returns {string | Source | undefined} the source code that will be included as initialization code
313
429
  */
@@ -320,23 +436,34 @@ class ModuleExternalInitFragment extends InitFragment {
320
436
  } = this;
321
437
  const attributes =
322
438
  dependencyMeta && dependencyMeta.attributes
323
- ? dependencyMeta.attributes._isLegacyAssert &&
324
- dependencyMeta.attributes._isLegacyAssert
439
+ ? dependencyMeta.attributes._isLegacyAssert
325
440
  ? ` assert ${JSON.stringify(
326
441
  dependencyMeta.attributes,
327
442
  importAssertionReplacer
328
443
  )}`
329
444
  : ` with ${JSON.stringify(dependencyMeta.attributes)}`
330
445
  : "";
446
+ const phase = dependencyMeta && dependencyMeta.phase;
331
447
  let content = "";
332
448
  if (imported === true) {
333
449
  // namespace
334
- content = `import * as ${identifier} from ${JSON.stringify(request)}${
335
- attributes
336
- };\n`;
450
+ const phaseKeyword = ImportPhaseUtils.isDefer(phase) ? "defer " : "";
451
+ content = `import ${phaseKeyword}* as ${identifier} from ${JSON.stringify(
452
+ request
453
+ )}${attributes};\n`;
337
454
  } else if (imported.length === 0) {
338
455
  // just import, no use
339
456
  content = `import ${JSON.stringify(request)}${attributes};\n`;
457
+ } else if (
458
+ ImportPhaseUtils.isSource(phase) &&
459
+ imported.length === 1 &&
460
+ imported[0][0] === "default"
461
+ ) {
462
+ // `import source x from "…"` — the source-phase form binds the source
463
+ // object directly to a single identifier (no namespace, no destructuring).
464
+ content = `import source ${imported[0][1]} from ${JSON.stringify(
465
+ request
466
+ )}${attributes};\n`;
340
467
  } else {
341
468
  content = `import { ${imported
342
469
  .map(([name, finalName]) => {
@@ -355,6 +482,7 @@ class ModuleExternalInitFragment extends InitFragment {
355
482
  }
356
483
 
357
484
  /**
485
+ * Returns identifier.
358
486
  * @param {string} ident ident
359
487
  * @returns {string} identifier
360
488
  */
@@ -363,6 +491,7 @@ class ModuleExternalInitFragment extends InitFragment {
363
491
  }
364
492
 
365
493
  /**
494
+ * Returns normalized imported.
366
495
  * @param {Imported} imported imported
367
496
  * @returns {Imported} normalized imported
368
497
  */
@@ -395,6 +524,7 @@ register(
395
524
  );
396
525
 
397
526
  /**
527
+ * Generates module remapping.
398
528
  * @param {string} input input
399
529
  * @param {ExportsInfo} exportsInfo the exports info
400
530
  * @param {RuntimeSpec=} runtime the runtime
@@ -437,6 +567,7 @@ const generateModuleRemapping = (
437
567
  };
438
568
 
439
569
  /**
570
+ * Gets source for module external.
440
571
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
441
572
  * @param {ExportsInfo} exportsInfo exports info of this module
442
573
  * @param {RuntimeSpec} runtime the runtime
@@ -453,6 +584,7 @@ const getSourceForModuleExternal = (
453
584
  dependencyMeta,
454
585
  concatenationScope
455
586
  ) => {
587
+ const phase = dependencyMeta && dependencyMeta.phase;
456
588
  /** @type {Imported} */
457
589
  let imported = true;
458
590
  if (concatenationScope) {
@@ -481,6 +613,14 @@ const getSourceForModuleExternal = (
481
613
  imported = true;
482
614
  }
483
615
 
616
+ // `import defer …` is only valid as `import defer * as ns from "…"`, so
617
+ // keep the namespace form even if usage analysis would otherwise narrow
618
+ // the import down to specific names. Defer + concatenation is semantically
619
+ // at odds (lazy vs. eager), so we preserve the user-written shape here.
620
+ if (ImportPhaseUtils.isDefer(phase)) {
621
+ imported = true;
622
+ }
623
+
484
624
  const initFragment = new ModuleExternalInitFragment(
485
625
  moduleAndSpecifiers[0],
486
626
  imported,
@@ -511,10 +651,10 @@ const getSourceForModuleExternal = (
511
651
  return {
512
652
  expression,
513
653
  init: moduleRemapping
514
- ? `var x = ${runtimeTemplate.basicFunction(
654
+ ? `${runtimeTemplate.renderConst()} x = ${runtimeTemplate.basicFunction(
515
655
  "y",
516
- `var x = {}; ${RuntimeGlobals.definePropertyGetters}(x, y); return x`
517
- )} \nvar y = ${runtimeTemplate.returningFunction(
656
+ `${runtimeTemplate.renderConst()} x = {}; ${RuntimeGlobals.definePropertyGetters}(x, y); return x`
657
+ )} \n${runtimeTemplate.renderConst()} y = ${runtimeTemplate.returningFunction(
518
658
  runtimeTemplate.returningFunction("x"),
519
659
  "x"
520
660
  )}`
@@ -530,6 +670,7 @@ const getSourceForModuleExternal = (
530
670
  };
531
671
 
532
672
  /**
673
+ * Gets source for script external.
533
674
  * @param {string | string[]} urlAndGlobal the script request
534
675
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
535
676
  * @returns {SourceData} the generated source
@@ -541,7 +682,7 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
541
682
  const url = urlAndGlobal[0];
542
683
  const globalName = urlAndGlobal[1];
543
684
  return {
544
- init: "var __webpack_error__ = new Error();",
685
+ init: `${runtimeTemplate.renderConst()} __webpack_error__ = new Error();`,
545
686
  expression: `new Promise(${runtimeTemplate.basicFunction(
546
687
  "resolve, reject",
547
688
  [
@@ -550,12 +691,13 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
550
691
  url
551
692
  )}, ${runtimeTemplate.basicFunction("event", [
552
693
  `if(typeof ${globalName} !== "undefined") return resolve();`,
553
- "var errorType = event && (event.type === 'load' ? 'missing' : event.type);",
554
- "var realSrc = event && event.target && event.target.src;",
694
+ `${runtimeTemplate.renderConst()} errorType = event && (event.type === 'load' ? 'missing' : event.type);`,
695
+ `${runtimeTemplate.renderConst()} realSrc = event && event.target && event.target.src;`,
555
696
  "__webpack_error__.message = 'Loading script failed.\\n(' + errorType + ': ' + realSrc + ')';",
556
697
  "__webpack_error__.name = 'ScriptExternalLoadError';",
557
698
  "__webpack_error__.type = errorType;",
558
699
  "__webpack_error__.request = realSrc;",
700
+ "__webpack_error__.event = event;",
559
701
  "reject(__webpack_error__);"
560
702
  ])}, ${JSON.stringify(globalName)});`
561
703
  ]
@@ -567,6 +709,42 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
567
709
  };
568
710
 
569
711
  /**
712
+ * Gets source for amd-async external. Loads the module at runtime via the
713
+ * asynchronous AMD `require([...])` API and exposes it as an async module,
714
+ * so no AMD library wrapper around the chunk is needed.
715
+ * @param {string | string[]} request the request path
716
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
717
+ * @returns {SourceData} the generated source
718
+ */
719
+ const getSourceForAmdAsyncExternal = (request, runtimeTemplate) => {
720
+ if (!Array.isArray(request)) {
721
+ request = [request];
722
+ }
723
+ const { library } = runtimeTemplate.outputOptions;
724
+ const amdRequire =
725
+ library && library.amdContainer
726
+ ? `${library.amdContainer}.require`
727
+ : "require";
728
+ return {
729
+ expression: `new Promise(${runtimeTemplate.basicFunction(
730
+ "resolve, reject",
731
+ [
732
+ `if (typeof ${amdRequire} !== "function") return reject(new Error(${JSON.stringify(
733
+ `AMD 'require' is not available to load external module ${request[0]}`
734
+ )}));`,
735
+ `${amdRequire}(${JSON.stringify([
736
+ request[0]
737
+ ])}, ${runtimeTemplate.basicFunction(
738
+ "module",
739
+ `resolve(module${propertyAccess(request, 1)});`
740
+ )}, reject);`
741
+ ]
742
+ )})`
743
+ };
744
+ };
745
+
746
+ /**
747
+ * Checks external variable.
570
748
  * @param {string} variableName the variable name to check
571
749
  * @param {string} request the request path
572
750
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -578,6 +756,7 @@ const checkExternalVariable = (variableName, request, runtimeTemplate) =>
578
756
  )} }\n`;
579
757
 
580
758
  /**
759
+ * Gets source for amd or umd external.
581
760
  * @param {ModuleId | string} id the module id
582
761
  * @param {boolean} optional true, if the module is optional
583
762
  * @param {string | string[]} request the request path
@@ -606,6 +785,7 @@ const getSourceForAmdOrUmdExternal = (
606
785
  };
607
786
 
608
787
  /**
788
+ * Gets source for default case.
609
789
  * @param {boolean} optional true, if the module is optional
610
790
  * @param {string | string[]} request the request path
611
791
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -630,24 +810,42 @@ const getSourceForDefaultCase = (optional, request, runtimeTemplate) => {
630
810
  /** @typedef {Record<string, string | string[]>} RequestRecord */
631
811
  /** @typedef {string | string[] | RequestRecord} ExternalModuleRequest */
632
812
 
813
+ const createCompilationHooks = () => ({
814
+ /**
815
+ * @type {SyncBailHook<[Chunk, Compilation], boolean>}
816
+ * @since 5.106.0
817
+ */
818
+ chunkCondition: new SyncBailHook(["chunk", "compilation"])
819
+ });
820
+
633
821
  /**
634
- * @typedef {object} ExternalModuleHooks
635
- * @property {SyncBailHook<[Chunk, Compilation], boolean>} chunkCondition
822
+ * @typedef {ReturnType<typeof createCompilationHooks>} ExternalModuleHooks
636
823
  */
637
824
 
638
- /** @type {WeakMap<Compilation, ExternalModuleHooks>} */
639
- const compilationHooksMap = new WeakMap();
825
+ /**
826
+ * Defines the build info properties specific to external modules.
827
+ * @typedef {object} KnownExternalModuleBuildInfo
828
+ * @property {boolean=} javascriptModule true when emitting an ESM external (`output.module`)
829
+ */
830
+
831
+ /** @typedef {BuildInfo & KnownExternalModuleBuildInfo} ExternalModuleBuildInfo */
640
832
 
641
833
  class ExternalModule extends Module {
642
834
  /**
835
+ * Creates an instance of ExternalModule.
643
836
  * @param {ExternalModuleRequest} request request
644
837
  * @param {ExternalsType} type type
645
838
  * @param {string} userRequest user request
646
839
  * @param {DependencyMeta=} dependencyMeta dependency meta
840
+ * @param {ExternalInterop=} interop how the external's exports interoperate with ES module imports
647
841
  */
648
- constructor(request, type, userRequest, dependencyMeta) {
842
+ constructor(request, type, userRequest, dependencyMeta, interop) {
649
843
  super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
650
844
 
845
+ // Redeclared with the external module specific shape
846
+ /** @type {ExternalModuleBuildInfo | undefined} */
847
+ this.buildInfo = undefined;
848
+
651
849
  // Info from Factory
652
850
  /** @type {ExternalModuleRequest} */
653
851
  this.request = request;
@@ -657,34 +855,23 @@ class ExternalModule extends Module {
657
855
  this.userRequest = userRequest;
658
856
  /** @type {DependencyMeta=} */
659
857
  this.dependencyMeta = dependencyMeta;
858
+ /** @type {ExternalInterop | undefined} interop shape of the external's exports (undefined = importer-driven default) */
859
+ this.interop = interop;
660
860
  }
661
861
 
662
862
  /**
663
- * @param {Compilation} compilation the compilation
664
- * @returns {ExternalModuleHooks} the attached hooks
665
- */
666
- static getCompilationHooks(compilation) {
667
- let hooks = compilationHooksMap.get(compilation);
668
- if (hooks === undefined) {
669
- hooks = {
670
- chunkCondition: new SyncBailHook(["chunk", "compilation"])
671
- };
672
- compilationHooksMap.set(compilation, hooks);
673
- }
674
- return hooks;
675
- }
676
-
677
- /**
863
+ * Returns the source types this module can generate.
678
864
  * @returns {SourceTypes} types available (do not mutate)
679
865
  */
680
866
  getSourceTypes() {
681
- if (
682
- this.externalType === "asset" &&
683
- this.dependencyMeta &&
684
- /** @type {AssetDependencyMeta} */
685
- (this.dependencyMeta).sourceType === "css-url"
686
- ) {
687
- return CSS_URL_TYPES;
867
+ if (this.externalType === "asset" && this.dependencyMeta) {
868
+ const sourceType =
869
+ /** @type {AssetDependencyMeta} */
870
+ (this.dependencyMeta).sourceType;
871
+ // TODO webpack 6 drop "css-url" once the alias is removed
872
+ if (sourceType === ASSET_URL_TYPE || sourceType === "css-url") {
873
+ return ASSET_URL_TYPES;
874
+ }
688
875
  } else if (this.externalType === "css-import") {
689
876
  return CSS_IMPORT_TYPES;
690
877
  }
@@ -693,6 +880,7 @@ class ExternalModule extends Module {
693
880
  }
694
881
 
695
882
  /**
883
+ * Gets the library identifier.
696
884
  * @param {LibIdentOptions} options options
697
885
  * @returns {LibIdent | null} an identifier for library inclusion
698
886
  */
@@ -701,6 +889,7 @@ class ExternalModule extends Module {
701
889
  }
702
890
 
703
891
  /**
892
+ * Returns true if the module can be placed in the chunk.
704
893
  * @param {Chunk} chunk the chunk which condition should be checked
705
894
  * @param {Compilation} compilation the compilation
706
895
  * @returns {boolean} true if the module can be placed in the chunk
@@ -721,13 +910,30 @@ class ExternalModule extends Module {
721
910
  }
722
911
 
723
912
  /**
913
+ * Returns the unique identifier used to reference this module.
724
914
  * @returns {string} a unique identifier of the module
725
915
  */
726
916
  identifier() {
727
- return `external ${this._resolveExternalType(this.externalType)} ${JSON.stringify(this.request)}`;
917
+ let id = `external ${this._resolveExternalType(
918
+ this.externalType
919
+ )} ${JSON.stringify(this.request)}`;
920
+ const meta = /** @type {ImportDependencyMeta | undefined} */ (
921
+ this.dependencyMeta
922
+ );
923
+ if (meta) {
924
+ if (meta.phase) {
925
+ id += `|phase=${ImportPhaseUtils.stringify(meta.phase)}`;
926
+ }
927
+ if (meta.attributes) {
928
+ id += `|attributes=${JSON.stringify(meta.attributes)}`;
929
+ }
930
+ }
931
+ if (this.interop) id += `|interop=${this.interop}`;
932
+ return id;
728
933
  }
729
934
 
730
935
  /**
936
+ * Returns a human-readable identifier for this module.
731
937
  * @param {RequestShortener} requestShortener the request shortener
732
938
  * @returns {string} a user readable identifier of the module
733
939
  */
@@ -736,6 +942,7 @@ class ExternalModule extends Module {
736
942
  }
737
943
 
738
944
  /**
945
+ * Checks whether the module needs to be rebuilt for the current build state.
739
946
  * @param {NeedBuildContext} context context info
740
947
  * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
741
948
  * @returns {void}
@@ -745,6 +952,7 @@ class ExternalModule extends Module {
745
952
  }
746
953
 
747
954
  /**
955
+ * Builds the module using the provided compilation context.
748
956
  * @param {WebpackOptions} options webpack options
749
957
  * @param {Compilation} compilation the compilation
750
958
  * @param {ResolverWithOptions} resolver the resolver
@@ -763,6 +971,28 @@ class ExternalModule extends Module {
763
971
  javascriptModule: compilation.outputOptions.module
764
972
  };
765
973
  const { request, externalType } = this._getRequestAndExternalType();
974
+ if (
975
+ request === undefined &&
976
+ typeof this.request === "object" &&
977
+ !Array.isArray(this.request) &&
978
+ !LIBRARY_WIRED_EXTERNAL_TYPES.has(this.externalType)
979
+ ) {
980
+ this.addError(
981
+ new WebpackError(
982
+ `Missing external configuration for type "${
983
+ this.externalType
984
+ }" in external ${JSON.stringify(
985
+ this.request
986
+ )}. Add a ${JSON.stringify(
987
+ this.externalType
988
+ )} entry to it or set 'output.externalsType'/'output.library.type' to one of: ${Object.keys(
989
+ this.request
990
+ )
991
+ .map((key) => JSON.stringify(key))
992
+ .join(", ")}`
993
+ )
994
+ );
995
+ }
766
996
  this.buildMeta.exportsType = "dynamic";
767
997
  let canMangle = false;
768
998
  this.clearDependenciesAndBlocks();
@@ -811,6 +1041,14 @@ class ExternalModule extends Module {
811
1041
  "external promise"
812
1042
  );
813
1043
  break;
1044
+ case "amd-async":
1045
+ this.buildMeta.async = true;
1046
+ EnvironmentNotSupportAsyncWarning.check(
1047
+ this,
1048
+ compilation.runtimeTemplate,
1049
+ "external amd-async"
1050
+ );
1051
+ break;
814
1052
  case "import":
815
1053
  this.buildMeta.async = true;
816
1054
  EnvironmentNotSupportAsyncWarning.check(
@@ -824,6 +1062,20 @@ class ExternalModule extends Module {
824
1062
  }
825
1063
  break;
826
1064
  }
1065
+ // Opt-in override for how the external's exports interoperate with ESM
1066
+ // imports, independent of the importer's strictness (see Rollup's
1067
+ // `output.interop`). Only meaningful for a single-request external.
1068
+ if (this.interop && (!Array.isArray(request) || request.length === 1)) {
1069
+ if (this.interop === "esModule") {
1070
+ // external already is an ES module namespace: `default` unboxes to `.default`
1071
+ this.buildMeta.exportsType = "namespace";
1072
+ } else {
1073
+ // "default": treat as CommonJS, `default` is the whole exports (Node.js semantics)
1074
+ this.buildMeta.exportsType = "default";
1075
+ this.buildMeta.defaultObject = "redirect";
1076
+ }
1077
+ canMangle = false;
1078
+ }
827
1079
  this.addDependency(new StaticExportsDependency(true, canMangle));
828
1080
  callback();
829
1081
  }
@@ -838,6 +1090,7 @@ class ExternalModule extends Module {
838
1090
  }
839
1091
 
840
1092
  /**
1093
+ * Returns the reason this module cannot be concatenated, when one exists.
841
1094
  * @param {ConcatenationBailoutReasonContext} context context
842
1095
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
843
1096
  */
@@ -855,6 +1108,7 @@ class ExternalModule extends Module {
855
1108
  }
856
1109
 
857
1110
  /**
1111
+ * Get request and external type.
858
1112
  * @private
859
1113
  * @returns {{ request: string | string[], externalType: ExternalsType }} the request and external type
860
1114
  */
@@ -901,6 +1155,7 @@ class ExternalModule extends Module {
901
1155
  }
902
1156
 
903
1157
  /**
1158
+ * Returns the source data.
904
1159
  * @private
905
1160
  * @param {string | string[]} request request
906
1161
  * @param {ExternalsType} externalType the external type
@@ -922,6 +1177,11 @@ class ExternalModule extends Module {
922
1177
  dependencyMeta,
923
1178
  concatenationScope
924
1179
  ) {
1180
+ request = normalizeNodeCoreModuleRequest(
1181
+ request,
1182
+ externalType,
1183
+ runtimeTemplate
1184
+ );
925
1185
  switch (externalType) {
926
1186
  case "this":
927
1187
  case "window":
@@ -936,11 +1196,24 @@ class ExternalModule extends Module {
936
1196
  case "commonjs2":
937
1197
  case "commonjs-module":
938
1198
  case "commonjs-static":
939
- return getSourceForCommonJsExternal(request);
940
- case "node-commonjs":
941
- return /** @type {BuildInfo} */ (this.buildInfo).javascriptModule
942
- ? getSourceForCommonJsExternalInNodeModule(request, runtimeTemplate)
943
- : getSourceForCommonJsExternal(request);
1199
+ case "node-commonjs": {
1200
+ const { node } = runtimeTemplate.compilation.options.externalsPresets;
1201
+ // ESM has no `require`; load via `createRequire` when the target is node
1202
+ const createRequireInModule =
1203
+ /** @type {BuildInfo} */ (this.buildInfo).javascriptModule &&
1204
+ (externalType === "node-commonjs" || Boolean(node));
1205
+ if (!createRequireInModule) {
1206
+ return getSourceForCommonJsExternal(request);
1207
+ }
1208
+ // for a universal target (e.g. `["node", "web"]`) load defensively so the browser doesn't crash
1209
+ return getSourceForCommonJsExternalInNodeModule(
1210
+ request,
1211
+ runtimeTemplate,
1212
+ runtimeTemplate.isUniversalTarget()
1213
+ );
1214
+ }
1215
+ case "amd-async":
1216
+ return getSourceForAmdAsyncExternal(request, runtimeTemplate);
944
1217
  case "amd":
945
1218
  case "amd-require":
946
1219
  case "umd":
@@ -1007,6 +1280,7 @@ class ExternalModule extends Module {
1007
1280
  }
1008
1281
 
1009
1282
  /**
1283
+ * Generates code and runtime requirements for this module.
1010
1284
  * @param {CodeGenerationContext} context context for code generation
1011
1285
  * @returns {CodeGenerationResult} result
1012
1286
  */
@@ -1031,12 +1305,14 @@ class ExternalModule extends Module {
1031
1305
  data.set("url", { javascript: /** @type {string} */ (request) });
1032
1306
  return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
1033
1307
  }
1034
- case "css-url": {
1308
+ // TODO webpack 6 remove "css-url" alias
1309
+ case "css-url":
1310
+ case "asset-url": {
1035
1311
  /** @type {Sources} */
1036
1312
  const sources = new Map();
1037
1313
  /** @type {CodeGenerationResultData} */
1038
1314
  const data = new Map();
1039
- data.set("url", { "css-url": /** @type {string} */ (request) });
1315
+ data.set("url", { [ASSET_URL_TYPE]: /** @type {string} */ (request) });
1040
1316
  return { sources, runtimeRequirements: RUNTIME_REQUIREMENTS, data };
1041
1317
  }
1042
1318
  case "css-import": {
@@ -1092,7 +1368,9 @@ class ExternalModule extends Module {
1092
1368
  scope.registerRawExport(specifier, finalName);
1093
1369
  }
1094
1370
  } else if (concatenationScope) {
1095
- sourceString = `${runtimeTemplate.renderConst()} ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
1371
+ sourceString = `${runtimeTemplate.renderConst()} ${
1372
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
1373
+ } = ${sourceString};`;
1096
1374
  concatenationScope.registerNamespaceExport(
1097
1375
  ConcatenationScope.NAMESPACE_OBJECT_EXPORT
1098
1376
  );
@@ -1143,6 +1421,7 @@ class ExternalModule extends Module {
1143
1421
  }
1144
1422
 
1145
1423
  /**
1424
+ * Returns the estimated size for the requested source type.
1146
1425
  * @param {string=} type the source type for which the size should be estimated
1147
1426
  * @returns {number} the estimated size of the module (must be non-zero)
1148
1427
  */
@@ -1151,6 +1430,7 @@ class ExternalModule extends Module {
1151
1430
  }
1152
1431
 
1153
1432
  /**
1433
+ * Updates the hash with the data contributed by this instance.
1154
1434
  * @param {Hash} hash the hash used to track dependencies
1155
1435
  * @param {UpdateHashContext} context context
1156
1436
  * @returns {void}
@@ -1158,42 +1438,63 @@ class ExternalModule extends Module {
1158
1438
  updateHash(hash, context) {
1159
1439
  const { chunkGraph } = context;
1160
1440
  hash.update(
1161
- `${this._resolveExternalType(this.externalType)}${JSON.stringify(this.request)}${this.isOptional(
1162
- chunkGraph.moduleGraph
1163
- )}`
1441
+ `${this._resolveExternalType(this.externalType)}${JSON.stringify(
1442
+ this.request
1443
+ )}${this.isOptional(chunkGraph.moduleGraph)}`
1164
1444
  );
1445
+ const meta = /** @type {ImportDependencyMeta | undefined} */ (
1446
+ this.dependencyMeta
1447
+ );
1448
+ if (meta) {
1449
+ if (meta.phase) {
1450
+ hash.update(`|phase=${ImportPhaseUtils.stringify(meta.phase)}`);
1451
+ }
1452
+ if (meta.attributes) {
1453
+ hash.update(`|attributes=${JSON.stringify(meta.attributes)}`);
1454
+ }
1455
+ }
1456
+ if (this.interop) hash.update(`|interop=${this.interop}`);
1165
1457
  super.updateHash(hash, context);
1166
1458
  }
1167
1459
 
1168
1460
  /**
1461
+ * Serializes this instance into the provided serializer context.
1169
1462
  * @param {ObjectSerializerContext} context context
1170
1463
  */
1171
1464
  serialize(context) {
1172
- const { write } = context;
1173
-
1174
- write(this.request);
1175
- write(this.externalType);
1176
- write(this.userRequest);
1177
- write(this.dependencyMeta);
1465
+ context
1466
+ .write(this.request)
1467
+ .write(this.externalType)
1468
+ .write(this.userRequest)
1469
+ .write(this.dependencyMeta)
1470
+ .write(this.interop);
1178
1471
 
1179
1472
  super.serialize(context);
1180
1473
  }
1181
1474
 
1182
1475
  /**
1476
+ * Restores this instance from the provided deserializer context.
1183
1477
  * @param {ObjectDeserializerContext} context context
1184
1478
  */
1185
1479
  deserialize(context) {
1186
- const { read } = context;
1187
-
1188
- this.request = read();
1189
- this.externalType = read();
1190
- this.userRequest = read();
1191
- this.dependencyMeta = read();
1192
-
1193
- super.deserialize(context);
1480
+ this.request = context.read();
1481
+ const c1 = context.rest;
1482
+ this.externalType = c1.read();
1483
+ const c2 = c1.rest;
1484
+ this.userRequest = c2.read();
1485
+ const c3 = c2.rest;
1486
+ this.dependencyMeta = c3.read();
1487
+ const c4 = c3.rest;
1488
+ this.interop = c4.read();
1489
+
1490
+ super.deserialize(c4.rest);
1194
1491
  }
1195
1492
  }
1196
1493
 
1494
+ ExternalModule.getCompilationHooks = createHooksRegistry(
1495
+ createCompilationHooks
1496
+ );
1497
+
1197
1498
  makeSerializable(ExternalModule, "webpack/lib/ExternalModule");
1198
1499
 
1199
1500
  module.exports = ExternalModule;