webpack 5.106.1 → 5.107.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 (600) hide show
  1. package/README.md +2 -2
  2. package/lib/APIPlugin.js +4 -2
  3. package/lib/AsyncDependenciesBlock.js +3 -0
  4. package/lib/AutomaticPrefetchPlugin.js +6 -1
  5. package/lib/BannerPlugin.js +10 -1
  6. package/lib/Cache.js +27 -5
  7. package/lib/CacheFacade.js +26 -0
  8. package/lib/Chunk.js +46 -0
  9. package/lib/ChunkGraph.js +111 -0
  10. package/lib/ChunkGroup.js +57 -13
  11. package/lib/ChunkTemplate.js +9 -0
  12. package/lib/CleanPlugin.js +14 -1
  13. package/lib/CodeGenerationResults.js +19 -0
  14. package/lib/CompatibilityPlugin.js +23 -8
  15. package/lib/Compilation.js +161 -27
  16. package/lib/Compiler.js +41 -17
  17. package/lib/ConcatenationScope.js +24 -1
  18. package/lib/ConditionalInitFragment.js +6 -0
  19. package/lib/ConstPlugin.js +4 -1
  20. package/lib/ContextExclusionPlugin.js +2 -1
  21. package/lib/ContextModule.js +14 -2
  22. package/lib/ContextModuleFactory.js +10 -0
  23. package/lib/ContextReplacementPlugin.js +4 -1
  24. package/lib/DefinePlugin.js +22 -9
  25. package/lib/DependenciesBlock.js +6 -1
  26. package/lib/Dependency.js +48 -4
  27. package/lib/DependencyTemplate.js +7 -1
  28. package/lib/DependencyTemplates.js +4 -0
  29. package/lib/DotenvPlugin.js +3 -0
  30. package/lib/DynamicEntryPlugin.js +3 -1
  31. package/lib/EntryOptionPlugin.js +3 -0
  32. package/lib/EntryPlugin.js +2 -1
  33. package/lib/Entrypoint.js +4 -0
  34. package/lib/EnvironmentPlugin.js +3 -2
  35. package/lib/ErrorHelpers.js +7 -0
  36. package/lib/EvalDevToolModulePlugin.js +3 -1
  37. package/lib/EvalSourceMapDevToolPlugin.js +11 -10
  38. package/lib/ExportsInfo.js +56 -2
  39. package/lib/ExportsInfoApiPlugin.js +2 -1
  40. package/lib/ExternalModule.js +114 -15
  41. package/lib/ExternalModuleFactoryPlugin.js +15 -0
  42. package/lib/ExternalsPlugin.js +2 -1
  43. package/lib/FileSystemInfo.js +291 -71
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -1
  45. package/lib/FlagDependencyExportsPlugin.js +4 -1
  46. package/lib/FlagDependencyUsagePlugin.js +5 -1
  47. package/lib/FlagEntryExportAsUsedPlugin.js +2 -1
  48. package/lib/Generator.js +16 -3
  49. package/lib/HotModuleReplacementPlugin.js +35 -9
  50. package/lib/IgnorePlugin.js +4 -2
  51. package/lib/IgnoreWarningsPlugin.js +2 -1
  52. package/lib/InitFragment.js +10 -0
  53. package/lib/JavascriptMetaInfoPlugin.js +2 -1
  54. package/lib/LibraryTemplatePlugin.js +2 -1
  55. package/lib/LoaderOptionsPlugin.js +3 -1
  56. package/lib/LoaderTargetPlugin.js +2 -1
  57. package/lib/MainTemplate.js +15 -0
  58. package/lib/ManifestPlugin.js +9 -2
  59. package/lib/Module.js +101 -19
  60. package/lib/ModuleFactory.js +6 -1
  61. package/lib/ModuleFilenameHelpers.js +3 -0
  62. package/lib/ModuleGraph.js +66 -0
  63. package/lib/ModuleGraphConnection.js +9 -0
  64. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  65. package/lib/ModuleSourceTypeConstants.js +32 -1
  66. package/lib/ModuleTemplate.js +8 -0
  67. package/lib/ModuleTypeConstants.js +12 -3
  68. package/lib/MultiCompiler.js +30 -2
  69. package/lib/MultiStats.js +8 -0
  70. package/lib/MultiWatching.js +3 -0
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +11 -2
  73. package/lib/NormalModule.js +43 -33
  74. package/lib/NormalModuleFactory.js +35 -2
  75. package/lib/NormalModuleReplacementPlugin.js +1 -1
  76. package/lib/NullFactory.js +1 -0
  77. package/lib/OptionsApply.js +1 -0
  78. package/lib/Parser.js +3 -1
  79. package/lib/PlatformPlugin.js +2 -1
  80. package/lib/PrefetchPlugin.js +2 -1
  81. package/lib/ProgressPlugin.js +158 -68
  82. package/lib/ProvidePlugin.js +3 -1
  83. package/lib/RawModule.js +12 -0
  84. package/lib/RecordIdsPlugin.js +8 -0
  85. package/lib/RequestShortener.js +8 -0
  86. package/lib/ResolverFactory.js +5 -0
  87. package/lib/RuntimeGlobals.js +6 -5
  88. package/lib/RuntimeModule.js +22 -7
  89. package/lib/RuntimePlugin.js +13 -0
  90. package/lib/RuntimeTemplate.js +35 -1
  91. package/lib/SelfModuleFactory.js +2 -0
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  93. package/lib/SourceMapDevToolPlugin.js +3 -1
  94. package/lib/Stats.js +5 -0
  95. package/lib/Template.js +20 -0
  96. package/lib/TemplatedPathPlugin.js +10 -3
  97. package/lib/UseStrictPlugin.js +2 -1
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +71 -3
  99. package/lib/WarnDeprecatedOptionPlugin.js +2 -2
  100. package/lib/WarnNoModeSetPlugin.js +17 -2
  101. package/lib/WatchIgnorePlugin.js +4 -1
  102. package/lib/Watching.js +16 -3
  103. package/lib/WebpackError.js +3 -74
  104. package/lib/WebpackIsIncludedPlugin.js +3 -1
  105. package/lib/WebpackOptionsApply.js +14 -1
  106. package/lib/WebpackOptionsDefaulter.js +1 -0
  107. package/lib/asset/AssetBytesGenerator.js +12 -2
  108. package/lib/asset/AssetBytesParser.js +1 -0
  109. package/lib/asset/AssetGenerator.js +42 -10
  110. package/lib/asset/AssetModulesPlugin.js +7 -2
  111. package/lib/asset/AssetParser.js +2 -0
  112. package/lib/asset/AssetSourceGenerator.js +12 -2
  113. package/lib/asset/AssetSourceParser.js +1 -0
  114. package/lib/asset/RawDataUrlModule.js +11 -0
  115. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  116. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  117. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  118. package/lib/buildChunkGraph.js +19 -6
  119. package/lib/cache/AddBuildDependenciesPlugin.js +2 -1
  120. package/lib/cache/AddManagedPathsPlugin.js +2 -1
  121. package/lib/cache/IdleFileCachePlugin.js +2 -1
  122. package/lib/cache/MemoryCachePlugin.js +1 -1
  123. package/lib/cache/MemoryWithGcCachePlugin.js +3 -1
  124. package/lib/cache/PackFileCacheStrategy.js +33 -4
  125. package/lib/cache/ResolverCachePlugin.js +10 -1
  126. package/lib/cache/getLazyHashedEtag.js +4 -0
  127. package/lib/cache/mergeEtags.js +2 -0
  128. package/lib/cli.js +33 -1
  129. package/lib/config/browserslistTargetHandler.js +2 -0
  130. package/lib/config/defaults.js +232 -12
  131. package/lib/config/normalization.js +15 -1
  132. package/lib/config/target.js +11 -0
  133. package/lib/container/ContainerEntryDependency.js +2 -0
  134. package/lib/container/ContainerEntryModule.js +12 -0
  135. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  136. package/lib/container/ContainerExposedDependency.js +4 -0
  137. package/lib/container/ContainerPlugin.js +2 -1
  138. package/lib/container/ContainerReferencePlugin.js +2 -1
  139. package/lib/container/FallbackDependency.js +4 -0
  140. package/lib/container/FallbackItemDependency.js +1 -0
  141. package/lib/container/FallbackModule.js +12 -0
  142. package/lib/container/FallbackModuleFactory.js +1 -0
  143. package/lib/container/ModuleFederationPlugin.js +3 -1
  144. package/lib/container/RemoteModule.js +13 -0
  145. package/lib/container/RemoteRuntimeModule.js +1 -0
  146. package/lib/container/RemoteToExternalDependency.js +1 -0
  147. package/lib/container/options.js +7 -0
  148. package/lib/css/CssGenerator.js +336 -100
  149. package/lib/css/CssInjectStyleRuntimeModule.js +45 -42
  150. package/lib/css/CssLoadingRuntimeModule.js +23 -4
  151. package/lib/{CssModule.js → css/CssModule.js} +21 -15
  152. package/lib/css/CssModulesPlugin.js +235 -89
  153. package/lib/css/CssParser.js +616 -261
  154. package/lib/css/walkCssTokens.js +179 -2
  155. package/lib/debug/ProfilingPlugin.js +19 -1
  156. package/lib/dependencies/AMDDefineDependency.js +7 -0
  157. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -0
  158. package/lib/dependencies/AMDPlugin.js +4 -1
  159. package/lib/dependencies/AMDRequireArrayDependency.js +6 -0
  160. package/lib/dependencies/AMDRequireContextDependency.js +3 -0
  161. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  162. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +14 -1
  163. package/lib/dependencies/AMDRequireDependency.js +4 -0
  164. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  165. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  166. package/lib/dependencies/CachedConstDependency.js +6 -1
  167. package/lib/dependencies/CommonJsDependencyHelpers.js +64 -0
  168. package/lib/dependencies/CommonJsExportRequireDependency.js +62 -10
  169. package/lib/dependencies/CommonJsExportsDependency.js +4 -0
  170. package/lib/dependencies/CommonJsExportsParserPlugin.js +9 -1
  171. package/lib/dependencies/CommonJsFullRequireDependency.js +36 -9
  172. package/lib/dependencies/CommonJsImportsParserPlugin.js +24 -3
  173. package/lib/dependencies/CommonJsPlugin.js +4 -1
  174. package/lib/dependencies/CommonJsRequireContextDependency.js +3 -0
  175. package/lib/dependencies/CommonJsRequireDependency.js +70 -4
  176. package/lib/dependencies/CommonJsSelfReferenceDependency.js +5 -0
  177. package/lib/dependencies/ConstDependency.js +6 -1
  178. package/lib/dependencies/ContextDependency.js +9 -2
  179. package/lib/dependencies/ContextDependencyHelpers.js +4 -1
  180. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  181. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  182. package/lib/dependencies/ContextElementDependency.js +4 -0
  183. package/lib/dependencies/CreateRequireParserPlugin.js +7 -1
  184. package/lib/dependencies/CreateScriptUrlDependency.js +4 -0
  185. package/lib/dependencies/CriticalDependencyWarning.js +2 -1
  186. package/lib/dependencies/CssIcssExportDependency.js +339 -66
  187. package/lib/dependencies/CssIcssImportDependency.js +53 -8
  188. package/lib/dependencies/CssIcssSymbolDependency.js +16 -4
  189. package/lib/dependencies/CssImportDependency.js +12 -0
  190. package/lib/dependencies/CssUrlDependency.js +32 -0
  191. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  192. package/lib/dependencies/DllEntryDependency.js +3 -0
  193. package/lib/dependencies/DynamicExports.js +5 -0
  194. package/lib/dependencies/EntryDependency.js +1 -0
  195. package/lib/dependencies/ExportsInfoDependency.js +6 -0
  196. package/lib/dependencies/ExternalModuleDependency.js +5 -0
  197. package/lib/dependencies/ExternalModuleInitFragment.js +3 -0
  198. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +4 -0
  199. package/lib/dependencies/HarmonyAcceptDependency.js +6 -0
  200. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  201. package/lib/dependencies/HarmonyCompatibilityDependency.js +1 -0
  202. package/lib/dependencies/HarmonyDetectionParserPlugin.js +4 -1
  203. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -0
  204. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  205. package/lib/dependencies/HarmonyExportExpressionDependency.js +27 -14
  206. package/lib/dependencies/HarmonyExportHeaderDependency.js +4 -0
  207. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -5
  208. package/lib/dependencies/HarmonyExportInitFragment.js +6 -0
  209. package/lib/dependencies/HarmonyExportSpecifierDependency.js +5 -0
  210. package/lib/dependencies/HarmonyExports.js +2 -0
  211. package/lib/dependencies/HarmonyImportDependency.js +21 -2
  212. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -1
  213. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -0
  214. package/lib/dependencies/HarmonyImportSpecifierDependency.js +18 -3
  215. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +5 -3
  216. package/lib/dependencies/HarmonyModulesPlugin.js +4 -1
  217. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -0
  218. package/lib/dependencies/HtmlInlineScriptDependency.js +133 -0
  219. package/lib/dependencies/HtmlInlineStyleDependency.js +101 -0
  220. package/lib/dependencies/HtmlScriptSrcDependency.js +318 -0
  221. package/lib/dependencies/HtmlSourceDependency.js +127 -0
  222. package/lib/dependencies/ImportContextDependency.js +4 -0
  223. package/lib/dependencies/ImportDependency.js +5 -0
  224. package/lib/dependencies/ImportEagerDependency.js +2 -0
  225. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  226. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -1
  227. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  228. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  229. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  230. package/lib/dependencies/ImportMetaPlugin.js +6 -0
  231. package/lib/dependencies/ImportParserPlugin.js +9 -2
  232. package/lib/dependencies/ImportPhase.js +7 -3
  233. package/lib/dependencies/ImportPlugin.js +2 -1
  234. package/lib/dependencies/ImportWeakDependency.js +2 -0
  235. package/lib/dependencies/JsonExportsDependency.js +6 -1
  236. package/lib/dependencies/LoaderDependency.js +2 -0
  237. package/lib/dependencies/LoaderImportDependency.js +2 -0
  238. package/lib/dependencies/LoaderPlugin.js +4 -1
  239. package/lib/dependencies/LocalModule.js +4 -0
  240. package/lib/dependencies/LocalModuleDependency.js +4 -0
  241. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  242. package/lib/dependencies/ModuleDecoratorDependency.js +7 -1
  243. package/lib/dependencies/ModuleDependency.js +7 -0
  244. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  245. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  246. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  247. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  248. package/lib/dependencies/ModuleInitFragmentDependency.js +4 -0
  249. package/lib/dependencies/NullDependency.js +2 -0
  250. package/lib/dependencies/PrefetchDependency.js +1 -0
  251. package/lib/dependencies/ProvidedDependency.js +6 -1
  252. package/lib/dependencies/PureExpressionDependency.js +7 -1
  253. package/lib/dependencies/RequireContextDependency.js +1 -0
  254. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -0
  255. package/lib/dependencies/RequireContextPlugin.js +2 -1
  256. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  257. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -0
  258. package/lib/dependencies/RequireEnsureDependency.js +4 -0
  259. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  260. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  261. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  262. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  263. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -1
  264. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  265. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  266. package/lib/dependencies/RequireResolveContextDependency.js +3 -0
  267. package/lib/dependencies/RequireResolveDependency.js +1 -0
  268. package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
  269. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -1
  270. package/lib/dependencies/StaticExportsDependency.js +3 -0
  271. package/lib/dependencies/SystemPlugin.js +5 -2
  272. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  273. package/lib/dependencies/URLContextDependency.js +3 -0
  274. package/lib/dependencies/URLDependency.js +6 -0
  275. package/lib/dependencies/URLPlugin.js +2 -0
  276. package/lib/dependencies/UnsupportedDependency.js +4 -0
  277. package/lib/dependencies/WebAssemblyExportImportedDependency.js +4 -0
  278. package/lib/dependencies/WebAssemblyImportDependency.js +5 -2
  279. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -0
  280. package/lib/dependencies/WorkerDependency.js +6 -1
  281. package/lib/dependencies/WorkerPlugin.js +11 -3
  282. package/lib/dependencies/getFunctionExpression.js +1 -0
  283. package/lib/dependencies/processExportInfo.js +1 -0
  284. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +44 -31
  285. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +7 -4
  286. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +4 -3
  287. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +6 -5
  288. package/lib/{DllModule.js → dll/DllModule.js} +35 -24
  289. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  290. package/lib/{DllPlugin.js → dll/DllPlugin.js} +8 -6
  291. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +23 -18
  292. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +13 -10
  293. package/lib/electron/ElectronTargetPlugin.js +2 -1
  294. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  295. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  296. package/lib/errors/BuildCycleError.js +1 -1
  297. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  298. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  299. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  300. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +4 -2
  301. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +4 -4
  302. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +11 -5
  303. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +6 -4
  304. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +4 -3
  305. package/lib/errors/JSONParseError.js +114 -0
  306. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +8 -5
  307. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +2 -2
  308. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +5 -4
  309. package/lib/{ModuleError.js → errors/ModuleError.js} +7 -5
  310. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +1 -1
  311. package/lib/{ModuleNotFoundError.js → errors/ModuleNotFoundError.js} +3 -2
  312. package/lib/{ModuleParseError.js → errors/ModuleParseError.js} +11 -6
  313. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +2 -1
  314. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +2 -1
  315. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +8 -5
  316. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +5 -4
  317. package/lib/errors/NonErrorEmittedError.js +28 -0
  318. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +8 -2
  319. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  320. package/lib/errors/WebpackError.js +84 -0
  321. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  322. package/lib/esm/ModuleChunkFormatPlugin.js +5 -1
  323. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
  324. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +5 -0
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  326. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  327. package/lib/hmr/LazyCompilationPlugin.js +20 -1
  328. package/lib/hmr/lazyCompilationBackend.js +2 -0
  329. package/lib/html/HtmlGenerator.js +379 -0
  330. package/lib/html/HtmlModulesPlugin.js +433 -0
  331. package/lib/html/HtmlParser.js +1489 -0
  332. package/lib/html/walkHtmlTokens.js +2733 -0
  333. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  334. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  335. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  336. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  337. package/lib/ids/IdHelpers.js +22 -1
  338. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  339. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  340. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  341. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  342. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  343. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  344. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  345. package/lib/index.js +39 -15
  346. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
  347. package/lib/javascript/BasicEvaluatedExpression.js +4 -2
  348. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  349. package/lib/javascript/ChunkHelpers.js +1 -0
  350. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  351. package/lib/javascript/EnableChunkLoadingPlugin.js +5 -1
  352. package/lib/javascript/JavascriptGenerator.js +10 -0
  353. package/lib/javascript/JavascriptModulesPlugin.js +112 -9
  354. package/lib/javascript/JavascriptParser.js +360 -16
  355. package/lib/javascript/JavascriptParserHelpers.js +7 -1
  356. package/lib/javascript/StartupHelpers.js +5 -0
  357. package/lib/json/JsonData.js +5 -0
  358. package/lib/json/JsonGenerator.js +21 -0
  359. package/lib/json/JsonModulesPlugin.js +1 -1
  360. package/lib/json/JsonParser.js +14 -25
  361. package/lib/library/AbstractLibraryPlugin.js +17 -2
  362. package/lib/library/AmdLibraryPlugin.js +8 -0
  363. package/lib/library/AssignLibraryPlugin.js +16 -0
  364. package/lib/library/EnableLibraryPlugin.js +8 -2
  365. package/lib/library/ExportPropertyLibraryPlugin.js +9 -0
  366. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +1 -1
  367. package/lib/library/JsonpLibraryPlugin.js +8 -0
  368. package/lib/library/ModuleLibraryPlugin.js +86 -1
  369. package/lib/library/SystemLibraryPlugin.js +8 -0
  370. package/lib/library/UmdLibraryPlugin.js +16 -0
  371. package/lib/logging/Logger.js +17 -0
  372. package/lib/logging/createConsoleLogger.js +7 -0
  373. package/lib/logging/runtime.js +2 -0
  374. package/lib/logging/truncateArgs.js +2 -0
  375. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  376. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  377. package/lib/node/NodeSourcePlugin.js +1 -1
  378. package/lib/node/NodeTargetPlugin.js +2 -1
  379. package/lib/node/NodeTemplatePlugin.js +3 -1
  380. package/lib/node/NodeWatchFileSystem.js +2 -0
  381. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +3 -0
  382. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -1
  383. package/lib/node/ReadFileCompileWasmPlugin.js +4 -1
  384. package/lib/node/RequireChunkLoadingRuntimeModule.js +3 -0
  385. package/lib/node/nodeConsole.js +116 -64
  386. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  387. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  388. package/lib/optimize/ConcatenatedModule.js +62 -6
  389. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  390. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -1
  391. package/lib/optimize/InnerGraph.js +16 -1
  392. package/lib/optimize/InnerGraphPlugin.js +14 -2
  393. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  394. package/lib/optimize/MangleExportsPlugin.js +5 -1
  395. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  396. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  397. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  398. package/lib/optimize/ModuleConcatenationPlugin.js +36 -8
  399. package/lib/optimize/RealContentHashPlugin.js +104 -26
  400. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  401. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  402. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  403. package/lib/optimize/SideEffectsFlagPlugin.js +118 -4
  404. package/lib/optimize/SplitChunksPlugin.js +50 -2
  405. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  406. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  407. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  408. package/lib/performance/SizeLimitsPlugin.js +8 -2
  409. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  410. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +6 -0
  411. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  412. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  413. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -0
  414. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  415. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  416. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  417. package/lib/rules/RuleSetCompiler.js +18 -0
  418. package/lib/rules/UseEffectRulePlugin.js +10 -3
  419. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -0
  420. package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -0
  421. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  422. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  423. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -0
  424. package/lib/runtime/CompatRuntimeModule.js +2 -0
  425. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -0
  426. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  427. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  428. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -0
  429. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  430. package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -0
  431. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  432. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  433. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -0
  434. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  435. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -0
  436. package/lib/runtime/HelperRuntimeModule.js +5 -0
  437. package/lib/runtime/LoadScriptRuntimeModule.js +1 -0
  438. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +121 -13
  439. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -0
  440. package/lib/runtime/NonceRuntimeModule.js +1 -0
  441. package/lib/runtime/OnChunksLoadedRuntimeModule.js +1 -0
  442. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  443. package/lib/runtime/RelativeUrlRuntimeModule.js +1 -0
  444. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  445. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +35 -0
  446. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  447. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -0
  448. package/lib/runtime/StartupEntrypointRuntimeModule.js +1 -0
  449. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  450. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  451. package/lib/schemes/DataUriPlugin.js +14 -2
  452. package/lib/schemes/FileUriPlugin.js +1 -1
  453. package/lib/schemes/HttpUriPlugin.js +43 -1
  454. package/lib/schemes/VirtualUrlPlugin.js +7 -2
  455. package/lib/serialization/AggregateErrorSerializer.js +2 -0
  456. package/lib/serialization/ArraySerializer.js +2 -0
  457. package/lib/serialization/BinaryMiddleware.js +20 -1
  458. package/lib/serialization/DateObjectSerializer.js +2 -0
  459. package/lib/serialization/ErrorObjectSerializer.js +3 -0
  460. package/lib/serialization/FileMiddleware.js +21 -0
  461. package/lib/serialization/MapObjectSerializer.js +2 -0
  462. package/lib/serialization/NullPrototypeObjectSerializer.js +2 -0
  463. package/lib/serialization/ObjectMiddleware.js +23 -0
  464. package/lib/serialization/PlainObjectSerializer.js +7 -0
  465. package/lib/serialization/RegExpObjectSerializer.js +2 -0
  466. package/lib/serialization/Serializer.js +5 -0
  467. package/lib/serialization/SerializerMiddleware.js +14 -2
  468. package/lib/serialization/SetObjectSerializer.js +2 -0
  469. package/lib/serialization/SingleItemMiddleware.js +3 -0
  470. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  471. package/lib/sharing/ConsumeSharedModule.js +15 -0
  472. package/lib/sharing/ConsumeSharedPlugin.js +8 -3
  473. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -4
  474. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  475. package/lib/sharing/ProvideSharedDependency.js +4 -0
  476. package/lib/sharing/ProvideSharedModule.js +12 -1
  477. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  478. package/lib/sharing/ProvideSharedPlugin.js +5 -2
  479. package/lib/sharing/SharePlugin.js +2 -1
  480. package/lib/sharing/ShareRuntimeModule.js +1 -0
  481. package/lib/sharing/resolveMatchedConfigs.js +4 -1
  482. package/lib/sharing/utils.js +8 -0
  483. package/lib/stats/DefaultStatsFactoryPlugin.js +58 -3
  484. package/lib/stats/DefaultStatsPresetPlugin.js +12 -2
  485. package/lib/stats/DefaultStatsPrinterPlugin.js +38 -2
  486. package/lib/stats/StatsFactory.js +13 -1
  487. package/lib/stats/StatsPrinter.js +7 -0
  488. package/lib/typescript/TypeScriptPlugin.js +210 -0
  489. package/lib/url/URLParserPlugin.js +8 -2
  490. package/lib/util/AppendOnlyStackedSet.js +15 -0
  491. package/lib/util/ArrayHelpers.js +1 -0
  492. package/lib/util/ArrayQueue.js +10 -5
  493. package/lib/util/AsyncQueue.js +22 -2
  494. package/lib/util/Hash.js +2 -2
  495. package/lib/util/IterableHelpers.js +3 -0
  496. package/lib/util/LazyBucketSortedSet.js +21 -0
  497. package/lib/util/LazySet.js +39 -0
  498. package/lib/util/LocConverter.js +53 -0
  499. package/lib/util/ParallelismFactorCalculator.js +1 -0
  500. package/lib/util/Queue.js +6 -3
  501. package/lib/util/Semaphore.js +14 -1
  502. package/lib/util/SetHelpers.js +3 -0
  503. package/lib/util/SortableSet.js +7 -1
  504. package/lib/util/StackedCacheMap.js +20 -3
  505. package/lib/util/StackedMap.js +45 -0
  506. package/lib/util/StringXor.js +1 -1
  507. package/lib/util/TupleQueue.js +7 -3
  508. package/lib/util/TupleSet.js +13 -0
  509. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  510. package/lib/util/WeakTupleMap.js +33 -0
  511. package/lib/util/binarySearchBounds.js +1 -0
  512. package/lib/util/cleverMerge.js +19 -2
  513. package/lib/util/comparators.js +34 -3
  514. package/lib/util/compileBooleanMatcher.js +9 -0
  515. package/lib/util/concatenate.js +9 -3
  516. package/lib/util/conventions.js +46 -1
  517. package/lib/util/createMappings.js +118 -0
  518. package/lib/util/dataURL.js +1 -0
  519. package/lib/util/deprecation.js +19 -0
  520. package/lib/util/deterministicGrouping.js +20 -0
  521. package/lib/util/extractSourceMap.js +1 -0
  522. package/lib/util/extractUrlAndGlobal.js +1 -0
  523. package/lib/util/findGraphRoots.js +5 -0
  524. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  525. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +4 -1
  526. package/lib/util/fs.js +71 -8
  527. package/lib/util/generateDebugId.js +1 -0
  528. package/lib/util/hash/BatchedHash.js +1 -0
  529. package/lib/util/hash/BulkUpdateHash.js +1 -0
  530. package/lib/util/hash/hash-digest.js +8 -0
  531. package/lib/util/hash/md4.js +1 -1
  532. package/lib/util/hash/wasm-hash.js +5 -0
  533. package/lib/util/hash/xxhash64.js +1 -1
  534. package/lib/util/identifier.js +67 -0
  535. package/lib/util/internalSerializables.js +35 -19
  536. package/lib/util/magicComment.js +10 -6
  537. package/lib/util/makeSerializable.js +6 -0
  538. package/lib/util/memoize.js +2 -0
  539. package/lib/util/mimeTypes.js +176 -0
  540. package/lib/util/nonNumericOnlyHash.js +1 -0
  541. package/lib/util/parseJson.js +41 -0
  542. package/lib/util/processAsyncTree.js +8 -0
  543. package/lib/util/property.js +1 -0
  544. package/lib/util/registerExternalSerializer.js +20 -0
  545. package/lib/util/removeBOM.js +1 -0
  546. package/lib/util/runtime.js +32 -0
  547. package/lib/util/semver.js +15 -0
  548. package/lib/util/serialization.js +2 -0
  549. package/lib/util/smartGrouping.js +8 -0
  550. package/lib/util/source.js +23 -0
  551. package/lib/util/topologicalSort.js +69 -0
  552. package/lib/validateSchema.js +1 -0
  553. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  554. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +1 -0
  555. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -0
  556. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  557. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -0
  558. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +12 -3
  559. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
  560. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +12 -1
  561. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +6 -3
  562. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +1 -0
  563. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
  564. package/lib/wasm-sync/WebAssemblyGenerator.js +26 -1
  565. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +7 -3
  566. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  567. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -1
  568. package/lib/wasm-sync/WebAssemblyParser.js +2 -0
  569. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  570. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -1
  571. package/lib/web/FetchCompileWasmPlugin.js +13 -1
  572. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  573. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -0
  574. package/lib/web/JsonpTemplatePlugin.js +2 -1
  575. package/lib/webpack.js +13 -1
  576. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  577. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -0
  578. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  579. package/package.json +31 -31
  580. package/schemas/WebpackOptions.check.js +1 -1
  581. package/schemas/WebpackOptions.json +161 -57
  582. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  583. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  584. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  585. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  586. package/schemas/plugins/ProgressPlugin.json +22 -0
  587. package/schemas/plugins/{DllReferencePlugin.check.d.ts → css/CssAutoOrModuleParserOptions.check.d.ts} +1 -1
  588. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  589. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  590. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  591. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  592. package/types.d.ts +5325 -353
  593. package/lib/CaseSensitiveModulesWarning.js +0 -72
  594. package/lib/GraphHelpers.js +0 -46
  595. package/lib/NoModeWarning.js +0 -23
  596. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  597. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  598. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  599. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  600. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -0,0 +1,101 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const { CSS_TEXT_TYPE } = require("../ModuleSourceTypeConstants");
