@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
@@ -22,6 +22,7 @@ const {
22
22
  CSS_MODULE_TYPE_AUTO,
23
23
  CSS_MODULE_TYPE_GLOBAL,
24
24
  CSS_MODULE_TYPE_MODULE,
25
+ HTML_MODULE_TYPE,
25
26
  JAVASCRIPT_MODULE_TYPE_AUTO,
26
27
  JAVASCRIPT_MODULE_TYPE_DYNAMIC,
27
28
  JAVASCRIPT_MODULE_TYPE_ESM,
@@ -30,6 +31,7 @@ const {
30
31
  WEBASSEMBLY_MODULE_TYPE_SYNC
31
32
  } = require("../ModuleTypeConstants");
32
33
  const Template = require("../Template");
34
+ const RuleSetCompiler = require("../rules/RuleSetCompiler");
33
35
  const { cleverMerge } = require("../util/cleverMerge");
34
36
  const {
35
37
  getDefaultTarget,
@@ -70,6 +72,7 @@ const {
70
72
  /** @typedef {import("../../declarations/WebpackOptions").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */
71
73
  /** @typedef {import("../../declarations/WebpackOptions").Performance} Performance */
72
74
  /** @typedef {import("../../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
75
+ /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
73
76
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRules} RuleSetRules */
74
77
  /** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
75
78
  /** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
@@ -80,11 +83,13 @@ const {
80
83
  /** @typedef {import("./target").TargetProperties} TargetProperties */
81
84
 
82
85
  /**
86
+ * Defines the recursive non nullable type used by this module.
83
87
  * @template T
84
88
  * @typedef {{ [P in keyof T]-?: T[P] extends object ? RecursiveNonNullable<NonNullable<T[P]>> : NonNullable<T[P]> }} RecursiveNonNullable
85
89
  */
86
90
 
87
91
  /**
92
+ * Defines the shared type used by this module.
88
93
  * @typedef {Output & {
89
94
  * uniqueName: NonNullable<Output["uniqueName"]>,
90
95
  * filename: NonNullable<Output["filename"]>,
@@ -100,6 +105,7 @@ const {
100
105
  * devtoolNamespace: NonNullable<Output["devtoolNamespace"]>,
101
106
  * publicPath: NonNullable<Output["publicPath"]>,
102
107
  * workerPublicPath: NonNullable<Output["workerPublicPath"]>,
108
+ * workerChunkFilename: NonNullable<Output["workerChunkFilename"]>,
103
109
  * workerWasmLoading: NonNullable<Output["workerWasmLoading"]>,
104
110
  * workerChunkLoading: NonNullable<Output["workerChunkLoading"]>,
105
111
  * chunkFormat: NonNullable<Output["chunkFormat"]>,
@@ -120,6 +126,7 @@ const {
120
126
  * compareBeforeEmit: NonNullable<Output["compareBeforeEmit"]>,
121
127
  * strictModuleErrorHandling: NonNullable<Output["strictModuleErrorHandling"]>,
122
128
  * strictModuleExceptionHandling: NonNullable<Output["strictModuleExceptionHandling"]>,
129
+ * strictModuleResolution: NonNullable<Output["strictModuleResolution"]>,
123
130
  * importFunctionName: NonNullable<Output["importFunctionName"]>,
124
131
  * importMetaName: NonNullable<Output["importMetaName"]>,
125
132
  * environment: RecursiveNonNullable<Output["environment"]>,
@@ -129,6 +136,7 @@ const {
129
136
  */
130
137
 
131
138
  /**
139
+ * Defines the shared type used by this module.
132
140
  * @typedef {SnapshotOptions & {
133
141
  * managedPaths: NonNullable<SnapshotOptions["managedPaths"]>,
134
142
  * unmanagedPaths: NonNullable<SnapshotOptions["unmanagedPaths"]>,
@@ -141,6 +149,7 @@ const {
141
149
  */
142
150
 
143
151
  /**
152
+ * Defines the shared type used by this module.
144
153
  * @typedef {Optimization & {
145
154
  * runtimeChunk: NonNullable<Optimization["runtimeChunk"]>,
146
155
  * splitChunks: NonNullable<Optimization["splitChunks"]>,
@@ -155,6 +164,7 @@ const {
155
164
  * usedExports: NonNullable<Optimization["usedExports"]>,
156
165
  * mangleExports: NonNullable<Optimization["mangleExports"]>,
157
166
  * innerGraph: NonNullable<Optimization["innerGraph"]>,
167
+ * inlineExports: NonNullable<Optimization["inlineExports"]>,
158
168
  * concatenateModules: NonNullable<Optimization["concatenateModules"]>,
159
169
  * avoidEntryIife: NonNullable<Optimization["avoidEntryIife"]>,
160
170
  * emitOnErrors: NonNullable<Optimization["emitOnErrors"]>,
@@ -169,6 +179,7 @@ const {
169
179
  */
170
180
 
171
181
  /**
182
+ * Defines the shared type used by this module.
172
183
  * @typedef {ExternalsPresets & {
173
184
  * web: NonNullable<ExternalsPresets["web"]>,
174
185
  * node: NonNullable<ExternalsPresets["node"]>,
@@ -181,6 +192,7 @@ const {
181
192
  */
182
193
 
183
194
  /**
195
+ * Defines the shared type used by this module.
184
196
  * @typedef {InfrastructureLogging & {
185
197
  * stream: NonNullable<InfrastructureLogging["stream"]>,
186
198
  * level: NonNullable<InfrastructureLogging["level"]>,
@@ -191,14 +203,17 @@ const {
191
203
  */
192
204
 
193
205
  /**
206
+ * Defines the webpack options normalized with base defaults type used by this module.
194
207
  * @typedef {WebpackOptionsNormalized & { context: NonNullable<WebpackOptionsNormalized["context"]> } & { infrastructureLogging: InfrastructureLoggingNormalizedWithDefaults }} WebpackOptionsNormalizedWithBaseDefaults
195
208
  */
196
209
 
197
210
  /**
211
+ * Defines the webpack options normalized with defaults type used by this module.
198
212
  * @typedef {WebpackOptionsNormalizedWithBaseDefaults & { target: NonNullable<WebpackOptionsNormalized["target"]> } & { output: OutputNormalizedWithDefaults } & { optimization: OptimizationNormalizedWithDefaults } & { devtool: NonNullable<WebpackOptionsNormalized["devtool"]> } & { stats: NonNullable<WebpackOptionsNormalized["stats"]> } & { node: NonNullable<WebpackOptionsNormalized["node"]> } & { profile: NonNullable<WebpackOptionsNormalized["profile"]> } & { parallelism: NonNullable<WebpackOptionsNormalized["parallelism"]> } & { snapshot: SnapshotNormalizedWithDefaults } & { externalsPresets: ExternalsPresetsNormalizedWithDefaults } & { externalsType: NonNullable<WebpackOptionsNormalized["externalsType"]> } & { watch: NonNullable<WebpackOptionsNormalized["watch"]> } & { performance: NonNullable<WebpackOptionsNormalized["performance"]> } & { recordsInputPath: NonNullable<WebpackOptionsNormalized["recordsInputPath"]> } & { recordsOutputPath: NonNullable<WebpackOptionsNormalized["recordsOutputPath"]> } & { dotenv: NonNullable<WebpackOptionsNormalized["dotenv"]> }} WebpackOptionsNormalizedWithDefaults
199
213
  */
200
214
 
201
215
  /**
216
+ * Defines the resolved options type used by this module.
202
217
  * @typedef {object} ResolvedOptions
203
218
  * @property {PlatformTargetProperties | false} platform - platform target properties
204
219
  */
@@ -211,7 +226,7 @@ const DEFAULTS = {
211
226
  };
212
227
 
213
228
  /**
214
- * Sets a constant default value when undefined
229
+ * Processes the provided obj.
215
230
  * @template T
216
231
  * @template {keyof T} P
217
232
  * @param {T} obj an object
@@ -226,7 +241,7 @@ const D = (obj, prop, value) => {
226
241
  };
227
242
 
228
243
  /**
229
- * Sets a dynamic default value when undefined, by calling the factory function
244
+ * Processes the provided obj.
230
245
  * @template T
231
246
  * @template {keyof T} P
232
247
  * @param {T} obj an object
@@ -282,6 +297,7 @@ const A = (obj, prop, factory) => {
282
297
  };
283
298
 
284
299
  /**
300
+ * Apply webpack options base defaults.
285
301
  * @param {WebpackOptionsNormalized} options options to be modified
286
302
  * @returns {void}
287
303
  */
@@ -291,6 +307,7 @@ const applyWebpackOptionsBaseDefaults = (options) => {
291
307
  };
292
308
 
293
309
  /**
310
+ * Apply webpack options defaults.
294
311
  * @param {WebpackOptionsNormalized} options options to be modified
295
312
  * @param {number=} compilerIndex index of compiler
296
313
  * @returns {ResolvedOptions} Resolved options after apply defaults
@@ -326,6 +343,26 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
326
343
  }
327
344
  }
328
345
 
346
+ D(options, "watch", false);
347
+ D(options, "profile", false);
348
+ D(options, "parallelism", 100);
349
+ D(options, "recordsInputPath", false);
350
+ D(options, "recordsOutputPath", false);
351
+
352
+ // Capture the raw html intent before "auto" is resolved: only an explicit
353
+ // `html: true` (or futureDefaults) keeps `.html` ahead of `.js` when resolving.
354
+ const htmlExplicitlyEnabled = options.experiments.html === true;
355
+ const htmlWasUnset = options.experiments.html === undefined;
356
+
357
+ applyExperimentsDefaults(options.experiments, {
358
+ production,
359
+ development,
360
+ targetProperties,
361
+ rules: options.module.rules
362
+ });
363
+
364
+ // After experiments are resolved: the default dev source map depends on the
365
+ // (possibly "auto"-resolved) `experiments.css` value.
329
366
  F(
330
367
  options,
331
368
  "devtool",
@@ -348,24 +385,20 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
348
385
  )
349
386
  );
350
387
 
351
- D(options, "watch", false);
352
- D(options, "profile", false);
353
- D(options, "parallelism", 100);
354
- D(options, "recordsInputPath", false);
355
- D(options, "recordsOutputPath", false);
356
-
357
- applyExperimentsDefaults(options.experiments, {
358
- production,
359
- development,
360
- targetProperties
361
- });
362
-
363
388
  const futureDefaults =
364
389
  /** @type {NonNullable<ExperimentsNormalized["futureDefaults"]>} */
365
390
  (options.experiments.futureDefaults);
366
391
 
392
+ // `.html` outranks `.js` only for an explicit opt-in (`html: true`, or the
393
+ // futureDefaults-forced default), never for the auto-enabled default.
394
+ const htmlFirst = htmlExplicitlyEnabled || (htmlWasUnset && futureDefaults);
395
+
367
396
  F(options, "validate", () => !(futureDefaults === true && production));
368
397
 
398
+ // Progress lives on infrastructureLogging; webpack@6 shows the interactive
399
+ // bar by default (`"auto"` = TTY only), webpack@5 stays opt-in.
400
+ D(options.infrastructureLogging, "progress", futureDefaults ? "auto" : false);
401
+
369
402
  F(options, "cache", () =>
370
403
  development ? { type: /** @type {"memory"} */ ("memory") } : false
371
404
  );
@@ -399,7 +432,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
399
432
  entry: options.entry,
400
433
  futureDefaults,
401
434
  asyncWebAssembly:
402
- /** @type {NonNullable<ExperimentsNormalized["asyncWebAssembly"]>} */
435
+ /** @type {boolean} */
403
436
  (options.experiments.asyncWebAssembly)
404
437
  });
405
438
 
@@ -415,11 +448,17 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
415
448
  /** @type {NonNullable<ExperimentsNormalized["syncWebAssembly"]>} */
416
449
  (options.experiments.syncWebAssembly),
417
450
  asyncWebAssembly:
418
- /** @type {NonNullable<ExperimentsNormalized["asyncWebAssembly"]>} */
451
+ /** @type {boolean} */
419
452
  (options.experiments.asyncWebAssembly),
420
453
  css:
421
- /** @type {NonNullable<ExperimentsNormalized["css"]>} */
454
+ /** @type {boolean} */
422
455
  (options.experiments.css),
456
+ html:
457
+ /** @type {boolean} */
458
+ (options.experiments.html),
459
+ typescript:
460
+ /** @type {boolean} */
461
+ (options.experiments.typescript),
423
462
  deferImport:
424
463
  /** @type {NonNullable<ExperimentsNormalized["deferImport"]>} */
425
464
  (options.experiments.deferImport),
@@ -433,9 +472,33 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
433
472
  mode: options.mode,
434
473
  outputModule:
435
474
  /** @type {NonNullable<WebpackOptionsNormalized["output"]["module"]>} */
436
- (options.output.module)
475
+ (options.output.module),
476
+ library: options.output.library
437
477
  });
