@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -53,6 +53,7 @@ class DependenciesBlock {
53
53
  }
54
54
 
55
55
  /**
56
+ * Adds the provided dependency to the dependencies block.
56
57
  * @param {Dependency} dependency dependency being tied to block.
57
58
  * This is an "edge" pointing to another "node" on module graph.
58
59
  * @returns {void}
@@ -62,6 +63,7 @@ class DependenciesBlock {
62
63
  }
63
64
 
64
65
  /**
66
+ * Removes dependency.
65
67
  * @param {Dependency} dependency dependency being removed
66
68
  * @returns {void}
67
69
  */
@@ -73,7 +75,7 @@ class DependenciesBlock {
73
75
  }
74
76
 
75
77
  /**
76
- * Removes all dependencies and blocks
78
+ * Clear dependencies and blocks.
77
79
  * @returns {void}
78
80
  */
79
81
  clearDependenciesAndBlocks() {
@@ -82,6 +84,7 @@ class DependenciesBlock {
82
84
  }
83
85
 
84
86
  /**
87
+ * Updates the hash with the data contributed by this instance.
85
88
  * @param {Hash} hash the hash used to track dependencies
86
89
  * @param {UpdateHashContext} context context
87
90
  * @returns {void}
@@ -96,6 +99,7 @@ class DependenciesBlock {
96
99
  }
97
100
 
98
101
  /**
102
+ * Serializes this instance into the provided serializer context.
99
103
  * @param {ObjectSerializerContext} context context
100
104
  */
101
105
  serialize({ write }) {
@@ -104,6 +108,7 @@ class DependenciesBlock {
104
108
  }
105
109
 
106
110
  /**
111
+ * Restores this instance from the provided deserializer context.
107
112
  * @param {ObjectDeserializerContext} context context
108
113
  */
109
114
  deserialize({ read }) {
package/lib/Dependency.js CHANGED
@@ -14,13 +14,14 @@ const memoize = require("./util/memoize");
14
14
  /** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
15
15
  /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
16
16
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
17
- /** @typedef {import("./WebpackError")} WebpackError */
17
+ /** @typedef {import("./errors/WebpackError")} WebpackError */
18
18
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
19
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
20
  /** @typedef {import("./util/Hash")} Hash */
21
21
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
22
22
  /** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
23
23
  /**
24
+ * Defines the update hash context type used by this module.
24
25
  * @typedef {object} UpdateHashContext
25
26
  * @property {ChunkGraph} chunkGraph
26
27
  * @property {RuntimeSpec} runtime
@@ -28,12 +29,14 @@ const memoize = require("./util/memoize");
28
29
  */
29
30
 
30
31
  /**
32
+ * Defines the source position type used by this module.
31
33
  * @typedef {object} SourcePosition
32
34
  * @property {number} line
33
35
  * @property {number=} column
34
36
  */
35
37
 
36
38
  /**
39
+ * Defines the real dependency location type used by this module.
37
40
  * @typedef {object} RealDependencyLocation
38
41
  * @property {SourcePosition} start
39
42
  * @property {SourcePosition=} end
@@ -41,6 +44,7 @@ const memoize = require("./util/memoize");
41
44
  */
42
45
 
43
46
  /**
47
+ * Defines the synthetic dependency location type used by this module.
44
48
  * @typedef {object} SyntheticDependencyLocation
45
49
  * @property {string} name
46
50
  * @property {number=} index
@@ -51,20 +55,24 @@ const memoize = require("./util/memoize");
51
55
  /** @typedef {string} ExportInfoName */
52
56
 
53
57
  /**
58
+ * Defines the export spec type used by this module.
54
59
  * @typedef {object} ExportSpec
55
60
  * @property {ExportInfoName} name the name of the export
56
61
  * @property {boolean=} canMangle can the export be renamed (defaults to true)
57
62
  * @property {boolean=} terminalBinding is the export a terminal binding that should be checked for export star conflicts
63
+ * @property {boolean=} isPure calling this export has no observable side effects
58
64
  * @property {(string | ExportSpec)[]=} exports nested exports
59
65
  * @property {ModuleGraphConnection=} from when reexported: from which module
60
66
  * @property {string[] | null=} export when reexported: from which export
61
67
  * @property {number=} priority when reexported: with which priority
62
68
  * @property {boolean=} hidden export is not visible, because another export blends over it
69
+ * @property {import("./optimize/InlineExports").InlinedValue=} inlined when set: the export binds to a small primitive constant eligible for inlining
63
70
  */
64
71
 
65
72
  /** @typedef {Set<string>} ExportsSpecExcludeExports */
66
73
 
67
74
  /**
75
+ * Defines the exports spec type used by this module.
68
76
  * @typedef {object} ExportsSpec
69
77
  * @property {(string | ExportSpec)[] | true | null} exports exported names, true for unknown exports or null for no exports
70
78
  * @property {ExportsSpecExcludeExports=} excludeExports when exports = true, list of unaffected exports
@@ -73,13 +81,16 @@ const memoize = require("./util/memoize");
73
81
  * @property {number=} priority when reexported: with which priority
74
82
  * @property {boolean=} canMangle can the export be renamed (defaults to true)
75
83
  * @property {boolean=} terminalBinding are the exports terminal bindings that should be checked for export star conflicts
84
+ * @property {boolean=} isPure calling these exports has no observable side effects
76
85
  * @property {Module[]=} dependencies module on which the result depends on
77
86
  */
78
87
 
79
88
  /**
89
+ * Defines the referenced export type used by this module.
80
90
  * @typedef {object} ReferencedExport
81
91
  * @property {string[]} name name of the referenced export
82
92
  * @property {boolean=} canMangle when false, referenced export can not be mangled, defaults to true
93
+ * @property {boolean=} canInline when false, the referenced export can not be substituted with an inlined literal at this site, defaults to true
83
94
  */
84
95
 
85
96
  /** @typedef {string[][]} RawReferencedExports */
@@ -87,6 +98,20 @@ const memoize = require("./util/memoize");
87
98
 
88
99
  /** @typedef {(moduleGraphConnection: ModuleGraphConnection, runtime: RuntimeSpec) => ConnectionState} GetConditionFn */
89
100
 
101
+ /**
102
+ * Lazy barrel classification of a dependency within a side-effect-free module.
103
+ * `LAZY_UNTIL_LOCAL`: locally provided export name (`getLazyName`), requesting it requires no dependency.
104
+ * `LAZY_UNTIL_ID`: named re-export (`getLazyName`) deferred until the export name is requested.
105
+ * `LAZY_UNTIL_FALLBACK`: star re-export, deferred until an unknown name or all names are requested.
106
+ * `LAZY_UNTIL_REQUEST`: deferred together with other dependencies of the same request.
107
+ * @typedef {"local" | "id" | "*" | "@"} LazyUntil
108
+ */
109
+
110
+ const LAZY_UNTIL_LOCAL = /** @type {"local"} */ ("local");
111
+ const LAZY_UNTIL_ID = /** @type {"id"} */ ("id");
112
+ const LAZY_UNTIL_FALLBACK = /** @type {"*"} */ ("*");
113
+ const LAZY_UNTIL_REQUEST = /** @type {"@"} */ ("@");
114
+
90
115
  const TRANSITIVE = /** @type {symbol} */ (Symbol("transitive"));
91
116
 
92
117
  const getIgnoredModule = memoize(() => {
@@ -105,15 +130,16 @@ class Dependency {
105
130
  this._parentDependenciesBlock = undefined;
106
131
  /** @type {number} */
107
132
  this._parentDependenciesBlockIndex = -1;
108
- // TODO check if this can be moved into ModuleDependency
109
- /** @type {boolean} */
110
- this.weak = false;
111
- // TODO check if this can be moved into ModuleDependency
133
+ // stays on base: also set on ContextDependency, which is not a ModuleDependency
112
134
  /** @type {boolean | undefined} */
113
135
  this.optional = false;
136
+ /** @type {number} */
114
137
  this._locSL = 0;
138
+ /** @type {number} */
115
139
  this._locSC = 0;
140
+ /** @type {number} */
116
141
  this._locEL = 0;
142
+ /** @type {number} */
117
143
  this._locEC = 0;
118
144
  /** @type {undefined | number} */
119
145
  this._locI = undefined;
@@ -124,6 +150,7 @@ class Dependency {
124
150
  }
125
151
 
126
152
  /**
153
+ * Returns a display name for the type of dependency.
127
154
  * @returns {string} a display name for the type of dependency
128
155
  */
129
156
  get type() {
@@ -131,6 +158,7 @@ class Dependency {
131
158
  }
132
159
 
133
160
  /**
161
+ * Returns a dependency category, typical categories are "commonjs", "amd", "esm".
134
162
  * @returns {string} a dependency category, typical categories are "commonjs", "amd", "esm"
135
163
  */
136
164
  get category() {
@@ -138,6 +166,7 @@ class Dependency {
138
166
  }
139
167
 
140
168
  /**
169
+ * Returns location.
141
170
  * @returns {DependencyLocation} location
142
171
  */
143
172
  get loc() {
@@ -179,10 +208,14 @@ class Dependency {
179
208
  }
180
209
  this._locI = "index" in loc ? loc.index : undefined;
181
210
  this._locN = "name" in loc ? loc.name : undefined;
182
- this._loc = loc;
211
+ // Don't retain the passed object; `get loc` rebuilds it from the numbers
212
+ // above on demand, so dependencies whose loc is never read hold 4 numbers
213
+ // instead of a SourceLocation + two Position objects.
214
+ this._loc = undefined;
183
215
  }
184
216
 
185
217
  /**
218
+ * Updates loc using the provided start line.
186
219
  * @param {number} startLine start line
187
220
  * @param {number} startColumn start column
188
221
  * @param {number} endLine end line
@@ -199,6 +232,43 @@ class Dependency {
199
232
  }
200
233
 
201
234
  /**
235
+ * Updates loc from a source location plus an explicit index, without
236
+ * materializing the `loc` object (keeps `get loc` lazy). Replaces the
237
+ * `dep.loc = Object.create(loc); dep.loc.index = i` pattern, which both
238
+ * allocated a copy and stored the index outside the serialized fields.
239
+ * @param {DependencyLocation} loc source location (start/end/name read from it)
240
+ * @param {number} index dependency index within the statement
241
+ */
242
+ setLocWithIndex(loc, index) {
243
+ this.loc = loc;
244
+ this._locI = index;
245
+ }
246
+
247
+ /**
248
+ * Compares two dependencies by source location for sorting a module's
249
+ * `dependencies`, without materializing the `loc` objects (`get loc` caches
250
+ * its result, so comparing through it would retain a location object on every
251
+ * sorted dependency). These dependencies always carry a real source position,
252
+ * so only start (line, column) and the within-statement index are compared; a
253
+ * dependency without an index sorts after one that has an index at the same
254
+ * position.
255
+ * @param {Dependency} a first dependency
256
+ * @param {Dependency} b second dependency
257
+ * @returns {-1 | 0 | 1} compare result
258
+ */
259
+ static compareLocations(a, b) {
260
+ if (a._locSL !== b._locSL) return a._locSL < b._locSL ? -1 : 1;
261
+ if (a._locSC !== b._locSC) return a._locSC < b._locSC ? -1 : 1;
262
+ const ai = a._locI;
263
+ const bi = b._locI;
264
+ if (ai === bi) return 0;
265
+ if (ai === undefined) return 1;
266
+ if (bi === undefined) return -1;
267
+ return ai < bi ? -1 : 1;
268
+ }
269
+
270
+ /**
271
+ * Returns a request context.
202
272
  * @returns {string | undefined} a request context
203
273
  */
204
274
  getContext() {
@@ -206,6 +276,7 @@ class Dependency {
206
276
  }
207
277
 
208
278
  /**
279
+ * Returns an identifier to merge equal requests.
209
280
  * @returns {string | null} an identifier to merge equal requests
210
281
  */
211
282
  getResourceIdentifier() {
@@ -213,12 +284,52 @@ class Dependency {
213
284
  }
214
285
 
215
286
  /**
287
+ * Could affect referencing module.
216
288
  * @returns {boolean | TRANSITIVE} true, when changes to the referenced module could affect the referencing module; TRANSITIVE, when changes to the referenced module could affect referencing modules of the referencing module
217
289
  */
218
290
  couldAffectReferencingModule() {
219
291
  return TRANSITIVE;
220
292
  }
221
293
 
294
+ /**
295
+ * Returns the export name this dependency requests from its target module (lazy barrel optimization).
296
+ * @returns {string | true | null} export name, true for all exports, null for none
297
+ */
298
+ getForwardId() {
299
+ // unknown dependency types conservatively request all exports
300
+ return true;
301
+ }
302
+
303
+ /**
304
+ * Returns how this dependency may be deferred when its parent module is side-effect-free (lazy barrel optimization).
305
+ * @returns {LazyUntil | null} lazy classification, null when it must be processed eagerly
306
+ */
307
+ getLazyUntil() {
308
+ return null;
309
+ }
310
+
311
+ /**
312
+ * Returns the export name for a `LAZY_UNTIL_LOCAL`/`LAZY_UNTIL_ID` classification (lazy barrel optimization).
313
+ * @returns {string | null} export name, null when not applicable
314
+ */
315
+ getLazyName() {
316
+ return null;
317
+ }
318
+
319
+ /**
320
+ * Whether the lazy barrel currently defers creating this dependency's target module (lazy barrel optimization).
321
+ * @returns {boolean} true while deferred, so it must not be processed or rendered
322
+ */
323
+ isLazy() {
324
+ return false;
325
+ }
326
+
327
+ /**
328
+ * Sets whether the lazy barrel defers creating this dependency's target module (lazy barrel optimization).
329
+ * @param {boolean} value true to defer, false to create it now
330
+ */
331
+ setLazy(value) {}
332
+
222
333
  /**
223
334
  * Returns the referenced module and export
224
335
  * @deprecated
@@ -242,6 +353,7 @@ class Dependency {
242
353
  }
243
354
 
244
355
  /**
356
+ * Returns function to determine if the connection is active.
245
357
  * @param {ModuleGraph} moduleGraph module graph
246
358
  * @returns {null | false | GetConditionFn} function to determine if the connection is active
247
359
  */
@@ -259,7 +371,7 @@ class Dependency {
259
371
  }
260
372
 
261
373
  /**
262
- * Returns warnings
374
+ * Returns warnings.
263
375
  * @param {ModuleGraph} moduleGraph module graph
264
376
  * @returns {WebpackError[] | null | undefined} warnings
265
377
  */
@@ -268,7 +380,7 @@ class Dependency {
268
380
  }
269
381
 
270
382
  /**
271
- * Returns errors
383
+ * Returns errors.
272
384
  * @param {ModuleGraph} moduleGraph module graph
273
385
  * @returns {WebpackError[] | null | undefined} errors
274
386
  */
@@ -277,7 +389,7 @@ class Dependency {
277
389
  }
278
390
 
279
391
  /**
280
- * Update the hash
392
+ * Updates the hash with the data contributed by this instance.
281
393
  * @param {Hash} hash hash to be updated
282
394
  * @param {UpdateHashContext} context context
283
395
  * @returns {void}
@@ -293,6 +405,7 @@ class Dependency {
293
405
  }
294
406
 
295
407
  /**
408
+ * Gets module evaluation side effects state.
296
409
  * @param {ModuleGraph} moduleGraph the module graph
297
410
  * @returns {ConnectionState} how this dependency connects the module to referencing modules
298
411
  */
@@ -301,6 +414,7 @@ class Dependency {
301
414
  }
302
415
 
303
416
  /**
417
+ * Creates an ignored module.
304
418
  * @param {string} context context directory
305
419
  * @returns {Module} ignored module
306
420
  */
@@ -309,10 +423,18 @@ class Dependency {
309
423
  }
310
424
 
311
425
  /**
426
+ * Returns true if this dependency can be concatenated
427
+ * @returns {boolean} true if this dependency can be concatenated
428
+ */
429
+ canConcatenate() {
430
+ return false;
431
+ }
432
+
433
+ /**
434
+ * Serializes this instance into the provided serializer context.
312
435
  * @param {ObjectSerializerContext} context context
313
436
  */
314
437
  serialize({ write }) {
315
- write(this.weak);
316
438
  write(this.optional);
317
439
  write(this._locSL);
318
440
  write(this._locSC);
@@ -323,10 +445,10 @@ class Dependency {
323
445
  }
324
446
 
325
447
  /**
448
+ * Restores this instance from the provided deserializer context.
326
449
  * @param {ObjectDeserializerContext} context context
327
450
  */
328
451
  deserialize({ read }) {
329
- this.weak = read();
330
452
  this.optional = read();
331
453
  this._locSL = read();
332
454
  this._locSC = read();
@@ -341,10 +463,16 @@ class Dependency {
341
463
  Dependency.NO_EXPORTS_REFERENCED = [];
342
464
  /** @type {RawReferencedExports} */
343
465
  Dependency.EXPORTS_OBJECT_REFERENCED = [[]];
466
+ // Like EXPORTS_OBJECT_REFERENCED, but the reference can be rendered as a
467
+ // decoupled namespace object, so the module's exports stay mangleable.
468
+ // Same shape as EXPORTS_OBJECT_REFERENCED; only distinguished by identity.
469
+ /** @type {RawReferencedExports} */
470
+ Dependency.EXPORTS_OBJECT_REFERENCED_MANGLEABLE = [[]];
344
471
 
345
472
  // TODO remove in webpack 6
346
473
  Object.defineProperty(Dependency.prototype, "module", {
347
474
  /**
475
+ * Returns throws.
348
476
  * @deprecated
349
477
  * @returns {EXPECTED_ANY} throws
350
478
  */
@@ -355,6 +483,7 @@ Object.defineProperty(Dependency.prototype, "module", {
355
483
  },
356
484
 
357
485
  /**
486
+ * Updates module.
358
487
  * @deprecated
359
488
  * @returns {never} throws
360
489
  */
@@ -366,15 +495,30 @@ Object.defineProperty(Dependency.prototype, "module", {
366
495
  });
367
496
 
368
497
  /**
498
+ * Returns true if the dependency is a low priority dependency.
369
499
  * @param {Dependency} dependency dep
370
500
  * @returns {boolean} true if the dependency is a low priority dependency
371
501
  */
372
502
  Dependency.isLowPriorityDependency = (dependency) =>
373
503
  /** @type {ModuleDependency} */ (dependency).sourceOrder === Infinity;
374
504
 
505
+ // TODO in webpack 6, call canConcatenate() directly on the dependency instance instead of using this static method.
506
+ /**
507
+ * Returns true if the dependency can be concatenated (scope hoisting).
508
+ * @param {Dependency} dependency dep
509
+ * @returns {boolean} true if this dependency supports concatenation
510
+ */
511
+ Dependency.canConcatenate = (dependency) => {
512
+ if (typeof dependency.canConcatenate === "function") {
513
+ return dependency.canConcatenate();
514
+ }
515
+ return false;
516
+ };
517
+
375
518
  // TODO remove in webpack 6
376
519
  Object.defineProperty(Dependency.prototype, "disconnect", {
377
520
  /**
521
+ * Returns throws.
378
522
  * @deprecated
379
523
  * @returns {EXPECTED_ANY} throws
380
524
  */
@@ -386,5 +530,9 @@ Object.defineProperty(Dependency.prototype, "disconnect", {
386
530
  });
387
531
 
388
532
  Dependency.TRANSITIVE = TRANSITIVE;
533
+ Dependency.LAZY_UNTIL_LOCAL = LAZY_UNTIL_LOCAL;
534
+ Dependency.LAZY_UNTIL_ID = LAZY_UNTIL_ID;
535
+ Dependency.LAZY_UNTIL_FALLBACK = LAZY_UNTIL_FALLBACK;
536
+ Dependency.LAZY_UNTIL_REQUEST = LAZY_UNTIL_REQUEST;
389
537
 
390
538
  module.exports = Dependency;
@@ -19,11 +19,13 @@
19
19
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
20
20
 
21
21
  /**
22
+ * Defines the init fragment type used by this module.
22
23
  * @template T
23
24
  * @typedef {import("./InitFragment")<T>} InitFragment
24
25
  */
25
26
 
26
27
  /**
28
+ * Defines the dependency template context type used by this module.
27
29
  * @typedef {object} DependencyTemplateContext
28
30
  * @property {RuntimeTemplate} runtimeTemplate the runtime template
29
31
  * @property {DependencyTemplates} dependencyTemplates the dependency templates
@@ -39,15 +41,18 @@
39
41
  */
40
42
 
41
43
  /**
44
+ * Defines the css dependency template context extras type used by this module.
42
45
  * @typedef {object} CssDependencyTemplateContextExtras
43
46
  * @property {CssData} cssData the css exports data
44
47
  * @property {string} type the css exports data
45
48
  */
46
49
 
47
50
  /**
51
+ * Defines the css data type used by this module.
48
52
  * @typedef {object} CssData
49
53
  * @property {boolean} esModule whether export __esModule
50
54
  * @property {Map<string, string>} exports the css exports
55
+ * @property {Map<string, { line: number, column: number }>=} exportLocs source position (line is 1-based, column is 0-based) of each export's defining identifier in the original CSS, used to emit fine-grained JS-to-CSS source mappings
51
56
  */
52
57
 
53
58
  /** @typedef {DependencyTemplateContext & CssDependencyTemplateContextExtras} CssDependencyTemplateContext */
@@ -55,6 +60,7 @@
55
60
  class DependencyTemplate {
56
61
  /* istanbul ignore next */
57
62
  /**
63
+ * Applies the plugin by registering its hooks on the compiler.
58
64
  * @abstract
59
65
  * @param {Dependency} dependency the dependency for which the template should be applied
60
66
  * @param {ReplaceSource} source the current replace source which can be modified
@@ -62,7 +68,7 @@ class DependencyTemplate {
62
68
  * @returns {void}
63
69
  */
64
70
  apply(dependency, source, templateContext) {
65
- const AbstractMethodError = require("./AbstractMethodError");
71
+ const AbstractMethodError = require("./errors/AbstractMethodError");
66
72
 
67
73
  throw new AbstractMethodError();
68
74
  }
@@ -14,6 +14,7 @@ const createHash = require("./util/createHash");
14
14
 
15
15
  class DependencyTemplates {
16
16
  /**
17
+ * Creates an instance of DependencyTemplates.
17
18
  * @param {HashFunction} hashFunction the hash function to use
18
19
  */
19
20
  constructor(hashFunction = DEFAULTS.HASH_FUNCTION) {
@@ -26,6 +27,7 @@ class DependencyTemplates {
26
27
  }
27
28
 
28
29
  /**
30
+ * Returns template for this dependency.
29
31
  * @param {DependencyConstructor} dependency Constructor of Dependency
30
32
  * @returns {DependencyTemplate | undefined} template for this dependency
31
33
  */
@@ -34,6 +36,7 @@ class DependencyTemplates {
34
36
  }
35
37
 
36
38
  /**
39
+ * Updates value using the provided dependency.
37
40
  * @param {DependencyConstructor} dependency Constructor of Dependency
38
41
  * @param {DependencyTemplate} dependencyTemplate template for this dependency
39
42
  * @returns {void}
@@ -43,6 +46,7 @@ class DependencyTemplates {
43
46
  }
44
47
 
45
48
  /**
49
+ * Updates the hash with the data contributed by this instance.
46
50
  * @param {string} part additional hash contributor
47
51
  * @returns {void}
48
52
  */
@@ -214,6 +214,7 @@ const envToDefinitions = (env) => {
214
214
 
215
215
  class DotenvPlugin {
216
216
  /**
217
+ * Creates an instance of DotenvPlugin.
217
218
  * @param {DotenvPluginOptions=} options options object
218
219
  */
219
220
  constructor(options = {}) {
@@ -222,6 +223,7 @@ class DotenvPlugin {
222
223
  }
223
224
 
224
225
  /**
226
+ * Applies the plugin by registering its hooks on the compiler.
225
227
  * @param {Compiler} compiler the compiler instance
226
228
  * @returns {void}
227
229
  */
@@ -355,6 +357,7 @@ class DotenvPlugin {
355
357
  }
356
358
 
357
359
  /**
360
+ * Loads the provided compiler.
358
361
  * @private
359
362
  * @param {Compiler} compiler compiler
360
363
  * @param {ItemCacheFacade} itemCache item cache facade
@@ -21,6 +21,7 @@ const PLUGIN_NAME = "DynamicEntryPlugin";
21
21
 
22
22
  class DynamicEntryPlugin {
23
23
  /**
24
+ * Creates an instance of DynamicEntryPlugin.
24
25
  * @param {string} context the context path
25
26
  * @param {EntryDynamic} entry the entry value
26
27
  */
@@ -32,7 +33,7 @@ class DynamicEntryPlugin {
32
33
  }
33
34
 
34
35
  /**
35
- * Apply the plugin
36
+ * Applies the plugin by registering its hooks on the compiler.
36
37
  * @param {Compiler} compiler the compiler instance
37
38
  * @returns {void}
38
39
  */
@@ -65,6 +66,7 @@ class DynamicEntryPlugin {
65
66
  promises.push(
66
67
  new Promise(
67
68
  /**
69
+ * Handles the callback logic for this hook.
68
70
  * @param {(value?: undefined) => void} resolve resolve
69
71
  * @param {(reason?: Error) => void} reject reject
70
72
  */
@@ -5,15 +5,41 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { SyncBailHook } = require("tapable");
9
+
8
10
  /** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescription */
9
11
  /** @typedef {import("../declarations/WebpackOptions").EntryNormalized} Entry */
10
12
  /** @typedef {import("./Compiler")} Compiler */
11
13
  /** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
12
14
 
15
+ /**
16
+ * @typedef {object} EntryOptionPluginHooks
17
+ * @property {SyncBailHook<[string, string, EntryDescription], string | undefined>} entry transform an entry into a different request (e.g. wrap a non-HTML entry in a synthetic HTML module); return `undefined` to keep the default behavior
18
+ */
19
+
13
20
  const PLUGIN_NAME = "EntryOptionPlugin";
14
21
 
22
+ /** @type {WeakMap<Compiler, EntryOptionPluginHooks>} */
23
+ const hooksMap = new WeakMap();
24
+
15
25
  class EntryOptionPlugin {
16
26
  /**
27
+ * @param {Compiler} compiler the compiler
28
+ * @returns {EntryOptionPluginHooks} the hooks
29
+ */
30
+ static getHooks(compiler) {
31
+ let hooks = hooksMap.get(compiler);
32
+ if (hooks === undefined) {
33
+ hooks = {
34
+ entry: new SyncBailHook(["context", "name", "entryDescription"])
35
+ };
36
+ hooksMap.set(compiler, hooks);
37
+ }
38
+ return hooks;
39
+ }
40
+
41
+ /**
42
+ * Applies the plugin by registering its hooks on the compiler.
17
43
  * @param {Compiler} compiler the compiler instance one is tapping into
18
44
  * @returns {void}
19
45
  */
@@ -25,6 +51,7 @@ class EntryOptionPlugin {
25
51
  }
26
52
 
27
53
  /**
54
+ * Apply entry option.
28
55
  * @param {Compiler} compiler the compiler
29
56
  * @param {string} context context directory
30
57
  * @param {Entry} entry request
@@ -48,14 +75,26 @@ class EntryOptionPlugin {
48
75
  const descImport =
49
76
  /** @type {Exclude<EntryDescription["import"], undefined>} */
50
77
  (desc.import);
51
- for (const entry of descImport) {
52
- new EntryPlugin(context, entry, options).apply(compiler);
78
+ // A plugin (e.g. HtmlModulesPlugin) may rewrite the entry into a
79
+ // single synthetic request; otherwise each import becomes an entry.
80
+ const request = EntryOptionPlugin.getHooks(compiler).entry.call(
81
+ context,
82
+ name,
83
+ desc
84
+ );
85
+ if (request !== undefined) {
86
+ new EntryPlugin(context, request, options).apply(compiler);
87
+ } else {
88
+ for (const entry of descImport) {
89
+ new EntryPlugin(context, entry, options).apply(compiler);
90
+ }
53
91
  }
54
92
  }
55
93
  }
56
94
  }
57
95
 
58
96
  /**
97
+ * Entry description to options.
59
98
  * @param {Compiler} compiler the compiler
60
99
  * @param {string} name entry name
61
100
  * @param {EntryDescription} desc entry description
@@ -74,6 +113,7 @@ class EntryOptionPlugin {
74
113
  chunkLoading: desc.chunkLoading,
75
114
  asyncChunks: desc.asyncChunks,
76
115
  wasmLoading: desc.wasmLoading,
116
+ worker: desc.worker,
77
117
  library: desc.library
78
118
  };
79
119
  if (desc.chunkLoading) {
@@ -20,13 +20,15 @@ class EntryPlugin {
20
20
  * @param {EntryOptions | string=} options entry options (passing a string is deprecated)
21
21
  */
22
22
  constructor(context, entry, options) {
23
+ /** @type {string} */
23
24
  this.context = context;
25
+ /** @type {string} */
24
26
  this.entry = entry;
25
27
  this.options = options || "";
26
28
  }
27
29
 
28
30
  /**
29
- * Apply the plugin
31
+ * Applies the plugin by registering its hooks on the compiler.
30
32
  * @param {Compiler} compiler the compiler instance
31
33
  * @returns {void}
32
34
  */
@@ -52,6 +54,7 @@ class EntryPlugin {
52
54
  }
53
55
 
54
56
  /**
57
+ * Creates a dependency.
55
58
  * @param {string} entry entry request
56
59
  * @param {EntryOptions | string} options entry options (passing string is deprecated)
57
60
  * @returns {EntryDependency} the dependency