@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -6,15 +6,14 @@
6
6
  "use strict";
7
7
 
8
8
  const { SyncWaterfallHook } = require("tapable");
9
- const Compilation = require("../Compilation");
10
9
  const Generator = require("../Generator");
11
- const { tryRunOrWebpackError } = require("../HookWebpackError");
12
10
  const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
13
- const NormalModule = require("../NormalModule");
14
11
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
12
+ const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
15
13
  const { compareModulesByFullName } = require("../util/comparators");
16
- const makeSerializable = require("../util/makeSerializable");
14
+ const createHooksRegistry = require("../util/createHooksRegistry");
17
15
  const memoize = require("../util/memoize");
16
+ const AsyncWasmModule = require("./AsyncWasmModule");
18
17
 
19
18
  /** @typedef {import("webpack-sources").Source} Source */
20
19
  /** @typedef {import("../Chunk")} Chunk */
@@ -23,13 +22,9 @@ const memoize = require("../util/memoize");
23
22
  /** @typedef {import("../Compiler")} Compiler */
24
23
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
25
24
  /** @typedef {import("../Module")} Module */
26
- /** @typedef {import("../dependencies/ImportPhase").ImportPhaseName} ImportPhaseName */
27
- /** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
28
25
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
29
26
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
30
- /** @typedef {import("../WebpackError")} WebpackError */
31
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
32
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
27
+ /** @typedef {import("../errors/WebpackError")} WebpackError */
33
28
 
