webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -8,52 +8,76 @@
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const NullDependency = require("./NullDependency");
10
10
 
11
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
12
11
  /** @typedef {import("../Dependency").ExportSpec} ExportSpec */
13
12
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
13
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
15
  /** @typedef {import("../json/JsonData")} JsonData */
17
- /** @typedef {import("../json/JsonData").RawJsonData} RawJsonData */
16
+ /** @typedef {import("../json/JsonData").JsonValue} JsonValue */
18
17
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
18
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
19
  /** @typedef {import("../util/Hash")} Hash */
21
20
 
22
21
  /**
23
- * @param {RawJsonData} data data
24
- * @returns {TODO} value
22
+ * @callback GetExportsFromDataFn
23
+ * @param {JsonValue} data raw json data
24
+ * @param {number=} curDepth current depth
25
+ * @returns {ExportSpec[] | null} export spec or nothing
25
26
  */
26
- const getExportsFromData = data => {
27
- if (data && typeof data === "object") {
28
- if (Array.isArray(data)) {
29
- return data.length < 100
30
- ? data.map((item, idx) => ({
31
- name: `${idx}`,
32
- canMangle: true,
33
- exports: getExportsFromData(item)
34
- }))
35
- : undefined;
27
+
28
+ /**
29
+ * @param {number} exportsDepth exportsDepth
30
+ * @returns {GetExportsFromDataFn} value
31
+ */
32
+ const getExportsWithDepth = (exportsDepth) =>
33
+ /** @type {GetExportsFromDataFn} */
34
+ function getExportsFromData(data, curDepth = 1) {
35
+ if (curDepth > exportsDepth) {
36
+ return null;
36
37
  }
37
- const exports = [];
38
- for (const key of Object.keys(data)) {
39
- exports.push({
40
- name: key,
41
- canMangle: true,
42
- exports: getExportsFromData(data[key])
43
- });
38
+
39
+ if (data && typeof data === "object") {
40
+ if (Array.isArray(data)) {
41
+ return data.length < 100
42
+ ? data.map((item, idx) => ({
43
+ name: `${idx}`,
44
+ canMangle: true,
45
+ exports: getExportsFromData(item, curDepth + 1) || undefined
46
+ }))
47
+ : null;
48
+ }
49
+
50
+ /** @type {ExportSpec[]} */
51
+ const exports = [];
52
+
53
+ for (const key of Object.keys(data)) {
54
+ exports.push({
55
+ name: key,
56
+ canMangle: true,
57
+ exports:
58
+ getExportsFromData(
59
+ /** @type {JsonValue} */
60
+ (data[key]),
61
+ curDepth + 1
62
+ ) || undefined
63
+ });
64
+ }
65
+
66
+ return exports;
44
67
  }
45
- return exports;
46
- }
47
- return undefined;
48
- };
68
+
69
+ return null;
70
+ };
49
71
 
50
72
  class JsonExportsDependency extends NullDependency {
51
73
  /**
52
74
  * @param {JsonData} data json data
75
+ * @param {number} exportsDepth the depth of json exports to analyze
53
76
  */
54
- constructor(data) {
77
+ constructor(data, exportsDepth) {
55
78
  super();
56
79
  this.data = data;
80
+ this.exportsDepth = exportsDepth;
57
81
  }
58
82
 
59
83
  get type() {
@@ -67,8 +91,8 @@ class JsonExportsDependency extends NullDependency {
67
91
  */
68
92
  getExports(moduleGraph) {
69
93
  return {
70
- exports: getExportsFromData(
71
- this.data && /** @type {RawJsonData} */ (this.data.get())
94
+ exports: getExportsWithDepth(this.exportsDepth)(
95
+ this.data && /** @type {JsonValue} */ (this.data.get())
72
96
  ),
73
97
  dependencies: undefined
74
98
  };
@@ -90,6 +114,7 @@ class JsonExportsDependency extends NullDependency {
90
114
  serialize(context) {
91
115
  const { write } = context;
92
116
  write(this.data);
117
+ write(this.exportsDepth);
93
118
  super.serialize(context);
94
119
  }
95
120
 
@@ -99,6 +124,7 @@ class JsonExportsDependency extends NullDependency {
99
124
  deserialize(context) {
100
125
  const { read } = context;
101
126
  this.data = read();
127
+ this.exportsDepth = read();
102
128
  super.deserialize(context);
103
129
  }
104
130
  }
@@ -9,9 +9,6 @@ const ModuleDependency = require("./ModuleDependency");
9
9
 
10
10
  /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
11
11
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
12
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
13
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
14
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
15
12
 
16
13
  class LoaderDependency extends ModuleDependency {
17
14
  /**
@@ -9,9 +9,6 @@ const ModuleDependency = require("./ModuleDependency");
9
9
 
10
10
  /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
11
11
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
12
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
13
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
14
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
15
12
 
16
13
  class LoaderImportDependency extends ModuleDependency {
17
14
  /**
@@ -10,17 +10,18 @@ const LazySet = require("../util/LazySet");
10
10
  const LoaderDependency = require("./LoaderDependency");
11
11
  const LoaderImportDependency = require("./LoaderImportDependency");
12
12
 
13
- /** @typedef {import("../../declarations/LoaderContext").LoaderPluginLoaderContext} LoaderPluginLoaderContext */
14
- /** @typedef {import("../Compilation").DepConstructor} DepConstructor */
13
+ /** @typedef {import("../Compilation").DependencyConstructor} DependencyConstructor */
14
+ /** @typedef {import("../Compilation").ExecuteModuleExports} ExecuteModuleExports */
15
15
  /** @typedef {import("../Compilation").ExecuteModuleResult} ExecuteModuleResult */
16
16
  /** @typedef {import("../Compiler")} Compiler */
17
- /** @typedef {import("../Module")} Module */
18
17
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
18
+ /** @typedef {import("../Module").FileSystemDependencies} FileSystemDependencies */
19
19
 
20
20
  /**
21
21
  * @callback ImportModuleCallback
22
22
  * @param {(Error | null)=} err error object
23
- * @param {any=} exports exports of the evaluated module
23
+ * @param {ExecuteModuleExports=} exports exports of the evaluated module
24
+ * @returns {void}
24
25
  */
25
26
 
26
27
  /**
@@ -30,12 +31,9 @@ const LoaderImportDependency = require("./LoaderImportDependency");
30
31
  * @property {string=} baseUri target base uri
31
32
  */
32
33
 
33
- class LoaderPlugin {
34
- /**
35
- * @param {object} options options
36
- */
37
- constructor(options = {}) {}
34
+ const PLUGIN_NAME = "LoaderPlugin";
38
35
 
36
+ class LoaderPlugin {
39
37
  /**
40
38
  * Apply the plugin
41
39
  * @param {Compiler} compiler the compiler instance
@@ -43,7 +41,7 @@ class LoaderPlugin {
43
41
  */
44
42
  apply(compiler) {
45
43
  compiler.hooks.compilation.tap(
46
- "LoaderPlugin",
44
+ PLUGIN_NAME,
47
45
  (compilation, { normalModuleFactory }) => {
48
46
  compilation.dependencyFactories.set(
49
47
  LoaderDependency,
@@ -56,18 +54,19 @@ class LoaderPlugin {
56
54
  }
57
55
  );
58
56
 
59
- compiler.hooks.compilation.tap("LoaderPlugin", compilation => {
57
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
60
58
  const moduleGraph = compilation.moduleGraph;
61
59
  NormalModule.getCompilationHooks(compilation).loader.tap(
62
- "LoaderPlugin",
63
- loaderContext => {
60
+ PLUGIN_NAME,
61
+ (loaderContext) => {
64
62
  loaderContext.loadModule = (request, callback) => {
65
63
  const dep = new LoaderDependency(request);
66
64
  dep.loc = {
67
65
  name: request
68
66
  };
69
67
  const factory = compilation.dependencyFactories.get(
70
- /** @type {DepConstructor} */ (dep.constructor)
68
+ /** @type {DependencyConstructor} */
69
+ (dep.constructor)
71
70
  );
72
71
  if (factory === undefined) {
73
72
  return callback(
@@ -93,7 +92,7 @@ class LoaderPlugin {
93
92
  context: loaderContext.context,
94
93
  recursive: false
95
94
  },
96
- err => {
95
+ (err) => {
97
96
  compilation.factorizeQueue.setContext(oldFactorizeQueueContext);
98
97
  compilation.addModuleQueue.setContext(oldAddModuleQueueContext);
99
98
  compilation.buildQueue.decreaseParallelism();
@@ -127,9 +126,13 @@ class LoaderPlugin {
127
126
  map = moduleSource.map();
128
127
  source = moduleSource.source();
129
128
  }
129
+ /** @type {FileSystemDependencies} */
130
130
  const fileDependencies = new LazySet();
131
+ /** @type {FileSystemDependencies} */
131
132
  const contextDependencies = new LazySet();
133
+ /** @type {FileSystemDependencies} */
132
134
  const missingDependencies = new LazySet();
135
+ /** @type {FileSystemDependencies} */
133
136
  const buildDependencies = new LazySet();
134
137
  referencedModule.addCacheDependencies(
135
138
  fileDependencies,
@@ -150,12 +153,7 @@ class LoaderPlugin {
150
153
  for (const d of buildDependencies) {
151
154
  loaderContext.addBuildDependency(d);
152
155
  }
153
- return callback(
154
- null,
155
- source,
156
- /** @type {object | null} */ (map),
157
- referencedModule
158
- );
156
+ return callback(null, source, map, referencedModule);
159
157
  }
160
158
  );
161
159
  };
@@ -172,7 +170,8 @@ class LoaderPlugin {
172
170
  name: request
173
171
  };
174
172
  const factory = compilation.dependencyFactories.get(
175
- /** @type {DepConstructor} */ (dep.constructor)
173
+ /** @type {DependencyConstructor} */
174
+ (dep.constructor)
176
175
  );
177
176
  if (factory === undefined) {
178
177
  return callback(
@@ -203,7 +202,7 @@ class LoaderPlugin {
203
202
  connectOrigin: false,
204
203
  checkCycle: true
205
204
  },
206
- err => {
205
+ (err) => {
207
206
  compilation.factorizeQueue.setContext(oldFactorizeQueueContext);
208
207
  compilation.addModuleQueue.setContext(oldAddModuleQueueContext);
209
208
  compilation.buildQueue.decreaseParallelism();
@@ -271,8 +270,7 @@ class LoaderPlugin {
271
270
  );
272
271
  };
273
272
 
274
- // eslint-disable-next-line no-warning-comments
275
- // @ts-ignore Overloading doesn't work
273
+ // @ts-expect-error overloading doesn't work
276
274
  loaderContext.importModule = (request, options, callback) => {
277
275
  if (!callback) {
278
276
  return new Promise((resolve, reject) => {
@@ -289,4 +287,5 @@ class LoaderPlugin {
289
287
  });
290
288
  }
291
289
  }
290
+
292
291
  module.exports = LoaderPlugin;
@@ -7,7 +7,7 @@
7
7
 
8
8
  const LocalModule = require("./LocalModule");
9
9
 
10
- /** @typedef {import("../javascript/JavascriptParser").ParserState} ParserState */
10
+ /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
11
11
 
12
12
  /**
13
13
  * @param {string} parent parent module
@@ -34,7 +34,7 @@ const lookup = (parent, mod) => {
34
34
  };
35
35
 
36
36
  /**
37
- * @param {ParserState} state parser state
37
+ * @param {JavascriptParserState} state parser state
38
38
  * @param {string} name name
39
39
  * @returns {LocalModule} local module
40
40
  */
@@ -48,9 +48,9 @@ module.exports.addLocalModule = (state, name) => {
48
48
  };
49
49
 
50
50
  /**
51
- * @param {ParserState} state parser state
51
+ * @param {JavascriptParserState} state parser state
52
52
  * @param {string} name name
53
- * @param {string} [namedModule] named module
53
+ * @param {string=} namedModule named module
54
54
  * @returns {LocalModule | null} local module or null
55
55
  */
56
56
  module.exports.getLocalModule = (state, name, namedModule) => {
@@ -12,11 +12,9 @@ const makeSerializable = require("../util/makeSerializable");
12
12
  const NullDependency = require("./NullDependency");
13
13
 
14
14
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
15
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
16
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
15
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
17
16
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
18
17
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
- /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
20
18
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
21
19
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
20
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
@@ -57,7 +55,7 @@ class ModuleDecoratorDependency extends NullDependency {
57
55
  * Returns list of exports referenced by this dependency
58
56
  * @param {ModuleGraph} moduleGraph module graph
59
57
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
60
- * @returns {(string[] | ReferencedExport)[]} referenced exports
58
+ * @returns {ReferencedExports} referenced exports
61
59
  */
62
60
  getReferencedExports(moduleGraph, runtime) {
63
61
  return this.allowExportsAccess
@@ -7,27 +7,26 @@
7
7
 
8
8
  const Dependency = require("../Dependency");
9
9
  const DependencyTemplate = require("../DependencyTemplate");
10
- const RawModule = require("../RawModule");
11
10
 
12
11
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
13
12
  /** @typedef {import("../Module")} Module */
14
13
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
14
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
15
15
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
16
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
17
17
 
18
18
  class ModuleDependency extends Dependency {
19
19
  /**
20
20
  * @param {string} request request path which needs resolving
21
+ * @param {number=} sourceOrder source order
21
22
  */
22
- constructor(request) {
23
+ constructor(request, sourceOrder) {
23
24
  super();
24
25
  this.request = request;
25
26
  this.userRequest = request;
27
+ this.sourceOrder = sourceOrder;
28
+ /** @type {Range | undefined} */
26
29
  this.range = undefined;
27
- // TODO move it to subclasses and rename
28
- // assertions must be serialized by subclasses that use it
29
- /** @type {ImportAttributes | undefined} */
30
- this.assertions = undefined;
31
30
  this._context = undefined;
32
31
  }
33
32
 
@@ -42,11 +41,7 @@ class ModuleDependency extends Dependency {
42
41
  * @returns {string | null} an identifier to merge equal requests
43
42
  */
44
43
  getResourceIdentifier() {
45
- let str = `context${this._context || ""}|module${this.request}`;
46
- if (this.assertions !== undefined) {
47
- str += JSON.stringify(this.assertions);
48
- }
49
- return str;
44
+ return `context${this._context || ""}|module${this.request}`;
50
45
  }
51
46
 
52
47
  /**
@@ -58,14 +53,18 @@ class ModuleDependency extends Dependency {
58
53
 
59
54
  /**
60
55
  * @param {string} context context directory
61
- * @returns {Module | null} a module
56
+ * @returns {Module} ignored module
62
57
  */
63
58
  createIgnoredModule(context) {
64
- return new RawModule(
59
+ const RawModule = require("../RawModule");
60
+
61
+ const module = new RawModule(
65
62
  "/* (ignored) */",
66
63
  `ignored|${context}|${this.request}`,
67
64
  `${this.request} (ignored)`
68
65
  );
66
+ module.factoryMeta = { sideEffectFree: true };
67
+ return module;
69
68
  }
70
69
 
71
70
  /**
@@ -77,6 +76,7 @@ class ModuleDependency extends Dependency {
77
76
  write(this.userRequest);
78
77
  write(this._context);
79
78
  write(this.range);
79
+ write(this.sourceOrder);
80
80
  super.serialize(context);
81
81
  }
82
82
 
@@ -89,6 +89,7 @@ class ModuleDependency extends Dependency {
89
89
  this.userRequest = read();
90
90
  this._context = read();
91
91
  this.range = read();
92
+ this.sourceOrder = read();
92
93
  super.deserialize(context);
93
94
  }
94
95
  }
@@ -35,4 +35,5 @@ class ModuleDependencyTemplateAsRequireId extends ModuleDependency.Template {
35
35
  source.replace(dep.range[0], dep.range[1] - 1, content);
36
36
  }
37
37
  }
38
+
38
39
  module.exports = ModuleDependencyTemplateAsRequireId;
@@ -17,7 +17,7 @@ class ModuleHotAcceptDependency extends ModuleDependency {
17
17
  * @param {Range} range location in source code
18
18
  */
19
19
  constructor(request, range) {
20
- super(request);
20
+ super(request, Infinity);
21
21
  this.range = range;
22
22
  this.weak = true;
23
23
  }
@@ -12,6 +12,8 @@ const DependencyTemplate = require("../DependencyTemplate");
12
12
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
14
 
15
+ /** @typedef {string[]} RawRuntimeRequirements */
16
+
15
17
  class NullDependency extends Dependency {
16
18
  get type() {
17
19
  return "null";
@@ -11,14 +11,12 @@ const makeSerializable = require("../util/makeSerializable");
11
11
  const ModuleDependency = require("./ModuleDependency");
12
12
 
13
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
15
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
16
15
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
17
16
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
- /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
19
17
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
18
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
21
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
19
+ /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
22
20
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
23
21
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
24
22
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
@@ -26,19 +24,19 @@ const ModuleDependency = require("./ModuleDependency");
26
24
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
25
 
28
26
  /**
29
- * @param {string[]|null} path the property path array
27
+ * @param {string[] | null} path the property path array
30
28
  * @returns {string} the converted path
31
29
  */
32
- const pathToString = path =>
30
+ const pathToString = (path) =>
33
31
  path !== null && path.length > 0
34
- ? path.map(part => `[${JSON.stringify(part)}]`).join("")
32
+ ? path.map((part) => `[${JSON.stringify(part)}]`).join("")
35
33
  : "";
36
34
 
37
35
  class ProvidedDependency extends ModuleDependency {
38
36
  /**
39
37
  * @param {string} request request
40
38
  * @param {string} identifier identifier
41
- * @param {string[]} ids ids
39
+ * @param {ExportInfoName[]} ids ids
42
40
  * @param {Range} range range
43
41
  */
44
42
  constructor(request, identifier, ids, range) {
@@ -61,7 +59,7 @@ class ProvidedDependency extends ModuleDependency {
61
59
  * Returns list of exports referenced by this dependency
62
60
  * @param {ModuleGraph} moduleGraph module graph
63
61
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
64
- * @returns {(string[] | ReferencedExport)[]} referenced exports
62
+ * @returns {ReferencedExports} referenced exports
65
63
  */
66
64
  getReferencedExports(moduleGraph, runtime) {
67
65
  const ids = this.ids;
@@ -142,7 +140,7 @@ class ProvidedDependencyTemplate extends ModuleDependency.Template {
142
140
  chunkGraph,
143
141
  request: dep.request,
144
142
  runtimeRequirements
145
- })}${pathToString(/** @type {string[]} */ (usedName))};\n`,
143
+ })}${pathToString(/** @type {string[] | null} */ (usedName))};\n`,
146
144
  InitFragment.STAGE_PROVIDES,
147
145
  1,
148
146
  `provided ${dep.identifier}`
@@ -11,7 +11,6 @@ const { filterRuntime, runtimeToString } = require("../util/runtime");
11
11
  const NullDependency = require("./NullDependency");
12
12
 
13
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
15
14
  /** @typedef {import("../Dependency")} Dependency */
16
15
  /** @typedef {import("../Dependency").RuntimeSpec} RuntimeSpec */
17
16
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
@@ -47,7 +46,7 @@ class PureExpressionDependency extends NullDependency {
47
46
  /** @type {Module} */
48
47
  (moduleGraph.getParentModule(this));
49
48
  const exportsInfo = moduleGraph.getExportsInfo(selfModule);
50
- const runtimeCondition = filterRuntime(runtime, runtime => {
49
+ const runtimeCondition = filterRuntime(runtime, (runtime) => {
51
50
  for (const exportName of usedByExports) {
52
51
  if (exportsInfo.getUsed(exportName, runtime) !== UsageState.Unused) {
53
52
  return true;
@@ -10,10 +10,11 @@ const ContextDependency = require("./ContextDependency");
10
10
  const ModuleDependencyTemplateAsRequireId = require("./ModuleDependencyTemplateAsRequireId");
11
11
 
12
12
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
+ /** @typedef {import("./ContextDependency").ContextDependencyOptions} ContextDependencyOptions */
13
14
 
14
15
  class RequireContextDependency extends ContextDependency {
15
16
  /**
16
- * @param {TODO} options options
17
+ * @param {ContextDependencyOptions} options options
17
18
  * @param {Range} range range
18
19
  */
19
20
  constructor(options, range) {
@@ -7,60 +7,63 @@
7
7
 
8
8
  const RequireContextDependency = require("./RequireContextDependency");
9
9
 
10
+ /** @typedef {import("../ContextModule").ContextMode} ContextMode */
10
11
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
11
12
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
12
13
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
13
14
 
15
+ const PLUGIN_NAME = "RequireContextDependencyParserPlugin";
16
+
14
17
  module.exports = class RequireContextDependencyParserPlugin {
15
18
  /**
16
19
  * @param {JavascriptParser} parser the parser
17
20
  * @returns {void}
18
21
  */
19
22
  apply(parser) {
20
- parser.hooks.call
21
- .for("require.context")
22
- .tap("RequireContextDependencyParserPlugin", expr => {
23
- let regExp = /^\.\/.*$/;
24
- let recursive = true;
25
- let mode = "sync";
26
- switch (expr.arguments.length) {
27
- case 4: {
28
- const modeExpr = parser.evaluateExpression(expr.arguments[3]);
29
- if (!modeExpr.isString()) return;
30
- mode = /** @type {string} */ (modeExpr.string);
31
- }
32
- // falls through
33
- case 3: {
34
- const regExpExpr = parser.evaluateExpression(expr.arguments[2]);
35
- if (!regExpExpr.isRegExp()) return;
36
- regExp = /** @type {RegExp} */ (regExpExpr.regExp);
37
- }
38
- // falls through
39
- case 2: {
40
- const recursiveExpr = parser.evaluateExpression(expr.arguments[1]);
41
- if (!recursiveExpr.isBoolean()) return;
42
- recursive = /** @type {boolean} */ (recursiveExpr.bool);
43
- }
44
- // falls through
45
- case 1: {
46
- const requestExpr = parser.evaluateExpression(expr.arguments[0]);
47
- if (!requestExpr.isString()) return;
48
- const dep = new RequireContextDependency(
49
- {
50
- request: requestExpr.string,
51
- recursive,
52
- regExp,
53
- mode,
54
- category: "commonjs"
55
- },
56
- /** @type {Range} */ (expr.range)
57
- );
58
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
59
- dep.optional = Boolean(parser.scope.inTry);
60
- parser.state.current.addDependency(dep);
61
- return true;
62
- }
23
+ parser.hooks.call.for("require.context").tap(PLUGIN_NAME, (expr) => {
24
+ let regExp = /^\.\/.*$/;
25
+ let recursive = true;
26
+ /** @type {ContextMode} */
27
+ let mode = "sync";
28
+ switch (expr.arguments.length) {
29
+ case 4: {
30
+ const modeExpr = parser.evaluateExpression(expr.arguments[3]);
31
+ if (!modeExpr.isString()) return;
32
+ mode = /** @type {ContextMode} */ (modeExpr.string);
33
+ }
34
+ // falls through
35
+ case 3: {
36
+ const regExpExpr = parser.evaluateExpression(expr.arguments[2]);
37
+ if (!regExpExpr.isRegExp()) return;
38
+ regExp = /** @type {RegExp} */ (regExpExpr.regExp);
39
+ }
40
+ // falls through
41
+ case 2: {
42
+ const recursiveExpr = parser.evaluateExpression(expr.arguments[1]);
43
+ if (!recursiveExpr.isBoolean()) return;
44
+ recursive = /** @type {boolean} */ (recursiveExpr.bool);
45
+ }
46
+ // falls through
47
+ case 1: {
48
+ const requestExpr = parser.evaluateExpression(expr.arguments[0]);
49
+ if (!requestExpr.isString()) return;
50
+ const dep = new RequireContextDependency(
51
+ {
52
+ request: /** @type {string} */ (requestExpr.string),
53
+ recursive,
54
+ regExp,
55
+ mode,
56
+ category: "commonjs"
57
+ },
58
+ /** @type {Range} */
59
+ (expr.range)
60
+ );
61
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
62
+ dep.optional = Boolean(parser.scope.inTry);
63
+ parser.state.current.addDependency(dep);
64
+ return true;
63
65
  }
64
- });
66
+ }
67
+ });
65
68
  }
66
69
  };