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
@@ -53,7 +53,7 @@ exports.getEntryRuntime = (compilation, name, options) => {
53
53
 
54
54
  /**
55
55
  * @param {RuntimeSpec} runtime runtime
56
- * @param {function(string): void} fn functor
56
+ * @param {function(string | undefined): void} fn functor
57
57
  * @param {boolean} deterministicOrder enforce a deterministic order
58
58
  * @returns {void}
59
59
  */
@@ -70,6 +70,11 @@ exports.forEachRuntime = (runtime, fn, deterministicOrder = false) => {
70
70
  }
71
71
  };
72
72
 
73
+ /**
74
+ * @template T
75
+ * @param {SortableSet<T>} set set
76
+ * @returns {string} runtime key
77
+ */
73
78
  const getRuntimesKey = set => {
74
79
  set.sort();
75
80
  return Array.from(set).join("\n");
@@ -98,6 +103,11 @@ const keyToRuntime = key => {
98
103
  };
99
104
  exports.keyToRuntime = keyToRuntime;
100
105
 
106
+ /**
107
+ * @template T
108
+ * @param {SortableSet<T>} set set
109
+ * @returns {string} runtime string
110
+ */
101
111
  const getRuntimesString = set => {
102
112
  set.sort();
103
113
  return Array.from(set).join("+");
@@ -415,6 +425,11 @@ exports.filterRuntime = (runtime, filter) => {
415
425
  return result;
416
426
  };
417
427
 
428
+ /**
429
+ * @template T
430
+ * @typedef {Map<string, T>} RuntimeSpecMapInnerMap
431
+ * */
432
+
418
433
  /**
419
434
  * @template T
420
435
  */
@@ -426,15 +441,15 @@ class RuntimeSpecMap {
426
441
  this._mode = clone ? clone._mode : 0; // 0 = empty, 1 = single entry, 2 = map
427
442
  /** @type {RuntimeSpec} */
428
443
  this._singleRuntime = clone ? clone._singleRuntime : undefined;
429
- /** @type {T} */
444
+ /** @type {T | undefined} */
430
445
  this._singleValue = clone ? clone._singleValue : undefined;
431
- /** @type {Map<string, T> | undefined} */
446
+ /** @type {RuntimeSpecMapInnerMap<T> | undefined} */
432
447
  this._map = clone && clone._map ? new Map(clone._map) : undefined;
433
448
  }
434
449
 
435
450
  /**
436
451
  * @param {RuntimeSpec} runtime the runtimes
437
- * @returns {T} value
452
+ * @returns {T | undefined} value
438
453
  */
439
454
  get(runtime) {
440
455
  switch (this._mode) {
@@ -445,7 +460,9 @@ class RuntimeSpecMap {
445
460
  ? this._singleValue
446
461
  : undefined;
447
462
  default:
448
- return this._map.get(getRuntimeKey(runtime));
463
+ return /** @type {RuntimeSpecMapInnerMap<T>} */ (this._map).get(
464
+ getRuntimeKey(runtime)
465
+ );
449
466
  }
450
467
  }
451
468
 
@@ -460,10 +477,16 @@ class RuntimeSpecMap {
460
477
  case 1:
461
478
  return runtimeEqual(this._singleRuntime, runtime);
462
479
  default:
463
- return this._map.has(getRuntimeKey(runtime));
480
+ return /** @type {RuntimeSpecMapInnerMap<T>} */ (this._map).has(
481
+ getRuntimeKey(runtime)
482
+ );
464
483
  }
465
484
  }
466
485
 
486
+ /**
487
+ * @param {RuntimeSpec} runtime the runtimes
488
+ * @param {T} value the value
489
+ */
467
490
  set(runtime, value) {
468
491
  switch (this._mode) {
469
492
  case 0:
@@ -478,15 +501,24 @@ class RuntimeSpecMap {
478
501
  }
479
502
  this._mode = 2;
480
503
  this._map = new Map();
481
- this._map.set(getRuntimeKey(this._singleRuntime), this._singleValue);
504
+ this._map.set(
505
+ getRuntimeKey(this._singleRuntime),
506
+ /** @type {T} */ (this._singleValue)
507
+ );
482
508
  this._singleRuntime = undefined;
483
509
  this._singleValue = undefined;
484
510
  /* falls through */
485
511
  default:
486
- this._map.set(getRuntimeKey(runtime), value);
512
+ /** @type {RuntimeSpecMapInnerMap<T>} */
513
+ (this._map).set(getRuntimeKey(runtime), value);
487
514
  }
488
515
  }
489
516
 
517
+ /**
518
+ * @param {RuntimeSpec} runtime the runtimes
519
+ * @param {() => TODO} computer function to compute the value
520
+ * @returns {TODO} true, when the runtime was deleted
521
+ */
490
522
  provide(runtime, computer) {
491
523
  switch (this._mode) {
492
524
  case 0:
@@ -495,11 +527,14 @@ class RuntimeSpecMap {
495
527
  return (this._singleValue = computer());
496
528
  case 1: {
497
529
  if (runtimeEqual(this._singleRuntime, runtime)) {
498
- return this._singleValue;
530
+ return /** @type {T} */ (this._singleValue);
499
531
  }
500
532
  this._mode = 2;
501
533
  this._map = new Map();
502
- this._map.set(getRuntimeKey(this._singleRuntime), this._singleValue);
534
+ this._map.set(
535
+ getRuntimeKey(this._singleRuntime),
536
+ /** @type {T} */ (this._singleValue)
537
+ );
503
538
  this._singleRuntime = undefined;
504
539
  this._singleValue = undefined;
505
540
  const newValue = computer();
@@ -508,15 +543,19 @@ class RuntimeSpecMap {
508
543
  }
509
544
  default: {
510
545
  const key = getRuntimeKey(runtime);
511
- const value = this._map.get(key);
546
+ const value = /** @type {Map<string, T>} */ (this._map).get(key);
512
547
  if (value !== undefined) return value;
513
548
  const newValue = computer();
514
- this._map.set(key, newValue);
549
+ /** @type {Map<string, T>} */
550
+ (this._map).set(key, newValue);
515
551
  return newValue;
516
552
  }
517
553
  }
518
554
  }
519
555
 
556
+ /**
557
+ * @param {RuntimeSpec} runtime the runtimes
558
+ */
520
559
  delete(runtime) {
521
560
  switch (this._mode) {
522
561
  case 0:
@@ -529,10 +568,15 @@ class RuntimeSpecMap {
529
568
  }
530
569
  return;
531
570
  default:
532
- this._map.delete(getRuntimeKey(runtime));
571
+ /** @type {RuntimeSpecMapInnerMap<T>} */
572
+ (this._map).delete(getRuntimeKey(runtime));
533
573
  }
534
574
  }
535
575
 
576
+ /**
577
+ * @param {RuntimeSpec} runtime the runtimes
578
+ * @param {function(T | undefined): T} fn function to update the value
579
+ */
536
580
  update(runtime, fn) {
537
581
  switch (this._mode) {
538
582
  case 0:
@@ -546,7 +590,10 @@ class RuntimeSpecMap {
546
590
  if (newValue !== undefined) {
547
591
  this._mode = 2;
548
592
  this._map = new Map();
549
- this._map.set(getRuntimeKey(this._singleRuntime), this._singleValue);
593
+ this._map.set(
594
+ getRuntimeKey(this._singleRuntime),
595
+ /** @type {T} */ (this._singleValue)
596
+ );
550
597
  this._singleRuntime = undefined;
551
598
  this._singleValue = undefined;
552
599
  this._map.set(getRuntimeKey(runtime), newValue);
@@ -555,9 +602,11 @@ class RuntimeSpecMap {
555
602
  }
556
603
  default: {
557
604
  const key = getRuntimeKey(runtime);
558
- const oldValue = this._map.get(key);
605
+ const oldValue = /** @type {Map<string, T>} */ (this._map).get(key);
559
606
  const newValue = fn(oldValue);
560
- if (newValue !== oldValue) this._map.set(key, newValue);
607
+ if (newValue !== oldValue)
608
+ /** @type {RuntimeSpecMapInnerMap<T>} */
609
+ (this._map).set(key, newValue);
561
610
  }
562
611
  }
563
612
  }
@@ -569,7 +618,11 @@ class RuntimeSpecMap {
569
618
  case 1:
570
619
  return [this._singleRuntime];
571
620
  default:
572
- return Array.from(this._map.keys(), keyToRuntime);
621
+ return Array.from(
622
+ /** @type {RuntimeSpecMapInnerMap<T>} */
623
+ (this._map).keys(),
624
+ keyToRuntime
625
+ );
573
626
  }
574
627
  }
575
628
 
@@ -578,21 +631,24 @@ class RuntimeSpecMap {
578
631
  case 0:
579
632
  return [][Symbol.iterator]();
580
633
  case 1:
581
- return [this._singleValue][Symbol.iterator]();
634
+ return [/** @type {T} */ (this._singleValue)][Symbol.iterator]();
582
635
  default:
583
- return this._map.values();
636
+ return /** @type {Map<string, T>} */ (this._map).values();
584
637
  }
585
638
  }
586
639
 
587
640
  get size() {
588
- if (this._mode <= 1) return this._mode;
589
- return this._map.size;
641
+ if (/** @type {number} */ (this._mode) <= 1) return this._mode;
642
+ return /** @type {Map<string, T>} */ (this._map).size;
590
643
  }
591
644
  }
592
645
 
593
646
  exports.RuntimeSpecMap = RuntimeSpecMap;
594
647
 
595
648
  class RuntimeSpecSet {
649
+ /**
650
+ * @param {Iterable<RuntimeSpec>=} iterable iterable
651
+ */
596
652
  constructor(iterable) {
597
653
  /** @type {Map<string, RuntimeSpec>} */
598
654
  this._map = new Map();
@@ -603,10 +659,17 @@ class RuntimeSpecSet {
603
659
  }
604
660
  }
605
661
 
662
+ /**
663
+ * @param {RuntimeSpec} runtime runtime
664
+ */
606
665
  add(runtime) {
607
666
  this._map.set(getRuntimeKey(runtime), runtime);
608
667
  }
609
668
 
669
+ /**
670
+ * @param {RuntimeSpec} runtime runtime
671
+ * @returns {boolean} true, when the runtime exists
672
+ */
610
673
  has(runtime) {
611
674
  return this._map.has(getRuntimeKey(runtime));
612
675
  }
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
8
9
  /** @typedef {(string|number|undefined|[])[]} SemVerRange */
9
10
 
10
11
  /**
@@ -288,7 +289,7 @@ const satisfy = (range, version) => {
288
289
  if (0 in range) {
289
290
  // @ts-expect-error
290
291
  version = parseVersion(version);
291
- var fixCount = range[0];
292
+ var fixCount = /** @type {number} */ (range[0]);
292
293
  // when negated is set it swill set for < instead of >=
293
294
  var negated = fixCount < 0;
294
295
  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 }) {