34
29
  const getAsyncWebAssemblyGenerator = memoize(() =>
35
30
  require("./AsyncWebAssemblyGenerator")
@@ -41,94 +36,8 @@ const getAsyncWebAssemblyParser = memoize(() =>
41
36
  require("./AsyncWebAssemblyParser")
42
37
  );
43
38
 
44
- /** @typedef {NormalModule & { phase: ImportPhaseName | undefined }} AsyncWasmModuleClass */
45
-
46
- class AsyncWasmModule extends NormalModule {
47
- /**
48
- * @param {NormalModuleCreateData & { phase: ImportPhaseName | undefined }} options options object
49
- */
50
- constructor(options) {
51
- super(options);
52
- this.phase = options.phase;
53
- }
54
-
55
- /**
56
- * @returns {string} a unique identifier of the module
57
- */
58
- identifier() {
59
- let str = super.identifier();
60
-
61
- if (this.phase) {
62
- str = `${str}|${this.phase}`;
63
- }
64
-
65
- return str;
66
- }
67
-
68
- /**
69
- * Assuming this module is in the cache. Update the (cached) module with
70
- * the fresh module from the factory. Usually updates internal references
71
- * and properties.
72
- * @param {Module} module fresh module
73
- * @returns {void}
74
- */
75
- updateCacheModule(module) {
76
- super.updateCacheModule(module);
77
- const m = /** @type {AsyncWasmModule} */ (module);
78
- this.phase = m.phase;
79
- }
80
-
81
- /**
82
- * @param {ObjectSerializerContext} context context
83
- */
84
- serialize(context) {
85
- const { write } = context;
86
- write(this.phase);
87
- super.serialize(context);
88
- }
89
-
90
- /**
91
- * @param {ObjectDeserializerContext} context context
92
- * @returns {AsyncWasmModule} the deserialized object
93
- */
94
- static deserialize(context) {
95
- const obj = new AsyncWasmModule({
96
- // will be deserialized by Module
97
- layer: /** @type {EXPECTED_ANY} */ (null),
98
- type: "",
99
- // will be filled by updateCacheModule
100
- resource: "",
101
- context: "",
102
- request: /** @type {EXPECTED_ANY} */ (null),
103
- userRequest: /** @type {EXPECTED_ANY} */ (null),
104
- rawRequest: /** @type {EXPECTED_ANY} */ (null),
105
- loaders: /** @type {EXPECTED_ANY} */ (null),
106
- matchResource: /** @type {EXPECTED_ANY} */ (null),
107
- parser: /** @type {EXPECTED_ANY} */ (null),
108
- parserOptions: /** @type {EXPECTED_ANY} */ (null),
109
- generator: /** @type {EXPECTED_ANY} */ (null),
110
- generatorOptions: /** @type {EXPECTED_ANY} */ (null),
111
- resolveOptions: /** @type {EXPECTED_ANY} */ (null),
112
- extractSourceMap: /** @type {EXPECTED_ANY} */ (null),
113
- phase: /** @type {EXPECTED_ANY} */ (null)
114
- });
115
- obj.deserialize(context);
116
- return obj;
117
- }
118
-
119
- /**
120
- * @param {ObjectDeserializerContext} context context
121
- */
122
- deserialize(context) {
123
- const { read } = context;
124
- this.phase = read();
125
- super.deserialize(context);
126
- }
127
- }
128
-
129
- makeSerializable(AsyncWasmModule, "webpack/lib/wasm-async/AsyncWasmModule");
130
-
131
39
  /**
40
+ * Defines the web assembly render context type used by this module.
132
41
  * @typedef {object} WebAssemblyRenderContext
133
42
  * @property {Chunk} chunk the chunk
134
43
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -139,46 +48,22 @@ makeSerializable(AsyncWasmModule, "webpack/lib/wasm-async/AsyncWasmModule");
139
48
  */
140
49
 
141
50
  /**
51
+ * Defines the compilation hooks type used by this module.
142
52
  * @typedef {object} CompilationHooks
143
53
  * @property {SyncWaterfallHook<[Source, Module, WebAssemblyRenderContext]>} renderModuleContent
144
54
  */
145
55
 
146
56
  /**
57
+ * Defines the async web assembly modules plugin options type used by this module.
147
58
  * @typedef {object} AsyncWebAssemblyModulesPluginOptions
148
59
  * @property {boolean=} mangleImports mangle imports
149
60
  */
150
61
 
151
- /** @type {WeakMap<Compilation, CompilationHooks>} */
152
- const compilationHooksMap = new WeakMap();
153
-
154
62
  const PLUGIN_NAME = "AsyncWebAssemblyModulesPlugin";
155
63
 
156
64
  class AsyncWebAssemblyModulesPlugin {
157
65
  /**
158
- * @param {Compilation} compilation the compilation
159
- * @returns {CompilationHooks} the attached hooks
160
- */
161
- static getCompilationHooks(compilation) {
162
- if (!(compilation instanceof Compilation)) {
163
- throw new TypeError(
164
- "The 'compilation' argument must be an instance of Compilation"
165
- );
166
- }
167
- let hooks = compilationHooksMap.get(compilation);
168
- if (hooks === undefined) {
169
- hooks = {
170
- renderModuleContent: new SyncWaterfallHook([
171
- "source",
172
- "module",
173
- "renderContext"
174
- ])
175
- };
176
- compilationHooksMap.set(compilation, hooks);
177
- }
178
- return hooks;
179
- }
180
-
181
- /**
66
+ * Creates an instance of AsyncWebAssemblyModulesPlugin.
182
67
  * @param {AsyncWebAssemblyModulesPluginOptions} options options
183
68
  */
184
69
  constructor(options) {
@@ -187,7 +72,7 @@ class AsyncWebAssemblyModulesPlugin {
187
72
  }
188
73
 
189
74
  /**
190
- * Apply the plugin
75
+ * Applies the plugin by registering its hooks on the compiler.
191
76
  * @param {Compiler} compiler the compiler instance
192
77
  * @returns {void}
193
78
  */
@@ -208,8 +93,7 @@ class AsyncWebAssemblyModulesPlugin {
208
93
  PLUGIN_NAME,
209
94
  (createData, resolveData) =>
210
95
  new AsyncWasmModule({
211
- .../** @type {NormalModuleCreateData & { type: string }} */
212
- (createData),
96
+ ...createData,
213
97
  phase: resolveData.phase
214
98
  })
215
99
  );
@@ -286,6 +170,7 @@ class AsyncWebAssemblyModulesPlugin {
286
170
  }
287
171
 
288
172
  /**
173
+ * Renders the newly generated source from rendering.
289
174
  * @param {Module} module the rendered module
290
175
  * @param {WebAssemblyRenderContext} renderContext options object
291
176
  * @param {CompilationHooks} hooks hooks
@@ -311,4 +196,15 @@ class AsyncWebAssemblyModulesPlugin {
311
196
  }
312
197
  }
313
198
 
199
+ AsyncWebAssemblyModulesPlugin.getCompilationHooks = createHooksRegistry(
200
+ () =>
201
+ /** @type {CompilationHooks} */ ({
202
+ renderModuleContent: new SyncWaterfallHook([
203
+ "source",
204
+ "module",
205
+ "renderContext"
206
+ ])
207
+ })
208
+ );
209
+
314
210
  module.exports = AsyncWebAssemblyModulesPlugin;
@@ -7,12 +7,12 @@
7
7
 
8
8
  const t = require("@webassemblyjs/ast");
9
9
  const { decode } = require("@webassemblyjs/wasm-parser");
10
- const EnvironmentNotSupportAsyncWarning = require("../EnvironmentNotSupportAsyncWarning");
11
10
  const Parser = require("../Parser");
12
11
  const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
13
12
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
13
+ const EnvironmentNotSupportAsyncWarning = require("../errors/EnvironmentNotSupportAsyncWarning");
14
14
 
15
- /** @typedef {import("./AsyncWebAssemblyModulesPlugin").AsyncWasmModuleClass} AsyncWasmModule */
15
+ /** @typedef {import("./AsyncWasmModule")} AsyncWasmModule */
16
16
  /** @typedef {import("../Module").BuildInfo} BuildInfo */
17
17
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
18
18
  /** @typedef {import("../NormalModule")} NormalModule */
@@ -31,6 +31,7 @@ const decoderOpts = {
31
31
 
32
32
  class WebAssemblyParser extends Parser {
33
33
  /**
34
+ * Parses the provided source and updates the parser state.
34
35
  * @param {string | Buffer | PreparsedAst} source the source to parse
35
36
  * @param {ParserState} state the parser state
36
37
  * @returns {ParserState} the parser state
@@ -16,9 +16,14 @@ const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRun
16
16
 
17
17
  const PLUGIN_NAME = "UniversalCompileAsyncWasmPlugin";
18
18
 
19
+ /**
20
+ * Enables async WebAssembly loading that works in both browser-like and Node.js
21
+ * environments by selecting the appropriate binary-loading strategy at runtime.
22
+ */
19
23
  class UniversalCompileAsyncWasmPlugin {
20
24
  /**
21
- * Apply the plugin
25
+ * Registers compilation hooks that attach the universal async wasm runtime
26
+ * to chunks using `wasmLoading: "universal"`.
22
27
  * @param {Compiler} compiler the compiler instance
23
28
  * @returns {void}
24
29
  */
@@ -26,6 +31,8 @@ class UniversalCompileAsyncWasmPlugin {
26
31
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
27
32
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
28
33
  /**
34
+ * Determines whether the chunk should use the universal async wasm
35
+ * loading backend.
29
36
  * @param {Chunk} chunk chunk
30
37
  * @returns {boolean} true, if wasm loading is enabled for the chunk
31
38
  */
@@ -44,15 +51,19 @@ class UniversalCompileAsyncWasmPlugin {
44
51
  "}"
45
52
  ]);
46
53
  /**
54
+ * Generates setup code that decides whether the current environment can
55
+ * use `fetch` and captures the wasm module URL.
47
56
  * @param {string} path path
48
57
  * @returns {string} code
49
58
  */
50
59
  const generateBeforeLoadBinaryCode = (path) =>
51
60
  Template.asString([
52
- "var useFetch = typeof document !== 'undefined' || typeof self !== 'undefined';",
61
+ `var useFetch = ${compilation.runtimeTemplate.isWebLikePlatformExpression()};`,
53
62
  `var wasmUrl = ${path};`
54
63
  ]);
55
64
  /**
65
+ * Generates the runtime expression that fetches the binary in browsers
66
+ * or reads it from the filesystem in Node.js.
56
67
  * @type {(path: string) => string}
57
68
  */
58
69
  const generateLoadBinaryCode = () =>
@@ -0,0 +1,39 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const NormalModule = require("../NormalModule");
8
+ const makeSerializable = require("../util/makeSerializable");
9
+
10
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
11
+ /** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
12
+
13
+ /**
14
+ * Defines the build meta properties specific to sync wasm modules.
15
+ * @typedef {object} KnownSyncWasmModuleBuildMeta
16
+ * @property {Record<string, string>=} jsIncompatibleExports
17
+ */
18
+
19
+ /** @typedef {BuildMeta & KnownSyncWasmModuleBuildMeta} SyncWasmModuleBuildMeta */
20
+
21
+ /**
22
+ * Module class for `webassembly/sync` modules. Wasm-specific properties should live here instead of `NormalModule`.
23
+ */
24
+ class SyncWasmModule extends NormalModule {
25
+ /**
26
+ * @param {NormalModuleCreateData} options options object
27
+ */
28
+ constructor(options) {
29
+ super(options);
30
+
31
+ // Redeclared with the sync wasm specific shape
32
+ /** @type {SyncWasmModuleBuildMeta | undefined} */
33
+ this.buildMeta = undefined;
34
+ }
35
+ }
36
+
37
+ makeSerializable(SyncWasmModule, "webpack/lib/wasm-sync/SyncWasmModule");
38
+
39
+ module.exports = SyncWasmModule;
@@ -4,10 +4,11 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- const WebpackError = require("../WebpackError");
7
+ const WebpackError = require("../errors/WebpackError");
8
8
 
9
- module.exports = class UnsupportedWebAssemblyFeatureError extends WebpackError {
9
+ class UnsupportedWebAssemblyFeatureError extends WebpackError {
10
10
  /**
11
+ * Creates an instance of UnsupportedWebAssemblyFeatureError.
11
12
  * @param {string} message Error message
12
13
  */
13
14
  constructor(message) {
@@ -15,6 +16,9 @@ module.exports = class UnsupportedWebAssemblyFeatureError extends WebpackError {
15
16
 
16
17
  /** @type {string} */
17
18
  this.name = "UnsupportedWebAssemblyFeatureError";
19
+ /** @type {boolean} */
18
20
  this.hideStack = true;
19
21
  }
20
- };
22
+ }
23
+
24
+ module.exports = UnsupportedWebAssemblyFeatureError;
@@ -239,12 +239,16 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
239
239
  }) {
240
240
  super("wasm chunk loading", RuntimeModule.STAGE_ATTACH);
241
241
  this.generateLoadBinaryCode = generateLoadBinaryCode;
242
+ /** @type {boolean | undefined} */
242
243
  this.supportsStreaming = supportsStreaming;
244
+ /** @type {boolean | undefined} */
243
245
  this.mangleImports = mangleImports;
246
+ /** @type {ReadOnlyRuntimeRequirements} */
244
247
  this._runtimeRequirements = runtimeRequirements;
245
248
  }
246
249
 
247
250
  /**
251
+ * Generates runtime code for this runtime module.
248
252
  * @returns {string | null} runtime code
249
253
  */
250
254
  generate() {
@@ -253,7 +257,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
253
257
  RuntimeGlobals.hmrDownloadUpdateHandlers
254
258
  );
255
259
  const compilation = /** @type {Compilation} */ (this.compilation);
256
- const { moduleGraph, outputOptions } = compilation;
260
+ const { moduleGraph, outputOptions, runtimeTemplate } = compilation;
257
261
  const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
258
262
  const chunk = /** @type {Chunk} */ (this.chunk);
259
263
  const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
@@ -280,12 +284,16 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
280
284
  mangleImports
281
285
  ? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
282
286
  : content;
287
+ // Opt-in fallback to non-streaming when the server serves wasm with a wrong MIME type.
288
+ const streamingFallback = outputOptions.wasmStreamingFallback;
289
+ const streamingMimeFallbackWarning =
290
+ 'console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n", e);';
283
291
  const wasmModuleSrcPath = compilation.getPath(
284
292
  JSON.stringify(outputOptions.webassemblyModuleFilename),
285
293
  {
286
294
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
287
295
  hashWithLength: (length) =>
288
- `" + ${RuntimeGlobals.getFullHash}}().slice(0, ${length}) + "`,
296
+ `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
289
297
  module: {
290
298
  id: '" + wasmModuleId + "',
291
299
  hash: `" + ${JSON.stringify(
@@ -314,8 +322,8 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
314
322
  return Template.asString([
315
323
  "// object to store loaded and loading wasm modules",
316
324
  `var installedWasmModules = ${
317
- stateExpression ? `${stateExpression} = ${stateExpression} || ` : ""
318
- }{};`,
325
+ stateExpression ? runtimeTemplate.assignOr(stateExpression, "{}") : "{}"
326
+ };`,
319
327
  "",
320
328
  // This function is used to delay reading the installed wasm module promises
321
329
  // by a microtask. Sorting them doesn't help because there are edge cases where
@@ -356,24 +364,83 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
356
364
  `var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
357
365
  "var promise;",
358
366
  this.supportsStreaming
359
- ? Template.asString([
360
- "if(importObject && typeof importObject.then === 'function' && typeof WebAssembly.compileStreaming === 'function') {",
361
- Template.indent([
362
- "promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {",
367
+ ? streamingFallback
368
+ ? Template.asString([
369
+ "if(importObject && typeof importObject.then === 'function' && typeof WebAssembly.compileStreaming === 'function') {",
363
370
  Template.indent([
364
- `return WebAssembly.instantiate(items[0], ${createImportObject(
365
- "items[1]"
366
- )});`
371
+ "promise = req.then(function(res) {",
372
+ Template.indent([
373
+ "return Promise.all([WebAssembly.compileStreaming(res), importObject]).then(function(items) {",
374
+ Template.indent([
375
+ `return WebAssembly.instantiate(items[0], ${createImportObject(
376
+ "items[1]"
377
+ )});`
378
+ ]),
379
+ "}, function(e) {",
380
+ Template.indent([
381
+ 'if(res.headers.get("Content-Type") !== "application/wasm") {',
382
+ Template.indent([
383
+ streamingMimeFallbackWarning,
384
+ "return Promise.all([res.arrayBuffer().then(function(bytes) { return WebAssembly.compile(bytes); }), importObject]).then(function(items) {",
385
+ Template.indent([
386
+ `return WebAssembly.instantiate(items[0], ${createImportObject(
387
+ "items[1]"
388
+ )});`
389
+ ]),
390
+ "});"
391
+ ]),
392
+ "}",
393
+ "throw e;"
394
+ ]),
395
+ "});"
396
+ ]),
397
+ "});"
367
398
  ]),
368
- "});"
369
- ]),
370
- "} else if(typeof WebAssembly.instantiateStreaming === 'function') {",
371
- Template.indent([
372
- `promise = WebAssembly.instantiateStreaming(req, ${createImportObject(
373
- "importObject"
374
- )});`
399
+ "} else if(typeof WebAssembly.instantiateStreaming === 'function') {",
400
+ Template.indent([
401
+ "promise = req.then(function(res) {",
402
+ Template.indent([
403
+ `return WebAssembly.instantiateStreaming(res, ${createImportObject(
404
+ "importObject"
405
+ )}).then(undefined, function(e) {`,
406
+ Template.indent([
407
+ 'if(res.headers.get("Content-Type") !== "application/wasm") {',
408
+ Template.indent([
409
+ streamingMimeFallbackWarning,
410
+ "return res.arrayBuffer().then(function(bytes) {",
411
+ Template.indent([
412
+ `return WebAssembly.instantiate(bytes, ${createImportObject(
413
+ "importObject"
414
+ )});`
415
+ ]),
416
+ "});"
417
+ ]),
418
+ "}",
419
+ "throw e;"
420
+ ]),
421
+ "});"
422
+ ]),
423
+ "});"
424
+ ])
425
+ ])
426
+ : Template.asString([
427
+ "if(importObject && typeof importObject.then === 'function' && typeof WebAssembly.compileStreaming === 'function') {",
428
+ Template.indent([
429
+ "promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {",
430
+ Template.indent([
431
+ `return WebAssembly.instantiate(items[0], ${createImportObject(
432
+ "items[1]"
433
+ )});`
434
+ ]),
435
+ "});"
436
+ ]),
437
+ "} else if(typeof WebAssembly.instantiateStreaming === 'function') {",
438
+ Template.indent([
439
+ `promise = WebAssembly.instantiateStreaming(req, ${createImportObject(
440
+ "importObject"
441
+ )});`
442
+ ])
375
443
  ])
376
- ])
377
444
  : Template.asString([
378
445
  "if(importObject && typeof importObject.then === 'function') {",
379
446
  Template.indent([
@@ -5,19 +5,20 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const formatLocation = require("../formatLocation");
8
+ const formatLocation = require("../util/formatLocation");
9
9
  const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeatureError");
10
10
 
11
11
  /** @typedef {import("../Compiler")} Compiler */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../Module")} Module */
14
14
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
15
+ /** @typedef {import("./SyncWasmModule").SyncWasmModuleBuildMeta} SyncWasmModuleBuildMeta */
15
16
 
16
17
  const PLUGIN_NAME = "WasmFinalizeExportsPlugin";
17
18
 
18
19
  class WasmFinalizeExportsPlugin {
19
20
  /**
20
- * Apply the plugin
21
+ * Applies the plugin by registering its hooks on the compiler.
21
22
  * @param {Compiler} compiler the compiler instance
22
23
  * @returns {void}
23
24
  */
@@ -28,7 +29,7 @@ class WasmFinalizeExportsPlugin {
28
29
  // 1. if a WebAssembly module
29
30
  if (module.type.startsWith("webassembly") === true) {
30
31
  const jsIncompatibleExports =
31
- /** @type {BuildMeta} */
32
+ /** @type {SyncWasmModuleBuildMeta} */
32
33
  (module.buildMeta).jsIncompatibleExports;
33
34
 
34
35
  if (jsIncompatibleExports === undefined) {
@@ -17,11 +17,13 @@ const WebAssemblyUtils = require("./WebAssemblyUtils");
17
17
 
18
18
  /** @typedef {import("webpack-sources").Source} Source */
19
19
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
20
+ /** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
20
21
  /** @typedef {import("../Module")} Module */
21
22
  /** @typedef {import("../Module").SourceType} SourceType */
22
23
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
23
24
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
24
25
  /** @typedef {import("../NormalModule")} NormalModule */
26
+ /** @typedef {import("../util/Hash")} Hash */
25
27
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
26
28
  /** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
27
29
  /** @typedef {import("@webassemblyjs/ast").Instruction} Instruction */
@@ -31,15 +33,18 @@ const WebAssemblyUtils = require("./WebAssemblyUtils");
31
33
  /** @typedef {import("@webassemblyjs/ast").AST} AST */
32
34
  /** @typedef {import("@webassemblyjs/ast").GlobalType} GlobalType */
33
35
  /**
36
+ * Defines the node path type used by this module.
34
37
  * @template T
35
38
  * @typedef {import("@webassemblyjs/ast").NodePath<T>} NodePath
36
39
  */
37
40
 
38
41
  /**
42
+ * Defines the array buffer transform type used by this module.
39
43
  * @typedef {(buf: ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
40
44
  */
41
45
 
42
46
  /**
47
+ * Returns composed transform.
43
48
  * @template T
44
49
  * @param {((prev: ArrayBuffer) => ArrayBuffer)[]} fns transforms
45
50
  * @returns {(buf: ArrayBuffer) => ArrayBuffer} composed transform
@@ -51,7 +56,7 @@ const compose = (...fns) =>
51
56
  );
52
57
 
53
58
  /**
54
- * Removes the start instruction
59
+ * Removes start func.
55
60
  * @param {object} state state
56
61
  * @param {AST} state.ast Module's ast
57
62
  * @returns {ArrayBufferTransform} transform
@@ -200,6 +205,7 @@ const rewriteImportedGlobals = (state) => (bin) => {
200
205
  // in order to preserve non-imported global's order we need to re-inject
201
206
  // those as well
202
207
  /**
208
+ * Processes the provided path.
203
209
  * @param {NodePath<Global>} path path
204
210
  */
205
211
  Global(path) {
@@ -252,6 +258,7 @@ const rewriteExportNames =
252
258
  (bin) =>
253
259
  editWithAST(ast, bin, {
254
260
  /**
261
+ * Processes the provided path.
255
262
  * @param {NodePath<ModuleExport>} path path
256
263
  */
257
264
  ModuleExport(path) {
@@ -285,6 +292,7 @@ const rewriteImports =
285
292
  (bin) =>
286
293
  editWithAST(ast, bin, {
287
294
  /**
295
+ * Processes the provided path.
288
296
  * @param {NodePath<ModuleImport>} path path
289
297
  */
290
298
  ModuleImport(path) {
@@ -406,20 +414,24 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
406
414
  };
407
415
 
408
416
  /**
417
+ * Represents the web assembly generator runtime component.
409
418
  * @typedef {object} WebAssemblyGeneratorOptions
410
419
  * @property {boolean=} mangleImports mangle imports
411
420
  */
412
421
 
413
422
  class WebAssemblyGenerator extends Generator {
414
423
  /**
424
+ * Creates an instance of WebAssemblyGenerator.
415
425
  * @param {WebAssemblyGeneratorOptions} options options
416
426
  */
417
427
  constructor(options) {
418
428
  super();
429
+ /** @type {WebAssemblyGeneratorOptions} */
419
430
  this.options = options;
420
431
  }
421
432
 
422
433
  /**
434
+ * Returns the source types available for this module.
423
435
  * @param {NormalModule} module fresh module
424
436
  * @returns {SourceTypes} available types (do not mutate)
425
437
  */
@@ -428,6 +440,7 @@ class WebAssemblyGenerator extends Generator {
428
440
  }
429
441
 
430
442
  /**
443
+ * Returns the estimated size for the requested source type.
431
444
  * @param {NormalModule} module the module
432
445
  * @param {SourceType=} type source type
433
446
  * @returns {number} estimate size of the module
@@ -441,6 +454,7 @@ class WebAssemblyGenerator extends Generator {
441
454
  }
442
455
 
443
456
  /**
457
+ * Generates generated code for this runtime module.
444
458
  * @param {NormalModule} module module for which the code should be generated
445
459
  * @param {GenerateContext} generateContext context for generate
446
460
  * @returns {Source | null} generated code
@@ -522,6 +536,7 @@ class WebAssemblyGenerator extends Generator {
522
536
  }
523
537
 
524
538
  /**
539
+ * Generates fallback output for the provided error condition.
525
540
  * @param {Error} error the error
526
541
  * @param {NormalModule} module module for which the code should be generated
527
542
  * @param {GenerateContext} generateContext context for generate
@@ -530,6 +545,17 @@ class WebAssemblyGenerator extends Generator {
530
545
  generateError(error, module, generateContext) {
531
546
  return new RawSource(error.message);
532
547
  }
548
+
549
+ /**
550
+ * Updates the hash with the data contributed by this instance.
551
+ * @param {Hash} hash hash that will be modified
552
+ * @param {UpdateHashContext} updateHashContext context for updating hash
553
+ */
554
+ updateHash(hash, updateHashContext) {
555
+ if (this.options.mangleImports) {
556
+ hash.update("mangle-imports");
557
+ }
558
+ }
533
559
  }
534
560
 
535
561
  module.exports = WebAssemblyGenerator;