438
478
 
479
+ // `output.resourceHints.urlHints` shorthand: fan the project-wide rules out
480
+ // as the base `urlHints` of every URL-emitting parser (JS `new URL`, CSS
481
+ // `url()`, HTML `<img src>`). They go first so parser-scoped
482
+ // `parser.<type>.urlHints` rules — matched later, last-match-wins — override.
483
+ const outputUrlHints =
484
+ options.output.resourceHints && options.output.resourceHints.urlHints;
485
+ if (outputUrlHints && outputUrlHints.length > 0) {
486
+ for (const type of [
487
+ "javascript",
488
+ CSS_MODULE_TYPE,
489
+ CSS_MODULE_TYPE_AUTO,
490
+ CSS_MODULE_TYPE_MODULE,
491
+ CSS_MODULE_TYPE_GLOBAL,
492
+ HTML_MODULE_TYPE
493
+ ]) {
494
+ const parser =
495
+ /** @type {{ urlHints?: import("../../declarations/WebpackOptions").UrlHintRule[] } | undefined} */
496
+ (options.module.parser[type]);
497
+ if (!parser) continue;
498
+ parser.urlHints = [...outputUrlHints, ...(parser.urlHints || [])];
499
+ }
500
+ }
501
+
439
502
  applyExternalsPresetsDefaults(options.externalsPresets, {
440
503
  targetProperties,
441
504
  buildHttp: Boolean(options.experiments.buildHttp),
@@ -448,7 +511,13 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
448
511
  /** @type {NonNullable<WebpackOptionsNormalized["loader"]>} */ (
449
512
  options.loader
450
513
  ),
451
- { targetProperties, environment: options.output.environment }
514
+ {
515
+ targetProperties,
516
+ environment: options.output.environment,
517
+ outputModule:
518
+ /** @type {NonNullable<WebpackOptionsNormalized["output"]["module"]>} */
519
+ (options.output.module)
520
+ }
452
521
  );
453
522
 
454
523
  F(options, "externalsType", () => {
@@ -492,7 +561,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
492
561
  development,
493
562
  production,
494
563
  css:
495
- /** @type {NonNullable<ExperimentsNormalized["css"]>} */
564
+ /** @type {boolean} */
496
565
  (options.experiments.css),
497
566
  records: Boolean(options.recordsInputPath || options.recordsOutputPath)
498
567
  });
@@ -504,8 +573,15 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
504
573
  targetProperties,
505
574
  mode: /** @type {Mode} */ (options.mode),
506
575
  css:
507
- /** @type {NonNullable<ExperimentsNormalized["css"]>} */
508
- (options.experiments.css)
576
+ /** @type {boolean} */
577
+ (options.experiments.css),
578
+ html:
579
+ /** @type {boolean} */
580
+ (options.experiments.html),
581
+ htmlFirst,
582
+ typescript:
583
+ /** @type {boolean} */
584
+ (options.experiments.typescript)
509
585
  }),
