webpack 5.109.1 → 5.110.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 (639) hide show
  1. package/README.md +6 -0
  2. package/lib/APIPlugin.js +123 -17
  3. package/lib/AsyncDependenciesBlock.js +10 -7
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/BannerPlugin.js +10 -6
  6. package/lib/CacheFacade.js +6 -6
  7. package/lib/Chunk.js +14 -11
  8. package/lib/ChunkGraph.js +26 -17
  9. package/lib/ChunkGroup.js +7 -7
  10. package/lib/ChunkTemplate.js +35 -44
  11. package/lib/CircularModulesPlugin.js +205 -28
  12. package/lib/CleanPlugin.js +15 -16
  13. package/lib/CodeGenerationResults.js +11 -8
  14. package/lib/CompatibilityPlugin.js +7 -7
  15. package/lib/Compilation.js +700 -412
  16. package/lib/Compiler.js +69 -42
  17. package/lib/ConcatenationScope.js +117 -8
  18. package/lib/ConditionalInitFragment.js +3 -3
  19. package/lib/ConstPlugin.js +13 -11
  20. package/lib/ContextExclusionPlugin.js +1 -1
  21. package/lib/ContextModule.js +146 -54
  22. package/lib/ContextModuleFactory.js +46 -14
  23. package/lib/ContextReplacementPlugin.js +12 -14
  24. package/lib/DefinePlugin.js +131 -46
  25. package/lib/DependenciesBlock.js +9 -6
  26. package/lib/Dependency.js +36 -16
  27. package/lib/DependencyTemplate.js +11 -12
  28. package/lib/DependencyTemplates.js +3 -3
  29. package/lib/DotenvPlugin.js +50 -13
  30. package/lib/DynamicEntryPlugin.js +8 -4
  31. package/lib/EntryOptionPlugin.js +8 -4
  32. package/lib/EntryPlugin.js +2 -2
  33. package/lib/Entrypoint.js +6 -2
  34. package/lib/EnvironmentPlugin.js +2 -2
  35. package/lib/EvalDevToolModulePlugin.js +8 -4
  36. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  37. package/lib/ExportsInfo.js +101 -14
  38. package/lib/ExportsInfoApiPlugin.js +2 -4
  39. package/lib/ExternalModule.js +242 -84
  40. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  41. package/lib/ExternalsPlugin.js +10 -6
  42. package/lib/FileSystemInfo.js +27 -68
  43. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  44. package/lib/FlagDependencyExportsPlugin.js +76 -19
  45. package/lib/FlagDependencyUsagePlugin.js +32 -47
  46. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  47. package/lib/Generator.js +19 -15
  48. package/lib/HotModuleReplacementPlugin.js +16 -44
  49. package/lib/IgnorePlugin.js +8 -4
  50. package/lib/IgnoreWarningsPlugin.js +2 -2
  51. package/lib/InitFragment.js +8 -4
  52. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  53. package/lib/LazyBarrel.js +3 -4
  54. package/lib/LibraryTemplatePlugin.js +10 -6
  55. package/lib/LoaderOptionsPlugin.js +7 -3
  56. package/lib/LoaderTargetPlugin.js +1 -1
  57. package/lib/MainTemplate.js +49 -42
  58. package/lib/ManifestPlugin.js +12 -11
  59. package/lib/Module.js +62 -33
  60. package/lib/ModuleFactory.js +3 -3
  61. package/lib/ModuleFilenameHelpers.js +22 -6
  62. package/lib/ModuleGraph.js +195 -21
  63. package/lib/ModuleGraphConnection.js +6 -13
  64. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  65. package/lib/ModuleTemplate.js +62 -63
  66. package/lib/MultiCompiler.js +130 -64
  67. package/lib/MultiStats.js +40 -9
  68. package/lib/MultiWatching.js +3 -3
  69. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  70. package/lib/NodeStuffPlugin.js +29 -19
  71. package/lib/NormalModule.js +212 -153
  72. package/lib/NormalModuleFactory.js +563 -112
  73. package/lib/NormalModuleReplacementPlugin.js +5 -8
  74. package/lib/NullFactory.js +6 -2
  75. package/lib/OptionsApply.js +7 -3
  76. package/lib/Parser.js +7 -3
  77. package/lib/PlatformPlugin.js +2 -2
  78. package/lib/PrefetchPlugin.js +1 -1
  79. package/lib/ProgressPlugin.js +16 -13
  80. package/lib/ProvidePlugin.js +3 -5
  81. package/lib/RawModule.js +25 -17
  82. package/lib/RecordIdsPlugin.js +3 -3
  83. package/lib/RequestShortener.js +1 -1
  84. package/lib/ResolverFactory.js +2 -2
  85. package/lib/RuntimeGlobals.js +22 -10
  86. package/lib/RuntimeModule.js +29 -19
  87. package/lib/RuntimePlugin.js +332 -169
  88. package/lib/RuntimeTemplate.js +2792 -352
  89. package/lib/SelfModuleFactory.js +7 -3
  90. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  91. package/lib/SourceMapDevToolPlugin.js +30 -20
  92. package/lib/Stats.js +3 -4
  93. package/lib/Template.js +32 -22
  94. package/lib/TemplatedPathPlugin.js +96 -14
  95. package/lib/UseStrictPlugin.js +4 -6
  96. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  97. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  98. package/lib/WarnNoModeSetPlugin.js +1 -1
  99. package/lib/WatchIgnorePlugin.js +8 -6
  100. package/lib/Watching.js +8 -8
  101. package/lib/WebpackIsIncludedPlugin.js +2 -4
  102. package/lib/WebpackOptionsApply.js +308 -18
  103. package/lib/WebpackOptionsDefaulter.js +6 -2
  104. package/lib/asset/AssetBytesGenerator.js +11 -7
  105. package/lib/asset/AssetBytesParser.js +2 -4
  106. package/lib/asset/AssetGenerator.js +187 -92
  107. package/lib/asset/AssetModule.js +7 -3
  108. package/lib/asset/AssetModulesPlugin.js +110 -38
  109. package/lib/asset/AssetParser.js +9 -7
  110. package/lib/asset/AssetSourceGenerator.js +59 -10
  111. package/lib/asset/AssetSourceParser.js +2 -4
  112. package/lib/asset/RawDataUrlModule.js +24 -16
  113. package/lib/asset/WebManifestGenerator.js +8 -10
  114. package/lib/asset/WebManifestParser.js +24 -10
  115. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  116. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  117. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  118. package/lib/async-modules/isGeneratorLowered.js +4 -4
  119. package/lib/buildChunkGraph.js +36 -27
  120. package/lib/bun/BunTargetPlugin.js +1 -1
  121. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  122. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  123. package/lib/cache/IdleFileCachePlugin.js +2 -2
  124. package/lib/cache/MemoryCachePlugin.js +18 -10
  125. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  126. package/lib/cache/PackFileCacheStrategy.js +289 -28
  127. package/lib/cache/ResolverCachePlugin.js +38 -18
  128. package/lib/cache/getLazyHashedEtag.js +1 -2
  129. package/lib/cache/mergeEtags.js +1 -1
  130. package/lib/cli.js +1 -3
  131. package/lib/config/browserslistTargetHandler.js +41 -5
  132. package/lib/config/defaults.js +276 -81
  133. package/lib/config/defineConfig.js +10 -2
  134. package/lib/config/getClaimedAssetTypes.js +65 -0
  135. package/lib/config/normalization.js +36 -16
  136. package/lib/config/target.js +46 -3
  137. package/lib/container/ContainerEntryDependency.js +1 -1
  138. package/lib/container/ContainerEntryModule.js +24 -15
  139. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  140. package/lib/container/ContainerPlugin.js +9 -10
  141. package/lib/container/ContainerReferencePlugin.js +6 -2
  142. package/lib/container/FallbackDependency.js +1 -1
  143. package/lib/container/FallbackModule.js +24 -17
  144. package/lib/container/FallbackModuleFactory.js +7 -3
  145. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  146. package/lib/container/ModuleFederationPlugin.js +7 -18
  147. package/lib/container/RemoteModule.js +27 -19
  148. package/lib/container/RemoteRuntimeModule.js +10 -8
  149. package/lib/container/moduleFederationHooks.js +32 -0
  150. package/lib/css/CssGenerator.js +177 -41
  151. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  152. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  153. package/lib/css/CssModule.js +10 -7
  154. package/lib/css/CssModulesPlugin.js +197 -106
  155. package/lib/css/CssParser.js +1113 -568
  156. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  157. package/lib/css/cssMinify.js +168 -0
  158. package/lib/css/data.js +5324 -0
  159. package/lib/css/syntax.js +9579 -232
  160. package/lib/debug/ProfilingPlugin.js +14 -9
  161. package/lib/deno/DenoTargetPlugin.js +1 -1
  162. package/lib/dependencies/AMDDefineDependency.js +112 -87
  163. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  164. package/lib/dependencies/AMDPlugin.js +9 -7
  165. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  166. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  167. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  168. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  169. package/lib/dependencies/AMDRequireDependency.js +8 -7
  170. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  171. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  172. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  173. package/lib/dependencies/CachedConstDependency.js +11 -8
  174. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  175. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  176. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  177. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  178. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  179. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  180. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  181. package/lib/dependencies/CommonJsPlugin.js +35 -6
  182. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  183. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  184. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  185. package/lib/dependencies/ConstDependency.js +8 -9
  186. package/lib/dependencies/ContextDependency.js +12 -8
  187. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  188. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  189. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  190. package/lib/dependencies/ContextElementDependency.js +31 -12
  191. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  192. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  193. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  194. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  195. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  196. package/lib/dependencies/CssImportDependency.js +18 -9
  197. package/lib/dependencies/CssUrlDependency.js +17 -13
  198. package/lib/dependencies/DllEntryDependency.js +1 -1
  199. package/lib/dependencies/DynamicExports.js +2 -2
  200. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  201. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  202. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  203. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  204. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  205. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  206. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  207. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  208. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +13 -10
  209. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  210. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  211. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  212. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
  213. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  214. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  215. package/lib/dependencies/HarmonyExports.js +7 -4
  216. package/lib/dependencies/HarmonyImportDependency.js +27 -19
  217. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  218. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  219. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  220. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  221. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  222. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  223. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  224. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  225. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  226. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  227. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  228. package/lib/dependencies/ImportContextDependency.js +2 -2
  229. package/lib/dependencies/ImportDependency.js +24 -20
  230. package/lib/dependencies/ImportEagerDependency.js +6 -9
  231. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  232. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  233. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  234. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  235. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  236. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  237. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  238. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  240. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  241. package/lib/dependencies/ImportParserPlugin.js +49 -35
  242. package/lib/dependencies/ImportPhase.js +12 -5
  243. package/lib/dependencies/ImportPlugin.js +7 -3
  244. package/lib/dependencies/ImportWeakDependency.js +6 -9
  245. package/lib/dependencies/JsonExportsDependency.js +11 -7
  246. package/lib/dependencies/LoaderDependency.js +2 -2
  247. package/lib/dependencies/LoaderImportDependency.js +2 -2
  248. package/lib/dependencies/LoaderPlugin.js +11 -7
  249. package/lib/dependencies/LocalModuleDependency.js +5 -5
  250. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  251. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  252. package/lib/dependencies/ModuleDependency.js +9 -6
  253. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  254. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  255. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  256. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  257. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  258. package/lib/dependencies/NullDependency.js +3 -3
  259. package/lib/dependencies/ProvidedDependency.js +14 -10
  260. package/lib/dependencies/PureExpressionDependency.js +9 -10
  261. package/lib/dependencies/RequireContextDependency.js +2 -2
  262. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  263. package/lib/dependencies/RequireContextPlugin.js +8 -4
  264. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  265. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  266. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  267. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  268. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  269. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  270. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  271. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  272. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  273. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  274. package/lib/dependencies/RequireResolveDependency.js +4 -4
  275. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  276. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  277. package/lib/dependencies/StaticExportsDependency.js +2 -2
  278. package/lib/dependencies/SystemPlugin.js +10 -6
  279. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  280. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  281. package/lib/dependencies/URLContextDependency.js +2 -2
  282. package/lib/dependencies/URLDependency.js +110 -64
  283. package/lib/dependencies/URLPlugin.js +7 -3
  284. package/lib/dependencies/UnsupportedDependency.js +4 -4
  285. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  286. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  287. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  288. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  289. package/lib/dependencies/WorkerDependency.js +28 -22
  290. package/lib/dependencies/WorkletDependency.js +15 -14
  291. package/lib/dependencies/getFunctionExpression.js +8 -4
  292. package/lib/dependencies/processExportInfo.js +5 -5
  293. package/lib/dll/DelegatedModule.js +34 -22
  294. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  295. package/lib/dll/DelegatedPlugin.js +2 -2
  296. package/lib/dll/DllEntryPlugin.js +2 -2
  297. package/lib/dll/DllModule.js +22 -15
  298. package/lib/dll/DllModuleFactory.js +7 -3
  299. package/lib/dll/DllPlugin.js +7 -5
  300. package/lib/dll/DllReferencePlugin.js +10 -7
  301. package/lib/dll/LibManifestPlugin.js +5 -5
  302. package/lib/electron/ElectronTargetPlugin.js +53 -49
  303. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  304. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  305. package/lib/errors/BroadContextsWarning.js +43 -0
  306. package/lib/errors/BuildCycleError.js +1 -1
  307. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  308. package/lib/errors/ChunkRenderError.js +1 -1
  309. package/lib/errors/CircularDependenciesWarning.js +38 -0
  310. package/lib/errors/CodeGenerationError.js +1 -1
  311. package/lib/errors/CommentCompilationWarning.js +1 -1
  312. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  313. package/lib/errors/DuplicateModulesWarning.js +45 -0
  314. package/lib/errors/DynamicExportsWarning.js +30 -0
  315. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  316. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  317. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  318. package/lib/errors/EvalUsageWarning.js +28 -0
  319. package/lib/errors/HookWebpackError.js +5 -5
  320. package/lib/errors/HotspotsWarning.js +57 -0
  321. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  322. package/lib/errors/InlinedAssetsWarning.js +36 -0
  323. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  324. package/lib/errors/LargeModulesWarning.js +45 -0
  325. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  326. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  327. package/lib/errors/MixedExportsWarning.js +41 -0
  328. package/lib/errors/ModuleDependencyError.js +13 -16
  329. package/lib/errors/ModuleDependencyWarning.js +5 -15
  330. package/lib/errors/ModuleHashingError.js +1 -1
  331. package/lib/errors/ModuleNotFoundError.js +2 -2
  332. package/lib/errors/ModuleParseError.js +1 -2
  333. package/lib/errors/ModuleRestoreError.js +1 -1
  334. package/lib/errors/ModuleStoreError.js +1 -1
  335. package/lib/errors/NodeStuffInWebError.js +1 -1
  336. package/lib/errors/OsDependentRuleWarning.js +31 -0
  337. package/lib/errors/PureAnnotationsWarning.js +36 -0
  338. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  339. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  340. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  341. package/lib/errors/TinyChunksWarning.js +40 -0
  342. package/lib/errors/TopLevelThisWarning.js +34 -0
  343. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  344. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  345. package/lib/errors/UnusedAliasesWarning.js +29 -0
  346. package/lib/errors/UnusedDefinesWarning.js +29 -0
  347. package/lib/errors/UnusedExternalsWarning.js +29 -0
  348. package/lib/errors/UnusedReexportsWarning.js +42 -0
  349. package/lib/errors/UnusedRuleWarning.js +29 -0
  350. package/lib/errors/WebpackError.js +9 -5
  351. package/lib/errors/deriveStackFromNestedError.js +90 -0
  352. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  353. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  354. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  355. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  356. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  357. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  358. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  359. package/lib/hmr/lazyCompilationBackend.js +9 -6
  360. package/lib/hmr/parserHooks.js +56 -0
  361. package/lib/html/HtmlGenerator.js +276 -76
  362. package/lib/html/HtmlModule.js +7 -3
  363. package/lib/html/HtmlModulesPlugin.js +312 -174
  364. package/lib/html/HtmlParser.js +31 -86
  365. package/lib/html/data.js +1928 -0
  366. package/lib/html/htmlMinify.js +288 -0
  367. package/lib/html/syntax.js +5557 -1155
  368. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  369. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  370. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  371. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  372. package/lib/ids/IdHelpers.js +7 -8
  373. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  374. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  375. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  376. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  377. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  378. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  379. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  380. package/lib/index.js +10 -0
  381. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  382. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  383. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  384. package/lib/javascript/ChunkHelpers.js +1 -1
  385. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  386. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  387. package/lib/javascript/JavascriptGenerator.js +64 -164
  388. package/lib/javascript/JavascriptModule.js +9 -3
  389. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  390. package/lib/javascript/JavascriptParser.js +286 -110
  391. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  392. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  393. package/lib/javascript/StartupHelpers.js +55 -9
  394. package/lib/javascript/syntax.js +2678 -232
  395. package/lib/json/JsonData.js +8 -4
  396. package/lib/json/JsonGenerator.js +37 -15
  397. package/lib/json/JsonModule.js +7 -3
  398. package/lib/json/JsonModulesPlugin.js +1 -1
  399. package/lib/json/JsonParser.js +5 -6
  400. package/lib/library/AbstractLibraryPlugin.js +20 -14
  401. package/lib/library/AmdLibraryPlugin.js +11 -7
  402. package/lib/library/AssignLibraryPlugin.js +19 -13
  403. package/lib/library/EnableLibraryPlugin.js +2 -2
  404. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  405. package/lib/library/JsonpLibraryPlugin.js +11 -7
  406. package/lib/library/ModuleLibraryPlugin.js +256 -64
  407. package/lib/library/SystemLibraryPlugin.js +12 -8
  408. package/lib/library/UmdLibraryPlugin.js +62 -25
  409. package/lib/loaders/LoaderRunner.js +14 -1
  410. package/lib/loaders/loadLoader.js +8 -4
  411. package/lib/logging/createConsoleLogger.js +7 -4
  412. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  413. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  414. package/lib/node/NodeSourcePlugin.js +1 -1
  415. package/lib/node/NodeTargetPlugin.js +4 -3
  416. package/lib/node/NodeTemplatePlugin.js +1 -1
  417. package/lib/node/NodeWatchFileSystem.js +70 -9
  418. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  419. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +72 -19
  420. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  421. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  422. package/lib/node/nodeConsole.js +7 -3
  423. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  424. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  425. package/lib/optimize/ConcatenatedModule.js +985 -470
  426. package/lib/optimize/ConstExportsPlugin.js +11 -7
  427. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  428. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  429. package/lib/optimize/InlineExports.js +9 -5
  430. package/lib/optimize/InnerGraph.js +28 -12
  431. package/lib/optimize/InnerGraphPlugin.js +23 -18
  432. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  433. package/lib/optimize/MangleExportsPlugin.js +7 -8
  434. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  435. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  436. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  437. package/lib/optimize/RealContentHashPlugin.js +20 -13
  438. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  439. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  440. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  441. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  442. package/lib/optimize/SplitChunksPlugin.js +86 -24
  443. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  444. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  445. package/lib/performance/BroadContextsPlugin.js +142 -0
  446. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  447. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  448. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  449. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  450. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  451. package/lib/performance/DynamicExportsPlugin.js +120 -0
  452. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  453. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  454. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  455. package/lib/performance/EvalUsagePlugin.js +115 -0
  456. package/lib/performance/HotspotsPlugin.js +296 -0
  457. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  458. package/lib/performance/LargeModulesPlugin.js +126 -0
  459. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  460. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  461. package/lib/performance/MixedExportsPlugin.js +136 -0
  462. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  463. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  464. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  465. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  466. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  467. package/lib/performance/SizeLimitsPlugin.js +139 -7
  468. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  469. package/lib/performance/TinyChunksPlugin.js +128 -0
  470. package/lib/performance/TopLevelThisPlugin.js +208 -0
  471. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  472. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  473. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  474. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  475. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  476. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  477. package/lib/performance/getModuleSize.js +22 -0
  478. package/lib/performance/getSourceModules.js +22 -0
  479. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  480. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  481. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  482. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  483. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  484. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  485. package/lib/prefetch/ResourceHintPlugin.js +295 -78
  486. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  487. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  488. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  489. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  490. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  491. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  492. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  493. package/lib/rules/RuleSetCompiler.js +146 -12
  494. package/lib/rules/UseEffectRulePlugin.js +18 -11
  495. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  496. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  497. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  498. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  499. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  500. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  501. package/lib/runtime/CompatRuntimeModule.js +5 -3
  502. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  503. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  504. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  505. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  506. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  507. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  508. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  509. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  510. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  511. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  512. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  513. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  514. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  515. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  516. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  517. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  518. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  519. package/lib/runtime/NonceRuntimeModule.js +10 -0
  520. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  521. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  522. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  523. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  524. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  525. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  526. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  527. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  528. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  529. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  530. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  531. package/lib/runtime/baseUri.js +63 -0
  532. package/lib/schemes/DataUriPlugin.js +1 -1
  533. package/lib/schemes/FileUriPlugin.js +1 -1
  534. package/lib/schemes/HttpUriPlugin.js +24 -15
  535. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  536. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  537. package/lib/serialization/BinaryMiddleware.js +4 -4
  538. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  539. package/lib/serialization/FileMiddleware.js +305 -66
  540. package/lib/serialization/ObjectMiddleware.js +11 -6
  541. package/lib/serialization/PlainObjectSerializer.js +19 -16
  542. package/lib/sharing/ConsumeSharedModule.js +30 -21
  543. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  544. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  545. package/lib/sharing/ProvideSharedModule.js +25 -16
  546. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  547. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  548. package/lib/sharing/SharePlugin.js +17 -5
  549. package/lib/sharing/ShareRuntimeModule.js +4 -4
  550. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  551. package/lib/sharing/utils.js +1 -3
  552. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  553. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  554. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  555. package/lib/stats/StatsFactory.js +25 -26
  556. package/lib/stats/StatsPrinter.js +16 -12
  557. package/lib/typescript/TypeScriptPlugin.js +12 -14
  558. package/lib/url/URLParserPlugin.js +26 -13
  559. package/lib/util/AsyncQueue.js +4 -3
  560. package/lib/util/Hash.js +5 -1
  561. package/lib/util/LazySet.js +35 -22
  562. package/lib/util/LocConverter.js +36 -13
  563. package/lib/util/SourceProcessor.js +1050 -24
  564. package/lib/util/StringXor.js +1 -1
  565. package/lib/util/chainedImports.js +9 -5
  566. package/lib/util/cleverMerge.js +1 -1
  567. package/lib/util/comparators.js +45 -14
  568. package/lib/util/concatenate.js +203 -77
  569. package/lib/util/conventions.js +5 -1
  570. package/lib/util/createHash.js +2 -2
  571. package/lib/util/createHooksRegistry.js +8 -10
  572. package/lib/util/dataURL.js +225 -1
  573. package/lib/util/extractSourceMap.js +4 -3
  574. package/lib/util/findCaseMismatch.js +139 -0
  575. package/lib/util/formatLocation.js +1 -2
  576. package/lib/util/fs.js +22 -5
  577. package/lib/util/globUtils.js +298 -24
  578. package/lib/util/hash/BatchedHash.js +5 -1
  579. package/lib/util/hash/BulkUpdateHash.js +5 -1
  580. package/lib/util/hash/DebugHash.js +5 -1
  581. package/lib/util/hash/hash-digest.js +6 -2
  582. package/lib/util/identifier.js +25 -1
  583. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  584. package/lib/util/internalSerializables.js +6 -0
  585. package/lib/util/lazyModule.js +56 -0
  586. package/lib/util/makeSerializable.js +7 -3
  587. package/lib/util/matchAlias.js +25 -0
  588. package/lib/util/mimeTypes.js +11 -5
  589. package/lib/util/nonNumericOnlyHash.js +4 -3
  590. package/lib/util/parseJson.js +5 -3
  591. package/lib/util/preloadModuleType.js +32 -0
  592. package/lib/util/registerExternalSerializer.js +7 -5
  593. package/lib/util/runtime.js +2 -2
  594. package/lib/util/semver.js +1 -1
  595. package/lib/util/serialization.js +28 -28
  596. package/lib/util/source.js +2 -2
  597. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  598. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  599. package/lib/wasm/wasmModuleFilename.js +54 -0
  600. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  601. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  602. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  603. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  604. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +54 -16
  605. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  606. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  607. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  608. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  609. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  610. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  611. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  612. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  613. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -6
  614. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  615. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  616. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  617. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  618. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  619. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  620. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  621. package/lib/web/JsonpTemplatePlugin.js +2 -2
  622. package/lib/webpack.js +22 -11
  623. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  624. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  625. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  626. package/module.d.ts +1 -0
  627. package/package.json +23 -16
  628. package/schemas/WebpackOptions.check.js +1 -1
  629. package/schemas/WebpackOptions.json +780 -91
  630. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  631. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  632. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  633. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  635. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  636. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  637. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  638. package/types.d.ts +4010 -739
  639. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const EventEmitter = require("events");
