@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const glob2regexp = require("glob-to-regexp");
8
+ const glob2regexp = require("watchpack").util.globToRegExp;
9
9
  const {
10
10
  JAVASCRIPT_MODULE_TYPE_AUTO,
11
11
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
@@ -13,23 +13,33 @@ const {
13
13
  } = require("../ModuleTypeConstants");
14
14
  const { STAGE_DEFAULT } = require("../OptimizationStages");
15
15
  const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
16
+ const HarmonyImportDependency = require("../dependencies/HarmonyImportDependency");
16
17
  const HarmonyImportSpecifierDependency = require("../dependencies/HarmonyImportSpecifierDependency");
17
- const formatLocation = require("../formatLocation");
18
+ const { ImportPhaseUtils } = require("../dependencies/ImportPhase");
19
+ const formatLocation = require("../util/formatLocation");
20
+ const { CompilerHintNotationRegExp } = require("../util/magicComment");
18
21
 
19
22
  /** @typedef {import("estree").MaybeNamedClassDeclaration} MaybeNamedClassDeclaration */
20
23
  /** @typedef {import("estree").MaybeNamedFunctionDeclaration} MaybeNamedFunctionDeclaration */
21
24
  /** @typedef {import("estree").ModuleDeclaration} ModuleDeclaration */
22
25
  /** @typedef {import("estree").Statement} Statement */
26
+ /** @typedef {import("estree").CallExpression} CallExpression */
23
27
  /** @typedef {import("../Compiler")} Compiler */
24
28
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
25
29
  /** @typedef {import("../Module")} Module */
30
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
31
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
26
32
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
33
+ /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
27
34
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
28
- /** @typedef {import("../NormalModuleFactory").ModuleSettings} ModuleSettings */
35
+ /** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
36
+ /** @typedef {import("../ExportsInfo").TargetItemWithConnection} TargetItemWithConnection */
29
37
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
30
38
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
39
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
31
40
 
32
41
  /**
42
+ * Defines the export in module type used by this module.
33
43
  * @typedef {object} ExportInModule
34
44
  * @property {Module} module the module
35
45
  * @property {string} exportName the name of the export
@@ -40,10 +50,25 @@ const formatLocation = require("../formatLocation");
40
50
 
41
51
  /** @typedef {Map<string, RegExp>} CacheItem */
42
52
 
53
+ /**
54
+ * Whether a resolved re-export target is reached through an `import defer` edge.
55
+ * Such edges must not be collapsed by the side-effect-free barrel optimization:
56
+ * the source module has to keep being reached through the barrel's cached
57
+ * deferred namespace so deferred-namespace identity and evaluation semantics are
58
+ * preserved.
59
+ * @param {ModuleGraphConnection | undefined} connection the target connection
60
+ * @returns {boolean} true when the target connection is a deferred import
61
+ */
62
+ const isDeferredTargetConnection = (connection) =>
63
+ connection !== undefined &&
64
+ connection.dependency instanceof HarmonyImportDependency &&
65
+ ImportPhaseUtils.isDefer(connection.dependency.phase);
66
+
43
67
  /** @type {WeakMap<Compiler, CacheItem>} */
44
68
  const globToRegexpCache = new WeakMap();
45
69
 
46
70
  /**
71
+ * Returns a regular expression.
47
72
  * @param {string} glob the pattern
48
73
  * @param {CacheItem} cache the glob to RegExp cache
49
74
  * @returns {RegExp} a regular expression
@@ -54,17 +79,68 @@ const globToRegexp = (glob, cache) => {
54
79
  if (!glob.includes("/")) {
55
80
  glob = `**/${glob}`;
56
81
  }
57
- const baseRegexp = glob2regexp(glob, { globstar: true, extended: true });
58
- const regexpSource = baseRegexp.source;
59
- const regexp = new RegExp(`^(\\./)?${regexpSource.slice(1)}`);
82
+ const regexpSource = glob2regexp(glob);
83
+ const regexp = new RegExp(`^(\\./)?${regexpSource}$`);
60
84
  cache.set(glob, regexp);
61
85
  return regexp;
62
86
  };
63
87
 
88
+ /**
89
+ * @param {JavascriptParser} parser parser
90
+ * @param {number} start start position
91
+ * @param {number} end end position
92
+ * @returns {boolean} if annotation is found in the range
93
+ */
94
+ const hasNoSideEffectsNotation = (parser, start, end) => {
95
+ // Fast path
96
+ if (end - start < 18) return false;
97
+
98
+ const comments = parser.getComments([start, end]);
99
+ return comments.some(
100
+ (c) =>
101
+ c.type === "Block" &&
102
+ CompilerHintNotationRegExp.NoSideEffects.test(c.value)
103
+ );
104
+ };
105
+
64
106
  const PLUGIN_NAME = "SideEffectsFlagPlugin";
65
107
 
108
+ const notSideEffectsTag = Symbol("NoSideEffects");
109
+
110
+ /** @type {(target: { module: Module }) => boolean} */
111
+ const RETURNS_FALSE = () => false;
112
+
113
+ /**
114
+ * Detects if the module is "pure single-star passthrough": one whose entire export
115
+ * surface is exactly one `export * from "x"` (no named/local/default-bearing
116
+ * exports, no second star). For such a module `export * from "passthrough"` is
117
+ * equivalent to `export * from "x"`, so the passthrough can be skipped.
118
+ * @param {Module} module the candidate passthrough module
119
+ * @returns {boolean} true when the module is a pure single-star passthrough
120
+ */
121
+ const moduleHasSingleStarReexport = (module) => {
122
+ /** @type {HarmonyExportImportedSpecifierDependency | undefined} */
123
+ let starReexportDep;
124
+ for (const dep of module.dependencies) {
125
+ if (!(dep instanceof HarmonyExportImportedSpecifierDependency)) continue;
126
+ // a named re-export (`export { x } from` / `export * as ns from`) means
127
+ // the module owns names a star into its source wouldn't reproduce
128
+ if (dep.name !== null) return false;
129
+ // any named/local export populates the shared activeExports set
130
+ if (dep.activeExports.size !== 0) return false;
131
+ // more than one `export *` can't be collapsed to a single source
132
+ if (dep.allStarExports && dep.allStarExports.dependencies.length !== 1) {
133
+ return false;
134
+ }
135
+ starReexportDep = dep;
136
+ }
137
+ if (starReexportDep === undefined) return false;
138
+ return true;
139
+ };
140
+
66
141
  class SideEffectsFlagPlugin {
67
142
  /**
143
+ * Creates an instance of SideEffectsFlagPlugin.
68
144
  * @param {boolean} analyseSource analyse source code for side effects
69
145
  */
70
146
  constructor(analyseSource = true) {
@@ -73,7 +149,7 @@ class SideEffectsFlagPlugin {
73
149
  }
74
150
 
75
151
  /**
76
- * Apply the plugin
152
+ * Applies the plugin by registering its hooks on the compiler.
77
153
  * @param {Compiler} compiler the compiler instance
78
154
  * @returns {void}
79
155
  */
@@ -111,7 +187,7 @@ class SideEffectsFlagPlugin {
111
187
  return module;
112
188
  });
113
189
  normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
114
- const settings = /** @type {ModuleSettings} */ (data.settings);
190
+ const settings = data.settings;
115
191
  if (typeof settings.sideEffects === "boolean") {
116
192
  if (module.factoryMeta === undefined) {
117
193
  module.factoryMeta = {};
@@ -122,10 +198,11 @@ class SideEffectsFlagPlugin {
122
198
  });
123
199
  if (this._analyseSource) {
124
200
  /**
201
+ * Processes the provided parser.
125
202
  * @param {JavascriptParser} parser the parser
126
203
  * @returns {void}
127
204
  */
128
- const parserHandler = (parser) => {
205
+ const applySideEffectsStmtHandler = (parser) => {
129
206
  /** @type {undefined | Statement | ModuleDeclaration | MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration} */
130
207
  let sideEffectsStatement;
131
208
  parser.hooks.program.tap(PLUGIN_NAME, () => {
@@ -244,18 +321,178 @@ class SideEffectsFlagPlugin {
244
321
  /** @type {BuildMeta} */
245
322
  (parser.state.module.buildMeta).sideEffectFree = true;
246
323
  } else {
247
- const { loc, type } = sideEffectsStatement;
324
+ const type = sideEffectsStatement.type;
325
+ const loc = parser.getLocation(sideEffectsStatement);
248
326
  moduleGraph
249
327
  .getOptimizationBailout(parser.state.module)
250
328
  .push(
251
329
  () =>
252
330
  `Statement (${type}) with side effects in source code at ${formatLocation(
253
- /** @type {DependencyLocation} */ (loc)
331
+ loc
254
332
  )}`
255
333
  );
256
334
  }
257
335
  });
258
336
  };
337
+
338
+ /**
339
+ * @param {JavascriptParser} parser the parser
340
+ * @param {JavascriptParserOptions} parserOptions the parser options
341
+ * @returns {void}
342
+ */
343
+ const applyNoSideEffectsNotationHandler = (parser, parserOptions) => {
344
+ /** @type {Set<string> | undefined} */
345
+ let pureFunctions;
346
+
347
+ const pureFunctionsFromOption =
348
+ parserOptions &&
349
+ Array.isArray(parserOptions.pureFunctions) &&
350
+ parserOptions.pureFunctions.length > 0
351
+ ? new Set(parserOptions.pureFunctions)
352
+ : undefined;
353
+
354
+ parser.hooks.program.tap(PLUGIN_NAME, () => {
355
+ pureFunctions = undefined;
356
+ });
357
+
358
+ /**
359
+ * @param {string} name function name
360
+ */
361
+ const markPure = (name) => {
362
+ if (pureFunctions === undefined) pureFunctions = new Set();
363
+ else if (pureFunctions.has(name)) return;
364
+ parser.tagVariable(name, notSideEffectsTag, {});
365
+ pureFunctions.add(name);
366
+ };
367
+
368
+ // Detect on function declarations
369
+ // Covers:
370
+ // 1. function foo
371
+ // 2. export function foo
372
+ // 3. export default function foo
373
+ // 4. export default function / export default () => {} (anonymous)
374
+ parser.hooks.preStatementByType
375
+ .for("FunctionDeclaration")
376
+ .tap(PLUGIN_NAME, (statement) => {
377
+ if (parser.scope.topLevelScope !== true) return;
378
+ if (statement.type !== "FunctionDeclaration") {
379
+ return;
380
+ }
381
+ const name = statement.id ? statement.id.name : "default";
382
+ if (
383
+ pureFunctionsFromOption &&
384
+ pureFunctionsFromOption.has(name)
385
+ ) {
386
+ markPure(name);
387
+ return;
388
+ }
389
+ const commentsStart = parser.prevStatement
390
+ ? /** @type {Range} */ (parser.prevStatement.range)[1]
391
+ : 0;
392
+ if (
393
+ hasNoSideEffectsNotation(
394
+ parser,
395
+ commentsStart,
396
+ /** @type {Range} */ (statement.range)[0]
397
+ )
398
+ ) {
399
+ markPure(name);
400
+ }
401
+ });
402
+
403
+ // Detect on variable declarations with function init
404
+ parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
405
+ if (parser.scope.topLevelScope !== true) return;
406
+ if (decl.id.type !== "Identifier") return;
407
+ if (
408
+ pureFunctionsFromOption &&
409
+ pureFunctionsFromOption.has(decl.id.name)
410
+ ) {
411
+ markPure(decl.id.name);
412
+ return;
413
+ }
414
+ if (!decl.init) return;
415
+ if (!decl.init.type.endsWith("FunctionExpression")) return;
416
+
417
+ let hasAnnotation = false;
418
+ // Before the VariableDeclaration (only for const)
419
+ if (statement.kind === "const") {
420
+ const commentsStart = parser.prevStatement
421
+ ? /** @type {Range} */ (parser.prevStatement.range)[1]
422
+ : 0;
423
+ hasAnnotation = hasNoSideEffectsNotation(
424
+ parser,
425
+ commentsStart,
426
+ /** @type {Range} */ (statement.range)[0]
427
+ );
428
+ }
429
+
430
+ if (!hasAnnotation) {
431
+ hasAnnotation = hasNoSideEffectsNotation(
432
+ parser,
433
+ /** @type {Range} */ (decl.id.range)[1],
434
+ /** @type {Range} */ (decl.init.range)[0]
435
+ );
436
+ }
437
+ if (hasAnnotation) {
438
+ markPure(decl.id.name);
439
+ }
440
+ });
441
+
442
+ if (pureFunctionsFromOption) {
443
+ parser.hooks.blockPreStatementByType
444
+ .for("ExportDefaultDeclaration")
445
+ .tap(PLUGIN_NAME, (statement) => {
446
+ if (parser.scope.topLevelScope !== true) return;
447
+ if (
448
+ statement.type === "ExportDefaultDeclaration" &&
449
+ pureFunctionsFromOption.has("default")
450
+ ) {
451
+ const decl = statement.declaration;
452
+ if (
453
+ decl.type === "ArrowFunctionExpression" ||
454
+ decl.type === "FunctionExpression"
455
+ ) {
456
+ markPure("default");
457
+ }
458
+ }
459
+ });
460
+ }
461
+
462
+ parser.hooks.isPure
463
+ .for("CallExpression")
464
+ .tap(PLUGIN_NAME, (expression, commentsStartPos) => {
465
+ const expr = /** @type {CallExpression} */ (expression);
466
+ if (expr.callee.type !== "Identifier") return;
467
+ if (!parser.getTagData(expr.callee.name, notSideEffectsTag)) {
468
+ return;
469
+ }
470
+ commentsStartPos = /** @type {Range} */ (expr.callee.range)[1];
471
+ return expr.arguments.every((arg) => {
472
+ if (arg.type === "SpreadElement") return false;
473
+ const pure = parser.isPure(arg, commentsStartPos);
474
+ commentsStartPos = /** @type {Range} */ (arg.range)[1];
475
+ return pure;
476
+ });
477
+ });
478
+
479
+ parser.hooks.finish.tap(PLUGIN_NAME, () => {
480
+ if (pureFunctions === undefined || pureFunctions.size === 0) {
481
+ return;
482
+ }
483
+ const buildInfo = /** @type {JavascriptModuleBuildInfo} */ (
484
+ parser.state.module.buildInfo
485
+ );
486
+ if (buildInfo.pureFunctions) {
487
+ for (const fn of pureFunctions) {
488
+ buildInfo.pureFunctions.add(fn);
489
+ }
490
+ } else {
491
+ buildInfo.pureFunctions = pureFunctions;
492
+ }
493
+ });
494
+ };
495
+
259
496
  for (const key of [
260
497
  JAVASCRIPT_MODULE_TYPE_AUTO,
261
498
  JAVASCRIPT_MODULE_TYPE_ESM,
@@ -263,7 +500,10 @@ class SideEffectsFlagPlugin {
263
500
  ]) {
264
501
  normalModuleFactory.hooks.parser
265
502
  .for(key)
266
- .tap(PLUGIN_NAME, parserHandler);
503
+ .tap(PLUGIN_NAME, (parser, parserOptions) => {
504
+ applyNoSideEffectsNotationHandler(parser, parserOptions);
505
+ applySideEffectsStmtHandler(parser);
506
+ });
267
507
  }
268
508
  }
269
509
  compilation.hooks.optimizeDependencies.tap(
@@ -281,7 +521,38 @@ class SideEffectsFlagPlugin {
281
521
  /** @type {Set<Module>} */
282
522
  const optimizedModules = new Set();
283
523
 
524
+ // Only defer builds must protect deferred re-export barrels;
525
+ // skip the per-target check entirely otherwise.
526
+ const deferEnabled =
527
+ compilation.options.experiments.deferImport === true;
528
+
529
+ // Re-export resolution is idempotent within a pass, so cache it
530
+ // per export info: a shared barrel imported by many modules
531
+ // resolves each name once instead of once per consumer.
532
+ /** @type {Map<ExportInfo, TargetItemWithConnection | null>} */
533
+ const reexportTargetCache = new Map();
534
+
535
+ // Dependencies don't change within the pass, so the passthrough
536
+ // check is cached per module across all moveTarget filter calls.
537
+ /** @type {Map<Module, boolean>} */
538
+ const singleStarReexportCache = new Map();
539
+
540
+ /**
541
+ * Cached variant of moduleHasSingleStarReexport.
542
+ * @param {Module} module the candidate passthrough module
543
+ * @returns {boolean} true when the module is a pure single-star passthrough
544
+ */
545
+ const hasSingleStarReexport = (module) => {
546
+ let result = singleStarReexportCache.get(module);
547
+ if (result === undefined) {
548
+ result = moduleHasSingleStarReexport(module);
549
+ singleStarReexportCache.set(module, result);
550
+ }
551
+ return result;
552
+ };
553
+
284
554
  /**
555
+ * Optimize incoming connections.
285
556
  * @param {Module} module module
286
557
  */
287
558
  const optimizeIncomingConnections = (module) => {
@@ -305,58 +576,112 @@ class SideEffectsFlagPlugin {
305
576
  if (connection.originModule !== null) {
306
577
  optimizeIncomingConnections(connection.originModule);
307
578
  }
308
- // TODO improve for export *
309
- if (isReexport && dep.name) {
310
- const exportInfo = moduleGraph.getExportInfo(
311
- /** @type {Module} */ (connection.originModule),
312
- dep.name
313
- );
314
- exportInfo.moveTarget(
315
- moduleGraph,
316
- ({ module }) =>
317
- module.getSideEffectsConnectionState(moduleGraph) ===
318
- false,
319
- ({
320
- module: newModule,
321
- export: exportName,
322
- connection: targetConnection
323
- }) => {
324
- moduleGraph.updateModule(dep, newModule);
325
- moduleGraph.updateParent(
326
- dep,
327
- targetConnection,
579
+
580
+ if (isReexport) {
581
+ if (!dep.name && !hasSingleStarReexport(module)) continue;
582
+
583
+ const infos = dep.name
584
+ ? // Named re-exports resolve their single target here;
585
+ // e.g. `export * as foo from "mod"` / `export { dep as name } from "mod"`
586
+ [
587
+ moduleGraph.getExportInfo(
588
+ /** @type {Module} */ (connection.originModule),
589
+ dep.name
590
+ )
591
+ ]
592
+ : moduleGraph.getExportsInfo(
328
593
  /** @type {Module} */ (connection.originModule)
329
- );
330
- moduleGraph.addExplanation(
331
- dep,
332
- "(skipped side-effect-free modules)"
333
- );
334
- const ids = dep.getIds(moduleGraph);
335
- dep.setIds(
336
- moduleGraph,
337
- exportName
338
- ? [...exportName, ...ids.slice(1)]
339
- : ids.slice(1)
340
- );
341
- return /** @type {ModuleGraphConnection} */ (
342
- moduleGraph.getConnection(dep)
343
- );
594
+ ).exports;
595
+
596
+ for (const exportInfo of infos) {
597
+ const immediate = exportInfo.getTarget(
598
+ moduleGraph,
599
+ RETURNS_FALSE
600
+ );
601
+ if (
602
+ immediate === undefined ||
603
+ immediate.connection.dependency !== dep
604
+ ) {
605
+ continue;
344
606
  }
345
- );
607
+
608
+ exportInfo.moveTarget(
609
+ moduleGraph,
610
+ (candidate) =>
611
+ candidate.module.getSideEffectsConnectionState(
612
+ moduleGraph
613
+ ) === false &&
614
+ // Keep a deferred re-export's barrel (see below).
615
+ (!deferEnabled ||
616
+ !isDeferredTargetConnection(
617
+ candidate.connection
618
+ )) &&
619
+ (Boolean(dep.name) ||
620
+ hasSingleStarReexport(
621
+ /** @type {Module} */ (candidate.module)
622
+ )),
623
+ ({
624
+ module: newModule,
625
+ export: exportName,
626
+ connection: targetConnection
627
+ }) => {
628
+ moduleGraph.updateModule(dep, newModule);
629
+ moduleGraph.updateParent(
630
+ dep,
631
+ targetConnection,
632
+ /** @type {Module} */ (connection.originModule)
633
+ );
634
+ moduleGraph.addExplanation(
635
+ dep,
636
+ "(skipped side-effect-free modules)"
637
+ );
638
+ const ids = dep.getIds(moduleGraph);
639
+ if (ids.length) {
640
+ dep.setIds(
641
+ moduleGraph,
642
+ exportName
643
+ ? [...exportName, ...ids.slice(1)]
644
+ : ids.slice(1)
645
+ );
646
+ }
647
+ return /** @type {ModuleGraphConnection} */ (
648
+ moduleGraph.getConnection(dep)
649
+ );
650
+ }
651
+ );
652
+ }
346
653
  continue;
347
654
  }
348
- // TODO improve for nested imports
655
+
349
656
  const ids = dep.getIds(moduleGraph);
350
657
  if (ids.length > 0) {
351
658
  const exportInfo = exportsInfo.getExportInfo(ids[0]);
352
- const target = exportInfo.getTarget(
353
- moduleGraph,
354
- ({ module }) =>
355
- module.getSideEffectsConnectionState(moduleGraph) ===
356
- false
357
- );
659
+ let target = reexportTargetCache.get(exportInfo);
660
+ if (target === undefined) {
661
+ target =
662
+ exportInfo.getTarget(
663
+ moduleGraph,
664
+ ({ module }) =>
665
+ module.getSideEffectsConnectionState(
666
+ moduleGraph
667
+ ) === false
668
+ ) || null;
669
+ reexportTargetCache.set(exportInfo, target);
670
+ }
358
671
  if (!target) continue;
359
672
 
673
+ // A deferred re-export must keep its side-effect-free
674
+ // barrel: collapsing it here would turn the cached
675
+ // deferred namespace (`.z`) into an eager import of the
676
+ // source module, breaking deferred-namespace identity
677
+ // and evaluation semantics.
678
+ if (
679
+ deferEnabled &&
680
+ isDeferredTargetConnection(target.connection)
681
+ ) {
682
+ continue;
683
+ }
684
+
360
685
  moduleGraph.updateModule(dep, target.module);
361
686
  moduleGraph.updateParent(
362
687
  dep,
@@ -393,6 +718,7 @@ class SideEffectsFlagPlugin {
393
718
  }
394
719
 
395
720
  /**
721
+ * Module has side effects.
396
722
  * @param {string} moduleName the module name
397
723
  * @param {SideEffectsFlagValue} flagValue the flag value
398
724
  * @param {CacheItem} cache cache for glob to regexp