510
586
  options.resolve
511
587
  );
@@ -524,36 +600,103 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
524
600
  browser: targetProperties.browser,
525
601
  webworker: targetProperties.webworker,
526
602
  node: targetProperties.node,
603
+ deno: targetProperties.deno,
604
+ bun: targetProperties.bun,
527
605
  nwjs: targetProperties.nwjs,
528
- electron: targetProperties.electron
606
+ electron: targetProperties.electron,
607
+ // spans both web and node (target "universal" or ["web", "node"])
608
+ universal:
609
+ targetProperties.node === null && targetProperties.web === null
529
610
  }
530
611
  };
531
612
  };
532
613
 
533
614
  /**
615
+ * Apply experiments defaults.
534
616
  * @param {ExperimentsNormalized} experiments options
535
617
  * @param {object} options options
536
618
  * @param {boolean} options.production is production
537
619
  * @param {boolean} options.development is development mode
538
620
  * @param {TargetProperties | false} options.targetProperties target properties
621
+ * @param {RuleSetRules} options.rules user `module.rules`, used to resolve the css/html/asyncWebAssembly/typescript "auto" defaults
539
622
  * @returns {void}
540
623
  */
541
624
  const applyExperimentsDefaults = (
542
625
  experiments,
543
- { production, development, targetProperties }
626
+ { production, development, targetProperties, rules }
544
627
  ) => {
545
628
  D(experiments, "futureDefaults", false);
546
629
  D(experiments, "backCompat", !experiments.futureDefaults);
547
630
  // TODO do we need sync web assembly in webpack@6?
548
631
  D(experiments, "syncWebAssembly", false);
549
- D(experiments, "asyncWebAssembly", experiments.futureDefaults);
550
- D(experiments, "outputModule", false);
632
+ D(
633
+ experiments,
634
+ "asyncWebAssembly",
635
+ experiments.futureDefaults ? true : "auto"
636
+ );
637
+ // the universal target (web + node, neither specific) only works as ESM
638
+ const universal =
639
+ Boolean(targetProperties) &&
640
+ /** @type {TargetProperties} */ (targetProperties).node === null &&
641
+ /** @type {TargetProperties} */ (targetProperties).web === null;
642
+ // the deno and bun targets only emit ECMAScript modules
643
+ const deno =
644
+ Boolean(targetProperties) &&
645
+ /** @type {TargetProperties} */ (targetProperties).deno === true;
646
+ const bun =
647
+ Boolean(targetProperties) &&
648
+ /** @type {TargetProperties} */ (targetProperties).bun === true;
649
+ D(experiments, "outputModule", universal || deno || bun);
551
650
  D(experiments, "lazyCompilation", undefined);
552
651
  D(experiments, "buildHttp", undefined);
553
652
  D(experiments, "cacheUnaffected", experiments.futureDefaults);
554
653
  D(experiments, "deferImport", false);
555
654
  D(experiments, "sourceImport", false);
556
- F(experiments, "css", () => (experiments.futureDefaults ? true : undefined));
655
+ F(experiments, "css", () => (experiments.futureDefaults ? true : "auto"));
656
+ F(experiments, "html", () => (experiments.futureDefaults ? true : "auto"));
657
+ F(experiments, "typescript", () =>
658
+ experiments.futureDefaults ? true : "auto"
659
+ );
660
+
661
+ // Resolve the "auto" default: enable the built-in css/html module type unless
662
+ // the user already registered a loader (or explicit type) for these files, so
663
+ // enabling them by default does not break existing css-loader/html-loader setups.
664
+ // The built-in `/\.css$/i` rule also covers `.module.css`, so a loader scoped to
665
+ // CSS modules must disable the built-in type too — sample both extensions.
666
+ // When enabled implicitly the value stays `"auto"` (truthy): Css/HtmlModulesPlugin
667
+ // then step aside per-module for requests that loaders were applied to
668
+ // (inline requests or loaders injected via hooks, e.g. html-webpack-plugin).
669
+ // TODO webpack 6: css/html default to `true`, drop the `"auto"` marker.
670
+ if (experiments.css === "auto") {
671
+ experiments.css =
672
+ !(
673
+ RuleSetCompiler.hasRuleForResource(rules, "/file.css") ||
674
+ RuleSetCompiler.hasRuleForResource(rules, "/file.module.css")
675
+ ) && "auto";
676
+ }
677
+ if (experiments.html === "auto") {
678
+ experiments.html =
679
+ !RuleSetCompiler.hasRuleForResource(rules, "/file.html") && "auto";
680
+ }
681
+ // Auto-enable only when the built-in TypeScript support can actually run:
682
+ // it needs `module.stripTypeScriptTypes` (Node.js >= 22.6) and must step
683
+ // aside for a loader registered for `.ts`/`.mts`/`.cts` (e.g. ts-loader).
684
+ if (experiments.typescript === "auto") {
685
+ experiments.typescript =
686
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
687
+ typeof require("module").stripTypeScriptTypes === "function" &&
688
+ !(
689
+ RuleSetCompiler.hasRuleForResource(rules, "/file.ts") ||
690
+ RuleSetCompiler.hasRuleForResource(rules, "/file.mts") ||
691
+ RuleSetCompiler.hasRuleForResource(rules, "/file.cts")
692
+ );
693
+ }
694
+ // `syncWebAssembly` already claims `.wasm`, so don't let "auto" override it.
695
+ if (experiments.asyncWebAssembly === "auto") {
696
+ experiments.asyncWebAssembly =
697
+ !experiments.syncWebAssembly &&
698
+ !RuleSetCompiler.hasRuleForResource(rules, "/file.wasm");
699
+ }
557
700
 
558
701
  if (typeof experiments.buildHttp === "object") {
559
702
  D(experiments.buildHttp, "frozen", production);
@@ -562,6 +705,7 @@ const applyExperimentsDefaults = (
562
705
  };
563
706
 
564
707
  /**
708
+ * Apply cache defaults.
565
709
  * @param {CacheOptionsNormalized} cache options
566
710
  * @param {object} options options
567
711
  * @param {string} options.name name
@@ -644,6 +788,7 @@ const applyCacheDefaults = (
644
788
  };
645
789
 
646
790
  /**
791
+ * Apply snapshot defaults.
647
792
  * @param {SnapshotOptions} snapshot options
648
793
  * @param {object} options options
649
794
  * @param {boolean} options.production is production
@@ -721,6 +866,7 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
721
866
  };
722
867
 
723
868
  /**
869
+ * Apply javascript parser options defaults.
724
870
  * @param {JavascriptParserOptions} parserOptions parser options
725
871
  * @param {object} options options
726
872
  * @param {boolean} options.futureDefaults is future defaults enabled
@@ -728,11 +874,21 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
728
874
  * @param {boolean} options.sourceImport is import source enabled
729
875
  * @param {boolean} options.isNode is node target platform
730
876
  * @param {boolean} options.outputModule is output.module enabled
877
+ * @param {WebpackOptionsNormalized["output"]["library"]} options.library library options
878
+ * @param {boolean} options.typescript is typescript enabled
731
879
  * @returns {void}
732
880
  */
733
881
  const applyJavascriptParserOptionsDefaults = (
734
882
  parserOptions,
735
- { futureDefaults, deferImport, sourceImport, isNode, outputModule }
883
+ {
884
+ futureDefaults,
885
+ deferImport,
886
+ sourceImport,
887
+ isNode,
888
+ outputModule,
889
+ library,
890
+ typescript
891
+ }
736
892
  ) => {
737
893
  D(parserOptions, "unknownContextRequest", ".");
738
894
  D(parserOptions, "unknownContextRegExp", false);
@@ -755,10 +911,14 @@ const applyJavascriptParserOptionsDefaults = (
755
911
  D(parserOptions, "dynamicUrl", true);
756
912
  D(parserOptions, "deferImport", deferImport);
757
913
  D(parserOptions, "sourceImport", sourceImport);
914
+ D(parserOptions, "typescript", typescript);
758
915
  if (futureDefaults) D(parserOptions, "exportsPresence", "error");
916
+ D(parserOptions, "strictModeViolations", futureDefaults ? "error" : "warn");
917
+ D(parserOptions, "anonymousDefaultExportName", !library);
759
918
  };
760
919
 
761
920
  /**
921
+ * Apply json generator options defaults.
762
922
  * @param {JsonGeneratorOptions} generatorOptions generator options
763
923
  * @returns {void}
764
924
  */
@@ -767,6 +927,7 @@ const applyJsonGeneratorOptionsDefaults = (generatorOptions) => {
767
927
  };
768
928
 
769
929
  /**
930
+ * Apply css generator options defaults.
770
931
  * @param {CssGeneratorOptions} generatorOptions generator options
771
932
  * @param {object} options options
772
933
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -785,12 +946,15 @@ const applyCssGeneratorOptionsDefaults = (
785
946
  };
786
947
 
787
948
  /**
949
+ * Apply module defaults.
788
950
  * @param {ModuleOptions} module options
789
951
  * @param {object} options options
790
952
  * @param {boolean} options.cache is caching enabled
791
953
  * @param {boolean} options.syncWebAssembly is syncWebAssembly enabled
792
954
  * @param {boolean} options.asyncWebAssembly is asyncWebAssembly enabled
955
+ * @param {boolean} options.typescript is typescript enabled
793
956
  * @param {boolean} options.css is css enabled
957
+ * @param {boolean} options.html is html enabled
794
958
  * @param {boolean} options.futureDefaults is future defaults enabled
795
959
  * @param {string} options.uniqueName the unique name
796
960
  * @param {boolean} options.isNode is node target platform
@@ -801,6 +965,7 @@ const applyCssGeneratorOptionsDefaults = (
801
965
  * @param {HashSalt} options.hashSalt hash salt
802
966
  * @param {HashFunction} options.hashFunction hash function
803
967
  * @param {boolean} options.outputModule is output.module enabled
968
+ * @param {WebpackOptionsNormalized["output"]["library"]} options.library library options
804
969
  * @returns {void}
805
970
  */
806
971
  const applyModuleDefaults = (
@@ -812,6 +977,8 @@ const applyModuleDefaults = (
812
977
  syncWebAssembly,
813
978
  asyncWebAssembly,
814
979
  css,
980
+ html,
981
+ typescript,
815
982
  futureDefaults,
816
983
  isNode,
817
984
  uniqueName,
@@ -819,7 +986,8 @@ const applyModuleDefaults = (
819
986
  mode,
820
987
  deferImport,
821
988
  sourceImport,
822
- outputModule
989
+ outputModule,
990
+ library
823
991
  }
824
992
  ) => {
825
993
  if (cache) {
@@ -827,6 +995,7 @@ const applyModuleDefaults = (
827
995
  module,
828
996
  "unsafeCache",
829
997
  /**
998
+ * Handles the callback logic for this hook.
830
999
  * @param {Module} module module
831
1000
  * @returns {boolean} true, if we want to cache the module
832
1001
  */
@@ -880,11 +1049,14 @@ const applyModuleDefaults = (
880
1049
  deferImport,
881
1050
  sourceImport,
882
1051
  isNode,
883
- outputModule
1052
+ outputModule,
1053
+ library,
1054
+ typescript
884
1055
  }
885
1056
  );
886
1057
 
887
1058
  F(module.generator, "json", () => ({}));
1059
+
888
1060
  applyJsonGeneratorOptionsDefaults(
889
1061
  /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown["json"]>} */
890
1062
  (module.generator.json)
@@ -911,6 +1083,18 @@ const applyModuleDefaults = (
911
1083
  "namedExports",
912
1084
  true
913
1085
  );
1086
+ D(
1087
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
1088
+ (module.parser[CSS_MODULE_TYPE]),
1089
+ "customMedia",
1090
+ true
1091
+ );
1092
+ D(
1093
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
1094
+ (module.parser[CSS_MODULE_TYPE]),
1095
+ "customSelectors",
1096
+ true
1097
+ );
914
1098
 
915
1099
  for (const type of [
916
1100
  CSS_MODULE_TYPE_AUTO,
@@ -955,6 +1139,18 @@ const applyModuleDefaults = (
955
1139
  "grid",
956
1140
  true
957
1141
  );
1142
+ D(
1143
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
1144
+ (module.parser[type]),
1145
+ "customMedia",
1146
+ true
1147
+ );
1148
+ D(
1149
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
1150
+ (module.parser[type]),
1151
+ "customSelectors",
1152
+ true
1153
+ );
958
1154
  }
959
1155
 
960
1156
  F(module.generator, CSS_MODULE_TYPE, () => ({}));
@@ -1027,6 +1223,28 @@ const applyModuleDefaults = (
1027
1223
  }
1028
1224
  }
1029
1225
 
1226
+ if (html) {
1227
+ // `module.generator.html.extract` is intentionally left undefined by
1228
+ // default: HtmlGenerator treats undefined as "extract iff this HTML
1229
+ // module is a compilation entry", which is the HTML-entry-point
1230
+ // behaviour. Setting `extract: true` forces extraction for all HTML
1231
+ // modules (including imported ones); `extract: false` disables it
1232
+ // everywhere.
1233
+ F(module.generator, HTML_MODULE_TYPE, () => ({}));
1234
+ // `module.parser.html.sources` defaults to `true` — HtmlParser uses
1235
+ // the built-in source list to extract URL-like attributes (`<img
1236
+ // src>`, `<link href>`, `<script src>`, …) as webpack dependencies.
1237
+ // Users may pass `false` to disable extraction entirely or an array
1238
+ // (with `"..."` to include the defaults) to customize it.
1239
+ F(module.parser, HTML_MODULE_TYPE, () => ({}));
1240
+ D(
1241
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[HTML_MODULE_TYPE]>} */
1242
+ (module.parser[HTML_MODULE_TYPE]),
1243
+ "sources",
1244
+ true
1245
+ );
1246
+ }
1247
+
1030
1248
  A(module, "defaultRules", () => {
1031
1249
  const esm = {
1032
1250
  type: JAVASCRIPT_MODULE_TYPE_ESM,
@@ -1084,6 +1302,7 @@ const applyModuleDefaults = (
1084
1302
  ...esm
1085
1303
  }
1086
1304
  ];
1305
+
1087
1306
  if (asyncWebAssembly) {
1088
1307
  const wasm = {
1089
1308
  type: WEBASSEMBLY_MODULE_TYPE_ASYNC,
@@ -1129,6 +1348,7 @@ const applyModuleDefaults = (
1129
1348
  ...wasm
1130
1349
  });
1131
1350
  }
1351
+
1132
1352
  if (css) {
1133
1353
  const resolve = {
1134
1354
  fullySpecified: true,
@@ -1150,14 +1370,20 @@ const applyModuleDefaults = (
1150
1370
  resolve
1151
1371
  });
1152
1372
  // For CSS modules, i.e. `.class { composes: className from "./style.css" }`
1153
- // We inherit for such constructions
1373
+ // We inherit for such constructions, but skip files that are already
1374
+ // detected as CSS modules by extension (`.module.<ext>`) — they get
1375
+ // the same modules-mode behavior from the auto rule, and forcing a
1376
+ // different type stamp here would create a duplicate module instance.
1377
+ const moduleExtension = /\.module\.\w+$/i;
1154
1378
  rules.push({
1155
1379
  dependency: /css-import-local-module/,
1380
+ exclude: moduleExtension,
1156
1381
  type: CSS_MODULE_TYPE_MODULE,
1157
1382
  resolve
1158
1383
  });
1159
1384
  rules.push({
1160
1385
  dependency: /css-import-global-module/,
1386
+ exclude: moduleExtension,
1161
1387
  type: CSS_MODULE_TYPE_GLOBAL,
1162
1388
  resolve
1163
1389
  });
@@ -1179,6 +1405,94 @@ const applyModuleDefaults = (
1179
1405
  }
1180
1406
  );
1181
1407
  }
1408
+ if (html) {
1409
+ const resolve = {
1410
+ fullySpecified: true,
1411
+ preferRelative: true
1412
+ };
1413
+
1414
+ rules.push({
1415
+ test: /\.html$/i,
1416
+ type: HTML_MODULE_TYPE,
1417
+ resolve
1418
+ });
1419
+ rules.push({
1420
+ mimetype: "text/html",
1421
+ type: HTML_MODULE_TYPE,
1422
+ resolve
1423
+ });
1424
+ // `<iframe srcdoc>` content is fed back through the HTML pipeline as a
1425
+ // `data:text/html` module. `extract: "inline"` exposes the processed
1426
+ // HTML on the `html` codegen channel that `HtmlInlineHtmlDependency.
1427
+ // Template` reads back into the attribute, without emitting a standalone
1428
+ // `.html` file (the module is never a page on its own).
1429
+ rules.push({
1430
+ dependency: "html-srcdoc",
1431
+ generator: {
1432
+ extract: "inline"
1433
+ },
1434
+ resolve
1435
+ });
1436
+ if (css) {
1437
+ // Inline `<style>` content in an HTML module is fed into the
1438
+ // CSS pipeline as a `data:text/css` virtual module. We force
1439
+ // `exportType: "text"` so the CSS module exposes the
1440
+ // processed CSS text on the `css-text` codegen channel that
1441
+ // `HtmlInlineStyleDependency.Template` reads back into the
1442
+ // `<style>` tag.
1443
+ rules.push({
1444
+ dependency: "html-style",
1445
+ parser: {
1446
+ exportType: "text"
1447
+ },
1448
+ resolve
1449
+ });
1450
+ // A `style="..."` attribute is a CSS block's contents, not a
1451
+ // stylesheet, so parse it as one (`as: "block-contents"`).
1452
+ rules.push({
1453
+ dependency: "html-style-attribute",
1454
+ parser: {
1455
+ exportType: "text",
1456
+ as: "block-contents"
1457
+ },
1458
+ resolve
1459
+ });
1460
+ }
1461
+ }
1462
+
1463
+ if (typescript) {
1464
+ rules.push(
1465
+ {
1466
+ test: /\.mts$/i,
1467
+ ...esm
1468
+ },
1469
+ {
1470
+ test: /\.ts$/i,
1471
+ descriptionData: {
1472
+ type: "module"
1473
+ },
1474
+ ...esm
1475
+ },
1476
+ {
1477
+ test: /\.cts$/i,
1478
+ ...commonjs
1479
+ },
1480
+ {
1481
+ test: /\.ts$/i,
1482
+ descriptionData: {
1483
+ type: "commonjs"
1484
+ },
1485
+ ...commonjs
1486
+ },
1487
+ {
1488
+ mimetype: {
1489
+ or: ["text/typescript", "application/typescript"]
1490
+ },
1491
+ ...esm
1492
+ }
1493
+ );
1494
+ }
1495
+
1182
1496
  rules.push(
1183
1497
  {
1184
1498
  dependency: "url",
@@ -1211,11 +1525,52 @@ const applyModuleDefaults = (
1211
1525
  type: ASSET_MODULE_TYPE_BYTES
1212
1526
  }
1213
1527
  );
1528
+ if (html) {
1529
+ // A `.webmanifest` referenced by `<link rel="manifest">` is a `url`
1530
+ // dependency; route it to the `asset/webmanifest` type so its icon URLs
1531
+ // are parsed. Must come after the generic `url` → asset rule so it wins.
1532
+ rules.push({
1533
+ dependency: "url",
1534
+ test: /\.webmanifest$/i,
1535
+ type: "asset/webmanifest"
1536
+ });
1537
+ // A generated manifest (`output.html.manifest` object) is injected as a
1538
+ // `data:application/manifest+json` URL with no `.webmanifest` extension;
1539
+ // route it by mimetype so its icons are parsed and hashed too.
1540
+ rules.push({
1541
+ dependency: "url",
1542
+ mimetype: "application/manifest+json",
1543
+ type: "asset/webmanifest"
1544
+ });
1545
+ }
1546
+ if (futureDefaults) {
1547
+ rules.push({
1548
+ oneOf: [
1549
+ {
1550
+ resourceQuery: /(\?|&)raw(&|$)/,
1551
+ type: ASSET_MODULE_TYPE_SOURCE
1552
+ },
1553
+ {
1554
+ resourceQuery: /(\?|&)url(&|$)/,
1555
+ type: ASSET_MODULE_TYPE_RESOURCE
1556
+ },
1557
+ {
1558
+ resourceQuery: /(\?|&)no-inline(&|$)/,
1559
+ type: ASSET_MODULE_TYPE_RESOURCE
1560
+ },
1561
+ {
1562
+ resourceQuery: /(\?|&)inline(&|$)/,
1563
+ type: ASSET_MODULE_TYPE_INLINE
1564
+ }
1565
+ ]
1566
+ });
1567
+ }
1214
1568
  return rules;
1215
1569
  });
1216
1570
  };
1217
1571
 
1218
1572
  /**
1573
+ * Apply output defaults.
1219
1574
  * @param {Output} output options
1220
1575
  * @param {object} options options
1221
1576
  * @param {string} options.context context
@@ -1242,6 +1597,7 @@ const applyOutputDefaults = (
1242
1597
  }
1243
1598
  ) => {
1244
1599
  /**
1600
+ * Returns a readable library name.
1245
1601
  * @param {Library=} library the library option
1246
1602
  * @returns {string} a readable library name
1247
1603
  */
@@ -1293,11 +1649,13 @@ const applyOutputDefaults = (
1293
1649
 
1294
1650
  const environment = /** @type {Environment} */ (output.environment);
1295
1651
  /**
1652
+ * Returns true, when v is truthy or undefined.
1296
1653
  * @param {boolean | undefined} v value
1297
1654
  * @returns {boolean} true, when v is truthy or undefined
1298
1655
  */
1299
1656
  const optimistic = (v) => v || v === undefined;
1300
1657
  /**
1658
+ * Conditionally optimistic.
1301
1659
  * @param {boolean | undefined} v value
1302
1660
  * @param {boolean | undefined} c condition
1303
1661
  * @returns {boolean | undefined} true, when v is truthy or undefined, or c is truthy
@@ -1309,6 +1667,17 @@ const applyOutputDefaults = (
1309
1667
  "globalThis",
1310
1668
  () => /** @type {boolean | undefined} */ (tp && tp.globalThis)
1311
1669
  );
1670
+ F(
1671
+ environment,
1672
+ "symbol",
1673
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.symbol))
1674
+ );
1675
+ F(
1676
+ environment,
1677
+ "hasOwn",
1678
+ // No optimistic, because it is new
1679
+ () => tp && /** @type {boolean | undefined} */ (tp.hasOwn)
1680
+ );
1312
1681
  F(
1313
1682
  environment,
1314
1683
  "bigIntLiteral",
@@ -1320,6 +1689,22 @@ const applyOutputDefaults = (
1320
1689
  "const",
1321
1690
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
1322
1691
  );
1692
+ // `let` was added after `const`; targets predating it report only `const`,
1693
+ // so fall back to `const` when `let` is unreported (undefined). Targets that
1694
+ // do report `let` (browserslist, built-ins) keep their own accurate value.
1695
+ F(environment, "let", () =>
1696
+ conditionallyOptimistic(
1697
+ /** @type {boolean | undefined} */ (tp && tp.let),
1698
+ environment.const
1699
+ )
1700
+ );
1701
+ F(
1702
+ environment,
1703
+ "logicalAssignment",
1704
+ () =>
1705
+ // No optimistic, because it is new
1706
+ tp && /** @type {boolean | undefined} */ (tp.logicalAssignment)
1707
+ );
1323
1708
  F(
1324
1709
  environment,
1325
1710
  "methodShorthand",
@@ -1338,6 +1723,11 @@ const applyOutputDefaults = (
1338
1723
  () =>
1339
1724
  tp && optimistic(/** @type {boolean | undefined} */ (tp.asyncFunction))
1340
1725
  );
1726
+ F(
1727
+ environment,
1728
+ "generator",
1729
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.generator))
1730
+ );
1341
1731
  F(
1342
1732
  environment,
1343
1733
  "forOf",
@@ -1355,6 +1745,11 @@ const applyOutputDefaults = (
1355
1745
  () =>
1356
1746
  tp && optimistic(/** @type {boolean | undefined} */ (tp.optionalChaining))
1357
1747
  );
1748
+ F(
1749
+ environment,
1750
+ "spread",
1751
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.spread))
1752
+ );
1358
1753
  F(
1359
1754
  environment,
1360
1755
  "nodePrefixForCoreModules",
@@ -1371,6 +1766,13 @@ const applyOutputDefaults = (
1371
1766
  // No optimistic, because it is new
1372
1767
  tp && /** @type {boolean | undefined} */ (tp.importMetaDirnameAndFilename)
1373
1768
  );
1769
+ F(
1770
+ environment,
1771
+ "nodeBuiltinModuleGetter",
1772
+ () =>
1773
+ // No optimistic, because it is new
1774
+ tp && /** @type {boolean | undefined} */ (tp.nodeBuiltinModuleGetter)
1775
+ );
1374
1776
  F(
1375
1777
  environment,
1376
1778
  "templateLiteral",
@@ -1400,6 +1802,30 @@ const applyOutputDefaults = (
1400
1802
  "document",
1401
1803
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.document))
1402
1804
  );
1805
+ F(
1806
+ environment,
1807
+ "modulePreload",
1808
+ () =>
1809
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.modulePreload))
1810
+ );
1811
+
1812
+ // Vite-style default for ESM output (`output.module`): preload the entry's
1813
+ // initial dependency graph, which native `import()` would otherwise fetch in
1814
+ // a waterfall. Classic output loads initial chunks via parallel `<script>`
1815
+ // tags (no waterfall), so it stays opt-in.
1816
+ if (output.module && output.resourceHints === undefined) {
1817
+ output.resourceHints = {};
1818
+ }
1819
+ if (output.resourceHints) {
1820
+ if (output.module) D(output.resourceHints, "initial", true);
1821
+ // `modulePreloadPolyfill` defaults from the target's modulepreload
1822
+ // support: inject the polyfill iff the environment lacks it.
1823
+ D(
1824
+ output.resourceHints,
1825
+ "modulePreloadPolyfill",
1826
+ !environment.modulePreload
1827
+ );
1828
+ }
1403
1829
 
