webpack 5.76.1 → 5.88.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -8,6 +8,7 @@
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const OriginalSource = require("webpack-sources").OriginalSource;
10
10
  const Module = require("./Module");
11
+ const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
11
12
 
12
13
  /** @typedef {import("webpack-sources").Source} Source */
13
14
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
@@ -24,7 +25,7 @@ const Module = require("./Module");
24
25
  /** @typedef {import("./util/Hash")} Hash */
25
26
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
26
27
 
27
- const TYPES = new Set(["runtime"]);
28
+ const TYPES = new Set([WEBPACK_MODULE_TYPE_RUNTIME]);
28
29
 
29
30
  class RuntimeModule extends Module {
30
31
  /**
@@ -32,20 +33,20 @@ class RuntimeModule extends Module {
32
33
  * @param {number=} stage an optional stage
33
34
  */
34
35
  constructor(name, stage = 0) {
35
- super("runtime");
36
+ super(WEBPACK_MODULE_TYPE_RUNTIME);
36
37
  this.name = name;
37
38
  this.stage = stage;
38
39
  this.buildMeta = {};
39
40
  this.buildInfo = {};
40
- /** @type {Compilation} */
41
+ /** @type {Compilation | undefined} */
41
42
  this.compilation = undefined;
42
- /** @type {Chunk} */
43
+ /** @type {Chunk | undefined} */
43
44
  this.chunk = undefined;
44
- /** @type {ChunkGraph} */
45
+ /** @type {ChunkGraph | undefined} */
45
46
  this.chunkGraph = undefined;
46
47
  this.fullHash = false;
47
48
  this.dependentHash = false;
48
- /** @type {string} */
49
+ /** @type {string | undefined} */
49
50
  this._cachedGeneratedCode = undefined;
50
51
  }
51
52
 
@@ -116,7 +117,7 @@ class RuntimeModule extends Module {
116
117
  hash.update(this.getGeneratedCode());
117
118
  }
118
119
  } catch (err) {
119
- hash.update(err.message);
120
+ hash.update(/** @type {Error} */ (err).message);
120
121
  }
121
122
  super.updateHash(hash, context);
122
123
  }
