webpack 5.76.1 → 5.88.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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -13,11 +13,18 @@ const { compareSelect, compareStrings } = require("../util/comparators");
13
13
  const createHash = require("../util/createHash");
14
14
 
15
15
  /** @typedef {import("webpack-sources").Source} Source */
16
+ /** @typedef {import("../Cache").Etag} Etag */
16
17
  /** @typedef {import("../Compilation").AssetInfo} AssetInfo */
17
18
  /** @typedef {import("../Compiler")} Compiler */
19
+ /** @typedef {typeof import("../util/Hash")} Hash */
18
20
 
19
21
  const EMPTY_SET = new Set();
20
22
 
23
+ /**
24
+ * @template T
25
+ * @param {T | T[]} itemOrItems item or items
26
+ * @param {Set<T>} list list
27
+ */
21
28
  const addToList = (itemOrItems, list) => {
22
29
  if (Array.isArray(itemOrItems)) {
23
30
  for (const item of itemOrItems) {
@@ -60,6 +67,10 @@ const quoteMeta = str => {
60
67
 
61
68
  const cachedSourceMap = new WeakMap();
62
69
 
70
+ /**
71
+ * @param {Source} source source
72
+ * @returns {CachedSource} cached source
73
+ */
63
74
  const toCachedSource = source => {
64
75
  if (source instanceof CachedSource) {
65
76
  return source;
@@ -71,6 +82,10 @@ const toCachedSource = source => {
71
82
  return newSource;
72
83
  };
73
84
 
85
+ /** @typedef {Set<string>} OwnHashes */
86
+ /** @typedef {Set<string>} ReferencedHashes */
87
+ /** @typedef {Set<string>} Hashes */
88
+
74
89
  /**
75
90
  * @typedef {Object} AssetInfoForRealContentHash
76
91
  * @property {string} name
@@ -79,11 +94,11 @@ const toCachedSource = source => {
79
94
  * @property {RawSource | undefined} newSource
80
95
  * @property {RawSource | undefined} newSourceWithoutOwn
81
96
  * @property {string} content
82
- * @property {Set<string>} ownHashes
83
- * @property {Promise} contentComputePromise
84
- * @property {Promise} contentComputeWithoutOwnPromise
85
- * @property {Set<string>} referencedHashes
86
- * @property {Set<string>} hashes
97
+ * @property {OwnHashes | undefined} ownHashes
98
+ * @property {Promise<void> | undefined} contentComputePromise
99
+ * @property {Promise<void> | undefined} contentComputeWithoutOwnPromise
100
+ * @property {ReferencedHashes | undefined} referencedHashes
101
+ * @property {Hashes} hashes
87
102
  */
88
103
 
89
104
  /**
@@ -115,6 +130,11 @@ class RealContentHashPlugin {
115
130
  return hooks;
116
131
  }
117
132
 
133
+ /**
134
+ * @param {Object} options options object
135
+ * @param {string | Hash} options.hashFunction the hash function to use
136
+ * @param {string} options.hashDigest the hash digest to use
137
+ */
118
138
  constructor({ hashFunction, hashDigest }) {
119
139
  this._hashFunction = hashFunction;
120
140
  this._hashDigest = hashDigest;
@@ -143,27 +163,25 @@ class RealContentHashPlugin {
143
163
  const assets = compilation.getAssets();
144
164
  /** @type {AssetInfoForRealContentHash[]} */
145
165
  const assetsWithInfo = [];
166
+ /** @type {Map<string, [AssetInfoForRealContentHash]>} */
146
167
  const hashToAssets = new Map();
147
168
  for (const { source, info, name } of assets) {
148
169
  const cachedSource = toCachedSource(source);
149
- const content = cachedSource.source();
150
- /** @type {Set<string>} */
170
+ const content = /** @type {string} */ (cachedSource.source());
171
+ /** @type {Hashes} */
151
172
  const hashes = new Set();
152
173
  addToList(info.contenthash, hashes);
174
+ /** @type {AssetInfoForRealContentHash} */
153
175
  const data = {
154
176
  name,
155
177
  info,
156
178
  source: cachedSource,
157
- /** @type {RawSource | undefined} */
158
179
  newSource: undefined,
159
- /** @type {RawSource | undefined} */
160
180
  newSourceWithoutOwn: undefined,
161
181
  content,
162
- /** @type {Set<string>} */
163
182
  ownHashes: undefined,
164
183
  contentComputePromise: undefined,
165
184
  contentComputeWithoutOwnPromise: undefined,
166
- /** @type {Set<string>} */
167
185
  referencedHashes: undefined,
168
186
  hashes
169
187
  };
@@ -212,11 +230,17 @@ class RealContentHashPlugin {
212
230
  });
213
231
  })
214
232
  );
233
+ /**
234
+ * @param {string} hash the hash
235
+ * @returns {undefined | ReferencedHashes} the referenced hashes
236
+ */
215
237
  const getDependencies = hash => {
216
238
  const assets = hashToAssets.get(hash);
217
239
  if (!assets) {
218
240
  const referencingAssets = assetsWithInfo.filter(asset =>
219
- asset.referencedHashes.has(hash)
241
+ /** @type {ReferencedHashes} */ (asset.referencedHashes).has(
242
+ hash
243
+ )
220
244
  );
221
245
  const err = new WebpackError(`RealContentHashPlugin
222
246
  Some kind of unexpected caching problem occurred.
@@ -236,23 +260,36 @@ ${referencingAssets
236
260
  }
237
261
  const hashes = new Set();
238
262
  for (const { referencedHashes, ownHashes } of assets) {
239
- if (!ownHashes.has(hash)) {
240
- for (const hash of ownHashes) {
263
+ if (!(/** @type {OwnHashes} */ (ownHashes).has(hash))) {
264
+ for (const hash of /** @type {OwnHashes} */ (ownHashes)) {
241
265
  hashes.add(hash);
242
266
  }
243
267
  }
244
- for (const hash of referencedHashes) {
268
+ for (const hash of /** @type {ReferencedHashes} */ (
269
+ referencedHashes
270
+ )) {
245
271
  hashes.add(hash);
246
272
  }
247
273
  }
248
274
  return hashes;
249
275
  };
276
+ /**
277
+ * @param {string} hash the hash
278
+ * @returns {string} the hash info
279
+ */
250
280
  const hashInfo = hash => {
251
281
  const assets = hashToAssets.get(hash);
252
- return `${hash} (${Array.from(assets, a => a.name)})`;
282
+ return `${hash} (${Array.from(
283
+ /** @type {AssetInfoForRealContentHash[]} */ (assets),
284
+ a => a.name
285
+ )})`;
253
286
  };
254
287
  const hashesInOrder = new Set();
255
288
  for (const hash of hashToAssets.keys()) {
289
+ /**
290
+ * @param {string} hash the hash
291
+ * @param {Set<string>} stack stack of hashes
292
+ */
256
293
  const add = (hash, stack) => {
257
294
  const deps = getDependencies(hash);
258
295
  if (!deps) return;
@@ -276,21 +313,31 @@ ${referencingAssets
276
313
  add(hash, new Set());
277
314
  }
278
315
  const hashToNewHash = new Map();
316
+ /**
317
+ * @param {AssetInfoForRealContentHash} asset asset info
318
+ * @returns {Etag} etag
319
+ */
279
320
  const getEtag = asset =>
280
321
  cacheGenerate.mergeEtags(
281
322
  cacheGenerate.getLazyHashedEtag(asset.source),
282
- Array.from(asset.referencedHashes, hash =>
283
- hashToNewHash.get(hash)
323
+ Array.from(
324
+ /** @type {ReferencedHashes} */ (asset.referencedHashes),
325
+ hash => hashToNewHash.get(hash)
284
326
  ).join("|")
285
327
  );
328
+ /**
329
+ * @param {AssetInfoForRealContentHash} asset asset info
330
+ * @returns {Promise<void>}
331
+ */
286
332
  const computeNewContent = asset => {
287
333
  if (asset.contentComputePromise) return asset.contentComputePromise;
288
334
  return (asset.contentComputePromise = (async () => {
289
335
  if (
290
- asset.ownHashes.size > 0 ||
291
- Array.from(asset.referencedHashes).some(
292
- hash => hashToNewHash.get(hash) !== hash
293
- )
336
+ /** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
337
+ Array.from(
338
+ /** @type {ReferencedHashes} */
339
+ (asset.referencedHashes)
340
+ ).some(hash => hashToNewHash.get(hash) !== hash)
294
341
  ) {
295
342
  const identifier = asset.name;
296
343
  const etag = getEtag(asset);
@@ -307,15 +354,20 @@ ${referencingAssets
307
354
  }
308
355
  })());
309
356
  };
357
+ /**
358
+ * @param {AssetInfoForRealContentHash} asset asset info
359
+ * @returns {Promise<void>}
360
+ */
310
361
  const computeNewContentWithoutOwn = asset => {
311
362
  if (asset.contentComputeWithoutOwnPromise)
312
363
  return asset.contentComputeWithoutOwnPromise;
313
364
  return (asset.contentComputeWithoutOwnPromise = (async () => {
314
365
  if (
315
- asset.ownHashes.size > 0 ||
316
- Array.from(asset.referencedHashes).some(
317
- hash => hashToNewHash.get(hash) !== hash
318
- )
366
+ /** @type {OwnHashes} */ (asset.ownHashes).size > 0 ||
367
+ Array.from(
368
+ /** @type {ReferencedHashes} */
369
+ (asset.referencedHashes)
370
+ ).some(hash => hashToNewHash.get(hash) !== hash)
319
371
  ) {
320
372
  const identifier = asset.name + "|without-own";
321
373
  const etag = getEtag(asset);
@@ -326,7 +378,9 @@ ${referencingAssets
326
378
  const newContent = asset.content.replace(
327
379
  hashRegExp,
328
380
  hash => {
329
- if (asset.ownHashes.has(hash)) {
381
+ if (
382
+ /** @type {OwnHashes} */ (asset.ownHashes).has(hash)
383
+ ) {
330
384
  return "";
331
385
  }
332
386
  return hashToNewHash.get(hash);
@@ -340,17 +394,19 @@ ${referencingAssets
340
394
  };
341
395
  const comparator = compareSelect(a => a.name, compareStrings);
342
396
  for (const oldHash of hashesInOrder) {
343
- const assets = hashToAssets.get(oldHash);
397
+ const assets =
398
+ /** @type {AssetInfoForRealContentHash[]} */
399
+ (hashToAssets.get(oldHash));
344
400
  assets.sort(comparator);
345
401
  await Promise.all(
346
402
  assets.map(asset =>
347
- asset.ownHashes.has(oldHash)
403
+ /** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)
348
404
  ? computeNewContentWithoutOwn(asset)
349
405
  : computeNewContent(asset)
350
406
  )
351
407
  );
352
408
  const assetsContent = mapAndDeduplicateBuffers(assets, asset => {
353
- if (asset.ownHashes.has(oldHash)) {
409
+ if (/** @type {OwnHashes} */ (asset.ownHashes).has(oldHash)) {
354
410
  return asset.newSourceWithoutOwn
355
411
  ? asset.newSourceWithoutOwn.buffer()
356
412
  : asset.source.buffer();
@@ -9,6 +9,8 @@ const { STAGE_BASIC } = require("../OptimizationStages");
9
9
  const Queue = require("../util/Queue");
10
10
  const { intersect } = require("../util/SetHelpers");
11
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../ChunkGroup")} ChunkGroup */
12
14
  /** @typedef {import("../Compiler")} Compiler */
13
15
 
14
16
  class RemoveParentModulesPlugin {
@@ -18,6 +20,10 @@ class RemoveParentModulesPlugin {
18
20
  */
19
21
  apply(compiler) {
20
22
  compiler.hooks.compilation.tap("RemoveParentModulesPlugin", compilation => {
23
+ /**
24
+ * @param {Iterable<Chunk>} chunks the chunks
25
+ * @param {ChunkGroup[]} chunkGroups the chunk groups
26
+ */
21
27
  const handler = (chunks, chunkGroups) => {
22
28
  const chunkGraph = compilation.chunkGraph;
23
29
  const queue = new Queue();
@@ -5,11 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../Compilation").EntryData} EntryData */
8
9
  /** @typedef {import("../Compiler")} Compiler */
10
+ /** @typedef {import("../Entrypoint")} Entrypoint */
9
11
 
10
12
  class RuntimeChunkPlugin {
11
13
  constructor(options) {
12
14
  this.options = {
15
+ /**
16
+ * @param {Entrypoint} entrypoint entrypoint name
17
+ * @returns {string} runtime chunk name
18
+ */
13
19
  name: entrypoint => `runtime~${entrypoint.name}`,
14
20
  ...options
15
21
  };
@@ -26,7 +32,9 @@ class RuntimeChunkPlugin {
26
32
  "RuntimeChunkPlugin",
27
33
  (_, { name: entryName }) => {
28
34
  if (entryName === undefined) return;
29
- const data = compilation.entries.get(entryName);
35
+ const data =
36
+ /** @type {EntryData} */
37
+ (compilation.entries.get(entryName));
30
38
  if (data.options.runtime === undefined && !data.options.dependOn) {
31
39
  // Determine runtime chunk name
32
40
  let name = this.options.name;
@@ -6,11 +6,18 @@
6
6
  "use strict";
7
7
 
8
8
  const glob2regexp = require("glob-to-regexp");
9
+ const {
10
+ JAVASCRIPT_MODULE_TYPE_AUTO,
11
+ JAVASCRIPT_MODULE_TYPE_ESM,
12
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
13
+ } = require("../ModuleTypeConstants");
9
14
  const { STAGE_DEFAULT } = require("../OptimizationStages");
10
15
  const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
11
16
  const HarmonyImportSpecifierDependency = require("../dependencies/HarmonyImportSpecifierDependency");
12
17
  const formatLocation = require("../formatLocation");
13
18
 
19
+ /** @typedef {import("estree").ModuleDeclaration} ModuleDeclaration */
20
+ /** @typedef {import("estree").Statement} Statement */
14
21
  /** @typedef {import("../Compiler")} Compiler */
15
22
  /** @typedef {import("../Dependency")} Dependency */
16
23
  /** @typedef {import("../Module")} Module */
@@ -50,6 +57,8 @@ const globToRegexp = (glob, cache) => {
50
57
  return regexp;
51
58
  };
52
59
 
60
+ const PLUGIN_NAME = "SideEffectsFlagPlugin";
61
+
53
62
  class SideEffectsFlagPlugin {
54
63
  /**
55
64
  * @param {boolean} analyseSource analyse source code for side effects
@@ -69,60 +78,54 @@ class SideEffectsFlagPlugin {
69
78
  globToRegexpCache.set(compiler.root, cache);
70
79
  }
71
80
  compiler.hooks.compilation.tap(
72
- "SideEffectsFlagPlugin",
81
+ PLUGIN_NAME,
73
82
  (compilation, { normalModuleFactory }) => {
74
83
  const moduleGraph = compilation.moduleGraph;
75
- normalModuleFactory.hooks.module.tap(
76
- "SideEffectsFlagPlugin",
77
- (module, data) => {
78
- const resolveData = data.resourceResolveData;
79
- if (
80
- resolveData &&
81
- resolveData.descriptionFileData &&
82
- resolveData.relativePath
83
- ) {
84
- const sideEffects = resolveData.descriptionFileData.sideEffects;
85
- if (sideEffects !== undefined) {
86
- if (module.factoryMeta === undefined) {
87
- module.factoryMeta = {};
88
- }
89
- const hasSideEffects =
90
- SideEffectsFlagPlugin.moduleHasSideEffects(
91
- resolveData.relativePath,
92
- sideEffects,
93
- cache
94
- );
95
- module.factoryMeta.sideEffectFree = !hasSideEffects;
96
- }
97
- }
98
-
99
- return module;
100
- }
101
- );
102
- normalModuleFactory.hooks.module.tap(
103
- "SideEffectsFlagPlugin",
104
- (module, data) => {
105
- if (typeof data.settings.sideEffects === "boolean") {
84
+ normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
85
+ const resolveData = data.resourceResolveData;
86
+ if (
87
+ resolveData &&
88
+ resolveData.descriptionFileData &&
89
+ resolveData.relativePath
90
+ ) {
91
+ const sideEffects = resolveData.descriptionFileData.sideEffects;
92
+ if (sideEffects !== undefined) {
106
93
  if (module.factoryMeta === undefined) {
107
94
  module.factoryMeta = {};
108
95
  }
109
- module.factoryMeta.sideEffectFree = !data.settings.sideEffects;
96
+ const hasSideEffects = SideEffectsFlagPlugin.moduleHasSideEffects(
97
+ resolveData.relativePath,
98
+ sideEffects,
99
+ cache
100
+ );
101
+ module.factoryMeta.sideEffectFree = !hasSideEffects;
110
102
  }
111
- return module;
112
103
  }
113
- );
104
+
105
+ return module;
106
+ });
107
+ normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module, data) => {
108
+ if (typeof data.settings.sideEffects === "boolean") {
109
+ if (module.factoryMeta === undefined) {
110
+ module.factoryMeta = {};
111
+ }
112
+ module.factoryMeta.sideEffectFree = !data.settings.sideEffects;
113
+ }
114
+ return module;
115
+ });
114
116
  if (this._analyseSource) {
115
117
  /**
116
118
  * @param {JavascriptParser} parser the parser
117
119
  * @returns {void}
118
120
  */
119
121
  const parserHandler = parser => {
122
+ /** @type {undefined | Statement | ModuleDeclaration} */
120
123
  let sideEffectsStatement;
121
- parser.hooks.program.tap("SideEffectsFlagPlugin", () => {
124
+ parser.hooks.program.tap(PLUGIN_NAME, () => {
122
125
  sideEffectsStatement = undefined;
123
126
  });
124
127
  parser.hooks.statement.tap(
125
- { name: "SideEffectsFlagPlugin", stage: -100 },
128
+ { name: PLUGIN_NAME, stage: -100 },
126
129
  statement => {
127
130
  if (sideEffectsStatement) return;
128
131
  if (parser.scope.topLevelScope !== true) return;
@@ -203,7 +206,7 @@ class SideEffectsFlagPlugin {
203
206
  }
204
207
  }
205
208
  );
206
- parser.hooks.finish.tap("SideEffectsFlagPlugin", () => {
209
+ parser.hooks.finish.tap(PLUGIN_NAME, () => {
207
210
  if (sideEffectsStatement === undefined) {
208
211
  parser.state.module.buildMeta.sideEffectFree = true;
209
212
  } else {
@@ -220,18 +223,18 @@ class SideEffectsFlagPlugin {
220
223
  });
221
224
  };
222
225
  for (const key of [
223
- "javascript/auto",
224
- "javascript/esm",
225
- "javascript/dynamic"
226
+ JAVASCRIPT_MODULE_TYPE_AUTO,
227
+ JAVASCRIPT_MODULE_TYPE_ESM,
228
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
226
229
  ]) {
227
230
  normalModuleFactory.hooks.parser
228
231
  .for(key)
229
- .tap("SideEffectsFlagPlugin", parserHandler);
232
+ .tap(PLUGIN_NAME, parserHandler);
230
233
  }
231
234
  }
232
235
  compilation.hooks.optimizeDependencies.tap(
233
236
  {
234
- name: "SideEffectsFlagPlugin",
237
+ name: PLUGIN_NAME,
235
238
  stage: STAGE_DEFAULT
236
239
  },
237
240
  modules => {
@@ -258,7 +261,7 @@ class SideEffectsFlagPlugin {
258
261
  // TODO improve for export *
259
262
  if (isReexport && dep.name) {
260
263
  const exportInfo = moduleGraph.getExportInfo(
261
- connection.originModule,
264
+ /** @type {Module} */ (connection.originModule),
262
265
  dep.name
263
266
  );
264
267
  exportInfo.moveTarget(
@@ -319,6 +322,12 @@ class SideEffectsFlagPlugin {
319
322
  );
320
323
  }
321
324
 
325
+ /**
326
+ * @param {string} moduleName the module name
327
+ * @param {undefined | boolean | string | string[]} flagValue the flag value
328
+ * @param {Map<string, RegExp>} cache cache for glob to regexp
329
+ * @returns {boolean | undefined} true, when the module has side effects, undefined or false when not
330
+ */
322
331
  static moduleHasSideEffects(moduleName, flagValue, cache) {
323
332
  switch (typeof flagValue) {
324
333
  case "undefined":