webpack 5.76.1 → 5.88.0

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

Potentially problematic release.


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

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -434,7 +434,7 @@ class RuntimeSpecMap {
434
434
 
435
435
  /**
436
436
  * @param {RuntimeSpec} runtime the runtimes
437
- * @returns {T} value
437
+ * @returns {T | undefined} value
438
438
  */
439
439
  get(runtime) {
440
440
  switch (this._mode) {
@@ -517,6 +517,9 @@ class RuntimeSpecMap {
517
517
  }
518
518
  }
519
519
 
520
+ /**
521
+ * @param {RuntimeSpec} runtime the runtimes
522
+ */
520
523
  delete(runtime) {
521
524
  switch (this._mode) {
522
525
  case 0:
@@ -593,6 +596,9 @@ class RuntimeSpecMap {
593
596
  exports.RuntimeSpecMap = RuntimeSpecMap;
594
597
 
595
598
  class RuntimeSpecSet {
599
+ /**
600
+ * @param {Iterable<RuntimeSpec>=} iterable iterable
601
+ */
596
602
  constructor(iterable) {
597
603
  /** @type {Map<string, RuntimeSpec>} */
598
604
  this._map = new Map();
@@ -603,10 +609,17 @@ class RuntimeSpecSet {
603
609
  }
604
610
  }
605
611
 
612
+ /**
613
+ * @param {RuntimeSpec} runtime runtime
614
+ */
606
615
  add(runtime) {
607
616
  this._map.set(getRuntimeKey(runtime), runtime);
608
617
  }
609
618
 
619
+ /**
620
+ * @param {RuntimeSpec} runtime runtime
621
+ * @returns {boolean} true, when the runtime exists
622
+ */
610
623
  has(runtime) {
611
624
  return this._map.has(getRuntimeKey(runtime));
612
625
  }
@@ -288,7 +288,7 @@ const satisfy = (range, version) => {
288
288
  if (0 in range) {
289
289
  // @ts-expect-error
290
290
  version = parseVersion(version);
291
- var fixCount = range[0];
291
+ var fixCount = /** @type {number} */ (range[0]);
292
292
  // when negated is set it swill set for < instead of >=
293
293
  var negated = fixCount < 0;
294
294
  if (negated) fixCount = -fixCount - 1;
@@ -11,6 +11,8 @@ const memoize = require("./memoize");
11
11
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
12
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
13
  /** @typedef {import("../serialization/Serializer")} Serializer */
14
+ /** @typedef {typeof import("../util/Hash")} Hash */
15
+ /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
14
16
 
15
17
  const getBinaryMiddleware = memoize(() =>
16
18
  require("../serialization/BinaryMiddleware")
@@ -72,6 +74,9 @@ module.exports = {
72
74
  get MEASURE_END_OPERATION() {
73
75
  return getBinaryMiddleware().MEASURE_END_OPERATION;
74
76
  },
77
+ /**
78
+ * @returns {Serializer} buffer serializer
79
+ */
75
80
  get buffersSerializer() {
76
81
  if (buffersSerializer !== undefined) return buffersSerializer;
77
82
  registerSerializers();
@@ -93,6 +98,11 @@ module.exports = {
93
98
  binaryMiddleware
94
99
  ]));
95
100
  },
101
+ /**
102
+ * @param {IntermediateFileSystem} fs filesystem
103
+ * @param {string | Hash} hashFunction hash function to use
104
+ * @returns {Serializer} file serializer
105
+ */
96
106
  createFileSerializer: (fs, hashFunction) => {
97
107
  registerSerializers();
98
108
  const Serializer = getSerializer();
@@ -110,7 +110,7 @@ const smartGrouping = (items, groupConfigs) => {
110
110
  /** @type {(T | R)[]} */
111
111
  const results = [];
112
112
  for (;;) {
113
- /** @type {Group<T, R>} */
113
+ /** @type {Group<T, R> | undefined} */
114
114
  let bestGroup = undefined;
115
115
  let bestGroupSize = -1;
116
116
  let bestGroupItems = undefined;
@@ -119,7 +119,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
119
119
  )
120
120
  ) {
121
121
  return `${formattedError}\nDid you mean ${
122
- DID_YOU_MEAN[params.additionalProperty]
122
+ DID_YOU_MEAN[
123
+ /** @type {keyof DID_YOU_MEAN} */ (params.additionalProperty)
124
+ ]
123
125
  }?`;
124
126
  }
125
127
 
@@ -129,7 +131,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
129
131
  params.additionalProperty
130
132
  )
131
133
  ) {
132
- return `${formattedError}\n${REMOVED[params.additionalProperty]}?`;
134
+ return `${formattedError}\n${
135
+ REMOVED[/** @type {keyof REMOVED} */ (params.additionalProperty)]
136
+ }?`;
133
137
  }
134
138
 
135
139
  if (!error.dataPath) {
@@ -12,6 +12,10 @@
12
12
  /** @type {WeakMap<Compiler, Set<WasmLoadingType>>} */
13
13
  const enabledTypes = new WeakMap();
14
14
 
15
+ /**
16
+ * @param {Compiler} compiler compiler instance
17
+ * @returns {Set<WasmLoadingType>} enabled types
18
+ */
15
19
  const getEnabledTypes = compiler => {
16
20
  let set = enabledTypes.get(compiler);
17
21
  if (set === undefined) {
@@ -9,7 +9,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
13
+ /** @typedef {import("../Compilation")} Compilation */
14
+
15
+ /**
16
+ * @typedef {Object} AsyncWasmLoadingRuntimeModuleOptions
17
+ * @property {function(string): string} generateLoadBinaryCode
18
+ * @property {boolean} supportsStreaming
19
+ */
20
+
12
21
  class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
22
+ /**
23
+ * @param {AsyncWasmLoadingRuntimeModuleOptions} options options
24
+ */
13
25
  constructor({ generateLoadBinaryCode, supportsStreaming }) {
14
26
  super("wasm loading", RuntimeModule.STAGE_NORMAL);
15
27
  this.generateLoadBinaryCode = generateLoadBinaryCode;
@@ -17,10 +29,11 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
17
29
  }
18
30
 
19
31
  /**
20
- * @returns {string} runtime code
32
+ * @returns {string | null} runtime code
21
33
  */
22
34
  generate() {
23
- const { compilation, chunk } = this;
35
+ const compilation = /** @type {Compilation} */ (this.compilation);
36
+ const chunk = /** @type {Chunk} */ (this.chunk);
24
37
  const { outputOptions, runtimeTemplate } = compilation;
25
38
  const fn = RuntimeGlobals.instantiateWasm;
26
39
  const wasmModuleSrcPath = compilation.getPath(
@@ -13,7 +13,15 @@ const Generator = require("../Generator");
13
13
 
14
14
  const TYPES = new Set(["webassembly"]);
15
15
 
16
+ /**
17
+ * @typedef {Object} AsyncWebAssemblyGeneratorOptions
18
+ * @property {boolean} [mangleImports] mangle imports
19
+ */
20
+
16
21
  class AsyncWebAssemblyGenerator extends Generator {
22
+ /**
23
+ * @param {AsyncWebAssemblyGeneratorOptions} options options
24
+ */
17
25
  constructor(options) {
18
26
  super();
19
27
  this.options = options;
@@ -46,7 +54,7 @@ class AsyncWebAssemblyGenerator extends Generator {
46
54
  * @returns {Source} generated code
47
55
  */
48
56
  generate(module, generateContext) {
49
- return module.originalSource();
57
+ return /** @type {Source} */ (module.originalSource());
50
58
  }
51
59
  }
52
60
 
@@ -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,9 +69,9 @@ 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();
@@ -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(
@@ -112,7 +121,9 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
112
121
  ([request, deps]) => {
113
122
  const exportItems = deps.map(dep => {
114
123
  const importedModule = moduleGraph.getModule(dep);
115
- const importVar = depModules.get(importedModule).importVar;
124
+ const importVar =
125
+ /** @type {ImportObjRequestItem} */
126
+ (depModules.get(importedModule)).importVar;
116
127
  return `${JSON.stringify(
117
128
  dep.name
118
129
  )}: ${runtimeTemplate.exportFromImport({
@@ -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")
@@ -50,9 +53,16 @@ const getAsyncWebAssemblyParser = memoize(() =>
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 {
@@ -189,7 +209,7 @@ class AsyncWebAssemblyModulesPlugin {
189
209
  "AsyncWebAssemblyModulesPlugin.getCompilationHooks().renderModuleContent"
190
210
  );
191
211
  } catch (e) {
192
- e.module = module;
212
+ /** @type {WebpackError} */ (e).module = module;
193
213
  throw e;
194
214
  }
195
215
  }
@@ -11,6 +11,8 @@ const Parser = require("../Parser");
11
11
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
12
12
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
13
13
 
14
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
15
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
14
16
  /** @typedef {import("../Parser").ParserState} ParserState */
15
17
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
16
18
 
@@ -23,6 +25,9 @@ const decoderOpts = {
23
25
  };
24
26
 
25
27
  class WebAssemblyParser extends Parser {
28
+ /**
29
+ * @param {{}=} options parser options
30
+ */
26
31
  constructor(options) {
27
32
  super();
28
33
  this.hooks = Object.freeze({});
@@ -40,14 +45,16 @@ class WebAssemblyParser extends Parser {
40
45
  }
41
46
 
42
47
  // flag it as async module
43
- state.module.buildInfo.strict = true;
44
- state.module.buildMeta.exportsType = "namespace";
45
- state.module.buildMeta.async = true;
48
+ const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
49
+ buildInfo.strict = true;
50
+ const BuildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
51
+ BuildMeta.exportsType = "namespace";
52
+ BuildMeta.async = true;
46
53
 
47
54
  // parse it
48
55
  const program = decode(source, decoderOpts);
49
56
  const module = program.body[0];
50
-
57
+ /** @type {Array<string>} */
51
58
  const exports = [];
52
59
  t.traverse(module, {
53
60
  ModuleExport({ node }) {
@@ -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);