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
@@ -5,11 +5,23 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
9
+ /** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
10
+ /** @typedef {import("./ModuleGraph")} ModuleGraph */
11
+
8
12
  class SelfModuleFactory {
13
+ /**
14
+ * @param {ModuleGraph} moduleGraph module graph
15
+ */
9
16
  constructor(moduleGraph) {
10
17
  this.moduleGraph = moduleGraph;
11
18
  }
12
19
 
20
+ /**
21
+ * @param {ModuleFactoryCreateData} data data object
22
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
23
+ * @returns {void}
24
+ */
13
25
  create(data, callback) {
14
26
  const module = this.moduleGraph.getParentModule(data.dependencies[0]);
15
27
  callback(null, {
@@ -9,7 +9,7 @@
9
9
  * @param {number} size the size in bytes
10
10
  * @returns {string} the formatted size
11
11
  */
12
- exports.formatSize = size => {
12
+ module.exports.formatSize = size => {
13
13
  if (typeof size !== "number" || Number.isNaN(size) === true) {
14
14
  return "unknown size";
15
15
  }
@@ -21,7 +21,5 @@ exports.formatSize = size => {
21
21
  const abbreviations = ["bytes", "KiB", "MiB", "GiB"];
22
22
  const index = Math.floor(Math.log(size) / Math.log(1024));
23
23
 
24
- return `${+(size / Math.pow(1024, index)).toPrecision(3)} ${
25
- abbreviations[index]
26
- }`;
24
+ return `${Number((size / 1024 ** index).toPrecision(3))} ${abbreviations[index]}`;
27
25
  };
@@ -7,9 +7,13 @@
7
7
 
8
8
  const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
9
9
 
10
+ /** @typedef {import("../declarations/plugins/SourceMapDevToolPlugin").SourceMapDevToolPluginOptions} SourceMapDevToolPluginOptions */
10
11
  /** @typedef {import("./Compilation")} Compilation */
11
12
 
12
13
  class SourceMapDevToolModuleOptionsPlugin {
14
+ /**
15
+ * @param {SourceMapDevToolPluginOptions} options options
16
+ */
13
17
  constructor(options) {
14
18
  this.options = options;
15
19
  }
@@ -22,11 +22,15 @@ const { makePathsAbsolute } = require("./util/identifier");
22
22
  /** @typedef {import("./Cache").Etag} Etag */
23
23
  /** @typedef {import("./CacheFacade").ItemCacheFacade} ItemCacheFacade */
24
24
  /** @typedef {import("./Chunk")} Chunk */
25
+ /** @typedef {import("./Compilation").Asset} Asset */
25
26
  /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
26
27
  /** @typedef {import("./Compiler")} Compiler */
27
28
  /** @typedef {import("./Module")} Module */
28
29
  /** @typedef {import("./NormalModule").SourceMap} SourceMap */
30
+ /** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
29
31
  /** @typedef {import("./util/Hash")} Hash */
32
+ /** @typedef {import("./util/createHash").Algorithm} Algorithm */
33
+ /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
30
34
 
31
35
  const validate = createSchemaValidation(
32
36
  require("../schemas/plugins/SourceMapDevToolPlugin.check.js"),
@@ -47,14 +51,30 @@ const validate = createSchemaValidation(
47
51
  * @property {ItemCacheFacade} cacheItem cache item
48
52
  */
49
53
 
54
+ const METACHARACTERS_REGEXP = /[-[\]\\/{}()*+?.^$|]/g;
55
+ const CONTENT_HASH_DETECT_REGEXP = /\[contenthash(:\w+)?\]/;
56
+ const CSS_AND_JS_MODULE_EXTENSIONS_REGEXP = /\.((c|m)?js|css)($|\?)/i;
57
+ const CSS_EXTENSION_DETECT_REGEXP = /\.css($|\?)/i;
58
+ const MAP_URL_COMMENT_REGEXP = /\[map\]/g;
59
+ const URL_COMMENT_REGEXP = /\[url\]/g;
60
+ const URL_FORMATTING_REGEXP = /^\n\/\/(.*)$/;
61
+
62
+ /**
63
+ * Reset's .lastIndex of stateful Regular Expressions
64
+ * For when `test` or `exec` is called on them
65
+ * @param {RegExp} regexp Stateful Regular Expression to be reset
66
+ * @returns {void}
67
+ */
68
+ const resetRegexpState = regexp => {
69
+ regexp.lastIndex = -1;
70
+ };
71
+
50
72
  /**
51
73
  * Escapes regular expression metacharacters
52
74
  * @param {string} str String to quote
53
75
  * @returns {string} Escaped string
54
76
  */
55
- const quoteMeta = str => {
56
- return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
57
- };
77
+ const quoteMeta = str => str.replace(METACHARACTERS_REGEXP, "\\$&");
58
78
 
59
79
  /**
60
80
  * Creating {@link SourceMapTask} for given file
@@ -89,7 +109,7 @@ const getTaskForFile = (
89
109
  source = asset.source();
90
110
  }
91
111
  if (!sourceMap || typeof source !== "string") return;
92
- const context = compilation.options.context;
112
+ const context = /** @type {string} */ (compilation.options.context);
93
113
  const root = compilation.compiler.root;
94
114
  const cachedAbsolutify = makePathsAbsolute.bindContextCache(context, root);
95
115
  const modules = sourceMap.sources.map(source => {
@@ -118,13 +138,13 @@ class SourceMapDevToolPlugin {
118
138
  constructor(options = {}) {
119
139
  validate(options);
120
140
 
121
- /** @type {string | false} */
122
- this.sourceMapFilename = options.filename;
123
- /** @type {string | false} */
141
+ this.sourceMapFilename = /** @type {string | false} */ (options.filename);
142
+ /** @type {false | TemplatePath}} */
124
143
  this.sourceMappingURLComment =
125
144
  options.append === false
126
145
  ? false
127
- : options.append || "\n//# source" + "MappingURL=[url]";
146
+ : // eslint-disable-next-line no-useless-concat
147
+ options.append || "\n//# source" + "MappingURL=[url]";
128
148
  /** @type {string | Function} */
129
149
  this.moduleFilenameTemplate =
130
150
  options.moduleFilenameTemplate || "webpack://[namespace]/[resourcePath]";
@@ -144,7 +164,9 @@ class SourceMapDevToolPlugin {
144
164
  * @returns {void}
145
165
  */
146
166
  apply(compiler) {
147
- const outputFs = compiler.outputFileSystem;
167
+ const outputFs = /** @type {OutputFileSystem} */ (
168
+ compiler.outputFileSystem
169
+ );
148
170
  const sourceMapFilename = this.sourceMapFilename;
149
171
  const sourceMappingURLComment = this.sourceMappingURLComment;
150
172
  const moduleFilenameTemplate = this.moduleFilenameTemplate;
@@ -152,7 +174,7 @@ class SourceMapDevToolPlugin {
152
174
  const fallbackModuleFilenameTemplate = this.fallbackModuleFilenameTemplate;
153
175
  const requestShortener = compiler.requestShortener;
154
176
  const options = this.options;
155
- options.test = options.test || /\.((c|m)?js|css)($|\?)/i;
177
+ options.test = options.test || CSS_AND_JS_MODULE_EXTENSIONS_REGEXP;
156
178
 
157
179
  const matchObject = ModuleFilenameHelpers.matchObject.bind(
158
180
  undefined,
@@ -199,7 +221,7 @@ class SourceMapDevToolPlugin {
199
221
  }
200
222
  }
201
223
 
202
- reportProgress(0.0);
224
+ reportProgress(0);
203
225
  /** @type {SourceMapTask[]} */
204
226
  const tasks = [];
205
227
  let fileIndex = 0;
@@ -207,7 +229,9 @@ class SourceMapDevToolPlugin {
207
229
  asyncLib.each(
208
230
  files,
209
231
  (file, callback) => {
210
- const asset = compilation.getAsset(file);
232
+ const asset =
233
+ /** @type {Readonly<Asset>} */
234
+ (compilation.getAsset(file));
211
235
  if (asset.info.related && asset.info.related.sourceMap) {
212
236
  fileIndex++;
213
237
  return callback();
@@ -286,14 +310,23 @@ class SourceMapDevToolPlugin {
286
310
 
287
311
  for (let idx = 0; idx < modules.length; idx++) {
288
312
  const module = modules[idx];
313
+
314
+ if (
315
+ typeof module === "string" &&
316
+ /^(data|https?):/.test(module)
317
+ ) {
318
+ moduleToSourceNameMapping.set(module, module);
319
+ continue;
320
+ }
321
+
289
322
  if (!moduleToSourceNameMapping.get(module)) {
290
323
  moduleToSourceNameMapping.set(
291
324
  module,
292
325
  ModuleFilenameHelpers.createFilename(
293
326
  module,
294
327
  {
295
- moduleFilenameTemplate: moduleFilenameTemplate,
296
- namespace: namespace
328
+ moduleFilenameTemplate,
329
+ namespace
297
330
  },
298
331
  {
299
332
  requestShortener,
@@ -343,7 +376,9 @@ class SourceMapDevToolPlugin {
343
376
  // find modules with conflicting source names
344
377
  for (let idx = 0; idx < allModules.length; idx++) {
345
378
  const module = allModules[idx];
346
- let sourceName = moduleToSourceNameMapping.get(module);
379
+ let sourceName =
380
+ /** @type {string} */
381
+ (moduleToSourceNameMapping.get(module));
347
382
  let hasName = conflictDetectionSet.has(sourceName);
348
383
  if (!hasName) {
349
384
  conflictDetectionSet.add(sourceName);
@@ -355,7 +390,7 @@ class SourceMapDevToolPlugin {
355
390
  module,
356
391
  {
357
392
  moduleFilenameTemplate: fallbackModuleFilenameTemplate,
358
- namespace: namespace
393
+ namespace
359
394
  },
360
395
  {
361
396
  requestShortener,
@@ -401,7 +436,7 @@ class SourceMapDevToolPlugin {
401
436
  const moduleFilenames = modules.map(m =>
402
437
  moduleToSourceNameMapping.get(m)
403
438
  );
404
- sourceMap.sources = moduleFilenames;
439
+ sourceMap.sources = /** @type {string[]} */ (moduleFilenames);
405
440
  if (options.noSources) {
406
441
  sourceMap.sourcesContent = undefined;
407
442
  }
@@ -409,44 +444,51 @@ class SourceMapDevToolPlugin {
409
444
  sourceMap.file = file;
410
445
  const usesContentHash =
411
446
  sourceMapFilename &&
412
- /\[contenthash(:\w+)?\]/.test(sourceMapFilename);
447
+ CONTENT_HASH_DETECT_REGEXP.test(sourceMapFilename);
448
+
449
+ resetRegexpState(CONTENT_HASH_DETECT_REGEXP);
413
450
 
414
451
  // If SourceMap and asset uses contenthash, avoid a circular dependency by hiding hash in `file`
415
452
  if (usesContentHash && task.assetInfo.contenthash) {
416
453
  const contenthash = task.assetInfo.contenthash;
417
- let pattern;
418
- if (Array.isArray(contenthash)) {
419
- pattern = contenthash.map(quoteMeta).join("|");
420
- } else {
421
- pattern = quoteMeta(contenthash);
422
- }
454
+ const pattern = Array.isArray(contenthash)
455
+ ? contenthash.map(quoteMeta).join("|")
456
+ : quoteMeta(contenthash);
423
457
  sourceMap.file = sourceMap.file.replace(
424
458
  new RegExp(pattern, "g"),
425
459
  m => "x".repeat(m.length)
426
460
  );
427
461
  }
428
462
 
429
- /** @type {string | false} */
463
+ /** @type {false | TemplatePath} */
430
464
  let currentSourceMappingURLComment = sourceMappingURLComment;
465
+ const cssExtensionDetected =
466
+ CSS_EXTENSION_DETECT_REGEXP.test(file);
467
+ resetRegexpState(CSS_EXTENSION_DETECT_REGEXP);
431
468
  if (
432
469
  currentSourceMappingURLComment !== false &&
433
- /\.css($|\?)/i.test(file)
470
+ typeof currentSourceMappingURLComment !== "function" &&
471
+ cssExtensionDetected
434
472
  ) {
435
473
  currentSourceMappingURLComment =
436
474
  currentSourceMappingURLComment.replace(
437
- /^\n\/\/(.*)$/,
475
+ URL_FORMATTING_REGEXP,
438
476
  "\n/*$1*/"
439
477
  );
440
478
  }
441
479
  const sourceMapString = JSON.stringify(sourceMap);
442
480
  if (sourceMapFilename) {
443
- let filename = file;
481
+ const filename = file;
444
482
  const sourceMapContentHash =
445
- usesContentHash &&
446
- /** @type {string} */ (
447
- createHash(compilation.outputOptions.hashFunction)
448
- .update(sourceMapString)
449
- .digest("hex")
483
+ /** @type {string} */
484
+ (
485
+ usesContentHash &&
486
+ createHash(
487
+ /** @type {Algorithm} */
488
+ (compilation.outputOptions.hashFunction)
489
+ )
490
+ .update(sourceMapString)
491
+ .digest("hex")
450
492
  );
451
493
  const pathParams = {
452
494
  chunk,
@@ -455,7 +497,7 @@ class SourceMapDevToolPlugin {
455
497
  outputFs,
456
498
  `/${options.fileContext}`,
457
499
  `/${filename}`
458
- )
500
+ )
459
501
  : filename,
460
502
  contentHash: sourceMapContentHash
461
503
  };
@@ -470,17 +512,17 @@ class SourceMapDevToolPlugin {
470
512
  outputFs,
471
513
  dirname(outputFs, `/${file}`),
472
514
  `/${sourceMapFile}`
473
- );
515
+ );
474
516
  /** @type {Source} */
475
517
  let asset = new RawSource(source);
476
518
  if (currentSourceMappingURLComment !== false) {
477
519
  // Add source map url to compilation asset, if currentSourceMappingURLComment is set
478
520
  asset = new ConcatSource(
479
521
  asset,
480
- compilation.getPath(
481
- currentSourceMappingURLComment,
482
- Object.assign({ url: sourceMapUrl }, pathParams)
483
- )
522
+ compilation.getPath(currentSourceMappingURLComment, {
523
+ url: sourceMapUrl,
524
+ ...pathParams
525
+ })
484
526
  );
485
527
  }
486
528
  const assetInfo = {
@@ -510,15 +552,20 @@ class SourceMapDevToolPlugin {
510
552
  "SourceMapDevToolPlugin: append can't be false when no filename is provided"
511
553
  );
512
554
  }
555
+ if (typeof currentSourceMappingURLComment === "function") {
556
+ throw new Error(
557
+ "SourceMapDevToolPlugin: append can't be a function when no filename is provided"
558
+ );
559
+ }
513
560
  /**
514
561
  * Add source map as data url to asset
515
562
  */
516
563
  const asset = new ConcatSource(
517
564
  new RawSource(source),
518
565
  currentSourceMappingURLComment
519
- .replace(/\[map\]/g, () => sourceMapString)
566
+ .replace(MAP_URL_COMMENT_REGEXP, () => sourceMapString)
520
567
  .replace(
521
- /\[url\]/g,
568
+ URL_COMMENT_REGEXP,
522
569
  () =>
523
570
  `data:application/json;charset=utf-8;base64,${Buffer.from(
524
571
  sourceMapString,
@@ -545,7 +592,7 @@ class SourceMapDevToolPlugin {
545
592
  });
546
593
  },
547
594
  err => {
548
- reportProgress(1.0);
595
+ reportProgress(1);
549
596
  callback(err);
550
597
  }
551
598
  );
package/lib/Stats.js CHANGED
@@ -7,6 +7,7 @@
7
7
 
8
8
  /** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
9
9
  /** @typedef {import("./Compilation")} Compilation */
10
+ /** @typedef {import("./Compilation").NormalizedStatsOptions} NormalizedStatsOptions */
10
11
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsCompilation} StatsCompilation */
11
12
 
12
13
  class Stats {
@@ -34,7 +35,7 @@ class Stats {
34
35
  */
35
36
  hasWarnings() {
36
37
  return (
37
- this.compilation.warnings.length > 0 ||
38
+ this.compilation.getWarnings().length > 0 ||
38
39
  this.compilation.children.some(child => child.getStats().hasWarnings())
39
40
  );
40
41
  }
@@ -50,28 +51,32 @@ class Stats {
50
51
  }
51
52
 
52
53
  /**
53
- * @param {(string|StatsOptions)=} options stats options
54
+ * @param {(string | boolean | StatsOptions)=} options stats options
54
55
  * @returns {StatsCompilation} json output
55
56
  */
56
57
  toJson(options) {
57
- options = this.compilation.createStatsOptions(options, {
58
+ const normalizedOptions = this.compilation.createStatsOptions(options, {
58
59
  forToString: false
59
60
  });
60
61
 
61
- const statsFactory = this.compilation.createStatsFactory(options);
62
+ const statsFactory = this.compilation.createStatsFactory(normalizedOptions);
62
63
 
63
64
  return statsFactory.create("compilation", this.compilation, {
64
65
  compilation: this.compilation
65
66
  });
66
67
  }
67
68
 
69
+ /**
70
+ * @param {(string | boolean | StatsOptions)=} options stats options
71
+ * @returns {string} string output
72
+ */
68
73
  toString(options) {
69
- options = this.compilation.createStatsOptions(options, {
74
+ const normalizedOptions = this.compilation.createStatsOptions(options, {
70
75
  forToString: true
71
76
  });
72
77
 
73
- const statsFactory = this.compilation.createStatsFactory(options);
74
- const statsPrinter = this.compilation.createStatsPrinter(options);
78
+ const statsFactory = this.compilation.createStatsFactory(normalizedOptions);
79
+ const statsPrinter = this.compilation.createStatsPrinter(normalizedOptions);
75
80
 
76
81
  const data = statsFactory.create("compilation", this.compilation, {
77
82
  compilation: this.compilation
package/lib/Template.js CHANGED
@@ -6,11 +6,14 @@
6
6
  "use strict";
7
7
 
8
8
  const { ConcatSource, PrefixSource } = require("webpack-sources");
9
+ const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
10
+ const RuntimeGlobals = require("./RuntimeGlobals");
9
11
 
10
12
  /** @typedef {import("webpack-sources").Source} Source */
11
13
  /** @typedef {import("../declarations/WebpackOptions").Output} OutputOptions */
12
14
  /** @typedef {import("./Chunk")} Chunk */
13
15
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
16
+ /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
14
17
  /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
15
18
  /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
16
19
  /** @typedef {import("./Compilation").PathData} PathData */
@@ -20,6 +23,7 @@ const { ConcatSource, PrefixSource } = require("webpack-sources");
20
23
  /** @typedef {import("./ModuleTemplate")} ModuleTemplate */
21
24
  /** @typedef {import("./RuntimeModule")} RuntimeModule */
22
25
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
26
+ /** @typedef {import("./TemplatedPathPlugin").TemplatePath} TemplatePath */
23
27
  /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
24
28
  /** @typedef {import("./javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
25
29
 
@@ -39,7 +43,7 @@ const PATH_NAME_NORMALIZE_REPLACE_REGEX = /[^a-zA-Z0-9_!§$()=\-^°]+/g;
39
43
  const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g;
40
44
 
41
45
  /**
42
- * @typedef {Object} RenderManifestOptions
46
+ * @typedef {object} RenderManifestOptions
43
47
  * @property {Chunk} chunk the chunk used to render
44
48
  * @property {string} hash
45
49
  * @property {string} fullHash
@@ -55,9 +59,9 @@ const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g;
55
59
  /** @typedef {RenderManifestEntryTemplated | RenderManifestEntryStatic} RenderManifestEntry */
56
60
 
57
61
  /**
58
- * @typedef {Object} RenderManifestEntryTemplated
62
+ * @typedef {object} RenderManifestEntryTemplated
59
63
  * @property {function(): Source} render
60
- * @property {string | function(PathData, AssetInfo=): string} filenameTemplate
64
+ * @property {TemplatePath} filenameTemplate
61
65
  * @property {PathData=} pathOptions
62
66
  * @property {AssetInfo=} info
63
67
  * @property {string} identifier
@@ -66,7 +70,7 @@ const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g;
66
70
  */
67
71
 
68
72
  /**
69
- * @typedef {Object} RenderManifestEntryStatic
73
+ * @typedef {object} RenderManifestEntryStatic
70
74
  * @property {function(): Source} render
71
75
  * @property {string} filename
72
76
  * @property {AssetInfo} info
@@ -76,7 +80,7 @@ const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g;
76
80
  */
77
81
 
78
82
  /**
79
- * @typedef {Object} HasId
83
+ * @typedef {object} HasId
80
84
  * @property {number | string} id
81
85
  */
82
86
 
@@ -86,7 +90,6 @@ const MATCH_PADDED_HYPHENS_REPLACE_REGEX = /^-|-$/g;
86
90
 
87
91
  class Template {
88
92
  /**
89
- *
90
93
  * @param {Function} fn a runtime function (.runtime.js) "template"
91
94
  * @returns {string} the updated and normalized function string
92
95
  */
@@ -108,8 +111,8 @@ class Template {
108
111
  .replace(IDENTIFIER_NAME_REPLACE_REGEX, "_$1")
109
112
  .replace(IDENTIFIER_ALPHA_NUMERIC_NAME_REPLACE_REGEX, "_");
110
113
  }
114
+
111
115
  /**
112
- *
113
116
  * @param {string} str string to be converted to commented in bundle code
114
117
  * @returns {string} returns a commented version of string
115
118
  */
@@ -119,7 +122,6 @@ class Template {
119
122
  }
120
123
 
121
124
  /**
122
- *
123
125
  * @param {string} str string to be converted to "normal comment"
124
126
  * @returns {string} returns a commented version of string
125
127
  */
@@ -209,23 +211,20 @@ class Template {
209
211
  }
210
212
 
211
213
  /**
212
- *
213
214
  * @param {string | string[]} s string to convert to identity
214
215
  * @returns {string} converted identity
215
216
  */
216
217
  static indent(s) {
217
218
  if (Array.isArray(s)) {
218
219
  return s.map(Template.indent).join("\n");
219
- } else {
220
- const str = s.trimRight();
221
- if (!str) return "";
222
- const ind = str[0] === "\n" ? "" : "\t";
223
- return ind + str.replace(/\n([^\n])/g, "\n\t$1");
224
220
  }
221
+ const str = s.trimEnd();
222
+ if (!str) return "";
223
+ const ind = str[0] === "\n" ? "" : "\t";
224
+ return ind + str.replace(/\n([^\n])/g, "\n\t$1");
225
225
  }
226
226
 
227
227
  /**
228
- *
229
228
  * @param {string|string[]} s string to create prefix for
230
229
  * @param {string} prefix prefix to compose
231
230
  * @returns {string} returns new prefix string
@@ -234,11 +233,10 @@ class Template {
234
233
  const str = Template.asString(s).trim();
235
234
  if (!str) return "";
236
235
  const ind = str[0] === "\n" ? "" : prefix;
237
- return ind + str.replace(/\n([^\n])/g, "\n" + prefix + "$1");
236
+ return ind + str.replace(/\n([^\n])/g, `\n${prefix}$1`);
238
237
  }
239
238
 
240
239
  /**
241
- *
242
240
  * @param {string|string[]} str string or string collection
243
241
  * @returns {string} returns a single string from array
244
242
  */
@@ -250,7 +248,7 @@ class Template {
250
248
  }
251
249
 
252
250
  /**
253
- * @typedef {Object} WithId
251
+ * @typedef {object} WithId
254
252
  * @property {string|number} id
255
253
  */
256
254
 
@@ -268,7 +266,7 @@ class Template {
268
266
  if (maxId < moduleId) maxId = moduleId;
269
267
  if (minId > moduleId) minId = moduleId;
270
268
  }
271
- if (minId < 16 + ("" + minId).length) {
269
+ if (minId < 16 + String(minId).length) {
272
270
  // add minId x ',' instead of 'Array(minId).concat(…)'
273
271
  minId = 0;
274
272
  }
@@ -286,23 +284,21 @@ class Template {
286
284
  /**
287
285
  * @param {ChunkRenderContext} renderContext render context
288
286
  * @param {Module[]} modules modules to render (should be ordered by identifier)
289
- * @param {function(Module): Source} renderModule function to render a module
287
+ * @param {function(Module): Source | null} renderModule function to render a module
290
288
  * @param {string=} prefix applying prefix strings
291
- * @returns {Source} rendered chunk modules in a Source object
289
+ * @returns {Source | null} rendered chunk modules in a Source object or null if no modules
292
290
  */
293
291
  static renderChunkModules(renderContext, modules, renderModule, prefix = "") {
294
292
  const { chunkGraph } = renderContext;
295
- var source = new ConcatSource();
293
+ const source = new ConcatSource();
296
294
  if (modules.length === 0) {
297
295
  return null;
298
296
  }
299
297
  /** @type {{id: string|number, source: Source|string}[]} */
300
- const allModules = modules.map(module => {
301
- return {
302
- id: chunkGraph.getModuleId(module),
303
- source: renderModule(module) || "false"
304
- };
305
- });
298
+ const allModules = modules.map(module => ({
299
+ id: /** @type {ModuleId} */ (chunkGraph.getModuleId(module)),
300
+ source: renderModule(module) || "false"
301
+ }));
306
302
  const bounds = Template.getModulesArrayBounds(allModules);
307
303
  if (bounds) {
308
304
  // Render a spare array
@@ -328,7 +324,7 @@ class Template {
328
324
  source.add(module.source);
329
325
  }
330
326
  }
331
- source.add("\n" + prefix + "]");
327
+ source.add(`\n${prefix}]`);
332
328
  if (minId !== 0) {
333
329
  source.add(")");
334
330
  }
@@ -362,7 +358,7 @@ class Template {
362
358
  runtimeSource = codeGenerationResults.getSource(
363
359
  module,
364
360
  renderContext.chunk.runtime,
365
- "runtime"
361
+ WEBPACK_MODULE_TYPE_RUNTIME
366
362
  );
367
363
  } else {
368
364
  const codeGenResult = module.codeGeneration({
@@ -370,13 +366,14 @@ class Template {
370
366
  dependencyTemplates: renderContext.dependencyTemplates,
371
367
  moduleGraph: renderContext.moduleGraph,
372
368
  runtimeTemplate: renderContext.runtimeTemplate,
373
- runtime: renderContext.chunk.runtime
369
+ runtime: renderContext.chunk.runtime,
370
+ codeGenerationResults
374
371
  });
375
372
  if (!codeGenResult) continue;
376
373
  runtimeSource = codeGenResult.sources.get("runtime");
377
374
  }
378
375
  if (runtimeSource) {
379
- source.add(Template.toNormalComment(module.identifier()) + "\n");
376
+ source.add(`${Template.toNormalComment(module.identifier())}\n`);
380
377
  if (!module.shouldIsolate()) {
381
378
  source.add(runtimeSource);
382
379
  source.add("\n\n");
@@ -403,7 +400,7 @@ class Template {
403
400
  return new PrefixSource(
404
401
  "/******/ ",
405
402
  new ConcatSource(
406
- "function(__webpack_require__) { // webpackRuntimeModules\n",
403
+ `function(${RuntimeGlobals.require}) { // webpackRuntimeModules\n`,
407
404
  this.renderRuntimeModules(runtimeModules, renderContext),
408
405
  "}\n"
409
406
  )