@depup/webpack 5.109.2-depup.0 → 5.110.3-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 (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("./Hash")} Hash */
8
+ /** @import Hash from "./Hash" */
9
9
 
10
10
  const A_CODE = "a".charCodeAt(0);
11
11
 
@@ -47,6 +47,7 @@ const digestNonNumericOnlyWithFull = (hash, hashDigest, hashDigestLength) => {
47
47
  return [nonNumericOnlyHash(full, hashDigestLength), full];
48
48
  };
49
49
 
50
+ nonNumericOnlyHash.digestNonNumericOnly = digestNonNumericOnly;
51
+ nonNumericOnlyHash.digestNonNumericOnlyWithFull = digestNonNumericOnlyWithFull;
52
+
50
53
  module.exports = nonNumericOnlyHash;
51
- module.exports.digestNonNumericOnly = digestNonNumericOnly;
52
- module.exports.digestNonNumericOnlyWithFull = digestNonNumericOnlyWithFull;
@@ -4,9 +4,11 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- const JSONParseError = require("../errors/JSONParseError");
7
+ const memoize = require("./memoize");
8
8
 
9
- /** @typedef {import("../util/fs").JsonValue} JsonValue */
9
+ const getJSONParseError = memoize(() => require("../errors/JSONParseError"));
10
+
11
+ /** @import { JsonValue } from "../util/fs" */
10
12
 
11
13
  // Inspired by https://github.com/npm/json-parse-even-better-errors
12
14
 
@@ -34,7 +36,7 @@ const parseJson = (raw, reviver) => {
34
36
  try {
35
37
  return JSON.parse(txt, reviver);
36
38
  } catch (err) {
37
- throw new JSONParseError(/** @type {Error} */ (err), raw, txt);
39
+ throw new (getJSONParseError())(/** @type {Error} */ (err), raw, txt);
38
40
  }
39
41
  };
40
42
 
@@ -0,0 +1,32 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /** @import NormalModuleFactory from "../NormalModuleFactory" */
9
+ /** @typedef {import("./lazyModule").LazyModuleAccessor<EXPECTED_ANY>} AnyLazyModuleAccessor */
10
+
11
+ /**
12
+ * Warms the modules a type's `createParser`/`createGenerator`/`createModuleClass`
13
+ * taps read, at the factory's async boundary — those hooks are synchronous, so
14
+ * they cannot await the load themselves.
15
+ * @param {NormalModuleFactory} normalModuleFactory the normal module factory
16
+ * @param {string} pluginName name of the tapping plugin
17
+ * @param {Iterable<[string, AnyLazyModuleAccessor[]]>} table module type to the accessors its taps read
18
+ * @returns {void}
19
+ */
20
+ const preloadModuleType = (normalModuleFactory, pluginName, table) => {
21
+ for (const [type, accessors] of table) {
22
+ normalModuleFactory.hooks.prepareModuleType
23
+ .for(type)
24
+ .tapPromise(pluginName, () =>
25
+ Promise.all(accessors.map((accessor) => accessor())).then(
26
+ () => undefined
27
+ )
28
+ );
29
+ }
30
+ };
31
+
32
+ module.exports = preloadModuleType;
@@ -19,11 +19,13 @@ const {
19
19
  } = require("webpack-sources");
20
20
  const { register } = require("./serialization");
21
21
 
22
- /** @typedef {import("acorn").Position} Position */
23
- /** @typedef {import("../Dependency").RealDependencyLocation} RealDependencyLocation */
24
- /** @typedef {import("../Dependency").SourcePosition} SourcePosition */
25
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
26
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
22
+ /** @import { RealDependencyLocation, SourcePosition } from "../Dependency" */
23
+ /**
24
+ * @import {
25
+ * ObjectDeserializerContext,
26
+ * ObjectSerializerContext
27
+ * } from "../serialization/ObjectMiddleware"
28
+ */
27
29
 
28
30
  const CURRENT_MODULE = "webpack/lib/util/registerExternalSerializer";
29
31
 
@@ -5,12 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { decodeVLQ, encodeVLQ } = require("./createMappings");
9
+
10
+ /** @import { RawSourceMap } from "webpack-sources" */
11
+ /** @import { Result } from "../NormalModule" */
12
+
8
13
  /**
9
14
  * Returns result without BOM.
10
15
  * @param {string | Buffer} strOrBuffer string or buffer
11
16
  * @returns {string | Buffer} result without BOM
12
17
  */
