@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
@@ -15,15 +15,19 @@ const { VariableInfoFlags } = require("../javascript/JavascriptParser");
15
15
  const {
16
16
  InlinedUsedName,
17
17
  enableInlineExports,
18
+ findModulesInCycles,
18
19
  toInlinedValue
19
20
  } = require("./InlineExports");
20
21
 
21
- /** @typedef {import("./InlineExports").InlinedValue} InlinedValue */
22
- /** @typedef {import("../Compiler")} Compiler */
23
- /** @typedef {import("../ExportsInfo")} ExportsInfo */
24
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
25
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
26
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
22
+ /** @import { InlinedValue } from "./InlineExports" */
23
+ /** @import Compiler from "../Compiler" */
24
+ /** @import ExportsInfo from "../ExportsInfo" */
25
+ /** @import JavascriptParser from "../javascript/JavascriptParser" */
26
+ /**
27
+ * @import {
28
+ * JavascriptModuleBuildInfo
29
+ * } from "../javascript/JavascriptModule"
30
+ */
27
31
 
28
32
  /** @typedef {{ inlineExports: boolean }} ConstValueParserPluginOptions */
29
33
 
@@ -159,11 +163,15 @@ class ConstExportsPlugin {
159
163
 
160
164
  const moduleGraph = compilation.moduleGraph;
161
165
  compilation.hooks.optimizeDependencies.tap(PLUGIN_NAME, (modules) => {
166
+ // A cycle peer may read an export during its temporal dead zone,
167
+ // where the binding must throw and a literal would answer.
168
+ const inCycle = findModulesInCycles(moduleGraph, modules);
162
169
  /** @type {Set<ExportsInfo>} */
163
170
  const visited = new Set();
164
171
  /** @type {ExportsInfo[]} */
165
172
  let queue = [];
166
173
  for (const module of modules) {
174
+ if (inCycle.has(module)) continue;
167
175
  queue.push(moduleGraph.getExportsInfo(module));
168
176
  }
169
177
  while (queue.length > 0) {
@@ -207,5 +215,6 @@ class ConstExportsPlugin {
207
215
  }
208
216
  }
209
217
 
218
+ ConstExportsPlugin.CONST_BINDING_TAG = CONST_BINDING_TAG;
219
+
210
220
  module.exports = ConstExportsPlugin;
211
- module.exports.CONST_BINDING_TAG = CONST_BINDING_TAG;
@@ -7,9 +7,9 @@
7
7
 
8
8
  const { STAGE_BASIC } = require("../OptimizationStages");
9
9
 
10
- /** @typedef {import("../Chunk")} Chunk */
11
- /** @typedef {import("../ChunkGroup")} ChunkGroup */
12
- /** @typedef {import("../Compiler")} Compiler */
10
+ /** @import Chunk from "../Chunk" */
11
+ /** @import ChunkGroup from "../ChunkGroup" */
12
+ /** @import Compiler from "../Compiler" */
13
13
 
14
14
  const PLUGIN_NAME = "EnsureChunkConditionsPlugin";
15
15
 
@@ -7,10 +7,9 @@
7
7
 
8
8
  const { compareIds } = require("../util/comparators");
9
9
 
10
- /** @typedef {import("../Chunk")} Chunk */
11
- /** @typedef {import("../Chunk").ChunkId} ChunkId */
12
- /** @typedef {import("../Compiler")} Compiler */
13
- /** @typedef {import("../Module")} Module */
10
+ /** @import Chunk, { ChunkId } from "../Chunk" */
11
+ /** @import Compiler from "../Compiler" */
12
+ /** @import Module from "../Module" */
14
13
 
15
14
  const PLUGIN_NAME = "FlagIncludedChunksPlugin";
16
15
 
@@ -8,11 +8,15 @@
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const { propertyAccess } = require("../util/property");
10
10
 
11
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
14
- /** @typedef {import("../Module")} Module */
15
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
11
+ /**
12
+ * @import {
13
+ * ObjectDeserializerContext,
14
+ * ObjectSerializerContext
15
+ * } from "../serialization/ObjectMiddleware"
16
+ */
17
+ /** @import ModuleGraph from "../ModuleGraph" */
18
+ /** @import Module from "../Module" */
19
+ /** @import { RuntimeSpec } from "../util/runtime" */
16
20
 
17
21
  const MAX_INLINE_BYTES = 6;
18
22
 
@@ -168,10 +172,131 @@ const isExportInlined = (moduleGraph, module, ids, runtime) => {
168
172
  return moduleGraph.getExportsInfo(module).hasInlinedUsedName(ids, runtime);
169
173
  };
170
174
 
175
+ /**
176
+ * Collects, by an iterative Tarjan pass, the modules a cycle peer may read in
177
+ * their dead zone. A cycle of bare side-effect imports still inlines.
178
+ * @param {ModuleGraph} moduleGraph module graph
179
+ * @param {Iterable<Module>} modules all modules of the compilation
180
+ * @returns {Set<Module>} modules whose exports must not be inlined
181
+ */
182
+ const findModulesInCycles = (moduleGraph, modules) => {
183
+ const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
184
+ const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
185
+
186
+ /** @type {Set<Module>} */
187
+ const inCycle = new Set();
188
+ /** @type {[Module, Module][]} */
189
+ const bindingReads = [];
190
+ /** @type {Map<Module, number>} */
191
+ const componentOf = new Map();
192
+ let nextComponent = 0;
193
+ /** @type {Map<Module, number>} */
194
+ const index = new Map();
195
+ /** @type {Map<Module, number>} */
196
+ const low = new Map();
197
+ /** @type {Set<Module>} */
198
+ const onStack = new Set();
199
+ /** @type {Module[]} */
200
+ const componentStack = [];
201
+ let counter = 0;
202
+ /**
203
+ * @param {Module} module the module
204
+ * @returns {Module[]} modules it imports, self included when self-importing
205
+ */
206
+ const targetsOf = (module) => {
207
+ const connections = moduleGraph.getOutgoingConnectionsByModule(module);
208
+ if (!connections) return [];
209
+ /** @type {Module[]} */
210
+ const targets = [];
211
+ for (const [target, moduleConnections] of connections) {
212
+ if (
213
+ !target ||
214
+ !moduleConnections.some(
215
+ (c) => c.dependency instanceof HarmonyImportDependency
216
+ )
217
+ ) {
218
+ continue;
219
+ }
220
+ // Anything but a bare side-effect import may observe the binding.
221
+ if (
222
+ moduleConnections.some(
223
+ (c) =>
224
+ c.dependency instanceof HarmonyImportDependency &&
225
+ !(c.dependency instanceof HarmonyImportSideEffectDependency)
226
+ )
227
+ ) {
228
+ bindingReads.push([module, target]);
229
+ }
230
+ targets.push(target);
231
+ }
232
+ return targets;
233
+ };
234
+ /** @type {{ node: Module, targets: Module[], i: number }[]} */
235
+ const work = [];
236
+ /**
237
+ * @param {Module} node node to open
238
+ */
239
+ const open = (node) => {
240
+ index.set(node, counter);
241
+ low.set(node, counter);
242
+ counter++;
243
+ componentStack.push(node);
244
+ onStack.add(node);
245
+ work.push({ node, targets: targetsOf(node), i: 0 });
246
+ };
247
+ for (const seed of modules) {
248
+ if (index.has(seed)) continue;
249
+ open(seed);
250
+ while (work.length > 0) {
251
+ const frame = work[work.length - 1];
252
+ if (frame.i < frame.targets.length) {
253
+ const next = frame.targets[frame.i++];
254
+ if (!index.has(next)) {
255
+ open(next);
256
+ } else if (onStack.has(next)) {
257
+ const nodeLow = /** @type {number} */ (low.get(frame.node));
258
+ const nextIndex = /** @type {number} */ (index.get(next));
259
+ if (nextIndex < nodeLow) low.set(frame.node, nextIndex);
260
+ }
261
+ continue;
262
+ }
263
+ work.pop();
264
+ const node = frame.node;
265
+ const nodeLow = /** @type {number} */ (low.get(node));
266
+ if (work.length > 0) {
267
+ const parent = work[work.length - 1].node;
268
+ if (nodeLow < /** @type {number} */ (low.get(parent))) {
269
+ low.set(parent, nodeLow);
270
+ }
271
+ }
272
+ if (nodeLow === index.get(node)) {
273
+ const id = nextComponent++;
274
+ let member;
275
+ do {
276
+ member = /** @type {Module} */ (componentStack.pop());
277
+ onStack.delete(member);
278
+ componentOf.set(member, id);
279
+ } while (member !== node);
280
+ }
281
+ }
282
+ }
283
+ // Reader and target evaluate together exactly when they share a component.
284
+ for (const [origin, target] of bindingReads) {
285
+ if (
286
+ origin === target ||
287
+ componentOf.get(origin) === componentOf.get(target)
288
+ ) {
289
+ inCycle.add(target);
290
+ }
291
+ }
292
+ return inCycle;
293
+ };
294
+
171
295
  module.exports.InlinedUsedName = InlinedUsedName;
172
296
  module.exports.InlinedValue = InlinedValue;
173
297
  module.exports.MAX_INLINE_BYTES = MAX_INLINE_BYTES;
174
298
  module.exports.enableInlineExports = enableInlineExports;
299
+ module.exports.findModulesInCycles = findModulesInCycles;
175
300
  module.exports.isExportInlined = isExportInlined;
176
301
  module.exports.isInlineEnabled = isInlineEnabled;
177
302
  module.exports.isInlineExportsEnabled = isInlineExportsEnabled;
@@ -8,13 +8,12 @@
8
8
  const { UsageState } = require("../ExportsInfo");
9
9
  const JavascriptParser = require("../javascript/JavascriptParser");
10
10
 
11
- /** @typedef {import("../Compilation")} Compilation */
12
- /** @typedef {import("../Dependency")} Dependency */
13
- /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
14
- /** @typedef {import("../Module")} Module */
15
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
- /** @typedef {import("../Parser").ParserState} ParserState */
17
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
11
+ /** @import Compilation from "../Compilation" */
12
+ /** @import Dependency, { GetConditionFn } from "../Dependency" */
13
+ /** @import Module from "../Module" */
14
+ /** @import ModuleGraph from "../ModuleGraph" */
15
+ /** @import { ParserState } from "../Parser" */
16
+ /** @import { RuntimeSpec } from "../util/runtime" */
18
17
 
19
18
  /** @typedef {boolean | ((compilation: Compilation, module: Module) => boolean)} PureCondition */
20
19
  /** @typedef {Set<string | TopLevelSymbol>} InnerGraphValueSet */
@@ -135,6 +134,15 @@ function isDependencyUsedByExports(
135
134
  return true;
136
135
  }
137
136
 
137
+ /**
138
+ * One condition per module graph rather than per dependency. The dependency the
139
+ * condition was built for is always the one on the connection it is called with
140
+ * (`ModuleGraph#setResolvedModule` is the only caller of `getCondition`, and it
141
+ * pairs the two), so it can be read off the connection instead of captured.
142
+ * @type {WeakMap<ModuleGraph, GetConditionFn>}
143
+ */
144
+ const usedByExportsConditions = new WeakMap();
145
+
138
146
  /**
139
147
  * Returns dependency condition
140
148
  * @param {Dependency} dependency the dependency
@@ -152,14 +160,22 @@ module.exports.getDependencyUsedByExportsCondition = (
152
160
  return false;
153
161
  case true:
154
162
  return null;
155
- default:
156
- return (_connections, runtime) =>
157
- isDependencyUsedByExports(
158
- dependency,
159
- /** @type {DependencyWithUsedByExports} */ (dependency).usedByExports,
163
+ default: {
164
+ const existing = usedByExportsConditions.get(moduleGraph);
165
+ if (existing !== undefined) return existing;
166
+ /** @type {GetConditionFn} */
167
+ const condition = (connection, runtime) => {
168
+ const dep = /** @type {Dependency} */ (connection.dependency);
169
+ return isDependencyUsedByExports(
170
+ dep,
171
+ /** @type {DependencyWithUsedByExports} */ (dep).usedByExports,
160
172
  moduleGraph,
161
173
  runtime
162
174
  );
175
+ };
176
+ usedByExportsConditions.set(moduleGraph, condition);
177
+ return condition;
178
+ }
163
179
  }
164
180
  };
165
181
 
@@ -17,24 +17,29 @@ const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImport
17
17
  const PureExpressionDependency = require("../dependencies/PureExpressionDependency");
18
18
  const { getInnerGraphUtils, topLevelSymbolTag } = require("./InnerGraph");
19
19
 
20
- /** @typedef {import("estree").CallExpression} CallExpression */
21
- /** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
22
- /** @typedef {import("estree").ClassExpression} ClassExpression */
23
- /** @typedef {import("estree").Expression} Expression */
24
- /** @typedef {import("estree").MaybeNamedClassDeclaration} MaybeNamedClassDeclaration */
25
- /** @typedef {import("estree").MaybeNamedFunctionDeclaration} MaybeNamedFunctionDeclaration */
26
- /** @typedef {import("estree").Node} Node */
27
- /** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
28
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
29
- /** @typedef {import("../Compilation")} Compilation */
30
- /** @typedef {import("../Compiler")} Compiler */
31
- /** @typedef {import("../Dependency")} Dependency */
32
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
33
- /** @typedef {import("../Module")} Module */
34
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
35
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
36
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
37
- /** @typedef {import("./InnerGraph").TopLevelSymbol} TopLevelSymbol */
20
+ /**
21
+ * @import {
22
+ * CallExpression,
23
+ * ClassDeclaration,
24
+ * ClassExpression,
25
+ * Expression,
26
+ * MaybeNamedClassDeclaration,
27
+ * MaybeNamedFunctionDeclaration,
28
+ * Node,
29
+ * VariableDeclarator
30
+ * } from "estree"
31
+ */
32
+ /**
33
+ * @import {
34
+ * JavascriptParserOptions
35
+ * } from "../../declarations/WebpackOptions"
36
+ */
37
+ /** @import Compilation from "../Compilation" */
38
+ /** @import Compiler from "../Compiler" */
39
+ /** @import Dependency from "../Dependency" */
40
+ /** @import Module from "../Module" */
41
+ /** @import JavascriptParser, { Range } from "../javascript/JavascriptParser" */
42
+ /** @import { TopLevelSymbol } from "./InnerGraph" */
38
43
 
39
44
  const PLUGIN_NAME = "InnerGraphPlugin";
40
45
  const impureVariableDeclarationKinds = new Set(["using", "await using"]);
@@ -9,9 +9,13 @@ const { STAGE_ADVANCED } = require("../OptimizationStages");
9
9
  const LazyBucketSortedSet = require("../util/LazyBucketSortedSet");
10
10
  const { compareChunks } = require("../util/comparators");
11
11
 
12
- /** @typedef {import("../../declarations/plugins/optimize/LimitChunkCountPlugin").LimitChunkCountPluginOptions} LimitChunkCountPluginOptions */
13
- /** @typedef {import("../Chunk")} Chunk */
14
- /** @typedef {import("../Compiler")} Compiler */
12
+ /**
13
+ * @import {
14
+ * LimitChunkCountPluginOptions
15
+ * } from "../../declarations/plugins/optimize/LimitChunkCountPlugin"
16
+ */
17
+ /** @import Chunk from "../Chunk" */
18
+ /** @import Compiler from "../Compiler" */
15
19
 
16
20
  /**
17
21
  * Defines the chunk combination type used by this module.
@@ -14,10 +14,9 @@ const {
14
14
  const { assignDeterministicIds } = require("../ids/IdHelpers");
15
15
  const { compareSelect, compareStringsNumeric } = require("../util/comparators");
16
16
 
17
- /** @typedef {import("../Compiler")} Compiler */
18
- /** @typedef {import("../ExportsInfo")} ExportsInfo */
19
- /** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
20
- /** @typedef {import("../util/concatenate").UsedNames} UsedNames */
17
+ /** @import Compiler from "../Compiler" */
18
+ /** @import ExportsInfo, { ExportInfo } from "../ExportsInfo" */
19
+ /** @import { UsedNames } from "../util/concatenate" */
21
20
 
22
21
  /**
23
22
  * Defines the comparator type used by this module.
@@ -44,7 +43,7 @@ const canMangle = (exportsInfo) => {
44
43
  };
45
44
 
46
45
  // Sort by name
47
- /** @type {Comparator<ExportInfo>} */
46
+ /** @type {Comparator<InstanceType<ExportInfo>>} */
48
47
  const comparator = compareSelect((e) => e.name, compareStringsNumeric);
49
48
  /**
50
49
  * Mangle exports info.
@@ -57,7 +56,7 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
57
56
  if (!canMangle(exportsInfo)) return;
58
57
  /** @type {UsedNames} */
59
58
  const usedNames = new Set();
60
- /** @type {ExportInfo[]} */
59
+ /** @type {InstanceType<ExportInfo>[]} */
61
60
  const mangleableExports = [];
62
61
 
63
62
  // Avoid to renamed exports that are not provided when
@@ -130,9 +129,9 @@ const mangleExportsInfo = (deterministic, exportsInfo, isNamespace) => {
130
129
  usedNames.size
131
130
  );
132
131
  } else {
133
- /** @type {ExportInfo[]} */
132
+ /** @type {InstanceType<ExportInfo>[]} */
134
133
  const usedExports = [];
135
- /** @type {ExportInfo[]} */
134
+ /** @type {InstanceType<ExportInfo>[]} */
136
135
  const unusedExports = [];
137
136
  for (const exportInfo of mangleableExports) {
138
137
  if (exportInfo.getUsed(undefined) === UsageState.Unused) {
@@ -8,9 +8,13 @@
8
8
  const { STAGE_BASIC } = require("../OptimizationStages");
9
9
  const { runtimeEqual } = require("../util/runtime");
10
10
 
11
- /** @typedef {import("../../declarations/plugins/optimize/MergeDuplicateChunksPlugin").MergeDuplicateChunksPluginOptions} MergeDuplicateChunksPluginOptions */
12
- /** @typedef {import("../Compiler")} Compiler */
13
- /** @typedef {import("../Chunk")} Chunk */
11
+ /**
12
+ * @import {
13
+ * MergeDuplicateChunksPluginOptions
14
+ * } from "../../declarations/plugins/optimize/MergeDuplicateChunksPlugin"
15
+ */
16
+ /** @import Compiler from "../Compiler" */
17
+ /** @import Chunk from "../Chunk" */
14
18
 
15
19
  const PLUGIN_NAME = "MergeDuplicateChunksPlugin";
16
20
 
@@ -7,9 +7,13 @@
7
7
 
8
8
  const { STAGE_ADVANCED } = require("../OptimizationStages");
9
9
 
10
- /** @typedef {import("../../declarations/plugins/optimize/MinChunkSizePlugin").MinChunkSizePluginOptions} MinChunkSizePluginOptions */
11
- /** @typedef {import("../Chunk")} Chunk */
12
- /** @typedef {import("../Compiler")} Compiler */
10
+ /**
11
+ * @import {
12
+ * MinChunkSizePluginOptions
13
+ * } from "../../declarations/plugins/optimize/MinChunkSizePlugin"
14
+ */
15
+ /** @import Chunk from "../Chunk" */
16
+ /** @import Compiler from "../Compiler" */
13
17
 
14
18
  const PLUGIN_NAME = "MinChunkSizePlugin";
15
19
 
@@ -12,10 +12,10 @@ const Module = require("../Module");
12
12
  const ModuleGraph = require("../ModuleGraph");
13
13
  const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
14
14
  const { STAGE_DEFAULT } = require("../OptimizationStages");
15
- const CommonJsSelfReferenceDependency = require("../dependencies/CommonJsSelfReferenceDependency");
16
15
  const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
17
16
  const { ImportPhaseUtils } = require("../dependencies/ImportPhase");
18
17
  const { compareModulesByIdentifier } = require("../util/comparators");
18
+ const { isCommonJsConcatenationEnabled } = require("../util/concatenate");
19
19
  const {
20
20
  filterRuntime,
21
21
  intersectRuntime,
@@ -25,13 +25,12 @@ const {
25
25
  } = require("../util/runtime");
26
26
  const ConcatenatedModule = require("./ConcatenatedModule");
27
27
 
28
- /** @typedef {import("../Chunk")} Chunk */
29
- /** @typedef {import("../Compilation")} Compilation */
30
- /** @typedef {import("../Compiler")} Compiler */
31
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
32
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
33
- /** @typedef {import("../RequestShortener")} RequestShortener */
34
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
28
+ /** @import Chunk from "../Chunk" */
29
+ /** @import Compilation from "../Compilation" */
30
+ /** @import Compiler from "../Compiler" */
31
+ /** @import { BuildInfo, BuildMeta } from "../Module" */
32
+ /** @import RequestShortener from "../RequestShortener" */
33
+ /** @import { RuntimeSpec } from "../util/runtime" */
35
34
 
36
35
  /** @typedef {Module | ((requestShortener: RequestShortener) => string)} Problem */
37
36
 
@@ -87,12 +86,19 @@ const cacheFailure = (failureCache, statistics, statKey, module, problem) => {
87
86
  return problem;
88
87
  };
89
88
 
89
+ // Read back by `performance.scopeHoistingBailouts` to tell these reasons apart
90
+ // from the other kinds `getOptimizationBailout` collects.
91
+ const BAILOUT_PREFIX = "ModuleConcatenation bailout: ";
92
+
93
+ // A root's reason for rejecting another module, rather than the module's own.
94
+ const REJECTED_PREFIX = "Cannot concat with ";
95
+
90
96
  /**
91
97
  * Format bailout reason.
92
98
  * @param {string} msg message
93
99
  * @returns {string} formatted message
94
100
  */
95
- const formatBailoutReason = (msg) => `ModuleConcatenation bailout: ${msg}`;
101
+ const formatBailoutReason = (msg) => `${BAILOUT_PREFIX}${msg}`;
96
102
 
97
103
  const PLUGIN_NAME = "ModuleConcatenationPlugin";
98
104
 
@@ -160,7 +166,7 @@ class ModuleConcatenationPlugin {
160
166
  const formatBailoutWarning = (module, problem) => (requestShortener) => {
161
167
  if (typeof problem === "function") {
162
168
  return formatBailoutReason(
163
- `Cannot concat with ${module.readableIdentifier(
169
+ `${REJECTED_PREFIX}${module.readableIdentifier(
164
170
  requestShortener
165
171
  )}: ${problem(requestShortener)}`
166
172
  );
@@ -169,13 +175,13 @@ class ModuleConcatenationPlugin {
169
175
  const reasonWithPrefix = reason ? `: ${reason}` : "";
170
176
  if (module === problem) {
171
177
  return formatBailoutReason(
172
- `Cannot concat with ${module.readableIdentifier(
178
+ `${REJECTED_PREFIX}${module.readableIdentifier(
173
179
  requestShortener
174
180
  )}${reasonWithPrefix}`
175
181
  );
176
182
  }
177
183
  return formatBailoutReason(
178
- `Cannot concat with ${module.readableIdentifier(
184
+ `${REJECTED_PREFIX}${module.readableIdentifier(
179
185
  requestShortener
180
186
  )} because of ${problem.readableIdentifier(
181
187
  requestShortener
@@ -197,16 +203,14 @@ class ModuleConcatenationPlugin {
197
203
  const relevantModules = [];
198
204
  /** @type {Set<Module>} */
199
205
  const possibleInners = new Set();
200
- const concatenateModules =
201
- compilation.options.optimization.concatenateModules;
206
+ // commonjs concatenation defaults to on; { commonjs: false } opts out
207
+ const concatenateCommonJsModules = isCommonJsConcatenationEnabled(
208
+ compilation.options.optimization.concatenateModules
209
+ );
202
210
  const context = {
203
211
  chunkGraph,
204
212
  moduleGraph,
205
- // commonjs concatenation defaults to on; { commonjs: false } opts out
206
- concatenateCommonJsModules:
207
- typeof concatenateModules === "object"
208
- ? concatenateModules.commonjs !== false
209
- : concatenateModules === true
213
+ concatenateCommonJsModules
210
214
  };
211
215
  const deferEnabled = compilation.options.experiments.deferImport;
212
216
  logger.time("select relevant modules");
@@ -531,7 +535,10 @@ class ModuleConcatenationPlugin {
531
535
  c.originModule === m &&
532
536
  !(
533
537
  c.dependency &&
534
- Dependency.canConcatenate(c.dependency) &&
538
+ Dependency.canConcatenate(
539
+ c.dependency,
540
+ concatenateCommonJsModules
541
+ ) &&
535
542
  modules.has(c.module)
536
543
  )
537
544
  );
@@ -575,7 +582,10 @@ class ModuleConcatenationPlugin {
575
582
  c.module === rootModule ? c.originModule : c.module;
576
583
  const innerConnection =
577
584
  c.dependency &&
578
- Dependency.canConcatenate(c.dependency) &&
585
+ Dependency.canConcatenate(
586
+ c.dependency,
587
+ concatenateCommonJsModules
588
+ ) &&
579
589
  modules.has(/** @type {Module} */ (otherModule));
580
590
  return !innerConnection;
581
591
  }
@@ -627,11 +637,14 @@ class ModuleConcatenationPlugin {
627
637
  */
628
638
  _getImports(compilation, module, runtime) {
629
639
  const moduleGraph = compilation.moduleGraph;
640
+ const concatenateCommonJsModules = isCommonJsConcatenationEnabled(
641
+ compilation.options.optimization.concatenateModules
642
+ );
630
643
  /** @type {Set<Module>} */
631
644
  const set = new Set();
632
645
  for (const dep of module.dependencies) {
633
646
  // Get reference info only for dependencies that support concatenation
634
- if (!Dependency.canConcatenate(dep)) continue;
647
+ if (!Dependency.canConcatenate(dep, concatenateCommonJsModules)) continue;
635
648
 
636
649
  const connection = moduleGraph.getConnection(dep);
637
650
  // Reference is valid and has a module
@@ -821,7 +834,7 @@ class ModuleConcatenationPlugin {
821
834
  }
822
835
  }
823
836
 
824
- /** @type {Map<Module, ReadonlyArray<ModuleGraph.ModuleGraphConnection>>} */
837
+ /** @type {Map<Module, ReadonlyArray<InstanceType<ModuleGraph.ModuleGraphConnection>>>} */
825
838
  const incomingConnectionsFromModules = new Map();
826
839
  for (const [originModule, connections] of incomingConnections) {
827
840
  if (originModule) {
@@ -883,32 +896,32 @@ class ModuleConcatenationPlugin {
883
896
  );
884
897
  }
885
898
 
886
- /** @type {Map<Module, ReadonlyArray<ModuleGraph.ModuleGraphConnection>>} */
887
- const nonHarmonyConnections = new Map();
899
+ const concatenateCommonJsModules = isCommonJsConcatenationEnabled(
900
+ compilation.options.optimization.concatenateModules
901
+ );
902
+ /** @type {Map<Module, ReadonlyArray<InstanceType<ModuleGraph.ModuleGraphConnection>>>} */
903
+ const nonTargetConnections = new Map();
888
904
  for (const [originModule, connections] of incomingConnectionsFromModules) {
889
905
  const selected = connections.filter(
890
906
  (connection) =>
891
907
  !connection.dependency ||
892
- (!Dependency.canConcatenate(connection.dependency) &&
893
- // exports self-references of a concatenated CommonJS module
894
- // are rewritten in place, so they don't block concatenation
895
- !(
896
- originModule === module &&
897
- connection.dependency instanceof CommonJsSelfReferenceDependency
898
- ))
908
+ !Dependency.canConcatenate(
909
+ connection.dependency,
910
+ concatenateCommonJsModules
911
+ )
899
912
  );
900
913
  if (selected.length > 0) {
901
- nonHarmonyConnections.set(originModule, connections);
914
+ nonTargetConnections.set(originModule, selected);
902
915
  }
903
916
  }
904
- if (nonHarmonyConnections.size > 0) {
917
+ if (nonTargetConnections.size > 0) {
905
918
  /**
906
919
  * Returns problem description.
907
920
  * @param {RequestShortener} requestShortener request shortener
908
921
  * @returns {string} problem description
909
922
  */
910
923
  const problem = (requestShortener) => {
911
- const names = [...nonHarmonyConnections]
924
+ const names = [...nonTargetConnections]
912
925
  .map(
913
926
  ([originModule, connections]) =>
914
927
  `${originModule.readableIdentifier(
@@ -1142,4 +1155,7 @@ class ConcatConfiguration {
1142
1155
  }
1143
1156
  }
1144
1157
 
1158
+ ModuleConcatenationPlugin.BAILOUT_PREFIX = BAILOUT_PREFIX;
1159
+ ModuleConcatenationPlugin.REJECTED_PREFIX = REJECTED_PREFIX;
1160
+
1145
1161
  module.exports = ModuleConcatenationPlugin;