webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
8
9
  /** @typedef {(string|number|undefined|[])[]} SemVerRange */
9
10
 
10
11
  /**
@@ -31,7 +32,7 @@ const parseVersion = str => {
31
32
  }
32
33
  return ver;
33
34
  };
34
- exports.parseVersion = parseVersion;
35
+ module.exports.parseVersion = parseVersion;
35
36
 
36
37
  /* eslint-disable eqeqeq */
37
38
  /**
@@ -81,15 +82,17 @@ const versionLt = (a, b) => {
81
82
  }
82
83
  };
83
84
  /* eslint-enable eqeqeq */
84
- exports.versionLt = versionLt;
85
+ module.exports.versionLt = versionLt;
85
86
 
86
87
  /**
87
88
  * @param {string} str range string
88
89
  * @returns {SemVerRange} parsed range
89
90
  */
90
- exports.parseRange = str => {
91
+ module.exports.parseRange = str => {
91
92
  const splitAndConvert = str => {
92
- return str.split(".").map(item => (`${+item}` === item ? +item : item));
93
+ return str
94
+ .split(".")
95
+ .map(item => (item !== "NaN" && `${+item}` === item ? +item : item));
93
96
  };
94
97
  // see https://docs.npmjs.com/misc/semver#range-grammar for grammar
95
98
  const parsePartial = str => {
@@ -123,21 +126,23 @@ exports.parseRange = str => {
123
126
  } else if (range.length === 3) {
124
127
  // Special case for "1.2" is "1.2.x" instead of "=1.2"
125
128
  return [2, ...range.slice(1)];
126
- } else {
127
- return [range.length, ...range.slice(1)];
128
129
  }
130
+
131
+ return [range.length, ...range.slice(1)];
129
132
  };
130
133
  const negate = range => {
131
134
  return [-range[0] - 1, ...range.slice(1)];
132
135
  };
133
136
  const parseSimple = str => {
134
- // simple ::= primitive | partial | tilde | caret
135
- // primitive ::= ( '<' | '>' | '>=' | '<=' | '=' ) partial
136
- // tilde ::= '~' partial
137
- // caret ::= '^' partial
137
+ // simple ::= primitive | partial | tilde | caret
138
+ // primitive ::= ( '<' | '>' | '>=' | '<=' | '=' | '!' ) ( ' ' ) * partial
139
+ // tilde ::= '~' ( ' ' ) * partial
140
+ // caret ::= '^' ( ' ' ) * partial
138
141
  const match = /^(\^|~|<=|<|>=|>|=|v|!)/.exec(str);
139
142
  const start = match ? match[0] : "";
140
- const remainder = parsePartial(str.slice(start.length));
143
+ const remainder = parsePartial(
144
+ start.length ? str.slice(start.length).trim() : str.trim()
145
+ );
141
146
  switch (start) {
142
147
  case "^":
143
148
  if (remainder.length > 1 && remainder[1] === 0) {
@@ -148,6 +153,9 @@ exports.parseRange = str => {
148
153
  }
149
154
  return [1, ...remainder.slice(1)];
150
155
  case "~":
156
+ if (remainder.length === 2 && remainder[0] === 0) {
157
+ return [1, ...remainder.slice(1)];
158
+ }
151
159
  return [2, ...remainder.slice(1)];
152
160
  case ">=":
153
161
  return remainder;
@@ -191,11 +199,14 @@ exports.parseRange = str => {
191
199
  return [, ...arr, ...items.slice(1).map(() => fn)];
192
200
  };
193
201
  const parseRange = str => {
194
- // range ::= hyphen | simple ( ' ' simple ) * | ''
195
- // hyphen ::= partial ' - ' partial
196
- const items = str.split(" - ");
202
+ // range ::= hyphen | simple ( ' ' ( ' ' ) * simple ) * | ''
203
+ // hyphen ::= partial ( ' ' ) * ' - ' ( ' ' ) * partial
204
+ const items = str.split(/\s+-\s+/);
197
205
  if (items.length === 1) {
198
- const items = str.trim().split(/\s+/g).map(parseSimple);
206
+ const items = str
207
+ .trim()
208
+ .split(/(?<=[-0-9A-Za-z])\s+/g)
209
+ .map(parseSimple);
199
210
  return combine(items, 2);
200
211
  }
201
212
  const a = parsePartial(items[0]);
@@ -224,16 +235,15 @@ const rangeToString = range => {
224
235
  fixCount == 0
225
236
  ? ">="
226
237
  : fixCount == -1
227
- ? "<"
228
- : fixCount == 1
229
- ? "^"
230
- : fixCount == 2
231
- ? "~"
232
- : fixCount > 0
233
- ? "="
234
- : "!=";
238
+ ? "<"
239
+ : fixCount == 1
240
+ ? "^"
241
+ : fixCount == 2
242
+ ? "~"
243
+ : fixCount > 0
244
+ ? "="
245
+ : "!=";
235
246
  var needDot = 1;
236
- // eslint-disable-next-line no-redeclare
237
247
  for (var i = 1; i < range.length; i++) {
238
248
  var item = range[i];
239
249
  var t = (typeof item)[0];
@@ -241,35 +251,36 @@ const rangeToString = range => {
241
251
  str +=
242
252
  t == "u"
243
253
  ? // undefined: prerelease marker, add an "-"
244
- "-"
254
+ "-"
245
255
  : // number or string: add the item, set flag to add an "." between two of them
246
- (needDot > 0 ? "." : "") + ((needDot = 2), item);
256
+ (needDot > 0 ? "." : "") + ((needDot = 2), item);
247
257
  }
248
258
  return str;
249
- } else {
250
- var stack = [];
259
+ }
260
+ /** @type {string[]} */
261
+ var stack = [];
262
+ // eslint-disable-next-line no-redeclare
263
+ for (var i = 1; i < range.length; i++) {
251
264
  // eslint-disable-next-line no-redeclare
252
- for (var i = 1; i < range.length; i++) {
253
- // eslint-disable-next-line no-redeclare
254
- var item = range[i];
255
- stack.push(
256
- item === 0
257
- ? "not(" + pop() + ")"
258
- : item === 1
265
+ var item = range[i];
266
+ stack.push(
267
+ item === 0
268
+ ? "not(" + pop() + ")"
269
+ : item === 1
259
270
  ? "(" + pop() + " || " + pop() + ")"
260
271
  : item === 2
261
- ? stack.pop() + " " + stack.pop()
262
- : rangeToString(item)
263
- );
264
- }
265
- return pop();
272
+ ? stack.pop() + " " + stack.pop()
273
+ : rangeToString(item)
274
+ );
266
275
  }
276
+ return pop();
277
+
267
278
  function pop() {
268
- return stack.pop().replace(/^\((.+)\)$/, "$1");
279
+ return /** @type {string} */ (stack.pop()).replace(/^\((.+)\)$/, "$1");
269
280
  }
270
281
  };
271
282
  /* eslint-enable eqeqeq */
272
- exports.rangeToString = rangeToString;
283
+ module.exports.rangeToString = rangeToString;
273
284
 
274
285
  /* eslint-disable eqeqeq */
275
286
  /**
@@ -281,7 +292,7 @@ const satisfy = (range, version) => {
281
292
  if (0 in range) {
282
293
  // @ts-expect-error
283
294
  version = parseVersion(version);
284
- var fixCount = range[0];
295
+ var fixCount = /** @type {number} */ (range[0]);
285
296
  // when negated is set it swill set for < instead of >=
286
297
  var negated = fixCount < 0;
287
298
  if (negated) fixCount = -fixCount - 1;
@@ -389,6 +400,7 @@ const satisfy = (range, version) => {
389
400
  }
390
401
  } else {
391
402
  // Handles all "next-ver" cases in the second table
403
+ // eslint-disable-next-line no-lonely-if
392
404
  if (rangeType != "s" && rangeType != "n") {
393
405
  isEqual = false;
394
406
  j--;
@@ -408,18 +420,18 @@ const satisfy = (range, version) => {
408
420
  item == 1
409
421
  ? p() | p()
410
422
  : item == 2
411
- ? p() & p()
412
- : item
413
- ? satisfy(item, version)
414
- : !p()
423
+ ? p() & p()
424
+ : item
425
+ ? satisfy(item, version)
426
+ : !p()
415
427
  );
416
428
  }
417
429
  return !!p();
418
430
  };
419
431
  /* eslint-enable eqeqeq */
420
- exports.satisfy = satisfy;
432
+ module.exports.satisfy = satisfy;
421
433
 
422
- exports.stringifyHoley = json => {
434
+ module.exports.stringifyHoley = json => {
423
435
  switch (typeof json) {
424
436
  case "undefined":
425
437
  return "";
@@ -432,9 +444,9 @@ exports.stringifyHoley = json => {
432
444
  }
433
445
  str += "]";
434
446
  return str;
435
- } else {
436
- return JSON.stringify(json);
437
447
  }
448
+
449
+ return JSON.stringify(json);
438
450
  default:
439
451
  return JSON.stringify(json);
440
452
  }
@@ -444,11 +456,7 @@ exports.stringifyHoley = json => {
444
456
  exports.parseVersionRuntimeCode = runtimeTemplate =>
445
457
  `var parseVersion = ${runtimeTemplate.basicFunction("str", [
446
458
  "// see webpack/lib/util/semver.js for original code",
447
- `var p=${
448
- runtimeTemplate.supportsArrowFunction() ? "p=>" : "function(p)"
449
- }{return p.split(".").map((${
450
- runtimeTemplate.supportsArrowFunction() ? "p=>" : "function(p)"
451
- }{return+p==p?+p:p}))},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;`
459
+ `var p=${runtimeTemplate.supportsArrowFunction() ? "p=>" : "function(p)"}{return p.split(".").map((${runtimeTemplate.supportsArrowFunction() ? "p=>" : "function(p)"}{return+p==p?+p:p}))},n=/^([^-+]+)?(?:-([^+]+))?(?:\\+(.+))?$/.exec(str),r=n[1]?p(n[1]):[];return n[2]&&(r.length++,r.push.apply(r,p(n[2]))),n[3]&&(r.push([]),r.push.apply(r,p(n[3]))),r;`
452
460
  ])}`;
453
461
  //#endregion
454
462
 
@@ -11,6 +11,8 @@ const memoize = require("./memoize");
11
11
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
12
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
13
  /** @typedef {import("../serialization/Serializer")} Serializer */
14
+ /** @typedef {typeof import("../util/Hash")} Hash */
15
+ /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
14
16
 
15
17
  const getBinaryMiddleware = memoize(() =>
16
18
  require("../serialization/BinaryMiddleware")
@@ -37,7 +39,11 @@ const registerSerializers = memoize(() => {
37
39
  // This allows bundling all internal serializers
38
40
  const internalSerializables = require("./internalSerializables");
39
41
  getObjectMiddleware().registerLoader(/^webpack\/lib\//, req => {
40
- const loader = internalSerializables[req.slice("webpack/lib/".length)];
42
+ const loader =
43
+ internalSerializables[
44
+ /** @type {keyof import("./internalSerializables")} */
45
+ (req.slice("webpack/lib/".length))
46
+ ];
41
47
  if (loader) {
42
48
  loader();
43
49
  } else {
@@ -72,6 +78,9 @@ module.exports = {
72
78
  get MEASURE_END_OPERATION() {
73
79
  return getBinaryMiddleware().MEASURE_END_OPERATION;
74
80
  },
81
+ /**
82
+ * @returns {Serializer} buffer serializer
83
+ */
75
84
  get buffersSerializer() {
76
85
  if (buffersSerializer !== undefined) return buffersSerializer;
77
86
  registerSerializers();
@@ -83,6 +92,9 @@ module.exports = {
83
92
  new SingleItemMiddleware(),
84
93
  new (getObjectMiddleware())(context => {
85
94
  if (context.write) {
95
+ /**
96
+ * @param {any} value value
97
+ */
86
98
  context.writeLazy = value => {
87
99
  context.write(
88
100
  SerializerMiddleware.createLazy(value, binaryMiddleware)
@@ -93,6 +105,11 @@ module.exports = {
93
105
  binaryMiddleware
94
106
  ]));
95
107
  },
108
+ /**
109
+ * @param {IntermediateFileSystem} fs filesystem
110
+ * @param {string | Hash} hashFunction hash function to use
111
+ * @returns {Serializer} file serializer
112
+ */
96
113
  createFileSerializer: (fs, hashFunction) => {
97
114
  registerSerializers();
98
115
  const Serializer = getSerializer();
@@ -105,11 +122,19 @@ module.exports = {
105
122
  new SingleItemMiddleware(),
106
123
  new (getObjectMiddleware())(context => {
107
124
  if (context.write) {
125
+ /**
126
+ * @param {any} value value
127
+ */
108
128
  context.writeLazy = value => {
109
129
  context.write(
110
130
  SerializerMiddleware.createLazy(value, binaryMiddleware)
111
131
  );
112
132
  };
133
+ /**
134
+ * @param {any} value value
135
+ * @param {object=} options lazy options
136
+ * @returns {function(): Promise<any> | any} lazy function
137
+ */
113
138
  context.writeSeparate = (value, options) => {
114
139
  const lazy = SerializerMiddleware.createLazy(
115
140
  value,
@@ -6,7 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  /**
9
- * @typedef {Object} GroupOptions
9
+ * @typedef {object} GroupOptions
10
10
  * @property {boolean=} groupChildren
11
11
  * @property {boolean=} force
12
12
  * @property {number=} targetGroupCount
@@ -15,8 +15,8 @@
15
15
  /**
16
16
  * @template T
17
17
  * @template R
18
- * @typedef {Object} GroupConfig
19
- * @property {function(T): string[]} getKeys
18
+ * @typedef {object} GroupConfig
19
+ * @property {function(T): string[] | undefined} getKeys
20
20
  * @property {function(string, (R | T)[], T[]): R} createGroup
21
21
  * @property {function(string, T[]): GroupOptions=} getOptions
22
22
  */
@@ -24,7 +24,7 @@
24
24
  /**
25
25
  * @template T
26
26
  * @template R
27
- * @typedef {Object} ItemWithGroups
27
+ * @typedef {object} ItemWithGroups
28
28
  * @property {T} item
29
29
  * @property {Set<Group<T, R>>} groups
30
30
  */
@@ -110,11 +110,11 @@ const smartGrouping = (items, groupConfigs) => {
110
110
  /** @type {(T | R)[]} */
111
111
  const results = [];
112
112
  for (;;) {
113
- /** @type {Group<T, R>} */
114
- let bestGroup = undefined;
113
+ /** @type {Group<T, R> | undefined} */
114
+ let bestGroup;
115
115
  let bestGroupSize = -1;
116
- let bestGroupItems = undefined;
117
- let bestGroupOptions = undefined;
116
+ let bestGroupItems;
117
+ let bestGroupOptions;
118
118
  for (const [group, state] of groupMap) {
119
119
  const { items, used } = state;
120
120
  let options = state.options;
@@ -138,14 +138,14 @@ const smartGrouping = (items, groupConfigs) => {
138
138
  }
139
139
  }
140
140
  const targetGroupCount = (options && options.targetGroupCount) || 4;
141
- let sizeValue = force
141
+ const sizeValue = force
142
142
  ? items.size
143
143
  : Math.min(
144
144
  items.size,
145
145
  (totalSize * 2) / targetGroupCount +
146
146
  itemsWithGroups.size -
147
147
  items.size
148
- );
148
+ );
149
149
  if (
150
150
  sizeValue > bestGroupSize ||
151
151
  (force && (!bestGroupOptions || !bestGroupOptions.force))
@@ -58,4 +58,4 @@ const isSourceEqual = (a, b) => {
58
58
  }
59
59
  return result;
60
60
  };
61
- exports.isSourceEqual = isSourceEqual;
61
+ module.exports.isSourceEqual = isSourceEqual;
@@ -119,7 +119,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
119
119
  )
120
120
  ) {
121
121
  return `${formattedError}\nDid you mean ${
122
- DID_YOU_MEAN[params.additionalProperty]
122
+ DID_YOU_MEAN[
123
+ /** @type {keyof DID_YOU_MEAN} */ (params.additionalProperty)
124
+ ]
123
125
  }?`;
124
126
  }
125
127
 
@@ -129,7 +131,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
129
131
  params.additionalProperty
130
132
  )
131
133
  ) {
132
- return `${formattedError}\n${REMOVED[params.additionalProperty]}?`;
134
+ return `${formattedError}\n${
135
+ REMOVED[/** @type {keyof REMOVED} */ (params.additionalProperty)]
136
+ }?`;
133
137
  }
134
138
 
135
139
  if (!error.dataPath) {
@@ -12,6 +12,10 @@
12
12
  /** @type {WeakMap<Compiler, Set<WasmLoadingType>>} */
13
13
  const enabledTypes = new WeakMap();
14
14
 
15
+ /**
16
+ * @param {Compiler} compiler compiler instance
17
+ * @returns {Set<WasmLoadingType>} enabled types
18
+ */
15
19
  const getEnabledTypes = compiler => {
16
20
  let set = enabledTypes.get(compiler);
17
21
  if (set === undefined) {
@@ -48,10 +52,11 @@ class EnableWasmLoadingPlugin {
48
52
  throw new Error(
49
53
  `Library type "${type}" is not enabled. ` +
50
54
  "EnableWasmLoadingPlugin need to be used to enable this type of wasm loading. " +
51
- 'This usually happens through the "output.enabledWasmLoadingTypes" option. ' +
52
- 'If you are using a function as entry which sets "wasmLoading", you need to add all potential library types to "output.enabledWasmLoadingTypes". ' +
53
- "These types are enabled: " +
54
- Array.from(getEnabledTypes(compiler)).join(", ")
55
+ `This usually happens through the "output.enabledWasmLoadingTypes" option. ` +
56
+ `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(", ")}`
55
60
  );
56
61
  }
57
62
  }
@@ -9,7 +9,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../Compilation")} Compilation */
14
+
15
+ /**
16
+ * @typedef {object} AsyncWasmLoadingRuntimeModuleOptions
17
+ * @property {function(string): string} generateLoadBinaryCode
18
+ * @property {boolean} supportsStreaming
19
+ */
20
+
12
21
  class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
22
+ /**
23
+ * @param {AsyncWasmLoadingRuntimeModuleOptions} options options
24
+ */
13
25
  constructor({ generateLoadBinaryCode, supportsStreaming }) {
14
26
  super("wasm loading", RuntimeModule.STAGE_NORMAL);
15
27
  this.generateLoadBinaryCode = generateLoadBinaryCode;
@@ -17,10 +29,11 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
17
29
  }
18
30
 
19
31
  /**
20
- * @returns {string} runtime code
32
+ * @returns {string | null} runtime code
21
33
  */
22
34
  generate() {
23
- const { compilation, chunk } = this;
35
+ const compilation = /** @type {Compilation} */ (this.compilation);
36
+ const chunk = /** @type {Chunk} */ (this.chunk);
24
37
  const { outputOptions, runtimeTemplate } = compilation;
25
38
  const fn = RuntimeGlobals.instantiateWasm;
26
39
  const wasmModuleSrcPath = compilation.getPath(
@@ -39,38 +52,65 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
39
52
  runtime: chunk.runtime
40
53
  }
41
54
  );
42
- return `${fn} = ${runtimeTemplate.basicFunction(
43
- "exports, wasmModuleId, wasmModuleHash, importsObj",
44
- [
45
- `var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
46
- this.supportsStreaming
47
- ? Template.asString([
48
- "if (typeof WebAssembly.instantiateStreaming === 'function') {",
55
+
56
+ const loader = this.generateLoadBinaryCode(wasmModuleSrcPath);
57
+ const fallback = [
58
+ `.then(${runtimeTemplate.returningFunction("x.arrayBuffer()", "x")})`,
59
+ `.then(${runtimeTemplate.returningFunction(
60
+ "WebAssembly.instantiate(bytes, importsObj)",
61
+ "bytes"
62
+ )})`,
63
+ `.then(${runtimeTemplate.returningFunction(
64
+ "Object.assign(exports, res.instance.exports)",
65
+ "res"
66
+ )})`
67
+ ];
68
+ const getStreaming = () => {
69
+ const concat = (/** @type {string[]} */ ...text) => text.join("");
70
+ return [
71
+ `var req = ${loader};`,
72
+ `var fallback = ${runtimeTemplate.returningFunction(
73
+ Template.asString(["req", Template.indent(fallback)])
74
+ )};`,
75
+ concat(
76
+ "return req.then(",
77
+ runtimeTemplate.basicFunction("res", [
78
+ `if (typeof WebAssembly.instantiateStreaming === "function") {`,
79
+ Template.indent([
80
+ "return WebAssembly.instantiateStreaming(res, importsObj)",
49
81
  Template.indent([
50
- "return WebAssembly.instantiateStreaming(req, importsObj)",
82
+ ".then(",
51
83
  Template.indent([
52
- `.then(${runtimeTemplate.returningFunction(
84
+ `${runtimeTemplate.returningFunction(
53
85
  "Object.assign(exports, res.instance.exports)",
54
86
  "res"
55
- )});`
56
- ])
57
- ]),
58
- "}"
59
- ])
60
- : "// no support for streaming compilation",
61
- "return req",
62
- Template.indent([
63
- `.then(${runtimeTemplate.returningFunction("x.arrayBuffer()", "x")})`,
64
- `.then(${runtimeTemplate.returningFunction(
65
- "WebAssembly.instantiate(bytes, importsObj)",
66
- "bytes"
67
- )})`,
68
- `.then(${runtimeTemplate.returningFunction(
69
- "Object.assign(exports, res.instance.exports)",
70
- "res"
71
- )});`
72
- ])
73
- ]
87
+ )},`,
88
+ runtimeTemplate.basicFunction("e", [
89
+ `if(res.headers.get("Content-Type") !== "application/wasm") {`,
90
+ Template.indent([
91
+ 'console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n", e);',
92
+ "return fallback();"
93
+ ]),
94
+ "}",
95
+ "throw e;"
96
+ ])
97
+ ]),
98
+ ");"
99
+ ])
100
+ ]),
101
+ "}",
102
+ "return fallback();"
103
+ ]),
104
+ ");"
105
+ )
106
+ ];
107
+ };
108
+
109
+ return `${fn} = ${runtimeTemplate.basicFunction(
110
+ "exports, wasmModuleId, wasmModuleHash, importsObj",
111
+ this.supportsStreaming
112
+ ? getStreaming()
113
+ : [`return ${loader}`, `${Template.indent(fallback)};`]
74
114
  )};`;
75
115
  }
76
116
  }
@@ -13,7 +13,15 @@ const Generator = require("../Generator");
13
13
 
14
14
  const TYPES = new Set(["webassembly"]);
15
15
 
16
+ /**
17
+ * @typedef {object} AsyncWebAssemblyGeneratorOptions
18
+ * @property {boolean} [mangleImports] mangle imports
19
+ */
20
+
16
21
  class AsyncWebAssemblyGenerator extends Generator {
22
+ /**
23
+ * @param {AsyncWebAssemblyGeneratorOptions} options options
24
+ */
17
25
  constructor(options) {
18
26
  super();
19
27
  this.options = options;
@@ -46,7 +54,7 @@ class AsyncWebAssemblyGenerator extends Generator {
46
54
  * @returns {Source} generated code
47
55
  */
48
56
  generate(module, generateContext) {
49
- return module.originalSource();
57
+ return /** @type {Source} */ (module.originalSource());
50
58
  }
51
59
  }
52
60