1404
1830
  D(output, "filename", output.module ? "[name].mjs" : "[name].js");
1405
1831
  F(output, "iife", () => !output.module);
@@ -1439,8 +1865,48 @@ const applyOutputDefaults = (
1439
1865
  }
1440
1866
  return "[id].css";
1441
1867
  });
1868
+ // Derive html filename defaults from `output.filename` / `output.chunkFilename`
1869
+ // (the same shape the CSS pipeline uses), but if the derived template lacks
1870
+ // any per-module differentiator, fall back to `[name].html` so multiple
1871
+ // extracted HTML modules in one compilation don't collide on the same
1872
+ // emitted file. For example: `output.filename: "bundle.js"` would derive
1873
+ // `bundle.html` — two `.html` modules extracted in the same build would
1874
+ // both want that name and conflict at emit time.
1875
+ const HAS_PATH_PLACEHOLDER_REGEXP =
1876
+ /\[(name|id|chunkhash|contenthash|fullhash|hash)/;
1877
+ /**
1878
+ * @param {string} template html filename template derived from `output.filename`
1879
+ * @returns {string} same template, or `[name].html` if it has no per-module placeholder
1880
+ */
1881
+ const ensureUniqueHtmlTemplate = (template) =>
1882
+ HAS_PATH_PLACEHOLDER_REGEXP.test(template) ? template : "[name].html";
1883
+ F(output, "htmlFilename", () => {
1884
+ const filename =
1885
+ /** @type {NonNullable<Output["htmlFilename"]>} */
1886
+ (output.filename);
1887
+ if (typeof filename !== "function") {
1888
+ return ensureUniqueHtmlTemplate(
1889
+ filename.replace(/\.[mc]?js(\?|$)/, ".html$1")
1890
+ );
1891
+ }
1892
+ return "[name].html";
1893
+ });
1894
+ F(output, "htmlChunkFilename", () => {
1895
+ const chunkFilename =
1896
+ /** @type {NonNullable<Output["htmlChunkFilename"]>} */
1897
+ (output.chunkFilename);
1898
+ if (typeof chunkFilename !== "function") {
1899
+ return ensureUniqueHtmlTemplate(
1900
+ chunkFilename.replace(/\.[mc]?js(\?|$)/, ".html$1")
1901
+ );
1902
+ }
1903
+ return "[name].html";
1904
+ });
1905
+ D(output, "html", false);
1442
1906
  D(output, "assetModuleFilename", "[hash][ext][query][fragment]");
1443
1907
  D(output, "webassemblyModuleFilename", "[hash].module.wasm");
1908
+ // On by default like other wasm toolchains; set false to drop the fallback runtime code.
1909
+ D(output, "wasmStreamingFallback", true);
1444
1910
  D(output, "compareBeforeEmit", true);
1445
1911
  D(output, "charset", !futureDefaults);
1446
1912
  const uniqueNameId = Template.toIdentifier(
@@ -1452,8 +1918,11 @@ const applyOutputDefaults = (
1452
1918
  if (tp) {
1453
1919
  if (tp.global) return "global";
1454
1920
  if (tp.globalThis) return "globalThis";
1455
- // For universal target (i.e. code can be run in browser/node/worker etc.)
1456
- if (tp.web === null && tp.node === null && tp.module) return "globalThis";
1921
+ // Universal target (web + node) with no reported accessor: `globalThis`
1922
+ // is the only one defined everywhere (`null` = mixed support → `self`).
1923
+ if (tp.web === null && tp.node === null && tp.globalThis === undefined) {
1924
+ return "globalThis";
1925
+ }
1457
1926
  }
1458
1927
  return "self";
1459
1928
  });
@@ -1520,6 +1989,13 @@ const applyOutputDefaults = (
1520
1989
  }
1521
1990
  return false;
1522
1991
  });
