@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
@@ -5,35 +5,43 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { RawSource } = require("webpack-sources");
9
+ const HotUpdateChunk = require("../HotUpdateChunk");
8
10
  const {
9
11
  ASSET_MODULE_TYPE,
10
12
  ASSET_MODULE_TYPE_BYTES,
11
13
  ASSET_MODULE_TYPE_INLINE,
12
14
  ASSET_MODULE_TYPE_RESOURCE,
13
- ASSET_MODULE_TYPE_SOURCE
15
+ ASSET_MODULE_TYPE_SOURCE,
16
+ ASSET_MODULE_TYPE_WEBMANIFEST
14
17
  } = require("../ModuleTypeConstants");
15
18
  const { compareModulesByFullName } = require("../util/comparators");
19
+ const createHash = require("../util/createHash");
20
+ const { getUndoPath } = require("../util/identifier");
16
21
  const memoize = require("../util/memoize");
22
+ const { PUBLIC_PATH_AUTO } = require("../util/publicPathPlaceholder");
17
23
 
18
24
  /** @typedef {import("webpack-sources").Source} Source */
19
25
  /** @typedef {import("schema-utils").Schema} Schema */
20
26
  /** @typedef {import("../../declarations/WebpackOptions").AssetGeneratorDataUrl} AssetGeneratorDataUrl */
21
27
  /** @typedef {import("../../declarations/WebpackOptions").AssetModuleOutputPath} AssetModuleOutputPath */
22
28
  /** @typedef {import("../../declarations/WebpackOptions").RawPublicPath} RawPublicPath */
23
- /** @typedef {import("../../declarations/WebpackOptions").FilenameTemplate} FilenameTemplate */
29
+ /** @typedef {import("../../declarations/WebpackOptions").AssetModuleFilename} AssetModuleFilename */
24
30
  /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
25
31
  /** @typedef {import("../Compiler")} Compiler */
26
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
32
+ /** @typedef {import("./AssetModule").AssetModuleBuildInfo} AssetModuleBuildInfo */
27
33
  /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
28
34
  /** @typedef {import("../NormalModule")} NormalModule */
29
- /** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
30
35
 
31
36
  /**
37
+ * Returns definition.
32
38
  * @param {string} name name of definitions
33
39
  * @returns {Schema} definition
34
40
  */
