webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -8,6 +8,7 @@
8
8
  const { ConcatSource, RawSource, CachedSource } = require("webpack-sources");
9
9
  const { UsageState } = require("./ExportsInfo");
10
10
  const Template = require("./Template");
11
+ const CssModulesPlugin = require("./css/CssModulesPlugin");
11
12
  const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
12
13
 
13
14
  /** @typedef {import("webpack-sources").Source} Source */
@@ -15,10 +16,16 @@ const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
15
16
  /** @typedef {import("./ExportsInfo")} ExportsInfo */
16
17
  /** @typedef {import("./ExportsInfo").ExportInfo} ExportInfo */
17
18
  /** @typedef {import("./Module")} Module */
19
+ /** @typedef {import("./Module").BuildMeta} BuildMeta */
18
20
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
19
21
  /** @typedef {import("./ModuleTemplate")} ModuleTemplate */
20
22
  /** @typedef {import("./RequestShortener")} RequestShortener */
21
23
 
24
+ /**
25
+ * @template T
26
+ * @param {Iterable<T>} iterable iterable
27
+ * @returns {string} joined with comma
28
+ */
22
29
  const joinIterableWithComma = iterable => {
23
30
  // This is more performant than Array.from().join(", ")
24
31
  // as it doesn't create an array
@@ -78,7 +85,7 @@ const printExportsInfoToSource = (
78
85
  for (const exportInfo of printedExports) {
79
86
  const target = exportInfo.getTarget(moduleGraph);
80
87
  source.add(
81
- Template.toComment(
88
+ `${Template.toComment(
82
89
  `${indent}export ${JSON.stringify(exportInfo.name).slice(
83
90
  1,
84
91
  -1
@@ -90,15 +97,15 @@ const printExportsInfoToSource = (
90
97
  .map(e => JSON.stringify(e).slice(1, -1))
91
98
  .join(".")}`
92
99
  : ""
93
- }`
100
+ }`
94
101
  : ""
95
102
  }`
96
- ) + "\n"
103
+ )}\n`
97
104
  );
98
105
  if (exportInfo.exportsInfo) {
99
106
  printExportsInfoToSource(
100
107
  source,
101
- indent + " ",
108
+ `${indent} `,
102
109
  exportInfo.exportsInfo,
103
110
  moduleGraph,
104
111
  requestShortener,
@@ -109,9 +116,9 @@ const printExportsInfoToSource = (
109
116
 
110
117
  if (alreadyPrintedExports) {
111
118
  source.add(
112
- Template.toComment(
119
+ `${Template.toComment(
113
120
  `${indent}... (${alreadyPrintedExports} already listed exports)`
114
- ) + "\n"
121
+ )}\n`
115
122
  );
116
123
  }
117
124
 
@@ -127,19 +134,19 @@ const printExportsInfoToSource = (
127
134
  ? "other exports"
128
135
  : "exports";
129
136
  source.add(
130
- Template.toComment(
137
+ `${Template.toComment(
131
138
  `${indent}${title} [${otherExportsInfo.getProvidedInfo()}] [${otherExportsInfo.getUsedInfo()}]${
132
139
  target
133
140
  ? ` -> ${target.module.readableIdentifier(requestShortener)}`
134
141
  : ""
135
142
  }`
136
- ) + "\n"
143
+ )}\n`
137
144
  );
138
145
  }
139
146
  }
140
147
  };
141
148
 
142
- /** @type {WeakMap<RequestShortener, WeakMap<Module, { header: RawSource, full: WeakMap<Source, CachedSource> }>>} */
149
+ /** @type {WeakMap<RequestShortener, WeakMap<Module, { header: RawSource | undefined, full: WeakMap<Source, CachedSource> }>>} */
143
150
  const caches = new WeakMap();
144
151
 
145
152
  class ModuleInfoHeaderPlugin {
@@ -149,6 +156,7 @@ class ModuleInfoHeaderPlugin {
149
156
  constructor(verbose = true) {
150
157
  this._verbose = verbose;
151
158
  }
159
+
152
160
  /**
153
161
  * @param {Compiler} compiler the compiler
154
162
  * @returns {void}
@@ -156,8 +164,9 @@ class ModuleInfoHeaderPlugin {
156
164
  apply(compiler) {
157
165
  const { _verbose: verbose } = this;
158
166
  compiler.hooks.compilation.tap("ModuleInfoHeaderPlugin", compilation => {
159
- const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
160
- hooks.renderModulePackage.tap(
167
+ const javascriptHooks =
168
+ JavascriptModulesPlugin.getCompilationHooks(compilation);
169
+ javascriptHooks.renderModulePackage.tap(
161
170
  "ModuleInfoHeaderPlugin",
162
171
  (
163
172
  moduleSource,
@@ -188,22 +197,19 @@ class ModuleInfoHeaderPlugin {
188
197
  const source = new ConcatSource();
189
198
  let header = cacheEntry.header;
190
199
  if (header === undefined) {
191
- const req = module.readableIdentifier(requestShortener);
192
- const reqStr = req.replace(/\*\//g, "*_/");
193
- const reqStrStar = "*".repeat(reqStr.length);
194
- const headerStr = `/*!****${reqStrStar}****!*\\\n !*** ${reqStr} ***!\n \\****${reqStrStar}****/\n`;
195
- header = new RawSource(headerStr);
200
+ header = this.generateHeader(module, requestShortener);
196
201
  cacheEntry.header = header;
197
202
  }
198
203
  source.add(header);
199
204
  if (verbose) {
200
- const exportsType = module.buildMeta.exportsType;
205
+ const exportsType = /** @type {BuildMeta} */ (module.buildMeta)
206
+ .exportsType;
201
207
  source.add(
202
- Template.toComment(
208
+ `${Template.toComment(
203
209
  exportsType
204
210
  ? `${exportsType} exports`
205
211
  : "unknown exports (runtime-defined)"
206
- ) + "\n"
212
+ )}\n`
207
213
  );
208
214
  if (exportsType) {
209
215
  const exportsInfo = moduleGraph.getExportsInfo(module);
@@ -216,40 +222,93 @@ class ModuleInfoHeaderPlugin {
216
222
  );
217
223
  }
218
224
  source.add(
219
- Template.toComment(
225
+ `${Template.toComment(
220
226
  `runtime requirements: ${joinIterableWithComma(
221
227
  chunkGraph.getModuleRuntimeRequirements(module, chunk.runtime)
222
228
  )}`
223
- ) + "\n"
229
+ )}\n`
224
230
  );
225
231
  const optimizationBailout =
226
232
  moduleGraph.getOptimizationBailout(module);
227
233
  if (optimizationBailout) {
228
234
  for (const text of optimizationBailout) {
229
- let code;
230
- if (typeof text === "function") {
231
- code = text(requestShortener);
232
- } else {
233
- code = text;
234
- }
235
- source.add(Template.toComment(`${code}`) + "\n");
235
+ const code =
236
+ typeof text === "function" ? text(requestShortener) : text;
237
+ source.add(`${Template.toComment(`${code}`)}\n`);
236
238
  }
237
239
  }
238
240
  source.add(moduleSource);
239
241
  return source;
242
+ }
243
+ source.add(moduleSource);
244
+ const cachedSource = new CachedSource(source);
245
+ cacheEntry.full.set(moduleSource, cachedSource);
246
+ return cachedSource;
247
+ }
248
+ );
249
+ javascriptHooks.chunkHash.tap(
250
+ "ModuleInfoHeaderPlugin",
251
+ (_chunk, hash) => {
252
+ hash.update("ModuleInfoHeaderPlugin");
253
+ hash.update("1");
254
+ }
255
+ );
256
+ const cssHooks = CssModulesPlugin.getCompilationHooks(compilation);
257
+ cssHooks.renderModulePackage.tap(
258
+ "ModuleInfoHeaderPlugin",
259
+ (moduleSource, module, { runtimeTemplate }) => {
260
+ const { requestShortener } = runtimeTemplate;
261
+ let cacheEntry;
262
+ let cache = caches.get(requestShortener);
263
+ if (cache === undefined) {
264
+ caches.set(requestShortener, (cache = new WeakMap()));
265
+ cache.set(
266
+ module,
267
+ (cacheEntry = { header: undefined, full: new WeakMap() })
268
+ );
240
269
  } else {
241
- source.add(moduleSource);
242
- const cachedSource = new CachedSource(source);
243
- cacheEntry.full.set(moduleSource, cachedSource);
244
- return cachedSource;
270
+ cacheEntry = cache.get(module);
271
+ if (cacheEntry === undefined) {
272
+ cache.set(
273
+ module,
274
+ (cacheEntry = { header: undefined, full: new WeakMap() })
275
+ );
276
+ } else if (!verbose) {
277
+ const cachedSource = cacheEntry.full.get(moduleSource);
278
+ if (cachedSource !== undefined) return cachedSource;
279
+ }
245
280
  }
281
+ const source = new ConcatSource();
282
+ let header = cacheEntry.header;
283
+ if (header === undefined) {
284
+ header = this.generateHeader(module, requestShortener);
285
+ cacheEntry.header = header;
286
+ }
287
+ source.add(header);
288
+ source.add(moduleSource);
289
+ const cachedSource = new CachedSource(source);
290
+ cacheEntry.full.set(moduleSource, cachedSource);
291
+ return cachedSource;
246
292
  }
247
293
  );
248
- hooks.chunkHash.tap("ModuleInfoHeaderPlugin", (chunk, hash) => {
294
+ cssHooks.chunkHash.tap("ModuleInfoHeaderPlugin", (_chunk, hash) => {
249
295
  hash.update("ModuleInfoHeaderPlugin");
250
296
  hash.update("1");
251
297
  });
252
298
  });
253
299
  }
300
+
301
+ /**
302
+ * @param {Module} module the module
303
+ * @param {RequestShortener} requestShortener request shortener
304
+ * @returns {RawSource} the header
305
+ */
306
+ generateHeader(module, requestShortener) {
307
+ const req = module.readableIdentifier(requestShortener);
308
+ const reqStr = req.replace(/\*\//g, "*_/");
309
+ const reqStrStar = "*".repeat(reqStr.length);
310
+ const headerStr = `/*!****${reqStrStar}****!*\\\n !*** ${reqStr} ***!\n \\****${reqStrStar}****/\n`;
311
+ return new RawSource(headerStr);
312
+ }
254
313
  }
255
314
  module.exports = ModuleInfoHeaderPlugin;
@@ -43,7 +43,7 @@ const previouslyPolyfilledBuiltinModules = {
43
43
 
44
44
  class ModuleNotFoundError extends WebpackError {
45
45
  /**
46
- * @param {Module} module module tied to dependency
46
+ * @param {Module | null} module module tied to dependency
47
47
  * @param {Error&any} err error thrown
48
48
  * @param {DependencyLocation} loc location of dependency
49
49
  */
@@ -54,7 +54,10 @@ class ModuleNotFoundError extends WebpackError {
54
54
  const match = err.message.match(/Can't resolve '([^']+)'/);
55
55
  if (match) {
56
56
  const request = match[1];
57
- const alias = previouslyPolyfilledBuiltinModules[request];
57
+ const alias =
58
+ previouslyPolyfilledBuiltinModules[
59
+ /** @type {keyof previouslyPolyfilledBuiltinModules} */ (request)
60
+ ];
58
61
  if (alias) {
59
62
  const pathIndex = alias.indexOf("/");
60
63
  const dependency = pathIndex > 0 ? alias.slice(0, pathIndex) : alias;
@@ -8,18 +8,21 @@
8
8
  const WebpackError = require("./WebpackError");
9
9
  const makeSerializable = require("./util/makeSerializable");
10
10
 
11
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+
11
14
  const WASM_HEADER = Buffer.from([0x00, 0x61, 0x73, 0x6d]);
12
15
 
13
16
  class ModuleParseError extends WebpackError {
14
17
  /**
15
18
  * @param {string | Buffer} source source code
16
- * @param {Error&any} err the parse error
19
+ * @param {Error & any} err the parse error
17
20
  * @param {string[]} loaders the loaders used
18
21
  * @param {string} type module type
19
22
  */
20
23
  constructor(source, err, loaders, type) {
21
- let message = "Module parse failed: " + (err && err.message);
22
- let loc = undefined;
24
+ let message = `Module parse failed: ${err && err.message}`;
25
+ let loc;
23
26
 
24
27
  if (
25
28
  ((Buffer.isBuffer(source) && source.slice(0, 4).equals(WASM_HEADER)) ||
@@ -54,7 +57,7 @@ class ModuleParseError extends WebpackError {
54
57
  typeof err.loc === "object" &&
55
58
  typeof err.loc.line === "number"
56
59
  ) {
57
- var lineNumber = err.loc.line;
60
+ const lineNumber = err.loc.line;
58
61
 
59
62
  if (
60
63
  Buffer.isBuffer(source) ||
@@ -69,15 +72,14 @@ class ModuleParseError extends WebpackError {
69
72
  const theLine = sourceLines[lineNumber - 1];
70
73
  const linesAfter = sourceLines.slice(lineNumber, lineNumber + 2);
71
74
 
72
- message +=
73
- linesBefore.map(l => `\n| ${l}`).join("") +
74
- `\n> ${theLine}` +
75
- linesAfter.map(l => `\n| ${l}`).join("");
75
+ message += `${linesBefore
76
+ .map(l => `\n| ${l}`)
77
+ .join("")}\n> ${theLine}${linesAfter.map(l => `\n| ${l}`).join("")}`;
76
78
  }
77
79
 
78
80
  loc = { start: err.loc };
79
81
  } else if (err && err.stack) {
80
- message += "\n" + err.stack;
82
+ message += `\n${err.stack}`;
81
83
  }
82
84
 
83
85
  super(message);
@@ -87,6 +89,9 @@ class ModuleParseError extends WebpackError {
87
89
  this.error = err;
88
90
  }
89
91
 
92
+ /**
93
+ * @param {ObjectSerializerContext} context context
94
+ */
90
95
  serialize(context) {
91
96
  const { write } = context;
92
97
 
@@ -95,6 +100,9 @@ class ModuleParseError extends WebpackError {
95
100
  super.serialize(context);
96
101
  }
97
102
 
103
+ /**
104
+ * @param {ObjectDeserializerContext} context context
105
+ */
98
106
  deserialize(context) {
99
107
  const { read } = context;
100
108
 
@@ -34,6 +34,7 @@ class ModuleProfile {
34
34
  this.storing = 0;
35
35
  this.storingParallelismFactor = 0;
36
36
 
37
+ /** @type {{ start: number, end: number }[] | undefined } */
37
38
  this.additionalFactoryTimes = undefined;
38
39
  this.additionalFactories = 0;
39
40
  this.additionalFactoriesParallelismFactor = 0;
@@ -16,7 +16,8 @@ class ModuleRestoreError extends WebpackError {
16
16
  */
17
17
  constructor(module, err) {
18
18
  let message = "Module restore failed: ";
19
- let details = undefined;
19
+ /** @type {string | undefined} */
20
+ const details = undefined;
20
21
  if (err !== null && typeof err === "object") {
21
22
  if (typeof err.stack === "string" && err.stack) {
22
23
  const stack = err.stack;
@@ -33,6 +34,7 @@ class ModuleRestoreError extends WebpackError {
33
34
  super(message);
34
35
 
35
36
  this.name = "ModuleRestoreError";
37
+ /** @type {string | undefined} */
36
38
  this.details = details;
37
39
  this.module = module;
38
40
  this.error = err;
@@ -16,7 +16,8 @@ class ModuleStoreError extends WebpackError {
16
16
  */
17
17
  constructor(module, err) {
18
18
  let message = "Module storing failed: ";
19
- let details = undefined;
19
+ /** @type {string | undefined} */
20
+ const details = undefined;
20
21
  if (err !== null && typeof err === "object") {
21
22
  if (typeof err.stack === "string" && err.stack) {
22
23
  const stack = err.stack;
@@ -33,7 +34,7 @@ class ModuleStoreError extends WebpackError {
33
34
  super(message);
34
35
 
35
36
  this.name = "ModuleStoreError";
36
- this.details = details;
37
+ this.details = /** @type {string | undefined} */ (details);
37
38
  this.module = module;
38
39
  this.error = err;
39
40
  }
@@ -8,6 +8,7 @@
8
8
  const util = require("util");
9
9
  const memoize = require("./util/memoize");
10
10
 
11
+ /** @typedef {import("tapable").Tap} Tap */
11
12
  /** @typedef {import("webpack-sources").Source} Source */
12
13
  /** @typedef {import("./Chunk")} Chunk */
13
14
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
@@ -16,8 +17,14 @@ const memoize = require("./util/memoize");
16
17
  /** @typedef {import("./Module")} Module */
17
18
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
18
19
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
20
+ /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
19
21
  /** @typedef {import("./util/Hash")} Hash */
20
22
 
23
+ /**
24
+ * @template T
25
+ * @typedef {import("tapable").IfSet<T>} IfSet
26
+ */
27
+
21
28
  const getJavascriptModulesPlugin = memoize(() =>
22
29
  require("./javascript/JavascriptModulesPlugin")
23
30
  );
@@ -34,6 +41,11 @@ class ModuleTemplate {
34
41
  this.hooks = Object.freeze({
35
42
  content: {
36
43
  tap: util.deprecate(
44
+ /**
45
+ * @template AdditionalOptions
46
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
47
+ * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
48
+ */
37
49
  (options, fn) => {
38
50
  getJavascriptModulesPlugin()
39
51
  .getCompilationHooks(compilation)
@@ -54,6 +66,11 @@ class ModuleTemplate {
54
66
  },
55
67
  module: {
56
68
  tap: util.deprecate(
69
+ /**
70
+ * @template AdditionalOptions
71
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
72
+ * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
73
+ */
57
74
  (options, fn) => {
58
75
  getJavascriptModulesPlugin()
59
76
  .getCompilationHooks(compilation)
@@ -74,6 +91,11 @@ class ModuleTemplate {
74
91
  },
75
92
  render: {
76
93
  tap: util.deprecate(
94
+ /**
95
+ * @template AdditionalOptions
96
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
97
+ * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
98
+ */
77
99
  (options, fn) => {
78
100
  getJavascriptModulesPlugin()
79
101
  .getCompilationHooks(compilation)
@@ -94,6 +116,11 @@ class ModuleTemplate {
94
116
  },
95
117
  package: {
96
118
  tap: util.deprecate(
119
+ /**
120
+ * @template AdditionalOptions
121
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
122
+ * @param {function(Source, Module, ChunkRenderContext, DependencyTemplates): Source} fn fn
123
+ */
97
124
  (options, fn) => {
98
125
  getJavascriptModulesPlugin()
99
126
  .getCompilationHooks(compilation)
@@ -114,6 +141,11 @@ class ModuleTemplate {
114
141
  },
115
142
  hash: {
116
143
  tap: util.deprecate(
144
+ /**
145
+ * @template AdditionalOptions
146
+ * @param {string | Tap & IfSet<AdditionalOptions>} options options
147
+ * @param {function(Hash): void} fn fn
148
+ */
117
149
  (options, fn) => {
118
150
  compilation.hooks.fullHash.tap(options, fn);
119
151
  },
@@ -129,7 +161,7 @@ Object.defineProperty(ModuleTemplate.prototype, "runtimeTemplate", {
129
161
  get: util.deprecate(
130
162
  /**
131
163
  * @this {ModuleTemplate}
132
- * @returns {TODO} output options
164
+ * @returns {RuntimeTemplate} output options
133
165
  */
134
166
  function () {
135
167
  return this._runtimeTemplate;
@@ -0,0 +1,168 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sean Larkin @TheLarkInn
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /**
9
+ * @type {Readonly<"javascript/auto">}
10
+ */
11
+ const JAVASCRIPT_MODULE_TYPE_AUTO = "javascript/auto";
12
+
13
+ /**
14
+ * @type {Readonly<"javascript/dynamic">}
15
+ */
16
+ const JAVASCRIPT_MODULE_TYPE_DYNAMIC = "javascript/dynamic";
17
+
18
+ /**
19
+ * @type {Readonly<"javascript/esm">}
20
+ * This is the module type used for _strict_ ES Module syntax. This means that all legacy formats
21
+ * that webpack supports (CommonJS, AMD, SystemJS) are not supported.
22
+ */
23
+ const JAVASCRIPT_MODULE_TYPE_ESM = "javascript/esm";
24
+
25
+ /**
26
+ * @type {Readonly<"json">}
27
+ * This is the module type used for JSON files. JSON files are always parsed as ES Module.
28
+ */
29
+ const JSON_MODULE_TYPE = "json";
30
+
31
+ /**
32
+ * @type {Readonly<"webassembly/async">}
33
+ * This is the module type used for WebAssembly modules. In webpack 5 they are always treated as async modules.
34
+ */
35
+ const WEBASSEMBLY_MODULE_TYPE_ASYNC = "webassembly/async";
36
+
37
+ /**
38
+ * @type {Readonly<"webassembly/sync">}
39
+ * This is the module type used for WebAssembly modules. In webpack 4 they are always treated as sync modules.
40
+ * There is a legacy option to support this usage in webpack 5 and up.
41
+ */
42
+ const WEBASSEMBLY_MODULE_TYPE_SYNC = "webassembly/sync";
43
+
44
+ /**
45
+ * @type {Readonly<"css">}
46
+ * This is the module type used for CSS files.
47
+ */
48
+ const CSS_MODULE_TYPE = "css";
49
+
50
+ /**
51
+ * @type {Readonly<"css/global">}
52
+ * This is the module type used for CSS modules files where you need to use `:local` in selector list to hash classes.
53
+ */
54
+ const CSS_MODULE_TYPE_GLOBAL = "css/global";
55
+
56
+ /**
57
+ * @type {Readonly<"css/module">}
58
+ * This is the module type used for CSS modules files, by default all classes are hashed.
59
+ */
60
+ const CSS_MODULE_TYPE_MODULE = "css/module";
61
+
62
+ /**
63
+ * @type {Readonly<"css/auto">}
64
+ * This is the module type used for CSS files, the module will be parsed as CSS modules if it's filename contains `.module.` or `.modules.`.
65
+ */
66
+ const CSS_MODULE_TYPE_AUTO = "css/auto";
67
+
68
+ /**
69
+ * @type {Readonly<"asset">}
70
+ * This is the module type used for automatically choosing between `asset/inline`, `asset/resource` based on asset size limit (8096).
71
+ */
72
+ const ASSET_MODULE_TYPE = "asset";
73
+
74
+ /**
75
+ * @type {Readonly<"asset/inline">}
76
+ * This is the module type used for assets that are inlined as a data URI. This is the equivalent of `url-loader`.
77
+ */
78
+ const ASSET_MODULE_TYPE_INLINE = "asset/inline";
79
+
80
+ /**
81
+ * @type {Readonly<"asset/resource">}
82
+ * This is the module type used for assets that are copied to the output directory. This is the equivalent of `file-loader`.
83
+ */
84
+ const ASSET_MODULE_TYPE_RESOURCE = "asset/resource";
85
+
86
+ /**
87
+ * @type {Readonly<"asset/source">}
88
+ * This is the module type used for assets that are imported as source code. This is the equivalent of `raw-loader`.
89
+ */
90
+ const ASSET_MODULE_TYPE_SOURCE = "asset/source";
91
+
92
+ /**
93
+ * @type {Readonly<"asset/raw-data-url">}
94
+ * TODO: Document what this asset type is for. See css-loader tests for its usage.
95
+ */
96
+ const ASSET_MODULE_TYPE_RAW_DATA_URL = "asset/raw-data-url";
97
+
98
+ /**
99
+ * @type {Readonly<"runtime">}
100
+ * This is the module type used for the webpack runtime abstractions.
101
+ */
102
+ const WEBPACK_MODULE_TYPE_RUNTIME = "runtime";
103
+
104
+ /**
105
+ * @type {Readonly<"fallback-module">}
106
+ * This is the module type used for the ModuleFederation feature's FallbackModule class.
107
+ * TODO: Document this better.
108
+ */
109
+ const WEBPACK_MODULE_TYPE_FALLBACK = "fallback-module";
110
+
111
+ /**
112
+ * @type {Readonly<"remote-module">}
113
+ * This is the module type used for the ModuleFederation feature's RemoteModule class.
114
+ * TODO: Document this better.
115
+ */
116
+ const WEBPACK_MODULE_TYPE_REMOTE = "remote-module";
117
+
118
+ /**
119
+ * @type {Readonly<"provide-module">}
120
+ * This is the module type used for the ModuleFederation feature's ProvideModule class.
121
+ * TODO: Document this better.
122
+ */
123
+ const WEBPACK_MODULE_TYPE_PROVIDE = "provide-module";
124
+
125
+ /**
126
+ * @type {Readonly<"consume-shared-module">}
127
+ * This is the module type used for the ModuleFederation feature's ConsumeSharedModule class.
128
+ */
129
+ const WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = "consume-shared-module";
130
+
131
+ /**
132
+ * @type {Readonly<"lazy-compilation-proxy">}
133
+ * Module type used for `experiments.lazyCompilation` feature. See `LazyCompilationPlugin` for more information.
134
+ */
135
+ const WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = "lazy-compilation-proxy";
136
+
137
+ /** @typedef {"javascript/auto" | "javascript/dynamic" | "javascript/esm"} JavaScriptModuleTypes */
138
+ /** @typedef {"json"} JSONModuleType */
139
+ /** @typedef {"webassembly/async" | "webassembly/sync"} WebAssemblyModuleTypes */
140
+ /** @typedef {"css" | "css/global" | "css/module"} CSSModuleTypes */
141
+ /** @typedef {"asset" | "asset/inline" | "asset/resource" | "asset/source" | "asset/raw-data-url"} AssetModuleTypes */
142
+ /** @typedef {"runtime" | "fallback-module" | "remote-module" | "provide-module" | "consume-shared-module" | "lazy-compilation-proxy"} WebpackModuleTypes */
143
+ /** @typedef {string} UnknownModuleTypes */
144
+ /** @typedef {JavaScriptModuleTypes | JSONModuleType | WebAssemblyModuleTypes | CSSModuleTypes | AssetModuleTypes | WebpackModuleTypes | UnknownModuleTypes} ModuleTypes */
145
+
146
+ module.exports.ASSET_MODULE_TYPE = ASSET_MODULE_TYPE;
147
+ module.exports.ASSET_MODULE_TYPE_RAW_DATA_URL = ASSET_MODULE_TYPE_RAW_DATA_URL;
148
+ module.exports.ASSET_MODULE_TYPE_SOURCE = ASSET_MODULE_TYPE_SOURCE;
149
+ module.exports.ASSET_MODULE_TYPE_RESOURCE = ASSET_MODULE_TYPE_RESOURCE;
150
+ module.exports.ASSET_MODULE_TYPE_INLINE = ASSET_MODULE_TYPE_INLINE;
151
+ module.exports.JAVASCRIPT_MODULE_TYPE_AUTO = JAVASCRIPT_MODULE_TYPE_AUTO;
152
+ module.exports.JAVASCRIPT_MODULE_TYPE_DYNAMIC = JAVASCRIPT_MODULE_TYPE_DYNAMIC;
153
+ module.exports.JAVASCRIPT_MODULE_TYPE_ESM = JAVASCRIPT_MODULE_TYPE_ESM;
154
+ module.exports.JSON_MODULE_TYPE = JSON_MODULE_TYPE;
155
+ module.exports.WEBASSEMBLY_MODULE_TYPE_ASYNC = WEBASSEMBLY_MODULE_TYPE_ASYNC;
156
+ module.exports.WEBASSEMBLY_MODULE_TYPE_SYNC = WEBASSEMBLY_MODULE_TYPE_SYNC;
157
+ module.exports.CSS_MODULE_TYPE = CSS_MODULE_TYPE;
158
+ module.exports.CSS_MODULE_TYPE_GLOBAL = CSS_MODULE_TYPE_GLOBAL;
159
+ module.exports.CSS_MODULE_TYPE_MODULE = CSS_MODULE_TYPE_MODULE;
160
+ module.exports.CSS_MODULE_TYPE_AUTO = CSS_MODULE_TYPE_AUTO;
161
+ module.exports.WEBPACK_MODULE_TYPE_RUNTIME = WEBPACK_MODULE_TYPE_RUNTIME;
162
+ module.exports.WEBPACK_MODULE_TYPE_FALLBACK = WEBPACK_MODULE_TYPE_FALLBACK;
163
+ module.exports.WEBPACK_MODULE_TYPE_REMOTE = WEBPACK_MODULE_TYPE_REMOTE;
164
+ module.exports.WEBPACK_MODULE_TYPE_PROVIDE = WEBPACK_MODULE_TYPE_PROVIDE;
165
+ module.exports.WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE =
166
+ WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE;
167
+ module.exports.WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY =
168
+ WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY;
@@ -9,6 +9,9 @@ const { cleanUp } = require("./ErrorHelpers");
9
9
  const WebpackError = require("./WebpackError");
10
10
  const makeSerializable = require("./util/makeSerializable");
11
11
 
12
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
13
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+
12
15
  class ModuleWarning extends WebpackError {
13
16
  /**
14
17
  * @param {Error} warning error thrown
@@ -17,11 +20,7 @@ class ModuleWarning extends WebpackError {
17
20
  constructor(warning, { from = null } = {}) {
18
21
  let message = "Module Warning";
19
22
 
20
- if (from) {
21
- message += ` (from ${from}):\n`;
22
- } else {
23
- message += ": ";
24
- }
23
+ message += from ? ` (from ${from}):\n` : ": ";
25
24
 
26
25
  if (warning && typeof warning === "object" && warning.message) {
27
26
  message += warning.message;
@@ -39,6 +38,9 @@ class ModuleWarning extends WebpackError {
39
38
  : undefined;
40
39
  }
41
40
 
41
+ /**
42
+ * @param {ObjectSerializerContext} context context
43
+ */
42
44
  serialize(context) {
43
45
  const { write } = context;
44
46
 
@@ -47,6 +49,9 @@ class ModuleWarning extends WebpackError {
47
49
  super.serialize(context);
48
50
  }
49
51
 
52
+ /**
53
+ * @param {ObjectDeserializerContext} context context
54
+ */
50
55
  deserialize(context) {
51
56
  const { read } = context;
52
57