webpack 5.97.1 → 5.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -4,16 +4,19 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ const { DEFAULTS } = require("../config/defaults");
7
8
  const memoize = require("./memoize");
8
9
 
9
10
  /** @typedef {import("../serialization/BinaryMiddleware").MEASURE_END_OPERATION_TYPE} MEASURE_END_OPERATION */
10
11
  /** @typedef {import("../serialization/BinaryMiddleware").MEASURE_START_OPERATION_TYPE} MEASURE_START_OPERATION */
11
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
- /** @typedef {import("../serialization/Serializer")} Serializer */
14
12
  /** @typedef {typeof import("../util/Hash")} Hash */
15
13
  /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
16
14
 
15
+ /**
16
+ * @template D, S, C
17
+ * @typedef {import("../serialization/Serializer")<D, S, C>} Serializer
18
+ */
19
+
17
20
  const getBinaryMiddleware = memoize(() =>
18
21
  require("../serialization/BinaryMiddleware")
19
22
  );
@@ -38,7 +41,8 @@ const registerSerializers = memoize(() => {
38
41
  // Load internal paths with a relative require
39
42
  // This allows bundling all internal serializers
40
43
  const internalSerializables = require("./internalSerializables");
41
- getObjectMiddleware().registerLoader(/^webpack\/lib\//, req => {
44
+
45
+ getObjectMiddleware().registerLoader(/^webpack\/lib\//, (req) => {
42
46
  const loader =
43
47
  internalSerializables[
44
48
  /** @type {keyof import("./internalSerializables")} */
@@ -47,13 +51,16 @@ const registerSerializers = memoize(() => {
47
51
  if (loader) {
48
52
  loader();
49
53
  } else {
54
+ // eslint-disable-next-line no-console
50
55
  console.warn(`${req} not found in internalSerializables`);
51
56
  }
52
57
  return true;
53
58
  });
54
59
  });
55
60
 
56
- /** @type {Serializer} */
61
+ /**
62
+ * @type {Serializer<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>}
63
+ */
57
64
  let buffersSerializer;
58
65
 
59
66
  // Expose serialization API
@@ -78,9 +85,6 @@ module.exports = {
78
85
  get MEASURE_END_OPERATION() {
79
86
  return getBinaryMiddleware().MEASURE_END_OPERATION;
80
87
  },
81
- /**
82
- * @returns {Serializer} buffer serializer
83
- */
84
88
  get buffersSerializer() {
85
89
  if (buffersSerializer !== undefined) return buffersSerializer;
86
90
  registerSerializers();
@@ -88,66 +92,62 @@ module.exports = {
88
92
  const binaryMiddleware = getBinaryMiddlewareInstance();
89
93
  const SerializerMiddleware = getSerializerMiddleware();
90
94
  const SingleItemMiddleware = getSingleItemMiddleware();
91
- return (buffersSerializer = new Serializer([
92
- new SingleItemMiddleware(),
93
- new (getObjectMiddleware())(context => {
94
- if (context.write) {
95
- /**
96
- * @param {any} value value
97
- */
98
- context.writeLazy = value => {
99
- context.write(
100
- SerializerMiddleware.createLazy(value, binaryMiddleware)
101
- );
102
- };
103
- }
104
- }, "md4"),
105
- binaryMiddleware
106
- ]));
95
+ return /** @type {Serializer<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>} */ (
96
+ buffersSerializer = new Serializer([
97
+ new SingleItemMiddleware(),
98
+ new (getObjectMiddleware())((context) => {
99
+ if ("write" in context) {
100
+ context.writeLazy = (value) => {
101
+ context.write(
102
+ SerializerMiddleware.createLazy(value, binaryMiddleware)
103
+ );
104
+ };
105
+ }
106
+ }, DEFAULTS.HASH_FUNCTION),
107
+ binaryMiddleware
108
+ ])
109
+ );
107
110
  },
108
111
  /**
112
+ * @template D, S, C
109
113
  * @param {IntermediateFileSystem} fs filesystem
110
114
  * @param {string | Hash} hashFunction hash function to use
111
- * @returns {Serializer} file serializer
115
+ * @returns {Serializer<D, S, C>} file serializer
112
116
  */
113
117
  createFileSerializer: (fs, hashFunction) => {
114
118
  registerSerializers();
115
119
  const Serializer = getSerializer();
120
+
116
121
  const FileMiddleware = require("../serialization/FileMiddleware");
122
+
117
123
  const fileMiddleware = new FileMiddleware(fs, hashFunction);
118
124
  const binaryMiddleware = getBinaryMiddlewareInstance();
119
125
  const SerializerMiddleware = getSerializerMiddleware();
120
126
  const SingleItemMiddleware = getSingleItemMiddleware();
121
- return new Serializer([
122
- new SingleItemMiddleware(),
123
- new (getObjectMiddleware())(context => {
124
- if (context.write) {
125
- /**
126
- * @param {any} value value
127
- */
128
- context.writeLazy = value => {
129
- context.write(
130
- SerializerMiddleware.createLazy(value, binaryMiddleware)
131
- );
132
- };
133
- /**
134
- * @param {any} value value
135
- * @param {object=} options lazy options
136
- * @returns {function(): Promise<any> | any} lazy function
137
- */
138
- context.writeSeparate = (value, options) => {
139
- const lazy = SerializerMiddleware.createLazy(
140
- value,
141
- fileMiddleware,
142
- options
143
- );
144
- context.write(lazy);
145
- return lazy;
146
- };
147
- }
148
- }, hashFunction),
149
- binaryMiddleware,
150
- fileMiddleware
151
- ]);
127
+ return /** @type {Serializer<D, S, C>} */ (
128
+ new Serializer([
129
+ new SingleItemMiddleware(),
130
+ new (getObjectMiddleware())((context) => {
131
+ if ("write" in context) {
132
+ context.writeLazy = (value) => {
133
+ context.write(
134
+ SerializerMiddleware.createLazy(value, binaryMiddleware)
135
+ );
136
+ };
137
+ context.writeSeparate = (value, options) => {
138
+ const lazy = SerializerMiddleware.createLazy(
139
+ value,
140
+ fileMiddleware,
141
+ options
142
+ );
143
+ context.write(lazy);
144
+ return lazy;
145
+ };
146
+ }
147
+ }, hashFunction),
148
+ binaryMiddleware,
149
+ fileMiddleware
150
+ ])
151
+ );
152
152
  }
153
153
  };
@@ -13,42 +13,53 @@
13
13
  */
14
14
 
15
15
  /**
16
- * @template T
17
- * @template R
16
+ * @template I
17
+ * @template G
18
18
  * @typedef {object} GroupConfig
19
- * @property {function(T): string[] | undefined} getKeys
20
- * @property {function(string, (R | T)[], T[]): R} createGroup
21
- * @property {function(string, T[]): GroupOptions=} getOptions
19
+ * @property {(item: I) => string[] | undefined} getKeys
20
+ * @property {(name: string, items: I[]) => GroupOptions=} getOptions
21
+ * @property {(key: string, children: I[], items: I[]) => G} createGroup
22
22
  */
23
23
 
24
24
  /**
25
- * @template T
26
- * @template R
25
+ * @template I
26
+ * @template G
27
+ * @typedef {{ config: GroupConfig<I, G>, name: string, alreadyGrouped: boolean, items: Items<I, G> | undefined }} Group
28
+ */
29
+
30
+ /**
31
+ * @template I, G
32
+ * @typedef {Set<Group<I, G>>} Groups
33
+ */
34
+
35
+ /**
36
+ * @template I
37
+ * @template G
27
38
  * @typedef {object} ItemWithGroups
28
- * @property {T} item
29
- * @property {Set<Group<T, R>>} groups
39
+ * @property {I} item
40
+ * @property {Groups<I, G>} groups
30
41
  */
31
42
 
32
43
  /**
33
- * @template T
34
- * @template R
35
- * @typedef {{ config: GroupConfig<T, R>, name: string, alreadyGrouped: boolean, items: Set<ItemWithGroups<T, R>> | undefined }} Group
44
+ * @template T, G
45
+ * @typedef {Set<ItemWithGroups<T, G>>} Items
36
46
  */
37
47
 
38
48
  /**
39
- * @template T
49
+ * @template I
50
+ * @template G
40
51
  * @template R
41
- * @param {T[]} items the list of items
42
- * @param {GroupConfig<T, R>[]} groupConfigs configuration
43
- * @returns {(R | T)[]} grouped items
52
+ * @param {I[]} items the list of items
53
+ * @param {GroupConfig<I, G>[]} groupConfigs configuration
54
+ * @returns {(I | G)[]} grouped items
44
55
  */
45
56
  const smartGrouping = (items, groupConfigs) => {
46
- /** @type {Set<ItemWithGroups<T, R>>} */
57
+ /** @type {Items<I, G>} */
47
58
  const itemsWithGroups = new Set();
48
- /** @type {Map<string, Group<T, R>>} */
59
+ /** @type {Map<string, Group<I, G>>} */
49
60
  const allGroups = new Map();
50
61
  for (const item of items) {
51
- /** @type {Set<Group<T, R>>} */
62
+ /** @type {Groups<I, G>} */
52
63
  const groups = new Set();
53
64
  for (let i = 0; i < groupConfigs.length; i++) {
54
65
  const groupConfig = groupConfigs[i];
@@ -77,11 +88,12 @@ const smartGrouping = (items, groupConfigs) => {
77
88
  groups
78
89
  });
79
90
  }
91
+
80
92
  /**
81
- * @param {Set<ItemWithGroups<T, R>>} itemsWithGroups input items with groups
82
- * @returns {(T | R)[]} groups items
93
+ * @param {Items<I, G>} itemsWithGroups input items with groups
94
+ * @returns {(I | G)[]} groups items
83
95
  */
84
- const runGrouping = itemsWithGroups => {
96
+ const runGrouping = (itemsWithGroups) => {
85
97
  const totalSize = itemsWithGroups.size;
86
98
  for (const entry of itemsWithGroups) {
87
99
  for (const group of entry.groups) {
@@ -94,7 +106,7 @@ const smartGrouping = (items, groupConfigs) => {
94
106
  }
95
107
  }
96
108
  }
97
- /** @type {Map<Group<T, R>, { items: Set<ItemWithGroups<T, R>>, options: GroupOptions | false | undefined, used: boolean }>} */
109
+ /** @type {Map<Group<I, G>, { items: Items<I, G>, options: GroupOptions | false | undefined, used: boolean }>} */
98
110
  const groupMap = new Map();
99
111
  for (const group of allGroups.values()) {
100
112
  if (group.items) {
@@ -107,13 +119,15 @@ const smartGrouping = (items, groupConfigs) => {
107
119
  });
108
120
  }
109
121
  }
110
- /** @type {(T | R)[]} */
122
+ /** @type {(I | G)[]} */
111
123
  const results = [];
112
124
  for (;;) {
113
- /** @type {Group<T, R> | undefined} */
125
+ /** @type {Group<I, G> | undefined} */
114
126
  let bestGroup;
115
127
  let bestGroupSize = -1;
128
+ /** @type {Items<I, G> | undefined} */
116
129
  let bestGroupItems;
130
+ /** @type {GroupOptions | false | undefined} */
117
131
  let bestGroupOptions;
118
132
  for (const [group, state] of groupMap) {
119
133
  const { items, used } = state;
@@ -192,8 +206,9 @@ const smartGrouping = (items, groupConfigs) => {
192
206
  bestGroup.alreadyGrouped = true;
193
207
  const children = groupChildren ? runGrouping(items) : allItems;
194
208
  bestGroup.alreadyGrouped = false;
195
-
196
- results.push(groupConfig.createGroup(key, children, allItems));
209
+ results.push(
210
+ groupConfig.createGroup(key, /** @type {I[]} */ (children), allItems)
211
+ );
197
212
  }
198
213
  for (const { item } of itemsWithGroups) {
199
214
  results.push(item);
@@ -17,14 +17,14 @@ const equalityCache = new WeakMap();
17
17
  */
18
18
  const _isSourceEqual = (a, b) => {
19
19
  // prefer .buffer(), it's called anyway during emit
20
- /** @type {Buffer|string} */
20
+ /** @type {Buffer | string} */
21
21
  let aSource = typeof a.buffer === "function" ? a.buffer() : a.source();
22
- /** @type {Buffer|string} */
22
+ /** @type {Buffer | string} */
23
23
  let bSource = typeof b.buffer === "function" ? b.buffer() : b.source();
24
24
  if (aSource === bSource) return true;
25
25
  if (typeof aSource === "string" && typeof bSource === "string") return false;
26
- if (!Buffer.isBuffer(aSource)) aSource = Buffer.from(aSource, "utf-8");
27
- if (!Buffer.isBuffer(bSource)) bSource = Buffer.from(bSource, "utf-8");
26
+ if (!Buffer.isBuffer(aSource)) aSource = Buffer.from(aSource, "utf8");
27
+ if (!Buffer.isBuffer(bSource)) bSource = Buffer.from(bSource, "utf8");
28
28
  return aSource.equals(bSource);
29
29
  };
30
30
 
@@ -58,4 +58,5 @@ const isSourceEqual = (a, b) => {
58
58
  }
59
59
  return result;
60
60
  };
61
+
61
62
  module.exports.isSourceEqual = isSourceEqual;
@@ -0,0 +1,45 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
9
+ /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperty} DestructuringAssignmentProperty */
10
+
11
+ /**
12
+ * Deep first traverse the properties of a destructuring assignment.
13
+ * @param {DestructuringAssignmentProperties} properties destructuring assignment properties
14
+ * @param {((stack: DestructuringAssignmentProperty[]) => void) | undefined=} onLeftNode on left node callback
15
+ * @param {((stack: DestructuringAssignmentProperty[]) => void) | undefined=} enterNode enter node callback
16
+ * @param {((stack: DestructuringAssignmentProperty[]) => void) | undefined=} exitNode exit node callback
17
+ * @param {DestructuringAssignmentProperty[] | undefined=} stack stack of the walking nodes
18
+ */
19
+ function traverseDestructuringAssignmentProperties(
20
+ properties,
21
+ onLeftNode,
22
+ enterNode,
23
+ exitNode,
24
+ stack = []
25
+ ) {
26
+ for (const property of properties) {
27
+ stack.push(property);
28
+ if (enterNode) enterNode(stack);
29
+ if (property.pattern) {
30
+ traverseDestructuringAssignmentProperties(
31
+ property.pattern,
32
+ onLeftNode,
33
+ enterNode,
34
+ exitNode,
35
+ stack
36
+ );
37
+ } else if (onLeftNode) {
38
+ onLeftNode(stack);
39
+ }
40
+ if (exitNode) exitNode(stack);
41
+ stack.pop();
42
+ }
43
+ }
44
+
45
+ module.exports = traverseDestructuringAssignmentProperties;
@@ -85,9 +85,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
85
85
  if (
86
86
  children &&
87
87
  children.some(
88
- child =>
88
+ (child) =>
89
89
  child.keyword === "absolutePath" &&
90
- child.dataPath === ".output.filename"
90
+ child.instancePath === "/output/filename"
91
91
  )
92
92
  ) {
93
93
  return `${formattedError}\nPlease use output.path to specify absolute path and output.filename for the file name.`;
@@ -96,8 +96,8 @@ const validateSchema = (schema, options, validationConfiguration) => {
96
96
  if (
97
97
  children &&
98
98
  children.some(
99
- child =>
100
- child.keyword === "pattern" && child.dataPath === ".devtool"
99
+ (child) =>
100
+ child.keyword === "pattern" && child.instancePath === "/devtool"
101
101
  )
102
102
  ) {
103
103
  return (
@@ -108,10 +108,7 @@ const validateSchema = (schema, options, validationConfiguration) => {
108
108
  }
109
109
 
110
110
  if (error.keyword === "additionalProperties") {
111
- const params =
112
- /** @type {import("ajv").AdditionalPropertiesParams} */ (
113
- error.params
114
- );
111
+ const params = error.params;
115
112
  if (
116
113
  Object.prototype.hasOwnProperty.call(
117
114
  DID_YOU_MEAN,
@@ -136,7 +133,7 @@ const validateSchema = (schema, options, validationConfiguration) => {
136
133
  }?`;
137
134
  }
138
135
 
139
- if (!error.dataPath) {
136
+ if (!error.instancePath) {
140
137
  if (params.additionalProperty === "debug") {
141
138
  return (
142
139
  `${formattedError}\n` +
@@ -176,4 +173,5 @@ const validateSchema = (schema, options, validationConfiguration) => {
176
173
  }
177
174
  );
178
175
  };
176
+
179
177
  module.exports = validateSchema;
@@ -5,18 +5,19 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
9
8
  /** @typedef {import("../../declarations/WebpackOptions").WasmLoadingType} WasmLoadingType */
10
9
  /** @typedef {import("../Compiler")} Compiler */
11
10
 
11
+ /** @typedef {Set<WasmLoadingType>} WasmLoadingTypes */
12
+
12
13
  /** @type {WeakMap<Compiler, Set<WasmLoadingType>>} */
13
14
  const enabledTypes = new WeakMap();
14
15
 
15
16
  /**
16
17
  * @param {Compiler} compiler compiler instance
17
- * @returns {Set<WasmLoadingType>} enabled types
18
+ * @returns {WasmLoadingTypes} enabled types
18
19
  */
19
- const getEnabledTypes = compiler => {
20
+ const getEnabledTypes = (compiler) => {
20
21
  let set = enabledTypes.get(compiler);
21
22
  if (set === undefined) {
22
23
  set = new Set();
@@ -54,9 +55,7 @@ class EnableWasmLoadingPlugin {
54
55
  "EnableWasmLoadingPlugin need to be used to enable this type of wasm loading. " +
55
56
  'This usually happens through the "output.enabledWasmLoadingTypes" option. ' +
56
57
  'If you are using a function as entry which sets "wasmLoading", you need to add all potential library types to "output.enabledWasmLoadingTypes". ' +
57
- `These types are enabled: ${Array.from(
58
- getEnabledTypes(compiler)
59
- ).join(", ")}`
58
+ `These types are enabled: ${[...getEnabledTypes(compiler)].join(", ")}`
60
59
  );
61
60
  }
62
61
  }
@@ -78,8 +77,8 @@ class EnableWasmLoadingPlugin {
78
77
  switch (type) {
79
78
  case "fetch": {
80
79
  if (compiler.options.experiments.syncWebAssembly) {
81
- // TODO webpack 6 remove FetchCompileWasmPlugin
82
80
  const FetchCompileWasmPlugin = require("../web/FetchCompileWasmPlugin");
81
+
83
82
  new FetchCompileWasmPlugin({
84
83
  mangleImports: compiler.options.optimization.mangleWasmImports
85
84
  }).apply(compiler);
@@ -87,6 +86,7 @@ class EnableWasmLoadingPlugin {
87
86
 
88
87
  if (compiler.options.experiments.asyncWebAssembly) {
89
88
  const FetchCompileAsyncWasmPlugin = require("../web/FetchCompileAsyncWasmPlugin");
89
+
90
90
  new FetchCompileAsyncWasmPlugin().apply(compiler);
91
91
  }
92
92
 
@@ -94,21 +94,22 @@ class EnableWasmLoadingPlugin {
94
94
  }
95
95
  case "async-node": {
96
96
  if (compiler.options.experiments.syncWebAssembly) {
97
- // TODO webpack 6 remove ReadFileCompileWasmPlugin
98
97
  const ReadFileCompileWasmPlugin = require("../node/ReadFileCompileWasmPlugin");
98
+
99
99
  new ReadFileCompileWasmPlugin({
100
100
  mangleImports: compiler.options.optimization.mangleWasmImports,
101
101
  import:
102
- compiler.options.output.environment.module &&
102
+ compiler.options.output.module &&
103
103
  compiler.options.output.environment.dynamicImport
104
104
  }).apply(compiler);
105
105
  }
106
106
 
107
107
  if (compiler.options.experiments.asyncWebAssembly) {
108
108
  const ReadFileCompileAsyncWasmPlugin = require("../node/ReadFileCompileAsyncWasmPlugin");
109
+
109
110
  new ReadFileCompileAsyncWasmPlugin({
110
111
  import:
111
- compiler.options.output.environment.module &&
112
+ compiler.options.output.module &&
112
113
  compiler.options.output.environment.dynamicImport
113
114
  }).apply(compiler);
114
115
  }
@@ -116,8 +117,17 @@ class EnableWasmLoadingPlugin {
116
117
  break;
117
118
  }
118
119
  case "universal": {
119
- const UniversalCompileAsyncWasmPlugin = require("../wasm-async/UniversalCompileAsyncWasmPlugin");
120
- new UniversalCompileAsyncWasmPlugin().apply(compiler);
120
+ if (compiler.options.experiments.syncWebAssembly) {
121
+ throw new Error(
122
+ "Universal wasm loading type is only supported by asynchronous web assembly."
123
+ );
124
+ }
125
+
126
+ if (compiler.options.experiments.asyncWebAssembly) {
127
+ const UniversalCompileAsyncWasmPlugin = require("../wasm-async/UniversalCompileAsyncWasmPlugin");
128
+
129
+ new UniversalCompileAsyncWasmPlugin().apply(compiler);
130
+ }
121
131
  break;
122
132
  }
123
133
  default:
@@ -14,9 +14,9 @@ const Template = require("../Template");
14
14
 
15
15
  /**
16
16
  * @typedef {object} AsyncWasmLoadingRuntimeModuleOptions
17
- * @property {(function(string): string)=} generateBeforeLoadBinaryCode
18
- * @property {function(string): string} generateLoadBinaryCode
19
- * @property {(function(): string)=} generateBeforeInstantiateStreaming
17
+ * @property {((wasmModuleSrcPath: string) => string)=} generateBeforeLoadBinaryCode
18
+ * @property {(wasmModuleSrcPath: string) => string} generateLoadBinaryCode
19
+ * @property {(() => string)=} generateBeforeInstantiateStreaming
20
20
  * @property {boolean} supportsStreaming
21
21
  */
22
22
 
@@ -50,7 +50,7 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
50
50
  JSON.stringify(outputOptions.webassemblyModuleFilename),
51
51
  {
52
52
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
53
- hashWithLength: length =>
53
+ hashWithLength: (length) =>
54
54
  `" + ${RuntimeGlobals.getFullHash}}().slice(0, ${length}) + "`,
55
55
  module: {
56
56
  id: '" + wasmModuleId + "',
@@ -76,7 +76,11 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
76
76
  )})`
77
77
  ];
78
78
  const getStreaming = () => {
79
- const concat = (/** @type {string[]} */ ...text) => text.join("");
79
+ /**
80
+ * @param {string[]} text text
81
+ * @returns {string} merged text
82
+ */
83
+ const concat = (...text) => text.join("");
80
84
  return [
81
85
  this.generateBeforeLoadBinaryCode
82
86
  ? this.generateBeforeLoadBinaryCode(wasmModuleSrcPath)
@@ -5,17 +5,19 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { RawSource } = require("webpack-sources");
8
9
  const Generator = require("../Generator");
9
- const { WEBASSEMBLY_TYPES } = require("../ModuleSourceTypesConstants");
10
+ const { WEBASSEMBLY_TYPES } = require("../ModuleSourceTypeConstants");
10
11
 
11
12
  /** @typedef {import("webpack-sources").Source} Source */
12
13
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
14
+ /** @typedef {import("../Module").SourceType} SourceType */
13
15
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
14
16
  /** @typedef {import("../NormalModule")} NormalModule */
15
17
 
16
18
  /**
17
19
  * @typedef {object} AsyncWebAssemblyGeneratorOptions
18
- * @property {boolean} [mangleImports] mangle imports
20
+ * @property {boolean=} mangleImports mangle imports
19
21
  */
20
22
 
21
23
  class AsyncWebAssemblyGenerator extends Generator {
@@ -37,7 +39,7 @@ class AsyncWebAssemblyGenerator extends Generator {
37
39
 
38
40
  /**
39
41
  * @param {NormalModule} module the module
40
- * @param {string=} type source type
42
+ * @param {SourceType=} type source type
41
43
  * @returns {number} estimate size of the module
42
44
  */
43
45
  getSize(module, type) {
@@ -56,6 +58,16 @@ class AsyncWebAssemblyGenerator extends Generator {
56
58
  generate(module, generateContext) {
57
59
  return /** @type {Source} */ (module.originalSource());
58
60
  }
61
+
62
+ /**
63
+ * @param {Error} error the error
64
+ * @param {NormalModule} module module for which the code should be generated
65
+ * @param {GenerateContext} generateContext context for generate
66
+ * @returns {Source | null} generated code
67
+ */
68
+ generateError(error, module, generateContext) {
69
+ return new RawSource(error.message);
70
+ }
59
71
  }
60
72
 
61
73
  module.exports = AsyncWebAssemblyGenerator;