35
41
  const getSchema = (name) => {
36
- const { definitions } = require("../../schemas/WebpackOptions.json");
42
+ const { definitions } =
43
+ /** @type {EXPECTED_ANY} */
44
+ (require("../../schemas/WebpackOptions.json"));
37
45
 
38
46
  return {
39
47
  definitions,
@@ -54,26 +62,35 @@ const getAssetSourceGenerator = memoize(() =>
54
62
  require("./AssetSourceGenerator")
55
63
  );
56
64
  const getAssetBytesGenerator = memoize(() => require("./AssetBytesGenerator"));
57
- const getNormalModule = memoize(() => require("../NormalModule"));
65
+ const getAssetModule = memoize(() => require("./AssetModule"));
66
+ const getWebManifestParser = memoize(() => require("./WebManifestParser"));
67
+ const getWebManifestGenerator = memoize(() =>
68
+ require("./WebManifestGenerator")
69
+ );
58
70
 
59
71
  const type = ASSET_MODULE_TYPE;
72
+ // Source type produced by `WebManifestGenerator` (its emitted, rewritten JSON).
73
+ const WEBMANIFEST_SOURCE_TYPE = "webmanifest";
60
74
  const PLUGIN_NAME = "AssetModulesPlugin";
61
75
 
62
76
  /**
77
+ * Represents the asset modules plugin runtime component.
63
78
  * @typedef {object} AssetModulesPluginOptions
64
79
  * @property {boolean=} sideEffectFree
65
80
  */
66
81
 
67
82
  class AssetModulesPlugin {
68
83
  /**
84
+ * Creates an instance of AssetModulesPlugin.
69
85
  * @param {AssetModulesPluginOptions} options options
70
86
  */
71
87
  constructor(options) {
88
+ /** @type {AssetModulesPluginOptions} */
72
89
  this.options = options;
73
90
  }
74
91
 
75
92
  /**
76
- * Apply the plugin
93
+ * Applies the plugin by registering its hooks on the compiler.
77
94
  * @param {Compiler} compiler the compiler instance
78
95
  * @returns {void}
79
96
  */
@@ -81,7 +98,7 @@ class AssetModulesPlugin {
81
98
  compiler.hooks.compilation.tap(
82
99
  PLUGIN_NAME,
83
100
  (compilation, { normalModuleFactory }) => {
84
- const NormalModule = getNormalModule();
101
+ const AssetModule = getAssetModule();
85
102
  for (const type of [
86
103
  ASSET_MODULE_TYPE,
87
104
  ASSET_MODULE_TYPE_BYTES,
@@ -91,18 +108,11 @@ class AssetModulesPlugin {
91
108
  ]) {
92
109
  normalModuleFactory.hooks.createModuleClass
93
110
  .for(type)
94
- .tap(PLUGIN_NAME, (createData, _resolveData) => {
95
- // TODO create the module via new AssetModule with its own properties
96
- const module = new NormalModule(
97
- /** @type {NormalModuleCreateData} */
98
- (createData)
99
- );
100
- if (this.options.sideEffectFree) {
101
- module.factoryMeta = { sideEffectFree: true };
102
- }
103
-
104
- return module;
105
- });
111
+ .tap(
112
+ PLUGIN_NAME,
113
+ (createData, _resolveData) =>
114
+ new AssetModule(createData, this.options.sideEffectFree)
115
+ );
106
116
  }
107
117
 
108
118
  normalModuleFactory.hooks.createParser
@@ -222,7 +232,7 @@ class AssetModulesPlugin {
222
232
  }
223
233
  }
224
234
 
225
- /** @type {undefined | FilenameTemplate} */
235
+ /** @type {undefined | AssetModuleFilename} */
226
236
  let filename;
227
237
  /** @type {undefined | RawPublicPath} */
228
238
  let publicPath;
@@ -242,7 +252,8 @@ class AssetModulesPlugin {
242
252
  filename,
243
253
  publicPath,
244
254
  outputPath,
245
- generatorOptions.emit !== false
255
+ generatorOptions.emit !== false,
256
+ compilation
246
257
  );
247
258
  });
248
259
  }
@@ -278,7 +289,9 @@ class AssetModulesPlugin {
278
289
  module,
279
290
  chunk.runtime
280
291
  );
281
- const buildInfo = /** @type {BuildInfo} */ (module.buildInfo);
292
+ const buildInfo = /** @type {AssetModuleBuildInfo} */ (
293
+ module.buildInfo
294
+ );
282
295
  const data =
283
296
  /** @type {NonNullable<CodeGenerationResult["data"]>} */
284
297
  (codeGenResult.data);
@@ -315,7 +328,8 @@ class AssetModulesPlugin {
315
328
  runtimeTemplate,
316
329
  chunkGraph
317
330
  },
318
- contentHash
331
+ contentHash,
332
+ fullContentHash
319
333
  );
320
334
  entryFilename = filename;
321
335
  entryInfo = assetInfo;
@@ -352,6 +366,83 @@ class AssetModulesPlugin {
352
366
  return result;
353
367
  });
354
368
 
369
+ // A Web App Manifest (`asset/webmanifest`, gated on `experiments.html`)
370
+ // parses/emits like an asset, but its icon URLs are rewritten in place
371
+ // and the emitted file needs its own per-file public-path resolution.
372
+ if (compilation.options.experiments.html) {
373
+ normalModuleFactory.hooks.createParser
374
+ .for(ASSET_MODULE_TYPE_WEBMANIFEST)
375
+ .tap(PLUGIN_NAME, () => {
376
+ const WebManifestParser = getWebManifestParser();
377
+
378
+ return new WebManifestParser();
379
+ });
380
+ normalModuleFactory.hooks.createGenerator
381
+ .for(ASSET_MODULE_TYPE_WEBMANIFEST)
382
+ .tap(PLUGIN_NAME, () => {
383
+ const WebManifestGenerator = getWebManifestGenerator();
384
+
385
+ return new WebManifestGenerator(compilation.moduleGraph);
386
+ });
387
+
388
+ compilation.hooks.renderManifest.tap(
389
+ PLUGIN_NAME,
390
+ (result, options) => {
391
+ const { chunk, codeGenerationResults } = options;
392
+ if (chunk instanceof HotUpdateChunk) return result;
393
+ const { chunkGraph, outputOptions } = compilation;
394
+ const modules =
395
+ chunkGraph.getOrderedChunkModulesIterableBySourceType(
396
+ chunk,
397
+ WEBMANIFEST_SOURCE_TYPE,
398
+ compareModulesByFullName(compilation.compiler)
399
+ );
400
+ if (!modules) return result;
401
+ for (const module of modules) {
402
+ const codeGenResult = codeGenerationResults.get(
403
+ module,
404
+ chunk.runtime
405
+ );
406
+ const source = codeGenResult.sources.get(
407
+ WEBMANIFEST_SOURCE_TYPE
408
+ );
409
+ if (!source) continue;
410
+ const filename = /** @type {string} */ (
411
+ codeGenResult.data && codeGenResult.data.get("filename")
412
+ );
413
+ if (!filename) continue;
414
+ // Icon URLs resolve relative to the manifest's own location.
415
+ const undoPath = getUndoPath(
416
+ filename,
417
+ /** @type {string} */ (outputOptions.path),
418
+ false
419
+ );
420
+ const content = source
421
+ .source()
422
+ .toString()
423
+ .split(PUBLIC_PATH_AUTO)
424
+ .join(undoPath);
425
+ const hash = createHash(outputOptions.hashFunction || "md4");
426
+ hash.update(content);
427
+ const contentHash = /** @type {string} */ (
428
+ hash.digest(outputOptions.hashDigest || "hex")
429
+ ).slice(0, outputOptions.hashDigestLength || 20);
430
+ result.push({
431
+ render: () => new RawSource(content),
432
+ filename,
433
+ info: { immutable: true },
434
+ auxiliary: true,
435
+ identifier: `webManifestModule${chunkGraph.getModuleId(
436
+ module
437
+ )}|${filename}`,
438
+ hash: contentHash
439
+ });
440
+ }
441
+ return result;
442
+ }
443
+ );
444
+ }
445
+
355
446
  compilation.hooks.prepareModuleExecution.tap(
356
447
  PLUGIN_NAME,
357
448
  (options, context) => {
@@ -10,7 +10,7 @@ const Parser = require("../Parser");
10
10
  /** @typedef {import("../../declarations/WebpackOptions").AssetParserDataUrlOptions} AssetParserDataUrlOptions */
11
11
  /** @typedef {import("../../declarations/WebpackOptions").AssetParserOptions} AssetParserOptions */
12
12
  /** @typedef {import("../Module")} Module */
13
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
13
+ /** @typedef {import("./AssetModule").AssetModuleBuildInfo} AssetModuleBuildInfo */
14
14
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
15
15
  /** @typedef {import("../Parser").ParserState} ParserState */
16
16
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
@@ -19,6 +19,7 @@ const Parser = require("../Parser");
19
19
 
20
20
  class AssetParser extends Parser {
21
21
  /**
22
+ * Creates an instance of AssetParser.
22
23
  * @param {AssetParserOptions["dataUrlCondition"] | boolean} dataUrlCondition condition for inlining as DataUrl
23
24
  */
24
25
  constructor(dataUrlCondition) {
@@ -28,6 +29,7 @@ class AssetParser extends Parser {
28
29
  }
29
30
 
30
31
  /**
32
+ * Parses the provided source and updates the parser state.
31
33
  * @param {string | Buffer | PreparsedAst} source the source to parse
32
34
  * @param {ParserState} state the parser state
33
35
  * @returns {ParserState} the parser state
@@ -38,7 +40,7 @@ class AssetParser extends Parser {
38
40
  }
39
41
 
40
42
  const buildInfo =
41
- /** @type {BuildInfo} */
43
+ /** @type {AssetModuleBuildInfo} */
42
44
  (state.module.buildInfo);
43
45
  buildInfo.strict = true;
44
46
  const buildMeta =
@@ -9,10 +9,11 @@ const { RawSource } = require("webpack-sources");
9
9
  const ConcatenationScope = require("../ConcatenationScope");
10
10
  const Generator = require("../Generator");
11
11
  const {
12
+ ASSET_URL_TYPE,
13
+ ASSET_URL_TYPES,
12
14
  CSS_TYPE,
13
- CSS_URL_TYPE,
14
- CSS_URL_TYPES,
15
- JAVASCRIPT_AND_CSS_URL_TYPES,
15
+ HTML_TYPE,
16
+ JAVASCRIPT_AND_ASSET_URL_TYPES,
16
17
  JAVASCRIPT_TYPE,
17
18
  JAVASCRIPT_TYPES,
18
19
  NO_TYPES
@@ -29,15 +30,18 @@ const RuntimeGlobals = require("../RuntimeGlobals");
29
30
 
30
31
  class AssetSourceGenerator extends Generator {
31
32
  /**
33
+ * Creates an instance of AssetSourceGenerator.
32
34
  * @param {ModuleGraph} moduleGraph the module graph
33
35
  */
34
36
  constructor(moduleGraph) {
35
37
  super();
36
38
 
39
+ /** @type {ModuleGraph} */
37
40
  this._moduleGraph = moduleGraph;
38
41
  }
39
42
 
40
43
  /**
44
+ * Generates generated code for this runtime module.
41
45
  * @param {NormalModule} module module for which the code should be generated
42
46
  * @param {GenerateContext} generateContext context for generate
43
47
  * @returns {Source | null} generated code
@@ -76,7 +80,7 @@ class AssetSourceGenerator extends Generator {
76
80
  }
77
81
  return new RawSource(sourceContent);
78
82
  }
79
- case CSS_URL_TYPE: {
83
+ case ASSET_URL_TYPE: {
80
84
  if (!originalSource) {
81
85
  return null;
82
86
  }
@@ -96,6 +100,7 @@ class AssetSourceGenerator extends Generator {
96
100
  }
97
101
 
98
102
  /**
103
+ * Generates fallback output for the provided error condition.
99
104
  * @param {Error} error the error
100
105
  * @param {NormalModule} module module for which the code should be generated
101
106
  * @param {GenerateContext} generateContext context for generate
@@ -114,6 +119,7 @@ class AssetSourceGenerator extends Generator {
114
119
  }
115
120
 
116
121
  /**
122
+ * Returns the reason this module cannot be concatenated, when one exists.
117
123
  * @param {NormalModule} module module for which the bailout reason should be determined
118
124
  * @param {ConcatenationBailoutReasonContext} context context
119
125
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
@@ -123,6 +129,7 @@ class AssetSourceGenerator extends Generator {
123
129
  }
124
130
 
125
131
  /**
132
+ * Returns the source types available for this module.
126
133
  * @param {NormalModule} module fresh module
127
134
  * @returns {SourceTypes} available types (do not mutate)
128
135
  */
@@ -140,10 +147,13 @@ class AssetSourceGenerator extends Generator {
140
147
  }
141
148
 
142
149
  if (sourceTypes.size > 0) {
143
- if (sourceTypes.has(JAVASCRIPT_TYPE) && sourceTypes.has(CSS_TYPE)) {
144
- return JAVASCRIPT_AND_CSS_URL_TYPES;
145
- } else if (sourceTypes.has(CSS_TYPE)) {
146
- return CSS_URL_TYPES;
150
+ if (
151
+ sourceTypes.has(JAVASCRIPT_TYPE) &&
152
+ (sourceTypes.has(CSS_TYPE) || sourceTypes.has(HTML_TYPE))
153
+ ) {
154
+ return JAVASCRIPT_AND_ASSET_URL_TYPES;
155
+ } else if (sourceTypes.has(CSS_TYPE) || sourceTypes.has(HTML_TYPE)) {
156
+ return ASSET_URL_TYPES;
147
157
  }
148
158
  return JAVASCRIPT_TYPES;
149
159
  }
@@ -152,6 +162,14 @@ class AssetSourceGenerator extends Generator {
152
162
  }
153
163
 
154
164
  /**
165
+ * @returns {boolean} whether getTypes() depends on the module's incoming connections
166
+ */
167
+ getTypesDependOnIncomingConnections() {
168
+ return true;
169
+ }
170
+
171
+ /**
172
+ * Returns the estimated size for the requested source type.
155
173
  * @param {NormalModule} module the module
156
174
  * @param {SourceType=} type source type
157
175
  * @returns {number} estimate size of the module
@@ -14,6 +14,7 @@ const Parser = require("../Parser");
14
14
 
15
15
  class AssetSourceParser extends Parser {
16
16
  /**
17
+ * Parses the provided source and updates the parser state.
17
18
  * @param {string | Buffer | PreparsedAst} source the source to parse
18
19
  * @param {ParserState} state the parser state
19
20
  * @returns {ParserState} the parser state
@@ -29,13 +29,14 @@ const makeSerializable = require("../util/makeSerializable");
29
29
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
30
30
  /** @typedef {import("../RequestShortener")} RequestShortener */
31
31
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
32
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
33
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
32
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Buffer | undefined, string, string]>} ObjectDeserializerContext */
33
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Buffer | undefined, string, string]>} ObjectSerializerContext */
34
34
  /** @typedef {import("../util/Hash")} Hash */
35
35
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
36
36
 
37
37
  class RawDataUrlModule extends Module {
38
38
  /**
39
+ * Creates an instance of RawDataUrlModule.
39
40
  * @param {string} url raw url
40
41
  * @param {string} identifier unique identifier
41
42
  * @param {string=} readableIdentifier readable identifier
@@ -53,6 +54,7 @@ class RawDataUrlModule extends Module {
53
54
  }
54
55
 
55
56
  /**
57
+ * Returns the source types this module can generate.
56
58
  * @returns {SourceTypes} types available (do not mutate)
57
59
  */
58
60
  getSourceTypes() {
@@ -60,6 +62,7 @@ class RawDataUrlModule extends Module {
60
62
  }
61
63
 
62
64
  /**
65
+ * Returns the unique identifier used to reference this module.
63
66
  * @returns {string} a unique identifier of the module
64
67
  */
65
68
  identifier() {
@@ -67,6 +70,7 @@ class RawDataUrlModule extends Module {
67
70
  }
68
71
 
69
72
  /**
73
+ * Returns the estimated size for the requested source type.
70
74
  * @param {string=} type the source type for which the size should be estimated
71
75
  * @returns {number} the estimated size of the module (must be non-zero)
72
76
  */
@@ -78,6 +82,7 @@ class RawDataUrlModule extends Module {
78
82
  }
79
83
 
80
84
  /**
85
+ * Returns a human-readable identifier for this module.
81
86
  * @param {RequestShortener} requestShortener the request shortener
82
87
  * @returns {string} a user readable identifier of the module
83
88
  */
@@ -88,6 +93,7 @@ class RawDataUrlModule extends Module {
88
93
  }
89
94
 
90
95
  /**
96
+ * Checks whether the module needs to be rebuilt for the current build state.
91
97
  * @param {NeedBuildContext} context context info
92
98
  * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
93
99
  * @returns {void}
@@ -97,6 +103,7 @@ class RawDataUrlModule extends Module {
97
103
  }
98
104
 
99
105
  /**
106
+ * Builds the module using the provided compilation context.
100
107
  * @param {WebpackOptions} options webpack options
101
108
  * @param {Compilation} compilation the compilation
102
109
  * @param {ResolverWithOptions} resolver the resolver
@@ -113,6 +120,7 @@ class RawDataUrlModule extends Module {
113
120
  }
114
121
 
115
122
  /**
123
+ * Generates code and runtime requirements for this module.
116
124
  * @param {CodeGenerationContext} context context for code generation
117
125
  * @returns {CodeGenerationResult} result
118
126
  */
@@ -138,6 +146,7 @@ class RawDataUrlModule extends Module {
138
146
  }
139
147
 
140
148
  /**
149
+ * Updates the hash with the data contributed by this instance.
141
150
  * @param {Hash} hash the hash used to track dependencies
142
151
  * @param {UpdateHashContext} context context
143
152
  * @returns {void}
@@ -148,29 +157,30 @@ class RawDataUrlModule extends Module {
148
157
  }
149
158
 
150
159
  /**
160
+ * Serializes this instance into the provided serializer context.
151
161
  * @param {ObjectSerializerContext} context context
152
162
  */
153
163
  serialize(context) {
154
- const { write } = context;
155
-
156
- write(this.urlBuffer);
157
- write(this.identifierStr);
158
- write(this.readableIdentifierStr);
164
+ context
165
+ .write(this.urlBuffer)
166
+ .write(this.identifierStr)
167
+ .write(this.readableIdentifierStr);
159
168
 
160
169
  super.serialize(context);
161
170
  }
162
171
 
163
172
  /**
173
+ * Restores this instance from the provided deserializer context.
164
174
  * @param {ObjectDeserializerContext} context context
165
175
  */
166
176
  deserialize(context) {
167
- const { read } = context;
168
-
169
- this.urlBuffer = read();
170
- this.identifierStr = read();
171
- this.readableIdentifierStr = read();
177
+ this.urlBuffer = context.read();
178
+ const c1 = context.rest;
179
+ this.identifierStr = c1.read();
180
+ const c2 = c1.rest;
181
+ this.readableIdentifierStr = c2.read();
172
182
 
173
- super.deserialize(context);
183
+ super.deserialize(c2.rest);
174
184
  }
175
185
  }
176
186
 
@@ -0,0 +1,164 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { RawSource, ReplaceSource } = require("webpack-sources");
9
+ const { ASSET_URL_TYPE } = require("../ModuleSourceTypeConstants");
10
+ const createHash = require("../util/createHash");
11
+ const nonNumericOnlyHash = require("../util/nonNumericOnlyHash");
12
+ const { PUBLIC_PATH_AUTO } = require("../util/publicPathPlaceholder");
13
+ const AssetGenerator = require("./AssetGenerator");
14
+
15
+ /** @typedef {import("webpack-sources").Source} Source */
16
+ /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
17
+ /** @typedef {import("../Compilation").DependencyConstructor} DependencyConstructor */
18
+ /** @typedef {import("../Dependency")} Dependency */
19
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
20
+ /** @typedef {import("../Generator").GenerateContext} GenerateContext */
21
+ /** @typedef {import("../Module").SourceType} SourceType */
22
+ /** @typedef {import("../Module").SourceTypes} SourceTypes */
23
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
24
+ /** @typedef {import("../NormalModule")} NormalModule */
25
+
26
+ const WEBMANIFEST_TYPE = "webmanifest";
27
+ const WEBMANIFEST_TYPES = new Set([WEBMANIFEST_TYPE]);
28
+ const WEBMANIFEST_AND_ASSET_URL_TYPES = new Set([
29
+ WEBMANIFEST_TYPE,
30
+ ASSET_URL_TYPE
31
+ ]);
32
+
33
+ /**
34
+ * A Web App Manifest is a "typed asset": a variant of `AssetGenerator` (reusing
35
+ * its filename/hash and `ASSET_URL_TYPE` machinery) whose emitted content is the
36
+ * raw JSON with each icon `src` rewritten to its bundled asset URL. The manifest
37
+ * itself is emitted — with its own URL exposed to the referencing
38
+ * `<link rel="manifest">` — by `AssetModulesPlugin`'s `renderManifest`, which
39
+ * resolves the per-file public path (like the CSS/HTML plugins).
40
+ */
41
+ class WebManifestGenerator extends AssetGenerator {
42
+ /**
43
+ * @param {ModuleGraph} moduleGraph the module graph
44
+ */
45
+ constructor(moduleGraph) {
46
+ super(moduleGraph, undefined, undefined, undefined, undefined, true);
47
+ }
48
+
49
+ /**
50
+ * Returns the source types available for this module.
51
+ * @param {NormalModule} module fresh module
52
+ * @returns {SourceTypes} available types (do not mutate)
53
+ */
54
+ getTypes(module) {
55
+ // Expose the manifest's own URL only when it is referenced (from HTML).
56
+ const connections = this._moduleGraph.getIncomingConnections(module);
57
+ const referenced = !connections[Symbol.iterator]().next().done;
58
+ return referenced ? WEBMANIFEST_AND_ASSET_URL_TYPES : WEBMANIFEST_TYPES;
59
+ }
60
+
61
+ /**
62
+ * Returns the estimated size for the requested source type.
63
+ * @param {NormalModule} module the module
64
+ * @param {SourceType=} type source type
65
+ * @returns {number} estimate size of the module
66
+ */
67
+ getSize(module, type) {
68
+ const originalSource = module.originalSource();
69
+ return originalSource ? originalSource.size() : 0;
70
+ }
71
+
72
+ /**
73
+ * Rewrites each icon `src` in the raw manifest to its emitted asset URL.
74
+ * @param {NormalModule} module the manifest module
75
+ * @param {GenerateContext} generateContext context for generate
76
+ * @returns {string} the rewritten manifest content
77
+ */
78
+ _rewrite(module, generateContext) {
79
+ const originalSource = /** @type {Source} */ (module.originalSource());
80
+ const source = new ReplaceSource(originalSource);
81
+ // `HtmlSourceDependency.Template` only reads `moduleGraph`/`runtimeTemplate`/
82
+ // `codeGenerationResults`; the rest is filled to satisfy the context shape.
83
+ /** @type {DependencyTemplateContext} */
84
+ const templateContext = {
85
+ runtimeTemplate: generateContext.runtimeTemplate,
86
+ dependencyTemplates: generateContext.dependencyTemplates,
87
+ moduleGraph: generateContext.moduleGraph,
88
+ chunkGraph: generateContext.chunkGraph,
89
+ module,
90
+ runtime: generateContext.runtime,
91
+ runtimeRequirements: generateContext.runtimeRequirements,
92
+ concatenationScope: generateContext.concatenationScope,
93
+ codeGenerationResults:
94
+ /** @type {CodeGenerationResults} */
95
+ (generateContext.codeGenerationResults),
96
+ initFragments: [],
97
+ chunkInitFragments: []
98
+ };
99
+ for (const dependency of module.dependencies) {
100
+ const constructor = /** @type {DependencyConstructor} */ (
101
+ dependency.constructor
102
+ );
103
+ const template = templateContext.dependencyTemplates.get(constructor);
104
+ if (!template) {
105
+ throw new Error(
106
+ `No template for dependency: ${dependency.constructor.name}`
107
+ );
108
+ }
109
+ template.apply(dependency, source, templateContext);
110
+ }
111
+ return /** @type {string} */ (source.source());
112
+ }
113
+
114
+ /**
115
+ * Generates generated code for this runtime module.
116
+ * @param {NormalModule} module module for which the code should be generated
117
+ * @param {GenerateContext} generateContext context for generate
118
+ * @returns {Source | null} generated code
119
+ */
120
+ generate(module, generateContext) {
121
+ if (!module.originalSource()) return new RawSource("");
122
+
123
+ const { type, getData } = generateContext;
124
+ const content = this._rewrite(module, generateContext);
125
+
126
+ // Hash the *rewritten* content (so the filename tracks the icons) and reuse
127
+ // the asset filename machinery, so a plain (icon-less) manifest emits like a
128
+ // plain asset (`output.assetModuleFilename`, `[name]`, `[ext]`).
129
+ const outputOptions = generateContext.runtimeTemplate.outputOptions;
130
+ const hash = createHash(outputOptions.hashFunction);
131
+ if (outputOptions.hashSalt) hash.update(outputOptions.hashSalt);
132
+ hash.update(content);
133
+ const fullContentHash = /** @type {string} */ (
134
+ hash.digest(outputOptions.hashDigest)
135
+ );
136
+ const contentHash = nonNumericOnlyHash(
137
+ fullContentHash,
138
+ /** @type {number} */ (outputOptions.hashDigestLength)
139
+ );
140
+ const { filename, assetInfo } = AssetGenerator.getFilenameWithInfo(
141
+ module,
142
+ { filename: undefined, outputPath: undefined },
143
+ generateContext,
144
+ contentHash,
145
+ fullContentHash
146
+ );
147
+
148
+ const data = getData ? getData() : undefined;
149
+ if (data) {
150
+ data.set("filename", filename);
151
+ data.set("assetInfo", assetInfo);
152
+ if (type === ASSET_URL_TYPE) {
153
+ data.set("url", {
154
+ ...data.get("url"),
155
+ [ASSET_URL_TYPE]: PUBLIC_PATH_AUTO + filename
156
+ });
157
+ }
158
+ }
159
+
160
+ return type === ASSET_URL_TYPE ? null : new RawSource(content);
161
+ }
162
+ }
163
+
164
+ module.exports = WebManifestGenerator;