webpack 5.76.1 → 5.88.0

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

Potentially problematic release.


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

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -6,15 +6,24 @@
6
6
  "use strict";
7
7
 
8
8
  const IgnoreErrorModuleFactory = require("./IgnoreErrorModuleFactory");
9
+ const {
10
+ JAVASCRIPT_MODULE_TYPE_AUTO,
11
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
12
+ JAVASCRIPT_MODULE_TYPE_ESM
13
+ } = require("./ModuleTypeConstants");
9
14
  const WebpackIsIncludedDependency = require("./dependencies/WebpackIsIncludedDependency");
10
15
  const {
11
16
  toConstantDependency
12
17
  } = require("./javascript/JavascriptParserHelpers");
13
18
 
14
- /** @typedef {import("enhanced-resolve/lib/Resolver")} Resolver */
19
+ /** @typedef {import("enhanced-resolve").Resolver} Resolver */
15
20
  /** @typedef {import("./Compiler")} Compiler */
21
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
16
22
  /** @typedef {import("./Module")} Module */
17
23
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
24
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
25
+
26
+ const PLUGIN_NAME = "WebpackIsIncludedPlugin";
18
27
 
19
28
  class WebpackIsIncludedPlugin {
20
29
  /**
@@ -23,7 +32,7 @@ class WebpackIsIncludedPlugin {
23
32
  */
24
33
  apply(compiler) {
25
34
  compiler.hooks.compilation.tap(
26
- "WebpackIsIncludedPlugin",
35
+ PLUGIN_NAME,
27
36
  (compilation, { normalModuleFactory }) => {
28
37
  compilation.dependencyFactories.set(
29
38
  WebpackIsIncludedDependency,
@@ -41,7 +50,7 @@ class WebpackIsIncludedPlugin {
41
50
  const handler = parser => {
42
51
  parser.hooks.call
43
52
  .for("__webpack_is_included__")
44
- .tap("WebpackIsIncludedPlugin", expr => {
53
+ .tap(PLUGIN_NAME, expr => {
45
54
  if (
46
55
  expr.type !== "CallExpression" ||
47
56
  expr.arguments.length !== 1 ||
@@ -54,29 +63,29 @@ class WebpackIsIncludedPlugin {
54
63
  if (!request.isString()) return;
55
64
 
56
65
  const dep = new WebpackIsIncludedDependency(
57
- request.string,
58
- expr.range
66
+ /** @type {string} */ (request.string),
67
+ /** @type {Range} */ (expr.range)
59
68
  );
60
- dep.loc = expr.loc;
69
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
61
70
  parser.state.module.addDependency(dep);
62
71
  return true;
63
72
  });
64
73
  parser.hooks.typeof
65
74
  .for("__webpack_is_included__")
66
75
  .tap(
67
- "WebpackIsIncludedPlugin",
76
+ PLUGIN_NAME,
68
77
  toConstantDependency(parser, JSON.stringify("function"))
69
78
  );
70
79
  };
71
80
  normalModuleFactory.hooks.parser
72
- .for("javascript/auto")
73
- .tap("WebpackIsIncludedPlugin", handler);
81
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
82
+ .tap(PLUGIN_NAME, handler);
74
83
  normalModuleFactory.hooks.parser
75
- .for("javascript/dynamic")
76
- .tap("WebpackIsIncludedPlugin", handler);
84
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
85
+ .tap(PLUGIN_NAME, handler);
77
86
  normalModuleFactory.hooks.parser
78
- .for("javascript/esm")
79
- .tap("WebpackIsIncludedPlugin", handler);
87
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
88
+ .tap(PLUGIN_NAME, handler);
80
89
  }
81
90
  );
82
91
  }
@@ -119,47 +119,40 @@ class WebpackOptionsApply extends OptionsApply {
119
119
  if (options.externalsPresets.webAsync) {
120
120
  //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
121
121
  const ExternalsPlugin = require("./ExternalsPlugin");
122
- new ExternalsPlugin(
123
- "import",
124
- options.experiments.css
125
- ? ({ request, dependencyType }, callback) => {
126
- if (dependencyType === "url") {
127
- if (/^(\/\/|https?:\/\/)/.test(request))
128
- return callback(null, `asset ${request}`);
129
- } else if (dependencyType === "css-import") {
130
- if (/^(\/\/|https?:\/\/)/.test(request))
131
- return callback(null, `css-import ${request}`);
132
- } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
133
- if (/^\.css(\?|$)/.test(request))
134
- return callback(null, `css-import ${request}`);
135
- return callback(null, `import ${request}`);
136
- }
137
- callback();
138
- }
139
- : /^(\/\/|https?:\/\/|std:)/
140
- ).apply(compiler);
122
+ new ExternalsPlugin("import", ({ request, dependencyType }, callback) => {
123
+ if (dependencyType === "url") {
124
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
125
+ return callback(null, `asset ${request}`);
126
+ } else if (options.experiments.css && dependencyType === "css-import") {
127
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
128
+ return callback(null, `css-import ${request}`);
129
+ } else if (
130
+ options.experiments.css &&
131
+ /^(\/\/|https?:\/\/|std:)/.test(request)
132
+ ) {
133
+ if (/^\.css(\?|$)/.test(request))
134
+ return callback(null, `css-import ${request}`);
135
+ return callback(null, `import ${request}`);
136
+ }
137
+ callback();
138
+ }).apply(compiler);
141
139
  } else if (options.externalsPresets.web) {
142
140
  //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
143
141
  const ExternalsPlugin = require("./ExternalsPlugin");
144
- new ExternalsPlugin(
145
- "module",
146
- options.experiments.css
147
- ? ({ request, dependencyType }, callback) => {
148
- if (dependencyType === "url") {
149
- if (/^(\/\/|https?:\/\/)/.test(request))
150
- return callback(null, `asset ${request}`);
151
- } else if (dependencyType === "css-import") {
152
- if (/^(\/\/|https?:\/\/)/.test(request))
153
- return callback(null, `css-import ${request}`);
154
- } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
155
- if (/^\.css(\?|$)/.test(request))
156
- return callback(null, `css-import ${request}`);
157
- return callback(null, `module ${request}`);
158
- }
159
- callback();
160
- }
161
- : /^(\/\/|https?:\/\/|std:)/
162
- ).apply(compiler);
142
+ new ExternalsPlugin("module", ({ request, dependencyType }, callback) => {
143
+ if (dependencyType === "url") {
144
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
145
+ return callback(null, `asset ${request}`);
146
+ } else if (options.experiments.css && dependencyType === "css-import") {
147
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
148
+ return callback(null, `css-import ${request}`);
149
+ } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
150
+ if (options.experiments.css && /^\.css((\?)|$)/.test(request))
151
+ return callback(null, `css-import ${request}`);
152
+ return callback(null, `module ${request}`);
153
+ }
154
+ callback();
155
+ }).apply(compiler);
163
156
  } else if (options.externalsPresets.node) {
164
157
  if (options.experiments.css) {
165
158
  //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
@@ -168,10 +161,10 @@ class WebpackOptionsApply extends OptionsApply {
168
161
  "module",
169
162
  ({ request, dependencyType }, callback) => {
170
163
  if (dependencyType === "url") {
171
- if (/^(\/\/|https?:\/\/)/.test(request))
164
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
172
165
  return callback(null, `asset ${request}`);
173
166
  } else if (dependencyType === "css-import") {
174
- if (/^(\/\/|https?:\/\/)/.test(request))
167
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
175
168
  return callback(null, `css-import ${request}`);
176
169
  } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
177
170
  if (/^\.css(\?|$)/.test(request))
@@ -375,7 +368,9 @@ class WebpackOptionsApply extends OptionsApply {
375
368
  const NodeStuffPlugin = require("./NodeStuffPlugin");
376
369
  new NodeStuffPlugin(options.node).apply(compiler);
377
370
  }
378
- new APIPlugin().apply(compiler);
371
+ new APIPlugin({
372
+ module: options.output.module
373
+ }).apply(compiler);
379
374
  new ExportsInfoApiPlugin().apply(compiler);
380
375
  new WebpackIsIncludedPlugin().apply(compiler);
381
376
  new ConstPlugin().apply(compiler);
@@ -391,7 +386,8 @@ class WebpackOptionsApply extends OptionsApply {
391
386
  new WorkerPlugin(
392
387
  options.output.workerChunkLoading,
393
388
  options.output.workerWasmLoading,
394
- options.output.module
389
+ options.output.module,
390
+ options.output.workerPublicPath
395
391
  ).apply(compiler);
396
392
 
397
393
  new DefaultStatsFactoryPlugin().apply(compiler);
@@ -570,7 +566,7 @@ class WebpackOptionsApply extends OptionsApply {
570
566
  for (const minimizer of options.optimization.minimizer) {
571
567
  if (typeof minimizer === "function") {
572
568
  minimizer.call(compiler, compiler);
573
- } else if (minimizer !== "...") {
569
+ } else if (minimizer !== "..." && minimizer) {
574
570
  minimizer.apply(compiler);
575
571
  }
576
572
  }
@@ -663,7 +659,8 @@ class WebpackOptionsApply extends OptionsApply {
663
659
  maxAge: cacheOptions.maxAge,
664
660
  profile: cacheOptions.profile,
665
661
  allowCollectingMemory: cacheOptions.allowCollectingMemory,
666
- compression: cacheOptions.compression
662
+ compression: cacheOptions.compression,
663
+ readonly: cacheOptions.readonly
667
664
  }),
668
665
  cacheOptions.idleTimeout,
669
666
  cacheOptions.idleTimeoutForInitialStore,
@@ -8,11 +8,18 @@
8
8
  const { applyWebpackOptionsDefaults } = require("./config/defaults");
9
9
  const { getNormalizedWebpackOptions } = require("./config/normalization");
10
10
 
11
+ /** @typedef {import("./config/normalization").WebpackOptions} WebpackOptions */
12
+ /** @typedef {import("./config/normalization").WebpackOptionsNormalized} WebpackOptionsNormalized */
13
+
11
14
  class WebpackOptionsDefaulter {
15
+ /**
16
+ * @param {WebpackOptions} options webpack options
17
+ * @returns {WebpackOptionsNormalized} normalized webpack options
18
+ */
12
19
  process(options) {
13
- options = getNormalizedWebpackOptions(options);
14
- applyWebpackOptionsDefaults(options);
15
- return options;
20
+ const normalizedOptions = getNormalizedWebpackOptions(options);
21
+ applyWebpackOptionsDefaults(normalizedOptions);
22
+ return normalizedOptions;
16
23
  }
17
24
  }
18
25
 
@@ -10,6 +10,7 @@ const path = require("path");
10
10
  const { RawSource } = require("webpack-sources");
11
11
  const ConcatenationScope = require("../ConcatenationScope");
12
12
  const Generator = require("../Generator");
13
+ const { ASSET_MODULE_TYPE } = require("../ModuleTypeConstants");
13
14
  const RuntimeGlobals = require("../RuntimeGlobals");
14
15
  const createHash = require("../util/createHash");
15
16
  const { makePathsRelative } = require("../util/identifier");
@@ -106,15 +107,28 @@ const encodeDataUri = (encoding, source) => {
106
107
  return encodedContent;
107
108
  };
108
109
 
110
+ /**
111
+ * @param {string} encoding encoding
112
+ * @param {string} content content
113
+ * @returns {Buffer} decoded content
114
+ */
109
115
  const decodeDataUriContent = (encoding, content) => {
110
116
  const isBase64 = encoding === "base64";
111
- return isBase64
112
- ? Buffer.from(content, "base64")
113
- : Buffer.from(decodeURIComponent(content), "ascii");
117
+
118
+ if (isBase64) {
119
+ return Buffer.from(content, "base64");
120
+ }
121
+
122
+ // If we can't decode return the original body
123
+ try {
124
+ return Buffer.from(decodeURIComponent(content), "ascii");
125
+ } catch (_) {
126
+ return Buffer.from(content, "ascii");
127
+ }
114
128
  };
115
129
 
116
130
  const JS_TYPES = new Set(["javascript"]);
117
- const JS_AND_ASSET_TYPES = new Set(["javascript", "asset"]);
131
+ const JS_AND_ASSET_TYPES = new Set(["javascript", ASSET_MODULE_TYPE]);
118
132
  const DEFAULT_ENCODING = "base64";
119
133
 
120
134
  class AssetGenerator extends Generator {
@@ -167,6 +181,7 @@ class AssetGenerator extends Generator {
167
181
  );
168
182
  }
169
183
 
184
+ /** @type {string | boolean | undefined} */
170
185
  let mimeType = this.dataUrlOptions.mimetype;
171
186
  if (mimeType === undefined) {
172
187
  const ext = path.extname(module.nameForCondition());
@@ -199,7 +214,7 @@ class AssetGenerator extends Generator {
199
214
  );
200
215
  }
201
216
 
202
- return mimeType;
217
+ return /** @type {string} */ (mimeType);
203
218
  }
204
219
 
205
220
  /**
@@ -220,11 +235,11 @@ class AssetGenerator extends Generator {
220
235
  }
221
236
  ) {
222
237
  switch (type) {
223
- case "asset":
224
- return module.originalSource();
238
+ case ASSET_MODULE_TYPE:
239
+ return /** @type {Source} */ (module.originalSource());
225
240
  default: {
226
241
  let content;
227
- const originalSource = module.originalSource();
242
+ const originalSource = /** @type {Source} */ (module.originalSource());
228
243
  if (module.buildInfo.dataUrl) {
229
244
  let encodedSource;
230
245
  if (typeof this.dataUrlOptions === "function") {
@@ -398,7 +413,7 @@ class AssetGenerator extends Generator {
398
413
  */
399
414
  getSize(module, type) {
400
415
  switch (type) {
401
- case "asset": {
416
+ case ASSET_MODULE_TYPE: {
402
417
  const originalSource = module.originalSource();
403
418
 
404
419
  if (!originalSource) {
@@ -5,6 +5,12 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ ASSET_MODULE_TYPE_RESOURCE,
10
+ ASSET_MODULE_TYPE_INLINE,
11
+ ASSET_MODULE_TYPE,
12
+ ASSET_MODULE_TYPE_SOURCE
13
+ } = require("../ModuleTypeConstants");
8
14
  const { cleverMerge } = require("../util/cleverMerge");
9
15
  const { compareModulesByIdentifier } = require("../util/comparators");
10
16
  const createSchemaValidation = require("../util/create-schema-validation");
@@ -15,6 +21,10 @@ const memoize = require("../util/memoize");
15
21
  /** @typedef {import("../Compiler")} Compiler */
16
22
  /** @typedef {import("../Module")} Module */
17
23
 
24
+ /**
25
+ * @param {string} name name of definitions
26
+ * @returns {TODO} definition
27
+ */
18
28
  const getSchema = name => {
19
29
  const { definitions } = require("../../schemas/WebpackOptions.json");
20
30
  return {
@@ -61,7 +71,7 @@ const getAssetSourceGenerator = memoize(() =>
61
71
  require("./AssetSourceGenerator")
62
72
  );
63
73
 
64
- const type = "asset";
74
+ const type = ASSET_MODULE_TYPE;
65
75
  const plugin = "AssetModulesPlugin";
66
76
 
67
77
  class AssetModulesPlugin {
@@ -75,7 +85,7 @@ class AssetModulesPlugin {
75
85
  plugin,
76
86
  (compilation, { normalModuleFactory }) => {
77
87
  normalModuleFactory.hooks.createParser
78
- .for("asset")
88
+ .for(ASSET_MODULE_TYPE)
79
89
  .tap(plugin, parserOptions => {
80
90
  validateParserOptions(parserOptions);
81
91
  parserOptions = cleverMerge(
@@ -96,35 +106,39 @@ class AssetModulesPlugin {
96
106
  return new AssetParser(dataUrlCondition);
97
107
  });
98
108
  normalModuleFactory.hooks.createParser
99
- .for("asset/inline")
109
+ .for(ASSET_MODULE_TYPE_INLINE)
100
110
  .tap(plugin, parserOptions => {
101
111
  const AssetParser = getAssetParser();
102
112
 
103
113
  return new AssetParser(true);
104
114
  });
105
115
  normalModuleFactory.hooks.createParser
106
- .for("asset/resource")
116
+ .for(ASSET_MODULE_TYPE_RESOURCE)
107
117
  .tap(plugin, parserOptions => {
108
118
  const AssetParser = getAssetParser();
109
119
 
110
120
  return new AssetParser(false);
111
121
  });
112
122
  normalModuleFactory.hooks.createParser
113
- .for("asset/source")
123
+ .for(ASSET_MODULE_TYPE_SOURCE)
114
124
  .tap(plugin, parserOptions => {
115
125
  const AssetSourceParser = getAssetSourceParser();
116
126
 
117
127
  return new AssetSourceParser();
118
128
  });
119
129
 
120
- for (const type of ["asset", "asset/inline", "asset/resource"]) {
130
+ for (const type of [
131
+ ASSET_MODULE_TYPE,
132
+ ASSET_MODULE_TYPE_INLINE,
133
+ ASSET_MODULE_TYPE_RESOURCE
134
+ ]) {
121
135
  normalModuleFactory.hooks.createGenerator
122
136
  .for(type)
123
137
  .tap(plugin, generatorOptions => {
124
138
  validateGeneratorOptions[type](generatorOptions);
125
139
 
126
140
  let dataUrl = undefined;
127
- if (type !== "asset/resource") {
141
+ if (type !== ASSET_MODULE_TYPE_RESOURCE) {
128
142
  dataUrl = generatorOptions.dataUrl;
129
143
  if (!dataUrl || typeof dataUrl === "object") {
130
144
  dataUrl = {
@@ -138,7 +152,7 @@ class AssetModulesPlugin {
138
152
  let filename = undefined;
139
153
  let publicPath = undefined;
140
154
  let outputPath = undefined;
141
- if (type !== "asset/inline") {
155
+ if (type !== ASSET_MODULE_TYPE_INLINE) {
142
156
  filename = generatorOptions.filename;
143
157
  publicPath = generatorOptions.publicPath;
144
158
  outputPath = generatorOptions.outputPath;
@@ -156,7 +170,7 @@ class AssetModulesPlugin {
156
170
  });
157
171
  }
158
172
  normalModuleFactory.hooks.createGenerator
159
- .for("asset/source")
173
+ .for(ASSET_MODULE_TYPE_SOURCE)
160
174
  .tap(plugin, () => {
161
175
  const AssetSourceGenerator = getAssetSourceGenerator();
162
176
 
@@ -169,7 +183,7 @@ class AssetModulesPlugin {
169
183
 
170
184
  const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
171
185
  chunk,
172
- "asset",
186
+ ASSET_MODULE_TYPE,
173
187
  compareModulesByIdentifier
174
188
  );
175
189
  if (modules) {
@@ -194,7 +208,9 @@ class AssetModulesPlugin {
194
208
  codeGenResult.data.get("fullContentHash")
195
209
  });
196
210
  } catch (e) {
197
- e.message += `\nduring rendering of asset ${module.identifier()}`;
211
+ /** @type {Error} */ (
212
+ e
213
+ ).message += `\nduring rendering of asset ${module.identifier()}`;
198
214
  throw e;
199
215
  }
200
216
  }
@@ -207,7 +223,7 @@ class AssetModulesPlugin {
207
223
  "AssetModulesPlugin",
208
224
  (options, context) => {
209
225
  const { codeGenerationResult } = options;
210
- const source = codeGenerationResult.sources.get("asset");
226
+ const source = codeGenerationResult.sources.get(ASSET_MODULE_TYPE);
211
227
  if (source === undefined) return;
212
228
  context.assets.set(codeGenerationResult.data.get("filename"), {
213
229
  source,
@@ -7,7 +7,10 @@
7
7
 
8
8
  const Parser = require("../Parser");
9
9
 
10
+ /** @typedef {import("../../declarations/WebpackOptions").AssetParserDataUrlOptions} AssetParserDataUrlOptions */
10
11
  /** @typedef {import("../../declarations/WebpackOptions").AssetParserOptions} AssetParserOptions */
12
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
13
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
11
14
  /** @typedef {import("../Parser").ParserState} ParserState */
12
15
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
13
16
 
@@ -29,23 +32,28 @@ class AssetParser extends Parser {
29
32
  if (typeof source === "object" && !Buffer.isBuffer(source)) {
30
33
  throw new Error("AssetParser doesn't accept preparsed AST");
31
34
  }
32
- state.module.buildInfo.strict = true;
33
- state.module.buildMeta.exportsType = "default";
34
- state.module.buildMeta.defaultObject = false;
35
+
36
+ const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
37
+ buildInfo.strict = true;
38
+ const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
39
+ buildMeta.exportsType = "default";
40
+ buildMeta.defaultObject = false;
35
41
 
36
42
  if (typeof this.dataUrlCondition === "function") {
37
- state.module.buildInfo.dataUrl = this.dataUrlCondition(source, {
43
+ buildInfo.dataUrl = this.dataUrlCondition(source, {
38
44
  filename: state.module.matchResource || state.module.resource,
39
45
  module: state.module
40
46
  });
41
47
  } else if (typeof this.dataUrlCondition === "boolean") {
42
- state.module.buildInfo.dataUrl = this.dataUrlCondition;
48
+ buildInfo.dataUrl = this.dataUrlCondition;
43
49
  } else if (
44
50
  this.dataUrlCondition &&
45
51
  typeof this.dataUrlCondition === "object"
46
52
  ) {
47
- state.module.buildInfo.dataUrl =
48
- Buffer.byteLength(source) <= this.dataUrlCondition.maxSize;
53
+ buildInfo.dataUrl =
54
+ Buffer.byteLength(source) <=
55
+ /** @type {NonNullable<AssetParserDataUrlOptions["maxSize"]>} */
56
+ (this.dataUrlCondition.maxSize);
49
57
  } else {
50
58
  throw new Error("Unexpected dataUrlCondition type");
51
59
  }
@@ -7,6 +7,8 @@
7
7
 
8
8
  const Parser = require("../Parser");
9
9
 
10
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
11
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
10
12
  /** @typedef {import("../Parser").ParserState} ParserState */
11
13
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
12
14
 
@@ -21,9 +23,12 @@ class AssetSourceParser extends Parser {
21
23
  throw new Error("AssetSourceParser doesn't accept preparsed AST");
22
24
  }
23
25
  const { module } = state;
24
- module.buildInfo.strict = true;
25
- module.buildMeta.exportsType = "default";
26
- state.module.buildMeta.defaultObject = false;
26
+ /** @type {BuildInfo} */
27
+ (module.buildInfo).strict = true;
28
+ /** @type {BuildMeta} */
29
+ (module.buildMeta).exportsType = "default";
30
+ /** @type {BuildMeta} */
31
+ (state.module.buildMeta).defaultObject = false;
27
32
 
28
33
  return state;
29
34
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("../Module");
10
+ const { ASSET_MODULE_TYPE_RAW_DATA_URL } = require("../ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("../RuntimeGlobals");
11
12
  const makeSerializable = require("../util/makeSerializable");
12
13
 
@@ -19,6 +20,8 @@ const makeSerializable = require("../util/makeSerializable");
19
20
  /** @typedef {import("../RequestShortener")} RequestShortener */
20
21
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
21
22
  /** @typedef {import("../WebpackError")} WebpackError */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
24
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
22
25
  /** @typedef {import("../util/Hash")} Hash */
23
26
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
24
27
 
@@ -31,7 +34,7 @@ class RawDataUrlModule extends Module {
31
34
  * @param {string=} readableIdentifier readable identifier
32
35
  */
33
36
  constructor(url, identifier, readableIdentifier) {
34
- super("asset/raw-data-url", null);
37
+ super(ASSET_MODULE_TYPE_RAW_DATA_URL, null);
35
38
  this.url = url;
36
39
  this.urlBuffer = url ? Buffer.from(url) : undefined;
37
40
  this.identifierStr = identifier || this.url;
@@ -57,7 +60,8 @@ class RawDataUrlModule extends Module {
57
60
  * @returns {number} the estimated size of the module (must be non-zero)
58
61
  */
59
62
  size(type) {
60
- if (this.url === undefined) this.url = this.urlBuffer.toString();
63
+ if (this.url === undefined)
64
+ this.url = /** @type {Buffer} */ (this.urlBuffer).toString();
61
65
  return Math.max(1, this.url.length);
62
66
  }
63
67
 
@@ -99,7 +103,8 @@ class RawDataUrlModule extends Module {
99
103
  * @returns {CodeGenerationResult} result
100
104
  */
101
105
  codeGeneration(context) {
102
- if (this.url === undefined) this.url = this.urlBuffer.toString();
106
+ if (this.url === undefined)
107
+ this.url = /** @type {Buffer} */ (this.urlBuffer).toString();
103
108
  const sources = new Map();
104
109
  sources.set(
105
110
  "javascript",
@@ -118,10 +123,13 @@ class RawDataUrlModule extends Module {
118
123
  * @returns {void}
119
124
  */
120
125
  updateHash(hash, context) {
121
- hash.update(this.urlBuffer);
126
+ hash.update(/** @type {Buffer} */ (this.urlBuffer));
122
127
  super.updateHash(hash, context);
123
128
  }
124
129
 
130
+ /**
131
+ * @param {ObjectSerializerContext} context context
132
+ */
125
133
  serialize(context) {
126
134
  const { write } = context;
127
135
 
@@ -132,6 +140,9 @@ class RawDataUrlModule extends Module {
132
140
  super.serialize(context);
133
141
  }
134
142
 
143
+ /**
144
+ * @param {ObjectDeserializerContext} context context
145
+ */
135
146
  deserialize(context) {
136
147
  const { read } = context;
137
148
 
@@ -29,6 +29,10 @@ class AwaitDependenciesInitFragment extends InitFragment {
29
29
  this.promises = promises;
30
30
  }
31
31
 
32
+ /**
33
+ * @param {AwaitDependenciesInitFragment} other other AwaitDependenciesInitFragment
34
+ * @returns {AwaitDependenciesInitFragment} AwaitDependenciesInitFragment
35
+ */
32
36
  merge(other) {
33
37
  const promises = new Set(other.promises);
34
38
  for (const p of this.promises) {
@@ -42,7 +42,7 @@ class InferAsyncModulesPlugin {
42
42
  c.isTargetActive(undefined)
43
43
  )
44
44
  ) {
45
- queue.add(originModule);
45
+ queue.add(/** @type {Module} */ (originModule));
46
46
  }
47
47
  }
48
48
  }
@@ -50,7 +50,7 @@ class IdleFileCachePlugin {
50
50
  let timeSpendInStore = 0;
51
51
  let avgTimeSpendInStore = 0;
52
52
 
53
- /** @type {Map<string | typeof BUILD_DEPENDENCIES_KEY, () => Promise>} */
53
+ /** @type {Map<string | typeof BUILD_DEPENDENCIES_KEY, () => Promise<void>>} */
54
54
  const pendingIdleTasks = new Map();
55
55
 
56
56
  compiler.cache.hooks.store.tap(
@@ -171,6 +171,7 @@ class IdleFileCachePlugin {
171
171
  isInitialStore = false;
172
172
  }
173
173
  };
174
+ /** @type {ReturnType<typeof setTimeout> | undefined} */
174
175
  let idleTimer = undefined;
175
176
  compiler.cache.hooks.beginIdle.tap(
176
177
  { name: "IdleFileCachePlugin", stage: Cache.STAGE_DISK },
@@ -34,6 +34,8 @@ class MemoryWithGcCachePlugin {
34
34
  generation++;
35
35
  let clearedEntries = 0;
36
36
  let lastClearedIdentifier;
37
+ // Avoid coverage problems due indirect changes
38
+ /* istanbul ignore next */
37
39
  for (const [identifier, entry] of oldCache) {
38
40
  if (entry.until > generation) break;
39
41