@depup/webpack 5.109.2-depup.0 → 5.110.1-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 (640) 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 +26 -17
  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 +117 -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 +50 -13
  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 +101 -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 +32 -47
  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 +141 -85
  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 +332 -169
  89. package/lib/RuntimeTemplate.js +2792 -352
  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 +2 -2
  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 +261 -79
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +36 -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 +57 -24
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +168 -88
  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 +5324 -0
  160. package/lib/css/syntax.js +9579 -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 +156 -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 +4 -4
  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 +13 -10
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
  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 +27 -19
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -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 +37 -29
  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 +2 -2
  230. package/lib/dependencies/ImportDependency.js +24 -20
  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 +49 -35
  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 +51 -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 +46 -28
  290. package/lib/dependencies/WorkerDependency.js +28 -22
  291. package/lib/dependencies/WorkletDependency.js +15 -14
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/processExportInfo.js +5 -5
  294. package/lib/dll/DelegatedModule.js +34 -22
  295. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  296. package/lib/dll/DelegatedPlugin.js +2 -2
  297. package/lib/dll/DllEntryPlugin.js +2 -2
  298. package/lib/dll/DllModule.js +22 -15
  299. package/lib/dll/DllModuleFactory.js +7 -3
  300. package/lib/dll/DllPlugin.js +7 -5
  301. package/lib/dll/DllReferencePlugin.js +10 -7
  302. package/lib/dll/LibManifestPlugin.js +5 -5
  303. package/lib/electron/ElectronTargetPlugin.js +53 -49
  304. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  305. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  306. package/lib/errors/BroadContextsWarning.js +43 -0
  307. package/lib/errors/BuildCycleError.js +1 -1
  308. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  309. package/lib/errors/ChunkRenderError.js +1 -1
  310. package/lib/errors/CircularDependenciesWarning.js +38 -0
  311. package/lib/errors/CodeGenerationError.js +1 -1
  312. package/lib/errors/CommentCompilationWarning.js +1 -1
  313. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  314. package/lib/errors/DuplicateModulesWarning.js +45 -0
  315. package/lib/errors/DynamicExportsWarning.js +30 -0
  316. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  317. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  318. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  319. package/lib/errors/EvalUsageWarning.js +28 -0
  320. package/lib/errors/HookWebpackError.js +5 -5
  321. package/lib/errors/HotspotsWarning.js +57 -0
  322. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  323. package/lib/errors/InlinedAssetsWarning.js +36 -0
  324. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  325. package/lib/errors/LargeModulesWarning.js +45 -0
  326. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  327. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  328. package/lib/errors/MixedExportsWarning.js +41 -0
  329. package/lib/errors/ModuleDependencyError.js +13 -16
  330. package/lib/errors/ModuleDependencyWarning.js +5 -15
  331. package/lib/errors/ModuleHashingError.js +1 -1
  332. package/lib/errors/ModuleNotFoundError.js +2 -2
  333. package/lib/errors/ModuleParseError.js +1 -2
  334. package/lib/errors/ModuleRestoreError.js +1 -1
  335. package/lib/errors/ModuleStoreError.js +1 -1
  336. package/lib/errors/NodeStuffInWebError.js +1 -1
  337. package/lib/errors/OsDependentRuleWarning.js +31 -0
  338. package/lib/errors/PureAnnotationsWarning.js +36 -0
  339. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  340. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  341. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  342. package/lib/errors/TinyChunksWarning.js +40 -0
  343. package/lib/errors/TopLevelThisWarning.js +34 -0
  344. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  345. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  346. package/lib/errors/UnusedAliasesWarning.js +29 -0
  347. package/lib/errors/UnusedDefinesWarning.js +29 -0
  348. package/lib/errors/UnusedExternalsWarning.js +29 -0
  349. package/lib/errors/UnusedReexportsWarning.js +42 -0
  350. package/lib/errors/UnusedRuleWarning.js +29 -0
  351. package/lib/errors/WebpackError.js +9 -5
  352. package/lib/errors/deriveStackFromNestedError.js +90 -0
  353. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  354. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  355. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  356. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +155 -62
  357. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  358. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  359. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  360. package/lib/hmr/lazyCompilationBackend.js +9 -6
  361. package/lib/hmr/parserHooks.js +56 -0
  362. package/lib/html/HtmlGenerator.js +277 -77
  363. package/lib/html/HtmlModule.js +7 -3
  364. package/lib/html/HtmlModulesPlugin.js +282 -162
  365. package/lib/html/HtmlParser.js +31 -86
  366. package/lib/html/data.js +1928 -0
  367. package/lib/html/htmlMinify.js +288 -0
  368. package/lib/html/syntax.js +5557 -1155
  369. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  370. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  371. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  372. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  373. package/lib/ids/IdHelpers.js +7 -8
  374. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  375. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  376. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  377. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  378. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  379. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  380. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  381. package/lib/index.js +10 -0
  382. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  383. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  384. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  385. package/lib/javascript/ChunkHelpers.js +1 -1
  386. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  387. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  388. package/lib/javascript/JavascriptGenerator.js +65 -165
  389. package/lib/javascript/JavascriptModule.js +9 -3
  390. package/lib/javascript/JavascriptModulesPlugin.js +98 -113
  391. package/lib/javascript/JavascriptParser.js +242 -99
  392. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  393. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  394. package/lib/javascript/StartupHelpers.js +55 -9
  395. package/lib/javascript/syntax.js +2678 -232
  396. package/lib/json/JsonData.js +8 -4
  397. package/lib/json/JsonGenerator.js +38 -16
  398. package/lib/json/JsonModule.js +7 -3
  399. package/lib/json/JsonModulesPlugin.js +1 -1
  400. package/lib/json/JsonParser.js +5 -6
  401. package/lib/library/AbstractLibraryPlugin.js +20 -14
  402. package/lib/library/AmdLibraryPlugin.js +11 -7
  403. package/lib/library/AssignLibraryPlugin.js +19 -13
  404. package/lib/library/EnableLibraryPlugin.js +2 -2
  405. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  406. package/lib/library/JsonpLibraryPlugin.js +11 -7
  407. package/lib/library/ModuleLibraryPlugin.js +256 -64
  408. package/lib/library/SystemLibraryPlugin.js +12 -8
  409. package/lib/library/UmdLibraryPlugin.js +62 -25
  410. package/lib/loaders/LoaderRunner.js +14 -1
  411. package/lib/loaders/loadLoader.js +8 -4
  412. package/lib/logging/createConsoleLogger.js +7 -4
  413. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  414. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  415. package/lib/node/NodeSourcePlugin.js +1 -1
  416. package/lib/node/NodeTargetPlugin.js +4 -3
  417. package/lib/node/NodeTemplatePlugin.js +1 -1
  418. package/lib/node/NodeWatchFileSystem.js +70 -9
  419. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  420. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +72 -19
  421. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  422. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/nodeConsole.js +7 -3
  424. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  425. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  426. package/lib/optimize/ConcatenatedModule.js +985 -470
  427. package/lib/optimize/ConstExportsPlugin.js +11 -7
  428. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  429. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  430. package/lib/optimize/InlineExports.js +9 -5
  431. package/lib/optimize/InnerGraph.js +28 -12
  432. package/lib/optimize/InnerGraphPlugin.js +23 -18
  433. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  434. package/lib/optimize/MangleExportsPlugin.js +7 -8
  435. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  436. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  437. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  438. package/lib/optimize/RealContentHashPlugin.js +10 -6
  439. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  440. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  441. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  442. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  443. package/lib/optimize/SplitChunksPlugin.js +86 -24
  444. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  445. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  446. package/lib/performance/BroadContextsPlugin.js +142 -0
  447. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  448. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  449. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  450. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  451. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  452. package/lib/performance/DynamicExportsPlugin.js +120 -0
  453. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  454. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  455. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  456. package/lib/performance/EvalUsagePlugin.js +115 -0
  457. package/lib/performance/HotspotsPlugin.js +296 -0
  458. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  459. package/lib/performance/LargeModulesPlugin.js +126 -0
  460. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  461. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  462. package/lib/performance/MixedExportsPlugin.js +136 -0
  463. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  464. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  465. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  466. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  467. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  468. package/lib/performance/SizeLimitsPlugin.js +139 -7
  469. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  470. package/lib/performance/TinyChunksPlugin.js +128 -0
  471. package/lib/performance/TopLevelThisPlugin.js +208 -0
  472. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  473. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  474. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  475. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  476. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  477. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  478. package/lib/performance/getModuleSize.js +22 -0
  479. package/lib/performance/getSourceModules.js +22 -0
  480. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  481. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  482. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  483. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  484. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  485. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ResourceHintPlugin.js +295 -78
  487. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  488. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  489. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  490. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  491. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  492. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  493. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  494. package/lib/rules/RuleSetCompiler.js +146 -12
  495. package/lib/rules/UseEffectRulePlugin.js +18 -11
  496. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  497. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  498. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  499. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  500. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  501. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  502. package/lib/runtime/CompatRuntimeModule.js +5 -3
  503. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  504. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  505. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  506. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  507. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  508. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  509. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  510. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  511. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  512. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  513. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  514. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  515. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  516. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  517. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  518. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  519. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  520. package/lib/runtime/NonceRuntimeModule.js +10 -0
  521. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  522. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  523. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  524. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  525. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  526. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  527. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  528. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  529. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  530. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  531. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  532. package/lib/runtime/baseUri.js +63 -0
  533. package/lib/schemes/DataUriPlugin.js +1 -1
  534. package/lib/schemes/FileUriPlugin.js +1 -1
  535. package/lib/schemes/HttpUriPlugin.js +24 -15
  536. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  537. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  538. package/lib/serialization/BinaryMiddleware.js +4 -4
  539. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  540. package/lib/serialization/FileMiddleware.js +7 -7
  541. package/lib/serialization/ObjectMiddleware.js +139 -114
  542. package/lib/serialization/PlainObjectSerializer.js +19 -16
  543. package/lib/sharing/ConsumeSharedModule.js +30 -21
  544. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  545. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  546. package/lib/sharing/ProvideSharedModule.js +25 -16
  547. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  548. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  549. package/lib/sharing/SharePlugin.js +17 -5
  550. package/lib/sharing/ShareRuntimeModule.js +4 -4
  551. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  552. package/lib/sharing/utils.js +1 -3
  553. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  554. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  555. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  556. package/lib/stats/StatsFactory.js +25 -26
  557. package/lib/stats/StatsPrinter.js +16 -12
  558. package/lib/typescript/TypeScriptPlugin.js +12 -14
  559. package/lib/url/URLParserPlugin.js +26 -13
  560. package/lib/util/AsyncQueue.js +4 -3
  561. package/lib/util/Hash.js +5 -1
  562. package/lib/util/LazySet.js +35 -22
  563. package/lib/util/LocConverter.js +36 -13
  564. package/lib/util/SourceProcessor.js +1050 -24
  565. package/lib/util/StringXor.js +1 -1
  566. package/lib/util/chainedImports.js +9 -5
  567. package/lib/util/cleverMerge.js +1 -1
  568. package/lib/util/comparators.js +45 -14
  569. package/lib/util/concatenate.js +203 -77
  570. package/lib/util/conventions.js +5 -1
  571. package/lib/util/createHash.js +2 -2
  572. package/lib/util/createHooksRegistry.js +8 -10
  573. package/lib/util/dataURL.js +225 -1
  574. package/lib/util/extractSourceMap.js +4 -3
  575. package/lib/util/findCaseMismatch.js +139 -0
  576. package/lib/util/formatLocation.js +1 -2
  577. package/lib/util/fs.js +22 -5
  578. package/lib/util/globUtils.js +298 -24
  579. package/lib/util/hash/BatchedHash.js +5 -1
  580. package/lib/util/hash/BulkUpdateHash.js +5 -1
  581. package/lib/util/hash/DebugHash.js +5 -1
  582. package/lib/util/hash/hash-digest.js +6 -2
  583. package/lib/util/identifier.js +4 -0
  584. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  585. package/lib/util/internalSerializables.js +6 -0
  586. package/lib/util/lazyModule.js +56 -0
  587. package/lib/util/makeSerializable.js +7 -3
  588. package/lib/util/matchAlias.js +25 -0
  589. package/lib/util/mimeTypes.js +11 -5
  590. package/lib/util/nonNumericOnlyHash.js +4 -3
  591. package/lib/util/parseJson.js +5 -3
  592. package/lib/util/preloadModuleType.js +32 -0
  593. package/lib/util/registerExternalSerializer.js +7 -5
  594. package/lib/util/runtime.js +2 -2
  595. package/lib/util/semver.js +1 -1
  596. package/lib/util/serialization.js +28 -28
  597. package/lib/util/source.js +2 -2
  598. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  599. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  600. package/lib/wasm/wasmModuleFilename.js +54 -0
  601. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  602. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  603. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  604. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  605. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  606. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  607. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  608. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  609. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  610. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  611. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  612. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  613. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  614. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  615. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  616. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  617. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  618. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  619. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  620. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  621. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  622. package/lib/web/JsonpTemplatePlugin.js +2 -2
  623. package/lib/webpack.js +22 -11
  624. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  625. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  626. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  627. package/module.d.ts +1 -0
  628. package/package.json +32 -25
  629. package/schemas/WebpackOptions.check.js +1 -1
  630. package/schemas/WebpackOptions.json +670 -36
  631. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  632. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  634. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  635. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  636. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  637. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  639. package/types.d.ts +3144 -454
  640. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -6,9 +6,13 @@
