webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -25,46 +25,50 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
25
25
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
26
26
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
27
  /** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
28
+ /** @typedef {import("@webassemblyjs/ast").Instruction} Instruction */
29
+ /** @typedef {import("@webassemblyjs/ast").ModuleImport} ModuleImport */
30
+ /** @typedef {import("@webassemblyjs/ast").ModuleExport} ModuleExport */
31
+ /** @typedef {import("@webassemblyjs/ast").Global} Global */
32
+ /**
33
+ * @template T
34
+ * @typedef {import("@webassemblyjs/ast").NodePath<T>} NodePath
35
+ */
28
36
 
29
37
  /**
30
- * @typedef {(ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
38
+ * @typedef {(buf: ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
31
39
  */
32
40
 
33
41
  /**
34
42
  * @template T
35
- * @param {Function[]} fns transforms
43
+ * @param {((prev: ArrayBuffer) => ArrayBuffer)[]} fns transforms
36
44
  * @returns {Function} composed transform
37
45
  */
38
- const compose = (...fns) => {
39
- return fns.reduce(
40
- (prevFn, nextFn) => {
41
- return value => nextFn(prevFn(value));
42
- },
46
+ const compose = (...fns) =>
47
+ fns.reduce(
48
+ (prevFn, nextFn) => value => nextFn(prevFn(value)),
43
49
  value => value
44
50
  );
45
- };
46
51
 
47
52
  /**
48
53
  * Removes the start instruction
49
- *
50
- * @param {Object} state unused state
54
+ * @param {object} state state
55
+ * @param {object} state.ast Module's ast
51
56
  * @returns {ArrayBufferTransform} transform
52
57
  */
53
- const removeStartFunc = state => bin => {
54
- return editWithAST(state.ast, bin, {
58
+ const removeStartFunc = state => bin =>
59
+ editWithAST(state.ast, bin, {
55
60
  Start(path) {
56
61
  path.remove();
57
62
  }
58
63
  });
59
- };
60
64
 
61
65
  /**
62
66
  * Get imported globals
63
- *
64
- * @param {Object} ast Module's AST
65
- * @returns {Array<t.ModuleImport>} - nodes
67
+ * @param {object} ast Module's AST
68
+ * @returns {t.ModuleImport[]} - nodes
66
69
  */
67
70
  const getImportedGlobals = ast => {
71
+ /** @type {t.ModuleImport[]} */
68
72
  const importedGlobals = [];
69
73
 
70
74
  t.traverse(ast, {
@@ -80,9 +84,8 @@ const getImportedGlobals = ast => {
80
84
 
81
85
  /**
82
86
  * Get the count for imported func
83
- *
84
- * @param {Object} ast Module's AST
85
- * @returns {Number} - count
87
+ * @param {object} ast Module's AST
88
+ * @returns {number} - count
86
89
  */
87
90
  const getCountImportedFunc = ast => {
88
91
  let count = 0;
@@ -100,8 +103,7 @@ const getCountImportedFunc = ast => {
100
103
 
101
104
  /**
102
105
  * Get next type index
103
- *
104
- * @param {Object} ast Module's AST
106
+ * @param {object} ast Module's AST
105
107
  * @returns {t.Index} - index
106
108
  */
107
109
  const getNextTypeIndex = ast => {
@@ -116,13 +118,11 @@ const getNextTypeIndex = ast => {
116
118
 
117
119
  /**
118
120
  * Get next func index
119
- *
120
- * The Func section metadata provide informations for implemented funcs
121
+ * The Func section metadata provide information for implemented funcs
121
122
  * in order to have the correct index we shift the index by number of external
122
123
  * functions.
123
- *
124
- * @param {Object} ast Module's AST
125
- * @param {Number} countImportedFunc number of imported funcs
124
+ * @param {object} ast Module's AST
125
+ * @param {number} countImportedFunc number of imported funcs
126
126
  * @returns {t.Index} - index
127
127
  */
128
128
  const getNextFuncIndex = (ast, countImportedFunc) => {
@@ -153,9 +153,8 @@ const createDefaultInitForGlobal = globalType => {
153
153
  return t.objectInstruction("const", globalType.valtype, [
154
154
  t.floatLiteral(66, false, false, "66")
155
155
  ]);
156
- } else {
157
- throw new Error("unknown type: " + globalType.valtype);
158
156
  }
157
+ throw new Error(`unknown type: ${globalType.valtype}`);
159
158
  };
160
159
 
161
160
  /**
@@ -167,18 +166,20 @@ const createDefaultInitForGlobal = globalType => {
167
166
  * indices will be preserved.
168
167
  *
169
168
  * Note that globals will become mutable.
170
- *
171
- * @param {Object} state unused state
169
+ * @param {object} state transformation state
170
+ * @param {object} state.ast Module's ast
171
+ * @param {t.Instruction[]} state.additionalInitCode list of addition instructions for the init function
172
172
  * @returns {ArrayBufferTransform} transform
173
173
  */
174
174
  const rewriteImportedGlobals = state => bin => {
175
175
  const additionalInitCode = state.additionalInitCode;
176
+ /** @type {Array<t.Global>} */
176
177
  const newGlobals = [];
177
178
 
178
179
  bin = editWithAST(state.ast, bin, {
179
180
  ModuleImport(path) {
180
181
  if (t.isGlobalType(path.node.descr)) {
181
- const globalType = path.node.descr;
182
+ const globalType = /** @type {TODO} */ (path.node.descr);
182
183
 
183
184
  globalType.mutability = "var";
184
185
 
@@ -195,6 +196,9 @@ const rewriteImportedGlobals = state => bin => {
195
196
 
196
197
  // in order to preserve non-imported global's order we need to re-inject
197
198
  // those as well
199
+ /**
200
+ * @param {NodePath<Global>} path path
201
+ */
198
202
  Global(path) {
199
203
  const { node } = path;
200
204
  const [init] = node.init;
@@ -232,8 +236,8 @@ const rewriteImportedGlobals = state => bin => {
232
236
 
233
237
  /**
234
238
  * Rewrite the export names
235
- * @param {Object} state state
236
- * @param {Object} state.ast Module's ast
239
+ * @param {object} state state
240
+ * @param {object} state.ast Module's ast
237
241
  * @param {Module} state.module Module
238
242
  * @param {ModuleGraph} state.moduleGraph module graph
239
243
  * @param {Set<string>} state.externalExports Module
@@ -242,8 +246,11 @@ const rewriteImportedGlobals = state => bin => {
242
246
  */
243
247
  const rewriteExportNames =
244
248
  ({ ast, moduleGraph, module, externalExports, runtime }) =>
245
- bin => {
246
- return editWithAST(ast, bin, {
249
+ bin =>
250
+ editWithAST(ast, bin, {
251
+ /**
252
+ * @param {NodePath<ModuleExport>} path path
253
+ */
247
254
  ModuleExport(path) {
248
255
  const isExternal = externalExports.has(path.node.name);
249
256
  if (isExternal) {
@@ -257,25 +264,27 @@ const rewriteExportNames =
257
264
  path.remove();
258
265
  return;
259
266
  }
260
- path.node.name = usedName;
267
+ path.node.name = /** @type {string} */ (usedName);
261
268
  }
262
269
  });
263
- };
264
270
 
265
271
  /**
266
272
  * Mangle import names and modules
267
- * @param {Object} state state
268
- * @param {Object} state.ast Module's ast
273
+ * @param {object} state state
274
+ * @param {object} state.ast Module's ast
269
275
  * @param {Map<string, UsedWasmDependency>} state.usedDependencyMap mappings to mangle names
270
276
  * @returns {ArrayBufferTransform} transform
271
277
  */
272
278
  const rewriteImports =
273
279
  ({ ast, usedDependencyMap }) =>
274
- bin => {
275
- return editWithAST(ast, bin, {
280
+ bin =>
281
+ editWithAST(ast, bin, {
282
+ /**
283
+ * @param {NodePath<ModuleImport>} path path
284
+ */
276
285
  ModuleImport(path) {
277
286
  const result = usedDependencyMap.get(
278
- path.node.module + ":" + path.node.name
287
+ `${path.node.module}:${path.node.name}`
279
288
  );
280
289
 
281
290
  if (result !== undefined) {
@@ -284,15 +293,13 @@ const rewriteImports =
284
293
  }
285
294
  }
286
295
  });
287
- };
288
296
 
289
297
  /**
290
298
  * Add an init function.
291
299
  *
292
300
  * The init function fills the globals given input arguments.
293
- *
294
- * @param {Object} state transformation state
295
- * @param {Object} state.ast Module's ast
301
+ * @param {object} state transformation state
302
+ * @param {object} state.ast Module's ast
296
303
  * @param {t.Identifier} state.initFuncId identifier of the init function
297
304
  * @param {t.Index} state.startAtFuncOffset index of the start function
298
305
  * @param {t.ModuleImport[]} state.importedGlobals list of imported globals
@@ -318,11 +325,15 @@ const addInitFunction =
318
325
  `${importedGlobal.module}.${importedGlobal.name}`
319
326
  );
320
327
 
321
- return t.funcParam(importedGlobal.descr.valtype, id);
328
+ return t.funcParam(
329
+ /** @type {string} */ (importedGlobal.descr.valtype),
330
+ id
331
+ );
322
332
  });
323
333
 
334
+ /** @type {Instruction[]} */
324
335
  const funcBody = [];
325
- importedGlobals.forEach((importedGlobal, index) => {
336
+ for (const [index, _importedGlobal] of importedGlobals.entries()) {
326
337
  const args = [t.indexLiteral(index)];
327
338
  const body = [
328
339
  t.instruction("get_local", args),
@@ -330,7 +341,7 @@ const addInitFunction =
330
341
  ];
331
342
 
332
343
  funcBody.push(...body);
333
- });
344
+ }
334
345
 
335
346
  if (typeof startAtFuncOffset === "number") {
336
347
  funcBody.push(
@@ -344,6 +355,7 @@ const addInitFunction =
344
355
 
345
356
  funcBody.push(t.instruction("end"));
346
357
 
358
+ /** @type {string[]} */
347
359
  const funcResults = [];
348
360
 
349
361
  // Code section
@@ -369,7 +381,7 @@ const addInitFunction =
369
381
  * Extract mangle mappings from module
370
382
  * @param {ModuleGraph} moduleGraph module graph
371
383
  * @param {Module} module current module
372
- * @param {boolean} mangle mangle imports
384
+ * @param {boolean | undefined} mangle mangle imports
373
385
  * @returns {Map<string, UsedWasmDependency>} mappings to mangled names
374
386
  */
375
387
  const getUsedDependencyMap = (moduleGraph, module, mangle) => {
@@ -383,14 +395,22 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
383
395
  const dep = usedDep.dependency;
384
396
  const request = dep.request;
385
397
  const exportName = dep.name;
386
- map.set(request + ":" + exportName, usedDep);
398
+ map.set(`${request}:${exportName}`, usedDep);
387
399
  }
388
400
  return map;
389
401
  };
390
402
 
391
403
  const TYPES = new Set(["webassembly"]);
392
404
 
405
+ /**
406
+ * @typedef {object} WebAssemblyGeneratorOptions
407
+ * @property {boolean} [mangleImports] mangle imports
408
+ */
409
+
393
410
  class WebAssemblyGenerator extends Generator {
411
+ /**
412
+ * @param {WebAssemblyGeneratorOptions} options options
413
+ */
394
414
  constructor(options) {
395
415
  super();
396
416
  this.options = options;
@@ -423,7 +443,7 @@ class WebAssemblyGenerator extends Generator {
423
443
  * @returns {Source} generated code
424
444
  */
425
445
  generate(module, { moduleGraph, runtime }) {
426
- const bin = module.originalSource().source();
446
+ const bin = /** @type {Source} */ (module.originalSource()).source();
427
447
 
428
448
  const initFuncId = t.identifier("");
429
449
 
@@ -19,6 +19,7 @@ const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDe
19
19
  /** @typedef {import("../Dependency")} Dependency */
20
20
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
21
21
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
22
+ /** @typedef {import("../Module")} Module */
22
23
  /** @typedef {import("../NormalModule")} NormalModule */
23
24
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
24
25
 
@@ -55,7 +56,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
55
56
  runtimeRequirements,
56
57
  runtime
57
58
  } = generateContext;
58
- /** @type {InitFragment[]} */
59
+ /** @type {InitFragment<InitFragment<string>>[]} */
59
60
  const initFragments = [];
60
61
 
61
62
  const exportsInfo = moduleGraph.getExportsInfo(module);
@@ -127,7 +128,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
127
128
  const defineStatement = Template.asString([
128
129
  `${exportProp} = ${runtimeTemplate.exportFromImport({
129
130
  moduleGraph,
130
- module: moduleGraph.getModule(dep),
131
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
131
132
  request: dep.request,
132
133
  importVar: importData.importVar,
133
134
  originModule: module,
@@ -200,8 +201,8 @@ class WebAssemblyJavascriptGenerator extends Generator {
200
201
  copyAllExports
201
202
  ? `${module.moduleArgument}.exports = wasmExports;`
202
203
  : "for(var name in wasmExports) " +
203
- `if(name) ` +
204
- `${module.exportsArgument}[name] = wasmExports[name];`,
204
+ "if(name) " +
205
+ `${module.exportsArgument}[name] = wasmExports[name];`,
205
206
  "// exec imports from WebAssembly module (for esm order)",
206
207
  importsCode,
207
208
  "",
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const Generator = require("../Generator");
9
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
9
10
  const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
10
11
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
11
12
  const { compareModulesByIdentifier } = require("../util/comparators");
@@ -13,6 +14,7 @@ const memoize = require("../util/memoize");
13
14
  const WebAssemblyInInitialChunkError = require("./WebAssemblyInInitialChunkError");
14
15
 
15
16
  /** @typedef {import("webpack-sources").Source} Source */
17
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
16
18
  /** @typedef {import("../Compiler")} Compiler */
17
19
  /** @typedef {import("../Module")} Module */
18
20
  /** @typedef {import("../ModuleTemplate")} ModuleTemplate */
@@ -26,7 +28,17 @@ const getWebAssemblyJavascriptGenerator = memoize(() =>
26
28
  );
27
29
  const getWebAssemblyParser = memoize(() => require("./WebAssemblyParser"));
28
30
 
31
+ const PLUGIN_NAME = "WebAssemblyModulesPlugin";
32
+
33
+ /**
34
+ * @typedef {object} WebAssemblyModulesPluginOptions
35
+ * @property {boolean} [mangleImports] mangle imports
36
+ */
37
+
29
38
  class WebAssemblyModulesPlugin {
39
+ /**
40
+ * @param {WebAssemblyModulesPluginOptions} options options
41
+ */
30
42
  constructor(options) {
31
43
  this.options = options;
32
44
  }
@@ -38,7 +50,7 @@ class WebAssemblyModulesPlugin {
38
50
  */
39
51
  apply(compiler) {
40
52
  compiler.hooks.compilation.tap(
41
- "WebAssemblyModulesPlugin",
53
+ PLUGIN_NAME,
42
54
  (compilation, { normalModuleFactory }) => {
43
55
  compilation.dependencyFactories.set(
44
56
  WebAssemblyImportDependency,
@@ -51,16 +63,16 @@ class WebAssemblyModulesPlugin {
51
63
  );
52
64
 
53
65
  normalModuleFactory.hooks.createParser
54
- .for("webassembly/sync")
55
- .tap("WebAssemblyModulesPlugin", () => {
66
+ .for(WEBASSEMBLY_MODULE_TYPE_SYNC)
67
+ .tap(PLUGIN_NAME, () => {
56
68
  const WebAssemblyParser = getWebAssemblyParser();
57
69
 
58
70
  return new WebAssemblyParser();
59
71
  });
60
72
 
61
73
  normalModuleFactory.hooks.createGenerator
62
- .for("webassembly/sync")
63
- .tap("WebAssemblyModulesPlugin", () => {
74
+ .for(WEBASSEMBLY_MODULE_TYPE_SYNC)
75
+ .tap(PLUGIN_NAME, () => {
64
76
  const WebAssemblyJavascriptGenerator =
65
77
  getWebAssemblyJavascriptGenerator();
66
78
  const WebAssemblyGenerator = getWebAssemblyGenerator();
@@ -71,53 +83,51 @@ class WebAssemblyModulesPlugin {
71
83
  });
72
84
  });
73
85
 
74
- compilation.hooks.renderManifest.tap(
75
- "WebAssemblyModulesPlugin",
76
- (result, options) => {
77
- const { chunkGraph } = compilation;
78
- const { chunk, outputOptions, codeGenerationResults } = options;
79
-
80
- for (const module of chunkGraph.getOrderedChunkModulesIterable(
81
- chunk,
82
- compareModulesByIdentifier
83
- )) {
84
- if (module.type === "webassembly/sync") {
85
- const filenameTemplate =
86
- outputOptions.webassemblyModuleFilename;
87
-
88
- result.push({
89
- render: () =>
90
- codeGenerationResults.getSource(
91
- module,
92
- chunk.runtime,
93
- "webassembly"
94
- ),
95
- filenameTemplate,
96
- pathOptions: {
86
+ compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
87
+ const { chunkGraph } = compilation;
88
+ const { chunk, outputOptions, codeGenerationResults } = options;
89
+
90
+ for (const module of chunkGraph.getOrderedChunkModulesIterable(
91
+ chunk,
92
+ compareModulesByIdentifier
93
+ )) {
94
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
95
+ const filenameTemplate =
96
+ /** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
97
+ (outputOptions.webassemblyModuleFilename);
98
+
99
+ result.push({
100
+ render: () =>
101
+ codeGenerationResults.getSource(
97
102
  module,
98
- runtime: chunk.runtime,
99
- chunkGraph
100
- },
101
- auxiliary: true,
102
- identifier: `webassemblyModule${chunkGraph.getModuleId(
103
- module
104
- )}`,
105
- hash: chunkGraph.getModuleHash(module, chunk.runtime)
106
- });
107
- }
103
+ chunk.runtime,
104
+ "webassembly"
105
+ ),
106
+ filenameTemplate,
107
+ pathOptions: {
108
+ module,
109
+ runtime: chunk.runtime,
110
+ chunkGraph
111
+ },
112
+ auxiliary: true,
113
+ identifier: `webassemblyModule${chunkGraph.getModuleId(
114
+ module
115
+ )}`,
116
+ hash: chunkGraph.getModuleHash(module, chunk.runtime)
117
+ });
108
118
  }
109
-
110
- return result;
111
119
  }
112
- );
113
120
 
114
- compilation.hooks.afterChunks.tap("WebAssemblyModulesPlugin", () => {
121
+ return result;
122
+ });
123
+
124
+ compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
115
125
  const chunkGraph = compilation.chunkGraph;
116
126
  const initialWasmModules = new Set();
117
127
  for (const chunk of compilation.chunks) {
118
128
  if (chunk.canBeInitial()) {
119
129
  for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
120
- if (module.type === "webassembly/sync") {
130
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
121
131
  initialWasmModules.add(module);
122
132
  }
123
133
  }
@@ -14,10 +14,12 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
14
14
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
15
15
 
16
16
  /** @typedef {import("../Module")} Module */
17
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
18
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
17
19
  /** @typedef {import("../Parser").ParserState} ParserState */
18
20
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
19
21
 
20
- const JS_COMPAT_TYPES = new Set(["i32", "f32", "f64"]);
22
+ const JS_COMPAT_TYPES = new Set(["i32", "i64", "f32", "f64"]);
21
23
 
22
24
  /**
23
25
  * @param {t.Signature} signature the func signature
@@ -61,6 +63,9 @@ const decoderOpts = {
61
63
  };
62
64
 
63
65
  class WebAssemblyParser extends Parser {
66
+ /**
67
+ * @param {{}=} options parser options
68
+ */
64
69
  constructor(options) {
65
70
  super();
66
71
  this.hooks = Object.freeze({});
@@ -78,8 +83,10 @@ class WebAssemblyParser extends Parser {
78
83
  }
79
84
 
80
85
  // flag it as ESM
81
- state.module.buildInfo.strict = true;
82
- state.module.buildMeta.exportsType = "namespace";
86
+ /** @type {BuildInfo} */
87
+ (state.module.buildInfo).strict = true;
88
+ /** @type {BuildMeta} */
89
+ (state.module.buildMeta).exportsType = "namespace";
83
90
 
84
91
  // parse it
85
92
  const program = decode(source, decoderOpts);
@@ -88,10 +95,13 @@ class WebAssemblyParser extends Parser {
88
95
  const moduleContext = moduleContextFromModuleAST(module);
89
96
 
90
97
  // extract imports and exports
98
+ /** @type {string[]} */
91
99
  const exports = [];
92
- let jsIncompatibleExports = (state.module.buildMeta.jsIncompatibleExports =
93
- undefined);
100
+ const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
101
+ /** @type {Record<string, string> | undefined} */
102
+ let jsIncompatibleExports = (buildMeta.jsIncompatibleExports = undefined);
94
103
 
104
+ /** @type {TODO[]} */
95
105
  const importedGlobals = [];
96
106
  t.traverse(module, {
97
107
  ModuleExport({ node }) {
@@ -109,7 +119,8 @@ class WebAssemblyParser extends Parser {
109
119
  if (incompatibleType) {
110
120
  if (jsIncompatibleExports === undefined) {
111
121
  jsIncompatibleExports =
112
- state.module.buildMeta.jsIncompatibleExports = {};
122
+ /** @type {BuildMeta} */
123
+ (state.module.buildMeta).jsIncompatibleExports = {};
113
124
  }
114
125
  jsIncompatibleExports[node.name] = incompatibleType;
115
126
  }
@@ -118,7 +129,8 @@ class WebAssemblyParser extends Parser {
118
129
  exports.push(node.name);
119
130
 
120
131
  if (node.descr && node.descr.exportType === "Global") {
121
- const refNode = importedGlobals[node.descr.id.value];
132
+ const refNode =
133
+ importedGlobals[/** @type {TODO} */ (node.descr.id.value)];
122
134
  if (refNode) {
123
135
  const dep = new WebAssemblyExportImportedDependency(
124
136
  node.name,
@@ -157,12 +169,14 @@ class WebAssemblyParser extends Parser {
157
169
  } else if (t.isTable(node.descr) === true) {
158
170
  onlyDirectImport = "Table";
159
171
  } else if (t.isFuncImportDescr(node.descr) === true) {
160
- const incompatibleType = getJsIncompatibleType(node.descr.signature);
172
+ const incompatibleType = getJsIncompatibleType(
173
+ /** @type {t.Signature} */ (node.descr.signature)
174
+ );
161
175
  if (incompatibleType) {
162
176
  onlyDirectImport = `Non-JS-compatible Func Signature (${incompatibleType})`;
163
177
  }
164
178
  } else if (t.isGlobalType(node.descr) === true) {
165
- const type = node.descr.valtype;
179
+ const type = /** @type {string} */ (node.descr.valtype);
166
180
  if (!JS_COMPAT_TYPES.has(type)) {
167
181
  onlyDirectImport = `Non-JS-compatible Global Type (${type})`;
168
182
  }
@@ -11,7 +11,8 @@ const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDe
11
11
  /** @typedef {import("../Module")} Module */
12
12
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
13
13
 
14
- /** @typedef {Object} UsedWasmDependency
14
+ /**
15
+ * @typedef {object} UsedWasmDependency
15
16
  * @property {WebAssemblyImportDependency} dependency the dependency
16
17
  * @property {string} name the export name
17
18
  * @property {string} module the module name
@@ -22,7 +23,7 @@ const MANGLED_MODULE = "a";
22
23
  /**
23
24
  * @param {ModuleGraph} moduleGraph the module graph
24
25
  * @param {Module} module the module
25
- * @param {boolean} mangle mangle module and export names
26
+ * @param {boolean | undefined} mangle mangle module and export names
26
27
  * @returns {UsedWasmDependency[]} used dependencies and (mangled) name
27
28
  */
28
29
  const getUsedDependencies = (moduleGraph, module, mangle) => {
@@ -61,5 +62,5 @@ const getUsedDependencies = (moduleGraph, module, mangle) => {
61
62
  return array;
62
63
  };
63
64
 
64
- exports.getUsedDependencies = getUsedDependencies;
65
- exports.MANGLED_MODULE = MANGLED_MODULE;
65
+ module.exports.getUsedDependencies = getUsedDependencies;
66
+ module.exports.MANGLED_MODULE = MANGLED_MODULE;
@@ -5,9 +5,11 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
10
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
11
13
  /** @typedef {import("../Compiler")} Compiler */
12
14
 
13
15
  class FetchCompileAsyncWasmPlugin {
@@ -21,6 +23,10 @@ class FetchCompileAsyncWasmPlugin {
21
23
  "FetchCompileAsyncWasmPlugin",
22
24
  compilation => {
23
25
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
26
+ /**
27
+ * @param {Chunk} chunk chunk
28
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
29
+ */
24
30
  const isEnabledForChunk = chunk => {
25
31
  const options = chunk.getEntryOptions();
26
32
  const wasmLoading =
@@ -29,6 +35,10 @@ class FetchCompileAsyncWasmPlugin {
29
35
  : globalWasmLoading;
30
36
  return wasmLoading === "fetch";
31
37
  };
38
+ /**
39
+ * @param {string} path path to the wasm file
40
+ * @returns {string} code to load the wasm file
41
+ */
32
42
  const generateLoadBinaryCode = path =>
33
43
  `fetch(${RuntimeGlobals.publicPath} + ${path})`;
34
44
 
@@ -40,7 +50,7 @@ class FetchCompileAsyncWasmPlugin {
40
50
  if (
41
51
  !chunkGraph.hasModuleInGraph(
42
52
  chunk,
43
- m => m.type === "webassembly/async"
53
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
44
54
  )
45
55
  ) {
46
56
  return;