webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -8,33 +8,23 @@
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Generator = require("../Generator");
10
10
  const InitFragment = require("../InitFragment");
11
- const { WEBASSEMBLY_TYPES } = require("../ModuleSourceTypesConstants");
11
+ const { WEBASSEMBLY_TYPES } = require("../ModuleSourceTypeConstants");
12
12
  const RuntimeGlobals = require("../RuntimeGlobals");
13
13
  const Template = require("../Template");
14
14
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
15
15
 
16
16
  /** @typedef {import("webpack-sources").Source} Source */
17
- /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
18
- /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
19
17
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
20
18
  /** @typedef {import("../Module")} Module */
19
+ /** @typedef {import("../Module").SourceType} SourceType */
21
20
  /** @typedef {import("../Module").SourceTypes} SourceTypes */
22
21
  /** @typedef {import("../NormalModule")} NormalModule */
23
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
24
22
 
25
23
  /**
26
- * @typedef {{ request: string, importVar: string }} ImportObjRequestItem
24
+ * @typedef {{ request: string, importVar: string, dependency: WebAssemblyImportDependency }} ImportObjRequestItem
27
25
  */
28
26
 
29
27
  class AsyncWebAssemblyJavascriptGenerator extends Generator {
30
- /**
31
- * @param {OutputOptions["webassemblyModuleFilename"]} filenameTemplate template for the WebAssembly module filename
32
- */
33
- constructor(filenameTemplate) {
34
- super();
35
- this.filenameTemplate = filenameTemplate;
36
- }
37
-
38
28
  /**
39
29
  * @param {NormalModule} module fresh module
40
30
  * @returns {SourceTypes} available types (do not mutate)
@@ -45,7 +35,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
45
35
 
46
36
  /**
47
37
  * @param {NormalModule} module the module
48
- * @param {string=} type source type
38
+ * @param {SourceType=} type source type
49
39
  * @returns {number} estimate size of the module
50
40
  */
51
41
  getSize(module, type) {
@@ -69,7 +59,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
69
59
  runtimeRequirements.add(RuntimeGlobals.moduleId);
70
60
  runtimeRequirements.add(RuntimeGlobals.exports);
71
61
  runtimeRequirements.add(RuntimeGlobals.instantiateWasm);
72
- /** @type {InitFragment<InitFragment<string>>[]} */
62
+ /** @type {InitFragment<GenerateContext>[]} */
73
63
  const initFragments = [];
74
64
  /** @type {Map<Module, ImportObjRequestItem>} */
75
65
  const depModules = new Map();
@@ -81,7 +71,8 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
81
71
  if (!depModules.has(module)) {
82
72
  depModules.set(module, {
83
73
  request: dep.request,
84
- importVar: `WEBPACK_IMPORTED_MODULE_${depModules.size}`
74
+ importVar: `WEBPACK_IMPORTED_MODULE_${depModules.size}`,
75
+ dependency: dep
85
76
  });
86
77
  }
87
78
  let list = wasmDepsByRequest.get(dep.request);
@@ -93,23 +84,25 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
93
84
  }
94
85
  }
95
86
 
96
- /** @type {Array<string>} */
87
+ /** @type {string[]} */
97
88
  const promises = [];
98
89
 
