webpack 5.76.1 → 5.88.2

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

Potentially problematic release.


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

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -10,14 +10,23 @@ 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 */
14
16
  /** @typedef {import("../Compilation")} Compilation */
15
17
  /** @typedef {import("../Module")} Module */
18
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
19
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
17
20
 
18
21
  // TODO webpack 6 remove the whole folder
19
22
 
20
23
  // Get all wasm modules
24
+ /**
25
+ * @param {ModuleGraph} moduleGraph the module graph
26
+ * @param {ChunkGraph} chunkGraph the chunk graph
27
+ * @param {Chunk} chunk the chunk
28
+ * @returns {Module[]} all wasm modules
29
+ */
21
30
  const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
22
31
  const wasmModules = chunk.getAllAsyncChunks();
23
32
  const array = [];
@@ -39,7 +48,7 @@ const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
39
48
  * generates the import object function for a module
40
49
  * @param {ChunkGraph} chunkGraph the chunk graph
41
50
  * @param {Module} module the module
42
- * @param {boolean} mangle mangle imports
51
+ * @param {boolean | undefined} mangle mangle imports
43
52
  * @param {string[]} declarations array where declarations are pushed to
44
53
  * @param {RuntimeSpec} runtime the runtime
45
54
  * @returns {string} source code
@@ -83,9 +92,11 @@ const generateImportObject = (
83
92
  value: `${instanceVar}[${JSON.stringify(usedName)}]`
84
93
  });
