@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
@@ -10,27 +10,35 @@ const { RawSource } = require("webpack-sources");
10
10
  const ConcatenationScope = require("../ConcatenationScope");
11
11
  const Generator = require("../Generator");
12
12
  const {
13
- ASSET_AND_CSS_URL_TYPES,
14
- ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES,
13
+ ASSET_AND_ASSET_URL_TYPES,
14
+ ASSET_AND_JAVASCRIPT_AND_ASSET_URL_TYPES,
15
15
  ASSET_AND_JAVASCRIPT_TYPES,
16
16
  ASSET_TYPES,
17
+ ASSET_URL_TYPE,
18
+ ASSET_URL_TYPES,
17
19
  CSS_TYPE,
18
- CSS_URL_TYPE,
19
- CSS_URL_TYPES,
20
- JAVASCRIPT_AND_CSS_URL_TYPES,
20
+ HTML_TYPE,
21
+ JAVASCRIPT_AND_ASSET_URL_TYPES,
21
22
  JAVASCRIPT_TYPE,
22
23
  JAVASCRIPT_TYPES,
23
24
  NO_TYPES
24
25
  } = require("../ModuleSourceTypeConstants");
25
- const { ASSET_MODULE_TYPE } = require("../ModuleTypeConstants");
26
+ const {
27
+ ASSET_MODULE_TYPE,
28
+ ASSET_MODULE_TYPE_WEBMANIFEST
29
+ } = require("../ModuleTypeConstants");
26
30
  const RuntimeGlobals = require("../RuntimeGlobals");
27
- const CssUrlDependency = require("../dependencies/CssUrlDependency");
28
31
  const createHash = require("../util/createHash");
29
32
  const { makePathsRelative } = require("../util/identifier");
30
33
  const memoize = require("../util/memoize");
31
34
  const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
35
+ const {
36
+ PUBLIC_PATH_AUTO,
37
+ PUBLIC_PATH_FULL_HASH
38
+ } = require("../util/publicPathPlaceholder");
39
+ const { updateHashFromSource } = require("../util/source");
32
40
 
33
- const getMimeTypes = memoize(() => require("mime-types"));
41
+ const getMimeTypes = memoize(() => require("../util/mimeTypes"));
34
42
 
35
43
  /** @typedef {import("webpack-sources").Source} Source */
36
44
  /** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorDataUrlOptions} AssetGeneratorDataUrlOptions */
@@ -40,24 +48,42 @@ const getMimeTypes = memoize(() => require("mime-types"));
40
48
  /** @typedef {import("../../declarations/WebpackOptions").AssetResourceGeneratorOptions} AssetResourceGeneratorOptions */
41
49
  /** @typedef {import("../../declarations/WebpackOptions").RawPublicPath} RawPublicPath */
42
50
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
51
+ /** @typedef {import("../Compilation")} Compilation */
43
52
  /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
44
53
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
45
54
  /** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
46
55
  /** @typedef {import("../Module")} Module */
47
56
  /** @typedef {import("../Module").NameForCondition} NameForCondition */
48
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
57
+ /** @typedef {import("./AssetModule").AssetModuleBuildInfo} AssetModuleBuildInfo */
49
58
  /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
50
59
  /** @typedef {import("../Module").SourceType} SourceType */
51
60
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
52
61
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
53
62
  /** @typedef {import("../NormalModule")} NormalModule */
63
+ /** @typedef {import("../dependencies/URLDependency")} URLDependency */
54
64
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
55
65
  /** @typedef {import("../util/Hash")} Hash */
56
66
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
57
67
 
58
68
  /** @typedef {(source: string | Buffer, context: { filename: string, module: Module }) => string} DataUrlFunction */
59
69
 