8
+ const makeSerializable = require("../util/makeSerializable");
9
+ const ModuleDependency = require("./ModuleDependency");
10
+
11
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
+ /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
13
+ /** @typedef {import("../Dependency")} Dependency */
14
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../Module")} Module */
16
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
19
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
20
+
21
+ /**
22
+ * Represents an inline `<style>...</style>` block in an HTML module. The
23
+ * tag's content is fed into webpack's CSS pipeline as a virtual CSS module
24
+ * with `exportType: "text"` so `url()` and `\@import` references are
25
+ * resolved relative to the HTML file. At render time the original content
26
+ * range is replaced with the processed CSS text read from the CSS module's
27
+ * code generation data.
28
+ */
29
+ class HtmlInlineStyleDependency extends ModuleDependency {
30
+ /**
31
+ * Creates an instance of HtmlInlineStyleDependency.
32
+ * @param {string} request virtual request resolving to the inline CSS (data URI)
33
+ * @param {Range} range range of the inline CSS content (between `<style>` and `</style>`)
34
+ */
35
+ constructor(request, range) {
36
+ super(request);
37
+ this.range = range;
38
+ }
39
+
40
+ get type() {
41
+ return "html inline style";
42
+ }
43
+
44
+ get category() {
45
+ return "html-style";
46
+ }
47
+
48
+ /**
49
+ * Serializes this instance into the provided serializer context.
50
+ * @param {ObjectSerializerContext} context context
51
+ */
52
+ serialize(context) {
53
+ super.serialize(context);
54
+ }
55
+
56
+ /**
57
+ * Restores this instance from the provided deserializer context.
58
+ * @param {ObjectDeserializerContext} context context
59
+ */
60
+ deserialize(context) {
61
+ super.deserialize(context);
62
+ }
63
+ }
64
+
65
+ HtmlInlineStyleDependency.Template = class HtmlInlineStyleDependencyTemplate extends (
66
+ ModuleDependency.Template
67
+ ) {
68
+ /**
69
+ * Applies the plugin by registering its hooks on the compiler.
70
+ * @param {Dependency} dependency the dependency for which the template should be applied
71
+ * @param {ReplaceSource} source the current replace source which can be modified
72
+ * @param {DependencyTemplateContext} templateContext the context object
73
+ * @returns {void}
74
+ */
75
+ apply(dependency, source, { moduleGraph, runtime, codeGenerationResults }) {
76
+ const dep = /** @type {HtmlInlineStyleDependency} */ (dependency);
77
+ const module = /** @type {Module} */ (moduleGraph.getModule(dep));
78
+
79
+ /** @type {string} */
80
+ let cssText = "";
81
+
82
+ if (module) {
83
+ const codeGen =
84
+ /** @type {CodeGenerationResults} */
85
+ (codeGenerationResults).get(module, runtime);
86
+ const cssTextSource = codeGen.sources.get(CSS_TEXT_TYPE);
87
+ if (cssTextSource) {
88
+ cssText = /** @type {string} */ (cssTextSource.source());
89
+ }
90
+ }
91
+
92
+ source.replace(dep.range[0], dep.range[1] - 1, cssText);
93
+ }
94
+ };
95
+
96
+ makeSerializable(
97
+ HtmlInlineStyleDependency,
98
+ "webpack/lib/dependencies/HtmlInlineStyleDependency"
99
+ );
100
+
101
+ module.exports = HtmlInlineStyleDependency;
@@ -0,0 +1,318 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const makeSerializable = require("../util/makeSerializable");
8
+ const CssUrlDependency = require("./CssUrlDependency");
9
+ const ModuleDependency = require("./ModuleDependency");
10
+
11
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../Dependency")} Dependency */
14
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../Entrypoint")} Entrypoint */
16
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
19
+
20
+ /** @typedef {"script-classic" | "script-module" | "modulepreload" | "stylesheet"} HtmlScriptElementKind */
21
+
22
+ class HtmlScriptSrcDependency extends ModuleDependency {
23
+ /**
24
+ * Creates an instance of HtmlScriptSrcDependency.
25
+ * @param {string} request request
26
+ * @param {Range} range range of the attribute value in the source
27
+ * @param {string} entryName name of the entry this script src is bundled into
28
+ * @param {string=} category dependency category used for resolving and grouping
29
+ * @param {HtmlScriptElementKind=} elementKind shape of the originating HTML element; used when expanding sibling tags for split/runtime chunks
30
+ * @param {number=} tagStart position of the opening `<` of the originating tag in the source; sibling tags emitted for additional entry chunks are inserted right before this
31
+ * @param {number=} tagOpenEnd position of the character immediately after the opening tag's `>` in the source; combined with `tagStart` this lets the template clone the original opening tag verbatim (preserving attributes like `nonce`, `crossorigin`, `referrerpolicy`, `defer`, `async`) when generating sibling tags
32
+ */
33
+ constructor(
34
+ request,
35
+ range,
36
+ entryName,
37
+ category,
38
+ elementKind,
39
+ tagStart,
40
+ tagOpenEnd
41
+ ) {
42
+ super(request);
43
+ this.range = range;
44
+ this.entryName = entryName;
45
+ /** @type {string} */
46
+ this._category = category || "commonjs";
47
+ /** @type {HtmlScriptElementKind} */
48
+ this.elementKind = elementKind || "script-classic";
49
+ /** @type {number} */
50
+ this.tagStart = tagStart === undefined ? -1 : tagStart;
51
+ /** @type {number} */
52
+ this.tagOpenEnd = tagOpenEnd === undefined ? -1 : tagOpenEnd;
53
+ }
54
+
55
+ get type() {
56
+ return "html script src";
57
+ }
58
+
59
+ get category() {
60
+ return this._category;
61
+ }
62
+
63
+ /**
64
+ * Serializes this instance into the provided serializer context.
65
+ * @param {ObjectSerializerContext} context context
66
+ */
67
+ serialize(context) {
68
+ const { write } = context;
69
+ write(this.entryName);
70
+ write(this._category);
71
+ write(this.elementKind);
72
+ write(this.tagStart);
73
+ write(this.tagOpenEnd);
74
+ super.serialize(context);
75
+ }
76
+
77
+ /**
78
+ * Restores this instance from the provided deserializer context.
79
+ * @param {ObjectDeserializerContext} context context
80
+ */
81
+ deserialize(context) {
82
+ const { read } = context;
83
+ this.entryName = read();
84
+ this._category = read();
85
+ this.elementKind = read();
86
+ this.tagStart = read();
87
+ this.tagOpenEnd = read();
88
+ super.deserialize(context);
89
+ }
90
+ }
91
+
92
+ /**
93
+ * @param {Chunk} chunk a chunk
94
+ * @param {import("../Compilation")} compilation compilation
95
+ * @param {"javascript" | "css"} contentHashType which content hash to plug into the filename template
96
+ * @returns {string} chunk filename path (no public-path prefix)
97
+ */
98
+ const getChunkFilename = (chunk, compilation, contentHashType) => {
99
+ const outputOptions = compilation.outputOptions;
100
+ let filenameTemplate;
101
+ if (contentHashType === "css") {
102
+ // For a CSS-typed chunk, use the same template the CSS pipeline
103
+ // will use when it actually emits the `.css` file, so the `<link
104
+ // rel="stylesheet" href>` URL we write into the HTML matches the
105
+ // asset on disk.
106
+ filenameTemplate =
107
+ require("../css/CssModulesPlugin").getChunkFilenameTemplate(
108
+ chunk,
109
+ outputOptions
110
+ );
111
+ } else {
112
+ filenameTemplate =
113
+ chunk.filenameTemplate ||
114
+ (chunk.canBeInitial()
115
+ ? outputOptions.filename
116
+ : outputOptions.chunkFilename);
117
+ }
118
+
119
+ return compilation.getPath(filenameTemplate, {
120
+ chunk,
121
+ contentHashType
122
+ });
123
+ };
124
+
125
+ /**
126
+ * @param {Entrypoint} entrypoint entrypoint
127
+ * @returns {Chunk[]} every chunk this entrypoint needs in load order: the
128
+ * runtime chunk first (when `optimization.runtimeChunk` splits it off), then
129
+ * any intermediate chunks (e.g. from `optimization.splitChunks`), and finally
130
+ * the entry chunk itself. The entry chunk is always returned last so callers
131
+ * can identify it as the tag whose `src`/`href` attribute is being rewritten
132
+ * in place. Chunks that are already loaded by an ancestor (`dependOn`) entry's
133
+ * own script tag — i.e. the parent entrypoint's entry chunk *and* its runtime
134
+ * chunk — are skipped, otherwise they would be loaded twice when the same
135
+ * HTML contains tags for both the leader and the dependant entries.
136
+ */
137
+ const getEntrypointChunksInLoadOrder = (entrypoint) => {
138
+ const entryChunk = /** @type {Chunk} */ (entrypoint.getEntrypointChunk());
139
+ const runtimeChunk = entrypoint.getRuntimeChunk();
140
+
141
+ /** @type {Set<Chunk>} */
142
+ const chunksLoadedByAncestorTags = new Set();
143
+ /** @type {Set<import("../ChunkGroup")>} */
144
+ const visitedGroups = new Set();
145
+ const walk = (/** @type {import("../ChunkGroup")} */ group) => {
146
+ if (visitedGroups.has(group)) return;
147
+ visitedGroups.add(group);
148
+ for (const parent of group.parentsIterable) {
149
+ if (
150
+ typeof (/** @type {Entrypoint} */ (parent).getEntrypointChunk) ===
151
+ "function"
152
+ ) {
153
+ const parentEntry =
154
+ /** @type {Entrypoint} */
155
+ (parent).getEntrypointChunk();
156
+ if (parentEntry) chunksLoadedByAncestorTags.add(parentEntry);
157
+ const parentRuntime =
158
+ /** @type {Entrypoint} */
159
+ (parent).getRuntimeChunk();
160
+ if (parentRuntime) chunksLoadedByAncestorTags.add(parentRuntime);
161
+ }
162
+ walk(parent);
163
+ }
164
+ };
165
+ walk(entrypoint);
166
+
167
+ /** @type {Chunk[]} */
168
+ const ordered = [];
169
+ /** @type {Set<Chunk>} */
170
+ const seen = new Set();
171
+ const push = (/** @type {Chunk | null | undefined} */ chunk) => {
172
+ if (!chunk || seen.has(chunk) || chunk === entryChunk) return;
173
+ if (chunksLoadedByAncestorTags.has(chunk)) return;
174
+ seen.add(chunk);
175
+ ordered.push(chunk);
176
+ };
177
+ if (runtimeChunk !== entryChunk) {
178
+ push(runtimeChunk);
179
+ }
180
+ for (const chunk of entrypoint.chunks) {
181
+ push(chunk);
182
+ }
183
+ ordered.push(entryChunk);
184
+ return ordered;
185
+ };
186
+
187
+ /**
188
+ * Clone the original `<script>`/`<link>` opening tag with its `src`/`href`
189
+ * value swapped for a different chunk URL. Reusing the source text verbatim
190
+ * preserves attributes such as `nonce`, `crossorigin`, `referrerpolicy`,
191
+ * `defer`, and `async` so the sibling tags load with the same semantics as
192
+ * the entry tag that's already there. `integrity` is dropped because it's
193
+ * content-specific. When the original tag was upgraded to a module script
194
+ * (either by the author or by the `output.module` auto-upgrade in
195
+ * `HtmlParser`), the sibling is forced to `type="module"` regardless of what
196
+ * the source originally said.
197
+ * @param {string} originalTag the opening tag's source text including `>`
198
+ * @param {number} srcStartInTag offset of the src/href value start within `originalTag`
199
+ * @param {number} srcEndInTag offset of the src/href value end within `originalTag`
200
+ * @param {string} newUrl URL to put into the cloned tag's src/href slot
201
+ * @param {HtmlScriptElementKind} elementKind shape of the originating tag
202
+ * @returns {string} the sibling tag's HTML (including a closing `</script>` for script tags)
203
+ */
204
+ const cloneTagWithUrl = (
205
+ originalTag,
206
+ srcStartInTag,
207
+ srcEndInTag,
208
+ newUrl,
209
+ elementKind
210
+ ) => {
211
+ let body =
212
+ originalTag.slice(0, srcStartInTag) +
213
+ newUrl +
214
+ originalTag.slice(srcEndInTag);
215
+
216
+ // Strip dangerous-to-copy attributes from the cloned tag — currently
217
+ // just `integrity`. The match handles all three quoting styles
218
+ // (`"…"`, `'…'`, unquoted) and the bare-attribute form.
219
+ body = body.replace(
220
+ /\s+integrity(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+))?(?=[\s/>])/gi,
221
+ ""
222
+ );
223
+
224
+ if (elementKind === "script-module") {
225
+ if (/\stype\s*=/i.test(body)) {
226
+ body = body.replace(
227
+ /(\stype\s*=\s*)(?:"[^"]*"|'[^']*'|[^\s>]+)/i,
228
+ '$1"module"'
229
+ );
230
+ } else {
231
+ body = body.replace(/^<script\b/i, '<script type="module"');
232
+ }
233
+ }
234
+
235
+ // `<link>` is a void element — no closing tag. `<script>` needs `</script>`.
236
+ return elementKind === "modulepreload" || elementKind === "stylesheet"
237
+ ? body
238
+ : `${body}</script>`;
239
+ };
240
+
241
+ HtmlScriptSrcDependency.Template = class HtmlScriptSrcDependencyTemplate extends (
242
+ ModuleDependency.Template
243
+ ) {
244
+ /**
245
+ * Applies the plugin by registering its hooks on the compiler.
246
+ * @param {Dependency} dependency the dependency for which the template should be applied
247
+ * @param {ReplaceSource} source the current replace source which can be modified
248
+ * @param {DependencyTemplateContext} templateContext the context object
249
+ * @returns {void}
250
+ */
251
+ apply(dependency, source, templateContext) {
252
+ const { runtimeTemplate } = templateContext;
253
+ const dep = /** @type {HtmlScriptSrcDependency} */ (dependency);
254
+ const compilation = runtimeTemplate.compilation;
255
+ const entrypoint = /** @type {Entrypoint | undefined} */ (
256
+ compilation.entrypoints.get(dep.entryName)
257
+ );
258
+
259
+ if (!entrypoint) {
260
+ source.replace(dep.range[0], dep.range[1] - 1, "data:,");
261
+ return;
262
+ }
263
+
264
+ const orderedChunks = getEntrypointChunksInLoadOrder(entrypoint);
265
+ const entryChunk = orderedChunks[orderedChunks.length - 1];
266
+ const contentHashType =
267
+ dep.elementKind === "stylesheet" ? "css" : "javascript";
268
+ const entryUrl = `${CssUrlDependency.PUBLIC_PATH_AUTO}${getChunkFilename(
269
+ entryChunk,
270
+ compilation,
271
+ contentHashType
272
+ )}`;
273
+ source.replace(dep.range[0], dep.range[1] - 1, entryUrl);
274
+
275
+ if (
276
+ orderedChunks.length <= 1 ||
277
+ dep.tagStart < 0 ||
278
+ dep.tagOpenEnd <= dep.tagStart
279
+ ) {
280
+ return;
281
+ }
282
+
283
+ // The browser must load every chunk in dependency order, not just the
284
+ // entry chunk. Clone the original tag for each non-entry chunk so the
285
+ // preserved attributes (nonce, crossorigin, …) match the entry tag,
286
+ // and insert the clones before the original tag's `<`.
287
+ const originalContent = /** @type {string} */ (source.original().source());
288
+ const originalTag = originalContent.slice(dep.tagStart, dep.tagOpenEnd);
289
+ const srcStartInTag = dep.range[0] - dep.tagStart;
290
+ const srcEndInTag = dep.range[1] - dep.tagStart;
291
+
292
+ const siblings = [];
293
+ for (let i = 0; i < orderedChunks.length - 1; i++) {
294
+ const url = `${CssUrlDependency.PUBLIC_PATH_AUTO}${getChunkFilename(
295
+ orderedChunks[i],
296
+ compilation,
297
+ contentHashType
298
+ )}`;
299
+ siblings.push(
300
+ cloneTagWithUrl(
301
+ originalTag,
302
+ srcStartInTag,
303
+ srcEndInTag,
304
+ url,
305
+ dep.elementKind
306
+ )
307
+ );
308
+ }
309
+ source.insert(dep.tagStart, siblings.join(""));
310
+ }
311
+ };
312
+
313
+ makeSerializable(
314
+ HtmlScriptSrcDependency,
315
+ "webpack/lib/dependencies/HtmlScriptSrcDependency"
316
+ );
317
+
318
+ module.exports = HtmlScriptSrcDependency;
@@ -0,0 +1,127 @@
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 RawDataUrlModule = require("../asset/RawDataUrlModule");
9
+ const makeSerializable = require("../util/makeSerializable");
10
+ const memoize = require("../util/memoize");
11
+ const ModuleDependency = require("./ModuleDependency");
12
+
13
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
+ /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
15
+ /** @typedef {import("../Dependency")} Dependency */
16
+ /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
17
+ /** @typedef {import("../Module")} Module */
18
+ /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
19
+ /** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
20
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
23
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
24
+
25
+ const getIgnoredRawDataUrlModule = memoize(
26
+ () => new RawDataUrlModule("data:,", "ignored-asset", "(ignored asset)")
27
+ );
28
+
29
+ class HtmlSourceDependency extends ModuleDependency {
30
+ /**
31
+ * Creates an instance of HtmlSourceDependency.
32
+ * @param {string} request request
33
+ * @param {Range} range range of the argument
34
+ */
35
+ constructor(request, range) {
36
+ super(request);
37
+ this.range = range;
38
+ }
39
+
40
+ get type() {
41
+ return "html source()";
42
+ }
43
+
44
+ get category() {
45
+ return "url";
46
+ }
47
+
48
+ /**
49
+ * Creates an ignored module.
50
+ * @param {string} context context directory
51
+ * @returns {Module} ignored module
52
+ */
53
+ createIgnoredModule(context) {
54
+ return getIgnoredRawDataUrlModule();
55
+ }
56
+
57
+ /**
58
+ * Serializes this instance into the provided serializer context.
59
+ * @param {ObjectSerializerContext} context context
60
+ */
61
+ serialize(context) {
62
+ super.serialize(context);
63
+ }
64
+
65
+ /**
66
+ * Restores this instance from the provided deserializer context.
67
+ * @param {ObjectDeserializerContext} context context
68
+ */
69
+ deserialize(context) {
70
+ super.deserialize(context);
71
+ }
72
+ }
73
+
74
+ HtmlSourceDependency.Template = class HtmlSourceDependencyTemplate extends (
75
+ ModuleDependency.Template
76
+ ) {
77
+ /**
78
+ * Applies the plugin by registering its hooks on the compiler.
79
+ * @param {Dependency} dependency the dependency for which the template should be applied
80
+ * @param {ReplaceSource} source the current replace source which can be modified
81
+ * @param {DependencyTemplateContext} templateContext the context object
82
+ * @returns {void}
83
+ */
84
+ apply(
85
+ dependency,
86
+ source,
87
+ { moduleGraph, runtimeTemplate, codeGenerationResults }
88
+ ) {
89
+ const dep = /** @type {HtmlSourceDependency} */ (dependency);
90
+ const module = /** @type {Module} */ (moduleGraph.getModule(dep));
91
+
92
+ /** @type {string | undefined} */
93
+ const newValue = this.assetUrl({
94
+ module,
95
+ codeGenerationResults
96
+ });
97
+
98
+ source.replace(dep.range[0], dep.range[1] - 1, newValue);
99
+ }
100
+
101
+ /**
102
+ * Returns the url of the asset.
103
+ * @param {object} options options object
104
+ * @param {Module} options.module the module
105
+ * @param {RuntimeSpec=} options.runtime runtime
106
+ * @param {CodeGenerationResults} options.codeGenerationResults the code generation results
107
+ * @returns {string} the url of the asset
108
+ */
109
+ assetUrl({ runtime, module, codeGenerationResults }) {
110
+ if (!module) {
111
+ return "data:,";
112
+ }
113
+ const codeGen = codeGenerationResults.get(module, runtime);
114
+ const data = codeGen.data;
115
+ if (!data) return "data:,";
116
+ const url = data.get("url");
117
+ if (!url || !url["css-url"]) return "data:,";
118
+ return url["css-url"];
119
+ }
120
+ };
121
+
122
+ makeSerializable(
123
+ HtmlSourceDependency,
124
+ "webpack/lib/dependencies/HtmlSourceDependency"
125
+ );
126
+
127
+ module.exports = HtmlSourceDependency;
@@ -16,6 +16,7 @@ const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTempl
16
16
 
