@depup/webpack 5.109.0-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 (641) hide show
  1. package/README.md +7 -7
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +10 -10
  4. package/lib/APIPlugin.js +123 -17
  5. package/lib/AsyncDependenciesBlock.js +10 -7
  6. package/lib/AutomaticPrefetchPlugin.js +1 -1
  7. package/lib/BannerPlugin.js +10 -6
  8. package/lib/CacheFacade.js +6 -6
  9. package/lib/Chunk.js +14 -11
  10. package/lib/ChunkGraph.js +43 -32
  11. package/lib/ChunkGroup.js +7 -7
  12. package/lib/ChunkTemplate.js +35 -44
  13. package/lib/CircularModulesPlugin.js +205 -28
  14. package/lib/CleanPlugin.js +15 -16
  15. package/lib/CodeGenerationResults.js +11 -8
  16. package/lib/CompatibilityPlugin.js +38 -7
  17. package/lib/Compilation.js +709 -414
  18. package/lib/Compiler.js +69 -42
  19. package/lib/ConcatenationScope.js +117 -8
  20. package/lib/ConditionalInitFragment.js +3 -3
  21. package/lib/ConstPlugin.js +13 -11
  22. package/lib/ContextExclusionPlugin.js +1 -1
  23. package/lib/ContextModule.js +146 -54
  24. package/lib/ContextModuleFactory.js +46 -14
  25. package/lib/ContextReplacementPlugin.js +12 -14
  26. package/lib/DefinePlugin.js +168 -57
  27. package/lib/DependenciesBlock.js +9 -6
  28. package/lib/Dependency.js +36 -16
  29. package/lib/DependencyTemplate.js +11 -12
  30. package/lib/DependencyTemplates.js +3 -3
  31. package/lib/DotenvPlugin.js +50 -13
  32. package/lib/DynamicEntryPlugin.js +8 -4
  33. package/lib/EntryOptionPlugin.js +8 -4
  34. package/lib/EntryPlugin.js +2 -2
  35. package/lib/Entrypoint.js +6 -2
  36. package/lib/EnvironmentPlugin.js +2 -2
  37. package/lib/EvalDevToolModulePlugin.js +8 -4
  38. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  39. package/lib/ExportsInfo.js +123 -19
  40. package/lib/ExportsInfoApiPlugin.js +2 -4
  41. package/lib/ExternalModule.js +242 -84
  42. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  43. package/lib/ExternalsPlugin.js +10 -6
  44. package/lib/FileSystemInfo.js +116 -42
  45. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  46. package/lib/FlagDependencyExportsPlugin.js +76 -19
  47. package/lib/FlagDependencyUsagePlugin.js +63 -57
  48. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  49. package/lib/Generator.js +36 -15
  50. package/lib/HotModuleReplacementPlugin.js +16 -44
  51. package/lib/IgnorePlugin.js +8 -4
  52. package/lib/IgnoreWarningsPlugin.js +2 -2
  53. package/lib/InitFragment.js +28 -36
  54. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  55. package/lib/LazyBarrel.js +3 -4
  56. package/lib/LibraryTemplatePlugin.js +10 -6
  57. package/lib/LoaderOptionsPlugin.js +7 -3
  58. package/lib/LoaderTargetPlugin.js +1 -1
  59. package/lib/MainTemplate.js +49 -42
  60. package/lib/ManifestPlugin.js +12 -11
  61. package/lib/Module.js +62 -33
  62. package/lib/ModuleFactory.js +3 -3
  63. package/lib/ModuleFilenameHelpers.js +22 -6
  64. package/lib/ModuleGraph.js +195 -21
  65. package/lib/ModuleGraphConnection.js +6 -13
  66. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  67. package/lib/ModuleTemplate.js +62 -63
  68. package/lib/MultiCompiler.js +130 -64
  69. package/lib/MultiStats.js +40 -9
  70. package/lib/MultiWatching.js +3 -3
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +29 -19
  73. package/lib/NormalModule.js +221 -156
  74. package/lib/NormalModuleFactory.js +563 -112
  75. package/lib/NormalModuleReplacementPlugin.js +5 -8
  76. package/lib/NullFactory.js +6 -2
  77. package/lib/OptionsApply.js +7 -3
  78. package/lib/Parser.js +7 -3
  79. package/lib/PlatformPlugin.js +2 -2
  80. package/lib/PrefetchPlugin.js +1 -1
  81. package/lib/ProgressPlugin.js +16 -13
  82. package/lib/ProvidePlugin.js +3 -5
  83. package/lib/RawModule.js +25 -17
  84. package/lib/RecordIdsPlugin.js +3 -3
  85. package/lib/RequestShortener.js +1 -1
  86. package/lib/ResolverFactory.js +2 -2
  87. package/lib/RuntimeGlobals.js +22 -10
  88. package/lib/RuntimeModule.js +29 -19
  89. package/lib/RuntimePlugin.js +346 -256
  90. package/lib/RuntimeTemplate.js +2792 -352
  91. package/lib/SelfModuleFactory.js +7 -3
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  93. package/lib/SourceMapDevToolPlugin.js +30 -20
  94. package/lib/Stats.js +3 -4
  95. package/lib/Template.js +55 -25
  96. package/lib/TemplatedPathPlugin.js +96 -14
  97. package/lib/UseStrictPlugin.js +4 -6
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  99. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  100. package/lib/WarnNoModeSetPlugin.js +1 -1
  101. package/lib/WatchIgnorePlugin.js +8 -6
  102. package/lib/Watching.js +8 -8
  103. package/lib/WebpackIsIncludedPlugin.js +2 -4
  104. package/lib/WebpackOptionsApply.js +308 -18
  105. package/lib/WebpackOptionsDefaulter.js +6 -2
  106. package/lib/asset/AssetBytesGenerator.js +12 -10
  107. package/lib/asset/AssetBytesParser.js +2 -4
  108. package/lib/asset/AssetGenerator.js +188 -95
  109. package/lib/asset/AssetModule.js +7 -3
  110. package/lib/asset/AssetModulesPlugin.js +110 -38
  111. package/lib/asset/AssetParser.js +9 -7
  112. package/lib/asset/AssetSourceGenerator.js +60 -13
  113. package/lib/asset/AssetSourceParser.js +2 -4
  114. package/lib/asset/RawDataUrlModule.js +24 -16
  115. package/lib/asset/WebManifestGenerator.js +8 -10
  116. package/lib/asset/WebManifestParser.js +24 -10
  117. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  118. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  119. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  120. package/lib/async-modules/isGeneratorLowered.js +4 -4
  121. package/lib/buildChunkGraph.js +36 -27
  122. package/lib/bun/BunTargetPlugin.js +1 -1
  123. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  124. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  125. package/lib/cache/IdleFileCachePlugin.js +2 -2
  126. package/lib/cache/MemoryCachePlugin.js +18 -10
  127. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  128. package/lib/cache/PackFileCacheStrategy.js +289 -28
  129. package/lib/cache/ResolverCachePlugin.js +38 -18
  130. package/lib/cache/getLazyHashedEtag.js +1 -2
  131. package/lib/cache/mergeEtags.js +1 -1
  132. package/lib/cli.js +1 -3
  133. package/lib/config/browserslistTargetHandler.js +41 -5
  134. package/lib/config/defaults.js +282 -81
  135. package/lib/config/defineConfig.js +10 -2
  136. package/lib/config/getClaimedAssetTypes.js +65 -0
  137. package/lib/config/normalization.js +36 -16
  138. package/lib/config/target.js +46 -3
  139. package/lib/container/ContainerEntryDependency.js +1 -1
  140. package/lib/container/ContainerEntryModule.js +24 -15
  141. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  142. package/lib/container/ContainerPlugin.js +9 -10
  143. package/lib/container/ContainerReferencePlugin.js +6 -2
  144. package/lib/container/FallbackDependency.js +1 -1
  145. package/lib/container/FallbackModule.js +24 -17
  146. package/lib/container/FallbackModuleFactory.js +7 -3
  147. package/lib/container/HoistContainerReferencesPlugin.js +53 -66
  148. package/lib/container/ModuleFederationPlugin.js +7 -18
  149. package/lib/container/RemoteModule.js +27 -19
  150. package/lib/container/RemoteRuntimeModule.js +10 -8
  151. package/lib/container/moduleFederationHooks.js +32 -0
  152. package/lib/css/CssGenerator.js +178 -44
  153. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  154. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  155. package/lib/css/CssModule.js +10 -7
  156. package/lib/css/CssModulesPlugin.js +197 -106
  157. package/lib/css/CssParser.js +1248 -618
  158. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  159. package/lib/css/cssMinify.js +168 -0
  160. package/lib/css/data.js +5324 -0
  161. package/lib/css/syntax.js +10396 -952
  162. package/lib/debug/ProfilingPlugin.js +14 -9
  163. package/lib/deno/DenoTargetPlugin.js +1 -1
  164. package/lib/dependencies/AMDDefineDependency.js +112 -87
  165. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  166. package/lib/dependencies/AMDPlugin.js +9 -7
  167. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  168. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  169. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  170. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  171. package/lib/dependencies/AMDRequireDependency.js +8 -7
  172. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  173. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  174. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  175. package/lib/dependencies/CachedConstDependency.js +11 -8
  176. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  177. package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
  178. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  179. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  180. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  181. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  182. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  183. package/lib/dependencies/CommonJsPlugin.js +35 -6
  184. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  185. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  186. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  187. package/lib/dependencies/ConstDependency.js +8 -9
  188. package/lib/dependencies/ContextDependency.js +12 -8
  189. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  190. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  191. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  192. package/lib/dependencies/ContextElementDependency.js +31 -12
  193. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  194. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  195. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  196. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  197. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  198. package/lib/dependencies/CssImportDependency.js +18 -9
  199. package/lib/dependencies/CssUrlDependency.js +17 -13
  200. package/lib/dependencies/DllEntryDependency.js +1 -1
  201. package/lib/dependencies/DynamicExports.js +2 -2
  202. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  203. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  204. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  205. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  206. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  207. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  208. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  209. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  210. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
  211. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  212. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  213. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  214. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
  215. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  216. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  217. package/lib/dependencies/HarmonyExports.js +7 -4
  218. package/lib/dependencies/HarmonyImportDependency.js +28 -20
  219. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  220. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  221. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  222. package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
  223. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  224. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  225. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  226. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  227. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  228. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  229. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  230. package/lib/dependencies/ImportContextDependency.js +2 -2
  231. package/lib/dependencies/ImportDependency.js +24 -20
  232. package/lib/dependencies/ImportEagerDependency.js +6 -9
  233. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  234. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  235. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  236. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  237. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  238. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  239. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  241. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  242. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  243. package/lib/dependencies/ImportParserPlugin.js +49 -35
  244. package/lib/dependencies/ImportPhase.js +12 -5
  245. package/lib/dependencies/ImportPlugin.js +7 -3
  246. package/lib/dependencies/ImportWeakDependency.js +6 -9
  247. package/lib/dependencies/JsonExportsDependency.js +11 -7
  248. package/lib/dependencies/LoaderDependency.js +2 -2
  249. package/lib/dependencies/LoaderImportDependency.js +2 -2
  250. package/lib/dependencies/LoaderPlugin.js +11 -7
  251. package/lib/dependencies/LocalModuleDependency.js +5 -5
  252. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  253. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  254. package/lib/dependencies/ModuleDependency.js +9 -6
  255. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  256. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  257. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  258. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  259. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  260. package/lib/dependencies/NullDependency.js +3 -3
  261. package/lib/dependencies/ProvidedDependency.js +14 -10
  262. package/lib/dependencies/PureExpressionDependency.js +9 -10
  263. package/lib/dependencies/RequireContextDependency.js +2 -2
  264. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  265. package/lib/dependencies/RequireContextPlugin.js +8 -4
  266. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  267. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  268. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  269. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  270. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  271. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  272. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  273. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  274. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  275. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  276. package/lib/dependencies/RequireResolveDependency.js +4 -4
  277. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  278. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  279. package/lib/dependencies/StaticExportsDependency.js +2 -2
  280. package/lib/dependencies/SystemPlugin.js +10 -6
  281. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  282. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  283. package/lib/dependencies/URLContextDependency.js +2 -2
  284. package/lib/dependencies/URLDependency.js +110 -64
  285. package/lib/dependencies/URLPlugin.js +7 -3
  286. package/lib/dependencies/UnsupportedDependency.js +4 -4
  287. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  288. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  289. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  290. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  291. package/lib/dependencies/WorkerDependency.js +28 -22
  292. package/lib/dependencies/WorkletDependency.js +15 -14
  293. package/lib/dependencies/getFunctionExpression.js +8 -4
  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/DuplicateModulesWarning.js +45 -0
  316. package/lib/errors/DynamicExportsWarning.js +30 -0
  317. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  318. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  319. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  320. package/lib/errors/EvalUsageWarning.js +28 -0
  321. package/lib/errors/HookWebpackError.js +5 -5
  322. package/lib/errors/HotspotsWarning.js +57 -0
  323. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  324. package/lib/errors/InlinedAssetsWarning.js +36 -0
  325. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  326. package/lib/errors/LargeModulesWarning.js +45 -0
  327. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  328. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  329. package/lib/errors/MixedExportsWarning.js +41 -0
  330. package/lib/errors/ModuleDependencyError.js +13 -16
  331. package/lib/errors/ModuleDependencyWarning.js +5 -15
  332. package/lib/errors/ModuleHashingError.js +1 -1
  333. package/lib/errors/ModuleNotFoundError.js +2 -2
  334. package/lib/errors/ModuleParseError.js +1 -2
  335. package/lib/errors/ModuleRestoreError.js +1 -1
  336. package/lib/errors/ModuleStoreError.js +1 -1
  337. package/lib/errors/NodeStuffInWebError.js +1 -1
  338. package/lib/errors/OsDependentRuleWarning.js +31 -0
  339. package/lib/errors/PureAnnotationsWarning.js +36 -0
  340. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  341. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  342. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  343. package/lib/errors/TinyChunksWarning.js +40 -0
  344. package/lib/errors/TopLevelThisWarning.js +34 -0
  345. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  346. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  347. package/lib/errors/UnusedAliasesWarning.js +29 -0
  348. package/lib/errors/UnusedDefinesWarning.js +29 -0
  349. package/lib/errors/UnusedExternalsWarning.js +29 -0
  350. package/lib/errors/UnusedReexportsWarning.js +42 -0
  351. package/lib/errors/UnusedRuleWarning.js +29 -0
  352. package/lib/errors/WebpackError.js +9 -5
  353. package/lib/errors/deriveStackFromNestedError.js +90 -0
  354. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  355. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  356. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  357. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  358. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  359. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  360. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  361. package/lib/hmr/lazyCompilationBackend.js +28 -10
  362. package/lib/hmr/parserHooks.js +56 -0
  363. package/lib/html/HtmlGenerator.js +299 -79
  364. package/lib/html/HtmlModule.js +7 -3
  365. package/lib/html/HtmlModulesPlugin.js +312 -174
  366. package/lib/html/HtmlParser.js +31 -86
  367. package/lib/html/data.js +1928 -0
  368. package/lib/html/htmlMinify.js +288 -0
  369. package/lib/html/syntax.js +7819 -3331
  370. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  371. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  372. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  373. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  374. package/lib/ids/IdHelpers.js +31 -18
  375. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  376. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  377. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  378. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  379. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  380. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  381. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  382. package/lib/index.js +10 -0
  383. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  384. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  385. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  386. package/lib/javascript/ChunkHelpers.js +1 -1
  387. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  388. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  389. package/lib/javascript/JavascriptGenerator.js +65 -165
  390. package/lib/javascript/JavascriptModule.js +9 -3
  391. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  392. package/lib/javascript/JavascriptParser.js +291 -112
  393. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  394. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  395. package/lib/javascript/StartupHelpers.js +55 -9
  396. package/lib/javascript/syntax.js +3403 -300
  397. package/lib/json/JsonData.js +8 -4
  398. package/lib/json/JsonGenerator.js +38 -16
  399. package/lib/json/JsonModule.js +7 -3
  400. package/lib/json/JsonModulesPlugin.js +1 -1
  401. package/lib/json/JsonParser.js +5 -6
  402. package/lib/library/AbstractLibraryPlugin.js +20 -14
  403. package/lib/library/AmdLibraryPlugin.js +11 -7
  404. package/lib/library/AssignLibraryPlugin.js +19 -13
  405. package/lib/library/EnableLibraryPlugin.js +2 -2
  406. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  407. package/lib/library/JsonpLibraryPlugin.js +11 -7
  408. package/lib/library/ModuleLibraryPlugin.js +256 -64
  409. package/lib/library/SystemLibraryPlugin.js +12 -8
  410. package/lib/library/UmdLibraryPlugin.js +62 -25
  411. package/lib/loaders/LoaderRunner.js +14 -1
  412. package/lib/loaders/loadLoader.js +8 -4
  413. package/lib/logging/createConsoleLogger.js +7 -4
  414. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  415. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  416. package/lib/node/NodeSourcePlugin.js +1 -1
  417. package/lib/node/NodeTargetPlugin.js +4 -3
  418. package/lib/node/NodeTemplatePlugin.js +1 -1
  419. package/lib/node/NodeWatchFileSystem.js +70 -9
  420. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  421. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
  422. package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
  423. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  424. package/lib/node/nodeConsole.js +7 -3
  425. package/lib/optimize/AggressiveMergingPlugin.js +21 -17
  426. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  427. package/lib/optimize/ConcatenatedModule.js +996 -477
  428. package/lib/optimize/ConstExportsPlugin.js +11 -7
  429. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  430. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  431. package/lib/optimize/InlineExports.js +9 -5
  432. package/lib/optimize/InnerGraph.js +28 -12
  433. package/lib/optimize/InnerGraphPlugin.js +23 -18
  434. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  435. package/lib/optimize/MangleExportsPlugin.js +7 -8
  436. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  437. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  438. package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
  439. package/lib/optimize/RealContentHashPlugin.js +20 -13
  440. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  441. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  442. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  443. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  444. package/lib/optimize/SplitChunksPlugin.js +232 -68
  445. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  446. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  447. package/lib/performance/BroadContextsPlugin.js +142 -0
  448. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  449. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  450. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  451. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  452. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  453. package/lib/performance/DynamicExportsPlugin.js +120 -0
  454. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  455. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  456. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  457. package/lib/performance/EvalUsagePlugin.js +115 -0
  458. package/lib/performance/HotspotsPlugin.js +296 -0
  459. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  460. package/lib/performance/LargeModulesPlugin.js +126 -0
  461. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  462. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  463. package/lib/performance/MixedExportsPlugin.js +136 -0
  464. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  465. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  466. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  467. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  468. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  469. package/lib/performance/SizeLimitsPlugin.js +139 -7
  470. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  471. package/lib/performance/TinyChunksPlugin.js +128 -0
  472. package/lib/performance/TopLevelThisPlugin.js +208 -0
  473. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  474. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  475. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  476. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  477. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  478. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  479. package/lib/performance/getModuleSize.js +22 -0
  480. package/lib/performance/getSourceModules.js +22 -0
  481. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  482. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  483. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  484. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  485. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  487. package/lib/prefetch/ResourceHintPlugin.js +377 -136
  488. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  489. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  490. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  491. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  492. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  493. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  494. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  495. package/lib/rules/RuleSetCompiler.js +146 -12
  496. package/lib/rules/UseEffectRulePlugin.js +18 -11
  497. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  498. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  499. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  500. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  501. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  502. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  503. package/lib/runtime/CompatRuntimeModule.js +5 -3
  504. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  505. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  506. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  507. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  508. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  509. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  510. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  511. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  512. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  513. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  514. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  515. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  516. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  517. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  518. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  519. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  520. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  521. package/lib/runtime/NonceRuntimeModule.js +10 -0
  522. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  523. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  524. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  525. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  526. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  527. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  528. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  529. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  530. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  531. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  532. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  533. package/lib/runtime/baseUri.js +63 -0
  534. package/lib/schemes/DataUriPlugin.js +1 -1
  535. package/lib/schemes/FileUriPlugin.js +1 -1
  536. package/lib/schemes/HttpUriPlugin.js +24 -15
  537. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  538. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  539. package/lib/serialization/BinaryMiddleware.js +274 -942
  540. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  541. package/lib/serialization/FileMiddleware.js +305 -66
  542. package/lib/serialization/ObjectMiddleware.js +139 -114
  543. package/lib/serialization/PlainObjectSerializer.js +19 -16
  544. package/lib/sharing/ConsumeSharedModule.js +30 -21
  545. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  546. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  547. package/lib/sharing/ProvideSharedModule.js +25 -16
  548. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  549. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  550. package/lib/sharing/SharePlugin.js +17 -5
  551. package/lib/sharing/ShareRuntimeModule.js +4 -4
  552. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  553. package/lib/sharing/utils.js +1 -3
  554. package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
  555. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  556. package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
  557. package/lib/stats/StatsFactory.js +56 -35
  558. package/lib/stats/StatsPrinter.js +16 -12
  559. package/lib/typescript/TypeScriptPlugin.js +12 -14
  560. package/lib/url/URLParserPlugin.js +26 -13
  561. package/lib/util/AsyncQueue.js +4 -3
  562. package/lib/util/Hash.js +5 -1
  563. package/lib/util/LazySet.js +35 -22
  564. package/lib/util/LocConverter.js +36 -13
  565. package/lib/util/SourceProcessor.js +1050 -24
  566. package/lib/util/StringXor.js +1 -1
  567. package/lib/util/chainedImports.js +9 -5
  568. package/lib/util/cleverMerge.js +1 -1
  569. package/lib/util/comparators.js +45 -14
  570. package/lib/util/concatenate.js +203 -77
  571. package/lib/util/conventions.js +5 -1
  572. package/lib/util/createHash.js +2 -2
  573. package/lib/util/createHooksRegistry.js +8 -10
  574. package/lib/util/dataURL.js +225 -1
  575. package/lib/util/extractSourceMap.js +4 -3
  576. package/lib/util/findCaseMismatch.js +139 -0
  577. package/lib/util/formatLocation.js +1 -2
  578. package/lib/util/fs.js +22 -5
  579. package/lib/util/globUtils.js +298 -24
  580. package/lib/util/hash/BatchedHash.js +5 -1
  581. package/lib/util/hash/BulkUpdateHash.js +5 -1
  582. package/lib/util/hash/DebugHash.js +5 -1
  583. package/lib/util/hash/hash-digest.js +6 -2
  584. package/lib/util/identifier.js +25 -1
  585. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  586. package/lib/util/internalSerializables.js +6 -0
  587. package/lib/util/lazyModule.js +56 -0
  588. package/lib/util/makeSerializable.js +7 -3
  589. package/lib/util/matchAlias.js +25 -0
  590. package/lib/util/mimeTypes.js +11 -5
  591. package/lib/util/nonNumericOnlyHash.js +4 -3
  592. package/lib/util/parseJson.js +5 -3
  593. package/lib/util/preloadModuleType.js +32 -0
  594. package/lib/util/registerExternalSerializer.js +7 -5
  595. package/lib/util/runtime.js +2 -2
  596. package/lib/util/semver.js +1 -1
  597. package/lib/util/serialization.js +28 -28
  598. package/lib/util/source.js +2 -2
  599. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  600. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  601. package/lib/wasm/wasmModuleFilename.js +54 -0
  602. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  603. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  604. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  605. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  606. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  607. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  608. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  609. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  610. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  611. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  612. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  613. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  614. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  615. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  616. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  617. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  618. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  619. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  620. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  621. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  622. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  623. package/lib/web/JsonpTemplatePlugin.js +2 -2
  624. package/lib/webpack.js +22 -11
  625. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  626. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  627. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  628. package/module.d.ts +1 -0
  629. package/package.json +37 -30
  630. package/schemas/WebpackOptions.check.js +1 -1
  631. package/schemas/WebpackOptions.json +780 -91
  632. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  635. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  636. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  637. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  639. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  640. package/types.d.ts +4013 -738
  641. 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,21 +57,42 @@ 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.
