@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
@@ -11,15 +11,15 @@ const ModuleGraphConnection = require("./ModuleGraphConnection");
11
11
  const { STAGE_DEFAULT } = require("./OptimizationStages");
12
12
  const ArrayQueue = require("./util/ArrayQueue");
13
13
  const TupleQueue = require("./util/TupleQueue");
14
+ const TupleSet = require("./util/TupleSet");
14
15
  const { getEntryRuntime, mergeRuntimeOwned } = require("./util/runtime");
15
16
 
16
- /** @typedef {import("./Compiler")} Compiler */
17
- /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
18
- /** @typedef {import("./Dependency").ReferencedExport} ReferencedExport */
19
- /** @typedef {import("./Dependency").ReferencedExports} ReferencedExports */
20
- /** @typedef {import("./ExportsInfo")} ExportsInfo */
21
- /** @typedef {import("./Module")} Module */
22
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
17
+ /** @import Compiler from "./Compiler" */
18
+ /** @import DependenciesBlock from "./DependenciesBlock" */
19
+ /** @import { ReferencedExport, ReferencedExports } from "./Dependency" */
20
+ /** @import ExportsInfo from "./ExportsInfo" */
21
+ /** @import Module from "./Module" */
22
+ /** @import { RuntimeSpec } from "./util/runtime" */
23
23
 