9
+
9
10
  const { basename, extname } = require("path");
10
11
  const {
11
12
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
@@ -18,21 +19,29 @@ const createHash = require("../util/createHash");
18
19
  const { dirname, join, mkdirp } = require("../util/fs");
19
20
  const memoize = require("../util/memoize");
20
21
 
21
- /** @typedef {import("http").IncomingMessage} IncomingMessage */
22
- /** @typedef {import("http").OutgoingHttpHeaders} OutgoingHttpHeaders */
23
- /** @typedef {import("http").RequestOptions} RequestOptions */
24
- /** @typedef {import("net").Socket} Socket */
25
- /** @typedef {import("stream").Readable} Readable */
26
- /** @typedef {import("../../declarations/plugins/schemes/HttpUriPlugin").HttpUriPluginOptions} HttpUriPluginOptions */
27
- /** @typedef {import("../Compiler")} Compiler */
28
- /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
29
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
30
- /** @typedef {import("../NormalModuleFactory").ResourceDataWithData} ResourceDataWithData */
31
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
32
- /** @typedef {import("../NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
22
+ const getHttps = memoize(() => require("https"));
33
23
 
34
24
  const getHttp = memoize(() => require("http"));
35
- const getHttps = memoize(() => require("https"));
25
+
26
+ /**
27
+ * @import {
28
+ * IncomingMessage,
29
+ * OutgoingHttpHeaders,
30
+ * RequestOptions
31
+ * } from "http"
32
+ */
33
+ /** @import { Socket } from "net" */
34
+ /** @import { Readable } from "stream" */
35
+ /**
36
+ * @import {
37
+ * HttpUriPluginOptions
38
+ * } from "../../declarations/plugins/schemes/HttpUriPlugin"
39
+ */
40
+ /** @import Compiler from "../Compiler" */
41
+ /** @import { Snapshot } from "../FileSystemInfo" */
42
+ /** @import { ResourceDataWithData } from "../NormalModuleFactory" */
43
+ /** @import { IntermediateFileSystem } from "../util/fs" */
44
+ /** @import { NormalModuleBuildInfo } from "../NormalModule" */
36
45
 
37
46
  const MAX_REDIRECTS = 5;
38
47
 
@@ -482,7 +491,7 @@ const cachedWithKey = (fn, forceFn = fn) => {
482
491
  * Defines the lockfile cache type used by this module.
483
492
  * @typedef {object} LockfileCache
484
493
  * @property {Lockfile} lockfile lockfile
485
- * @property {Snapshot} snapshot snapshot
494
+ * @property {InstanceType<Snapshot>} snapshot snapshot
486
495
  */
487
496
 
488
497
  /**
@@ -644,7 +653,7 @@ class HttpUriPlugin {
644
653
  : new Lockfile();
645
654
  lockfileCache = {
646
655
  lockfile,
647
- snapshot: /** @type {Snapshot} */ (s)
656
+ snapshot: /** @type {InstanceType<Snapshot>} */ (s)
648
657
  };
649
658
  callback(null, lockfile);
650
659
  }
