@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,27 +11,57 @@ const formatLocation = require("../util/formatLocation");
11
11
  const { propertyAccess } = require("../util/property");
12
12
  const CommonJsExportRequireDependency = require("./CommonJsExportRequireDependency");
13
13
  const CommonJsExportsDependency = require("./CommonJsExportsDependency");
14
+ const CommonJsFullRequireDependency = require("./CommonJsFullRequireDependency");
15
+ const CommonJsObjectExportDependency = require("./CommonJsObjectExportDependency");
16
+ const CommonJsRequireDependency = require("./CommonJsRequireDependency");
14
17
  const CommonJsSelfReferenceDependency = require("./CommonJsSelfReferenceDependency");
15
18
  const DynamicExports = require("./DynamicExports");
16
19
  const HarmonyExports = require("./HarmonyExports");
17
20
  const ModuleDecoratorDependency = require("./ModuleDecoratorDependency");
21
+ const RuntimeRequirementsDependency = require("./RuntimeRequirementsDependency");
18
22
 
19
- /** @typedef {import("estree").AssignmentExpression} AssignmentExpression */
20
- /** @typedef {import("estree").CallExpression} CallExpression */
21
- /** @typedef {import("estree").Expression} Expression */
22
- /** @typedef {import("estree").Node} Node */
23
- /** @typedef {import("estree").Super} Super */
24
- /** @typedef {import("estree").ThisExpression} ThisExpression */
25
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
26
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
27
- /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
28
- /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
29
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
30
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
31
- /** @typedef {import("../javascript/JavascriptParser").Members} Members */
32
- /** @typedef {import("../javascript/JavascriptParser").StatementPath} StatementPath */
33
- /** @typedef {import("./CommonJsDependencyHelpers").CommonJSDependencyBaseKeywords} CommonJSDependencyBaseKeywords */
34
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
23
+ const FUNCTION_PROPERTY_DROP_HEAD =
24
+ CommonJsObjectExportDependency.FUNCTION_PROPERTY_DROP_HEAD;
25
+
26
+ /**
27
+ * @import {
28
+ * AssignmentExpression,
29
+ * CallExpression,
30
+ * Expression,
31
+ * FunctionExpression,
32
+ * Node,
33
+ * ObjectExpression,
34
+ * Property,
35
+ * SpreadElement,
36
+ * Super,
37
+ * ThisExpression
38
+ * } from "estree"
39
+ */
40
+ /** @import { ExportInfoName } from "../Dependency" */
41
+ /** @import ModuleGraph from "../ModuleGraph" */
42
+ /** @import BasicEvaluatedExpression from "../javascript/BasicEvaluatedExpression" */
43
+ /**
44
+ * @import JavascriptParser, {
45
+ * Range,
46
+ * Members,
47
+ * StatementPath
48
+ * } from "../javascript/JavascriptParser"
49
+ */
50
+ /**
51
+ * @import {
52
+ * CommonJSDependencyBaseKeywords
53
+ * } from "./CommonJsDependencyHelpers"
54
+ */
55
+ /**
56
+ * @import {
57
+ * CommonJsObjectExportKind
58
+ * } from "./CommonJsObjectExportDependency"
59
+ */
60
+ /**
61
+ * @import {
62
+ * JavascriptModuleBuildMeta
63
+ * } from "../javascript/JavascriptModule"
64
+ */
35
65
 
36
66
  /**
37
67
  * This function takes a generic expression and detects whether it is an ObjectExpression.
@@ -230,11 +260,15 @@ const getChildKeys = (node) => {
230
260
  * and `extends` clauses evaluate in the outer scope and are searched. The
231
261
  * `this`-scope boundary is enforced when a node is popped, so the generic
232
262
  * branch may enumerate any child without crossing it.
233
- * @param {Node[]} initialNodes nodes to search
263
+ * @param {Node} body function body
264
+ * @param {Node[]} params function params
234
265
  * @returns {ThisExpression | undefined} first own `this` expression
235
266
  */
