@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
@@ -25,55 +25,75 @@ const WebpackError = require("./WebpackError");
25
25
  const { DEFAULTS } = require("./config/defaults");
26
26
  const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
27
27
  const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
28
- const EnvironmentNotSupportAsyncWarning = require("./errors/EnvironmentNotSupportAsyncWarning");
29
28
  const { coreModules } = require("./node/nodeBuiltins");
30
29
  const createHash = require("./util/createHash");
31
30
  const createHooksRegistry = require("./util/createHooksRegistry");
32
31
  const extractUrlAndGlobal = require("./util/extractUrlAndGlobal");
33
32
  const makeSerializable = require("./util/makeSerializable");
33
+ const memoize = require("./util/memoize");
34
34
  const { propertyAccess } = require("./util/property");
35
35
  const { register } = require("./util/serialization");
36
36
 
37
- /** @typedef {import("webpack-sources").Source} Source */
38
- /** @typedef {import("../declarations/WebpackOptions").ExternalsType} ExternalsType */
39
- /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
40
- /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
41
- /** @typedef {import("./Chunk")} Chunk */
42
- /** @typedef {import("./ChunkGraph")} ChunkGraph */
43
- /** @typedef {import("./Compilation")} Compilation */
44
- /** @typedef {import("./Compilation").UnsafeCacheData} UnsafeCacheData */
45
- /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
46
- /** @typedef {import("./ExportsInfo")} ExportsInfo */
47
- /** @typedef {import("./Generator").GenerateContext} GenerateContext */
48
- /** @typedef {import("./Generator").SourceTypes} SourceTypes */
49
- /** @typedef {import("./Module").ModuleId} ModuleId */
50
- /** @typedef {import("./Module").BuildCallback} BuildCallback */
51
- /** @typedef {import("./Module").BuildInfo} BuildInfo */
52
- /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
53
- /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
54
- /** @typedef {import("./Module").CodeGenerationResultData} CodeGenerationResultData */
55
- /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
56
- /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
57
- /** @typedef {import("./Module").LibIdent} LibIdent */
58
- /** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
59
- /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
60
- /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
61
- /** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
62
- /** @typedef {import("./Module").Sources} Sources */
63
- /** @typedef {import("./ModuleGraph")} ModuleGraph */
64
- /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
65
- /** @typedef {import("./RequestShortener")} RequestShortener */
66
- /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
67
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
68
- /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
69
- /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
70
- /** @typedef {import("./dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
71
- /** @typedef {import("../declarations/WebpackOptions").ExternalItemInterop} ExternalInterop */
72
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext<[ExternalModuleRequest, ExternalsType, string, DependencyMeta | undefined, ExternalInterop | undefined]>} ObjectDeserializerContext */
73
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext<[ExternalModuleRequest, ExternalsType, string, DependencyMeta | undefined, ExternalInterop | undefined]>} ObjectSerializerContext */
74
- /** @typedef {import("./util/Hash")} Hash */
75
- /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
76
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
37
+ const getEnvironmentNotSupportAsyncWarning = memoize(() =>
38
+ require("./errors/EnvironmentNotSupportAsyncWarning")
39
+ );
40
+
41
+ /** @import { Source } from "webpack-sources" */
42
+ /**
43
+ * @import {
44
+ * ExternalsType,
45
+ * HashFunction,
46
+ * ExternalItemInterop as ExternalInterop
47
+ * } from "../declarations/WebpackOptions"
48
+ */
49
+ /**
50
+ * @import {
51
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
52
+ * } from "./config/defaults"
53
+ */
54
+ /** @import Chunk from "./Chunk" */
55
+ /** @import ChunkGraph, { ModuleId } from "./ChunkGraph" */
56
+ /** @import Compilation, { UnsafeCacheData } from "./Compilation" */
57
+ /** @import { UpdateHashContext } from "./Dependency" */
58
+ /** @import ExportsInfo from "./ExportsInfo" */
59
+ /** @import { GenerateContext } from "./Generator" */
60
+ /**
61
+ * @import {
62
+ * BuildMeta,
63
+ * BuildCallback,
64
+ * BuildInfo,
65
+ * CodeGenerationContext,
66
+ * CodeGenerationResult,
67
+ * CodeGenerationResultData,
68
+ * ConcatenationBailoutReasonContext,
69
+ * LibIdentOptions,
70
+ * LibIdent,
71
+ * NeedBuildCallback,
72
+ * NeedBuildContext,
73
+ * RuntimeRequirements,
74
+ * ReadOnlyRuntimeRequirements,
75
+ * Sources,
76
+ * SourceTypes
77
+ * } from "./Module"
78
+ */
79
+ /** @import ModuleGraph from "./ModuleGraph" */
80
+ /** @import { ConnectionState } from "./ModuleGraphConnection" */
81
+ /** @import NormalModuleFactory from "./NormalModuleFactory" */
82
+ /** @import RequestShortener from "./RequestShortener" */
83
+ /** @import { ResolverWithOptions } from "./ResolverFactory" */
84
+ /** @import RuntimeTemplate from "./RuntimeTemplate" */
85
+ /**
86
+ * @import {
87
+ * ChunkRenderContext
88
+ * } from "./javascript/JavascriptModulesPlugin"
89
+ */
90
+ /** @import { ImportAttributes } from "./javascript/JavascriptParser" */
91
+ /** @import { ImportPhaseType } from "./dependencies/ImportPhase" */
92
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext<[ExternalModuleRequest, ExternalsType, string, DependencyMeta | undefined, ExternalInterop | undefined, boolean | undefined]>} ObjectDeserializerContext */
93
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext<[ExternalModuleRequest, ExternalsType, string, DependencyMeta | undefined, ExternalInterop | undefined, boolean | undefined]>} ObjectSerializerContext */
94
+ /** @import Hash from "./util/Hash" */
95
+ /** @import { InputFileSystem } from "./util/fs" */
96
+ /** @import { RuntimeSpec } from "./util/runtime" */
77
97
 