6
6
  "use strict";
7
7
 
8
8
  const { pathToFileURL } = require("url");
9
- const LoaderLoadingError = require("../errors/LoaderLoadingError");
9
+ const memoize = require("../util/memoize");
10
10
 
11
- /** @typedef {import("./LoaderRunner").LoaderObject} LoaderObject */
11
+ const getLoaderLoadingError = memoize(() =>
12
+ require("../errors/LoaderLoadingError")
13
+ );
14
+
15
+ /** @import { LoaderObject } from "./LoaderRunner" */
12
16
 
13
17
  /**
14
18
  * Lazily-compiled dynamic `import()`. Built on first use so this file still
@@ -26,7 +30,7 @@ let importModule;
26
30
  function handleResult(loader, module, callback) {
27
31
  if (typeof module !== "function" && typeof module !== "object") {
28
32
  return callback(
29
- new LoaderLoadingError(
33
+ new (getLoaderLoadingError())(
30
34
  `Module '${loader.path}' is not a loader (export function or es6 module)`
31
35
  )
32
36
  );
@@ -41,7 +45,7 @@ function handleResult(loader, module, callback) {
41
45
  typeof loader.pitch !== "function"
42
46
  ) {
43
47
  return callback(
44
- new LoaderLoadingError(
48
+ new (getLoaderLoadingError())(
45
49
  `Module '${loader.path}' is not a loader (must have normal or pitch function)`
46
50
  )
47
51
  );
@@ -7,10 +7,13 @@
7
7
 
8
8
  const { LogType } = require("./Logger");
9
9
 
10
- /** @typedef {import("../../declarations/WebpackOptions").FilterItemTypes} FilterItemTypes */
11
- /** @typedef {import("../../declarations/WebpackOptions").FilterTypes} FilterTypes */
12
- /** @typedef {import("./Logger").LogTypeEnum} LogTypeEnum */
13
- /** @typedef {import("./Logger").Args} Args */
10
+ /**
11
+ * @import {
12
+ * FilterItemTypes,
13
+ * FilterTypes
14
+ * } from "../../declarations/WebpackOptions"
15
+ */
16
+ /** @import { LogTypeEnum, Args } from "./Logger" */
14
17
 