70
+ // slash separating a module type from its subtype (`css/auto` -> `css`)
71
+ const TYPE_SEPARATOR_CHAR_CODE = 47;
72
+
73
+ /**
74
+ * Whether a module type's prefix (the part before `/`) equals `prefix`, without
75
+ * allocating the substring `type.split("/")[0]` would produce.
76
+ * @param {string} type module type (e.g. `javascript/auto`)
77
+ * @param {string} prefix expected prefix (e.g. `javascript`)
78
+ * @returns {boolean} whether the type's prefix equals `prefix`
79
+ */
80
+ const typePrefixEquals = (type, prefix) =>
81
+ type.startsWith(prefix) &&
82
+ (type.length === prefix.length ||
83
+ type.charCodeAt(prefix.length) === TYPE_SEPARATOR_CHAR_CODE);
84
+
60
85
  /**
86
+ * Merges maybe arrays.
61
87
  * @template T
62
88
  * @template U
63
89
  * @param {null | string | T[] | Set<T> | undefined} a a
@@ -75,6 +101,7 @@ const mergeMaybeArrays = (a, b) => {
75
101
  };
76
102
 
77
103
  /**
104
+ * Merges the provided values into a single result.
78
105
  * @param {AssetInfo} a a
79
106
  * @param {AssetInfo} b b
80
107
  * @returns {AssetInfo} object
@@ -115,6 +142,7 @@ const mergeAssetInfo = (a, b) => {
115
142
  };
116
143
 
117
144
  /**
145
+ * Merges related info.
118
146
  * @param {NonNullable<AssetInfo["related"]>} a a
119
147
  * @param {NonNullable<AssetInfo["related"]>} b b
120
148
  * @returns {NonNullable<AssetInfo["related"]>} object
@@ -131,6 +159,7 @@ const mergeRelatedInfo = (a, b) => {
131
159
  };
132
160
 
133
161
  /**
162
+ * Encodes the provided encoding.
134
163
  * @param {"base64" | false} encoding encoding
135
164
  * @param {Source} source source
136
165
  * @returns {string} encoded data
@@ -147,14 +176,10 @@ const encodeDataUri = (encoding, source) => {
147
176
  case false: {
148
177
  const content = source.source();
149
178
 
150
- if (typeof content !== "string") {
151
- encodedContent = content.toString("utf8");
152
- }
179
+ encodedContent =
180
+ typeof content === "string" ? content : content.toString("utf8");
153
181
 
154
- encodedContent = encodeURIComponent(
155
- /** @type {string} */
156
- (encodedContent)
157
- ).replace(
182
+ encodedContent = encodeURIComponent(encodedContent).replace(
158
183
  /[!'()*]/g,
159
184
  (character) =>
160
185
  `%${/** @type {number} */ (character.codePointAt(0)).toString(16)}`
@@ -169,6 +194,7 @@ const encodeDataUri = (encoding, source) => {
169
194
  };
170
195
 
171
196
  /**
197
+ * Decodes data uri content.
172
198
  * @param {"base64" | false} encoding encoding
173
199
  * @param {string} content content
174
200
  * @returns {Buffer} decoded content
@@ -182,9 +208,9 @@ const decodeDataUriContent = (encoding, content) => {
182
208
 
183
209
  // If we can't decode return the original body
184
210
  try {
185
- return Buffer.from(decodeURIComponent(content), "ascii");
211
+ return Buffer.from(decodeURIComponent(content), "utf8");
186
212
  } catch (_) {
187
- return Buffer.from(content, "ascii");
213
+ return Buffer.from(content, "utf8");
188
214
  }
189
215
  };
190
216
 
@@ -192,12 +218,14 @@ const DEFAULT_ENCODING = "base64";
192
218
 
193
219
  class AssetGenerator extends Generator {
194
220
  /**
221
+ * Creates an instance of AssetGenerator.
195
222
  * @param {ModuleGraph} moduleGraph the module graph
196
223
  * @param {AssetGeneratorOptions["dataUrl"]=} dataUrlOptions the options for the data url
197
224
  * @param {AssetModuleFilename=} filename override for output.assetModuleFilename
198
225
  * @param {RawPublicPath=} publicPath override for output.assetModulePublicPath
199
226
  * @param {AssetModuleOutputPath=} outputPath the output path for the emitted file which is not included in the runtime import
200
227
  * @param {boolean=} emit generate output asset
228
+ * @param {Compilation=} compilation the compilation (`getTypes` has no generate context, so the analyzable-output decision reads `output.module`/`output.publicPath` from here)
201
229
  */
202
230
  constructor(
203
231
  moduleGraph,
@@ -205,7 +233,8 @@ class AssetGenerator extends Generator {
205
233
  filename,
206
234
  publicPath,
207
235
  outputPath,
208
- emit
236
+ emit,
237
+ compilation
209
238
  ) {
210
239
  super();
211
240
  /** @type {AssetGeneratorOptions["dataUrl"] | undefined} */
@@ -218,11 +247,14 @@ class AssetGenerator extends Generator {
218
247
  this.outputPath = outputPath;
219
248
  /** @type {boolean | undefined} */
220
249
  this.emit = emit;
250
+ /** @type {Compilation | undefined} */
251
+ this._compilation = compilation;
221
252
  /** @type {ModuleGraph} */
222
253
  this._moduleGraph = moduleGraph;
223
254
  }
224
255
 
225
256
  /**
257
+ * Gets source file name.
226
258
  * @param {NormalModule} module module
227
259
  * @param {RuntimeTemplate} runtimeTemplate runtime template
228
260
  * @returns {string} source file name
@@ -237,6 +269,7 @@ class AssetGenerator extends Generator {
237
269
  }
238
270
 
239
271
  /**
272
+ * Gets full content hash.
240
273
  * @param {NormalModule} module module
241
274
  * @param {RuntimeTemplate} runtimeTemplate runtime template
242
275
  * @returns {[string, string]} return full hash and non-numeric full hash
@@ -251,7 +284,7 @@ class AssetGenerator extends Generator {
251
284
  const source = module.originalSource();
252
285
 
253
286
  if (source) {
254
- hash.update(source.buffer());
287
+ updateHashFromSource(hash, source);
255
288
  }
256
289
 
257
290
  if (module.error) {
@@ -271,17 +304,20 @@ class AssetGenerator extends Generator {
271
304
  }
272
305
 
273
306
  /**
307
+ * Gets filename with info.
274
308
  * @param {NormalModule} module module for which the code should be generated
275
309
  * @param {Pick<AssetResourceGeneratorOptions, "filename" | "outputPath">} generatorOptions generator options
276
310
  * @param {{ runtime: RuntimeSpec, runtimeTemplate: RuntimeTemplate, chunkGraph: ChunkGraph }} generateContext context for generate
277
311
  * @param {string} contentHash the content hash
312
+ * @param {string=} fullContentHash untruncated content hash, so `[contenthash:<digest>]` re-encodes from full entropy
278
313
  * @returns {{ filename: string, originalFilename: string, assetInfo: AssetInfo }} info
279
314
  */
280
315
  static getFilenameWithInfo(
281
316
  module,
282
317
  generatorOptions,
283
318
  { runtime, runtimeTemplate, chunkGraph },
284
- contentHash
319
+ contentHash,
320
+ fullContentHash
285
321
  ) {
286
322
  const assetModuleFilename =
287
323
  generatorOptions.filename ||
@@ -297,7 +333,8 @@ class AssetGenerator extends Generator {
297
333
  runtime,
298
334
  filename: sourceFilename,
299
335
  chunkGraph,
300
- contentHash
336
+ contentHash,
337
+ contentHashFull: fullContentHash
301
338
  });
302
339
 
303
340
  const originalFilename = filename;
@@ -311,7 +348,8 @@ class AssetGenerator extends Generator {
311
348
  runtime,
312
349
  filename: sourceFilename,
313
350
  chunkGraph,
314
- contentHash
351
+ contentHash,
352
+ contentHashFull: fullContentHash
315
353
  }
316
354
  );
317
355
  filename = path.posix.join(outputPath, filename);
@@ -322,12 +360,14 @@ class AssetGenerator extends Generator {
322
360
  }
323
361
 
324
362
  /**
363
+ * Gets asset path with info.
325
364
  * @param {NormalModule} module module for which the code should be generated
326
365
  * @param {Pick<AssetResourceGeneratorOptions, "publicPath">} generatorOptions generator options
327
366
  * @param {GenerateContext} generateContext context for generate
328
367
  * @param {string} filename the filename
329
368
  * @param {AssetInfo} assetInfo the asset info
330
369
  * @param {string} contentHash the content hash
370
+ * @param {string=} fullContentHash untruncated content hash, so `[contenthash:<digest>]` re-encodes from full entropy
331
371
  * @returns {{ assetPath: string, assetInfo: AssetInfo }} asset path and info
332
372
  */
333
373
  static getAssetPathWithInfo(
@@ -336,7 +376,8 @@ class AssetGenerator extends Generator {
336
376
  { runtime, runtimeTemplate, type, chunkGraph, runtimeRequirements },
337
377
  filename,
338
378
  assetInfo,
339
- contentHash
379
+ contentHash,
380
+ fullContentHash
340
381
  ) {
341
382
  const sourceFilename = AssetGenerator.getSourceFileName(
342
383
  module,
@@ -354,14 +395,15 @@ class AssetGenerator extends Generator {
354
395
  runtime,
355
396
  filename: sourceFilename,
356
397
  chunkGraph,
357
- contentHash
398
+ contentHash,
399
+ contentHashFull: fullContentHash
358
400
  }
359
401
  );
360
402
  assetInfo = mergeAssetInfo(assetInfo, info);
361
403
  assetPath = JSON.stringify(path + filename);
362
404
  } else if (
363
405
  generatorOptions.publicPath !== undefined &&
364
- type === CSS_URL_TYPE
406
+ type === ASSET_URL_TYPE
365
407
  ) {
366
408
  const { path, info } = runtimeTemplate.compilation.getAssetPathWithInfo(
367
409
  generatorOptions.publicPath,
@@ -370,7 +412,8 @@ class AssetGenerator extends Generator {
370
412
  runtime,
371
413
  filename: sourceFilename,
372
414
  chunkGraph,
373
- contentHash
415
+ contentHash,
416
+ contentHashFull: fullContentHash
374
417
  }
375
418
  );
376
419
  assetInfo = mergeAssetInfo(assetInfo, info);
@@ -382,13 +425,17 @@ class AssetGenerator extends Generator {
382
425
  { expr: RuntimeGlobals.publicPath },
383
426
  filename
384
427
  );
385
- } else if (type === CSS_URL_TYPE) {
428
+ } else if (type === ASSET_URL_TYPE) {
386
429
  const compilation = runtimeTemplate.compilation;
387
430
  const path =
388
431
  compilation.outputOptions.publicPath === "auto"
389
- ? CssUrlDependency.PUBLIC_PATH_AUTO
432
+ ? PUBLIC_PATH_AUTO
390
433
  : compilation.getAssetPath(compilation.outputOptions.publicPath, {
391
- hash: compilation.hash
434
+ hash: compilation.hash || `${PUBLIC_PATH_FULL_HASH}0__`,
435
+ hashWithLength: (length) =>
436
+ compilation.hash
437
+ ? compilation.hash.slice(0, length)
438
+ : `${PUBLIC_PATH_FULL_HASH}${length}__`
392
439
  });
393
440
 
394
441
  assetPath = path + filename;
@@ -401,6 +448,7 @@ class AssetGenerator extends Generator {
401
448
  }
402
449
 
403
450
  /**
451
+ * Returns the reason this module cannot be concatenated, when one exists.
404
452
  * @param {NormalModule} module module for which the bailout reason should be determined
405
453
  * @param {ConcatenationBailoutReasonContext} context context
406
454
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
@@ -410,6 +458,7 @@ class AssetGenerator extends Generator {
410
458
  }
411
459
 
412
460
  /**
461
+ * Returns mime type.
413
462
  * @param {NormalModule} module module
414
463
  * @returns {string} mime type
415
464
  */
@@ -420,7 +469,7 @@ class AssetGenerator extends Generator {
420
469
  );
421
470
  }
422
471
 
423
- /** @type {string | boolean | undefined} */
472
+ /** @type {string | undefined} */
424
473
  let mimeType =
425
474
  /** @type {AssetGeneratorDataUrlOptions} */
426
475
  (this.dataUrlOptions).mimetype;
@@ -462,6 +511,7 @@ class AssetGenerator extends Generator {
462
511
  }
463
512
 
464
513
  /**
514
+ * Generates data uri.
465
515
  * @param {NormalModule} module module for which the code should be generated
466
516
  * @returns {string} DataURI
467
517
  */
@@ -522,6 +572,7 @@ class AssetGenerator extends Generator {
522
572
  }
523
573
 
524
574
  /**
575
+ * Generates generated code for this runtime module.
525
576
  * @param {NormalModule} module module for which the code should be generated
526
577
  * @param {GenerateContext} generateContext context for generate
527
578
  * @returns {Source | null} generated code
@@ -538,11 +589,11 @@ class AssetGenerator extends Generator {
538
589
  /** @type {string} */
539
590
  let content;
540
591
 
541
- const needContent = type === JAVASCRIPT_TYPE || type === CSS_URL_TYPE;
592
+ const needContent = type === JAVASCRIPT_TYPE || type === ASSET_URL_TYPE;
542
593
  const data = getData ? getData() : undefined;
543
594
 
544
595
  if (
545
- /** @type {BuildInfo} */
596
+ /** @type {AssetModuleBuildInfo} */
546
597
  (module.buildInfo).dataUrl &&
547
598
  needContent
548
599
  ) {
@@ -553,7 +604,7 @@ class AssetGenerator extends Generator {
553
604
  : encodedSource;
554
605
 
555
606
  if (data) {
556
- data.set("url", { [type]: content, ...data.get("url") });
607
+ data.set("url", { ...data.get("url"), [type]: content });
557
608
  }
558
609
  } else {
559
610
  const [fullContentHash, contentHash] = AssetGenerator.getFullContentHash(
@@ -566,7 +617,7 @@ class AssetGenerator extends Generator {
566
617
  data.set("contentHash", contentHash);
567
618
  }
568
619
 
569
- /** @type {BuildInfo} */
620
+ /** @type {AssetModuleBuildInfo} */
570
621
  (module.buildInfo).fullContentHash = fullContentHash;
571
622
 
572
623
  const { originalFilename, filename, assetInfo } =
@@ -574,7 +625,8 @@ class AssetGenerator extends Generator {
574
625
  module,
575
626
  { filename: this.filename, outputPath: this.outputPath },
576
627
  generateContext,
577
- contentHash
628
+ contentHash,
629
+ fullContentHash
578
630
  );
579
631
 
580
632
  if (data) {
@@ -588,11 +640,12 @@ class AssetGenerator extends Generator {
588
640
  generateContext,
589
641
  originalFilename,
590
642
  assetInfo,
591
- contentHash
643
+ contentHash,
644
+ fullContentHash
592
645
  );
593
646
 
594
- if (data && (type === JAVASCRIPT_TYPE || type === CSS_URL_TYPE)) {
595
- data.set("url", { [type]: assetPath, ...data.get("url") });
647
+ if (data && (type === JAVASCRIPT_TYPE || type === ASSET_URL_TYPE)) {
648
+ data.set("url", { ...data.get("url"), [type]: assetPath });
596
649
  }
597
650
 
598
651
  if (data) {
@@ -610,10 +663,10 @@ class AssetGenerator extends Generator {
610
663
  // Due to code generation caching module.buildInfo.XXX can't used to store such information
611
664
  // It need to be stored in the code generation results instead, where it's cached too
612
665
  // TODO webpack 6 For back-compat reasons we also store in on module.buildInfo
613
- /** @type {BuildInfo} */
666
+ /** @type {AssetModuleBuildInfo} */
614
667
  (module.buildInfo).filename = filename;
615
668
 
616
- /** @type {BuildInfo} */
669
+ /** @type {AssetModuleBuildInfo} */
617
670
  (module.buildInfo).assetInfo = newAssetInfo;
618
671
 
619
672
  content = assetPath;
@@ -635,7 +688,7 @@ class AssetGenerator extends Generator {
635
688
  runtimeRequirements.add(RuntimeGlobals.module);
636
689
 
637
690
  return new RawSource(`${module.moduleArgument}.exports = ${content};`);
638
- } else if (type === CSS_URL_TYPE) {
691
+ } else if (type === ASSET_URL_TYPE) {
639
692
  return null;
640
693
  }
641
694
 
@@ -643,6 +696,7 @@ class AssetGenerator extends Generator {
643
696
  }
644
697
 
645
698
  /**
699
+ * Generates fallback output for the provided error condition.
646
700
  * @param {Error} error the error
647
701
  * @param {NormalModule} module module for which the code should be generated
648
702
  * @param {GenerateContext} generateContext context for generate
@@ -664,28 +718,101 @@ class AssetGenerator extends Generator {
664
718
  }
665
719
 
666
720
  /**
721
+ * Returns whether the effective publicPath yields a chunk-independent absolute
722
+ * url (scheme-relative, protocol-absolute, or root-absolute) with no hash tokens.
723
+ * Only then is a `new URL` literal correct for every chunk the asset is shared by,
724
+ * so the `module.exports` wrapper can be dropped in favor of the `asset-url` type.
725
+ * @returns {boolean} true when the publicPath is a token-free absolute string
726
+ */
727
+ _hasAbsolutePublicPath() {
728
+ const publicPath =
729
+ this.publicPath !== undefined
730
+ ? this.publicPath
731
+ : this._compilation && this._compilation.outputOptions.publicPath;
732
+ return (
733
+ typeof publicPath === "string" &&
734
+ !publicPath.includes("[") &&
735
+ (publicPath.startsWith("/") ||
736
+ /^[a-z][a-z\d+\-.]*:\/\//i.test(publicPath))
737
+ );
738
+ }
739
+
740
+ /**
741
+ * Returns the source types available for this module.
667
742
  * @param {NormalModule} module fresh module
668
743
  * @returns {SourceTypes} available types (do not mutate)
669
744
  */
670
745
  getTypes(module) {
671
- /** @type {Set<string>} */
672
- const sourceTypes = new Set();
673
746
  const connections = this._moduleGraph.getIncomingConnections(module);
674
747
 
748
+ // Only ESM output can drop a bare `new URL()` to an analyzable asset-url; without
749
+ // it every JS consumer needs the wrapper, so skip the per-connection dependency
750
+ // probe entirely and keep the pre-existing cheap path.
751
+ const isModule = Boolean(
752
+ this._compilation && this._compilation.outputOptions.module
753
+ );
754
+
755
+ // Collapse the incoming origin types into flags instead of a Set of prefixes:
756
+ // on assets shared by many modules this loop runs millions of times, so avoid
757
+ // the per-connection `split("/")` allocation and stop early when the result is fixed.
758
+ let hasOrigin = false;
759
+ // JS origin that needs the `module.exports = …` wrapper (not a `new URL` ref).
760
+ let hasOtherJs = false;
761
+ // JS origin via `new URL(…, import.meta.url)` — droppable to `asset-url` in ESM.
762
+ let hasUrlJs = false;
763
+ // A manifest embeds a bare URL string (like css/html), so its icons must
764
+ // resolve to `ASSET_URL_TYPE` rather than the JS runtime form.
765
+ let hasUrl = false;
675
766
  for (const connection of connections) {
676
- if (!connection.originModule) {
767
+ const originModule = connection.originModule;
768
+ if (!originModule) {
677
769
  continue;
678
770
  }
679
-
680
- sourceTypes.add(connection.originModule.type.split("/")[0]);
771
+ hasOrigin = true;
772
+ const originType = originModule.type;
773
+ if (originType === ASSET_MODULE_TYPE_WEBMANIFEST) {
774
+ hasUrl = true;
775
+ } else if (typePrefixEquals(originType, JAVASCRIPT_TYPE)) {
776
+ // Only a bare `new URL()` becomes the analyzable literal; relative and
777
+ // prefetch/preload refs keep the runtime form and still need the wrapper.
778
+ const dependency = isModule && connection.dependency;
779
+ if (
780
+ dependency &&
781
+ dependency.type === "new URL()" &&
782
+ !(/** @type {URLDependency} */ (dependency).relative) &&
783
+ !(/** @type {URLDependency} */ (dependency).prefetch) &&
784
+ !(/** @type {URLDependency} */ (dependency).preload)
785
+ ) {
786
+ hasUrlJs = true;
787
+ } else {
788
+ hasOtherJs = true;
789
+ }
790
+ } else if (
791
+ typePrefixEquals(originType, CSS_TYPE) ||
792
+ typePrefixEquals(originType, HTML_TYPE)
793
+ ) {
794
+ hasUrl = true;
795
+ }
796
+ // Once a non-URL JS consumer and a url consumer coexist the result is fixed.
797
+ if (hasOtherJs && hasUrl) break;
681
798
  }
682
799
 
683
- if ((module.buildInfo && module.buildInfo.dataUrl) || this.emit === false) {
684
- if (sourceTypes.size > 0) {
685
- if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
686
- return JAVASCRIPT_AND_CSS_URL_TYPES;
687
- } else if (sourceTypes.has(CSS_TYPE)) {
688
- return CSS_URL_TYPES;
800
+ const jsAsAssetUrl =
801
+ isModule && hasUrlJs && !hasOtherJs && this._hasAbsolutePublicPath();
802
+ // JS wrapper is needed for non-URL JS consumers, or URL consumers not dropped to asset-url.
803
+ const wantJs = hasOtherJs || (hasUrlJs && !jsAsAssetUrl);
804
+ const wantUrl = hasUrl || jsAsAssetUrl;
805
+
806
+ if (
807
+ (module.buildInfo &&
808
+ /** @type {AssetModuleBuildInfo} */ (module.buildInfo).dataUrl) ||
809
+ this.emit === false
810
+ ) {
811
+ if (hasOrigin) {
812
+ if (wantJs && wantUrl) {
813
+ return JAVASCRIPT_AND_ASSET_URL_TYPES;
814
+ } else if (wantUrl) {
815
+ return ASSET_URL_TYPES;
689
816
  }
690
817
  return JAVASCRIPT_TYPES;
691
818
  }
@@ -693,11 +820,11 @@ class AssetGenerator extends Generator {
693
820
  return NO_TYPES;
694
821
  }
695
822
 
696
- if (sourceTypes.size > 0) {
697
- if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
698
- return ASSET_AND_JAVASCRIPT_AND_CSS_URL_TYPES;
699
- } else if (sourceTypes.has(CSS_TYPE)) {
700
- return ASSET_AND_CSS_URL_TYPES;
823
+ if (hasOrigin) {
824
+ if (wantJs && wantUrl) {
825
+ return ASSET_AND_JAVASCRIPT_AND_ASSET_URL_TYPES;
826
+ } else if (wantUrl) {
827
+ return ASSET_AND_ASSET_URL_TYPES;
701
828
  }
702
829
  return ASSET_AND_JAVASCRIPT_TYPES;
703
830
  }
@@ -706,6 +833,14 @@ class AssetGenerator extends Generator {
706
833
  }
707
834
 
708
835
  /**
836
+ * @returns {boolean} whether getTypes() depends on the module's incoming connections
837
+ */
838
+ getTypesDependOnIncomingConnections() {
839
+ return true;
840
+ }
841
+
842
+ /**
843
+ * Returns the estimated size for the requested source type.
709
844
  * @param {NormalModule} module the module
710
845
  * @param {SourceType=} type source type
711
846
  * @returns {number} estimate size of the module
@@ -722,7 +857,10 @@ class AssetGenerator extends Generator {
722
857
  return originalSource.size();
723
858
  }
724
859
  default:
725
- if (module.buildInfo && module.buildInfo.dataUrl) {
860
+ if (
861
+ module.buildInfo &&
862
+ /** @type {AssetModuleBuildInfo} */ (module.buildInfo).dataUrl
863
+ ) {
726
864
  const originalSource = module.originalSource();
727
865
 
728
866
  if (!originalSource) {
@@ -742,6 +880,7 @@ class AssetGenerator extends Generator {
742
880
  }
743
881
 
744
882
  /**
883
+ * Updates the hash with the data contributed by this instance.
745
884
  * @param {Hash} hash hash that will be modified
746
885
  * @param {UpdateHashContext} updateHashContext context for updating hash
747
886
  */
@@ -749,7 +888,7 @@ class AssetGenerator extends Generator {
749
888
  const { module } = updateHashContext;
750
889
 
751
890
  if (
752
- /** @type {BuildInfo} */
891
+ /** @type {AssetModuleBuildInfo} */
753
892
  (module.buildInfo).dataUrl
754
893
  ) {
755
894
  hash.update("data-url");
@@ -0,0 +1,47 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const NormalModule = require("../NormalModule");
8
+ const makeSerializable = require("../util/makeSerializable");
9
+
10
+ /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
11
+ /** @typedef {import("../NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
12
+ /** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
13
+
14
+ /**
15
+ * Defines the build info properties specific to asset modules.
16
+ * @typedef {object} KnownAssetModuleBuildInfo
17
+ * @property {boolean=} dataUrl whether the asset is inlined as a data url
18
+ * @property {string=} filename
19
+ * @property {AssetInfo=} assetInfo
20
+ * @property {string=} fullContentHash
21
+ */
22
+
23
+ /** @typedef {NormalModuleBuildInfo & KnownAssetModuleBuildInfo} AssetModuleBuildInfo */
24
+
25
+ /**
26
+ * Module class for all `asset/*` modules. Asset-specific properties should live here instead of `NormalModule`.
27
+ */
28
+ class AssetModule extends NormalModule {
29
+ /**
30
+ * @param {NormalModuleCreateData} options options object
31
+ * @param {boolean=} sideEffectFree whether asset modules are side-effect-free (`AssetModulesPluginOptions`)
32
+ */
33
+ constructor(options, sideEffectFree) {
34
+ super(options);
35
+
36
+ // Redeclared with the asset specific shape
37
+ /** @type {AssetModuleBuildInfo | undefined} */
38
+ this.buildInfo = undefined;
39
+ if (sideEffectFree) {
40
+ this.factoryMeta = { sideEffectFree: true };
41
+ }
42
+ }
43
+ }
44
+
45
+ makeSerializable(AssetModule, "webpack/lib/asset/AssetModule");
46
+
47
+ module.exports = AssetModule;