@depup/webpack 5.109.2-depup.0 → 5.110.3-depup.0

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