236
- const findOwnThisExpression = (initialNodes) => {
237
- const stack = [...initialNodes];
267
+ const findOwnThisExpression = (body, params) => {
268
+ // the body is popped first, so its `this` wins over a default parameter's
269
+ const stack = [];
270
+ for (let i = 0; i < params.length; i++) stack.push(params[i]);
271
+ stack.push(body);
238
272
  let node;
239
273
  while ((node = stack.pop()) !== undefined) {
240
274
  switch (node.type) {
@@ -271,14 +305,55 @@ const findOwnThisExpression = (initialNodes) => {
271
305
  * Returns the own `this` of a function-expression export value. When such a
272
306
  * function is called as a method of the exports object, `this` is the exports
273
307
  * object and may reach any sibling export (#21178).
308
+ * @param {JavascriptParser} parser the parser
274
309
  * @param {Node} expr the exported value
275
310
  * @returns {ThisExpression | undefined} first own `this` expression
276
311
  */
277
- const getThisAccessInExportedValue = (expr) =>
278
- expr.type === "FunctionExpression"
279
- ? findOwnThisExpression([...expr.params, expr.body])
312
+ const getThisAccessInExportedValue = (parser, expr) =>
313
+ expr.type === "FunctionExpression" &&
314
+ // scanning the body of every exported function is expensive and most of them
315
+ // never mention `this`, so filter on the source text first
316
+ parser.sourceMayContainIdentifier(/** @type {Range} */ (expr.range), "this")
317
+ ? findOwnThisExpression(expr.body, expr.params)
280
318
  : undefined;
281
319
 
320
+ /**
321
+ * Returns the export name an object-literal property contributes, or
322
+ * `undefined` when it cannot contribute one: a spread, a computed or
323
+ * non-string key is unknown at compile time, and `__proto__` sets
324
+ * [[Prototype]] instead of an own property.
325
+ * @param {Property | SpreadElement} property property
326
+ * @returns {string | undefined} export name
327
+ */
328
+ const getStaticPropertyName = (property) => {
329
+ if (property.type === "SpreadElement" || property.computed) return;
330
+ const key = property.key;
331
+ /** @type {string | undefined} */
332
+ let name;
333
+ if (key.type === "Identifier") {
334
+ name = key.name;
335
+ } else if (key.type === "Literal" && typeof key.value === "string") {
336
+ name = key.value;
337
+ }
338
+ return name === "__proto__" ? undefined : name;
339
+ };
340
+
341
+ /**
342
+ * @param {Property} property property
343
+ * @returns {CommonJsObjectExportKind} property kind
344
+ */
345
+ const getObjectExportKind = (property) => {
346
+ if (property.kind === "get" || property.kind === "set") return property.kind;
347
+ if (property.method) {
348
+ const { async, generator } = /** @type {FunctionExpression} */ (
349
+ property.value
350
+ );
351
+ if (async) return generator ? "asyncGeneratorMethod" : "asyncMethod";
352
+ return generator ? "generatorMethod" : "method";
353
+ }
354
+ return property.shorthand ? "shorthand" : "keyValue";
355
+ };
356
+
282
357
  const PLUGIN_NAME = "CommonJsExportsParserPlugin";
283
358
 
284
359
  class CommonJsExportsParserPlugin {
@@ -348,7 +423,7 @@ class CommonJsExportsParserPlugin {
348
423
  const keepAllExportsOnThisAccess = (valueExpr, base) => {
349
424
  // One bailout per module is enough
350
425
  if (keptAllExportsForState === parser.state) return;
351
- const thisExpr = getThisAccessInExportedValue(valueExpr);
426
+ const thisExpr = getThisAccessInExportedValue(parser, valueExpr);
352
427
  if (thisExpr === undefined) return;
353
428
  keptAllExportsForState = parser.state;
354
429
  bailoutHint(
@@ -413,7 +488,10 @@ class CommonJsExportsParserPlugin {
413
488
 
414
489
  return true;
415
490
  }
416
- if (members.length === 0) return;
491
+ // `module.exports = { … }` — properties are the module's named exports.
492
+ if (members.length === 0) {
493
+ return handleObjectLiteralExport(expr, base);
494
+ }
417
495
  enableStructuredExports();
418
496
  const remainingMembers = members;
419
497
  checkNamespace(
@@ -438,6 +516,103 @@ class CommonJsExportsParserPlugin {
438
516
  parser.walkExpression(expr.right);
439
517
  return true;
440
518
  };
519
+ /**
520
+ * Handle top-level `module.exports = { … }` object-literal exports.
521
+ * @param {AssignmentExpression} expr expression
522
+ * @param {CommonJSDependencyBaseKeywords} base commonjs base keywords
523
+ * @returns {boolean | undefined} true, when the expression was handled
524
+ */
525
+ const handleObjectLiteralExport = (expr, base) => {
526
+ // Only `module.exports = { … }` replaces the whole exports object.
527
+ if (base !== "module.exports") return;
528
+ if (
529
+ /** @type {StatementPath} */ (parser.statementPath).length !== 1 ||
530
+ !parser.isStatementLevelExpression(expr)
531
+ ) {
532
+ return;
533
+ }
534
+ const object = expr.right;
535
+ if (object.type !== "ObjectExpression") return;
536
+
537
+ const module = parser.state.module;
538
+ /** @type {JavascriptModuleBuildMeta} */ (
539
+ module.buildMeta
540
+ ).treatAsCommonJs = true;
541
+ // LHS stays as the text `module.exports` (moduleArgument is "module"
542
+ // unless a top-level `module` binding shadows it, which prevents this hook).
543
+ module.addPresentationalDependency(
544
+ new RuntimeRequirementsDependency([RuntimeGlobals.module])
545
+ );
546
+
547
+ // one unknown key makes the whole object opaque, so name them all first
548
+ /** @type {string[]} */
549
+ const names = [];
550
+ for (const property of object.properties) {
551
+ const name = getStaticPropertyName(property);
552
+ if (name === undefined) {
553
+ bailout(
554
+ `module.exports = {…} cannot be statically analysed at ${formatLocation(
555
+ parser.getLocation(expr)
556
+ )}`
557
+ );
558
+ parser.walkExpression(object);
559
+ return true;
560
+ }
561
+ names.push(name);
562
+ }
563
+
564
+ enableStructuredExports();
565
+
566
+ for (let i = 0; i < object.properties.length; i++) {
567
+ const property = /** @type {Property} */ (object.properties[i]);
568
+ const name = names[i];
569
+ const value = /** @type {Expression} */ (property.value);
570
+ const kind = getObjectExportKind(property);
571
+ // a shorthand has no value text of its own to replace
572
+ const valueRange = /** @type {Range} */ (
573
+ kind === "shorthand" ? property.range : value.range
574
+ );
575
+ // scans the key/value gap, so `/*#__PURE__*/` is picked up here
576
+ const pure =
577
+ kind === "keyValue" &&
578
+ parser.isPure(value, /** @type {Range} */ (property.key.range)[1]);
579
+
580
+ if (name === "__esModule") {
581
+ checkNamespace(true, ["__esModule"], value);
582
+ }
583
+
584
+ const dep = new CommonJsObjectExportDependency(
585
+ /** @type {Range} */ (property.range),
586
+ /** @type {Range} */ (property.key.range),
587
+ valueRange,
588
+ name,
589
+ kind,
590
+ pure
591
+ );
592
+ dep.loc = parser.getLocation(property);
593
+ module.addDependency(dep);
594
+
595
+ keepAllExportsOnThisAccess(value, base);
596
+ // Tag nested requires so unused get/set/method can disconnect them.
597
+ const start = FUNCTION_PROPERTY_DROP_HEAD.has(kind)
598
+ ? module.dependencies.length
599
+ : -1;
600
+ parser.walkExpression(value);
601
+ if (start !== -1) {
602
+ const usedByExports = new Set([name]);
603
+ for (let j = start; j < module.dependencies.length; j++) {
604
+ const nested = module.dependencies[j];
605
+ if (
606
+ nested instanceof CommonJsRequireDependency ||
607
+ nested instanceof CommonJsFullRequireDependency
608
+ ) {
609
+ nested.usedByExports = usedByExports;
610
+ }
611
+ }
612
+ }
613
+ }
614
+ return true;
615
+ };
441
616
  parser.hooks.assignMemberChain
442
617
  .for("exports")
443
618
  .tap(PLUGIN_NAME, (expr, members) =>
@@ -638,8 +813,15 @@ class CommonJsExportsParserPlugin {
638
813
 
639
814
  // Bailouts //
640
815
  parser.hooks.expression.for("module").tap(PLUGIN_NAME, (expr) => {
641
- bailout();
642
816
  const isHarmony = HarmonyExports.isEnabled(parser.state);
817
+ // Silent under ESM, where `HarmonyExports` governs and nothing was lost.
818
+ bailout(
819
+ isHarmony
820
+ ? undefined
821
+ : `module is used directly at ${formatLocation(
822
+ parser.getLocation(expr)
823
+ )}`
824
+ );
643
825
  const dep = new ModuleDecoratorDependency(
644
826
  isHarmony
645
827
  ? RuntimeGlobals.harmonyModuleDecorator
@@ -6,33 +6,38 @@
6
6
  "use strict";
7
7
 
8
8
  const Template = require("../Template");
9
+ const {
10
+ getDependencyUsedByExportsCondition
11
+ } = require("../optimize/InnerGraph");
9
12
  const { equals } = require("../util/ArrayHelpers");
10
13
  const { getTrimmedIdsAndRange } = require("../util/chainedImports");
11
14
  const makeSerializable = require("../util/makeSerializable");
12
- const memoize = require("../util/memoize");
13
15
  const { propertyAccess } = require("../util/property");
14
16
  const {
15
17
  ESM_MODULE_EXPORTS_NAME,
16
18
  getRequireEsmModuleExportsAccess,
17
19
  isRequireEsmModuleExportsModule
18
20
  } = require("./CommonJsDependencyHelpers");
21
+ const HarmonyImportGuard = require("./HarmonyImportGuard");
19
22
  const ModuleDependency = require("./ModuleDependency");
20
23
 
21
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
22
- /** @typedef {import("../Dependency")} Dependency */
23
- /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
24
- /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
25
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
26
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
27
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
28
- /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
29
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
30
- /** @typedef {import("../util/chainedImports").IdRanges} IdRanges */
31
- /** @typedef {import("./HarmonyImportGuard").DependencyGuard} DependencyGuard */
32
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[ExportInfoName[], IdRanges | undefined, boolean, undefined | boolean, DependencyGuard[] | undefined]>} ObjectDeserializerContext */
33
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[ExportInfoName[], IdRanges | undefined, boolean, undefined | boolean, DependencyGuard[] | undefined]>} ObjectSerializerContext */
34
-
35
- const getHarmonyImportGuard = memoize(() => require("./HarmonyImportGuard"));
24
+ /** @import { ReplaceSource } from "webpack-sources" */
25
+ /**
26
+ * @import Dependency, {
27
+ * GetConditionFn,
28
+ * ReferencedExports,
29
+ * ExportInfoName
30
+ * } from "../Dependency"
31
+ */
32
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
33
+ /** @import ModuleGraph from "../ModuleGraph" */
34
+ /** @import { Range } from "../javascript/JavascriptParser" */
35
+ /** @import { UsedByExports } from "../optimize/InnerGraph" */
36
+ /** @import { RuntimeSpec } from "../util/runtime" */
37
+ /** @import { IdRanges } from "../util/chainedImports" */
38
+ /** @import { DependencyGuard } from "./HarmonyImportGuard" */
39
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[ExportInfoName[], IdRanges | undefined, boolean, undefined | boolean, DependencyGuard[] | undefined, boolean, boolean, UsedByExports | undefined]>} ObjectDeserializerContext */
40
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[ExportInfoName[], IdRanges | undefined, boolean, undefined | boolean, DependencyGuard[] | undefined, boolean, boolean, UsedByExports | undefined]>} ObjectSerializerContext */
36
41
 
37
42
  class CommonJsFullRequireDependency extends ModuleDependency {
38
43
  /**
@@ -56,10 +61,16 @@ class CommonJsFullRequireDependency extends ModuleDependency {
56
61
  this.idRanges = idRanges;
57
62
  /** @type {boolean} */
58
63
  this.call = false;
64
+ /** @type {boolean} */
65
+ this.namespaceObjectAsContext = false;
59
66
  /** @type {undefined | boolean} */
60
67
  this.asiSafe = undefined;
61
68
  /** @type {DependencyGuard[] | undefined} */
62
69
  this.branchGuards = undefined;
70
+ /** @type {UsedByExports | undefined} */
71
+ this.usedByExports = undefined;
72
+ /** @type {boolean} */
73
+ this._canConcatenate = false;
63
74
  }
64
75
 
65
76
  /**
@@ -68,10 +79,34 @@ class CommonJsFullRequireDependency extends ModuleDependency {
68
79
  * @returns {null | false | GetConditionFn} function to determine if the connection is active
69
80
  */
70
81
  getCondition(moduleGraph) {
82
+ const usedByExportsCondition =
83
+ this.usedByExports !== undefined
84
+ ? getDependencyUsedByExportsCondition(this, moduleGraph)
85
+ : null;
86
+ if (usedByExportsCondition === false) return false;
71
87
  const guards = this.branchGuards;
72
- if (guards === undefined) return null;
73
- return (connection, runtime) =>
74
- !getHarmonyImportGuard().isDeadByGuards(guards, moduleGraph, runtime);
88
+ if (usedByExportsCondition === null && guards === undefined) return null;
89
+ return (connection, runtime) => {
90
+ if (
91
+ usedByExportsCondition !== null &&
92
+ usedByExportsCondition(connection, runtime) === false
93
+ ) {
94
+ return false;
95
+ }
96
+ return !(
97
+ guards !== undefined &&
98
+ HarmonyImportGuard.isDeadByGuards(guards, moduleGraph, runtime)
99
+ );
100
+ };
101
+ }
102
+
103
+ /**
104
+ * Returns true if this dependency can be concatenated
105
+ * @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
106
+ * @returns {boolean} true if this dependency can be concatenated
107
+ */
108
+ canConcatenate(concatenateCommonJsModules) {
109
+ return concatenateCommonJsModules && this._canConcatenate;
75
110
  }
76
111
 
77
112
  /**
@@ -95,6 +130,8 @@ class CommonJsFullRequireDependency extends ModuleDependency {
95
130
  if (
96
131
  this.call &&
97
132
  (!importedModule ||
133
+ // the namespace object of a required ESM module is the call receiver
134
+ this.namespaceObjectAsContext ||
98
135
  importedModule.getExportsType(moduleGraph, false) !== "namespace")
99
136
  ) {
100
137
  return [{ name: this.names.slice(0, -1), canInline: false }];
@@ -112,7 +149,10 @@ class CommonJsFullRequireDependency extends ModuleDependency {
112
149
  .write(this.idRanges)
113
150
  .write(this.call)
114
151
  .write(this.asiSafe)
115
- .write(this.branchGuards);
152
+ .write(this.branchGuards)
153
+ .write(this._canConcatenate)
154
+ .write(this.namespaceObjectAsContext)
155
+ .write(this.usedByExports);
116
156
  super.serialize(context);
117
157
  }
118
158
 
@@ -130,7 +170,13 @@ class CommonJsFullRequireDependency extends ModuleDependency {
130
170
  this.asiSafe = c3.read();
131
171
  const c4 = c3.rest;
132
172
  this.branchGuards = c4.read();
133
- super.deserialize(c4.rest);
173
+ const c5 = c4.rest;
174
+ this._canConcatenate = c5.read();
175
+ const c6 = c5.rest;
176
+ this.namespaceObjectAsContext = c6.read();
177
+ const c7 = c6.rest;
178
+ this.usedByExports = c7.read();
179
+ super.deserialize(c7.rest);
134
180
  }
135
181
 
136
182
  get type() {
@@ -155,7 +201,14 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
155
201
  apply(
156
202
  dependency,
157
203
  source,
158
- { runtimeTemplate, moduleGraph, chunkGraph, runtimeRequirements, runtime }
204
+ {
205
+ runtimeTemplate,
206
+ moduleGraph,
207
+ chunkGraph,
208
+ runtimeRequirements,
209
+ runtime,
210
+ concatenationScope
211
+ }
159
212
  ) {
160
213
  const dep = /** @type {CommonJsFullRequireDependency} */ (dependency);
161
214
  if (!dep.range) return;
@@ -167,17 +220,6 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
167
220
  return;
168
221
  }
169
222
  const importedModule = moduleGraph.getModule(dep);
170
- let requireExpr = runtimeTemplate.moduleExports({
171
- module: importedModule,
172
- chunkGraph,
173
- request: dep.request,
174
- weak: dep.weak,
175
- runtimeRequirements
176
- });
177
-
178
- const esmRequireAccess = importedModule
179
- ? getRequireEsmModuleExportsAccess(importedModule, moduleGraph, runtime)
180
- : null;
181
223
 
182
224
  const {
183
225
  trimmedRange: [trimmedRangeStart, trimmedRangeEnd],
@@ -190,6 +232,49 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
190
232
  dep
191
233
  );
192
234
 
235
+ if (concatenationScope) {
236
+ const connection = moduleGraph.getConnection(dep);
237
+ if (
238
+ connection &&
239
+ importedModule &&
240
+ concatenationScope.isModuleInScope(importedModule)
241
+ ) {
242
+ // `require(esm)` unwraps the "module.exports" export and the member
243
+ // chain hangs off it; without that prefix the ids name exports the
244
+ // module never declares.
245
+ const ids = isRequireEsmModuleExportsModule(
246
+ connection.module,
247
+ moduleGraph
248
+ )
249
+ ? [ESM_MODULE_EXPORTS_NAME, ...trimmedIds]
250
+ : trimmedIds;
251
+
252
+ source.replace(
253
+ trimmedRangeStart,
254
+ trimmedRangeEnd - 1,
255
+ concatenationScope.createModuleReference(connection.module, {
256
+ ids: ids.length > 0 ? ids : undefined,
257
+ call: dep.call,
258
+ asiSafe: dep.asiSafe,
259
+ moduleExportsAccess: true
260
+ })
261
+ );
262
+ return;
263
+ }
264
+ }
265
+
266
+ let requireExpr = runtimeTemplate.moduleExports({
267
+ module: importedModule,
268
+ chunkGraph,
269
+ request: dep.request,
270
+ weak: dep.weak,
271
+ runtimeRequirements
272
+ });
273
+
274
+ const esmRequireAccess = importedModule
275
+ ? getRequireEsmModuleExportsAccess(importedModule, moduleGraph, runtime)
276
+ : null;
277
+
193
278
  if (esmRequireAccess !== null) {
194
279
  const access = `${esmRequireAccess}${propertyAccess(trimmedIds)}`;
195
280
  requireExpr =
@@ -197,7 +282,7 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
197
282
  ? `(${requireExpr}${access})`
198
283
  : `${requireExpr}${access}`;
199
284
  } else if (importedModule) {
200
- // CJS exports are never inlined
285
+ // CJS required are never inlined
201
286
  const usedImported = /** @type {string | string[] | false} */ (
202
287
  moduleGraph
203
288
  .getExportsInfo(importedModule)