78
98
  /** @typedef {{ attributes?: ImportAttributes, phase?: ImportPhaseType, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
79
99
  /** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
@@ -277,6 +297,32 @@ const getSourceForCommonJsExternalInNodeModule = (
277
297
  };
278
298
  };
279
299
 
300
+ /**
301
+ * A phase is syntax the target has to read, with no form to fall back to. Reported
302
+ * like the `import()` check beside it, so the build fails rather than the bundle.
303
+ * @param {ImportPhaseType | undefined} phase the phase the reference asks for
304
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
305
+ * @returns {void}
306
+ */
307
+ const checkPhaseIsSupported = (phase, runtimeTemplate) => {
308
+ if (
309
+ ImportPhaseUtils.isDefer(phase) &&
310
+ !runtimeTemplate.supportsDeferImport()
311
+ ) {
312
+ throw new Error(
313
+ "The target environment doesn't support 'import defer', so an external cannot be imported in the defer phase. Set 'output.environment.deferImport' when the target reads it."
314
+ );
315
+ }
316
+ if (
317
+ ImportPhaseUtils.isSource(phase) &&
318
+ !runtimeTemplate.supportsSourceImport()
319
+ ) {
320
+ throw new Error(
321
+ "The target environment doesn't support 'import source', so an external cannot be imported in the source phase. Set 'output.environment.sourceImport' when the target reads it."
322
+ );
323
+ }
324
+ };
325
+
280
326
  /**
281
327
  * Gets source for import external.
282
328
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
@@ -299,15 +345,24 @@ const getSourceForImportExternal = (
299
345
  );
300
346
  }
301
347
  const phase = dependencyMeta && dependencyMeta.phase;
348
+ checkPhaseIsSupported(phase, runtimeTemplate);
302
349
  // `import.defer(…)` and `import.source(…)` are only valid forms of the
303
350
  // native `import(…)` function, so we only emit the phase suffix when the
304
- // importFunctionName is the default `"import"`.
305
- const importName =
306
- baseImportName === "import" && ImportPhaseUtils.isDefer(phase)
307
- ? "import.defer"
308
- : baseImportName === "import" && ImportPhaseUtils.isSource(phase)
309
- ? "import.source"
310
- : baseImportName;
351
+ // importFunctionName is the default `"import"`. Anything else has no phase
352
+ // form at all, and dropping it would silently import eagerly instead.
353
+ if (
354
+ baseImportName !== "import" &&
355
+ (ImportPhaseUtils.isDefer(phase) || ImportPhaseUtils.isSource(phase))
356
+ ) {
357
+ throw new Error(
358
+ `'import.defer' and 'import.source' are forms of the native 'import()', so an external cannot be imported in a phase while 'output.importFunctionName' is '${baseImportName}'`
359
+ );
360
+ }
361
+ const importName = ImportPhaseUtils.isDefer(phase)
362
+ ? "import.defer"
363
+ : ImportPhaseUtils.isSource(phase)
364
+ ? "import.source"
365
+ : baseImportName;
311
366
  const attributes =
312
367
  dependencyMeta && dependencyMeta.attributes
313
368
  ? dependencyMeta.attributes._isLegacyAssert
@@ -317,18 +372,24 @@ const getSourceForImportExternal = (
317
372
  )} }`
318
373
  : `, { with: ${JSON.stringify(dependencyMeta.attributes)} }`
319
374
  : "";
375
+ // `import.source(…)` resolves to the source object itself, while every other
376
+ // external here resolves to a namespace. Consumers unwrap `default` to reach a
377
+ // source, so hand them that shape rather than a value they read `default` off.
378
+ const asNamespace = ImportPhaseUtils.isSource(phase)
379
+ ? `.then(${runtimeTemplate.returningFunction('{ "default": m }', "m")})`
380
+ : "";
320
381
  if (!Array.isArray(moduleAndSpecifiers)) {
321
382
  return {
322
383
  expression: `${importName}(${JSON.stringify(
323
384
  moduleAndSpecifiers
324
- )}${attributes});`
385
+ )}${attributes})${asNamespace};`
325
386
  };
326
387
  }
327
388
  if (moduleAndSpecifiers.length === 1) {
328
389
  return {
329
390
  expression: `${importName}(${JSON.stringify(
330
391
  moduleAndSpecifiers[0]
331
- )}${attributes});`
392
+ )}${attributes})${asNamespace};`
332
393
  };
333
394
  }
334
395
  const moduleName = moduleAndSpecifiers[0];
@@ -384,6 +445,14 @@ class ModuleExternalInitFragment extends InitFragment {
384
445
  .digest("hex")
385
446
  .slice(0, 8)}`;
386
447
  }
448
+ // One request in two phases is two imports, so the phase must reach the dedupe
449
+ // key and the binding name — otherwise one silently replaces the other.
450
+ const phase = dependencyMeta && dependencyMeta.phase;
451
+ if (ImportPhaseUtils.isDefer(phase)) {
452
+ ident += "_defer";
453
+ } else if (ImportPhaseUtils.isSource(phase)) {
454
+ ident += "_source";
455
+ }
387
456
  }
388
457
 
389
458
  super(
@@ -444,8 +513,15 @@ class ModuleExternalInitFragment extends InitFragment {
444
513
  : ` with ${JSON.stringify(dependencyMeta.attributes)}`
445
514
  : "";
446
515
  const phase = dependencyMeta && dependencyMeta.phase;
516
+ checkPhaseIsSupported(phase, context.runtimeTemplate);
447
517
  let content = "";
448
- if (imported === true) {
518
+ if (ImportPhaseUtils.isSource(phase) && imported === true) {
519
+ // There is no `import source * as ns` form: the source phase binds one
520
+ // identifier, so it stands in for the namespace the other branches build.
521
+ content = `import source ${identifier} from ${JSON.stringify(
522
+ request
523
+ )}${attributes};\n`;
524
+ } else if (imported === true) {
449
525
  // namespace
450
526
  const phaseKeyword = ImportPhaseUtils.isDefer(phase) ? "defer " : "";
451
527
  content = `import ${phaseKeyword}* as ${identifier} from ${JSON.stringify(
@@ -621,6 +697,16 @@ const getSourceForModuleExternal = (
621
697
  imported = true;
622
698
  }
623
699
 
700
+ // A source phase binds `default` alone. With nothing used the list would be empty
701
+ // and emit `import "…"`, evaluating the module whose source was asked for instead.
702
+ if (
703
+ ImportPhaseUtils.isSource(phase) &&
704
+ Array.isArray(imported) &&
705
+ imported.length === 0
706
+ ) {
707
+ imported = [["default", "default"]];
708
+ }
709
+
624
710
  const initFragment = new ModuleExternalInitFragment(
625
711
  moduleAndSpecifiers[0],
626
712
  imported,
@@ -636,7 +722,9 @@ const getSourceForModuleExternal = (
636
722
  )}`;
637
723
  let expression = baseAccess;
638
724
 
639
- const useNamespace = imported === true;
725
+ // A source-phase binding is not a namespace object, so nothing about it can be
726
+ // remapped export by export — the binding itself is what the reference reads.
727
+ const useNamespace = imported === true && !ImportPhaseUtils.isSource(phase);
640
728
  /** @type {undefined | string} */