63
+ /**
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);
66
77
  /**
67
- * @type {(path: string) => string} callback to generate code to load the wasm file
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
  "",
78
89
  "// Fake fetch response",
79
90
  "resolve({",
80
- Template.indent(["arrayBuffer() { return buffer; }"]),
91
+ Template.indent([
92
+ // Return a real ArrayBuffer: some runtimes (e.g. Deno)
93
+ // reject a Node Buffer view here as "not a buffer source".
94
+ "arrayBuffer() { return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength); }"
95
+ ]),
81
96
  "});"
82
97
  ]),
83
98
  "});"
@@ -90,8 +105,14 @@ class ReadFileCompileAsyncWasmPlugin {
90
105
  Template.indent([
91
106
  "try {",
92
107
  Template.indent([
93
- `var { readFile } = require(${compilation.runtimeTemplate.renderNodePrefixForCoreModule("fs")});`,
94
- `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
+ ),
95
116
  "",
96
117
  `readFile(join(__dirname, ${path}), function(err, buffer){`,
97
118
  Template.indent([
@@ -99,7 +120,15 @@ class ReadFileCompileAsyncWasmPlugin {
99
120
  "",
100
121
  "// Fake fetch response",
101
122
  "resolve({",
102
- Template.indent(["arrayBuffer() { return buffer; }"]),
123
+ Template.indent([
124
+ // Return a real ArrayBuffer: some runtimes (e.g. Deno)
125
+ // reject a Node Buffer view here as "not a buffer source".
126
+ compilation.runtimeTemplate.method(
127
+ "arrayBuffer",
128
+ "",
129
+ "return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);"
130
+ )
131
+ ]),
103
132
  "});"
104
133
  ]),
105
134
  "});"
@@ -121,14 +150,30 @@ class ReadFileCompileAsyncWasmPlugin {
121
150
  ) {
122
151
  return;
123
152
  }
153
+ // A baked URL is already a literal, so nothing interpolates the name.
124
154
  if (
125
- 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
+ )
126
166
  ) {
127
167
  set.add(RuntimeGlobals.getFullHash);
128
168
  }
129
169
  compilation.addRuntimeModule(
130
170
  chunk,
131
171
  new AsyncWasmLoadingRuntimeModule({
172
+ fullHashDigest: usesFullHashDigest(
173
+ /** @type {string} */ (
174
+ compilation.outputOptions.webassemblyModuleFilename
175
+ )
176
+ ),
132
177
  generateLoadBinaryCode,
133
178
  supportsStreaming: false
134
179
  })
@@ -147,14 +192,30 @@ class ReadFileCompileAsyncWasmPlugin {
147
192
  ) {
148
193
  return;
149
194
  }
195
+ // A baked URL is already a literal, so nothing interpolates the name.
150
196
  if (
151
- 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
+ )
152
208
  ) {
153
209
  set.add(RuntimeGlobals.getFullHash);
154
210
  }
155
211
  compilation.addRuntimeModule(
156
212
  chunk,
157
213
  new AsyncWasmCompileRuntimeModule({
214
+ fullHashDigest: usesFullHashDigest(
215
+ /** @type {string} */ (
216
+ compilation.outputOptions.webassemblyModuleFilename
217
+ )
218
+ ),
158
219
  generateLoadBinaryCode,
159
220
  supportsStreaming: false
160
221
  })