15
18
  /** @typedef {(item: string) => boolean} FilterFunction */
16
19
  /** @typedef {(value: string, type: LogTypeEnum, args?: Args) => void} LoggingFunction */
@@ -8,9 +8,9 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const StartupChunkDependenciesPlugin = require("../runtime/StartupChunkDependenciesPlugin");
10
10
 
11
- /** @typedef {import("../Chunk")} Chunk */
12
- /** @typedef {import("../Compiler")} Compiler */
13
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
11
+ /** @import Chunk from "../Chunk" */
12
+ /** @import Compiler from "../Compiler" */
13
+ /** @import { RuntimeRequirements } from "../Module" */
14
14
 
15
15
  /**
16
16
  * Defines the common js chunk loading plugin options type used by this module.
@@ -71,30 +71,44 @@ class CommonJsChunkLoadingPlugin {
71
71
  const handler = (chunk, set) => {
72
72
  if (onceForChunkSet.has(chunk)) return;
73
73
  onceForChunkSet.add(chunk);
74
+ if (!isEnabledForChunk(chunk)) return;
75
+ compilation.addRuntimeModule(chunk, new ChunkLoadingRuntimeModule(set));
76
+ };
77
+ /**
78
+ * Installing a chunk is the only part that writes the module factories and
79
+ * looks a chunk id up; a base uri or `onChunksLoaded` comes without either.
80
+ * Kept off `handler`, which runs once per chunk and so cannot see which of the
81
+ * requirements below the chunk ends up with.
82
+ * @param {Chunk} chunk chunk
83
+ * @param {RuntimeRequirements} set runtime requirements
84
+ */
85
+ const installHandler = (chunk, set) => {
74
86
  if (!isEnabledForChunk(chunk)) return;
75
87
  set.add(RuntimeGlobals.moduleFactoriesAddOnly);
76
88
  set.add(RuntimeGlobals.hasOwnProperty);
77
- compilation.addRuntimeModule(chunk, new ChunkLoadingRuntimeModule(set));
78
89
  };
