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
@@ -13,6 +13,7 @@ const Template = require("../Template");
13
13
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
14
14
 
15
15
  /** @typedef {import("webpack-sources").Source} Source */
16
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
16
17
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
17
18
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
18
19
  /** @typedef {import("../Module")} Module */
@@ -21,7 +22,14 @@ const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDe
21
22
 
22
23
  const TYPES = new Set(["webassembly"]);
23
24
 
25
+ /**
26
+ * @typedef {{ request: string, importVar: string }} ImportObjRequestItem
27
+ */
28
+
24
29
  class AsyncWebAssemblyJavascriptGenerator extends Generator {
30
+ /**
31
+ * @param {OutputOptions["webassemblyModuleFilename"]} filenameTemplate template for the WebAssembly module filename
32
+ */
25
33
  constructor(filenameTemplate) {
26
34
  super();
27
35
  this.filenameTemplate = filenameTemplate;
@@ -61,15 +69,15 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
61
69
  runtimeRequirements.add(RuntimeGlobals.moduleId);
62
70
  runtimeRequirements.add(RuntimeGlobals.exports);
63
71
  runtimeRequirements.add(RuntimeGlobals.instantiateWasm);
64
- /** @type {InitFragment[]} */
72
+ /** @type {InitFragment<InitFragment<string>>[]} */
65
73
  const initFragments = [];
66
- /** @type {Map<Module, { request: string, importVar: string }>} */
74
+ /** @type {Map<Module, ImportObjRequestItem>} */
67
75
  const depModules = new Map();
68
76
  /** @type {Map<string, WebAssemblyImportDependency[]>} */
69
77
  const wasmDepsByRequest = new Map();
70
78
  for (const dep of module.dependencies) {
71
79
  if (dep instanceof WebAssemblyImportDependency) {
72
- const module = moduleGraph.getModule(dep);
80
+ const module = /** @type {Module} */ (moduleGraph.getModule(dep));
73
81
  if (!depModules.has(module)) {
74
82
  depModules.set(module, {
75
83
  request: dep.request,
@@ -85,6 +93,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
85
93
  }
86
94
  }
87
95
 
96
+ /** @type {Array<string>} */
88
97
  const promises = [];
89
98
 
90
99
  const importStatements = Array.from(
@@ -111,8 +120,12 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
111
120
  wasmDepsByRequest,
112
121
  ([request, deps]) => {
113
122
  const exportItems = deps.map(dep => {
114
- const importedModule = moduleGraph.getModule(dep);
115
- const importVar = depModules.get(importedModule).importVar;
123
+ const importedModule =
124
+ /** @type {Module} */
125
+ (moduleGraph.getModule(dep));
126
+ const importVar =
127
+ /** @type {ImportObjRequestItem} */
128
+ (depModules.get(importedModule)).importVar;
116
129
  return `${JSON.stringify(
117
130
  dep.name
118
131
  )}: ${runtimeTemplate.exportFromImport({
@@ -145,15 +158,14 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
145
158
  "{",
146
159
  Template.indent(importObjRequestItems.join(",\n")),
147
160
  "}"
148
- ])
161
+ ])
149
162
  : undefined;
150
163
 
151
- const instantiateCall =
152
- `${RuntimeGlobals.instantiateWasm}(${module.exportsArgument}, ${
153
- module.moduleArgument
154
- }.id, ${JSON.stringify(
155
- chunkGraph.getRenderedModuleHash(module, runtime)
156
- )}` + (importsObj ? `, ${importsObj})` : `)`);
164
+ const instantiateCall = `${RuntimeGlobals.instantiateWasm}(${module.exportsArgument}, ${
165
+ module.moduleArgument
166
+ }.id, ${JSON.stringify(
167
+ chunkGraph.getRenderedModuleHash(module, runtime)
168
+ )}${importsObj ? `, ${importsObj})` : ")"}`;
157
169
 
158
170
  if (promises.length > 0)
159
171
  runtimeRequirements.add(RuntimeGlobals.asyncModule);
@@ -167,17 +179,23 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
167
179
  )}`,
168
180
  `${RuntimeGlobals.asyncModule}(${
169
181
  module.moduleArgument
170
- }, ${runtimeTemplate.basicFunction(
171
- "__webpack_handle_async_dependencies__",
182
+ }, async ${runtimeTemplate.basicFunction(
183
+ "__webpack_handle_async_dependencies__, __webpack_async_result__",
172
184
  [
185
+ "try {",
173
186
  importsCode,
174
187
  `var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${promises.join(
175
188
  ", "
176
189
  )}]);`,
177
- "return __webpack_async_dependencies__.then ? __webpack_async_dependencies__.then(__webpack_instantiate__) : __webpack_instantiate__(__webpack_async_dependencies__);"
190
+ `var [${promises.join(
191
+ ", "
192
+ )}] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__;`,
193
+ `${importsCompatCode}await ${instantiateCall};`,
194
+ "__webpack_async_result__();",
195
+ "} catch(e) { __webpack_async_result__(e); }"
178
196
  ]
179
197
  )}, 1);`
180
- ])
198
+ ])
181
199
  : `${importsCode}${importsCompatCode}module.exports = ${instantiateCall};`
182
200
  );
183
201
 
@@ -9,11 +9,13 @@ const { SyncWaterfallHook } = require("tapable");
9
9
  const Compilation = require("../Compilation");
10
10
  const Generator = require("../Generator");
11
11
  const { tryRunOrWebpackError } = require("../HookWebpackError");
12
+ const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
12
13
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
13
14
  const { compareModulesByIdentifier } = require("../util/comparators");
14
15
  const memoize = require("../util/memoize");
15
16
 
16
17
  /** @typedef {import("webpack-sources").Source} Source */
18
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
17
19
  /** @typedef {import("../Chunk")} Chunk */
18
20
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
19
21
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
@@ -24,6 +26,7 @@ const memoize = require("../util/memoize");
24
26
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
25
27
  /** @typedef {import("../Template").RenderManifestEntry} RenderManifestEntry */
26
28
  /** @typedef {import("../Template").RenderManifestOptions} RenderManifestOptions */
29
+ /** @typedef {import("../WebpackError")} WebpackError */
27
30
 
28
31
  const getAsyncWebAssemblyGenerator = memoize(() =>
29
32
  require("./AsyncWebAssemblyGenerator")
@@ -36,7 +39,7 @@ const getAsyncWebAssemblyParser = memoize(() =>
36
39
  );
37
40
 
38
41
  /**
39
- * @typedef {Object} WebAssemblyRenderContext
42
+ * @typedef {object} WebAssemblyRenderContext
40
43
  * @property {Chunk} chunk the chunk
41
44
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
42
45
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
@@ -46,13 +49,20 @@ const getAsyncWebAssemblyParser = memoize(() =>
46
49
  */
47
50
 
48
51
  /**
49
- * @typedef {Object} CompilationHooks
52
+ * @typedef {object} CompilationHooks
50
53
  * @property {SyncWaterfallHook<[Source, Module, WebAssemblyRenderContext]>} renderModuleContent
51
54
  */
52
55
 
56
+ /**
57
+ * @typedef {object} AsyncWebAssemblyModulesPluginOptions
58
+ * @property {boolean} [mangleImports] mangle imports
59
+ */
60
+
53
61
  /** @type {WeakMap<Compilation, CompilationHooks>} */
54
62
  const compilationHooksMap = new WeakMap();
55
63
 
64
+ const PLUGIN_NAME = "AsyncWebAssemblyModulesPlugin";
65
+
56
66
  class AsyncWebAssemblyModulesPlugin {
57
67
  /**
58
68
  * @param {Compilation} compilation the compilation
@@ -78,6 +88,9 @@ class AsyncWebAssemblyModulesPlugin {
78
88
  return hooks;
79
89
  }
80
90
 
91
+ /**
92
+ * @param {AsyncWebAssemblyModulesPluginOptions} options options
93
+ */
81
94
  constructor(options) {
82
95
  this.options = options;
83
96
  }
@@ -89,7 +102,7 @@ class AsyncWebAssemblyModulesPlugin {
89
102
  */
90
103
  apply(compiler) {
91
104
  compiler.hooks.compilation.tap(
92
- "AsyncWebAssemblyModulesPlugin",
105
+ PLUGIN_NAME,
93
106
  (compilation, { normalModuleFactory }) => {
94
107
  const hooks =
95
108
  AsyncWebAssemblyModulesPlugin.getCompilationHooks(compilation);
@@ -99,15 +112,15 @@ class AsyncWebAssemblyModulesPlugin {
99
112
  );
100
113
 
101
114
  normalModuleFactory.hooks.createParser
102
- .for("webassembly/async")
103
- .tap("AsyncWebAssemblyModulesPlugin", () => {
115
+ .for(WEBASSEMBLY_MODULE_TYPE_ASYNC)
116
+ .tap(PLUGIN_NAME, () => {
104
117
  const AsyncWebAssemblyParser = getAsyncWebAssemblyParser();
105
118
 
106
119
  return new AsyncWebAssemblyParser();
107
120
  });
108
121
  normalModuleFactory.hooks.createGenerator
109
- .for("webassembly/async")
110
- .tap("AsyncWebAssemblyModulesPlugin", () => {
122
+ .for(WEBASSEMBLY_MODULE_TYPE_ASYNC)
123
+ .tap(PLUGIN_NAME, () => {
111
124
  const AsyncWebAssemblyJavascriptGenerator =
112
125
  getAsyncWebAssemblyJavascriptGenerator();
113
126
  const AsyncWebAssemblyGenerator = getAsyncWebAssemblyGenerator();
@@ -135,9 +148,10 @@ class AsyncWebAssemblyModulesPlugin {
135
148
  chunk,
136
149
  compareModulesByIdentifier
137
150
  )) {
138
- if (module.type === "webassembly/async") {
151
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_ASYNC) {
139
152
  const filenameTemplate =
140
- outputOptions.webassemblyModuleFilename;
153
+ /** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
154
+ (outputOptions.webassemblyModuleFilename);
141
155
 
142
156
  result.push({
143
157
  render: () =>
@@ -175,6 +189,12 @@ class AsyncWebAssemblyModulesPlugin {
175
189
  );
176
190
  }
177
191
 
192
+ /**
193
+ * @param {Module} module the rendered module
194
+ * @param {WebAssemblyRenderContext} renderContext options object
195
+ * @param {CompilationHooks} hooks hooks
196
+ * @returns {Source} the newly generated source from rendering
197
+ */
178
198
  renderModule(module, renderContext, hooks) {
179
199
  const { codeGenerationResults, chunk } = renderContext;
180
200
  try {
@@ -188,9 +208,9 @@ class AsyncWebAssemblyModulesPlugin {
188
208
  hooks.renderModuleContent.call(moduleSource, module, renderContext),
189
209
  "AsyncWebAssemblyModulesPlugin.getCompilationHooks().renderModuleContent"
190
210
  );
191
- } catch (e) {
192
- e.module = module;
193
- throw e;
211
+ } catch (err) {
212
+ /** @type {WebpackError} */ (err).module = module;
213
+ throw err;
194
214
  }
195
215
  }
196
216
  }
@@ -7,10 +7,13 @@
7
7
 
8
8
  const t = require("@webassemblyjs/ast");
9
9
  const { decode } = require("@webassemblyjs/wasm-parser");
10
+ const EnvironmentNotSupportAsyncWarning = require("../EnvironmentNotSupportAsyncWarning");
10
11
  const Parser = require("../Parser");
11
12
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
12
13
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
13
14
 
15
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
16
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
14
17
  /** @typedef {import("../Parser").ParserState} ParserState */
15
18
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
16
19
 
@@ -23,6 +26,9 @@ const decoderOpts = {
23
26
  };
24
27
 
25
28
  class WebAssemblyParser extends Parser {
29
+ /**
30
+ * @param {{}=} options parser options
31
+ */
26
32
  constructor(options) {
27
33
  super();
28
34
  this.hooks = Object.freeze({});
@@ -40,14 +46,21 @@ class WebAssemblyParser extends Parser {
40
46
  }
41
47
 
42
48
  // flag it as async module
43
- state.module.buildInfo.strict = true;
44
- state.module.buildMeta.exportsType = "namespace";
45
- state.module.buildMeta.async = true;
49
+ const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
50
+ buildInfo.strict = true;
51
+ const BuildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
52
+ BuildMeta.exportsType = "namespace";
53
+ BuildMeta.async = true;
54
+ EnvironmentNotSupportAsyncWarning.check(
55
+ state.module,
56
+ state.compilation.runtimeTemplate,
57
+ "asyncWebAssembly"
58
+ );
46
59
 
47
60
  // parse it
48
61
  const program = decode(source, decoderOpts);
49
62
  const module = program.body[0];
50
-
63
+ /** @type {Array<string>} */
51
64
  const exports = [];
52
65
  t.traverse(module, {
53
66
  ModuleExport({ node }) {
@@ -10,14 +10,25 @@ const Template = require("../Template");
10
10
  const { compareModulesByIdentifier } = require("../util/comparators");
11
11
  const WebAssemblyUtils = require("./WebAssemblyUtils");
12
12
 
13
+ /** @typedef {import("@webassemblyjs/ast").Signature} Signature */
14
+ /** @typedef {import("../Chunk")} Chunk */
13
15
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
16
+ /** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
14
17
  /** @typedef {import("../Compilation")} Compilation */
15
18
  /** @typedef {import("../Module")} Module */
19
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
20
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
21
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
17
22
 
18
23
  // TODO webpack 6 remove the whole folder
19
24
 
20
25
  // Get all wasm modules
26
+ /**
27
+ * @param {ModuleGraph} moduleGraph the module graph
28
+ * @param {ChunkGraph} chunkGraph the chunk graph
29
+ * @param {Chunk} chunk the chunk
30
+ * @returns {Module[]} all wasm modules
31
+ */
21
32
  const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
22
33
  const wasmModules = chunk.getAllAsyncChunks();
23
34
  const array = [];
@@ -39,7 +50,7 @@ const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
39
50
  * generates the import object function for a module
40
51
  * @param {ChunkGraph} chunkGraph the chunk graph
41
52
  * @param {Module} module the module
42
- * @param {boolean} mangle mangle imports
53
+ * @param {boolean | undefined} mangle mangle imports
43
54
  * @param {string[]} declarations array where declarations are pushed to
44
55
  * @param {RuntimeSpec} runtime the runtime
45
56
  * @returns {string} source code
@@ -52,6 +63,7 @@ const generateImportObject = (
52
63
  runtime
53
64
  ) => {
54
65
  const moduleGraph = chunkGraph.moduleGraph;
66
+ /** @type {Map<string, string | number>} */
55
67
  const waitForInstances = new Map();
56
68
  const properties = [];
57
69
  const usedWasmDependencies = WebAssemblyUtils.getUsedDependencies(
@@ -76,32 +88,42 @@ const generateImportObject = (
76
88
 
77
89
  if (direct) {
78
90
  const instanceVar = `m${waitForInstances.size}`;
79
- waitForInstances.set(instanceVar, chunkGraph.getModuleId(importedModule));
91
+ waitForInstances.set(
92
+ instanceVar,
93
+ /** @type {ModuleId} */
94
+ (chunkGraph.getModuleId(/** @type {Module} */ (importedModule)))
95
+ );
80
96
  properties.push({
81
97
  module,
82
98
  name,
83
99
  value: `${instanceVar}[${JSON.stringify(usedName)}]`
84
100
  });
85
101
  } else {
86
- const params = description.signature.params.map(
87
- (param, k) => "p" + k + param.valtype
88
- );
102
+ const params =
103
+ /** @type {Signature} */
104
+ (description.signature).params.map(
105
+ (param, k) => `p${k}${param.valtype}`
106
+ );
89
107
 
90
108
  const mod = `${RuntimeGlobals.moduleCache}[${JSON.stringify(
91
- chunkGraph.getModuleId(importedModule)
109
+ chunkGraph.getModuleId(/** @type {Module} */ (importedModule))
92
110
  )}]`;
93
111
  const modExports = `${mod}.exports`;
94
112
 
95
113
  const cache = `wasmImportedFuncCache${declarations.length}`;
96
114
  declarations.push(`var ${cache};`);
97
115
 
116
+ const modCode =
117
+ /** @type {Module} */
118
+ (importedModule).type.startsWith("webassembly")
119
+ ? `${mod} ? ${modExports}[${JSON.stringify(usedName)}] : `
120
+ : "";
121
+
98
122
  properties.push({
99
123
  module,
100
124
  name,
101
125
  value: Template.asString([
102
- (importedModule.type.startsWith("webassembly")
103
- ? `${mod} ? ${modExports}[${JSON.stringify(usedName)}] : `
104
- : "") + `function(${params}) {`,
126
+ `${modCode}function(${params}) {`,
105
127
  Template.indent([
106
128
  `if(${cache} === undefined) ${cache} = ${modExports};`,
107
129
  `return ${cache}[${JSON.stringify(usedName)}](${params});`
@@ -122,6 +144,7 @@ const generateImportObject = (
122
144
  "};"
123
145
  ];
124
146
  } else {
147
+ /** @type {Map<string, Array<{ name: string, value: string }>>} */
125
148
  const propertiesByModule = new Map();
126
149
  for (const p of properties) {
127
150
  let list = propertiesByModule.get(p.module);
@@ -133,15 +156,15 @@ const generateImportObject = (
133
156
  importObject = [
134
157
  "return {",
135
158
  Template.indent([
136
- Array.from(propertiesByModule, ([module, list]) => {
137
- return Template.asString([
159
+ Array.from(propertiesByModule, ([module, list]) =>
160
+ Template.asString([
138
161
  `${JSON.stringify(module)}: {`,
139
162
  Template.indent([
140
163
  list.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n")
141
164
  ]),
142
165
  "}"
143
- ]);
144
- }).join(",\n")
166
+ ])
167
+ ).join(",\n")
145
168
  ]),
146
169
  "};"
147
170
  ];
@@ -179,16 +202,26 @@ const generateImportObject = (
179
202
  ]),
180
203
  "},"
181
204
  ]);
182
- } else {
183
- return Template.asString([
184
- `${moduleIdStringified}: function() {`,
185
- Template.indent(importObject),
186
- "},"
187
- ]);
188
205
  }
206
+ return Template.asString([
207
+ `${moduleIdStringified}: function() {`,
208
+ Template.indent(importObject),
209
+ "},"
210
+ ]);
189
211
  };
190
212
 
213
+ /**
214
+ * @typedef {object} WasmChunkLoadingRuntimeModuleOptions
215
+ * @property {(path: string) => string} generateLoadBinaryCode
216
+ * @property {boolean} [supportsStreaming]
217
+ * @property {boolean} [mangleImports]
218
+ * @property {ReadOnlyRuntimeRequirements} runtimeRequirements
219
+ */
220
+
191
221
  class WasmChunkLoadingRuntimeModule extends RuntimeModule {
222
+ /**
223
+ * @param {WasmChunkLoadingRuntimeModuleOptions} options options
224
+ */
192
225
  constructor({
193
226
  generateLoadBinaryCode,
194
227
  supportsStreaming,
@@ -203,29 +236,37 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
203
236
  }
204
237
 
205
238
  /**
206
- * @returns {string} runtime code
239
+ * @returns {string | null} runtime code
207
240
  */
208
241
  generate() {
209
- const { chunkGraph, compilation, chunk, mangleImports } = this;
210
- const { moduleGraph, outputOptions } = compilation;
211
242
  const fn = RuntimeGlobals.ensureChunkHandlers;
212
243
  const withHmr = this._runtimeRequirements.has(
213
244
  RuntimeGlobals.hmrDownloadUpdateHandlers
214
245
  );
246
+ const compilation = /** @type {Compilation} */ (this.compilation);
247
+ const { moduleGraph, outputOptions } = compilation;
248
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
249
+ const chunk = /** @type {Chunk} */ (this.chunk);
215
250
  const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
251
+ const { mangleImports } = this;
252
+ /** @type {string[]} */
216
253
  const declarations = [];
217
- const importObjects = wasmModules.map(module => {
218
- return generateImportObject(
254
+ const importObjects = wasmModules.map(module =>
255
+ generateImportObject(
219
256
  chunkGraph,
220
257
  module,
221
- this.mangleImports,
258
+ mangleImports,
222
259
  declarations,
223
260
  chunk.runtime
224
- );
225
- });
261
+ )
262
+ );
226
263
  const chunkModuleIdMap = chunkGraph.getChunkModuleIdMap(chunk, m =>
227
264
  m.type.startsWith("webassembly")
228
265
  );
266
+ /**
267
+ * @param {string} content content
268
+ * @returns {string} created import object
269
+ */
229
270
  const createImportObject = content =>
230
271
  mangleImports
231
272
  ? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
@@ -291,7 +332,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
291
332
  `${fn}.wasm = function(chunkId, promises) {`,
292
333
  Template.indent([
293
334
  "",
294
- `var wasmModules = wasmModuleMap[chunkId] || [];`,
335
+ "var wasmModules = wasmModuleMap[chunkId] || [];",
295
336
  "",
296
337
  "wasmModules.forEach(function(wasmModuleId, idx) {",
297
338
  Template.indent([
@@ -302,7 +343,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
302
343
  Template.indent(["promises.push(installedWasmModuleData);"]),
303
344
  "else {",
304
345
  Template.indent([
305
- `var importObject = wasmImportObjects[wasmModuleId]();`,
346
+ "var importObject = wasmImportObjects[wasmModuleId]();",
306
347
  `var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
307
348
  "var promise;",
308
349
  this.supportsStreaming
@@ -323,7 +364,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
323
364
  "importObject"
324
365
  )});`
325
366
  ])
326
- ])
367
+ ])
327
368
  : Template.asString([
328
369
  "if(importObject && typeof importObject.then === 'function') {",
329
370
  Template.indent([
@@ -341,7 +382,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
341
382
  ]),
342
383
  "});"
343
384
  ])
344
- ]),
385
+ ]),
345
386
  "} else {",
346
387
  Template.indent([
347
388
  "var bytesPromise = req.then(function(x) { return x.arrayBuffer(); });",
@@ -9,6 +9,9 @@ const formatLocation = require("../formatLocation");
9
9
  const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeatureError");
10
10
 
11
11
  /** @typedef {import("../Compiler")} Compiler */
12
+ /** @typedef {import("../Dependency")} Dependency */
13
+ /** @typedef {import("../Module")} Module */
14
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
12
15
 
13
16
  class WasmFinalizeExportsPlugin {
14
17
  /**
@@ -25,7 +28,8 @@ class WasmFinalizeExportsPlugin {
25
28
  // 1. if a WebAssembly module
26
29
  if (module.type.startsWith("webassembly") === true) {
27
30
  const jsIncompatibleExports =
28
- module.buildMeta.jsIncompatibleExports;
31
+ /** @type {BuildMeta} */
32
+ (module.buildMeta).jsIncompatibleExports;
29
33
 
30
34
  if (jsIncompatibleExports === undefined) {
31
35
  continue;
@@ -37,12 +41,13 @@ class WasmFinalizeExportsPlugin {
37
41
  // 2. is active and referenced by a non-WebAssembly module
38
42
  if (
39
43
  connection.isTargetActive(undefined) &&
40
- connection.originModule.type.startsWith("webassembly") ===
44
+ /** @type {Module} */
45
+ (connection.originModule).type.startsWith("webassembly") ===
41
46
  false
42
47
  ) {
43
48
  const referencedExports =
44
49
  compilation.getDependencyReferencedExports(
45
- connection.dependency,
50
+ /** @type {Dependency} */ (connection.dependency),
46
51
  undefined
47
52
  );
48
53
 
@@ -61,9 +66,15 @@ class WasmFinalizeExportsPlugin {
61
66
  // 4. error
62
67
  const error = new UnsupportedWebAssemblyFeatureError(
63
68
  `Export "${name}" with ${jsIncompatibleExports[name]} can only be used for direct wasm to wasm dependencies\n` +
64
- `It's used from ${connection.originModule.readableIdentifier(
65
- compilation.requestShortener
66
- )} at ${formatLocation(connection.dependency.loc)}.`
69
+ `It's used from ${
70
+ /** @type {Module} */
71
+ (connection.originModule).readableIdentifier(
72
+ compilation.requestShortener
73
+ )
74
+ } at ${formatLocation(
75
+ /** @type {Dependency} */ (connection.dependency)
76
+ .loc
77
+ )}.`
67
78
  );
68
79
  error.module = module;
69
80
  compilation.errors.push(error);