13
- module.exports = (strOrBuffer) => {
18
+ const removeBOM = (strOrBuffer) => {
14
19
  if (typeof strOrBuffer === "string" && strOrBuffer.charCodeAt(0) === 0xfeff) {
15
20
  return strOrBuffer.slice(1);
16
21
  } else if (
@@ -24,3 +29,79 @@ module.exports = (strOrBuffer) => {
24
29
 
25
30
  return strOrBuffer;
26
31
  };
32
+
33
+ /**
34
+ * A BOM occupies generated column 0 of the first line, so a map describing
35
+ * BOM-prefixed content starts that line at column 1 or later. Removing the BOM
36
+ * moves the line one column left; the segments after the first are encoded
37
+ * relative to it, so only the first is rewritten. A map already starting at
38
+ * column 0 describes the content without its BOM and is left alone.
39
+ * @param {string} mappings VLQ encoded `mappings` of a map for BOM-prefixed content
40
+ * @returns {string} `mappings` for the same content without its BOM
41
+ */
42
+ const shiftMappings = (mappings) => {
43
+ const { value, end } = decodeVLQ(mappings, 0);
44
+ if (end === 0 || value <= 0) return mappings;
45
+ return encodeVLQ(value - 1) + mappings.slice(end);
46
+ };
47
+
48
+ /**
49
+ * Adjust a source map that accompanied BOM-prefixed content for the removal of
50
+ * that BOM. Anything without VLQ `mappings` is passed through untouched, as is
51
+ * a map declaring a version other than 3 — earlier versions spell `mappings`
52
+ * differently. A map that declares no version at all is taken as version 3.
53
+ * @param {(string | RawSourceMap)=} sourceMap the map, as an object or as JSON
54
+ * @returns {(string | RawSourceMap)=} the adjusted map
55
+ */
56
+ const adjustSourceMapForRemovedBOM = (sourceMap) => {
57
+ if (!sourceMap) return sourceMap;
58
+
59
+ if (typeof sourceMap === "string") {
60
+ /** @type {RawSourceMap} */
61
+ let parsed;
62
+ try {
63
+ parsed = JSON.parse(sourceMap);
64
+ } catch (_err) {
65
+ return sourceMap;
66
+ }
67
+ const adjusted = adjustSourceMapForRemovedBOM(parsed);
68
+ return adjusted === parsed ? sourceMap : JSON.stringify(adjusted);
69
+ }
70
+
71
+ if (sourceMap.version !== undefined && sourceMap.version !== 3) {
72
+ return sourceMap;
73
+ }
74
+
75
+ if (typeof sourceMap.mappings !== "string") return sourceMap;
76
+
77
+ const mappings = shiftMappings(sourceMap.mappings);
78
+
79
+ return mappings === sourceMap.mappings
80
+ ? sourceMap
81
+ : { ...sourceMap, mappings };
82
+ };
83
+
84
+ /**
85
+ * @param {Result} result a loader result: content, an optional source map, extra info
86
+ * @returns {Result} the result with a leading BOM removed from its content and its source map kept in sync
87
+ */
88
+ const removeBOMFromResult = (result) => {
89
+ const content = result[0];
90
+ const withoutBOM = removeBOM(content);
91
+
92
+ if (withoutBOM === content) return result;
93
+
94
+ // Copied rather than rebuilt, so a result carrying no source map keeps its
95
+ // arity.
96
+ const adjusted = /** @type {Result} */ ([...result]);
97
+
98
+ adjusted[0] = withoutBOM;
99
+
100
+ if (adjusted[1]) adjusted[1] = adjustSourceMapForRemovedBOM(adjusted[1]);
101
+
102
+ return adjusted;
103
+ };
104
+
105
+ module.exports.adjustSourceMapForRemovedBOM = adjustSourceMapForRemovedBOM;
106
+ module.exports.removeBOM = removeBOM;
107
+ module.exports.removeBOMFromResult = removeBOMFromResult;
@@ -7,8 +7,8 @@
7
7
 
8
8
  const SortableSet = require("./SortableSet");
9
9
 
10
- /** @typedef {import("../Compilation")} Compilation */
11
- /** @typedef {import("../Entrypoint").EntryOptions} EntryOptions */
10
+ /** @import Compilation from "../Compilation" */
11
+ /** @import { EntryOptions } from "../Entrypoint" */
12
12
 
13
13
  /** @typedef {SortableSet<string>} RuntimeSpecSortableSet */
14
14
  /** @typedef {string | RuntimeSpecSortableSet | undefined} RuntimeSpec */
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
8
+ /** @import RuntimeTemplate from "../RuntimeTemplate" */
9
9
  /** @typedef {string | number} VersionValue */
10
10
  /** @typedef {VersionValue | undefined} SemVerRangeItem */
11
11
  /** @typedef {(SemVerRangeItem | SemVerRangeItem[])[]} SemVerRange */
@@ -5,31 +5,18 @@
5
5
  "use strict";
6
6
 
7
7
  const { DEFAULTS } = require("../config/defaults");
8
+ const ObjectMiddleware = require("../serialization/ObjectMiddleware");
9
+ const SerializerMiddleware = require("../serialization/SerializerMiddleware");
8
10
  const memoize = require("./memoize");
9
11
 
10
- /** @typedef {import("../serialization/BinaryMiddleware").MEASURE_END_OPERATION_TYPE} MEASURE_END_OPERATION */
11
- /** @typedef {import("../serialization/BinaryMiddleware").MEASURE_START_OPERATION_TYPE} MEASURE_START_OPERATION */
12
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
13
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
14
-
15
- /**
16
- * Defines the serializer type used by this module.
17
- * @template D, S, C
18
- * @typedef {import("../serialization/Serializer")<D, S, C>} Serializer
19
- */
12
+ const getSerializer = memoize(() => require("../serialization/Serializer"));
20
13
 
21
- const getBinaryMiddleware = memoize(() =>
22
- require("../serialization/BinaryMiddleware")
23
- );
24
- const getObjectMiddleware = memoize(() =>
25
- require("../serialization/ObjectMiddleware")
26
- );
27
14
  const getSingleItemMiddleware = memoize(() =>
28
15
  require("../serialization/SingleItemMiddleware")
29
16
  );
30
- const getSerializer = memoize(() => require("../serialization/Serializer"));
31
- const getSerializerMiddleware = memoize(() =>
32
- require("../serialization/SerializerMiddleware")
17
+
18
+ const getBinaryMiddleware = memoize(() =>
19
+ require("../serialization/BinaryMiddleware")
33
20
  );
34
21
 
35
22
  const getBinaryMiddlewareInstance = memoize(
@@ -43,7 +30,7 @@ const registerSerializers = memoize(() => {
43
30
  // This allows bundling all internal serializers
44
31
  const internalSerializables = require("./internalSerializables");
45
32
 
46
- getObjectMiddleware().registerLoader(/^webpack\/lib\//, (req) => {
33
+ ObjectMiddleware.registerLoader(/^webpack\/lib\//, (req) => {
47
34
  const loader =
48
35
  internalSerializables[
49
36
  /** @type {keyof import("./internalSerializables")} */
@@ -59,6 +46,21 @@ const registerSerializers = memoize(() => {
59
46
  });
60
47
  });
61
48
 
49
+ /**
50
+ * @import {
51
+ * MEASURE_END_OPERATION_TYPE as MEASURE_END_OPERATION,
52
+ * MEASURE_START_OPERATION_TYPE as MEASURE_START_OPERATION
53
+ * } from "../serialization/BinaryMiddleware"
54
+ */
55
+ /** @import { HashFunction } from "../util/Hash" */
56
+ /** @import { IntermediateFileSystem } from "../util/fs" */
57
+
58
+ /**
59
+ * Defines the serializer type used by this module.
60
+ * @template D, S, C
61
+ * @typedef {import("../serialization/Serializer")<D, S, C>} Serializer
62
+ */
63
+
62
64
  /**
63
65
  * @type {Serializer<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>}
64
66
  */
@@ -67,16 +69,16 @@ let buffersSerializer;
67
69
  // Expose serialization API
68
70
  module.exports = {
69
71
  get register() {
70
- return getObjectMiddleware().register;
72
+ return ObjectMiddleware.register;
71
73
  },
72
74
  get registerLoader() {
73
- return getObjectMiddleware().registerLoader;
75
+ return ObjectMiddleware.registerLoader;
74
76
  },
75
77
  get registerNotSerializable() {
76
- return getObjectMiddleware().registerNotSerializable;
78
+ return ObjectMiddleware.registerNotSerializable;
77
79
  },
78
80
  get NOT_SERIALIZABLE() {
79
- return getObjectMiddleware().NOT_SERIALIZABLE;
81
+ return ObjectMiddleware.NOT_SERIALIZABLE;
80
82
  },
81
83
  /** @type {MEASURE_START_OPERATION} */
82
84
  get MEASURE_START_OPERATION() {
@@ -91,12 +93,11 @@ module.exports = {
91
93
  registerSerializers();
92
94
  const Serializer = getSerializer();
93
95
  const binaryMiddleware = getBinaryMiddlewareInstance();
94
- const SerializerMiddleware = getSerializerMiddleware();
95
96
  const SingleItemMiddleware = getSingleItemMiddleware();
96
97
  return /** @type {Serializer<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>} */ (
97
98
  buffersSerializer = new Serializer([
98
99
  new SingleItemMiddleware(),
99
- new (getObjectMiddleware())((context) => {
100
+ new ObjectMiddleware((context) => {
100
101
  if ("write" in context) {
101
102
  context.writeLazy = (value) => {
102
103
  context.write(
@@ -124,12 +125,11 @@ module.exports = {
124
125
 
125
126
  const fileMiddleware = new FileMiddleware(fs, hashFunction);
126
127
  const binaryMiddleware = getBinaryMiddlewareInstance();
127
- const SerializerMiddleware = getSerializerMiddleware();
128
128
  const SingleItemMiddleware = getSingleItemMiddleware();
129
129
  return /** @type {Serializer<D, S, C>} */ (
130
130
  new Serializer([
131
131
  new SingleItemMiddleware(),
132
- new (getObjectMiddleware())((context) => {
132
+ new ObjectMiddleware((context) => {
133
133
  if ("write" in context) {
134
134
  context.writeLazy = (value) => {
135
135
  context.write(
@@ -5,8 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("webpack-sources").Source} Source */
9
- /** @typedef {import("./Hash")} Hash */
8
+ /** @import { Source } from "webpack-sources" */
9
+ /** @import Hash from "./Hash" */
10
10
 
11
11
  /** @type {WeakMap<Source, WeakMap<Source, boolean>>} */
12
12
  const equalityCache = new WeakMap();
@@ -5,8 +5,12 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
9
- /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperty} DestructuringAssignmentProperty */
8
+ /**
9
+ * @import {
10
+ * DestructuringAssignmentProperties,
11
+ * DestructuringAssignmentProperty
12
+ * } from "../javascript/JavascriptParser"
13
+ */
10
14
 
11
15
  /**
12
16
  * Deep first traverse the properties of a destructuring assignment.
@@ -5,8 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../../declarations/WebpackOptions").WasmLoadingType} WasmLoadingType */
9
- /** @typedef {import("../Compiler")} Compiler */
8
+ /** @import { WasmLoadingType } from "../../declarations/WebpackOptions" */
9
+ /** @import Compiler from "../Compiler" */
10
10
 
11
11
  /** @typedef {Set<WasmLoadingType>} WasmLoadingTypes */
12
12
 
@@ -114,9 +114,10 @@ class EnableWasmLoadingPlugin {
114
114
 
115
115
  new ReadFileCompileWasmPlugin({
116
116
  mangleImports: compiler.options.optimization.mangleWasmImports,
117
- import:
118
- compiler.options.output.module &&
119
- compiler.options.output.environment.dynamicImport
117
+ // ESM output has no `require`, and any runtime that loads ESM has
118
+ // `import()` — pairing them by `dynamicImport` emitted CJS into an
119
+ // ES module, which the runtime refuses to load at all.
120
+ import: compiler.options.output.module
120
121
  }).apply(compiler);
121
122
  }
122
123
 
@@ -124,9 +125,10 @@ class EnableWasmLoadingPlugin {
124
125
  const ReadFileCompileAsyncWasmPlugin = require("../node/ReadFileCompileAsyncWasmPlugin");
125
126
 
126
127
  new ReadFileCompileAsyncWasmPlugin({
127
- import:
128
- compiler.options.output.module &&
129
- compiler.options.output.environment.dynamicImport
128
+ // ESM output has no `require`, and any runtime that loads ESM has
129
+ // `import()` — pairing them by `dynamicImport` emitted CJS into an
130
+ // ES module, which the runtime refuses to load at all.
131
+ import: compiler.options.output.module
130
132
  }).apply(compiler);
131
133
  }
132
134
 
@@ -0,0 +1,54 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author sheo13666q @sheo13666q
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const RuntimeGlobals = require("../RuntimeGlobals");
9
+ const {
10
+ getPresentKinds,
11
+ reEncodeDigest,
12
+ usesFullHashDigest
13
+ } = require("../TemplatedPathPlugin");
14
+
15
+ /** @import Compilation from "../Compilation" */
16
+
17
+ /**
18
+ * Whether the runtime needs `getFullHash` to build a binary's name. A `[hash]` next to
19
+ * a module resolves to that module's hash, not the compilation's, so only the explicit
20
+ * `[fullhash]` spelling asks for it — and a digest is inlined rather than read.
21
+ * @param {string} filename `output.webassemblyModuleFilename`
22
+ * @returns {boolean} true when the runtime reads the compilation hash
23
+ */
24
+ const needsRuntimeFullHash = (filename) =>
25
+ getPresentKinds(filename).has("fullhash") && !usesFullHashDigest(filename);
26
+
27
+ /**
28
+ * The compilation-hash half of the `getPath` data for interpolating
29
+ * `output.webassemblyModuleFilename` into runtime code.
30
+ * @param {Compilation} compilation the compilation
31
+ * @returns {{ hash: string, hashWithLength: (length: number) => string, hashWithDigest: (digest: string, length?: number) => string }} the fields
32
+ */
33
+ const fullHashPathData = (compilation) => ({
34
+ hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
35
+ hashWithLength: (length) =>
36
+ `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
37
+ // A digest re-encodes the hash, which the runtime expression above cannot carry, so
38
+ // the settled value is inlined instead — byte-identical to the emitted filename.
39
+ hashWithDigest: (digest, length) => {
40
+ const { fullHash, outputOptions } = compilation;
41
+ // Pre-hash pass: a stand-in, replaced on the post-hash re-render that
42
+ // `needsInlinedFullHash` asks for. Matches `GetFullHashRuntimeModule`.
43
+ if (!fullHash) return length ? "x".repeat(length) : "x";
44
+ const hash = reEncodeDigest(
45
+ fullHash,
46
+ outputOptions.hashDigest || "hex",
47
+ digest
48
+ );
49
+ return length ? hash.slice(0, length) : hash;
50
+ }
51
+ });
52
+
53
+ module.exports.fullHashPathData = fullHashPathData;
54
+ module.exports.needsRuntimeFullHash = needsRuntimeFullHash;
@@ -8,12 +8,15 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
+ const { fullHashPathData } = require("../wasm/wasmModuleFilename");
11
12
 
12
- /** @typedef {import("../Chunk")} Chunk */
13
- /** @typedef {import("../Compilation")} Compilation */
13
+ /** @import Chunk from "../Chunk" */
14
+ /** @import ChunkGraph from "../ChunkGraph" */
15
+ /** @import Compilation from "../Compilation" */
16
+ /** @import { RuntimeSpec } from "../util/runtime" */
14
17
 
15
18
  /** @typedef {(wasmModuleSrcPath: string) => string} GenerateBeforeLoadBinaryCode */
16
- /** @typedef {(wasmModuleSrcPath: string) => string} GenerateLoadBinaryCode */
19
+ /** @typedef {(wasmModuleSrcPath: string, runtime: RuntimeSpec, analyzable: boolean) => string} GenerateLoadBinaryCode */
17
20
  /** @typedef {() => string} GenerateBeforeCompileStreaming */
18
21
 
19
22
  /**
@@ -22,6 +25,7 @@ const Template = require("../Template");
22
25
  * @property {GenerateBeforeLoadBinaryCode=} generateBeforeLoadBinaryCode
23
26
  * @property {GenerateBeforeCompileStreaming=} generateBeforeCompileStreaming
24
27
  * @property {boolean} supportsStreaming
28
+ * @property {boolean=} fullHashDigest the binary's name inlines a re-encoded compilation hash
25
29
  */
26
30
 
27
31
  class AsyncWasmCompileRuntimeModule extends RuntimeModule {
@@ -32,9 +36,16 @@ class AsyncWasmCompileRuntimeModule extends RuntimeModule {
32
36
  generateLoadBinaryCode,
33
37
  generateBeforeLoadBinaryCode,
34
38
  generateBeforeCompileStreaming,
35
- supportsStreaming
39
+ supportsStreaming,
40
+ fullHashDigest
36
41
  }) {
37
42
  super("wasm compile", RuntimeModule.STAGE_NORMAL);
43
+ // A re-encoded digest is inlined from the settled hash, so this has to render
44
+ // again once there is one.
45
+ if (fullHashDigest) {
46
+ /** @type {boolean} */
47
+ this.fullHash = true;
48
+ }
38
49
  /** @type {GenerateLoadBinaryCode} */
39
50
  this.generateLoadBinaryCode = generateLoadBinaryCode;
40
51
  /** @type {GenerateBeforeLoadBinaryCode | undefined} */
@@ -56,24 +67,35 @@ class AsyncWasmCompileRuntimeModule extends RuntimeModule {
56
67
  // Opt-out fallback to non-streaming when the server serves wasm with a wrong MIME type.
57
68
  const streamingFallback = outputOptions.wasmStreamingFallback;
58
69
  const fn = RuntimeGlobals.compileWasm;
59
- const wasmModuleSrcPath = compilation.getPath(
60
- JSON.stringify(outputOptions.webassemblyModuleFilename),
61
- {
62
- hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
63
- hashWithLength: (length) =>
64
- `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
65
- module: {
66
- id: '" + wasmModuleId + "',
67
- hash: '" + wasmModuleHash + "',
68
- hashWithLength(length) {
69
- return `" + wasmModuleHash.slice(0, ${length}) + "`;
70
- }
71
- },
72
- runtime: chunk.runtime
73
- }
70
+ // Analyzable output bakes the binary's URL into the call site instead.
71
+ const analyzable = runtimeTemplate.supportsAnalyzable(
72
+ "wasm",
73
+ /** @type {ChunkGraph} */ (this.chunkGraph),
74
+ undefined,
75
+ chunk.runtime
74
76
  );
77
+ const wasmModuleSrcPath = analyzable
78
+ ? "wasmModuleUrl"
79
+ : compilation.getPath(
80
+ JSON.stringify(outputOptions.webassemblyModuleFilename),
81
+ {
82
+ ...fullHashPathData(compilation),
83
+ module: {
84
+ id: '" + wasmModuleId + "',
85
+ hash: '" + wasmModuleHash + "',
86
+ hashWithLength(length) {
87
+ return `" + wasmModuleHash.slice(0, ${length}) + "`;
88
+ }
89
+ },
90
+ runtime: chunk.runtime
91
+ }
92
+ );
75
93
 
76
- const loader = this.generateLoadBinaryCode(wasmModuleSrcPath);
94
+ const loader = this.generateLoadBinaryCode(
95
+ wasmModuleSrcPath,
96
+ chunk.runtime,
97
+ analyzable
98
+ );
77
99
 
78
100
  // Fallback path: fetch -> arrayBuffer -> WebAssembly.compile
79
101
  const fallback = [
@@ -138,7 +160,7 @@ class AsyncWasmCompileRuntimeModule extends RuntimeModule {
138
160
  };
139
161
 
140
162
  return `${fn} = ${runtimeTemplate.basicFunction(
141
- "wasmModuleId, wasmModuleHash",
163
+ analyzable ? "wasmModuleUrl" : "wasmModuleId, wasmModuleHash",
142
164
  this.supportsStreaming
143
165
  ? getStreaming()
144
166
  : [
@@ -8,12 +8,15 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
+ const { fullHashPathData } = require("../wasm/wasmModuleFilename");
11
12
 
12
- /** @typedef {import("../Chunk")} Chunk */
13
- /** @typedef {import("../Compilation")} Compilation */
13
+ /** @import Chunk from "../Chunk" */
14
+ /** @import ChunkGraph from "../ChunkGraph" */
15
+ /** @import Compilation from "../Compilation" */
16
+ /** @import { RuntimeSpec } from "../util/runtime" */
14
17
 
15
18
  /** @typedef {(wasmModuleSrcPath: string) => string} GenerateBeforeLoadBinaryCode */
16
- /** @typedef {(wasmModuleSrcPath: string) => string} GenerateLoadBinaryCode */
19
+ /** @typedef {(wasmModuleSrcPath: string, runtime: RuntimeSpec, analyzable: boolean) => string} GenerateLoadBinaryCode */
17
20
  /** @typedef {() => string} GenerateBeforeInstantiateStreaming */
18
21
 
19
22
  /**
@@ -22,6 +25,7 @@ const Template = require("../Template");
22
25
  * @property {GenerateBeforeLoadBinaryCode=} generateBeforeLoadBinaryCode
23
26
  * @property {GenerateBeforeInstantiateStreaming=} generateBeforeInstantiateStreaming
24
27
  * @property {boolean} supportsStreaming
28
+ * @property {boolean=} fullHashDigest the binary's name inlines a re-encoded compilation hash
25
29
  */
26
30
 
27
31
  class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
@@ -32,9 +36,16 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
32
36
  generateLoadBinaryCode,
33
37
  generateBeforeLoadBinaryCode,
34
38
  generateBeforeInstantiateStreaming,
35
- supportsStreaming
39
+ supportsStreaming,
40
+ fullHashDigest
36
41
  }) {
37
42
  super("wasm loading", RuntimeModule.STAGE_NORMAL);
43
+ // A re-encoded digest is inlined from the settled hash, so this has to render
44
+ // again once there is one.
45
+ if (fullHashDigest) {
46
+ /** @type {boolean} */
47
+ this.fullHash = true;
48
+ }
38
49
  /** @type {GenerateLoadBinaryCode} */
39
50
  this.generateLoadBinaryCode = generateLoadBinaryCode;
40
51
  /** @type {generateBeforeLoadBinaryCode | undefined} */
@@ -57,24 +68,35 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
57
68
  // Opt-in fallback to non-streaming when the server serves wasm with a wrong MIME type.
58
69
  const streamingFallback = outputOptions.wasmStreamingFallback;
59
70
  const fn = RuntimeGlobals.instantiateWasm;
60
- const wasmModuleSrcPath = compilation.getPath(
61
- JSON.stringify(outputOptions.webassemblyModuleFilename),
62
- {
63
- hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
64
- hashWithLength: (length) =>
65
- `" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
66
- module: {
67
- id: '" + wasmModuleId + "',
68
- hash: '" + wasmModuleHash + "',
69
- hashWithLength(length) {
70
- return `" + wasmModuleHash.slice(0, ${length}) + "`;
71
- }
72
- },
73
- runtime: chunk.runtime
74
- }
71
+ // Analyzable output bakes the binary's URL into the call site instead.
72
+ const analyzable = runtimeTemplate.supportsAnalyzable(
73
+ "wasm",
74
+ /** @type {ChunkGraph} */ (this.chunkGraph),
75
+ undefined,
76
+ chunk.runtime
75
77
  );
78
+ const wasmModuleSrcPath = analyzable
79
+ ? "wasmModuleUrl"
80
+ : compilation.getPath(
81
+ JSON.stringify(outputOptions.webassemblyModuleFilename),
82
+ {
83
+ ...fullHashPathData(compilation),
84
+ module: {
85
+ id: '" + wasmModuleId + "',
86
+ hash: '" + wasmModuleHash + "',
87
+ hashWithLength(length) {
88
+ return `" + wasmModuleHash.slice(0, ${length}) + "`;
89
+ }
90
+ },
91
+ runtime: chunk.runtime
92
+ }
93
+ );
76
94
 
77
- const loader = this.generateLoadBinaryCode(wasmModuleSrcPath);
95
+ const loader = this.generateLoadBinaryCode(
96
+ wasmModuleSrcPath,
97
+ chunk.runtime,
98
+ analyzable
99
+ );
78
100
  const fallback = [
79
101
  `.then(${runtimeTemplate.returningFunction("x.arrayBuffer()", "x")})`,
80
102
  `.then(${runtimeTemplate.returningFunction(
@@ -149,7 +171,9 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
149
171
  };
150
172
 
151
173
  return `${fn} = ${runtimeTemplate.basicFunction(
152
- "exports, wasmModuleId, wasmModuleHash, importsObj",
174
+ analyzable
175
+ ? "exports, wasmModuleUrl, importsObj"
176
+ : "exports, wasmModuleId, wasmModuleHash, importsObj",
153
177
  this.supportsStreaming
154
178
  ? getStreaming()
155
179
  : [