17
17
  class ImportContextDependency extends ContextDependency {
18
18
  /**
19
+ * Creates an instance of ImportContextDependency.
19
20
  * @param {ContextDependencyOptions} options options
20
21
  * @param {Range} range range
21
22
  * @param {Range} valueRange value range
@@ -36,6 +37,7 @@ class ImportContextDependency extends ContextDependency {
36
37
  }
37
38
 
38
39
  /**
40
+ * Returns an identifier to merge equal requests.
39
41
  * @returns {string | null} an identifier to merge equal requests
40
42
  */
41
43
  getResourceIdentifier() {
@@ -49,6 +51,7 @@ class ImportContextDependency extends ContextDependency {
49
51
  }
50
52
 
51
53
  /**
54
+ * Serializes this instance into the provided serializer context.
52
55
  * @param {ObjectSerializerContext} context context
53
56
  */
54
57
  serialize(context) {
@@ -60,6 +63,7 @@ class ImportContextDependency extends ContextDependency {
60
63
  }
61
64
 
62
65
  /**
66
+ * Restores this instance from the provided deserializer context.
63
67
  * @param {ObjectDeserializerContext} context context
64
68
  */
65
69
  deserialize(context) {
@@ -27,6 +27,7 @@ const ModuleDependency = require("./ModuleDependency");
27
27
 
28
28
  class ImportDependency extends ModuleDependency {
29
29
  /**
30
+ * Creates an instance of ImportDependency.
30
31
  * @param {string} request the request
31
32
  * @param {Range} range expression range
32
33
  * @param {RawReferencedExports | null} referencedExports list of referenced exports
@@ -50,6 +51,7 @@ class ImportDependency extends ModuleDependency {
50
51
  }
51
52
 
52
53
  /**
54
+ * Returns an identifier to merge equal requests.
53
55
  * @returns {string | null} an identifier to merge equal requests
54
56
  */
55
57
  getResourceIdentifier() {
@@ -103,6 +105,7 @@ class ImportDependency extends ModuleDependency {
103
105
  }
104
106
 
105
107
  /**
108
+ * Serializes this instance into the provided serializer context.
106
109
  * @param {ObjectSerializerContext} context context
107
110
  */
108
111
  serialize(context) {
@@ -114,6 +117,7 @@ class ImportDependency extends ModuleDependency {
114
117
  }
115
118
 
116
119
  /**
120
+ * Restores this instance from the provided deserializer context.
117
121
  * @param {ObjectDeserializerContext} context context
118
122
  */
119
123
  deserialize(context) {
@@ -131,6 +135,7 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
131
135
  ModuleDependency.Template
132
136
  ) {
133
137
  /**
138
+ * Applies the plugin by registering its hooks on the compiler.
134
139
  * @param {Dependency} dependency the dependency for which the template should be applied
135
140
  * @param {ReplaceSource} source the current replace source which can be modified
136
141
  * @param {DependencyTemplateContext} templateContext the context object
@@ -20,6 +20,7 @@ const ImportDependency = require("./ImportDependency");
20
20
 
21
21
  class ImportEagerDependency extends ImportDependency {
22
22
  /**
23
+ * Creates an instance of ImportEagerDependency.
23
24
  * @param {string} request the request
24
25
  * @param {Range} range expression range
25
26
  * @param {RawReferencedExports | null} referencedExports list of referenced exports
@@ -48,6 +49,7 @@ ImportEagerDependency.Template = class ImportEagerDependencyTemplate extends (
48
49
  ImportDependency.Template
49
50
  ) {
50
51
  /**
52
+ * Applies the plugin by registering its hooks on the compiler.
51
53
  * @param {Dependency} dependency the dependency for which the template should be applied
52
54
  * @param {ReplaceSource} source the current replace source which can be modified
53
55
  * @param {DependencyTemplateContext} templateContext the context object
@@ -14,6 +14,7 @@ const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateA
14
14
 
15
15
  class ImportMetaContextDependency extends ContextDependency {
16
16
  /**
17
+ * Creates an instance of ImportMetaContextDependency.
17
18
  * @param {ContextDependencyOptions} options options
18
19
  * @param {Range} range range
19
20
  */
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const WebpackError = require("../WebpackError");
8
+ const WebpackError = require("../errors/WebpackError");
9
9
  const {
10
10
  evaluateToIdentifier
11
11
  } = require("../javascript/JavascriptParserHelpers");
@@ -28,6 +28,7 @@ const ImportMetaContextDependency = require("./ImportMetaContextDependency");
28
28
  /** @typedef {Pick<ContextModuleOptions, "mode" | "recursive" | "regExp" | "include" | "exclude" | "chunkName"> & { groupOptions: RawChunkGroupOptions, exports?: RawReferencedExports }} ImportMetaContextOptions */
29
29
 
30
30
  /**
31
+ * Creates a property parse error.
31
32
  * @param {Property} prop property
32
33
  * @param {string} expect except message
33
34
  * @returns {WebpackError} error
@@ -44,6 +45,7 @@ function createPropertyParseError(prop, expect) {
44
45
  }
45
46
 
46
47
  /**
48
+ * Creates an error from the provided msg.
47
49
  * @param {string} msg message
48
50
  * @param {DependencyLocation} loc location
49
51
  * @returns {WebpackError} error
@@ -59,6 +61,7 @@ const PLUGIN_NAME = "ImportMetaContextDependencyParserPlugin";
59
61
 
60
62
  module.exports = class ImportMetaContextDependencyParserPlugin {
61
63
  /**
64
+ * Applies the plugin by registering its hooks on the compiler.
62
65
  * @param {JavascriptParser} parser the parser
63
66
  * @returns {void}
64
67
  */
@@ -21,7 +21,7 @@ const PLUGIN_NAME = "ImportMetaContextPlugin";
21
21
 
22
22
  class ImportMetaContextPlugin {
23
23
  /**
24
- * Apply the plugin
24
+ * Applies the plugin by registering its hooks on the compiler.
25
25
  * @param {Compiler} compiler the compiler instance
26
26
  * @returns {void}
27
27
  */
@@ -43,6 +43,7 @@ class ImportMetaContextPlugin {
43
43
  );
44
44
 
45
45
  /**
46
+ * Handles the hook callback for this code path.
46
47
  * @param {Parser} parser parser parser
47
48
  * @param {JavascriptParserOptions} parserOptions parserOptions
48
49
  * @returns {void}