99
90
  const importStatements = Array.from(
100
91
  depModules,
101
- ([importedModule, { request, importVar }]) => {
92
+ ([importedModule, { request, importVar, dependency }]) => {
102
93
  if (moduleGraph.isAsync(importedModule)) {
103
94
  promises.push(importVar);
104
95
  }
105
96
  return runtimeTemplate.importStatement({
106
97
  update: false,
107
98
  module: importedModule,
99
+ moduleGraph,
108
100
  chunkGraph,
109
101
  request,
110
102
  originModule: module,
111
103
  importVar,
112
- runtimeRequirements
104
+ runtimeRequirements,
105
+ dependency
113
106
  });
114
107
  }
115
108
  );
@@ -119,7 +112,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
119
112
  const importObjRequestItems = Array.from(
120
113
  wasmDepsByRequest,
121
114
  ([request, deps]) => {
122
- const exportItems = deps.map(dep => {
115
+ const exportItems = deps.map((dep) => {
123
116
  const importedModule =
124
117
  /** @type {Module} */
125
118
  (moduleGraph.getModule(dep));
@@ -131,6 +124,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
131
124
  )}: ${runtimeTemplate.exportFromImport({
132
125
  moduleGraph,
133
126
  module: importedModule,
127
+ chunkGraph,
134
128
  request,
135
129
  exportName: dep.name,
136
130
  originModule: module,
@@ -141,7 +135,8 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
141
135
  importVar,
142
136
  initFragments,
143
137
  runtime,
144
- runtimeRequirements
138
+ runtimeRequirements,
139
+ dependency: dep
145
140
  })}`;
146
141
  });
147
142
  return Template.asString([
@@ -167,8 +162,9 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
167
162
  chunkGraph.getRenderedModuleHash(module, runtime)
168
163
  )}${importsObj ? `, ${importsObj})` : ")"}`;
169
164
 
170
- if (promises.length > 0)
165
+ if (promises.length > 0) {
171
166
  runtimeRequirements.add(RuntimeGlobals.asyncModule);
167
+ }
172
168
 
173
169
  const source = new RawSource(
174
170
  promises.length > 0
@@ -201,6 +197,16 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
201
197
 
202
198
  return InitFragment.addToSource(source, initFragments, generateContext);
203
199
  }
200
+
201
+ /**
202
+ * @param {Error} error the error
203
+ * @param {NormalModule} module module for which the code should be generated
204
+ * @param {GenerateContext} generateContext context for generate
205
+ * @returns {Source | null} generated code
206
+ */
207
+ generateError(error, module, generateContext) {
208
+ return new RawSource(`throw new Error(${JSON.stringify(error.message)});`);
209
+ }
204
210
  }
205
211
 
206
212
  module.exports = AsyncWebAssemblyJavascriptGenerator;
@@ -11,11 +11,10 @@ const Generator = require("../Generator");
11
11
  const { tryRunOrWebpackError } = require("../HookWebpackError");
12
12
  const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
13
13
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
14
- const { compareModulesByIdentifier } = require("../util/comparators");
14
+ const { compareModulesByIdOrIdentifier } = require("../util/comparators");
15
15
  const memoize = require("../util/memoize");
16
16
 
17
17
  /** @typedef {import("webpack-sources").Source} Source */
18
- /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
19
18
  /** @typedef {import("../Chunk")} Chunk */
20
19
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
21
20
  /** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
@@ -24,8 +23,6 @@ const memoize = require("../util/memoize");
24
23
  /** @typedef {import("../Module")} Module */
25
24
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
26
25
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
27
- /** @typedef {import("../Template").RenderManifestEntry} RenderManifestEntry */
28
- /** @typedef {import("../Template").RenderManifestOptions} RenderManifestOptions */
29
26
  /** @typedef {import("../WebpackError")} WebpackError */
30
27
 
31
28
  const getAsyncWebAssemblyGenerator = memoize(() =>
@@ -55,7 +52,7 @@ const getAsyncWebAssemblyParser = memoize(() =>
55
52
 
56
53
  /**
57
54
  * @typedef {object} AsyncWebAssemblyModulesPluginOptions
58
- * @property {boolean} [mangleImports] mangle imports
55
+ * @property {boolean=} mangleImports mangle imports
59
56
  */
60
57
 
61
58
  /** @type {WeakMap<Compilation, CompilationHooks>} */
@@ -126,65 +123,58 @@ class AsyncWebAssemblyModulesPlugin {
126
123
  const AsyncWebAssemblyGenerator = getAsyncWebAssemblyGenerator();
127
124
 
128
125
  return Generator.byType({
129
- javascript: new AsyncWebAssemblyJavascriptGenerator(
130
- compilation.outputOptions.webassemblyModuleFilename
131
- ),
126
+ javascript: new AsyncWebAssemblyJavascriptGenerator(),
132
127
  webassembly: new AsyncWebAssemblyGenerator(this.options)
133
128
  });
134
129
  });
135
130
 
136
- compilation.hooks.renderManifest.tap(
137
- "WebAssemblyModulesPlugin",
138
- (result, options) => {
139
- const { moduleGraph, chunkGraph, runtimeTemplate } = compilation;
140
- const {
141
- chunk,
142
- outputOptions,
143
- dependencyTemplates,
144
- codeGenerationResults
145
- } = options;
146
-
147
- for (const module of chunkGraph.getOrderedChunkModulesIterable(
148
- chunk,
149
- compareModulesByIdentifier
150
- )) {
151
- if (module.type === WEBASSEMBLY_MODULE_TYPE_ASYNC) {
152
- const filenameTemplate =
153
- /** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
154
- (outputOptions.webassemblyModuleFilename);
155
-
156
- result.push({
157
- render: () =>
158
- this.renderModule(
159
- module,
160
- {
161
- chunk,
162
- dependencyTemplates,
163
- runtimeTemplate,
164
- moduleGraph,
165
- chunkGraph,
166
- codeGenerationResults
167
- },
168
- hooks
169
- ),
170
- filenameTemplate,
171
- pathOptions: {
131
+ compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
132
+ const { moduleGraph, chunkGraph, runtimeTemplate } = compilation;
133
+ const {
134
+ chunk,
135
+ outputOptions,
136
+ dependencyTemplates,
137
+ codeGenerationResults
138
+ } = options;
139
+
140
+ for (const module of chunkGraph.getOrderedChunkModulesIterable(
141
+ chunk,
142
+ compareModulesByIdOrIdentifier(chunkGraph)
143
+ )) {
144
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_ASYNC) {
145
+ const filenameTemplate = outputOptions.webassemblyModuleFilename;
146
+
147
+ result.push({
148
+ render: () =>
149
+ this.renderModule(
172
150
  module,
173
- runtime: chunk.runtime,
174
- chunkGraph
175
- },
176
- auxiliary: true,
177
- identifier: `webassemblyAsyncModule${chunkGraph.getModuleId(
178
- module
179
- )}`,
180
- hash: chunkGraph.getModuleHash(module, chunk.runtime)
181
- });
182
- }
151
+ {
152
+ chunk,
153
+ dependencyTemplates,
154
+ runtimeTemplate,
155
+ moduleGraph,
156
+ chunkGraph,
157
+ codeGenerationResults
158
+ },
159
+ hooks
160
+ ),
161
+ filenameTemplate,
162
+ pathOptions: {
163
+ module,
164
+ runtime: chunk.runtime,
165
+ chunkGraph
166
+ },
167
+ auxiliary: true,
168
+ identifier: `webassemblyAsyncModule${chunkGraph.getModuleId(
169
+ module
170
+ )}`,
171
+ hash: chunkGraph.getModuleHash(module, chunk.runtime)
172
+ });
183
173
  }
184
-
185
- return result;
186
174
  }
187
- );
175
+
176
+ return result;
177
+ });
188
178
  }
189
179
  );
190
180
  }
@@ -26,15 +26,6 @@ const decoderOpts = {
26
26
  };
27
27
 
28
28
  class WebAssemblyParser extends Parser {
29
- /**
30
- * @param {{}=} options parser options
31
- */
32
- constructor(options) {
33
- super();
34
- this.hooks = Object.freeze({});
35
- this.options = options;
36
- }
37
-
38
29
  /**
39
30
  * @param {string | Buffer | PreparsedAst} source the source to parse
40
31
  * @param {ParserState} state the parser state
@@ -60,8 +51,9 @@ class WebAssemblyParser extends Parser {
60
51
  // parse it
61
52
  const program = decode(source, decoderOpts);
62
53
  const module = program.body[0];
63
- /** @type {Array<string>} */
54
+ /** @type {string[]} */
64
55
  const exports = [];
56
+
65
57
  t.traverse(module, {
66
58
  ModuleExport({ node }) {
67
59
  exports.push(node.name);
@@ -22,13 +22,13 @@ class UniversalCompileAsyncWasmPlugin {
22
22
  * @returns {void}
23
23
  */
24
24
  apply(compiler) {
25
- compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
25
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
26
26
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
27
27
  /**
28
28
  * @param {Chunk} chunk chunk
29
29
  * @returns {boolean} true, if wasm loading is enabled for the chunk
30
30
  */
31
- const isEnabledForChunk = chunk => {
31
+ const isEnabledForChunk = (chunk) => {
32
32
  const options = chunk.getEntryOptions();
33
33
  const wasmLoading =
34
34
  options && options.wasmLoading !== undefined
@@ -42,7 +42,11 @@ class UniversalCompileAsyncWasmPlugin {
42
42
  Template.indent(["return fallback();"]),
43
43
  "}"
44
44
  ]);
45
- const generateBeforeLoadBinaryCode = path =>
45
+ /**
46
+ * @param {string} path path
47
+ * @returns {string} code
48
+ */
49
+ const generateBeforeLoadBinaryCode = (path) =>
46
50
  Template.asString([
47
51
  "var useFetch = typeof document !== 'undefined' || typeof self !== 'undefined';",
48
52
  `var wasmUrl = ${path};`
@@ -81,7 +85,7 @@ class UniversalCompileAsyncWasmPlugin {
81
85
  if (
82
86
  !chunkGraph.hasModuleInGraph(
83
87
  chunk,
84
- m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
88
+ (m) => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
85
89
  )
86
90
  ) {
87
91
  return;
@@ -46,12 +46,14 @@ const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
46
46
  return array;
47
47
  };
48
48
 
49
+ /** @typedef {string[]} Declarations */
50
+
49
51
  /**
50
52
  * generates the import object function for a module
51
53
  * @param {ChunkGraph} chunkGraph the chunk graph
52
54
  * @param {Module} module the module
53
55
  * @param {boolean | undefined} mangle mangle imports
54
- * @param {string[]} declarations array where declarations are pushed to
56
+ * @param {Declarations} declarations array where declarations are pushed to
55
57
  * @param {RuntimeSpec} runtime the runtime
56
58
  * @returns {string} source code
57
59
  */
@@ -63,7 +65,7 @@ const generateImportObject = (
63
65
  runtime
64
66
  ) => {
65
67
  const moduleGraph = chunkGraph.moduleGraph;
66
- /** @type {Map<string, string | number>} */
68
+ /** @type {Map<string, ModuleId>} */
67
69
  const waitForInstances = new Map();
68
70
  const properties = [];
69
71
  const usedWasmDependencies = WebAssemblyUtils.getUsedDependencies(
@@ -139,12 +141,14 @@ const generateImportObject = (
139
141
  importObject = [
140
142
  "return {",
141
143
  Template.indent([
142
- properties.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n")
144
+ properties
145
+ .map((p) => `${JSON.stringify(p.name)}: ${p.value}`)
146
+ .join(",\n")
143
147
  ]),
144
148
  "};"
145
149
  ];
146
150
  } else {
147
- /** @type {Map<string, Array<{ name: string, value: string }>>} */
151
+ /** @type {Map<string, { name: string, value: string }[]>} */
148
152
  const propertiesByModule = new Map();
149
153
  for (const p of properties) {
150
154
  let list = propertiesByModule.get(p.module);
@@ -160,7 +164,9 @@ const generateImportObject = (
160
164
  Template.asString([
161
165
  `${JSON.stringify(module)}: {`,
162
166
  Template.indent([
163
- list.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n")
167
+ list
168
+ .map((p) => `${JSON.stringify(p.name)}: ${p.value}`)
169
+ .join(",\n")
164
170
  ]),
165
171
  "}"
166
172
  ])
@@ -172,9 +178,9 @@ const generateImportObject = (
172
178
 
173
179
  const moduleIdStringified = JSON.stringify(chunkGraph.getModuleId(module));
174
180
  if (waitForInstances.size === 1) {
175
- const moduleId = Array.from(waitForInstances.values())[0];
181
+ const moduleId = [...waitForInstances.values()][0];
176
182
  const promise = `installedWasmModules[${JSON.stringify(moduleId)}]`;
177
- const variable = Array.from(waitForInstances.keys())[0];
183
+ const variable = [...waitForInstances.keys()][0];
178
184
  return Template.asString([
179
185
  `${moduleIdStringified}: function() {`,
180
186
  Template.indent([
@@ -187,7 +193,7 @@ const generateImportObject = (
187
193
  } else if (waitForInstances.size > 0) {
188
194
  const promises = Array.from(
189
195
  waitForInstances.values(),
190
- id => `installedWasmModules[${JSON.stringify(id)}]`
196
+ (id) => `installedWasmModules[${JSON.stringify(id)}]`
191
197
  ).join(", ");
192
198
  const variables = Array.from(
193
199
  waitForInstances.keys(),
@@ -213,8 +219,8 @@ const generateImportObject = (
213
219
  /**
214
220
  * @typedef {object} WasmChunkLoadingRuntimeModuleOptions
215
221
  * @property {(path: string) => string} generateLoadBinaryCode
216
- * @property {boolean} [supportsStreaming]
217
- * @property {boolean} [mangleImports]
222
+ * @property {boolean=} supportsStreaming
223
+ * @property {boolean=} mangleImports
218
224
  * @property {ReadOnlyRuntimeRequirements} runtimeRequirements
219
225
  */
220
226
 
@@ -249,9 +255,9 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
249
255
  const chunk = /** @type {Chunk} */ (this.chunk);
250
256
  const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
251
257
  const { mangleImports } = this;
252
- /** @type {string[]} */
258
+ /** @type {Declarations} */
253
259
  const declarations = [];
254
- const importObjects = wasmModules.map(module =>
260
+ const importObjects = wasmModules.map((module) =>
255
261
  generateImportObject(
256
262
  chunkGraph,
257
263
  module,
@@ -260,14 +266,14 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
260
266
  chunk.runtime
261
267
  )
262
268
  );
263
- const chunkModuleIdMap = chunkGraph.getChunkModuleIdMap(chunk, m =>
269
+ const chunkModuleIdMap = chunkGraph.getChunkModuleIdMap(chunk, (m) =>
264
270
  m.type.startsWith("webassembly")
265
271
  );
266
272
  /**
267
273
  * @param {string} content content
268
274
  * @returns {string} created import object
269
275
  */
270
- const createImportObject = content =>
276
+ const createImportObject = (content) =>
271
277
  mangleImports
272
278
  ? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
273
279
  : content;
@@ -275,12 +281,12 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
275
281
  JSON.stringify(outputOptions.webassemblyModuleFilename),
276
282
  {
277
283
  hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
278
- hashWithLength: length =>
284
+ hashWithLength: (length) =>
279
285
  `" + ${RuntimeGlobals.getFullHash}}().slice(0, ${length}) + "`,
280
286
  module: {
281
287
  id: '" + wasmModuleId + "',
282
288
  hash: `" + ${JSON.stringify(
283
- chunkGraph.getChunkModuleRenderedHashMap(chunk, m =>
289
+ chunkGraph.getChunkModuleRenderedHashMap(chunk, (m) =>
284
290
  m.type.startsWith("webassembly")
285
291
  )
286
292
  )}[chunkId][wasmModuleId] + "`,
@@ -288,7 +294,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
288
294
  return `" + ${JSON.stringify(
289
295
  chunkGraph.getChunkModuleRenderedHashMap(
290
296
  chunk,
291
- m => m.type.startsWith("webassembly"),
297
+ (m) => m.type.startsWith("webassembly"),
292
298
  length
293
299
  )
294
300
  )}[chunkId][wasmModuleId] + "`;
@@ -13,6 +13,8 @@ const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeat
13
13
  /** @typedef {import("../Module")} Module */
14
14
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
15
15
 
16
+ const PLUGIN_NAME = "WasmFinalizeExportsPlugin";
17
+
16
18
  class WasmFinalizeExportsPlugin {
17
19
  /**
18
20
  * Apply the plugin
@@ -20,72 +22,68 @@ class WasmFinalizeExportsPlugin {
20
22
  * @returns {void}
21
23
  */
22
24
  apply(compiler) {
23
- compiler.hooks.compilation.tap("WasmFinalizeExportsPlugin", compilation => {
24
- compilation.hooks.finishModules.tap(
25
- "WasmFinalizeExportsPlugin",
26
- modules => {
27
- for (const module of modules) {
28
- // 1. if a WebAssembly module
29
- if (module.type.startsWith("webassembly") === true) {
30
- const jsIncompatibleExports =
31
- /** @type {BuildMeta} */
32
- (module.buildMeta).jsIncompatibleExports;
25
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
26
+ compilation.hooks.finishModules.tap(PLUGIN_NAME, (modules) => {
27
+ for (const module of modules) {
28
+ // 1. if a WebAssembly module
29
+ if (module.type.startsWith("webassembly") === true) {
30
+ const jsIncompatibleExports =
31
+ /** @type {BuildMeta} */
32
+ (module.buildMeta).jsIncompatibleExports;
33
33
 
34
- if (jsIncompatibleExports === undefined) {
35
- continue;
36
- }
34
+ if (jsIncompatibleExports === undefined) {
35
+ continue;
36
+ }
37
37
 
38
- for (const connection of compilation.moduleGraph.getIncomingConnections(
39
- module
40
- )) {
41
- // 2. is active and referenced by a non-WebAssembly module
42
- if (
43
- connection.isTargetActive(undefined) &&
44
- /** @type {Module} */
45
- (connection.originModule).type.startsWith("webassembly") ===
46
- false
47
- ) {
48
- const referencedExports =
49
- compilation.getDependencyReferencedExports(
50
- /** @type {Dependency} */ (connection.dependency),
51
- undefined
52
- );
38
+ for (const connection of compilation.moduleGraph.getIncomingConnections(
39
+ module
40
+ )) {
41
+ // 2. is active and referenced by a non-WebAssembly module
42
+ if (
43
+ connection.isTargetActive(undefined) &&
44
+ /** @type {Module} */
45
+ (connection.originModule).type.startsWith("webassembly") ===
46
+ false
47
+ ) {
48
+ const referencedExports =
49
+ compilation.getDependencyReferencedExports(
50
+ /** @type {Dependency} */ (connection.dependency),
51
+ undefined
52
+ );
53
53
 
54
- for (const info of referencedExports) {
55
- const names = Array.isArray(info) ? info : info.name;
56
- if (names.length === 0) continue;
57
- const name = names[0];
58
- if (typeof name === "object") continue;
59
- // 3. and uses a func with an incompatible JS signature
60
- if (
61
- Object.prototype.hasOwnProperty.call(
62
- jsIncompatibleExports,
63
- name
64
- )
65
- ) {
66
- // 4. error
67
- const error = new UnsupportedWebAssemblyFeatureError(
68
- `Export "${name}" with ${jsIncompatibleExports[name]} can only be used for direct wasm to wasm dependencies\n` +
69
- `It's used from ${
70
- /** @type {Module} */
71
- (connection.originModule).readableIdentifier(
72
- compilation.requestShortener
73
- )
74
- } at ${formatLocation(
75
- /** @type {Dependency} */ (connection.dependency)
76
- .loc
77
- )}.`
78
- );
79
- error.module = module;
80
- compilation.errors.push(error);
81
- }
54
+ for (const info of referencedExports) {
55
+ const names = Array.isArray(info) ? info : info.name;
56
+ if (names.length === 0) continue;
57
+ const name = names[0];
58
+ if (typeof name === "object") continue;
59
+ // 3. and uses a func with an incompatible JS signature
60
+ if (
61
+ Object.prototype.hasOwnProperty.call(
62
+ jsIncompatibleExports,
63
+ name
64
+ )
65
+ ) {
66
+ // 4. error
67
+ const error = new UnsupportedWebAssemblyFeatureError(
68
+ `Export "${name}" with ${jsIncompatibleExports[name]} can only be used for direct wasm to wasm dependencies\n` +
69
+ `It's used from ${
70
+ /** @type {Module} */
71
+ (connection.originModule).readableIdentifier(
72
+ compilation.requestShortener
73
+ )
74
+ } at ${formatLocation(
75
+ /** @type {Dependency} */ (connection.dependency).loc
76
+ )}.`
77
+ );
78
+ error.module = module;
79
+ compilation.errors.push(error);
82
80
  }
83
81
  }
84
82
  }
85
83
  }
86
84
  }
87
85
  }
88
- );
86
+ });
89
87
  });
90
88
  }
91
89
  }