1992
+ F(
1993
+ output,
1994
+ "workerChunkFilename",
1995
+ () =>
1996
+ /** @type {NonNullable<Output["workerChunkFilename"]>} */
1997
+ (output.chunkFilename)
1998
+ );
1523
1999
  F(output, "workerChunkLoading", () => {
1524
2000
  if (tp) {
1525
2001
  switch (output.chunkFormat) {
@@ -1576,7 +2052,9 @@ const applyOutputDefaults = (
1576
2052
  D(
1577
2053
  output,
1578
2054
  "hotUpdateMainFilename",
1579
- `[runtime].[fullhash].hot-update.${output.module ? "json.mjs" : "json"}`
2055
+ // Only `chunkLoading: "import"` loads the manifest via `import()` (needs an
2056
+ // `export default` ES module); every other loader fetches it as raw JSON.
2057
+ `[runtime].[fullhash].hot-update.${output.chunkLoading === "import" ? "json.mjs" : "json"}`
1580
2058
  );
1581
2059
  D(output, "crossOriginLoading", false);
1582
2060
  F(output, "scriptType", () => (output.module ? "module" : false));
@@ -1601,6 +2079,7 @@ const applyOutputDefaults = (
1601
2079
  D(output, "hashDigestLength", futureDefaults ? 16 : 20);
1602
2080
  D(output, "strictModuleErrorHandling", false);
1603
2081
  D(output, "strictModuleExceptionHandling", false);
2082
+ F(output, "strictModuleResolution", () => development);
1604
2083
 
1605
2084
  const { trustedTypes } = output;
1606
2085
  if (trustedTypes) {
@@ -1615,6 +2094,7 @@ const applyOutputDefaults = (
1615
2094
  }
1616
2095
 
1617
2096
  /**
2097
+ * Processes the provided fn.
1618
2098
  * @param {(entryDescription: EntryDescription) => void} fn iterator
1619
2099
  * @returns {void}
1620
2100
  */
@@ -1673,6 +2153,7 @@ const applyOutputDefaults = (
1673
2153
  };
1674
2154
 
1675
2155
  /**
2156
+ * Apply externals presets defaults.
1676
2157
  * @param {ExternalsPresets} externalsPresets options
1677
2158
  * @param {object} options options
1678
2159
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -1685,6 +2166,7 @@ const applyExternalsPresetsDefaults = (
1685
2166
  { targetProperties, buildHttp, outputModule }
1686
2167
  ) => {
1687
2168
  /**
2169
+ * Checks whether this object is universal.
1688
2170
  * @param {keyof TargetProperties} key a key
1689
2171
  * @returns {boolean} true when target is universal, otherwise false
1690
2172
  */
@@ -1705,7 +2187,25 @@ const applyExternalsPresetsDefaults = (
1705
2187
  externalsPresets,
1706
2188
  "node",
1707
2189
  /** @type {boolean | undefined} */
1708
- (targetProperties && (targetProperties.node || isUniversal("node")))
2190
+ (
2191
+ targetProperties &&
2192
+ ((targetProperties.node &&
2193
+ !targetProperties.deno &&
2194
+ !targetProperties.bun) ||
2195
+ isUniversal("node"))
2196
+ )
2197
+ );
2198
+ D(
2199
+ externalsPresets,
2200
+ "deno",
2201
+ /** @type {boolean | undefined} */
2202
+ (Boolean(targetProperties && targetProperties.deno))
2203
+ );
2204
+ D(
2205
+ externalsPresets,
2206
+ "bun",
2207
+ /** @type {boolean | undefined} */
2208
+ (Boolean(targetProperties && targetProperties.bun))
1709
2209
  );
1710
2210
  D(
1711
2211
  externalsPresets,
@@ -1752,13 +2252,18 @@ const applyExternalsPresetsDefaults = (
1752
2252
  };
1753
2253
 
1754
2254
  /**
2255
+ * Apply loader defaults.
1755
2256
  * @param {Loader} loader options
1756
2257
  * @param {object} options options
1757
2258
  * @param {TargetProperties | false} options.targetProperties target properties
1758
2259
  * @param {Environment} options.environment environment
2260
+ * @param {boolean} options.outputModule is output type is module
1759
2261
  * @returns {void}
1760
2262
  */
1761
- const applyLoaderDefaults = (loader, { targetProperties, environment }) => {
2263
+ const applyLoaderDefaults = (
2264
+ loader,
2265
+ { targetProperties, environment, outputModule }
2266
+ ) => {
1762
2267
  F(loader, "target", () => {
1763
2268
  if (targetProperties) {
1764
2269
  if (targetProperties.electron) {
@@ -1768,14 +2273,26 @@ const applyLoaderDefaults = (loader, { targetProperties, environment }) => {
1768
2273
  return "electron";
1769
2274
  }
1770
2275
  if (targetProperties.nwjs) return "nwjs";
2276
+ if (targetProperties.deno) return "deno";
2277
+ if (targetProperties.bun) return "bun";
1771
2278
  if (targetProperties.node) return "node";
1772
2279
  if (targetProperties.web) return "web";
2280
+ // no single platform to report: the bundle runs on both (target
2281
+ // `"universal"` / `["web", "node"]`), so loaders get `"universal"`
2282
+ if (
2283
+ outputModule &&
2284
+ targetProperties.node === null &&
2285
+ targetProperties.web === null
2286
+ ) {
2287
+ return "universal";
2288
+ }
1773
2289
  }
1774
2290
  });
1775
2291
  D(loader, "environment", environment);
1776
2292
  };
1777
2293
 
1778
2294
  /**
2295
+ * Apply node defaults.
1779
2296
  * @param {WebpackNode} node options
1780
2297
  * @param {object} options options
1781
2298
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -1821,6 +2338,7 @@ const applyNodeDefaults = (
1821
2338
  };
1822
2339
 
1823
2340
  /**
2341
+ * Apply performance defaults.
1824
2342
  * @param {Performance} performance options
1825
2343
  * @param {object} options options
1826
2344
  * @param {boolean} options.production is production
@@ -1834,6 +2352,7 @@ const applyPerformanceDefaults = (performance, { production }) => {
1834
2352
  };
1835
2353
 
1836
2354
  /**
2355
+ * Apply optimization defaults.
1837
2356
  * @param {Optimization} optimization options
1838
2357
  * @param {object} options options
1839
2358
  * @param {boolean} options.production is production
@@ -1864,6 +2383,7 @@ const applyOptimizationDefaults = (
1864
2383
  D(optimization, "providedExports", true);
1865
2384
  D(optimization, "usedExports", production);
1866
2385
  D(optimization, "innerGraph", production);
2386
+ D(optimization, "inlineExports", production);
1867
2387
  D(optimization, "mangleExports", production);
1868
2388
  D(optimization, "concatenateModules", production);
1869
2389
  D(optimization, "avoidEntryIife", production);
@@ -1877,8 +2397,8 @@ const applyOptimizationDefaults = (
1877
2397
  A(optimization, "minimizer", () => [
1878
2398
  {
1879
2399
  apply: (compiler) => {
1880
- // Lazy load the Terser plugin
1881
- const TerserPlugin = require("terser-webpack-plugin");
2400
+ // Lazy load the minimizer plugin
2401
+ const TerserPlugin = require("minimizer-webpack-plugin");
1882
2402
 
1883
2403
  new TerserPlugin({
1884
2404
  terserOptions: {
@@ -1931,12 +2451,16 @@ const applyOptimizationDefaults = (
1931
2451
  };
1932
2452
 
1933
2453
  /**
2454
+ * Gets resolve defaults.
1934
2455
  * @param {object} options options
1935
2456
  * @param {boolean} options.cache is cache enable
1936
2457
  * @param {string} options.context build context
1937
2458
  * @param {TargetProperties | false} options.targetProperties target properties
1938
2459
  * @param {Mode} options.mode mode
1939
2460
  * @param {boolean} options.css is css enabled
2461
+ * @param {boolean} options.html is html enabled
2462
+ * @param {boolean} options.htmlFirst whether `.html` should outrank `.js` when resolving (only when html was explicitly enabled)
2463
+ * @param {boolean} options.typescript is typescript enabled
1940
2464
  * @returns {ResolveOptions} resolve options
1941
2465
  */
1942
2466
  const getResolveDefaults = ({
@@ -1944,7 +2468,10 @@ const getResolveDefaults = ({
1944
2468
  context,
1945
2469
  targetProperties,
1946
2470
  mode,
1947
- css
2471
+ css,
2472
+ html,
2473
+ htmlFirst,
2474
+ typescript
1948
2475
  }) => {
1949
2476
  /** @type {string[]} */
1950
2477
  const conditions = ["webpack"];
@@ -1952,6 +2479,8 @@ const getResolveDefaults = ({
1952
2479
  conditions.push(mode === "development" ? "development" : "production");
1953
2480
 
1954
2481
  if (targetProperties) {
2482
+ if (targetProperties.deno) conditions.push("deno");
2483
+ if (targetProperties.bun) conditions.push("bun");
1955
2484
  if (targetProperties.webworker) conditions.push("worker");
1956
2485
  if (targetProperties.node) conditions.push("node");
1957
2486
  if (targetProperties.web) conditions.push("browser");
@@ -1959,25 +2488,54 @@ const getResolveDefaults = ({
1959
2488
  if (targetProperties.nwjs) conditions.push("nwjs");
1960
2489
  }
1961
2490
 
1962
- const jsExtensions = [".js", ".json", ".wasm"];
2491
+ const jsExtensions = typescript
2492
+ ? [".ts", ".js", ".json", ".wasm"]
2493
+ : [".js", ".json", ".wasm"];
2494
+
2495
+ // Explicitly enabling html keeps `.html` ahead of `.js` (html-as-entry feature).
2496
+ // Auto-enabled html/css are lower-priority fallbacks after `.js`, so enabling
2497
+ // them by default never makes `x.html`/`x.css` shadow `x.js`.
2498
+ const esmResolveExtensions = [
2499
+ ...(html && htmlFirst ? [".html"] : []),
2500
+ ...jsExtensions,
2501
+ ...(html && !htmlFirst ? [".html"] : []),
2502
+ ...(css ? [".css"] : [])
2503
+ ];
1963
2504
 
1964
2505
  const tp = targetProperties;
1965
2506
  const browserField =
1966
2507
  tp && tp.web && (!tp.node || (tp.electron && tp.electronRenderer));
1967
2508
 
2509
+ // When `experiments.typescript` is on, also honor the `typescript`
2510
+ // conditional-exports key so monorepo packages can ship .ts sources via
2511
+ // `package.json#exports` — same convention Node.js's amaro uses.
2512
+ const tsConditionPrefix = typescript ? ["typescript"] : [];
2513
+
1968
2514
  /** @type {() => ResolveOptions} */
1969
2515
  const cjsDeps = () => ({
1970
2516
  aliasFields: browserField ? ["browser"] : [],
1971
2517
  mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
1972
- conditionNames: ["require", "module", "..."],
2518
+ conditionNames: [
2519
+ ...tsConditionPrefix,
2520
+ "require",
2521
+ "module-sync",
2522
+ "module",
2523
+ "..."
2524
+ ],
1973
2525
  extensions: [...jsExtensions]
1974
2526
  });
1975
2527
  /** @type {() => ResolveOptions} */
1976
2528
  const esmDeps = () => ({
1977
2529
  aliasFields: browserField ? ["browser"] : [],
1978
2530
  mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
1979
- conditionNames: ["import", "module", "..."],
1980
- extensions: [...jsExtensions]
2531
+ conditionNames: [
2532
+ ...tsConditionPrefix,
2533
+ "import",
2534
+ "module-sync",
2535
+ "module",
2536
+ "..."
2537
+ ],
2538
+ extensions: [...esmResolveExtensions]
1981
2539
  });
1982
2540
 
1983
2541
  /** @type {() => ResolveOptions} */
@@ -2057,10 +2615,20 @@ const getResolveDefaults = ({
2057
2615
  cssResolveOptions;
2058
2616
  }
2059
2617
 
2618
+ if (typescript) {
2619
+ resolveOptions.tsconfig = true;
2620
+ resolveOptions.extensionAlias = {
2621
+ ".js": [".js", ".ts"],
2622
+ ".cjs": [".cjs", ".cts"],
2623
+ ".mjs": [".mjs", ".mts"]
2624
+ };
2625
+ }
2626
+
2060
2627
  return resolveOptions;
2061
2628
  };
2062
2629
 
2063
2630
  /**
2631
+ * Gets resolve loader defaults.
2064
2632
  * @param {object} options options
2065
2633
  * @param {boolean} options.cache is cache enable
2066
2634
  * @returns {ResolveOptions} resolve options
@@ -2080,6 +2648,7 @@ const getResolveLoaderDefaults = ({ cache }) => {
2080
2648
  };
2081
2649
 
2082
2650
  /**
2651
+ * Apply infrastructure logging defaults.
2083
2652
  * @param {InfrastructureLogging} infrastructureLogging options
2084
2653
  * @returns {void}
2085
2654
  */