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