641
729
  let moduleRemapping;
642
730
  if (useNamespace) {
@@ -653,7 +741,9 @@ const getSourceForModuleExternal = (
653
741
  init: moduleRemapping
654
742
  ? `${runtimeTemplate.renderConst()} x = ${runtimeTemplate.basicFunction(
655
743
  "y",
656
- `${runtimeTemplate.renderConst()} x = {}; ${RuntimeGlobals.definePropertyGetters}(x, y); return x`
744
+ `${runtimeTemplate.renderConst()} x = {}; ${
745
+ RuntimeGlobals.definePropertyGetters
746
+ }(x, y); return x`
657
747
  )} \n${runtimeTemplate.renderConst()} y = ${runtimeTemplate.returningFunction(
658
748
  runtimeTemplate.returningFunction("x"),
659
749
  "x"
@@ -838,8 +928,16 @@ class ExternalModule extends Module {
838
928
  * @param {string} userRequest user request
839
929
  * @param {DependencyMeta=} dependencyMeta dependency meta
840
930
  * @param {ExternalInterop=} interop how the external's exports interoperate with ES module imports
931
+ * @param {boolean=} sideEffects whether importing the external has side effects (undefined = assume it has)
841
932
  */
842
- constructor(request, type, userRequest, dependencyMeta, interop) {
933
+ constructor(
934
+ request,
935
+ type,
936
+ userRequest,
937
+ dependencyMeta,
938
+ interop,
939
+ sideEffects
940
+ ) {
843
941
  super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
844
942
 
845
943
  // Redeclared with the external module specific shape
@@ -857,6 +955,11 @@ class ExternalModule extends Module {
857
955
  this.dependencyMeta = dependencyMeta;
858
956
  /** @type {ExternalInterop | undefined} interop shape of the external's exports (undefined = importer-driven default) */
859
957
  this.interop = interop;
958
+ /** @type {boolean | undefined} declared side-effects state (undefined = assume side effects, webpack can't analyze an external) */
959
+ this.sideEffects = sideEffects;
960
+ if (sideEffects !== undefined) {
961
+ this.factoryMeta = { sideEffectFree: !sideEffects };
962
+ }
860
963
  }
861
964
 
862
965
  /**
@@ -864,17 +967,14 @@ class ExternalModule extends Module {
864
967
  * @returns {SourceTypes} types available (do not mutate)
865
968
  */
866
969
  getSourceTypes() {
867
- if (this.externalType === "asset" && this.dependencyMeta) {
868
- const sourceType =
869
- /** @type {AssetDependencyMeta} */
870
- (this.dependencyMeta).sourceType;
871
- // TODO webpack 6 drop "css-url" once the alias is removed
872
- if (sourceType === ASSET_URL_TYPE || sourceType === "css-url") {
873
- return ASSET_URL_TYPES;
874
- }
875
- } else if (this.externalType === "css-import") {
876
- return CSS_IMPORT_TYPES;
970
+ // resolved, so a type rendering no javascript is never reported as a
971
+ // javascript module — that would emit a dead `false` factory in the chunk
972
+ const type = this._resolveExternalType(this.externalType);
973
+ // TODO webpack 6 drop "css-url" once the alias is removed
974
+ if (type === ASSET_URL_TYPE || type === "css-url") {
975
+ return ASSET_URL_TYPES;
877
976
  }
977
+ if (type === "css-import") return CSS_IMPORT_TYPES;
878
978
 
879
979
  return JAVASCRIPT_TYPES;
880
980
  }
@@ -909,6 +1009,19 @@ class ExternalModule extends Module {
909
1009
  return compilation.chunkGraph.getNumberOfEntryModules(chunk) > 0;
910
1010
  }
911
1011
 
1012
+ /**
1013
+ * Gets side effects connection state.
1014
+ * @param {ModuleGraph} moduleGraph the module graph
1015
+ * @returns {ConnectionState} how this module should be connected to referencing modules when consumed for side-effects only
1016
+ */
1017
+ getSideEffectsConnectionState(moduleGraph) {
1018
+ if (this.factoryMeta !== undefined) {
1019
+ if (this.factoryMeta.sideEffectFree) return false;
1020
+ if (this.factoryMeta.sideEffectFree === false) return true;
1021
+ }
1022
+ return true;
1023
+ }
1024
+
912
1025
  /**
913
1026
  * Returns the unique identifier used to reference this module.
914
1027
  * @returns {string} a unique identifier of the module
@@ -929,6 +1042,11 @@ class ExternalModule extends Module {
929
1042
  }
930
1043
  }
931
1044
  if (this.interop) id += `|interop=${this.interop}`;
1045
+ // two externals for the same target with a different side-effects state
1046
+ // must not be merged into one module
1047
+ if (this.sideEffects !== undefined) {
1048
+ id += `|sideEffects=${this.sideEffects}`;
1049
+ }
932
1050
  return id;
933
1051
  }
934
1052
 
@@ -1014,7 +1132,7 @@ class ExternalModule extends Module {
1014
1132
  }
1015
1133
  } else {
1016
1134
  this.buildMeta.async = true;
1017
- EnvironmentNotSupportAsyncWarning.check(
1135
+ getEnvironmentNotSupportAsyncWarning().check(
1018
1136
  this,
1019
1137
  compilation.runtimeTemplate,
1020
1138
  "external module"
@@ -1027,7 +1145,7 @@ class ExternalModule extends Module {
1027
1145
  break;
1028
1146
  case "script":
1029
1147
  this.buildMeta.async = true;
1030
- EnvironmentNotSupportAsyncWarning.check(
1148
+ getEnvironmentNotSupportAsyncWarning().check(
1031
1149
  this,
1032
1150
  compilation.runtimeTemplate,
1033
1151
  "external script"
@@ -1035,7 +1153,7 @@ class ExternalModule extends Module {
1035
1153
  break;
1036
1154
  case "promise":
1037
1155
  this.buildMeta.async = true;
1038
- EnvironmentNotSupportAsyncWarning.check(
1156
+ getEnvironmentNotSupportAsyncWarning().check(
1039
1157
  this,
1040
1158
  compilation.runtimeTemplate,
1041
1159
  "external promise"
@@ -1043,7 +1161,7 @@ class ExternalModule extends Module {
1043
1161
  break;
1044
1162
  case "amd-async":
1045
1163
  this.buildMeta.async = true;
1046
- EnvironmentNotSupportAsyncWarning.check(
1164
+ getEnvironmentNotSupportAsyncWarning().check(
1047
1165
  this,
1048
1166
  compilation.runtimeTemplate,
1049
1167
  "external amd-async"
@@ -1051,7 +1169,7 @@ class ExternalModule extends Module {
1051
1169
  break;
1052
1170
  case "import":
1053
1171
  this.buildMeta.async = true;
1054
- EnvironmentNotSupportAsyncWarning.check(
1172
+ getEnvironmentNotSupportAsyncWarning().check(
1055
1173
  this,
1056
1174
  compilation.runtimeTemplate,
1057
1175
  "external import"
@@ -1107,6 +1225,19 @@ class ExternalModule extends Module {
1107
1225
  return undefined;
1108
1226
  }
1109
1227
 
1228
+ /**
1229
+ * @returns {boolean} true, when it may be wrapped
1230
+ */
1231
+ canBeWrappedInConcatenation() {
1232
+ if (/** @type {BuildMeta} */ (this.buildMeta).async) {
1233
+ return false;
1234
+ }
1235
+ // every other synchronous type is a plain expression; only "module"
1236
+ // renders as a hoisted `import` declaration, and passing it the
1237
+ // concatenation scope is what narrows it to named specifiers
1238
+ return this._resolveExternalType(this.externalType) !== "module";
1239
+ }
1240
+
1110
1241
  /**
1111
1242
  * Get request and external type.
1112
1243
  * @private
@@ -1138,7 +1269,14 @@ class ExternalModule extends Module {
1138
1269
  .externalType;
1139
1270
  }
1140
1271
  return "module";
1141
- } else if (externalType === "asset") {
1272
+ } else if (
1273
+ // TODO webpack 6 drop "css-url" once the alias is removed
1274
+ externalType === "asset" ||
1275
+ externalType === ASSET_URL_TYPE ||
1276
+ externalType === "css-url"
1277
+ ) {
1278
+ // the consumer decides: a css `url()` reads the url out of the module
1279
+ // (marked by the factory), a `new URL()` requires the `asset` wrapper
1142
1280
  if (
1143
1281
  this.dependencyMeta &&
1144
1282
  /** @type {AssetDependencyMeta} */
@@ -1343,6 +1481,13 @@ class ExternalModule extends Module {
1343
1481
  };
1344
1482
  }
1345
1483
  default: {
1484
+ // A wrapped external runs as a module body inside the wrapper, so it
1485
+ // renders the plain `module.exports =` form: its exports are read
1486
+ // through the wrapper accessor, not through a shared-scope binding.
1487
+ const wrapped = Boolean(
1488
+ concatenationScope &&
1489
+ /** @type {ConcatenationScope} */ (concatenationScope).isWrapped()
1490
+ );
1346
1491
  const sourceData = this._getSourceData(
1347
1492
  request,
1348
1493
  externalType,
@@ -1351,7 +1496,7 @@ class ExternalModule extends Module {
1351
1496
  chunkGraph,
1352
1497
  runtime,
1353
1498
  this.dependencyMeta,
1354
- concatenationScope
1499
+ wrapped ? undefined : concatenationScope
1355
1500
  );
1356
1501
 
1357
1502
  // sourceString can be empty str only when there is concatenationScope
@@ -1365,9 +1510,12 @@ class ExternalModule extends Module {
1365
1510
  sourceString = "";
1366
1511
  const scope = /** @type {ConcatenationScope} */ (concatenationScope);
1367
1512
  for (const [specifier, finalName] of specifiers) {
1513
+ // the hoisted `import { x as finalName }` binding is a top-level
1514
+ // name of the chunk, reserve it before members get renamed
1515
+ scope.usedNames.add(finalName);
1368
1516
  scope.registerRawExport(specifier, finalName);
1369
1517
  }
1370
- } else if (concatenationScope) {
1518
+ } else if (concatenationScope && !wrapped) {
1371
1519
  sourceString = `${runtimeTemplate.renderConst()} ${
1372
1520
  ConcatenationScope.NAMESPACE_OBJECT_EXPORT
1373
1521
  } = ${sourceString};`;
@@ -1454,6 +1602,9 @@ class ExternalModule extends Module {
1454
1602
  }
1455
1603
  }
1456
1604
  if (this.interop) hash.update(`|interop=${this.interop}`);
1605
+ if (this.sideEffects !== undefined) {
1606
+ hash.update(`|sideEffects=${this.sideEffects}`);
1607
+ }
1457
1608
  super.updateHash(hash, context);
1458
1609
  }
1459
1610
 
@@ -1467,7 +1618,8 @@ class ExternalModule extends Module {
1467
1618
  .write(this.externalType)
1468
1619
  .write(this.userRequest)
1469
1620
  .write(this.dependencyMeta)
1470
- .write(this.interop);
1621
+ .write(this.interop)
1622
+ .write(this.sideEffects);
1471
1623
 
1472
1624
  super.serialize(context);
1473
1625
  }
@@ -1486,8 +1638,10 @@ class ExternalModule extends Module {
1486
1638
  this.dependencyMeta = c3.read();
1487
1639
  const c4 = c3.rest;
1488
1640
  this.interop = c4.read();
1641
+ const c5 = c4.rest;
1642
+ this.sideEffects = c5.read();
1489
1643
 
1490
- super.deserialize(c4.rest);
1644
+ super.deserialize(c5.rest);
1491
1645
  }
1492
1646
  }
1493
1647
 
@@ -1497,7 +1651,8 @@ ExternalModule.getCompilationHooks = createHooksRegistry(
1497
1651
 
1498
1652
  makeSerializable(ExternalModule, "webpack/lib/ExternalModule");
1499
1653
 
1500
- module.exports = ExternalModule;
1501
- module.exports.ModuleExternalInitFragment = ModuleExternalInitFragment;
1502
- module.exports.getExternalModuleNodeCommonjsInitFragment =
1654
+ ExternalModule.ModuleExternalInitFragment = ModuleExternalInitFragment;
1655
+ ExternalModule.getExternalModuleNodeCommonjsInitFragment =
1503
1656
  getExternalModuleNodeCommonjsInitFragment;
1657
+
1658
+ module.exports = ExternalModule;