@@ -6,21 +6,27 @@
6
6
  "use strict";
7
7
 
8
8
  const NormalModule = require("../NormalModule");
9
- const ModuleNotFoundError = require("../errors/ModuleNotFoundError");
9
+
10
10
  const { getContext } = require("../loaders/LoaderRunner");
11
11
  const { isAbsolute, join } = require("../util/fs");
12
12
  const { parseResourceWithoutFragment } = require("../util/identifier");
13
+ const memoize = require("../util/memoize");
14
+
15
+ const getModuleNotFoundError = memoize(() =>
16
+ require("../errors/ModuleNotFoundError")
17
+ );
13
18
 
14
19
  const DEFAULT_SCHEME = "virtual";
15
20
 
16
21
  const PLUGIN_NAME = "VirtualUrlPlugin";
17
22
 
23
+ /** @import Compiler from "../Compiler" */
18
24
  /**
19
- * Defines the compiler type used by this module.
20
- * @typedef {import("../Compiler")} Compiler
21
- * @typedef {import("../../declarations/plugins/schemes/VirtualUrlPlugin").VirtualModule} VirtualModuleConfig
22
- * @typedef {import("../../declarations/plugins/schemes/VirtualUrlPlugin").VirtualModuleContent} VirtualModuleInput
23
- * @typedef {import("../../declarations/plugins/schemes/VirtualUrlPlugin").VirtualUrlOptions} VirtualUrlOptions
25
+ * @import {
26
+ * VirtualModule as VirtualModuleConfig,
27
+ * VirtualModuleContent as VirtualModuleInput,
28
+ * VirtualUrlOptions
29
+ * } from "../../declarations/plugins/schemes/VirtualUrlPlugin"
24
30
  */