@@ -137,7 +138,7 @@ class RuntimeModule extends Module {
137
138
  const generatedCode = this.getGeneratedCode();
138
139
  if (generatedCode) {
139
140
  sources.set(
140
- "runtime",
141
+ WEBPACK_MODULE_TYPE_RUNTIME,
141
142
  this.useSourceMap || this.useSimpleSourceMap
142
143
  ? new OriginalSource(generatedCode, this.identifier())
143
144
  : new RawSource(generatedCode)
@@ -165,7 +166,7 @@ class RuntimeModule extends Module {
165
166
  /* istanbul ignore next */
166
167
  /**
167
168
  * @abstract
168
- * @returns {string} runtime code
169
+ * @returns {string | null} runtime code
169
170
  */
170
171
  generate() {
171
172
  const AbstractMethodError = require("./AbstractMethodError");
@@ -173,11 +174,11 @@ class RuntimeModule extends Module {
173
174
  }
174
175
 
175
176
  /**
176
- * @returns {string} runtime code
177
+ * @returns {string | null} runtime code
177
178
  */
178
179
  getGeneratedCode() {
179
180
  if (this._cachedGeneratedCode) {
180
- return this._cachedGeneratedCode;
181
+ return /** @type {string | null} */ (this._cachedGeneratedCode);
181
182
  }
182
183
  return (this._cachedGeneratedCode = this.generate());
183
184
  }
@@ -99,6 +99,10 @@ class RuntimePlugin {
99
99
  apply(compiler) {
100
100
  compiler.hooks.compilation.tap("RuntimePlugin", compilation => {
101
101
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
102
+ /**
103
+ * @param {Chunk} chunk chunk
104
+ * @returns {boolean} true, when chunk loading is disabled for the chunk
105
+ */
102
106
  const isChunkLoadingDisabledForChunk = chunk => {
103
107
  const options = chunk.getEntryOptions();
104
108
  const chunkLoading =
@@ -124,7 +128,8 @@ class RuntimePlugin {
124
128
  });
125
129
  }
126
130
  for (const req of Object.keys(TREE_DEPENDENCIES)) {
127
- const deps = TREE_DEPENDENCIES[req];
131
+ const deps =
132
+ TREE_DEPENDENCIES[/** @type {keyof TREE_DEPENDENCIES} */ (req)];
128
133
  compilation.hooks.runtimeRequirementInTree
129
134
  .for(req)
130
135
  .tap("RuntimePlugin", (chunk, set) => {
@@ -132,7 +137,8 @@ class RuntimePlugin {
132
137
  });
133
138
  }
134
139
  for (const req of Object.keys(MODULE_DEPENDENCIES)) {
135
- const deps = MODULE_DEPENDENCIES[req];
140
+ const deps =
141
+ MODULE_DEPENDENCIES[/** @type {keyof MODULE_DEPENDENCIES} */ (req)];
136
142
  compilation.hooks.runtimeRequirementInModule
137
143
  .for(req)
138
144
  .tap("RuntimePlugin", (chunk, set) => {
@@ -373,9 +379,10 @@ class RuntimePlugin {
373
379
  if (withCreateScriptUrl) {
374
380
  set.add(RuntimeGlobals.createScriptUrl);
375
381
  }
382
+ const withFetchPriority = set.has(RuntimeGlobals.hasFetchPriority);
376
383
  compilation.addRuntimeModule(
377
384
  chunk,
378
- new LoadScriptRuntimeModule(withCreateScriptUrl)
385
+ new LoadScriptRuntimeModule(withCreateScriptUrl, withFetchPriority)
379
386
  );
380
387
  return true;
381
388
  });
@@ -396,7 +396,7 @@ class RuntimeTemplate {
396
396
 
397
397
  /**
398
398
  * @param {Object} options options object
399
- * @param {Module} options.module the module
399
+ * @param {Module | null} options.module the module
400
400
  * @param {ChunkGraph} options.chunkGraph the chunk graph
401
401
  * @param {string} options.request the request that should be printed as comment
402
402
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
@@ -429,7 +429,7 @@ class RuntimeTemplate {
429
429
  );
430
430
  }
431
431
  runtimeRequirements.add(RuntimeGlobals.require);
432
- return `__webpack_require__(${this.moduleId({
432
+ return `${RuntimeGlobals.require}(${this.moduleId({
433
433
  module,
434
434
  chunkGraph,
435
435
  request,
@@ -439,7 +439,7 @@ class RuntimeTemplate {
439
439
 
440
440
  /**
441
441
  * @param {Object} options options object
442
- * @param {Module} options.module the module
442
+ * @param {Module | null} options.module the module
443
443
  * @param {ChunkGraph} options.chunkGraph the chunk graph
444
444
  * @param {string} options.request the request that should be printed as comment
445
445
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
@@ -625,7 +625,7 @@ class RuntimeTemplate {
625
625
  )})`;
626
626
  } else {
627
627
  runtimeRequirements.add(RuntimeGlobals.require);
628
- appending = `.then(__webpack_require__.bind(__webpack_require__, ${comment}${idExpr}))`;
628
+ appending = `.then(${RuntimeGlobals.require}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}))`;
629
629
  }
630
630
  break;
631
631
  case "dynamic":
@@ -651,7 +651,7 @@ class RuntimeTemplate {
651
651
  )})`;
652
652
  } else {
653
653
  runtimeRequirements.add(RuntimeGlobals.require);
654
- appending = `.then(__webpack_require__.bind(__webpack_require__, ${comment}${idExpr}))`;
654
+ appending = `.then(${RuntimeGlobals.require}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}))`;
655
655
  }
656
656
  appending += `.then(${this.returningFunction(
657
657
  `${RuntimeGlobals.createFakeNamespaceObject}(m, ${fakeType})`,
@@ -666,7 +666,7 @@ class RuntimeTemplate {
666
666
  `${header}return ${returnExpression};`
667
667
  )})`;
668
668
  } else {
669
- appending = `.then(${RuntimeGlobals.createFakeNamespaceObject}.bind(__webpack_require__, ${comment}${idExpr}, ${fakeType}))`;
669
+ appending = `.then(${RuntimeGlobals.createFakeNamespaceObject}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}, ${fakeType}))`;
670
670
  }
671
671
  }
672
672
  break;
@@ -773,7 +773,7 @@ class RuntimeTemplate {
773
773
  originModule.buildMeta.strictHarmonyModule
774
774
  );
775
775
  runtimeRequirements.add(RuntimeGlobals.require);
776
- const importContent = `/* harmony import */ ${optDeclaration}${importVar} = __webpack_require__(${moduleId});\n`;
776
+ const importContent = `/* harmony import */ ${optDeclaration}${importVar} = ${RuntimeGlobals.require}(${moduleId});\n`;
777
777
 
778
778
  if (exportsType === "dynamic") {
779
779
  runtimeRequirements.add(RuntimeGlobals.compatGetDefaultExport);
@@ -794,10 +794,10 @@ class RuntimeTemplate {
794
794
  * @param {Module} options.originModule the origin module
795
795
  * @param {boolean|undefined} options.asiSafe true, if location is safe for ASI, a bracket can be emitted
796
796
  * @param {boolean} options.isCall true, if expression will be called
797
- * @param {boolean} options.callContext when false, call context will not be preserved
797
+ * @param {boolean | null} options.callContext when false, call context will not be preserved
798
798
  * @param {boolean} options.defaultInterop when true and accessing the default exports, interop code will be generated
799
799
  * @param {string} options.importVar the identifier name of the import variable
800
- * @param {InitFragment[]} options.initFragments init fragments will be added here
800
+ * @param {InitFragment<TODO>[]} options.initFragments init fragments will be added here
801
801
  * @param {RuntimeSpec} options.runtime runtime for which this code will be generated
802
802
  * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
803
803
  * @returns {string} expression
@@ -939,11 +939,29 @@ class RuntimeTemplate {
939
939
  if (chunks.length === 1) {
940
940
  const chunkId = JSON.stringify(chunks[0].id);
941
941
  runtimeRequirements.add(RuntimeGlobals.ensureChunk);
942
- return `${RuntimeGlobals.ensureChunk}(${comment}${chunkId})`;
942
+
943
+ const fetchPriority = chunkGroup.options.fetchPriority;
944
+
945
+ if (fetchPriority) {
946
+ runtimeRequirements.add(RuntimeGlobals.hasFetchPriority);
947
+ }
948
+
949
+ return `${RuntimeGlobals.ensureChunk}(${comment}${chunkId}${
950
+ fetchPriority ? `, ${JSON.stringify(fetchPriority)}` : ""
951
+ })`;
943
952
  } else if (chunks.length > 0) {
944
953
  runtimeRequirements.add(RuntimeGlobals.ensureChunk);
954
+
955
+ const fetchPriority = chunkGroup.options.fetchPriority;
956
+
957
+ if (fetchPriority) {
958
+ runtimeRequirements.add(RuntimeGlobals.hasFetchPriority);
959
+ }
960
+
945
961
  const requireChunkId = chunk =>
946
- `${RuntimeGlobals.ensureChunk}(${JSON.stringify(chunk.id)})`;
962
+ `${RuntimeGlobals.ensureChunk}(${JSON.stringify(chunk.id)}${
963
+ fetchPriority ? `, ${JSON.stringify(fetchPriority)}` : ""
964
+ })`;
947
965
  return `Promise.all(${comment.trim()}[${chunks
948
966
  .map(requireChunkId)
949
967
  .join(", ")}])`;
@@ -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, {
@@ -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,7 +22,9 @@ 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 */
27
+ /** @typedef {import("./Compilation").PathData} PathData */
26
28
  /** @typedef {import("./Compiler")} Compiler */
27
29
  /** @typedef {import("./Module")} Module */
28
30
  /** @typedef {import("./NormalModule").SourceMap} SourceMap */
@@ -47,13 +49,32 @@ const validate = createSchemaValidation(
47
49
  * @property {ItemCacheFacade} cacheItem cache item
48
50
  */
49
51
 
52
+ const METACHARACTERS_REGEXP = /[-[\]\\/{}()*+?.^$|]/g;
53
+ const CONTENT_HASH_DETECT_REGEXP = /\[contenthash(:\w+)?\]/;
54
+ const CSS_AND_JS_MODULE_EXTENSIONS_REGEXP = /\.((c|m)?js|css)($|\?)/i;
55
+ const CSS_EXTENSION_DETECT_REGEXP = /\.css($|\?)/i;
56
+ const MAP_URL_COMMENT_REGEXP = /\[map\]/g;
57
+ const URL_COMMENT_REGEXP = /\[url\]/g;
58
+ const URL_FORMATTING_REGEXP = /^\n\/\/(.*)$/;
59
+
60
+ /**
61
+ * Reset's .lastIndex of stateful Regular Expressions
62
+ * For when `test` or `exec` is called on them
63
+ * @param {RegExp} regexp Stateful Regular Expression to be reset
64
+ * @returns {void}
65
+ *
66
+ */
67
+ const resetRegexpState = regexp => {
68
+ regexp.lastIndex = -1;
69
+ };
70
+
50
71
  /**
51
72
  * Escapes regular expression metacharacters
52
73
  * @param {string} str String to quote
53
74
  * @returns {string} Escaped string
54
75
  */
55
76
  const quoteMeta = str => {
56
- return str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
77
+ return str.replace(METACHARACTERS_REGEXP, "\\$&");
57
78
  };
58
79
 
59
80
  /**
@@ -120,7 +141,7 @@ class SourceMapDevToolPlugin {
120
141
 
121
142
  /** @type {string | false} */
122
143
  this.sourceMapFilename = options.filename;
123
- /** @type {string | false} */
144
+ /** @type {string | false | (function(PathData, AssetInfo=): string)}} */
124
145
  this.sourceMappingURLComment =
125
146
  options.append === false
126
147
  ? false
@@ -152,7 +173,7 @@ class SourceMapDevToolPlugin {
152
173
  const fallbackModuleFilenameTemplate = this.fallbackModuleFilenameTemplate;
153
174
  const requestShortener = compiler.requestShortener;
154
175
  const options = this.options;
155
- options.test = options.test || /\.((c|m)?js|css)($|\?)/i;
176
+ options.test = options.test || CSS_AND_JS_MODULE_EXTENSIONS_REGEXP;
156
177
 
157
178
  const matchObject = ModuleFilenameHelpers.matchObject.bind(
158
179
  undefined,
@@ -207,7 +228,9 @@ class SourceMapDevToolPlugin {
207
228
  asyncLib.each(
208
229
  files,
209
230
  (file, callback) => {
210
- const asset = compilation.getAsset(file);
231
+ const asset =
232
+ /** @type {Readonly<Asset>} */
233
+ (compilation.getAsset(file));
211
234
  if (asset.info.related && asset.info.related.sourceMap) {
212
235
  fileIndex++;
213
236
  return callback();
@@ -343,7 +366,9 @@ class SourceMapDevToolPlugin {
343
366
  // find modules with conflicting source names
344
367
  for (let idx = 0; idx < allModules.length; idx++) {
345
368
  const module = allModules[idx];
346
- let sourceName = moduleToSourceNameMapping.get(module);
369
+ let sourceName =
370
+ /** @type {string} */
371
+ (moduleToSourceNameMapping.get(module));
347
372
  let hasName = conflictDetectionSet.has(sourceName);
348
373
  if (!hasName) {
349
374
  conflictDetectionSet.add(sourceName);
@@ -409,7 +434,9 @@ class SourceMapDevToolPlugin {
409
434
  sourceMap.file = file;
410
435
  const usesContentHash =
411
436
  sourceMapFilename &&
412
- /\[contenthash(:\w+)?\]/.test(sourceMapFilename);
437
+ CONTENT_HASH_DETECT_REGEXP.test(sourceMapFilename);
438
+
439
+ resetRegexpState(CONTENT_HASH_DETECT_REGEXP);
413
440
 
414
441
  // If SourceMap and asset uses contenthash, avoid a circular dependency by hiding hash in `file`
415
442
  if (usesContentHash && task.assetInfo.contenthash) {
@@ -426,15 +453,19 @@ class SourceMapDevToolPlugin {
426
453
  );
427
454
  }
428
455
 
429
- /** @type {string | false} */
456
+ /** @type {string | false | (function(PathData, AssetInfo=): string)} */
430
457
  let currentSourceMappingURLComment = sourceMappingURLComment;
458
+ let cssExtensionDetected =
459
+ CSS_EXTENSION_DETECT_REGEXP.test(file);
460
+ resetRegexpState(CSS_EXTENSION_DETECT_REGEXP);
431
461
  if (
432
462
  currentSourceMappingURLComment !== false &&
433
- /\.css($|\?)/i.test(file)
463
+ typeof currentSourceMappingURLComment !== "function" &&
464
+ cssExtensionDetected
434
465
  ) {
435
466
  currentSourceMappingURLComment =
436
467
  currentSourceMappingURLComment.replace(
437
- /^\n\/\/(.*)$/,
468
+ URL_FORMATTING_REGEXP,
438
469
  "\n/*$1*/"
439
470
  );
440
471
  }
@@ -510,15 +541,20 @@ class SourceMapDevToolPlugin {
510
541
  "SourceMapDevToolPlugin: append can't be false when no filename is provided"
511
542
  );
512
543
  }
544
+ if (typeof currentSourceMappingURLComment === "function") {
545
+ throw new Error(
546
+ "SourceMapDevToolPlugin: append can't be a function when no filename is provided"
547
+ );
548
+ }
513
549
  /**
514
550
  * Add source map as data url to asset
515
551
  */
516
552
  const asset = new ConcatSource(
517
553
  new RawSource(source),
518
554
  currentSourceMappingURLComment
519
- .replace(/\[map\]/g, () => sourceMapString)
555
+ .replace(MAP_URL_COMMENT_REGEXP, () => sourceMapString)
520
556
  .replace(
521
- /\[url\]/g,
557
+ URL_COMMENT_REGEXP,
522
558
  () =>
523
559
  `data:application/json;charset=utf-8;base64,${Buffer.from(
524
560
  sourceMapString,
package/lib/Template.js CHANGED
@@ -6,6 +6,8 @@
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 */
@@ -288,7 +290,7 @@ class Template {
288
290
  * @param {Module[]} modules modules to render (should be ordered by identifier)
289
291
  * @param {function(Module): Source} renderModule function to render a module
290
292
  * @param {string=} prefix applying prefix strings
291
- * @returns {Source} rendered chunk modules in a Source object
293
+ * @returns {Source | null} rendered chunk modules in a Source object or null if no modules
292
294
  */
293
295
  static renderChunkModules(renderContext, modules, renderModule, prefix = "") {
294
296
  const { chunkGraph } = renderContext;
@@ -362,7 +364,7 @@ class Template {
362
364
  runtimeSource = codeGenerationResults.getSource(
363
365
  module,
364
366
  renderContext.chunk.runtime,
365
- "runtime"
367
+ WEBPACK_MODULE_TYPE_RUNTIME
366
368
  );
367
369
  } else {
368
370
  const codeGenResult = module.codeGeneration({
@@ -404,7 +406,7 @@ class Template {
404
406
  return new PrefixSource(
405
407
  "/******/ ",
406
408
  new ConcatSource(
407
- "function(__webpack_require__) { // webpackRuntimeModules\n",
409
+ `function(${RuntimeGlobals.require}) { // webpackRuntimeModules\n`,
408
410
  this.renderRuntimeModules(runtimeModules, renderContext),
409
411
  "}\n"
410
412
  )
@@ -5,9 +5,20 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
8
13
  const ConstDependency = require("./dependencies/ConstDependency");
9
14
 
10
15
  /** @typedef {import("./Compiler")} Compiler */
16
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
17
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
18
+ /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
19
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
20
+
21
+ const PLUGIN_NAME = "UseStrictPlugin";
11
22
 
12
23
  class UseStrictPlugin {
13
24
  /**
@@ -17,10 +28,13 @@ class UseStrictPlugin {
17
28
  */
18
29
  apply(compiler) {
19
30
  compiler.hooks.compilation.tap(
20
- "UseStrictPlugin",
31
+ PLUGIN_NAME,
21
32
  (compilation, { normalModuleFactory }) => {
33
+ /**
34
+ * @param {JavascriptParser} parser the parser
35
+ */
22
36
  const handler = parser => {
23
- parser.hooks.program.tap("UseStrictPlugin", ast => {
37
+ parser.hooks.program.tap(PLUGIN_NAME, ast => {
24
38
  const firstNode = ast.body[0];
25
39
  if (
26
40
  firstNode &&
@@ -31,23 +45,27 @@ class UseStrictPlugin {
31
45
  // Remove "use strict" expression. It will be added later by the renderer again.
32
46
  // This is necessary in order to not break the strict mode when webpack prepends code.
33
47
  // @see https://github.com/webpack/webpack/issues/1970
34
- const dep = new ConstDependency("", firstNode.range);
35
- dep.loc = firstNode.loc;
48
+ const dep = new ConstDependency(
49
+ "",
50
+ /** @type {Range} */ (firstNode.range)
51
+ );
52
+ dep.loc = /** @type {DependencyLocation} */ (firstNode.loc);
36
53
  parser.state.module.addPresentationalDependency(dep);
37
- parser.state.module.buildInfo.strict = true;
54
+ /** @type {BuildInfo} */
55
+ (parser.state.module.buildInfo).strict = true;
38
56
  }
39
57
  });
40
58
  };
41
59
 
42
60
  normalModuleFactory.hooks.parser
43
- .for("javascript/auto")
44
- .tap("UseStrictPlugin", handler);
61
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
62
+ .tap(PLUGIN_NAME, handler);
45
63
  normalModuleFactory.hooks.parser
46
- .for("javascript/dynamic")
47
- .tap("UseStrictPlugin", handler);
64
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
65
+ .tap(PLUGIN_NAME, handler);
48
66
  normalModuleFactory.hooks.parser
49
- .for("javascript/esm")
50
- .tap("UseStrictPlugin", handler);
67
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
68
+ .tap(PLUGIN_NAME, handler);
51
69
  }
52
70
  );
53
71
  }
@@ -9,6 +9,7 @@ const CaseSensitiveModulesWarning = require("./CaseSensitiveModulesWarning");
9
9
 
10
10
  /** @typedef {import("./Compiler")} Compiler */
11
11
  /** @typedef {import("./Module")} Module */
12
+ /** @typedef {import("./NormalModule")} NormalModule */
12
13
 
13
14
  class WarnCaseSensitiveModulesPlugin {
14
15
  /**
@@ -25,6 +26,17 @@ class WarnCaseSensitiveModulesPlugin {
25
26
  const moduleWithoutCase = new Map();
26
27
  for (const module of compilation.modules) {
27
28
  const identifier = module.identifier();
29
+
30
+ // Ignore `data:` URLs, because it's not a real path
31
+ if (
32
+ /** @type {NormalModule} */
33
+ (module).resourceResolveData !== undefined &&
34
+ /** @type {NormalModule} */
35
+ (module).resourceResolveData.encodedContent !== undefined
36
+ ) {
37
+ continue;
38
+ }
39
+
28
40
  const lowerIdentifier = identifier.toLowerCase();
29
41
  let map = moduleWithoutCase.get(lowerIdentifier);
30
42
  if (map === undefined) {
@@ -40,6 +40,13 @@ class WarnDeprecatedOptionPlugin {
40
40
  }
41
41
 
42
42
  class DeprecatedOptionWarning extends WebpackError {
43
+ /**
44
+ * Create an instance deprecated option warning
45
+ *
46
+ * @param {string} option the target option
47
+ * @param {string | number} value the deprecated option value
48
+ * @param {string} suggestion the suggestion replacement
49
+ */
43
50
  constructor(option, value, suggestion) {
44
51
  super();
45
52
 
@@ -36,6 +36,10 @@ class IgnoringWatchFileSystem {
36
36
  watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
37
37
  files = Array.from(files);
38
38
  dirs = Array.from(dirs);
39
+ /**
40
+ * @param {string} path path to check
41
+ * @returns {boolean} true, if path is ignored
42
+ */
39
43
  const ignored = path =>
40
44
  this.paths.some(p =>
41
45
  p instanceof RegExp ? p.test(path) : path.indexOf(p) === 0