85
94
  } else {
86
- const params = description.signature.params.map(
87
- (param, k) => "p" + k + param.valtype
88
- );
95
+ const params =
96
+ /** @type {Signature} */
97
+ (description.signature).params.map(
98
+ (param, k) => "p" + k + param.valtype
99
+ );
89
100
 
90
101
  const mod = `${RuntimeGlobals.moduleCache}[${JSON.stringify(
91
102
  chunkGraph.getModuleId(importedModule)
@@ -122,6 +133,7 @@ const generateImportObject = (
122
133
  "};"
123
134
  ];
124
135
  } else {
136
+ /** @type {Map<string, Array<{ name: string, value: string }>>} */
125
137
  const propertiesByModule = new Map();
126
138
  for (const p of properties) {
127
139
  let list = propertiesByModule.get(p.module);
@@ -188,7 +200,18 @@ const generateImportObject = (
188
200
  }
189
201
  };
190
202
 
203
+ /**
204
+ * @typedef {Object} WasmChunkLoadingRuntimeModuleOptions
205
+ * @property {(path: string) => string} generateLoadBinaryCode
206
+ * @property {boolean} [supportsStreaming]
207
+ * @property {boolean} [mangleImports]
208
+ * @property {Set<string>} runtimeRequirements
209
+ */
210
+
191
211
  class WasmChunkLoadingRuntimeModule extends RuntimeModule {
212
+ /**
213
+ * @param {WasmChunkLoadingRuntimeModuleOptions} options options
214
+ */
192
215
  constructor({
193
216
  generateLoadBinaryCode,
194
217
  supportsStreaming,
@@ -203,22 +226,26 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
203
226
  }
204
227
 
205
228
  /**
206
- * @returns {string} runtime code
229
+ * @returns {string | null} runtime code
207
230
  */
208
231
  generate() {
209
- const { chunkGraph, compilation, chunk, mangleImports } = this;
210
- const { moduleGraph, outputOptions } = compilation;
211
232
  const fn = RuntimeGlobals.ensureChunkHandlers;
212
233
  const withHmr = this._runtimeRequirements.has(
213
234
  RuntimeGlobals.hmrDownloadUpdateHandlers
214
235
  );
236
+ const compilation = /** @type {Compilation} */ (this.compilation);
237
+ const { moduleGraph, outputOptions } = compilation;
238
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
239
+ const chunk = /** @type {Chunk} */ (this.chunk);
215
240
  const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
241
+ const { mangleImports } = this;
242
+ /** @type {string[]} */
216
243
  const declarations = [];
217
244
  const importObjects = wasmModules.map(module => {
218
245
  return generateImportObject(
219
246
  chunkGraph,
220
247
  module,
221
- this.mangleImports,
248
+ mangleImports,
222
249
  declarations,
223
250
  chunk.runtime
224
251
  );
@@ -226,6 +253,10 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
226
253
  const chunkModuleIdMap = chunkGraph.getChunkModuleIdMap(chunk, m =>
227
254
  m.type.startsWith("webassembly")
228
255
  );
256
+ /**
257
+ * @param {string} content content
258
+ * @returns {string} created import object
259
+ */
229
260
  const createImportObject = content =>
230
261
  mangleImports
231
262
  ? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
@@ -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);
@@ -27,7 +27,7 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
27
27
  /** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
28
28
 
29
29
  /**
30
- * @typedef {(ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
30
+ * @typedef {(buf: ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
31
31
  */
32
32
 
33
33
  /**
@@ -62,9 +62,10 @@ const removeStartFunc = state => bin => {
62
62
  * Get imported globals
63
63
  *
64
64
  * @param {Object} ast Module's AST
65
- * @returns {Array<t.ModuleImport>} - nodes
65
+ * @returns {t.ModuleImport[]} - nodes
66
66
  */
67
67
  const getImportedGlobals = ast => {
68
+ /** @type {t.ModuleImport[]} */
68
69
  const importedGlobals = [];
69
70
 
70
71
  t.traverse(ast, {
@@ -173,6 +174,7 @@ const createDefaultInitForGlobal = globalType => {
173
174
  */
174
175
  const rewriteImportedGlobals = state => bin => {
175
176
  const additionalInitCode = state.additionalInitCode;
177
+ /** @type {Array<t.Global>} */
176
178
  const newGlobals = [];
177
179
 
178
180
  bin = editWithAST(state.ast, bin, {
@@ -318,7 +320,10 @@ const addInitFunction =
318
320
  `${importedGlobal.module}.${importedGlobal.name}`
319
321
  );
320
322
 
321
- return t.funcParam(importedGlobal.descr.valtype, id);
323
+ return t.funcParam(
324
+ /** @type {string} */ (importedGlobal.descr.valtype),
325
+ id
326
+ );
322
327
  });
323
328
 
324
329
  const funcBody = [];
@@ -344,6 +349,7 @@ const addInitFunction =
344
349
 
345
350
  funcBody.push(t.instruction("end"));
346
351
 
352
+ /** @type {string[]} */
347
353
  const funcResults = [];
348
354
 
349
355
  // Code section
@@ -369,7 +375,7 @@ const addInitFunction =
369
375
  * Extract mangle mappings from module
370
376
  * @param {ModuleGraph} moduleGraph module graph
371
377
  * @param {Module} module current module
372
- * @param {boolean} mangle mangle imports
378
+ * @param {boolean | undefined} mangle mangle imports
373
379
  * @returns {Map<string, UsedWasmDependency>} mappings to mangled names
374
380
  */
375
381
  const getUsedDependencyMap = (moduleGraph, module, mangle) => {
@@ -390,7 +396,15 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
390
396
 
391
397
  const TYPES = new Set(["webassembly"]);
392
398
 
399
+ /**
400
+ * @typedef {Object} WebAssemblyGeneratorOptions
401
+ * @property {boolean} [mangleImports] mangle imports
402
+ */
403
+
393
404
  class WebAssemblyGenerator extends Generator {
405
+ /**
406
+ * @param {WebAssemblyGeneratorOptions} options options
407
+ */
394
408
  constructor(options) {
395
409
  super();
396
410
  this.options = options;
@@ -423,7 +437,7 @@ class WebAssemblyGenerator extends Generator {
423
437
  * @returns {Source} generated code
424
438
  */
425
439
  generate(module, { moduleGraph, runtime }) {
426
- const bin = module.originalSource().source();
440
+ const bin = /** @type {Source} */ (module.originalSource()).source();
427
441
 
428
442
  const initFuncId = t.identifier("");
429
443
 
@@ -55,7 +55,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
55
55
  runtimeRequirements,
56
56
  runtime
57
57
  } = generateContext;
58
- /** @type {InitFragment[]} */
58
+ /** @type {InitFragment<InitFragment<string>>[]} */
59
59
  const initFragments = [];
60
60
 
61
61
  const exportsInfo = moduleGraph.getExportsInfo(module);
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const Generator = require("../Generator");
9
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
9
10
  const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
10
11
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
11
12
  const { compareModulesByIdentifier } = require("../util/comparators");
@@ -13,6 +14,7 @@ const memoize = require("../util/memoize");
13
14
  const WebAssemblyInInitialChunkError = require("./WebAssemblyInInitialChunkError");
14
15
 
15
16
  /** @typedef {import("webpack-sources").Source} Source */
17
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
16
18
  /** @typedef {import("../Compiler")} Compiler */
17
19
  /** @typedef {import("../Module")} Module */
18
20
  /** @typedef {import("../ModuleTemplate")} ModuleTemplate */
@@ -26,7 +28,17 @@ const getWebAssemblyJavascriptGenerator = memoize(() =>
26
28
  );
27
29
  const getWebAssemblyParser = memoize(() => require("./WebAssemblyParser"));
28
30
 
31
+ const PLUGIN_NAME = "WebAssemblyModulesPlugin";
32
+
33
+ /**
34
+ * @typedef {Object} WebAssemblyModulesPluginOptions
35
+ * @property {boolean} [mangleImports] mangle imports
36
+ */
37
+
29
38
  class WebAssemblyModulesPlugin {
39
+ /**
40
+ * @param {WebAssemblyModulesPluginOptions} options options
41
+ */
30
42
  constructor(options) {
31
43
  this.options = options;
32
44
  }
@@ -38,7 +50,7 @@ class WebAssemblyModulesPlugin {
38
50
  */
39
51
  apply(compiler) {
40
52
  compiler.hooks.compilation.tap(
41
- "WebAssemblyModulesPlugin",
53
+ PLUGIN_NAME,
42
54
  (compilation, { normalModuleFactory }) => {
43
55
  compilation.dependencyFactories.set(
44
56
  WebAssemblyImportDependency,
@@ -51,16 +63,16 @@ class WebAssemblyModulesPlugin {
51
63
  );
52
64
 
53
65
  normalModuleFactory.hooks.createParser
54
- .for("webassembly/sync")
55
- .tap("WebAssemblyModulesPlugin", () => {
66
+ .for(WEBASSEMBLY_MODULE_TYPE_SYNC)
67
+ .tap(PLUGIN_NAME, () => {
56
68
  const WebAssemblyParser = getWebAssemblyParser();
57
69
 
58
70
  return new WebAssemblyParser();
59
71
  });
60
72
 
61
73
  normalModuleFactory.hooks.createGenerator
62
- .for("webassembly/sync")
63
- .tap("WebAssemblyModulesPlugin", () => {
74
+ .for(WEBASSEMBLY_MODULE_TYPE_SYNC)
75
+ .tap(PLUGIN_NAME, () => {
64
76
  const WebAssemblyJavascriptGenerator =
65
77
  getWebAssemblyJavascriptGenerator();
66
78
  const WebAssemblyGenerator = getWebAssemblyGenerator();
@@ -71,53 +83,51 @@ class WebAssemblyModulesPlugin {
71
83
  });
72
84
  });
73
85
 
74
- compilation.hooks.renderManifest.tap(
75
- "WebAssemblyModulesPlugin",
76
- (result, options) => {
77
- const { chunkGraph } = compilation;
78
- const { chunk, outputOptions, codeGenerationResults } = options;
79
-
80
- for (const module of chunkGraph.getOrderedChunkModulesIterable(
81
- chunk,
82
- compareModulesByIdentifier
83
- )) {
84
- if (module.type === "webassembly/sync") {
85
- const filenameTemplate =
86
- outputOptions.webassemblyModuleFilename;
87
-
88
- result.push({
89
- render: () =>
90
- codeGenerationResults.getSource(
91
- module,
92
- chunk.runtime,
93
- "webassembly"
94
- ),
95
- filenameTemplate,
96
- pathOptions: {
86
+ compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
87
+ const { chunkGraph } = compilation;
88
+ const { chunk, outputOptions, codeGenerationResults } = options;
89
+
90
+ for (const module of chunkGraph.getOrderedChunkModulesIterable(
91
+ chunk,
92
+ compareModulesByIdentifier
93
+ )) {
94
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
95
+ const filenameTemplate =
96
+ /** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
97
+ (outputOptions.webassemblyModuleFilename);
98
+
99
+ result.push({
100
+ render: () =>
101
+ codeGenerationResults.getSource(
97
102
  module,
98
- runtime: chunk.runtime,
99
- chunkGraph
100
- },
101
- auxiliary: true,
102
- identifier: `webassemblyModule${chunkGraph.getModuleId(
103
- module
104
- )}`,
105
- hash: chunkGraph.getModuleHash(module, chunk.runtime)
106
- });
107
- }
103
+ chunk.runtime,
104
+ "webassembly"
105
+ ),
106
+ filenameTemplate,
107
+ pathOptions: {
108
+ module,
109
+ runtime: chunk.runtime,
110
+ chunkGraph
111
+ },
112
+ auxiliary: true,
113
+ identifier: `webassemblyModule${chunkGraph.getModuleId(
114
+ module
115
+ )}`,
116
+ hash: chunkGraph.getModuleHash(module, chunk.runtime)
117
+ });
108
118
  }
109
-
110
- return result;
111
119
  }
112
- );
113
120
 
114
- compilation.hooks.afterChunks.tap("WebAssemblyModulesPlugin", () => {
121
+ return result;
122
+ });
123
+
124
+ compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
115
125
  const chunkGraph = compilation.chunkGraph;
116
126
  const initialWasmModules = new Set();
117
127
  for (const chunk of compilation.chunks) {
118
128
  if (chunk.canBeInitial()) {
119
129
  for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
120
- if (module.type === "webassembly/sync") {
130
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
121
131
  initialWasmModules.add(module);
122
132
  }
123
133
  }
@@ -14,6 +14,8 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
14
14
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
15
15
 
16
16
  /** @typedef {import("../Module")} Module */
17
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
18
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
17
19
  /** @typedef {import("../Parser").ParserState} ParserState */
18
20
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
19
21
 
@@ -61,6 +63,9 @@ const decoderOpts = {
61
63
  };
62
64
 
63
65
  class WebAssemblyParser extends Parser {
66
+ /**
67
+ * @param {{}=} options parser options
68
+ */
64
69
  constructor(options) {
65
70
  super();
66
71
  this.hooks = Object.freeze({});
@@ -78,8 +83,10 @@ class WebAssemblyParser extends Parser {
78
83
  }
79
84
 
80
85
  // flag it as ESM
81
- state.module.buildInfo.strict = true;
82
- state.module.buildMeta.exportsType = "namespace";
86
+ /** @type {BuildInfo} */
87
+ (state.module.buildInfo).strict = true;
88
+ /** @type {BuildMeta} */
89
+ (state.module.buildMeta).exportsType = "namespace";
83
90
 
84
91
  // parse it
85
92
  const program = decode(source, decoderOpts);
@@ -88,10 +95,12 @@ class WebAssemblyParser extends Parser {
88
95
  const moduleContext = moduleContextFromModuleAST(module);
89
96
 
90
97
  // extract imports and exports
98
+ /** @type {string[]} */
91
99
  const exports = [];
92
100
  let jsIncompatibleExports = (state.module.buildMeta.jsIncompatibleExports =
93
101
  undefined);
94
102
 
103
+ /** @type {TODO[]} */
95
104
  const importedGlobals = [];
96
105
  t.traverse(module, {
97
106
  ModuleExport({ node }) {
@@ -157,12 +166,14 @@ class WebAssemblyParser extends Parser {
157
166
  } else if (t.isTable(node.descr) === true) {
158
167
  onlyDirectImport = "Table";
159
168
  } else if (t.isFuncImportDescr(node.descr) === true) {
160
- const incompatibleType = getJsIncompatibleType(node.descr.signature);
169
+ const incompatibleType = getJsIncompatibleType(
170
+ /** @type {t.Signature} */ (node.descr.signature)
171
+ );
161
172
  if (incompatibleType) {
162
173
  onlyDirectImport = `Non-JS-compatible Func Signature (${incompatibleType})`;
163
174
  }
164
175
  } else if (t.isGlobalType(node.descr) === true) {
165
- const type = node.descr.valtype;
176
+ const type = /** @type {string} */ (node.descr.valtype);
166
177
  if (!JS_COMPAT_TYPES.has(type)) {
167
178
  onlyDirectImport = `Non-JS-compatible Global Type (${type})`;
168
179
  }
@@ -22,7 +22,7 @@ const MANGLED_MODULE = "a";
22
22
  /**
23
23
  * @param {ModuleGraph} moduleGraph the module graph
24
24
  * @param {Module} module the module
25
- * @param {boolean} mangle mangle module and export names
25
+ * @param {boolean | undefined} mangle mangle module and export names
26
26
  * @returns {UsedWasmDependency[]} used dependencies and (mangled) name
27
27
  */
28
28
  const getUsedDependencies = (moduleGraph, module, mangle) => {
@@ -5,9 +5,11 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
10
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
11
13
  /** @typedef {import("../Compiler")} Compiler */
12
14
 
13
15
  class FetchCompileAsyncWasmPlugin {
@@ -21,6 +23,10 @@ class FetchCompileAsyncWasmPlugin {
21
23
  "FetchCompileAsyncWasmPlugin",
22
24
  compilation => {
23
25
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
26
+ /**
27
+ * @param {Chunk} chunk chunk
28
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
29
+ */
24
30
  const isEnabledForChunk = chunk => {
25
31
  const options = chunk.getEntryOptions();
26
32
  const wasmLoading =
@@ -29,6 +35,10 @@ class FetchCompileAsyncWasmPlugin {
29
35
  : globalWasmLoading;
30
36
  return wasmLoading === "fetch";
31
37
  };
38
+ /**
39
+ * @param {string} path path to the wasm file
40
+ * @returns {string} code to load the wasm file
41
+ */
32
42
  const generateLoadBinaryCode = path =>
33
43
  `fetch(${RuntimeGlobals.publicPath} + ${path})`;
34
44
 
@@ -40,7 +50,7 @@ class FetchCompileAsyncWasmPlugin {
40
50
  if (
41
51
  !chunkGraph.hasModuleInGraph(
42
52
  chunk,
43
- m => m.type === "webassembly/async"
53
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
44
54
  )
45
55
  ) {
46
56
  return;
@@ -5,16 +5,28 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
10
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
11
13
  /** @typedef {import("../Compiler")} Compiler */
12
14
 
13
15
  // TODO webpack 6 remove
14
16
 
17
+ const PLUGIN_NAME = "FetchCompileWasmPlugin";
18
+
19
+ /**
20
+ * @typedef {Object} FetchCompileWasmPluginOptions
21
+ * @property {boolean} [mangleImports] mangle imports
22
+ */
23
+
15
24
  class FetchCompileWasmPlugin {
16
- constructor(options) {
17
- this.options = options || {};
25
+ /**
26
+ * @param {FetchCompileWasmPluginOptions} [options] options
27
+ */
28
+ constructor(options = {}) {
29
+ this.options = options;
18
30
  }
19
31
 
20
32
  /**
@@ -23,48 +35,53 @@ class FetchCompileWasmPlugin {
23
35
  * @returns {void}
24
36
  */
25
37
  apply(compiler) {
26
- compiler.hooks.thisCompilation.tap(
27
- "FetchCompileWasmPlugin",
28
- compilation => {
29
- const globalWasmLoading = compilation.outputOptions.wasmLoading;
30
- const isEnabledForChunk = chunk => {
31
- const options = chunk.getEntryOptions();
32
- const wasmLoading =
33
- options && options.wasmLoading !== undefined
34
- ? options.wasmLoading
35
- : globalWasmLoading;
36
- return wasmLoading === "fetch";
37
- };
38
- const generateLoadBinaryCode = path =>
39
- `fetch(${RuntimeGlobals.publicPath} + ${path})`;
38
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
39
+ const globalWasmLoading = compilation.outputOptions.wasmLoading;
40
+ /**
41
+ * @param {Chunk} chunk chunk
42
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
43
+ */
44
+ const isEnabledForChunk = chunk => {
45
+ const options = chunk.getEntryOptions();
46
+ const wasmLoading =
47
+ options && options.wasmLoading !== undefined
48
+ ? options.wasmLoading
49
+ : globalWasmLoading;
50
+ return wasmLoading === "fetch";
51
+ };
52
+ /**
53
+ * @param {string} path path to the wasm file
54
+ * @returns {string} code to load the wasm file
55
+ */
56
+ const generateLoadBinaryCode = path =>
57
+ `fetch(${RuntimeGlobals.publicPath} + ${path})`;
40
58
 
41
- compilation.hooks.runtimeRequirementInTree
42
- .for(RuntimeGlobals.ensureChunkHandlers)
43
- .tap("FetchCompileWasmPlugin", (chunk, set) => {
44
- if (!isEnabledForChunk(chunk)) return;
45
- const chunkGraph = compilation.chunkGraph;
46
- if (
47
- !chunkGraph.hasModuleInGraph(
48
- chunk,
49
- m => m.type === "webassembly/sync"
50
- )
51
- ) {
52
- return;
53
- }
54
- set.add(RuntimeGlobals.moduleCache);
55
- set.add(RuntimeGlobals.publicPath);
56
- compilation.addRuntimeModule(
59
+ compilation.hooks.runtimeRequirementInTree
60
+ .for(RuntimeGlobals.ensureChunkHandlers)
61
+ .tap(PLUGIN_NAME, (chunk, set) => {
62
+ if (!isEnabledForChunk(chunk)) return;
63
+ const chunkGraph = compilation.chunkGraph;
64
+ if (
65
+ !chunkGraph.hasModuleInGraph(
57
66
  chunk,
58
- new WasmChunkLoadingRuntimeModule({
59
- generateLoadBinaryCode,
60
- supportsStreaming: true,
61
- mangleImports: this.options.mangleImports,
62
- runtimeRequirements: set
63
- })
64
- );
65
- });
66
- }
67
- );
67
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_SYNC
68
+ )
69
+ ) {
70
+ return;
71
+ }
72
+ set.add(RuntimeGlobals.moduleCache);
73
+ set.add(RuntimeGlobals.publicPath);
74
+ compilation.addRuntimeModule(
75
+ chunk,
76
+ new WasmChunkLoadingRuntimeModule({
77
+ generateLoadBinaryCode,
78
+ supportsStreaming: true,
79
+ mangleImports: this.options.mangleImports,
80
+ runtimeRequirements: set
81
+ })
82
+ );
83
+ });
84
+ });
68
85
  }
69
86
  }
70
87
 
@@ -8,6 +8,7 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Chunk")} Chunk */
11
12
  /** @typedef {import("../Compiler")} Compiler */
12
13
 
13
14
  class JsonpChunkLoadingPlugin {
@@ -21,6 +22,10 @@ class JsonpChunkLoadingPlugin {
21
22
  "JsonpChunkLoadingPlugin",
22
23
  compilation => {
23
24
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
25
+ /**
26
+ * @param {Chunk} chunk chunk
27
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
28
+ */
24
29
  const isEnabledForChunk = chunk => {
25
30
  const options = chunk.getEntryOptions();
26
31
  const chunkLoading =
@@ -30,6 +35,10 @@ class JsonpChunkLoadingPlugin {
30
35
  return chunkLoading === "jsonp";
31
36
  };
32
37
  const onceForChunkSet = new WeakSet();
38
+ /**
39
+ * @param {Chunk} chunk chunk
40
+ * @param {Set<string>} set runtime requirements
41
+ */
33
42
  const handler = (chunk, set) => {
34
43
  if (onceForChunkSet.has(chunk)) return;
35
44
  onceForChunkSet.add(chunk);