25
31
 
26
32
  /** @typedef {(loaderContext: LoaderContext<EXPECTED_ANY>) => Promise<string | Buffer> | string | Buffer} SourceFn */
@@ -271,7 +277,7 @@ class VirtualUrlPlugin {
271
277
  findVirtualModuleConfigById(id) {
272
278
  const config = this.modules[id];
273
279
  if (!config) {
274
- throw new ModuleNotFoundError(
280
+ throw new (getModuleNotFoundError())(
275
281
  null,
276
282
  new Error(`Can't resolve virtual module ${id}`),
277
283
  {
@@ -4,7 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
7
+ /** @import { ComplexSerializableType } from "./types" */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<ComplexSerializableType[]>} ObjectDeserializerContext */
9
9
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<ComplexSerializableType[]>} ObjectSerializerContext */
10
10
 
@@ -8,8 +8,8 @@ const { deserialize: v8Deserialize, serialize: v8Serialize } = require("v8");
8
8
  const memoize = require("../util/memoize");
9
9
  const SerializerMiddleware = require("./SerializerMiddleware");
10
10
 
11
- /** @typedef {import("./types").BufferSerializableType} BufferSerializableType */
12
11
  /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
12
+ /** @import { BufferSerializableType } from "./types" */
13
13
 
14
14
  /*
15
15
  Format:
@@ -579,7 +579,7 @@ class BinaryMiddleware extends SerializerMiddleware {
579
579
  }
580
580
  }
581
581
 
582
- module.exports = BinaryMiddleware;
582
+ BinaryMiddleware.MEASURE_END_OPERATION = MEASURE_END_OPERATION;
583
+ BinaryMiddleware.MEASURE_START_OPERATION = MEASURE_START_OPERATION;
583
584
 
584
- module.exports.MEASURE_END_OPERATION = MEASURE_END_OPERATION;
585
- module.exports.MEASURE_START_OPERATION = MEASURE_START_OPERATION;
585
+ module.exports = BinaryMiddleware;
@@ -4,7 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
7
+ /** @import { ComplexSerializableType } from "./types" */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<ComplexSerializableType[]>} ObjectDeserializerContext */
9
9
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<ComplexSerializableType[]>} ObjectSerializerContext */
10
10
 
@@ -7,6 +7,8 @@
7
7
  const { constants } = require("buffer");
8
8
  const { pipeline } = require("stream");
9
9
  const {
10
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
11
+ brotliDecompress,
10
12
  constants: zConstants,
11
13
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
12
14
  createBrotliCompress,
@@ -18,7 +20,10 @@ const {
18
20
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
19
21
  createZstdCompress,
20
22
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
21
- createZstdDecompress
23
+ createZstdDecompress,
24
+ gunzip,
25
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
26
+ zstdDecompress
22
27
  } = require("zlib");
23
28
  const { DEFAULTS } = require("../config/defaults");
24
29
  const createHash = require("../util/createHash");
@@ -26,10 +31,9 @@ const { dirname, join, mkdirp } = require("../util/fs");
26
31
  const memoize = require("../util/memoize");
27
32
  const SerializerMiddleware = require("./SerializerMiddleware");
28
33
 
29
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
30
- /** @typedef {import("../util/fs").IStats} IStats */
31
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
32
- /** @typedef {import("./types").BufferSerializableType} BufferSerializableType */
34
+ /** @import { HashFunction } from "../util/Hash" */
35
+ /** @import { IStats, IntermediateFileSystem } from "../util/fs" */
36
+ /** @import { BufferSerializableType } from "./types" */
33
37
 
34
38
  /*
35
39
  Format:
@@ -51,6 +55,8 @@ Section -> Buffer
51
55
  const VERSION = 0x01637077;
52
56
  const WRITE_LIMIT_TOTAL = 0x7fff0000;
53
57
  const WRITE_LIMIT_CHUNK = 511 * 1024 * 1024;
58
+ // headers and pointer sections are tiny; anything above this is a corrupt file
59
+ const MAX_HEADER_OR_POINTER_SIZE = 256 * 1024 * 1024;
54
60
 
55
61
  /**
56
62
  * Returns hash.
@@ -111,6 +117,7 @@ const readUInt64LE = Buffer.prototype.readBigUInt64LE
111
117
  * @param {string | boolean} name file base name
112
118
  * @param {(name: string | false, buffers: Buffer[], size: number) => Promise<void>} writeFile writes a file
113
119
  * @param {HashFunction=} hashFunction hash function to use
120
+ * @param {Set<string>=} retainedNames collects names of files that stay referenced without being rewritten
114
121
  * @returns {Promise<SerializeResult>} resulting file pointer and promise
115
122
  */
116
123
  const serialize = async (
@@ -118,7 +125,8 @@ const serialize = async (
118
125
  data,
119
126
  name,
120
127
  writeFile,
121
- hashFunction = DEFAULTS.HASH_FUNCTION
128
+ hashFunction = DEFAULTS.HASH_FUNCTION,
129
+ retainedNames = undefined
122
130
  ) => {
123
131
  /** @type {(Buffer[] | Buffer | Promise<SerializeResult>)[]} */
124
132
  const processedData = [];
@@ -144,6 +152,10 @@ const serialize = async (
144
152
  "Unexpected lazy value with non-this target (can't pass through lazy values)"
145
153
  );
146
154
  } else {
155
+ if (retainedNames !== undefined) {
156
+ // pointer buffer layout: u64 size + utf-8 file name
157
+ retainedNames.add(serializedInfo.toString("utf8", 8));
158
+ }
147
159
  processedData.push(serializedInfo);
148
160
  }
149
161
  } else {
@@ -157,7 +169,8 @@ const serialize = async (
157
169
  (content),
158
170
  (options && options.name) || true,
159
171
  writeFile,
160
- hashFunction
172
+ hashFunction,
173
+ retainedNames
161
174
  ).then((result) => {
162
175
  /** @type {LazyOptions} */
163
176
  (item.options).size = result.size;
@@ -444,7 +457,14 @@ const deserialize = async (middleware, name, readFile) => {
444
457
 
445
458
  /** @typedef {BufferSerializableType[]} DeserializedType */
446
459
  /** @typedef {true} SerializedType */
447
- /** @typedef {{ filename: string, extension?: string }} Context */
460
+ /**
461
+ * `writtenFiles`/`retainedFiles` collect file names (without extension) during
462
+ * `serialize`: files written in this run and files that stay referenced by
463
+ * lazy pointers without being rewritten. Retained files may reference further
464
+ * files on disk not listed here (nested lazy segments); use
465
+ * `getReferencedFilenames` to walk them.
466
+ * @typedef {{ filename: string, extension?: string, writtenFiles?: Set<string>, retainedFiles?: Set<string> }} Context
467
+ */
448
468
 
449
469
  /**
450
470
  * Represents FileMiddleware.
@@ -471,7 +491,7 @@ class FileMiddleware extends SerializerMiddleware {
471
491
  * @returns {SerializedType | Promise<SerializedType> | null} serialized data
472
492
  */
473
493
  serialize(data, context) {
474
- const { filename, extension = "" } = context;
494
+ const { filename, extension = "", writtenFiles, retainedFiles } = context;
475
495
  return new Promise((resolve, reject) => {
476
496
  mkdirp(this.fs, dirname(this.fs, filename), (err) => {
477
497
  if (err) return reject(err);
@@ -581,66 +601,74 @@ class FileMiddleware extends SerializerMiddleware {
581
601
  batchWrite();
582
602
  }
583
603
  );
584
- if (name) allWrittenFiles.add(file);
604
+ if (name) {
605
+ allWrittenFiles.add(file);
606
+ if (writtenFiles !== undefined) writtenFiles.add(name);
607
+ }
585
608
  };
586
609
 
587
610
  resolve(
588
- serialize(this, data, false, writeFile, this._hashFunction).then(
589
- async ({ backgroundJob }) => {
590
- await backgroundJob;
591
-
592
- // Rename the index file to disallow access during inconsistent file state
593
- await new Promise(
594
- /**
595
- * Handles the callback logic for this hook.
596
- * @param {(value?: undefined) => void} resolve resolve
597
- */
598
- (resolve) => {
599
- this.fs.rename(filename, `${filename}.old`, (_err) => {
600
- resolve();
601
- });
602
- }
603
- );
611
+ serialize(
612
+ this,
613
+ data,
614
+ false,
615
+ writeFile,
616
+ this._hashFunction,
617
+ retainedFiles
618
+ ).then(async ({ backgroundJob }) => {
619
+ await backgroundJob;
604
620
 
605
- // update all written files
606
- await Promise.all(
607
- Array.from(
608
- allWrittenFiles,
609
- (file) =>
610
- new Promise(
611
- /**
612
- * Handles the callback logic for this hook.
613
- * @param {(value?: undefined) => void} resolve resolve
614
- * @param {(reason?: Error | null) => void} reject reject
615
- * @returns {void}
616
- */
617
- (resolve, reject) => {
618
- this.fs.rename(`${file}_`, file, (err) => {
619
- if (err) return reject(err);
620
- resolve();
621
- });
622
- }
623
- )
624
- )
625
- );
621
+ // Rename the index file to disallow access during inconsistent file state
622
+ await new Promise(
623
+ /**
624
+ * Handles the callback logic for this hook.
625
+ * @param {(value?: undefined) => void} resolve resolve
626
+ */
627
+ (resolve) => {
628
+ this.fs.rename(filename, `${filename}.old`, (_err) => {
629
+ resolve();
630
+ });
631
+ }
632
+ );
626
633
 
627
- // As final step automatically update the index file to have a consistent pack again
628
- await new Promise(
629
- /**
630
- * Handles the callback logic for this hook.
631
- * @param {(value?: undefined) => void} resolve resolve
632
- * @returns {void}
633
- */
634
- (resolve) => {
635
- this.fs.rename(`${filename}_`, filename, (err) => {
636
- if (err) return reject(err);
637
- resolve();
638
- });
639
- }
640
- );
641
- return /** @type {true} */ (true);
642
- }
643
- )
634
+ // update all written files
635
+ await Promise.all(
636
+ Array.from(
637
+ allWrittenFiles,
638
+ (file) =>
639
+ new Promise(
640
+ /**
641
+ * Handles the callback logic for this hook.
642
+ * @param {(value?: undefined) => void} resolve resolve
643
+ * @param {(reason?: Error | null) => void} reject reject
644
+ * @returns {void}
645
+ */
646
+ (resolve, reject) => {
647
+ this.fs.rename(`${file}_`, file, (err) => {
648
+ if (err) return reject(err);
649
+ resolve();
650
+ });
651
+ }
652
+ )
653
+ )
654
+ );
655
+
656
+ // As final step automatically update the index file to have a consistent pack again
657
+ await new Promise(
658
+ /**
659
+ * Handles the callback logic for this hook.
660
+ * @param {(value?: undefined) => void} resolve resolve
661
+ * @returns {void}
662
+ */
663
+ (resolve) => {
664
+ this.fs.rename(`${filename}_`, filename, (err) => {
665
+ if (err) return reject(err);
666
+ resolve();
667
+ });
668
+ }
669
+ );
670
+ return /** @type {true} */ (true);
671
+ })
644
672
  );
645
673
  });
646
674
  });
@@ -808,6 +836,217 @@ class FileMiddleware extends SerializerMiddleware {
808
836
  }
809
837
  }
810
838
 
811
- module.exports = FileMiddleware;
839
+ /**
840
+ * Extracts the file names referenced by lazy pointer sections from serialized content.
841
+ * @param {Buffer} buf decompressed file content
842
+ * @returns {string[]} referenced file names (without extension)
843
+ */
844
+ const parsePointerNames = (buf) => {
845
+ const version = buf.readUInt32LE(0);
846
+ if (version !== VERSION) {
847
+ throw new Error(`Invalid file version ${version}`);
848
+ }
849
+ const sectionCount = buf.readUInt32LE(4);
850
+ let offset = 8 + sectionCount * 4;
851
+ // a corrupt section table must abort the walk, never silently drop a name
852
+ if (offset > buf.length) {
853
+ throw new Error(`Invalid section count ${sectionCount}`);
854
+ }
855
+ /** @type {string[]} */
856
+ const names = [];
857
+ for (let i = 0; i < sectionCount; i++) {
858
+ const length = buf.readInt32LE(8 + i * 4);
859
+ if (length < 0) {
860
+ // pointer section: u64 size + utf-8 file name
861
+ const end = offset - length;
862
+ if (end > buf.length) {
863
+ throw new Error("Truncated pointer section");
864
+ }
865
+ names.push(buf.toString("utf8", offset + 8, end));
866
+ offset = end;
867
+ } else {
868
+ offset += length;
869
+ }
870
+ }
871
+ if (offset !== buf.length) {
872
+ throw new Error("Section table does not match file size");
873
+ }
874
+ return names;
875
+ };
876
+
877
+ /**
878
+ * Reads the pointer names of a compressed file by decompressing it fully
879
+ * (compressed content cannot be read by byte range).
880
+ * @param {IntermediateFileSystem} fs a file system
881
+ * @param {string} file absolute path of the serialized file
882
+ * @returns {Promise<string[]>} referenced file names (without extension)
883
+ */
884
+ const getReferencedFilenamesCompressed = (fs, file) =>
885
+ new Promise((resolve, reject) => {
886
+ fs.readFile(file, (err, rawContent) => {
887
+ if (err) return reject(err);
888
+ /**
889
+ * Parses the decompressed content.
890
+ * @param {Error | null} err error
891
+ * @param {Buffer=} content decompressed content
892
+ * @returns {void}
893
+ */
894
+ const onContent = (err, content) => {
895
+ if (err) return reject(err);
896
+ try {
897
+ resolve(parsePointerNames(/** @type {Buffer} */ (content)));
898
+ } catch (err_) {
899
+ reject(/** @type {Error} */ (err_));
900
+ }
901
+ };
902
+ const buf = /** @type {Buffer} */ (rawContent);
903
+ if (file.endsWith(".gz")) {
904
+ gunzip(buf, onContent);
905
+ } else if (file.endsWith(".br")) {
906
+ brotliDecompress(buf, onContent);
907
+ } else {
908
+ if (!zstdDecompress) {
909
+ return reject(
910
+ new Error("zstd decompression requires Node.js >= 22.15.0")
911
+ );
912
+ }
913
+ zstdDecompress(buf, onContent);
914
+ }
915
+ });
916
+ });
917
+
918
+ /**
919
+ * Reads the pointer names of an uncompressed file by reading only the header
920
+ * and the pointer sections instead of the whole file.
921
+ * @param {IntermediateFileSystem} fs a file system
922
+ * @param {string} file absolute path of the serialized file
923
+ * @returns {Promise<string[]>} referenced file names (without extension)
924
+ */
925
+ const getReferencedFilenamesUncompressed = (fs, file) =>
926
+ new Promise((resolve, reject) => {
927
+ fs.open(file, "r", (err, _fd) => {
928
+ if (err) return reject(err);
929
+ const fd = /** @type {number} */ (_fd);
930
+ /**
931
+ * Closes the file descriptor and rejects.
932
+ * @param {Error} err error
933
+ */
934
+ const fail = (err) => {
935
+ fs.close(fd, () => reject(err));
936
+ };
937
+ /**
938
+ * Reads exactly `length` bytes at `position`.
939
+ * @param {number} position file position
940
+ * @param {number} length byte count
941
+ * @param {(buffer: Buffer) => void} callback called with the filled buffer
942
+ * @returns {void}
943
+ */
944
+ const readAt = (position, length, callback) => {
945
+ // corrupt headers can request absurd sizes; must reject, not crash
946
+ if (length > MAX_HEADER_OR_POINTER_SIZE) {
947
+ return fail(new Error(`Invalid section size ${length} in ${file}`));
948
+ }
949
+ /** @type {Buffer} */
950
+ let buffer;
951
+ try {
952
+ buffer = Buffer.allocUnsafe(length);
953
+ } catch (err) {
954
+ return fail(/** @type {Error} */ (err));
955
+ }
956
+ let bytesDone = 0;
957
+ const readMore = () => {
958
+ fs.read(
959
+ fd,
960
+ buffer,
961
+ bytesDone,
962
+ length - bytesDone,
963
+ position + bytesDone,
964
+ (err, bytesRead) => {
965
+ if (err) return fail(err);
966
+ if (bytesRead === 0) {
967
+ return fail(new Error(`Unexpected end of file ${file}`));
968
+ }
969
+ bytesDone += bytesRead;
970
+ if (bytesDone < length) return readMore();
971
+ callback(buffer);
972
+ }
973
+ );
974
+ };
975
+ readMore();
976
+ };
977
+ readAt(0, 8, (header) => {
978
+ const version = header.readUInt32LE(0);
979
+ if (version !== VERSION) {
980
+ return fail(new Error(`Invalid file version ${version}`));
981
+ }
982
+ const sectionCount = header.readUInt32LE(4);
983
+ if (sectionCount === 0) {
984
+ return fs.close(fd, (err) => (err ? reject(err) : resolve([])));
985
+ }
986
+ readAt(8, sectionCount * 4, (lengthsBuffer) => {
987
+ /** @type {{ position: number, length: number }[]} */
988
+ const pointerSections = [];
989
+ let position = 8 + sectionCount * 4;
990
+ for (let i = 0; i < sectionCount; i++) {
991
+ const length = lengthsBuffer.readInt32LE(i * 4);
992
+ if (length < 0) {
993
+ pointerSections.push({ position, length: -length });
994
+ position -= length;
995
+ } else {
996
+ position += length;
997
+ }
998
+ }
999
+ // the section table must account for exactly the whole file,
1000
+ // otherwise pointer reads land on wrong bytes and under-report
1001
+ fs.stat(file, (err, stats) => {
1002
+ if (err) return fail(err);
1003
+ const stat = /** @type {import("../util/fs").IStats} */ (stats);
1004
+ if (stat.size !== position) {
1005
+ return fail(
1006
+ new Error(`Section table does not match size of ${file}`)
1007
+ );
1008
+ }
1009
+ /** @type {string[]} */
1010
+ const names = [];
1011
+ /**
1012
+ * Reads the pointer section at `index`, then the next one.
1013
+ * @param {number} index pointer section index
1014
+ * @returns {void}
1015
+ */
1016
+ const readNext = (index) => {
1017
+ if (index >= pointerSections.length) {
1018
+ return fs.close(fd, (err) =>
1019
+ err ? reject(err) : resolve(names)
1020
+ );
1021
+ }
1022
+ const section = pointerSections[index];
1023
+ readAt(section.position, section.length, (buffer) => {
1024
+ // pointer section: u64 size + utf-8 file name
1025
+ names.push(buffer.toString("utf8", 8));
1026
+ readNext(index + 1);
1027
+ });
1028
+ };
1029
+ readNext(0);
1030
+ });
1031
+ });
1032
+ });
1033
+ });
1034
+ });
1035
+
1036
+ /**
1037
+ * Reads the file names referenced by a serialized file (its lazy pointer sections)
1038
+ * without deserializing its content. Referenced files may reference further files.
1039
+ * @param {IntermediateFileSystem} fs a file system
1040
+ * @param {string} file absolute path of the serialized file
1041
+ * @returns {Promise<string[]>} referenced file names (without extension)
1042
+ */
1043
+ const getReferencedFilenames = (fs, file) =>
1044
+ file.endsWith(".gz") || file.endsWith(".br") || file.endsWith(".zst")
1045
+ ? getReferencedFilenamesCompressed(fs, file)
1046
+ : getReferencedFilenamesUncompressed(fs, file);
1047
+
812
1048
  // Exposed for testing the content-buffer boundary handling in `deserialize`.
813
- module.exports._deserialize = deserialize;
1049
+ FileMiddleware._deserialize = deserialize;
1050
+ FileMiddleware.getReferencedFilenames = getReferencedFilenames;
1051
+
1052
+ module.exports = FileMiddleware;
@@ -17,11 +17,15 @@ const RegExpObjectSerializer = require("./RegExpObjectSerializer");
17
17
  const SerializerMiddleware = require("./SerializerMiddleware");
18
18
  const SetObjectSerializer = require("./SetObjectSerializer");
19
19
 
20
- /** @typedef {import("../logging/Logger").Logger} Logger */
21
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
22
- /** @typedef {import("./SerializerMiddleware").LazyOptions} LazyOptions */
23
- /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
24
- /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
20
+ /** @import { Logger } from "../logging/Logger" */
21
+ /** @import { HashFunction } from "../util/Hash" */
22
+ /** @import { LazyOptions } from "./SerializerMiddleware" */
23
+ /**
24
+ * @import {
25
+ * ComplexSerializableType,
26
+ * PrimitiveSerializableType
27
+ * } from "./types"
28
+ */
25
29
 
26
30
  /** @typedef {new (...params: EXPECTED_ANY[]) => EXPECTED_ANY} Constructor */
27
31
 
@@ -933,5 +937,6 @@ class ObjectMiddleware extends SerializerMiddleware {
933
937
  }
934
938
  }
935
939
 
940
+ ObjectMiddleware.NOT_SERIALIZABLE = NOT_SERIALIZABLE;
941
+
936
942
  module.exports = ObjectMiddleware;
937
- module.exports.NOT_SERIALIZABLE = NOT_SERIALIZABLE;