79
90
 
80
- compilation.hooks.runtimeRequirementInTree
81
- .for(RuntimeGlobals.ensureChunkHandlers)
82
- .tap(PLUGIN_NAME, handler);
83
- compilation.hooks.runtimeRequirementInTree
84
- .for(RuntimeGlobals.hmrDownloadUpdateHandlers)
85
- .tap(PLUGIN_NAME, handler);
86
- compilation.hooks.runtimeRequirementInTree
87
- .for(RuntimeGlobals.hmrDownloadManifest)
88
- .tap(PLUGIN_NAME, handler);
89
- compilation.hooks.runtimeRequirementInTree
90
- .for(RuntimeGlobals.baseURI)
91
- .tap(PLUGIN_NAME, handler);
92
- compilation.hooks.runtimeRequirementInTree
93
- .for(RuntimeGlobals.externalInstallChunk)
94
- .tap(PLUGIN_NAME, handler);
95
- compilation.hooks.runtimeRequirementInTree
96
- .for(RuntimeGlobals.onChunksLoaded)
97
- .tap(PLUGIN_NAME, handler);
91
+ for (const requirement of [
92
+ RuntimeGlobals.ensureChunkHandlers,
93
+ RuntimeGlobals.hmrDownloadUpdateHandlers,
94
+ RuntimeGlobals.hmrDownloadManifest,
95
+ RuntimeGlobals.baseURI,
96
+ RuntimeGlobals.externalInstallChunk,
97
+ RuntimeGlobals.onChunksLoaded
98
+ ]) {
99
+ compilation.hooks.runtimeRequirementInTree
100
+ .for(requirement)
101
+ .tap(PLUGIN_NAME, handler);
102
+ }
103
+ for (const requirement of [
104
+ RuntimeGlobals.ensureChunkHandlers,
105
+ RuntimeGlobals.externalInstallChunk,
106
+ RuntimeGlobals.hmrDownloadUpdateHandlers
107
+ ]) {
108
+ compilation.hooks.runtimeRequirementInTree
109
+ .for(requirement)
110
+ .tap(PLUGIN_NAME, installHandler);
111
+ }
98
112
 
99
113
  compilation.hooks.runtimeRequirementInTree
100
114
  .for(RuntimeGlobals.ensureChunkHandlers)
@@ -11,9 +11,13 @@ const createConsoleLogger = require("../logging/createConsoleLogger");
11
11
  const NodeWatchFileSystem = require("./NodeWatchFileSystem");
12
12
  const nodeConsole = require("./nodeConsole");
13
13
 
14
- /** @typedef {import("../../declarations/WebpackOptions").InfrastructureLogging} InfrastructureLogging */
15
- /** @typedef {import("../Compiler")} Compiler */
16
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
14
+ /**
15
+ * @import {
16
+ * InfrastructureLogging
17
+ * } from "../../declarations/WebpackOptions"
18
+ */
19
+ /** @import Compiler from "../Compiler" */
20
+ /** @import { InputFileSystem } from "../util/fs" */
17
21
 
18
22
  /**
19
23
  * Defines the node environment plugin options type used by this module.
@@ -62,6 +66,16 @@ class NodeEnvironmentPlugin {
62
66
  compiler.outputFileSystem = fs;
63
67
  compiler.intermediateFileSystem = fs;
64
68
  compiler.watchFileSystem = new NodeWatchFileSystem(inputFileSystem);
69
+ // Symmetric to the beforeRun purge below: the stat/readdir/readFile caches
70
+ // would otherwise outlive `close()` for as long as the compiler is held.
71
+ compiler.hooks.shutdown.tap(PLUGIN_NAME, () => {
72
+ if (
73
+ compiler.inputFileSystem === inputFileSystem &&
74
+ inputFileSystem.purge
75
+ ) {
76
+ inputFileSystem.purge();
77
+ }
78
+ });
65
79
  compiler.hooks.beforeRun.tap(PLUGIN_NAME, (compiler) => {
66
80
  if (
67
81
  compiler.inputFileSystem === inputFileSystem &&
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../Compiler")} Compiler */
8
+ /** @import Compiler from "../Compiler" */
9
9
 
