@depup/webpack 5.109.2-depup.0 → 5.110.3-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 (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -9,19 +9,22 @@ const {
9
9
  CSS_TYPE,
10
10
  JAVASCRIPT_TYPE
11
11
  } = require("../ModuleSourceTypeConstants");
12
- const HtmlGenerator = require("../html/HtmlGenerator");
13
12
  const ResourceHintPlugin = require("../prefetch/ResourceHintPlugin");
14
13
  const ResourceHintRuntimeModule = require("../prefetch/ResourceHintRuntimeModule");
15
14
  const makeSerializable = require("../util/makeSerializable");
15
+ const memoize = require("../util/memoize");
16
16
  const ModuleDependency = require("./ModuleDependency");
17
17
 
18
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
19
- /** @typedef {import("../Chunk")} Chunk */
20
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
21
- /** @typedef {import("../Dependency")} Dependency */
22
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
23
- /** @typedef {import("../Entrypoint")} Entrypoint */
24
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
+ // only the template needs it, and that runs only for a real html module
19
+ const getHtmlGenerator = memoize(() => require("../html/HtmlGenerator"));
20
+
21
+ /** @import { ReplaceSource } from "webpack-sources" */
22
+ /** @import Chunk from "../Chunk" */
23
+ /** @import ChunkGraph from "../ChunkGraph" */
24
+ /** @import Dependency from "../Dependency" */
25
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
26
+ /** @import Entrypoint from "../Entrypoint" */
27
+ /** @import { Range } from "../javascript/JavascriptParser" */
25
28
  /** @typedef {"script" | "script-module" | "modulepreload" | "stylesheet" | "html" | "preload" | "prefetch"} HtmlEntryElementKind */
26
29
 
27
30
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, string, HtmlEntryElementKind, number, number, boolean, string, number, boolean, number, (Range | null), (Range | null), boolean, number, number]>} ObjectDeserializerContext */
@@ -191,7 +194,12 @@ const getEntrypointChunksInLoadOrder = (entrypoint) => {
191
194
  const chunksLoadedByAncestorTags = new Set();
192
195
  /** @type {Set<import("../ChunkGroup")>} */
193
196
  const visitedGroups = new Set();
194
- const walk = (/** @type {import("../ChunkGroup")} */ group) => {
197
+ /**
198
+ * Collects the chunks an ancestor entry's own tags already load.
199
+ * @param {import("../ChunkGroup")} group chunk group to walk up from
200
+ * @returns {void}
201
+ */
202
+ const walk = (group) => {
195
203
  if (visitedGroups.has(group)) return;
196
204
  visitedGroups.add(group);
197
205
  for (const parent of group.parentsIterable) {
@@ -217,7 +225,12 @@ const getEntrypointChunksInLoadOrder = (entrypoint) => {
217
225
  const ordered = [];
218
226
  /** @type {Set<Chunk>} */
219
227
  const seen = new Set();
220
- const push = (/** @type {Chunk | null | undefined} */ chunk) => {
228
+ /**
229
+ * Appends a chunk once, skipping the ones an ancestor entry already loads.
230
+ * @param {Chunk | null | undefined} chunk chunk to append
231
+ * @returns {void}
232
+ */
233
+ const push = (chunk) => {
221
234
  if (!chunk || seen.has(chunk) || chunk === entryChunk) return;
222
235
  if (chunksLoadedByAncestorTags.has(chunk)) return;
223
236
  seen.add(chunk);
@@ -638,7 +651,7 @@ const resolveResourceHint = (desc, ctx) => {
638
651
  if (!has) continue;
639
652
  tags.push(
640
653
  buildLinkTag(rel, {
641
- href: HtmlGenerator.makeChunkUrlSentinel(chunk, kind),
654
+ href: getHtmlGenerator().makeChunkUrlSentinel(chunk, kind),
642
655
  as,
643
656
  type: desc.type,
644
657
  crossorigin,
@@ -649,7 +662,7 @@ const resolveResourceHint = (desc, ctx) => {
649
662
  (rel === "preload" || rel === "modulepreload") &&
650
663
  desc.integrity !== false &&
651
664
  ctx.integrityOn
652
- ? ` integrity="${HtmlGenerator.makeChunkIntegritySentinel(chunk, kind)}"`
665
+ ? ` integrity="${getHtmlGenerator().makeChunkIntegritySentinel(chunk, kind)}"`
653
666
  : undefined,
654
667
  media: desc.media,
655
668
  fetchpriority: desc.fetchPriority
@@ -682,7 +695,7 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
682
695
  source.replace(
683
696
  dep.range[0],
684
697
  dep.range[1] - 1,
685
- HtmlGenerator.makeHtmlPageUrlSentinel(dep.entryName)
698
+ getHtmlGenerator().makeHtmlPageUrlSentinel(dep.entryName)
686
699
  );
687
700
  return;
688
701
  }
@@ -712,15 +725,12 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
712
725
  : "";
713
726
 
714
727
  // Per-chunk SRI: emit an `integrity` sentinel resolved late (after the
715
- // chunks' final bytes exist) by `resolveChunkIntegritySentinels`. On when
716
- // `output.html.integrity` is `true`, a non-empty array, or a function.
728
+ // chunks' final bytes exist) by `resolveChunkIntegritySentinels`. Tags are
729
+ // generated per HTML module, but one module can back pages with different
730
+ // `integrity` options, so sentinels are emitted whenever any page wants SRI
731
+ // and each page then resolves or strips them on emit.
717
732
  const htmlOption = compilation.outputOptions.html;
718
- const integrity =
719
- typeof htmlOption === "object" ? htmlOption.integrity : undefined;
720
- const integrityOn =
721
- integrity === true ||
722
- typeof integrity === "function" ||
723
- (Array.isArray(integrity) && integrity.length > 0);
733
+ const integrityOn = getHtmlGenerator().hasIntegritySentinels(compilation);
724
734
  const inject =
725
735
  typeof htmlOption === "object" ? htmlOption.inject : undefined;
726
736
 
@@ -746,7 +756,7 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
746
756
  }
747
757
  source.insert(
748
758
  dep.tagNameEnd,
749
- ` integrity="${HtmlGenerator.makeChunkIntegritySentinel(
759
+ ` integrity="${getHtmlGenerator().makeChunkIntegritySentinel(
750
760
  chunk,
751
761
  contentHashType
752
762
  )}"`
@@ -763,7 +773,7 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
763
773
  source.replace(
764
774
  dep.range[0],
765
775
  dep.range[1] - 1,
766
- HtmlGenerator.makeChunkUrlSentinel(entryChunk, contentHashType)
776
+ getHtmlGenerator().makeChunkUrlSentinel(entryChunk, contentHashType)
767
777
  );
768
778
  // `preload` is integrity-eligible per the SRI spec, so mirror
769
779
  // `crossorigin`/`integrity` onto it (SRI requires CORS). `prefetch` is a
@@ -822,7 +832,7 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
822
832
  isChunkInlined(entryChunk, entryContentHashType);
823
833
 
824
834
  if (entryInlined) {
825
- const inlineSentinel = HtmlGenerator.makeChunkInlineSentinel(
835
+ const inlineSentinel = getHtmlGenerator().makeChunkInlineSentinel(
826
836
  entryChunk,
827
837
  entryContentHashType
828
838
  );
@@ -843,7 +853,10 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
843
853
  source.replace(
844
854
  dep.range[0],
845
855
  dep.range[1] - 1,
846
- HtmlGenerator.makeChunkUrlSentinel(entryChunk, entryContentHashType)
856
+ getHtmlGenerator().makeChunkUrlSentinel(
857
+ entryChunk,
858
+ entryContentHashType
859
+ )
847
860
  );
848
861
  }
849
862
 
@@ -872,14 +885,17 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
872
885
  */
873
886
  const buildSibling = (chunk, kind) => {
874
887
  if (isChunkInlined(chunk, kind)) {
875
- const sentinel = HtmlGenerator.makeChunkInlineSentinel(chunk, kind);
888
+ const sentinel = getHtmlGenerator().makeChunkInlineSentinel(
889
+ chunk,
890
+ kind
891
+ );
876
892
  return kind === "css"
877
893
  ? `<style>${sentinel}</style>`
878
894
  : `<script${scriptTypeAttr}>${sentinel}</script>`;
879
895
  }
880
- const url = HtmlGenerator.makeChunkUrlSentinel(chunk, kind);
896
+ const url = getHtmlGenerator().makeChunkUrlSentinel(chunk, kind);
881
897
  const integrityAttr = integrityOn
882
- ? ` integrity="${HtmlGenerator.makeChunkIntegritySentinel(chunk, kind)}"`
898
+ ? ` integrity="${getHtmlGenerator().makeChunkIntegritySentinel(chunk, kind)}"`
883
899
  : "";
884
900
  if (kind === "css") {
885
901
  // A CSS chunk is always loaded via `<link rel="stylesheet">`.
@@ -1118,13 +1134,13 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
1118
1134
  ) {
1119
1135
  continue;
1120
1136
  }
1121
- const href = HtmlGenerator.makeChunkUrlSentinel(
1137
+ const href = getHtmlGenerator().makeChunkUrlSentinel(
1122
1138
  chunk,
1123
1139
  "javascript"
1124
1140
  );
1125
1141
  const integrityAttr =
1126
1142
  integrityOn && !prefetchMode
1127
- ? ` integrity="${HtmlGenerator.makeChunkIntegritySentinel(
1143
+ ? ` integrity="${getHtmlGenerator().makeChunkIntegritySentinel(
1128
1144
  chunk,
1129
1145
  "javascript"
1130
1146
  )}"`
@@ -1233,7 +1249,9 @@ HtmlEntryDependency.Template = class HtmlEntryDependencyTemplate extends (
1233
1249
  const typeAttr = md.typeAttribute;
1234
1250
  const mediaAttr = md.mediaAttribute;
1235
1251
  const fetchPriority = md.fetchPriority;
1236
- const href = HtmlGenerator.makeAssetUrlSentinel(module.identifier());
1252
+ const href = getHtmlGenerator().makeAssetUrlSentinel(
1253
+ module.identifier()
1254
+ );
1237
1255
  const attrs =
1238
1256
  `${asAttr ? ` as="${escapeAttr(asAttr)}"` : ""}` +
1239
1257
  `${typeAttr ? ` type="${escapeAttr(typeAttr)}"` : ""}` +
@@ -8,14 +8,13 @@ const { HTML_TYPE } = require("../ModuleSourceTypeConstants");
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
10
 
11
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
- /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
13
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
14
- /** @typedef {import("../Dependency")} Dependency */
15
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
- /** @typedef {import("../Module")} Module */
17
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
- /** @typedef {import("../util/Hash")} Hash */
11
+ /** @import { ReplaceSource } from "webpack-sources" */
12
+ /** @import CodeGenerationResults from "../CodeGenerationResults" */
13
+ /** @import Dependency, { UpdateHashContext } from "../Dependency" */
14
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
15
+ /** @import Module from "../Module" */
16
+ /** @import { Range } from "../javascript/JavascriptParser" */
17
+ /** @import Hash from "../util/Hash" */
19
18
 
20
19
  // One pass over the source: each char is replaced once and replacements aren't
21
20
  // re-scanned, so this matches the `&`-first sequential escape chain exactly.
@@ -4,16 +4,19 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- const HtmlGenerator = require("../html/HtmlGenerator");
8
7
  const makeSerializable = require("../util/makeSerializable");
8
+ const memoize = require("../util/memoize");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
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 */
11
+ // only the template needs it, and that runs only for a real html module
12
+ const getHtmlGenerator = memoize(() => require("../html/HtmlGenerator"));
13
+
14
+ /** @import { ReplaceSource } from "webpack-sources" */
15
+ /** @import Chunk from "../Chunk" */
16
+ /** @import Dependency from "../Dependency" */
17
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
18
+ /** @import Entrypoint from "../Entrypoint" */
19
+ /** @import { Range } from "../javascript/JavascriptParser" */
17
20
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[number, Range, string, string]>} ObjectDeserializerContext */
18
21
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[number, Range, string, string]>} ObjectSerializerContext */
19
22
 
@@ -106,7 +109,7 @@ HtmlInlineScriptDependency.Template = class HtmlInlineScriptDependencyTemplate e
106
109
  if (entrypoint) {
107
110
  const chunk = /** @type {Chunk} */ (entrypoint.getEntrypointChunk());
108
111
  // Defer chunk-URL substitution to renderManifest — chunk hashes aren't ready yet.
109
- url = HtmlGenerator.makeChunkUrlSentinel(chunk, "javascript");
112
+ url = getHtmlGenerator().makeChunkUrlSentinel(chunk, "javascript");
110
113
  }
111
114
 
112
115
  // Insert ` src="…"` right after `<script` so the inline body is
@@ -8,18 +8,15 @@ const { CSS_TEXT_TYPE } = require("../ModuleSourceTypeConstants");
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
10
 
11
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
- /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
13
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
14
- /** @typedef {import("../Dependency")} Dependency */
15
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
- /** @typedef {import("../Module")} Module */
17
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
18
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
11
+ /** @import { ReplaceSource } from "webpack-sources" */
12
+ /** @import CodeGenerationResults from "../CodeGenerationResults" */
13
+ /** @import Dependency, { UpdateHashContext } from "../Dependency" */
14
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
15
+ /** @import Module from "../Module" */
16
+ /** @import { Range } from "../javascript/JavascriptParser" */
19
17
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<boolean[]>} ObjectDeserializerContext */
20
18
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<boolean[]>} ObjectSerializerContext */
21
- /** @typedef {import("../util/Hash")} Hash */
22
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
+ /** @import Hash from "../util/Hash" */
23
20
 
24
21
  const TRAILING_WHITESPACE_REGEXP = /\s+$/;
25
22
  // One pass over the source: each char is replaced once and replacements aren't
@@ -11,20 +11,24 @@ const makeSerializable = require("../util/makeSerializable");
11
11
  const memoize = require("../util/memoize");
12
12
  const ModuleDependency = require("./ModuleDependency");
13
13
 
14
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
15
- /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
16
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
17
- /** @typedef {import("../Dependency")} Dependency */
18
- /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
19
- /** @typedef {import("../Module")} Module */
20
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
21
- /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
22
- /** @typedef {import("../Module").CodeGenerationResultData} CodeGenerationResultData */
23
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
24
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
25
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
26
- /** @typedef {import("../util/Hash")} Hash */
27
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
14
+ /** @import { ReplaceSource } from "webpack-sources" */
15
+ /** @import CodeGenerationResults from "../CodeGenerationResults" */
16
+ /** @import Dependency, { UpdateHashContext } from "../Dependency" */
17
+ /**
18
+ * @import {
19
+ * CssDependencyTemplateContext as DependencyTemplateContext
20
+ * } from "../DependencyTemplate"
21
+ */
22
+ /** @import Module, { BuildInfo } from "../Module" */
23
+ /** @import { Range } from "../javascript/JavascriptParser" */
24
+ /**
25
+ * @import {
26
+ * ObjectDeserializerContext,
27
+ * ObjectSerializerContext
28
+ * } from "../serialization/ObjectMiddleware"
29
+ */
30
+ /** @import Hash from "../util/Hash" */
31
+ /** @import { RuntimeSpec } from "../util/runtime" */
28
32
 
29
33
  const getIgnoredRawDataUrlModule = memoize(
30
34
  () => new RawDataUrlModule("data:,", "ignored-asset", "(ignored asset)")
@@ -61,6 +65,10 @@ class HtmlSourceDependency extends ModuleDependency {
61
65
  return "url";
62
66
  }
63
67
 
68
+ get referencedSourceType() {
69
+ return ASSET_URL_TYPE;
70
+ }
71
+
64
72
  /**
65
73
  * Creates an ignored module.
66
74
  * @param {string} context context directory
@@ -8,11 +8,13 @@
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTemplateAsRequireCall");
11
+ const importOptionsCheck = require("./importOptionsCheck");
11
12
 
12
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range]>} ObjectDeserializerContext */
14
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range]>} ObjectSerializerContext */
15
- /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
13
+ /** @import { Range } from "../javascript/JavascriptParser" */
14
+ /** @import { ObjectDeserializerContext, ObjectSerializerContext } from "../serialization/ObjectMiddleware" */
15
+ /** @import { ContextDependencyOptions } from "./ContextDependency" */
16
+ /** @import { ReplaceSource } from "webpack-sources" */
17
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
16
18
 
17
19
  class ImportContextDependency extends ContextDependency {
18
20
  /**
@@ -26,6 +28,8 @@ class ImportContextDependency extends ContextDependency {
26
28
 
27
29
  this.range = range;
28
30
  this.valueRange = valueRange;
31
+ /** @type {Range | undefined} */
32
+ this.optionsRange = undefined;
29
33
  }
30
34
 
31
35
  get type() {
@@ -56,6 +60,7 @@ class ImportContextDependency extends ContextDependency {
56
60
  */
57
61
  serialize(context) {
58
62
  context.write(this.valueRange);
63
+ context.write(this.optionsRange);
59
64
 
60
65
  super.serialize(context);
61
66
  }
@@ -66,6 +71,7 @@ class ImportContextDependency extends ContextDependency {
66
71
  */
67
72
  deserialize(context) {
68
73
  this.valueRange = context.read();
74
+ this.optionsRange = context.read();
69
75
 
70
76
  super.deserialize(context.rest);
71
77
  }
@@ -76,6 +82,40 @@ makeSerializable(
76
82
  "webpack/lib/dependencies/ImportContextDependency"
77
83
  );
78
84
 
79
- ImportContextDependency.Template = ContextDependencyTemplateAsRequireCall;
85
+ ImportContextDependency.Template = class ImportContextDependencyTemplate extends (
86
+ ContextDependencyTemplateAsRequireCall
87
+ ) {
88
+ /**
89
+ * Rewrites the call around its request, dropping anything the original one
90
+ * carried after it. Overridden where a later argument must be kept.
91
+ * @param {ContextDependency} dep the dependency
92
+ * @param {ReplaceSource} source the current replace source which can be modified
93
+ * @param {string} moduleExports the expression the request is passed to
94
+ * @param {DependencyTemplateContext} templateContext the context object
95
+ * @returns {void}
96
+ */
97
+ replaceCall(dep, source, moduleExports, templateContext) {
98
+ const optionsRange = /** @type {ImportContextDependency} */ (dep)
99
+ .optionsRange;
100
+ if (optionsRange === undefined) {
101
+ super.replaceCall(dep, source, moduleExports, templateContext);
102
+ return;
103
+ }
104
+ // Request then options, in that order; their own source is kept so
105
+ // nested dependencies in them still get their replacements.
106
+ const range = /** @type {Range} */ (dep.range);
107
+ const valueRange = /** @type {Range} */ (dep.valueRange);
108
+ const check = importOptionsCheck(
109
+ templateContext.runtimeTemplate,
110
+ ["r", "o"],
111
+ `${moduleExports}(r)`
112
+ );
113
+ source.replace(range[0], valueRange[0] - 1, `(${check})(`);
114
+ // The options range excludes any parentheses the source had, so a comma
115
+ // expression would otherwise split into arguments of its own.
116
+ source.replace(valueRange[1], optionsRange[0] - 1, ", (");
117
+ source.replace(optionsRange[1], range[1] - 1, "))");
118
+ }
119
+ };
80
120
 
81
121
  module.exports = ImportContextDependency;
@@ -6,30 +6,34 @@
6
6
  "use strict";
7
7
 
8
8
  const Dependency = require("../Dependency");
9
- const Template = require("../Template");
10
9
  const makeSerializable = require("../util/makeSerializable");
11
- const memoize = require("../util/memoize");
10
+ const HarmonyImportGuard = require("./HarmonyImportGuard");
12
11
  const { ImportPhaseUtils } = require("./ImportPhase");
13
12
  const ModuleDependency = require("./ModuleDependency");
14
-
15
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
16
- /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
17
- /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
18
- /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
19
- /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
20
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
21
- /** @typedef {import("../Module")} Module */
22
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
23
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
24
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
25
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
26
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
27
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
28
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
29
- /** @typedef {import("./HarmonyImportGuard").DependencyGuard} DependencyGuard */
30
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
31
-
32
- const getHarmonyImportGuard = memoize(() => require("./HarmonyImportGuard"));
13
+ const importOptionsCheck = require("./importOptionsCheck");
14
+
15
+ /** @import { ReplaceSource } from "webpack-sources" */
16
+ /** @import AsyncDependenciesBlock from "../AsyncDependenciesBlock" */
17
+ /**
18
+ * @import {
19
+ * GetConditionFn,
20
+ * RawReferencedExports,
21
+ * ReferencedExports
22
+ * } from "../Dependency"
23
+ */
24
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
25
+ /** @import Module, { BuildMeta } from "../Module" */
26
+ /** @import ModuleGraph from "../ModuleGraph" */
27
+ /** @import { ImportAttributes, Range } from "../javascript/JavascriptParser" */
28
+ /**
29
+ * @import {
30
+ * ObjectDeserializerContext,
31
+ * ObjectSerializerContext
32
+ * } from "../serialization/ObjectMiddleware"
33
+ */
34
+ /** @import { RuntimeSpec } from "../util/runtime" */
35
+ /** @import { DependencyGuard } from "./HarmonyImportGuard" */
36
+ /** @import { ImportPhaseType } from "./ImportPhase" */
33
37
 
34
38
  class ImportDependency extends ModuleDependency {
35
39
  /**
@@ -75,7 +79,7 @@ class ImportDependency extends ModuleDependency {
75
79
  const guards = this.branchGuards;
76
80
  if (guards === undefined) return null;
77
81
  return (connection, runtime) =>
78
- !getHarmonyImportGuard().isDeadByGuards(guards, moduleGraph, runtime);
82
+ !HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime);
79
83
  }
80
84
 
81
85
  /**
@@ -222,35 +226,14 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
222
226
  }
223
227
 
224
228
  // A non-static second argument must still be evaluated (for its side
225
- // effects and evaluation order) and validated per spec. Keep it in place
226
- // and wrap it in an inline validator that mirrors the runtime checks of
227
- // the spec's `import(specifier, options)` evaluation.
229
+ // effects and evaluation order) and checked per spec, so keep it in place
230
+ // and wrap it.
228
231
  if (dep.optionsRange) {
229
- const validator = runtimeTemplate.basicFunction("o", [
230
- "try {",
231
- Template.indent([
232
- "if (o !== undefined) {",
233
- Template.indent([
234
- 'if ((typeof o !== "object" && typeof o !== "function") || o === null) throw new TypeError("The second argument to import() must be an object");',
235
- 'var a = o["with"];',
236
- "if (a !== undefined) {",
237
- Template.indent([
238
- 'if ((typeof a !== "object" && typeof a !== "function") || a === null) throw new TypeError("The \'with\' option must be an object");',
239
- "for (var k = Object.keys(a), i = 0; i < k.length; i++) {",
240
- Template.indent([
241
- 'if (typeof a[k[i]] !== "string") throw new TypeError("Import attribute values must be strings");'
242
- ]),
243
- "}"
244
- ]),
245
- "}"
246
- ]),
247
- "}"
248
- ]),
249
- "} catch (e) { return Promise.reject(e); }",
250
- `return ${content};`
251
- ]);
252
- source.replace(dep.range[0], dep.optionsRange[0] - 1, `(${validator})(`);
253
- source.replace(dep.optionsRange[1], dep.range[1] - 1, ")");
232
+ const check = importOptionsCheck(runtimeTemplate, ["o"], content);
233
+ // The options range excludes any parentheses the source had, so a
234
+ // comma expression would otherwise split into arguments of its own.
235
+ source.replace(dep.range[0], dep.optionsRange[0] - 1, `(${check})((`);
236
+ source.replace(dep.optionsRange[1], dep.range[1] - 1, "))");
254
237
  return;
255
238
  }
256
239
 
@@ -8,15 +8,12 @@
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const ImportDependency = require("./ImportDependency");
10
10
 
11
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
- /** @typedef {import("../Dependency")} Dependency */
13
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
- /** @typedef {import("../Module")} Module */
15
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
16
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
17
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
- /** @typedef {ImportDependency.RawReferencedExports} RawReferencedExports */
19
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
11
+ /** @import { ReplaceSource } from "webpack-sources" */
12
+ /** @import Dependency, { RawReferencedExports } from "../Dependency" */
13
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
14
+ /** @import Module, { BuildMeta } from "../Module" */
15
+ /** @import { ImportAttributes, Range } from "../javascript/JavascriptParser" */
16
+ /** @import { ImportPhaseType } from "./ImportPhase" */
20
17
 
21
18
  class ImportEagerDependency extends ImportDependency {
22
19
  /**
@@ -9,8 +9,8 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
11
11
 
12
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
- /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
12
+ /** @import { Range } from "../javascript/JavascriptParser" */
13
+ /** @import { ContextDependencyOptions } from "./ContextDependency" */
14
14
 
15
15
  class ImportMetaContextDependency extends ContextDependency {
16
16
  /**
@@ -11,19 +11,20 @@ const {
11
11
  } = require("../javascript/JavascriptParserHelpers");
12
12
  const ImportMetaContextDependency = require("./ImportMetaContextDependency");
13
13
 
14
- /** @typedef {import("estree").Expression} Expression */
15
- /** @typedef {import("estree").ObjectExpression} ObjectExpression */
16
- /** @typedef {import("estree").Property} Property */
17
- /** @typedef {import("estree").Identifier} Identifier */
18
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
19
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
20
- /** @typedef {import("../ContextModule").ContextModuleOptions} ContextModuleOptions */
21
- /** @typedef {import("../ContextModule").ContextMode} ContextMode */
22
- /** @typedef {import("../Chunk").ChunkName} ChunkName */
23
- /** @typedef {import("../ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
24
- /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
25
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
26
- /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
14
+ /**
15
+ * @import {
16
+ * Expression,
17
+ * ObjectExpression,
18
+ * Property,
19
+ * Identifier
20
+ * } from "estree"
21
+ */
22
+ /** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
23
+ /** @import { ContextModuleOptions, ContextMode } from "../ContextModule" */
24
+ /** @import { ChunkName } from "../Chunk" */
25
+ /** @import { RawChunkGroupOptions } from "../ChunkGroup" */
26
+ /** @import { RawReferencedExports, DependencyLocation } from "../Dependency" */
27
+ /** @import BasicEvaluatedExpression from "../javascript/BasicEvaluatedExpression" */
27
28
 
28
29
  /** @typedef {Pick<ContextModuleOptions, "mode" | "recursive" | "regExp" | "include" | "exclude" | "chunkName"> & { groupOptions: RawChunkGroupOptions, exports?: RawReferencedExports }} ImportMetaContextOptions */
29
30
 
@@ -16,9 +16,13 @@ const ImportMetaGlobDependency = require("./ImportMetaGlobDependency");
16
16
  const ImportMetaGlobDependencyParserPlugin = require("./ImportMetaGlobDependencyParserPlugin");
17
17
  const { isImportMetaFieldEnabled } = require("./ImportMetaPlugin");
18
18
 
19
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
20
- /** @typedef {import("../Compiler")} Compiler */
21
- /** @typedef {import("../javascript/JavascriptParser")} Parser */
19
+ /**
20
+ * @import {
21
+ * JavascriptParserOptions
22
+ * } from "../../declarations/WebpackOptions"
23
+ */
24
+ /** @import Compiler from "../Compiler" */
25
+ /** @import Parser from "../javascript/JavascriptParser" */
22
26
 
23
27
  const PLUGIN_NAME = "ImportMetaContextPlugin";
24
28
 
@@ -9,8 +9,8 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ContextDependency = require("./ContextDependency");
10
10
  const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
11
11
 
12
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
- /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
12
+ /** @import { Range } from "../javascript/JavascriptParser" */
13
+ /** @import { ContextDependencyOptions } from "./ContextDependency" */
14
14
 
15
15
  /**
16
16
  * @typedef {ContextDependencyOptions & {