24
24
  const {
25
25
  NO_EXPORTS_REFERENCED,
@@ -80,20 +80,17 @@ class FlagDependencyUsagePlugin {
80
80
  /** @type {TupleQueue<Module, RuntimeSpec>} */
81
81
  const queue = new TupleQueue();
82
82
 
83
+ /** @type {TupleSet<Module, RuntimeSpec> | undefined} */
84
+ let walkedSideEffectFreeModules;
85
+
83
86
  /**
84
87
  * Process referenced module.
85
88
  * @param {Module} module module to process
86
89
  * @param {ReferencedExports} usedExports list of used exports
87
90
  * @param {RuntimeSpec} runtime part of which runtime
88
- * @param {boolean} forceSideEffects always apply side effects
89
91
  * @returns {void}
90
92
  */
91
- const processReferencedModule = (
92
- module,
93
- usedExports,
94
- runtime,
95
- forceSideEffects
96
- ) => {
93
+ const processReferencedModule = (module, usedExports, runtime) => {
97
94
  const exportsInfo = moduleGraph.getExportsInfo(module);
98
95
  if (usedExports === EXPORTS_OBJECT_REFERENCED_MANGLEABLE) {
99
96
  // The whole namespace object escapes via a reference that codegen
@@ -211,20 +208,22 @@ class FlagDependencyUsagePlugin {
211
208
  }
212
209
  }
213
210
  }
214
- } else {
215
- // for a module without side effects we stop tracking usage here when no export is used
216
- // This module won't be evaluated in this case
217
- // TODO webpack 6 remove this check
218
- if (
219
- !forceSideEffects &&
220
- module.factoryMeta !== undefined &&
221
- module.factoryMeta.sideEffectFree
222
- ) {
223
- return;
211
+ } else if (
212
+ module.factoryMeta !== undefined &&
213
+ module.factoryMeta.sideEffectFree
214
+ ) {
215
+ // Nothing is used and the module has no side effects, so it is
216
+ // not used for them either. An active connection still evaluates
217
+ // it, so keep walking it to count the references it makes itself.
218
+ if (walkedSideEffectFreeModules === undefined) {
219
+ walkedSideEffectFreeModules = new TupleSet();
224
220
  }
225
- if (exportsInfo.setUsedForSideEffectsOnly(runtime)) {
221
+ if (!walkedSideEffectFreeModules.has(module, runtime)) {
222
+ walkedSideEffectFreeModules.add(module, runtime);
226
223
  queue.enqueue(module, runtime);
227
224
  }
225
+ } else if (exportsInfo.setUsedForSideEffectsOnly(runtime)) {
226
+ queue.enqueue(module, runtime);
228
227
  }
229
228
  };
230
229
 
@@ -232,10 +231,9 @@ class FlagDependencyUsagePlugin {
232
231
  * Processes the provided module.
233
232
  * @param {DependenciesBlock} module the module
234
233
  * @param {RuntimeSpec} runtime part of which runtime
235
- * @param {boolean} forceSideEffects always apply side effects
236
234
  * @returns {void}
237
235
  */
238
- const processModule = (module, runtime, forceSideEffects) => {
236
+ const processModule = (module, runtime) => {
239
237
  /** @typedef {Map<string, string[] | ReferencedExport>} ExportMaps */
240
238
  /** @type {Map<Module, ReferencedExports | ExportMaps>} */
241
239
  const map = new Map();
@@ -258,8 +256,7 @@ class FlagDependencyUsagePlugin {
258
256
  b,
259
257
  this.global
260
258
  ? undefined
261
- : b.groupOptions.entryOptions.runtime || undefined,
262
- true
259
+ : b.groupOptions.entryOptions.runtime || undefined
263
260
  );
264
261
  } else {
265
262
  queue.enqueue(b);
@@ -274,7 +271,7 @@ class FlagDependencyUsagePlugin {
274
271
  if (activeState === false) continue;
275
272
  const { module } = connection;
276
273
  if (activeState === ModuleGraphConnection.TRANSITIVE_ONLY) {
277
- processModule(module, runtime, false);
274
+ processModule(module, runtime);
278
275
  continue;
279
276
  }
280
277
  const oldReferencedExports = map.get(module);
@@ -348,10 +345,16 @@ class FlagDependencyUsagePlugin {
348
345
  if (oldItem === undefined || Array.isArray(oldItem)) {
349
346
  exportsMap.set(key, item);
350
347
  } else {
348
+ // An unset flag means "allowed", so merge on `!== false`:
349
+ // `undefined && false` reads back as allowed.
351
350
  exportsMap.set(key, {
352
351
  name: item.name,
353
- canMangle: item.canMangle && oldItem.canMangle,
354
- canInline: item.canInline && oldItem.canInline
352
+ canMangle:
353
+ item.canMangle !== false &&
354
+ oldItem.canMangle !== false,
355
+ canInline:
356
+ item.canInline !== false &&
357
+ oldItem.canInline !== false
355
358
  });
356
359
  }
357
360
  }
@@ -362,18 +365,12 @@ class FlagDependencyUsagePlugin {
362
365
 
363
366
  for (const [module, referencedExports] of map) {
364
367
  if (Array.isArray(referencedExports)) {
365
- processReferencedModule(
366
- module,
367
- referencedExports,
368
- runtime,
369
- forceSideEffects
370
- );
368
+ processReferencedModule(module, referencedExports, runtime);
371
369
  } else {
372
370
  processReferencedModule(
373
371
  module,
374
372
  [...referencedExports.values()],
375
- runtime,
376
- forceSideEffects
373
+ runtime
377
374
  );
378
375
  }
379
376
  }
@@ -382,8 +379,7 @@ class FlagDependencyUsagePlugin {
382
379
  processReferencedModule(
383
380
  module,
384
381
  EXPORTS_OBJECT_REFERENCED_MANGLEABLE,
385
- runtime,
386
- forceSideEffects
382
+ runtime
387
383
  );
388
384
  }
389
385
  }
@@ -407,12 +403,7 @@ class FlagDependencyUsagePlugin {
407
403
  const processEntryDependency = (dep, runtime) => {
408
404
  const module = moduleGraph.getModule(dep);
409
405
  if (module) {
410
- processReferencedModule(
411
- module,
412
- NO_EXPORTS_REFERENCED,
413
- runtime,
414
- true
415
- );
406
+ processReferencedModule(module, NO_EXPORTS_REFERENCED, runtime);
416
407
  }
417
408
  };
418
409
  /** @type {RuntimeSpec} */
@@ -443,7 +434,7 @@ class FlagDependencyUsagePlugin {
443
434
  const [module, runtime] = /** @type {[Module, RuntimeSpec]} */ (
444
435
  queue.dequeue()
445
436
  );
446
- processModule(module, runtime, false);
437
+ processModule(module, runtime);
447
438
  }
448
439
  logger.timeEnd("trace exports usage in graph");
449
440
  }
@@ -7,7 +7,7 @@
7
7
 
8
8
  const { getEntryRuntime } = require("./util/runtime");
9
9
 
10
- /** @typedef {import("./Compiler")} Compiler */
10
+ /** @import Compiler from "./Compiler" */
11
11
 
12
12
  const PLUGIN_NAME = "FlagEntryExportAsUsedPlugin";
13
13
 
package/lib/Generator.js CHANGED
@@ -6,22 +6,27 @@
6
6
  "use strict";
7
7
 
8
8
  const { JAVASCRIPT_TYPE } = require("./ModuleSourceTypeConstants");
9
+ const memoize = require("./util/memoize");
9
10
 
10
- /** @typedef {import("webpack-sources").Source} Source */
11
- /** @typedef {import("./ChunkGraph")} ChunkGraph */
12
- /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
13
- /** @typedef {import("./ConcatenationScope")} ConcatenationScope */
14
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
15
- /** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
16
- /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
17
- /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
18
- /** @typedef {import("./Module").SourceType} SourceType */
19
- /** @typedef {import("./Module").SourceTypes} SourceTypes */
20
- /** @typedef {import("./ModuleGraph")} ModuleGraph */
21
- /** @typedef {import("./NormalModule")} NormalModule */
22
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
23
- /** @typedef {import("./util/Hash")} Hash */
24
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
11
+ /** @import { Source } from "webpack-sources" */
12
+ /** @import ChunkGraph from "./ChunkGraph" */
13
+ /** @import CodeGenerationResults from "./CodeGenerationResults" */
14
+ /** @import ConcatenationScope from "./ConcatenationScope" */
15
+ /** @import DependencyTemplates from "./DependencyTemplates" */
16
+ /**
17
+ * @import {
18
+ * CodeGenerationResultData,
19
+ * ConcatenationBailoutReasonContext,
20
+ * RuntimeRequirements,
21
+ * SourceType,
22
+ * SourceTypes
23
+ * } from "./Module"
24
+ */
25
+ /** @import ModuleGraph from "./ModuleGraph" */
26
+ /** @import NormalModule from "./NormalModule" */
27
+ /** @import RuntimeTemplate from "./RuntimeTemplate" */
28
+ /** @import Hash from "./util/Hash" */
29
+ /** @import { RuntimeSpec } from "./util/runtime" */
25
30
 
26
31
  /**
27
32
  * Defines the generate context type used by this module.
@@ -56,6 +61,8 @@ const { JAVASCRIPT_TYPE } = require("./ModuleSourceTypeConstants");
56
61
  * @property {RuntimeTemplate=} runtimeTemplate
57
62
  */
58
63
 
64
+ const getModuleParseError = memoize(() => require("./errors/ModuleParseError"));
65
+
59
66
  class Generator {
60
67
  /**
61
68
  * Returns generator by type.
@@ -66,6 +73,20 @@ class Generator {
66
73
  return new ByTypeGenerator(map);
67
74
  }
68
75
 
76
+ /**
77
+ * Returns the statement a module that failed to build throws when executed.
78
+ * @param {Error} error the build error
79
+ * @param {string=} parseErrorConstructor constructor for a rejected source, defaults to `SyntaxError` (WebAssembly rejects with `WebAssembly.CompileError` instead)
80
+ * @returns {string} javascript statement
81
+ */
82
+ static throwBuildErrorCode(error, parseErrorConstructor = "SyntaxError") {
83
+ // A source the parser rejected throws what a native load of it would.
84
+ const name =
85
+ error instanceof getModuleParseError() ? parseErrorConstructor : "Error";
86
+
87
+ return `throw new ${name}(${JSON.stringify(error.message)});`;
88
+ }
89
+
69
90
  /* istanbul ignore next */
70
91
  /**
71
92
  * Returns the source types available for this module.
@@ -5,7 +5,6 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { SyncBailHook } = require("tapable");
9
8
  const { RawSource } = require("webpack-sources");
10
9
  const ChunkGraph = require("./ChunkGraph");
11
10
  const Compilation = require("./Compilation");
@@ -27,7 +26,7 @@ const ModuleHotAcceptDependency = require("./dependencies/ModuleHotAcceptDepende
27
26
  const ModuleHotDeclineDependency = require("./dependencies/ModuleHotDeclineDependency");
28
27
  const WebpackError = require("./errors/WebpackError");
29
28
  const HotModuleReplacementRuntimeModule = require("./hmr/HotModuleReplacementRuntimeModule");
30
- const JavascriptParser = require("./javascript/JavascriptParser");
29
+ const getParserHooks = require("./hmr/parserHooks");
31
30
  const {
32
31
  evaluateToIdentifier
33
32
  } = require("./javascript/JavascriptParserHelpers");
@@ -44,34 +43,22 @@ const {
44
43
  subtractRuntime
45
44
  } = require("./util/runtime");
46
45
 
47
- /** @typedef {import("estree").CallExpression} CallExpression */
48
- /** @typedef {import("estree").Expression} Expression */
49
- /** @typedef {import("estree").SpreadElement} SpreadElement */
50
- /** @typedef {import("./Chunk")} Chunk */
51
- /** @typedef {import("./Chunk").ChunkId} ChunkId */
52
- /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
53
- /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
54
- /** @typedef {import("./Compilation").Records} Records */
55
- /** @typedef {import("./Compiler")} Compiler */
56
- /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
57
- /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
58
- /** @typedef {import("./Module")} Module */
59
- /** @typedef {import("./Module").BuildInfo} BuildInfo */
60
- /** @typedef {import("./css/CssModule").CssModuleBuildMeta} CssModuleBuildMeta */
61
- /** @typedef {import("./RuntimeModule")} RuntimeModule */
62
- /** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
63
- /** @typedef {import("./javascript/JavascriptParserHelpers").Range} Range */
64
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
46
+ /** @import { CallExpression, Expression } from "estree" */
47
+ /** @import Chunk, { ChunkId } from "./Chunk" */
48
+ /** @import { ModuleId } from "./ChunkGraph" */
49
+ /** @import { AssetInfo } from "./Compilation" */
50
+ /** @import Compiler, { Records } from "./Compiler" */
51
+ /** @import CodeGenerationResults from "./CodeGenerationResults" */
52
+ /** @import Module, { BuildInfo } from "./Module" */
53
+ /** @import { CssModuleBuildMeta } from "./css/CssModule" */
54
+ /** @import { HMRJavascriptParserHooks } from "./hmr/parserHooks" */
55
+ /** @import RuntimeModule from "./RuntimeModule" */
56
+ /** @import BasicEvaluatedExpression from "./javascript/BasicEvaluatedExpression" */
57
+ /** @import JavascriptParser, { Range } from "./javascript/JavascriptParser" */
58
+ /** @import { RuntimeSpec } from "./util/runtime" */
65
59
 
66
60
  /** @typedef {string[]} Requests */
67
61
 
68
- /**
69
- * Defines the hmr javascript parser hooks type used by this module.
70
- * @typedef {object} HMRJavascriptParserHooks
71
- * @property {SyncBailHook<[Expression | SpreadElement, Requests], void>} hotAcceptCallback
72
- * @property {SyncBailHook<[CallExpression, Requests], void>} hotAcceptWithoutCallback
73
- */
74
-
75
62
  /** @typedef {number} HotIndex */
76
63
  /** @typedef {Record<string, string>} FullHashChunkModuleHashes */
77
64
  /** @typedef {Record<string, string>} ChunkModuleHashes */
@@ -85,9 +72,6 @@ const {
85
72
  /** @typedef {{ updatedChunkIds: ChunkIds, removedChunkIds: ChunkIds, removedModules: ModuleSet, forceLoadChunkIds: ChunkIds, filename: string, assetInfo: AssetInfo }} HotUpdateMainContentByRuntimeItem */
86
73
  /** @typedef {Map<string, HotUpdateMainContentByRuntimeItem>} HotUpdateMainContentByRuntime */
87
74
 
88
- /** @type {WeakMap<JavascriptParser, HMRJavascriptParserHooks>} */
89
- const parserHooksMap = new WeakMap();
90
-
91
75
  const PLUGIN_NAME = "HotModuleReplacementPlugin";
92
76
 
93
77
  class HotModuleReplacementPlugin {
@@ -97,20 +81,7 @@ class HotModuleReplacementPlugin {
97
81
  * @returns {HMRJavascriptParserHooks} the attached hooks
98
82
  */
99
83
  static getParserHooks(parser) {
100
- if (!(parser instanceof JavascriptParser)) {
101
- throw new TypeError(
102
- "The 'parser' argument must be an instance of JavascriptParser"
103
- );
104
- }
105
- let hooks = parserHooksMap.get(parser);
106
- if (hooks === undefined) {
107
- hooks = {
108
- hotAcceptCallback: new SyncBailHook(["expression", "requests"]),
109
- hotAcceptWithoutCallback: new SyncBailHook(["expression", "requests"])
110
- };
111
- parserHooksMap.set(parser, hooks);
112
- }
113
- return hooks;
84
+ return getParserHooks(parser);
114
85
  }
115
86
 
116
87
  /**
@@ -132,6 +103,7 @@ class HotModuleReplacementPlugin {
132
103
  * @returns {(expr: CallExpression) => boolean | undefined} callback
133
104
  */
134
105
  const createAcceptHandler = (parser, ParamDependency) => {
106
+ // through the static method: replacing it stays a way to intercept
135
107
  const { hotAcceptCallback, hotAcceptWithoutCallback } =
136
108
  HotModuleReplacementPlugin.getParserHooks(parser);
137
109
 
@@ -8,10 +8,14 @@
8
8
  const RawModule = require("./RawModule");
9
9
  const EntryDependency = require("./dependencies/EntryDependency");
10
10
 
11
- /** @typedef {import("../declarations/plugins/IgnorePlugin").IgnorePluginOptions} IgnorePluginOptions */
12
- /** @typedef {import("./Compiler")} Compiler */
13
- /** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
14
- /** @typedef {import("./ContextModuleFactory").BeforeContextResolveData} BeforeContextResolveData */
11
+ /**
12
+ * @import {
13
+ * IgnorePluginOptions
14
+ * } from "../declarations/plugins/IgnorePlugin"
15
+ */
16
+ /** @import Compiler from "./Compiler" */
17
+ /** @import { ResolveData } from "./NormalModuleFactory" */
18
+ /** @import { BeforeContextResolveData } from "./ContextModuleFactory" */
15
19
 
16
20
  /** @typedef {(resource: string, context: string) => boolean} CheckResourceFn */
17
21
 
@@ -5,8 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("./Compiler")} Compiler */
9
- /** @typedef {import("./Compilation")} Compilation */
8
+ /** @import Compiler from "./Compiler" */
9
+ /** @import Compilation from "./Compilation" */
10
10
 
11
11
  /** @typedef {(warning: Error, compilation: Compilation) => boolean} IgnoreFn */
12
12
 
@@ -8,10 +8,14 @@
8
8
  const { ConcatSource } = require("webpack-sources");
9
9
  const makeSerializable = require("./util/makeSerializable");
10
10
 
11
- /** @typedef {import("webpack-sources").Source} Source */
12
- /** @typedef {import("./Generator").GenerateContext} GenerateContext */
13
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
14
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
11
+ /** @import { Source } from "webpack-sources" */
12
+ /** @import { GenerateContext } from "./Generator" */
13
+ /**
14
+ * @import {
15
+ * ObjectDeserializerContext,
16
+ * ObjectSerializerContext
17
+ * } from "./serialization/ObjectMiddleware"
18
+ */
15
19
 
16
20
  /** @typedef {string} InitFragmentKey */
17
21
 
@@ -12,10 +12,14 @@ const {
12
12
  } = require("./ModuleTypeConstants");
13
13
  const { getInnerGraphUtils } = require("./optimize/InnerGraph");
14
14
 
15
- /** @typedef {import("./Compiler")} Compiler */
16
- /** @typedef {import("./Module").BuildInfo} BuildInfo */
17
- /** @typedef {import("./javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
18
- /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
15
+ /** @import Compiler from "./Compiler" */
16
+ /** @import { BuildInfo } from "./Module" */
17
+ /**
18
+ * @import {
19
+ * JavascriptModuleBuildInfo
20
+ * } from "./javascript/JavascriptModule"
21
+ */
22
+ /** @import JavascriptParser from "./javascript/JavascriptParser" */
19
23
 
20
24
  const PLUGIN_NAME = "JavascriptMetaInfoPlugin";
21
25
 
@@ -36,6 +40,26 @@ class JavascriptMetaInfoPlugin {
36
40
  * @returns {void}
37
41
  */
38
42
  const handler = (parser) => {
43
+ parser.hooks.program.tap(PLUGIN_NAME, (ast) => {
44
+ // Nested blocks keep their own disposal scope, only a module-scope
45
+ // declaration ties disposal to the end of module evaluation.
46
+ if (
47
+ ast.body.some(
48
+ (statement) =>
49
+ statement.type === "VariableDeclaration" &&
50
+ (statement.kind === "using" ||
51
+ statement.kind === "await using")
52
+ )
53
+ ) {
54
+ const buildInfo =
55
+ /** @type {JavascriptModuleBuildInfo} */
56
+ (parser.state.module.buildInfo);
57
+ buildInfo.usesTopLevelUsingDeclaration = true;
58
+ // Concatenation would defer disposal to the enclosing scope.
59
+ buildInfo.moduleConcatenationBailout =
60
+ "a top-level using declaration";
61
+ }
62
+ });
39
63
  parser.hooks.call.for("eval").tap(PLUGIN_NAME, () => {
40
64
  const buildInfo =
41
65
  /** @type {JavascriptModuleBuildInfo} */
@@ -45,7 +69,14 @@ class JavascriptMetaInfoPlugin {
45
69
  if (currentSymbol) {
46
70
  innerGraph.addUsage(parser.state, null, currentSymbol);
47
71
  } else {
72
+ // Only worth reporting when the analysis was actually running
73
+ const wasEnabled = innerGraph.isEnabled(parser.state);
48
74
  innerGraph.bailout(parser.state);
75
+ if (wasEnabled) {
76
+ compilation.moduleGraph
77
+ .getOptimizationBailout(parser.state.module)
78
+ .push("Inner graph bailout: eval()");
79
+ }
49
80
  }
50
81
  });
51
82
  parser.hooks.finish.tap(PLUGIN_NAME, () => {
package/lib/LazyBarrel.js CHANGED
@@ -7,10 +7,9 @@
7
7
 
8
8
  const Dependency = require("./Dependency");
9
9
 
10
- /** @typedef {import("./Compilation")} Compilation */
11
- /** @typedef {import("./Compilation").DependencyConstructor} DependencyConstructor */
12
- /** @typedef {import("./Module")} Module */
13
- /** @typedef {import("./ModuleFactory")} ModuleFactory */
10
+ /** @import Compilation, { DependencyConstructor } from "./Compilation" */
11
+ /** @import Module from "./Module" */
12
+ /** @import ModuleFactory from "./ModuleFactory" */
14
13
 
15
14
  /**
16
15
  * Defines the deferred request group type used by this module.
@@ -7,12 +7,16 @@
7
7
 
8
8
  const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
9
9
 
10
- /** @typedef {import("../declarations/WebpackOptions").AuxiliaryComment} AuxiliaryComment */
11
- /** @typedef {import("../declarations/WebpackOptions").LibraryExport} LibraryExport */
12
- /** @typedef {import("../declarations/WebpackOptions").LibraryName} LibraryName */
13
- /** @typedef {import("../declarations/WebpackOptions").LibraryType} LibraryType */
14
- /** @typedef {import("../declarations/WebpackOptions").UmdNamedDefine} UmdNamedDefine */
15
- /** @typedef {import("./Compiler")} Compiler */
10
+ /**
11
+ * @import {
12
+ * AuxiliaryComment,
13
+ * LibraryExport,
14
+ * LibraryName,
15
+ * LibraryType,
16
+ * UmdNamedDefine
17
+ * } from "../declarations/WebpackOptions"
18
+ */
19
+ /** @import Compiler from "./Compiler" */
16
20
 
17
21
  // TODO webpack 6 remove
18
22
  class LibraryTemplatePlugin {
@@ -8,9 +8,13 @@
8
8
  const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
9
9
  const NormalModule = require("./NormalModule");
10
10
 
11
- /** @typedef {import("../declarations/plugins/LoaderOptionsPlugin").LoaderOptionsPluginOptions} LoaderOptionsPluginOptions */
12
- /** @typedef {import("./Compiler")} Compiler */
13
- /** @typedef {import("./ModuleFilenameHelpers").MatchObject} MatchObject */
11
+ /**
12
+ * @import {
13
+ * LoaderOptionsPluginOptions
14
+ * } from "../declarations/plugins/LoaderOptionsPlugin"
15
+ */
16
+ /** @import Compiler from "./Compiler" */
17
+ /** @import { MatchObject } from "./ModuleFilenameHelpers" */
14
18
 
15
19
  /**
16
20
  * Defines the loader context type used by this module.
@@ -7,7 +7,7 @@
7
7
 
8
8
  const NormalModule = require("./NormalModule");
9
9
 
10
- /** @typedef {import("./Compiler")} Compiler */
10
+ /** @import Compiler from "./Compiler" */
11
11
 
12
12
  const PLUGIN_NAME = "LoaderTargetPlugin";
13
13