10
10
  class NodeSourcePlugin {
11
11
  /**
@@ -8,8 +8,8 @@
8
8
  const ExternalsPlugin = require("../ExternalsPlugin");
9
9
  const { builtins } = require("./nodeBuiltins");
10
10
 
11
- /** @typedef {import("../../declarations/WebpackOptions").ExternalsType} ExternalsType */
12
- /** @typedef {import("../Compiler")} Compiler */
11
+ /** @import { ExternalsType } from "../../declarations/WebpackOptions" */
12
+ /** @import Compiler from "../Compiler" */
13
13
 
14
14
  class NodeTargetPlugin {
15
15
  /**
@@ -39,5 +39,6 @@ class NodeTargetPlugin {
39
39
  }
40
40
  }
41
41
 
42
+ NodeTargetPlugin.builtins = builtins;
43
+
42
44
  module.exports = NodeTargetPlugin;
43
- module.exports.builtins = builtins;
@@ -8,7 +8,7 @@
8
8
  const CommonJsChunkFormatPlugin = require("../javascript/CommonJsChunkFormatPlugin");
9
9
  const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin");
10
10
 
11
- /** @typedef {import("../Compiler")} Compiler */
11
+ /** @import Compiler from "../Compiler" */
12
12
 
13
13
  /**
14
14
  * Represents the node template plugin runtime component.
@@ -6,15 +6,75 @@
6
6
  "use strict";
7
7
 
8
8
  const util = require("util");
9
- const Watchpack = require("watchpack");
9
+ const memoize = require("../util/memoize");
10
+
11
+ // watchpack is only reachable from `watch`, so non-watch builds never load it
12
+ const getWatchpack = memoize(() => require("watchpack"));
10
13
 
11
14
  /** @typedef {InstanceType<import("watchpack")>} Watchpack */
12
- /** @typedef {import("watchpack").TimeInfoEntries} TimeInfoEntries */
13
- /** @typedef {import("watchpack").WatchOptions} WatchOptions */
14
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
15
- /** @typedef {import("../util/fs").WatchMethod} WatchMethod */
16
- /** @typedef {import("../util/fs").Changes} Changes */
17
- /** @typedef {import("../util/fs").Removals} Removals */
15
+ /** @import { TimeInfoEntries, WatchOptions } from "watchpack" */
16
+ /**
17
+ * @import {
18
+ * InputFileSystem,
19
+ * WatchMethod,
20
+ * Changes,
21
+ * Removals
22
+ * } from "../util/fs"
23
+ */
24
+
25
+ // Watchpack pools DirectoryWatchers per options object identity; interning by
26
+ // value lets a MultiCompiler's children share one pool instead of one scan each.
27
+ /** @type {Map<string, WatchOptions>} */
28
+ const canonicalWatchOptions = new Map();
29
+ /** @type {WeakMap<RegExp, string>} */
30
+ const regExpKeys = new WeakMap();
31
+ let nextRegExpKey = 0;
32
+
33
+ // A RegExp keys by reference, so two configs spelling the same one inline do
34
+ // not share a pool.
35
+ /**
36
+ * @param {WatchOptions["ignored"]} ignored the `ignored` option
37
+ * @returns {string} key describing it, or "" when it cannot be keyed
38
+ */
39
+ const ignoredKey = (ignored) => {
40
+ if (ignored === undefined || ignored === null) return "-";
41
+ if (typeof ignored === "string") return `s${ignored}`;
42
+ if (Array.isArray(ignored)) return `a${JSON.stringify(ignored)}`;
43
+ if (!(ignored instanceof RegExp)) return "";
44
+ let key = regExpKeys.get(ignored);
45
+ if (key === undefined) {
46
+ key = `r${nextRegExpKey++}`;
47
+ regExpKeys.set(ignored, key);
48
+ }
49
+ return key;
50
+ };
51
+
52
+ // Snapshot rather than keep the caller's object: mutating it later would hand
53
+ // the next caller options it never asked for.
54
+ /**
55
+ * @param {WatchOptions} options watch options
56
+ * @returns {WatchOptions} a shared object equal to `options`, or `options`
57
+ */
58
+ const getCanonicalWatchOptions = (options) => {
59
+ const ignored = ignoredKey(options.ignored);
60
+ if (ignored === "") return options;
61
+ const key = `${options.aggregateTimeout}|${Boolean(
62
+ options.followSymlinks
63
+ )}|${options.poll}|${ignored}`;
64
+ const canonical = canonicalWatchOptions.get(key);
65
+ if (canonical !== undefined) return canonical;
66
+ /** @type {WatchOptions} */
67
+ const snapshot = {
68
+ aggregateTimeout: options.aggregateTimeout,
69
+ followSymlinks: options.followSymlinks,
70
+ ignored: Array.isArray(options.ignored)
71
+ ? [...options.ignored]
72
+ : options.ignored,
73
+ poll: options.poll
74
+ };
75
+ canonicalWatchOptions.set(key, snapshot);
76
+ return snapshot;
77
+ };
18
78
 
19
79
  class NodeWatchFileSystem {
20
80
  /**
@@ -28,8 +88,9 @@ class NodeWatchFileSystem {
28
88
  this.watcherOptions = {
29
89
  aggregateTimeout: 0
30
90
  };
91
+ // `watch` replaces this with a watcher built from its own options
31
92
  /** @type {Watchpack | null} */
32
- this.watcher = new Watchpack(this.watcherOptions);
93
+ this.watcher = null;
33
94
  }
34
95
 
35
96
  /** @type {WatchMethod} */
@@ -64,7 +125,7 @@ class NodeWatchFileSystem {
64
125
  throw new Error("Invalid arguments: 'callbackUndelayed'");
65
126
  }
66
127
  const oldWatcher = this.watcher;
67
- this.watcher = new Watchpack(options);
128
+ this.watcher = new (getWatchpack())(getCanonicalWatchOptions(options));
68
129
 
69
130
  if (callbackUndelayed) {
70
131
  this.watcher.once("change", callbackUndelayed);
@@ -10,19 +10,16 @@ const Template = require("../Template");
10
10
  const {
11
11
  generateJavascriptHMR
12
12
  } = require("../hmr/JavascriptHotModuleReplacementHelper");
13
- const {
14
- chunkHasJs,
15
- getChunkFilenameTemplate
16
- } = require("../javascript/JavascriptModulesPlugin");
13
+ const { chunkHasJs } = require("../javascript/JavascriptModulesPlugin");
17
14
  const { getInitialChunkIds } = require("../javascript/StartupHelpers");
15
+ const { renderBaseUri } = require("../runtime/baseUri");
18
16
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
19
- const { getUndoPath } = require("../util/identifier");
20
17
 
21
- /** @typedef {import("../Chunk")} Chunk */
22
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
23
- /** @typedef {import("../Compilation")} Compilation */
24
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
25
- /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
18
+ /** @import Chunk from "../Chunk" */
19
+ /** @import ChunkGraph from "../ChunkGraph" */
20
+ /** @import Compilation from "../Compilation" */
21
+ /** @import RuntimeTemplate from "../RuntimeTemplate" */
22
+ /** @import { ReadOnlyRuntimeRequirements } from "../Module" */
26
23
 
27
24
  class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
28
25
  /**
@@ -45,15 +42,14 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
45
42
  */
46
43
  _generateBaseUri(chunk, rootOutputDir, runtimeTemplate) {
47
44
  const options = chunk.getEntryOptions();
48
- if (options && options.baseUri) {
49
- return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
50
- }
51
-
52
- return `${RuntimeGlobals.baseURI} = require(${runtimeTemplate.renderNodePrefixForCoreModule("url")}).pathToFileURL(${
53
- rootOutputDir
54
- ? `__dirname + ${JSON.stringify(`/${rootOutputDir}`)}`
55
- : "__filename"
56
- });`;
45
+ return renderBaseUri(
46
+ options ? options.baseUri : undefined,
47
+ `require(${runtimeTemplate.renderNodePrefixForCoreModule("url")}).pathToFileURL(${
48
+ rootOutputDir
49
+ ? `__dirname + ${JSON.stringify(`/${rootOutputDir}`)}`
50
+ : "__filename"
51
+ })`
52
+ );
57
53
  }
58
54
 
59
55
  /**
@@ -86,18 +82,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
86
82
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
87
83
  const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
88
84
 
89
- const outputName = compilation.getPath(
90
- getChunkFilenameTemplate(chunk, compilation.outputOptions),
91
- {
92
- chunk,
93
- contentHashType: "javascript"
94
- }
95
- );
96
- const rootOutputDir = getUndoPath(
97
- outputName,
98
- compilation.outputOptions.path,
99
- false
100
- );
85
+ const rootOutputDir = runtimeTemplate.chunkRootOutputDir(chunk, false);
101
86
 
102
87
  const stateExpression = withHmr
103
88
  ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_readFileVm`
@@ -108,18 +93,30 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
108
93
  )
109
94
  )}\n}`;
110
95
 
96
+ // Every part below that reads the table. A chunk asking only for `.b` gets this
97
+ // module for the base uri alone, and then has nothing to look up.
98
+ const withInstalledChunks =
99
+ withOnChunkLoad || withLoading || withExternalInstallChunk || withHmr;
100
+
111
101
  return Template.asString([
112
102
  withBaseURI
113
103
  ? this._generateBaseUri(chunk, rootOutputDir, runtimeTemplate)
114
104
  : "// no baseURI",
115
105
  "",
116
- "// object to store loaded chunks",
117
- '// "0" means "already loaded", Promise means loading',
118
- `var installedChunks = ${
119
- stateExpression
120
- ? runtimeTemplate.assignOr(stateExpression, installedChunksObject)
121
- : installedChunksObject
122
- };`,
106
+ withInstalledChunks
107
+ ? Template.asString([
108
+ "// object to store loaded chunks",
109
+ '// "0" means "already loaded", Promise means loading',
110
+ `var installedChunks = ${
111
+ stateExpression
112
+ ? runtimeTemplate.assignOr(
113
+ stateExpression,
114
+ installedChunksObject
115
+ )
116
+ : installedChunksObject
117
+ };`
118
+ ])
119
+ : "// no installed chunks",
123
120
  "",
124
121
  withOnChunkLoad
125
122
  ? `${
@@ -8,20 +8,14 @@
8
8
  const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const Template = require("../Template");
11
- const { getPresentKinds } = require("../TemplatedPathPlugin");
11
+ const { usesFullHashDigest } = require("../TemplatedPathPlugin");
12
+ const { needsRuntimeFullHash } = require("../wasm/wasmModuleFilename");
12
13
  const AsyncWasmCompileRuntimeModule = require("../wasm-async/AsyncWasmCompileRuntimeModule");
13
14
  const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
14
15
 
15
- /** @typedef {import("../Chunk")} Chunk */
16
- /** @typedef {import("../Compiler")} Compiler */
17
-
18
- /**
19
- * The wasm runtime inlines `[fullhash]` as a runtime `getFullHash()` call, so
20
- * that runtime module must be requested (`[hash]` is the per-module hash here).
21
- * @param {string} filename `output.webassemblyModuleFilename`
22
- * @returns {boolean} whether it references the compilation `[fullhash]`
23
- */
24
- const usesFullHash = (filename) => getPresentKinds(filename).has("fullhash");
16
+ /** @import Chunk from "../Chunk" */
17
+ /** @import Compiler from "../Compiler" */
18
+ /** @import { RuntimeSpec } from "../util/runtime" */
25
19
 
26
20
  /**
27
21
  * Defines the read file compile async wasm plugin options type used by this module.
@@ -63,15 +57,32 @@ class ReadFileCompileAsyncWasmPlugin {
63
57
  return wasmLoading === "async-node";
64
58
  };
65
59
 
60
+ // The call site already passes a complete `URL` when it bakes one, and `readFile`
61
+ // takes one as-is. Read that per call: it depends on parse results, so it is not
62
+ // settled while the plugin is being applied.
66
63
  /**
67
- * @type {(path: string) => string} callback to generate code to load the wasm file
64
+ * @param {string} path rendered path to the wasm file
65
+ * @param {RuntimeSpec} runtime the runtime this loader serves
66
+ * @returns {string} the argument to hand the reader
67
+ */
68
+ const wasmUrlArg = (path, runtime) =>
69
+ compilation.runtimeTemplate.supportsAnalyzable(
70
+ "wasm",
71
+ undefined,
72
+ undefined,
73
+ runtime
74
+ )
75
+ ? path
76
+ : compilation.runtimeTemplate.importMetaUrl(path);
77
+ /**
78
+ * @type {(path: string, runtime: RuntimeSpec) => string} callback to generate code to load the wasm file
68
79
  */
69
80
  const generateLoadBinaryCode = this._import
70
- ? (path) =>
81
+ ? (path, runtime) =>
71
82
  Template.asString([
72
83
  "Promise.all([import('fs'), import('url')]).then(([{ readFile }, { URL }]) => new Promise((resolve, reject) => {",
73
84
  Template.indent([
74
- `readFile(new URL(${path}, ${compilation.outputOptions.importMetaName}.url), (err, buffer) => {`,
85
+ `readFile(${wasmUrlArg(path, runtime)}, (err, buffer) => {`,
75
86
  Template.indent([
76
87
  "if (err) return reject(err);",
77
88
  "",
@@ -94,8 +105,14 @@ class ReadFileCompileAsyncWasmPlugin {
94
105
  Template.indent([
95
106
  "try {",
96
107
  Template.indent([
97
- `var { readFile } = require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("fs")});`,
98
- `var { join } = require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("path")});`,
108
+ compilation.runtimeTemplate.destructureObject(
109
+ ["readFile"],
110
+ `require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("fs")})`
111
+ ),
112
+ compilation.runtimeTemplate.destructureObject(
113
+ ["join"],
114
+ `require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("path")})`
115
+ ),
99
116
  "",
100
117
  `readFile(join(__dirname, ${path}), function(err, buffer){`,
101
118
  Template.indent([
@@ -106,7 +123,11 @@ class ReadFileCompileAsyncWasmPlugin {
106
123
  Template.indent([
107
124
  // Return a real ArrayBuffer: some runtimes (e.g. Deno)
108
125
  // reject a Node Buffer view here as "not a buffer source".
109
- "arrayBuffer() { return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); }"
126
+ compilation.runtimeTemplate.method(
127
+ "arrayBuffer",
128
+ "",
129
+ "return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);"
130
+ )
110
131
  ]),
111
132
  "});"
112
133
  ]),
@@ -129,14 +150,30 @@ class ReadFileCompileAsyncWasmPlugin {
129
150
  ) {
130
151
  return;
131
152
  }
153
+ // A baked URL is already a literal, so nothing interpolates the name.
132
154
  if (
133
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
155
+ !compilation.runtimeTemplate.supportsAnalyzable(
156
+ "wasm",
157
+ undefined,
158
+ undefined,
159
+ chunk.runtime
160
+ ) &&
161
+ needsRuntimeFullHash(
162
+ /** @type {string} */ (
163
+ compilation.outputOptions.webassemblyModuleFilename
164
+ )
165
+ )
134
166
  ) {
135
167
  set.add(RuntimeGlobals.getFullHash);
136
168
  }
137
169
  compilation.addRuntimeModule(
138
170
  chunk,
139
171
  new AsyncWasmLoadingRuntimeModule({
172
+ fullHashDigest: usesFullHashDigest(
173
+ /** @type {string} */ (
174
+ compilation.outputOptions.webassemblyModuleFilename
175
+ )
176
+ ),
140
177
  generateLoadBinaryCode,
141
178
  supportsStreaming: false
142
179
  })
@@ -155,14 +192,30 @@ class ReadFileCompileAsyncWasmPlugin {
155
192
  ) {
156
193
  return;
157
194
  }
195
+ // A baked URL is already a literal, so nothing interpolates the name.
158
196
  if (
159
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
197
+ !compilation.runtimeTemplate.supportsAnalyzable(
198
+ "wasm",
199
+ undefined,
200
+ undefined,
201
+ chunk.runtime
202
+ ) &&
203
+ needsRuntimeFullHash(
204
+ /** @type {string} */ (
205
+ compilation.outputOptions.webassemblyModuleFilename
206
+ )
207
+ )
160
208
  ) {
161
209
  set.add(RuntimeGlobals.getFullHash);
162
210
  }
163
211
  compilation.addRuntimeModule(
164
212
  chunk,
165
213
  new AsyncWasmCompileRuntimeModule({
214
+ fullHashDigest: usesFullHashDigest(
215
+ /** @type {string} */ (
216
+ compilation.outputOptions.webassemblyModuleFilename
217
+ )
218
+ ),
166
219
  generateLoadBinaryCode,
167
220
  supportsStreaming: false
168
221
  })
@@ -8,19 +8,12 @@
8
8
  const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const Template = require("../Template");
11
- const { getPresentKinds } = require("../TemplatedPathPlugin");
11
+ const { usesFullHashDigest } = require("../TemplatedPathPlugin");
12
+ const { needsRuntimeFullHash } = require("../wasm/wasmModuleFilename");
12
13
  const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
13
14
 
14
- /** @typedef {import("../Chunk")} Chunk */
15
- /** @typedef {import("../Compiler")} Compiler */
16
-
17
- /**
18
- * The wasm runtime inlines `[fullhash]` as a runtime `getFullHash()` call, so
19
- * that runtime module must be requested (`[hash]` is the per-module hash here).
20
- * @param {string} filename `output.webassemblyModuleFilename`
21
- * @returns {boolean} whether it references the compilation `[fullhash]`
22
- */
23
- const usesFullHash = (filename) => getPresentKinds(filename).has("fullhash");
15
+ /** @import Chunk from "../Chunk" */
16
+ /** @import Compiler from "../Compiler" */
24
17
 
25
18
  /**
26
19
  * Defines the read file compile wasm plugin options type used by this module.
@@ -71,7 +64,7 @@ class ReadFileCompileWasmPlugin {
71
64
  Template.asString([
72
65
  "Promise.all([import('fs'), import('url')]).then(([{ readFile }, { URL }]) => new Promise((resolve, reject) => {",
73
66
  Template.indent([
74
- `readFile(new URL(${path}, ${compilation.outputOptions.importMetaName}.url), (err, buffer) => {`,
67
+ `readFile(${compilation.runtimeTemplate.importMetaUrl(path)}, (err, buffer) => {`,
75
68
  Template.indent([
76
69
  "if (err) return reject(err);",
77
70
  "",
@@ -92,8 +85,14 @@ class ReadFileCompileWasmPlugin {
92
85
  Template.asString([
93
86
  "new Promise(function (resolve, reject) {",
94
87
  Template.indent([
95
- `var { readFile } = require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("fs")});`,
96
- `var { join } = require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("path")});`,
88
+ compilation.runtimeTemplate.destructureObject(
89
+ ["readFile"],
90
+ `require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("fs")})`
91
+ ),
92
+ compilation.runtimeTemplate.destructureObject(
93
+ ["join"],
94
+ `require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("path")})`
95
+ ),
97
96
  "",
98
97
  "try {",
99
98
  Template.indent([
@@ -106,7 +105,11 @@ class ReadFileCompileWasmPlugin {
106
105
  Template.indent([
107
106
  // Return a real ArrayBuffer: some runtimes (e.g. Deno)
108
107
  // reject a Node Buffer view here as "not a buffer source".
109
- "arrayBuffer() { return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); }"
108
+ compilation.runtimeTemplate.method(
109
+ "arrayBuffer",
110
+ "",
111
+ "return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);"
112
+ )
110
113
  ]),
111
114
  "});"
112
115
  ]),
@@ -131,13 +134,22 @@ class ReadFileCompileWasmPlugin {
131
134
  }
132
135
  set.add(RuntimeGlobals.moduleCache);
133
136
  if (
134
- usesFullHash(compilation.outputOptions.webassemblyModuleFilename)
137
+ needsRuntimeFullHash(
138
+ /** @type {string} */ (
139
+ compilation.outputOptions.webassemblyModuleFilename
140
+ )
141
+ )
135
142
  ) {
136
143
  set.add(RuntimeGlobals.getFullHash);
137
144
  }
138
145
  compilation.addRuntimeModule(
139
146
  chunk,
140
147
  new WasmChunkLoadingRuntimeModule({
148
+ fullHashDigest: usesFullHashDigest(
149
+ /** @type {string} */ (
150
+ compilation.outputOptions.webassemblyModuleFilename
151
+ )
152
+ ),
141
153
  generateLoadBinaryCode,
142
154
  supportsStreaming: false,
143
155
  mangleImports: this.options.mangleImports,