@depup/webpack 5.106.0-depup.0 → 5.109.0-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 (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /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),
@@ -492,7 +555,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
492
555
  development,
493
556
  production,
494
557
  css:
495
- /** @type {NonNullable<ExperimentsNormalized["css"]>} */
558
+ /** @type {boolean} */
496
559
  (options.experiments.css),
497
560
  records: Boolean(options.recordsInputPath || options.recordsOutputPath)
498
561
  });
@@ -504,8 +567,15 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
504
567
  targetProperties,
505
568
  mode: /** @type {Mode} */ (options.mode),
506
569
  css:
507
- /** @type {NonNullable<ExperimentsNormalized["css"]>} */
508
- (options.experiments.css)
570
+ /** @type {boolean} */
571
+ (options.experiments.css),
572
+ html:
573
+ /** @type {boolean} */
574
+ (options.experiments.html),
575
+ htmlFirst,
576
+ typescript:
577
+ /** @type {boolean} */
578
+ (options.experiments.typescript)
509
579
  }),
510
580
  options.resolve
511
581
  );
@@ -524,36 +594,103 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
524
594
  browser: targetProperties.browser,
525
595
  webworker: targetProperties.webworker,
526
596
  node: targetProperties.node,
597
+ deno: targetProperties.deno,
598
+ bun: targetProperties.bun,
527
599
  nwjs: targetProperties.nwjs,
528
- electron: targetProperties.electron
600
+ electron: targetProperties.electron,
601
+ // spans both web and node (target "universal" or ["web", "node"])
602
+ universal:
603
+ targetProperties.node === null && targetProperties.web === null
529
604
  }
530
605
  };
531
606
  };
532
607
 
533
608
  /**
609
+ * Apply experiments defaults.
534
610
  * @param {ExperimentsNormalized} experiments options
535
611
  * @param {object} options options
536
612
  * @param {boolean} options.production is production
537
613
  * @param {boolean} options.development is development mode
538
614
  * @param {TargetProperties | false} options.targetProperties target properties
615
+ * @param {RuleSetRules} options.rules user `module.rules`, used to resolve the css/html/asyncWebAssembly/typescript "auto" defaults
539
616
  * @returns {void}
540
617
  */
541
618
  const applyExperimentsDefaults = (
542
619
  experiments,
543
- { production, development, targetProperties }
620
+ { production, development, targetProperties, rules }
544
621
  ) => {
545
622
  D(experiments, "futureDefaults", false);
546
623
  D(experiments, "backCompat", !experiments.futureDefaults);
547
624
  // TODO do we need sync web assembly in webpack@6?
548
625
  D(experiments, "syncWebAssembly", false);
549
- D(experiments, "asyncWebAssembly", experiments.futureDefaults);
550
- D(experiments, "outputModule", false);
626
+ D(
627
+ experiments,
628
+ "asyncWebAssembly",
629
+ experiments.futureDefaults ? true : "auto"
630
+ );
631
+ // the universal target (web + node, neither specific) only works as ESM
632
+ const universal =
633
+ Boolean(targetProperties) &&
634
+ /** @type {TargetProperties} */ (targetProperties).node === null &&
635
+ /** @type {TargetProperties} */ (targetProperties).web === null;
636
+ // the deno and bun targets only emit ECMAScript modules
637
+ const deno =
638
+ Boolean(targetProperties) &&
639
+ /** @type {TargetProperties} */ (targetProperties).deno === true;
640
+ const bun =
641
+ Boolean(targetProperties) &&
642
+ /** @type {TargetProperties} */ (targetProperties).bun === true;
643
+ D(experiments, "outputModule", universal || deno || bun);
551
644
  D(experiments, "lazyCompilation", undefined);
552
645
  D(experiments, "buildHttp", undefined);
553
646
  D(experiments, "cacheUnaffected", experiments.futureDefaults);
554
647
  D(experiments, "deferImport", false);
555
648
  D(experiments, "sourceImport", false);
556
- F(experiments, "css", () => (experiments.futureDefaults ? true : undefined));
649
+ F(experiments, "css", () => (experiments.futureDefaults ? true : "auto"));
650
+ F(experiments, "html", () => (experiments.futureDefaults ? true : "auto"));
651
+ F(experiments, "typescript", () =>
652
+ experiments.futureDefaults ? true : "auto"
653
+ );
654
+
655
+ // Resolve the "auto" default: enable the built-in css/html module type unless
656
+ // the user already registered a loader (or explicit type) for these files, so
657
+ // enabling them by default does not break existing css-loader/html-loader setups.
658
+ // The built-in `/\.css$/i` rule also covers `.module.css`, so a loader scoped to
659
+ // CSS modules must disable the built-in type too — sample both extensions.
660
+ // When enabled implicitly the value stays `"auto"` (truthy): Css/HtmlModulesPlugin
661
+ // then step aside per-module for requests that loaders were applied to
662
+ // (inline requests or loaders injected via hooks, e.g. html-webpack-plugin).
663
+ // TODO webpack 6: css/html default to `true`, drop the `"auto"` marker.
664
+ if (experiments.css === "auto") {
665
+ experiments.css =
666
+ !(
667
+ RuleSetCompiler.hasRuleForResource(rules, "/file.css") ||
668
+ RuleSetCompiler.hasRuleForResource(rules, "/file.module.css")
669
+ ) && "auto";
670
+ }
671
+ if (experiments.html === "auto") {
672
+ experiments.html =
673
+ !RuleSetCompiler.hasRuleForResource(rules, "/file.html") && "auto";
674
+ }
675
+ // Auto-enable only when the built-in TypeScript support can actually run:
676
+ // it needs `module.stripTypeScriptTypes` (Node.js >= 22.6) and must step
677
+ // aside for a loader registered for `.ts`/`.mts`/`.cts` (e.g. ts-loader).
678
+ if (experiments.typescript === "auto") {
679
+ experiments.typescript =
680
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
681
+ typeof require("module").stripTypeScriptTypes === "function" &&
682
+ !(
683
+ RuleSetCompiler.hasRuleForResource(rules, "/file.ts") ||
684
+ RuleSetCompiler.hasRuleForResource(rules, "/file.mts") ||
685
+ RuleSetCompiler.hasRuleForResource(rules, "/file.cts")
686
+ );
687
+ }
688
+ // `syncWebAssembly` already claims `.wasm`, so don't let "auto" override it.
689
+ if (experiments.asyncWebAssembly === "auto") {
690
+ experiments.asyncWebAssembly =
691
+ !experiments.syncWebAssembly &&
692
+ !RuleSetCompiler.hasRuleForResource(rules, "/file.wasm");
693
+ }
557
694
 
558
695
  if (typeof experiments.buildHttp === "object") {
559
696
  D(experiments.buildHttp, "frozen", production);
@@ -562,6 +699,7 @@ const applyExperimentsDefaults = (
562
699
  };
563
700
 
564
701
  /**
702
+ * Apply cache defaults.
565
703
  * @param {CacheOptionsNormalized} cache options
566
704
  * @param {object} options options
567
705
  * @param {string} options.name name
@@ -644,6 +782,7 @@ const applyCacheDefaults = (
644
782
  };
645
783
 
646
784
  /**
785
+ * Apply snapshot defaults.
647
786
  * @param {SnapshotOptions} snapshot options
648
787
  * @param {object} options options
649
788
  * @param {boolean} options.production is production
@@ -721,6 +860,7 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
721
860
  };
722
861
 
723
862
  /**
863
+ * Apply javascript parser options defaults.
724
864
  * @param {JavascriptParserOptions} parserOptions parser options
725
865
  * @param {object} options options
726
866
  * @param {boolean} options.futureDefaults is future defaults enabled
@@ -728,11 +868,21 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
728
868
  * @param {boolean} options.sourceImport is import source enabled
729
869
  * @param {boolean} options.isNode is node target platform
730
870
  * @param {boolean} options.outputModule is output.module enabled
871
+ * @param {WebpackOptionsNormalized["output"]["library"]} options.library library options
872
+ * @param {boolean} options.typescript is typescript enabled
731
873
  * @returns {void}
732
874
  */
733
875
  const applyJavascriptParserOptionsDefaults = (
734
876
  parserOptions,
735
- { futureDefaults, deferImport, sourceImport, isNode, outputModule }
877
+ {
878
+ futureDefaults,
879
+ deferImport,
880
+ sourceImport,
881
+ isNode,
882
+ outputModule,
883
+ library,
884
+ typescript
885
+ }
736
886
  ) => {
737
887
  D(parserOptions, "unknownContextRequest", ".");
738
888
  D(parserOptions, "unknownContextRegExp", false);
@@ -755,10 +905,14 @@ const applyJavascriptParserOptionsDefaults = (
755
905
  D(parserOptions, "dynamicUrl", true);
756
906
  D(parserOptions, "deferImport", deferImport);
757
907
  D(parserOptions, "sourceImport", sourceImport);
908
+ D(parserOptions, "typescript", typescript);
758
909
  if (futureDefaults) D(parserOptions, "exportsPresence", "error");
910
+ D(parserOptions, "strictModeViolations", futureDefaults ? "error" : "warn");
911
+ D(parserOptions, "anonymousDefaultExportName", !library);
759
912
  };
760
913
 
761
914
  /**
915
+ * Apply json generator options defaults.
762
916
  * @param {JsonGeneratorOptions} generatorOptions generator options
763
917
  * @returns {void}
764
918
  */
@@ -767,6 +921,7 @@ const applyJsonGeneratorOptionsDefaults = (generatorOptions) => {
767
921
  };
768
922
 
769
923
  /**
924
+ * Apply css generator options defaults.
770
925
  * @param {CssGeneratorOptions} generatorOptions generator options
771
926
  * @param {object} options options
772
927
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -785,12 +940,15 @@ const applyCssGeneratorOptionsDefaults = (
785
940
  };
786
941
 
787
942
  /**
943
+ * Apply module defaults.
788
944
  * @param {ModuleOptions} module options
789
945
  * @param {object} options options
790
946
  * @param {boolean} options.cache is caching enabled
791
947
  * @param {boolean} options.syncWebAssembly is syncWebAssembly enabled
792
948
  * @param {boolean} options.asyncWebAssembly is asyncWebAssembly enabled
949
+ * @param {boolean} options.typescript is typescript enabled
793
950
  * @param {boolean} options.css is css enabled
951
+ * @param {boolean} options.html is html enabled
794
952
  * @param {boolean} options.futureDefaults is future defaults enabled
795
953
  * @param {string} options.uniqueName the unique name
796
954
  * @param {boolean} options.isNode is node target platform
@@ -801,6 +959,7 @@ const applyCssGeneratorOptionsDefaults = (
801
959
  * @param {HashSalt} options.hashSalt hash salt
802
960
  * @param {HashFunction} options.hashFunction hash function
803
961
  * @param {boolean} options.outputModule is output.module enabled
962
+ * @param {WebpackOptionsNormalized["output"]["library"]} options.library library options
804
963
  * @returns {void}
805
964
  */
806
965
  const applyModuleDefaults = (
@@ -812,6 +971,8 @@ const applyModuleDefaults = (
812
971
  syncWebAssembly,
813
972
  asyncWebAssembly,
814
973
  css,
974
+ html,
975
+ typescript,
815
976
  futureDefaults,
816
977
  isNode,
817
978
  uniqueName,
@@ -819,7 +980,8 @@ const applyModuleDefaults = (
819
980
  mode,
820
981
  deferImport,
821
982
  sourceImport,
822
- outputModule
983
+ outputModule,
984
+ library
823
985
  }
824
986
  ) => {
825
987
  if (cache) {
@@ -827,6 +989,7 @@ const applyModuleDefaults = (
827
989
  module,
828
990
  "unsafeCache",
829
991
  /**
992
+ * Handles the callback logic for this hook.
830
993
  * @param {Module} module module
831
994
  * @returns {boolean} true, if we want to cache the module
832
995
  */
@@ -880,11 +1043,14 @@ const applyModuleDefaults = (
880
1043
  deferImport,
881
1044
  sourceImport,
882
1045
  isNode,
883
- outputModule
1046
+ outputModule,
1047
+ library,
1048
+ typescript
884
1049
  }
885
1050
  );
886
1051
 
887
1052
  F(module.generator, "json", () => ({}));
1053
+
888
1054
  applyJsonGeneratorOptionsDefaults(
889
1055
  /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown["json"]>} */
890
1056
  (module.generator.json)
@@ -911,6 +1077,18 @@ const applyModuleDefaults = (
911
1077
  "namedExports",
912
1078
  true
913
1079
  );
1080
+ D(
1081
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
1082
+ (module.parser[CSS_MODULE_TYPE]),
1083
+ "customMedia",
1084
+ true
1085
+ );
1086
+ D(
1087
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
1088
+ (module.parser[CSS_MODULE_TYPE]),
1089
+ "customSelectors",
1090
+ true
1091
+ );
914
1092
 
915
1093
  for (const type of [
916
1094
  CSS_MODULE_TYPE_AUTO,
@@ -955,6 +1133,18 @@ const applyModuleDefaults = (
955
1133
  "grid",
956
1134
  true
957
1135
  );
1136
+ D(
1137
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
1138
+ (module.parser[type]),
1139
+ "customMedia",
1140
+ true
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
+ "customSelectors",
1146
+ true
1147
+ );
958
1148
  }
959
1149
 
960
1150
  F(module.generator, CSS_MODULE_TYPE, () => ({}));
@@ -1027,6 +1217,28 @@ const applyModuleDefaults = (
1027
1217
  }
1028
1218
  }
1029
1219
 
1220
+ if (html) {
1221
+ // `module.generator.html.extract` is intentionally left undefined by
1222
+ // default: HtmlGenerator treats undefined as "extract iff this HTML
1223
+ // module is a compilation entry", which is the HTML-entry-point
1224
+ // behaviour. Setting `extract: true` forces extraction for all HTML
1225
+ // modules (including imported ones); `extract: false` disables it
1226
+ // everywhere.
1227
+ F(module.generator, HTML_MODULE_TYPE, () => ({}));
1228
+ // `module.parser.html.sources` defaults to `true` — HtmlParser uses
1229
+ // the built-in source list to extract URL-like attributes (`<img
1230
+ // src>`, `<link href>`, `<script src>`, …) as webpack dependencies.
1231
+ // Users may pass `false` to disable extraction entirely or an array
1232
+ // (with `"..."` to include the defaults) to customize it.
1233
+ F(module.parser, HTML_MODULE_TYPE, () => ({}));
1234
+ D(
1235
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[HTML_MODULE_TYPE]>} */
1236
+ (module.parser[HTML_MODULE_TYPE]),
1237
+ "sources",
1238
+ true
1239
+ );
1240
+ }
1241
+
1030
1242
  A(module, "defaultRules", () => {
1031
1243
  const esm = {
1032
1244
  type: JAVASCRIPT_MODULE_TYPE_ESM,
@@ -1084,6 +1296,7 @@ const applyModuleDefaults = (
1084
1296
  ...esm
1085
1297
  }
1086
1298
  ];
1299
+
1087
1300
  if (asyncWebAssembly) {
1088
1301
  const wasm = {
1089
1302
  type: WEBASSEMBLY_MODULE_TYPE_ASYNC,
@@ -1129,6 +1342,7 @@ const applyModuleDefaults = (
1129
1342
  ...wasm
1130
1343
  });
1131
1344
  }
1345
+
1132
1346
  if (css) {
1133
1347
  const resolve = {
1134
1348
  fullySpecified: true,
@@ -1150,14 +1364,20 @@ const applyModuleDefaults = (
1150
1364
  resolve
1151
1365
  });
1152
1366
  // For CSS modules, i.e. `.class { composes: className from "./style.css" }`
1153
- // We inherit for such constructions
1367
+ // We inherit for such constructions, but skip files that are already
1368
+ // detected as CSS modules by extension (`.module.<ext>`) — they get
1369
+ // the same modules-mode behavior from the auto rule, and forcing a
1370
+ // different type stamp here would create a duplicate module instance.
1371
+ const moduleExtension = /\.module\.\w+$/i;
1154
1372
  rules.push({
1155
1373
  dependency: /css-import-local-module/,
1374
+ exclude: moduleExtension,
1156
1375
  type: CSS_MODULE_TYPE_MODULE,
1157
1376
  resolve
1158
1377
  });
1159
1378
  rules.push({
1160
1379
  dependency: /css-import-global-module/,
1380
+ exclude: moduleExtension,
1161
1381
  type: CSS_MODULE_TYPE_GLOBAL,
1162
1382
  resolve
1163
1383
  });
@@ -1179,6 +1399,94 @@ const applyModuleDefaults = (
1179
1399
  }
1180
1400
  );
1181
1401
  }
1402
+ if (html) {
1403
+ const resolve = {
1404
+ fullySpecified: true,
1405
+ preferRelative: true
1406
+ };
1407
+
1408
+ rules.push({
1409
+ test: /\.html$/i,
1410
+ type: HTML_MODULE_TYPE,
1411
+ resolve
1412
+ });
1413
+ rules.push({
1414
+ mimetype: "text/html",
1415
+ type: HTML_MODULE_TYPE,
1416
+ resolve
1417
+ });
1418
+ // `<iframe srcdoc>` content is fed back through the HTML pipeline as a
1419
+ // `data:text/html` module. `extract: "inline"` exposes the processed
1420
+ // HTML on the `html` codegen channel that `HtmlInlineHtmlDependency.
1421
+ // Template` reads back into the attribute, without emitting a standalone
1422
+ // `.html` file (the module is never a page on its own).
1423
+ rules.push({
1424
+ dependency: "html-srcdoc",
1425
+ generator: {
1426
+ extract: "inline"
1427
+ },
1428
+ resolve
1429
+ });
1430
+ if (css) {
1431
+ // Inline `<style>` content in an HTML module is fed into the
1432
+ // CSS pipeline as a `data:text/css` virtual module. We force
1433
+ // `exportType: "text"` so the CSS module exposes the
1434
+ // processed CSS text on the `css-text` codegen channel that
1435
+ // `HtmlInlineStyleDependency.Template` reads back into the
1436
+ // `<style>` tag.
1437
+ rules.push({
1438
+ dependency: "html-style",
1439
+ parser: {
1440
+ exportType: "text"
1441
+ },
1442
+ resolve
1443
+ });
1444
+ // A `style="..."` attribute is a CSS block's contents, not a
1445
+ // stylesheet, so parse it as one (`as: "block-contents"`).
1446
+ rules.push({
1447
+ dependency: "html-style-attribute",
1448
+ parser: {
1449
+ exportType: "text",
1450
+ as: "block-contents"
1451
+ },
1452
+ resolve
1453
+ });
1454
+ }
1455
+ }
1456
+
1457
+ if (typescript) {
1458
+ rules.push(
1459
+ {
1460
+ test: /\.mts$/i,
1461
+ ...esm
1462
+ },
1463
+ {
1464
+ test: /\.ts$/i,
1465
+ descriptionData: {
1466
+ type: "module"
1467
+ },
1468
+ ...esm
1469
+ },
1470
+ {
1471
+ test: /\.cts$/i,
1472
+ ...commonjs
1473
+ },
1474
+ {
1475
+ test: /\.ts$/i,
1476
+ descriptionData: {
1477
+ type: "commonjs"
1478
+ },
1479
+ ...commonjs
1480
+ },
1481
+ {
1482
+ mimetype: {
1483
+ or: ["text/typescript", "application/typescript"]
1484
+ },
1485
+ ...esm
1486
+ }
1487
+ );
1488
+ }
1489
+
1182
1490
  rules.push(
1183
1491
  {
1184
1492
  dependency: "url",
@@ -1211,11 +1519,52 @@ const applyModuleDefaults = (
1211
1519
  type: ASSET_MODULE_TYPE_BYTES
1212
1520
  }
1213
1521
  );
1522
+ if (html) {
1523
+ // A `.webmanifest` referenced by `<link rel="manifest">` is a `url`
1524
+ // dependency; route it to the `asset/webmanifest` type so its icon URLs
1525
+ // are parsed. Must come after the generic `url` → asset rule so it wins.
1526
+ rules.push({
1527
+ dependency: "url",
1528
+ test: /\.webmanifest$/i,
1529
+ type: "asset/webmanifest"
1530
+ });
1531
+ // A generated manifest (`output.html.manifest` object) is injected as a
1532
+ // `data:application/manifest+json` URL with no `.webmanifest` extension;
1533
+ // route it by mimetype so its icons are parsed and hashed too.
1534
+ rules.push({
1535
+ dependency: "url",
1536
+ mimetype: "application/manifest+json",
1537
+ type: "asset/webmanifest"
1538
+ });
1539
+ }
1540
+ if (futureDefaults) {
1541
+ rules.push({
1542
+ oneOf: [
1543
+ {
1544
+ resourceQuery: /(\?|&)raw(&|$)/,
1545
+ type: ASSET_MODULE_TYPE_SOURCE
1546
+ },
1547
+ {
1548
+ resourceQuery: /(\?|&)url(&|$)/,
1549
+ type: ASSET_MODULE_TYPE_RESOURCE
1550
+ },
1551
+ {
1552
+ resourceQuery: /(\?|&)no-inline(&|$)/,
1553
+ type: ASSET_MODULE_TYPE_RESOURCE
1554
+ },
1555
+ {
1556
+ resourceQuery: /(\?|&)inline(&|$)/,
1557
+ type: ASSET_MODULE_TYPE_INLINE
1558
+ }
1559
+ ]
1560
+ });
1561
+ }
1214
1562
  return rules;
1215
1563
  });
1216
1564
  };
1217
1565
 
1218
1566
  /**
1567
+ * Apply output defaults.
1219
1568
  * @param {Output} output options
1220
1569
  * @param {object} options options
1221
1570
  * @param {string} options.context context
@@ -1242,6 +1591,7 @@ const applyOutputDefaults = (
1242
1591
  }
1243
1592
  ) => {
1244
1593
  /**
1594
+ * Returns a readable library name.
1245
1595
  * @param {Library=} library the library option
1246
1596
  * @returns {string} a readable library name
1247
1597
  */
@@ -1293,11 +1643,13 @@ const applyOutputDefaults = (
1293
1643
 
1294
1644
  const environment = /** @type {Environment} */ (output.environment);
1295
1645
  /**
1646
+ * Returns true, when v is truthy or undefined.
1296
1647
  * @param {boolean | undefined} v value
1297
1648
  * @returns {boolean} true, when v is truthy or undefined
1298
1649
  */
1299
1650
  const optimistic = (v) => v || v === undefined;
1300
1651
  /**
1652
+ * Conditionally optimistic.
1301
1653
  * @param {boolean | undefined} v value
1302
1654
  * @param {boolean | undefined} c condition
1303
1655
  * @returns {boolean | undefined} true, when v is truthy or undefined, or c is truthy
@@ -1309,6 +1661,17 @@ const applyOutputDefaults = (
1309
1661
  "globalThis",
1310
1662
  () => /** @type {boolean | undefined} */ (tp && tp.globalThis)
1311
1663
  );
1664
+ F(
1665
+ environment,
1666
+ "symbol",
1667
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.symbol))
1668
+ );
1669
+ F(
1670
+ environment,
1671
+ "hasOwn",
1672
+ // No optimistic, because it is new
1673
+ () => tp && /** @type {boolean | undefined} */ (tp.hasOwn)
1674
+ );
1312
1675
  F(
1313
1676
  environment,
1314
1677
  "bigIntLiteral",
@@ -1320,6 +1683,22 @@ const applyOutputDefaults = (
1320
1683
  "const",
1321
1684
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
1322
1685
  );
1686
+ // `let` was added after `const`; targets predating it report only `const`,
1687
+ // so fall back to `const` when `let` is unreported (undefined). Targets that
1688
+ // do report `let` (browserslist, built-ins) keep their own accurate value.
1689
+ F(environment, "let", () =>
1690
+ conditionallyOptimistic(
1691
+ /** @type {boolean | undefined} */ (tp && tp.let),
1692
+ environment.const
1693
+ )
1694
+ );
1695
+ F(
1696
+ environment,
1697
+ "logicalAssignment",
1698
+ () =>
1699
+ // No optimistic, because it is new
1700
+ tp && /** @type {boolean | undefined} */ (tp.logicalAssignment)
1701
+ );
1323
1702
  F(
1324
1703
  environment,
1325
1704
  "methodShorthand",
@@ -1338,6 +1717,11 @@ const applyOutputDefaults = (
1338
1717
  () =>
1339
1718
  tp && optimistic(/** @type {boolean | undefined} */ (tp.asyncFunction))
1340
1719
  );
1720
+ F(
1721
+ environment,
1722
+ "generator",
1723
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.generator))
1724
+ );
1341
1725
  F(
1342
1726
  environment,
1343
1727
  "forOf",
@@ -1355,6 +1739,11 @@ const applyOutputDefaults = (
1355
1739
  () =>
1356
1740
  tp && optimistic(/** @type {boolean | undefined} */ (tp.optionalChaining))
1357
1741
  );
1742
+ F(
1743
+ environment,
1744
+ "spread",
1745
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.spread))
1746
+ );
1358
1747
  F(
1359
1748
  environment,
1360
1749
  "nodePrefixForCoreModules",
@@ -1371,6 +1760,13 @@ const applyOutputDefaults = (
1371
1760
  // No optimistic, because it is new
1372
1761
  tp && /** @type {boolean | undefined} */ (tp.importMetaDirnameAndFilename)
1373
1762
  );
1763
+ F(
1764
+ environment,
1765
+ "nodeBuiltinModuleGetter",
1766
+ () =>
1767
+ // No optimistic, because it is new
1768
+ tp && /** @type {boolean | undefined} */ (tp.nodeBuiltinModuleGetter)
1769
+ );
1374
1770
  F(
1375
1771
  environment,
1376
1772
  "templateLiteral",
@@ -1400,6 +1796,30 @@ const applyOutputDefaults = (
1400
1796
  "document",
1401
1797
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.document))
1402
1798
  );
1799
+ F(
1800
+ environment,
1801
+ "modulePreload",
1802
+ () =>
1803
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.modulePreload))
1804
+ );
1805
+
1806
+ // Vite-style default for ESM output (`output.module`): preload the entry's
1807
+ // initial dependency graph, which native `import()` would otherwise fetch in
1808
+ // a waterfall. Classic output loads initial chunks via parallel `<script>`
1809
+ // tags (no waterfall), so it stays opt-in.
1810
+ if (output.module && output.resourceHints === undefined) {
1811
+ output.resourceHints = {};
1812
+ }
1813
+ if (output.resourceHints) {
1814
+ if (output.module) D(output.resourceHints, "initial", true);
1815
+ // `modulePreloadPolyfill` defaults from the target's modulepreload
1816
+ // support: inject the polyfill iff the environment lacks it.
1817
+ D(
1818
+ output.resourceHints,
1819
+ "modulePreloadPolyfill",
1820
+ !environment.modulePreload
1821
+ );
1822
+ }
1403
1823
 
1404
1824
  D(output, "filename", output.module ? "[name].mjs" : "[name].js");
1405
1825
  F(output, "iife", () => !output.module);
@@ -1439,8 +1859,48 @@ const applyOutputDefaults = (
1439
1859
  }
1440
1860
  return "[id].css";
1441
1861
  });
1862
+ // Derive html filename defaults from `output.filename` / `output.chunkFilename`
1863
+ // (the same shape the CSS pipeline uses), but if the derived template lacks
1864
+ // any per-module differentiator, fall back to `[name].html` so multiple
1865
+ // extracted HTML modules in one compilation don't collide on the same
1866
+ // emitted file. For example: `output.filename: "bundle.js"` would derive
1867
+ // `bundle.html` — two `.html` modules extracted in the same build would
1868
+ // both want that name and conflict at emit time.
1869
+ const HAS_PATH_PLACEHOLDER_REGEXP =
1870
+ /\[(name|id|chunkhash|contenthash|fullhash|hash)/;
1871
+ /**
1872
+ * @param {string} template html filename template derived from `output.filename`
1873
+ * @returns {string} same template, or `[name].html` if it has no per-module placeholder
1874
+ */
1875
+ const ensureUniqueHtmlTemplate = (template) =>
1876
+ HAS_PATH_PLACEHOLDER_REGEXP.test(template) ? template : "[name].html";
1877
+ F(output, "htmlFilename", () => {
1878
+ const filename =
1879
+ /** @type {NonNullable<Output["htmlFilename"]>} */
1880
+ (output.filename);
1881
+ if (typeof filename !== "function") {
1882
+ return ensureUniqueHtmlTemplate(
1883
+ filename.replace(/\.[mc]?js(\?|$)/, ".html$1")
1884
+ );
1885
+ }
1886
+ return "[name].html";
1887
+ });
1888
+ F(output, "htmlChunkFilename", () => {
1889
+ const chunkFilename =
1890
+ /** @type {NonNullable<Output["htmlChunkFilename"]>} */
1891
+ (output.chunkFilename);
1892
+ if (typeof chunkFilename !== "function") {
1893
+ return ensureUniqueHtmlTemplate(
1894
+ chunkFilename.replace(/\.[mc]?js(\?|$)/, ".html$1")
1895
+ );
1896
+ }
1897
+ return "[name].html";
1898
+ });
1899
+ D(output, "html", false);
1442
1900
  D(output, "assetModuleFilename", "[hash][ext][query][fragment]");
1443
1901
  D(output, "webassemblyModuleFilename", "[hash].module.wasm");
1902
+ // On by default like other wasm toolchains; set false to drop the fallback runtime code.
1903
+ D(output, "wasmStreamingFallback", true);
1444
1904
  D(output, "compareBeforeEmit", true);
1445
1905
  D(output, "charset", !futureDefaults);
1446
1906
  const uniqueNameId = Template.toIdentifier(
@@ -1452,8 +1912,11 @@ const applyOutputDefaults = (
1452
1912
  if (tp) {
1453
1913
  if (tp.global) return "global";
1454
1914
  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";
1915
+ // Universal target (web + node) with no reported accessor: `globalThis`
1916
+ // is the only one defined everywhere (`null` = mixed support → `self`).
1917
+ if (tp.web === null && tp.node === null && tp.globalThis === undefined) {
1918
+ return "globalThis";
1919
+ }
1457
1920
  }
1458
1921
  return "self";
1459
1922
  });
@@ -1520,6 +1983,13 @@ const applyOutputDefaults = (
1520
1983
  }
1521
1984
  return false;
1522
1985
  });
1986
+ F(
1987
+ output,
1988
+ "workerChunkFilename",
1989
+ () =>
1990
+ /** @type {NonNullable<Output["workerChunkFilename"]>} */
1991
+ (output.chunkFilename)
1992
+ );
1523
1993
  F(output, "workerChunkLoading", () => {
1524
1994
  if (tp) {
1525
1995
  switch (output.chunkFormat) {
@@ -1576,7 +2046,9 @@ const applyOutputDefaults = (
1576
2046
  D(
1577
2047
  output,
1578
2048
  "hotUpdateMainFilename",
1579
- `[runtime].[fullhash].hot-update.${output.module ? "json.mjs" : "json"}`
2049
+ // Only `chunkLoading: "import"` loads the manifest via `import()` (needs an
2050
+ // `export default` ES module); every other loader fetches it as raw JSON.
2051
+ `[runtime].[fullhash].hot-update.${output.chunkLoading === "import" ? "json.mjs" : "json"}`
1580
2052
  );
1581
2053
  D(output, "crossOriginLoading", false);
1582
2054
  F(output, "scriptType", () => (output.module ? "module" : false));
@@ -1601,6 +2073,7 @@ const applyOutputDefaults = (
1601
2073
  D(output, "hashDigestLength", futureDefaults ? 16 : 20);
1602
2074
  D(output, "strictModuleErrorHandling", false);
1603
2075
  D(output, "strictModuleExceptionHandling", false);
2076
+ F(output, "strictModuleResolution", () => development);
1604
2077
 
1605
2078
  const { trustedTypes } = output;
1606
2079
  if (trustedTypes) {
@@ -1615,6 +2088,7 @@ const applyOutputDefaults = (
1615
2088
  }
1616
2089
 
1617
2090
  /**
2091
+ * Processes the provided fn.
1618
2092
  * @param {(entryDescription: EntryDescription) => void} fn iterator
1619
2093
  * @returns {void}
1620
2094
  */
@@ -1673,6 +2147,7 @@ const applyOutputDefaults = (
1673
2147
  };
1674
2148
 
1675
2149
  /**
2150
+ * Apply externals presets defaults.
1676
2151
  * @param {ExternalsPresets} externalsPresets options
1677
2152
  * @param {object} options options
1678
2153
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -1685,6 +2160,7 @@ const applyExternalsPresetsDefaults = (
1685
2160
  { targetProperties, buildHttp, outputModule }
1686
2161
  ) => {
1687
2162
  /**
2163
+ * Checks whether this object is universal.
1688
2164
  * @param {keyof TargetProperties} key a key
1689
2165
  * @returns {boolean} true when target is universal, otherwise false
1690
2166
  */
@@ -1705,7 +2181,25 @@ const applyExternalsPresetsDefaults = (
1705
2181
  externalsPresets,
1706
2182
  "node",
1707
2183
  /** @type {boolean | undefined} */
1708
- (targetProperties && (targetProperties.node || isUniversal("node")))
2184
+ (
2185
+ targetProperties &&
2186
+ ((targetProperties.node &&
2187
+ !targetProperties.deno &&
2188
+ !targetProperties.bun) ||
2189
+ isUniversal("node"))
2190
+ )
2191
+ );
2192
+ D(
2193
+ externalsPresets,
2194
+ "deno",
2195
+ /** @type {boolean | undefined} */
2196
+ (Boolean(targetProperties && targetProperties.deno))
2197
+ );
2198
+ D(
2199
+ externalsPresets,
2200
+ "bun",
2201
+ /** @type {boolean | undefined} */
2202
+ (Boolean(targetProperties && targetProperties.bun))
1709
2203
  );
1710
2204
  D(
1711
2205
  externalsPresets,
@@ -1752,6 +2246,7 @@ const applyExternalsPresetsDefaults = (
1752
2246
  };
1753
2247
 
1754
2248
  /**
2249
+ * Apply loader defaults.
1755
2250
  * @param {Loader} loader options
1756
2251
  * @param {object} options options
1757
2252
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -1768,6 +2263,8 @@ const applyLoaderDefaults = (loader, { targetProperties, environment }) => {
1768
2263
  return "electron";
1769
2264
  }
1770
2265
  if (targetProperties.nwjs) return "nwjs";
2266
+ if (targetProperties.deno) return "deno";
2267
+ if (targetProperties.bun) return "bun";
1771
2268
  if (targetProperties.node) return "node";
1772
2269
  if (targetProperties.web) return "web";
1773
2270
  }
@@ -1776,6 +2273,7 @@ const applyLoaderDefaults = (loader, { targetProperties, environment }) => {
1776
2273
  };
1777
2274
 
1778
2275
  /**
2276
+ * Apply node defaults.
1779
2277
  * @param {WebpackNode} node options
1780
2278
  * @param {object} options options
1781
2279
  * @param {TargetProperties | false} options.targetProperties target properties
@@ -1821,6 +2319,7 @@ const applyNodeDefaults = (
1821
2319
  };
1822
2320
 
1823
2321
  /**
2322
+ * Apply performance defaults.
1824
2323
  * @param {Performance} performance options
1825
2324
  * @param {object} options options
1826
2325
  * @param {boolean} options.production is production
@@ -1834,6 +2333,7 @@ const applyPerformanceDefaults = (performance, { production }) => {
1834
2333
  };
1835
2334
 
1836
2335
  /**
2336
+ * Apply optimization defaults.
1837
2337
  * @param {Optimization} optimization options
1838
2338
  * @param {object} options options
1839
2339
  * @param {boolean} options.production is production
@@ -1864,6 +2364,7 @@ const applyOptimizationDefaults = (
1864
2364
  D(optimization, "providedExports", true);
1865
2365
  D(optimization, "usedExports", production);
1866
2366
  D(optimization, "innerGraph", production);
2367
+ D(optimization, "inlineExports", production);
1867
2368
  D(optimization, "mangleExports", production);
1868
2369
  D(optimization, "concatenateModules", production);
1869
2370
  D(optimization, "avoidEntryIife", production);
@@ -1877,8 +2378,8 @@ const applyOptimizationDefaults = (
1877
2378
  A(optimization, "minimizer", () => [
1878
2379
  {
1879
2380
  apply: (compiler) => {
1880
- // Lazy load the Terser plugin
1881
- const TerserPlugin = require("terser-webpack-plugin");
2381
+ // Lazy load the minimizer plugin
2382
+ const TerserPlugin = require("minimizer-webpack-plugin");
1882
2383
 
1883
2384
  new TerserPlugin({
1884
2385
  terserOptions: {
@@ -1931,12 +2432,16 @@ const applyOptimizationDefaults = (
1931
2432
  };
1932
2433
 
1933
2434
  /**
2435
+ * Gets resolve defaults.
1934
2436
  * @param {object} options options
1935
2437
  * @param {boolean} options.cache is cache enable
1936
2438
  * @param {string} options.context build context
1937
2439
  * @param {TargetProperties | false} options.targetProperties target properties
1938
2440
  * @param {Mode} options.mode mode
1939
2441
  * @param {boolean} options.css is css enabled
2442
+ * @param {boolean} options.html is html enabled
2443
+ * @param {boolean} options.htmlFirst whether `.html` should outrank `.js` when resolving (only when html was explicitly enabled)
2444
+ * @param {boolean} options.typescript is typescript enabled
1940
2445
  * @returns {ResolveOptions} resolve options
1941
2446
  */
1942
2447
  const getResolveDefaults = ({
@@ -1944,7 +2449,10 @@ const getResolveDefaults = ({
1944
2449
  context,
1945
2450
  targetProperties,
1946
2451
  mode,
1947
- css
2452
+ css,
2453
+ html,
2454
+ htmlFirst,
2455
+ typescript
1948
2456
  }) => {
1949
2457
  /** @type {string[]} */
1950
2458
  const conditions = ["webpack"];
@@ -1952,6 +2460,8 @@ const getResolveDefaults = ({
1952
2460
  conditions.push(mode === "development" ? "development" : "production");
1953
2461
 
1954
2462
  if (targetProperties) {
2463
+ if (targetProperties.deno) conditions.push("deno");
2464
+ if (targetProperties.bun) conditions.push("bun");
1955
2465
  if (targetProperties.webworker) conditions.push("worker");
1956
2466
  if (targetProperties.node) conditions.push("node");
1957
2467
  if (targetProperties.web) conditions.push("browser");
@@ -1959,25 +2469,54 @@ const getResolveDefaults = ({
1959
2469
  if (targetProperties.nwjs) conditions.push("nwjs");
1960
2470
  }
1961
2471
 
1962
- const jsExtensions = [".js", ".json", ".wasm"];
2472
+ const jsExtensions = typescript
2473
+ ? [".ts", ".js", ".json", ".wasm"]
2474
+ : [".js", ".json", ".wasm"];
2475
+
2476
+ // Explicitly enabling html keeps `.html` ahead of `.js` (html-as-entry feature).
2477
+ // Auto-enabled html/css are lower-priority fallbacks after `.js`, so enabling
2478
+ // them by default never makes `x.html`/`x.css` shadow `x.js`.
2479
+ const esmResolveExtensions = [
2480
+ ...(html && htmlFirst ? [".html"] : []),
2481
+ ...jsExtensions,
2482
+ ...(html && !htmlFirst ? [".html"] : []),
2483
+ ...(css ? [".css"] : [])
2484
+ ];
1963
2485
 
1964
2486
  const tp = targetProperties;
1965
2487
  const browserField =
1966
2488
  tp && tp.web && (!tp.node || (tp.electron && tp.electronRenderer));
1967
2489
 
2490
+ // When `experiments.typescript` is on, also honor the `typescript`
2491
+ // conditional-exports key so monorepo packages can ship .ts sources via
2492
+ // `package.json#exports` — same convention Node.js's amaro uses.
2493
+ const tsConditionPrefix = typescript ? ["typescript"] : [];
2494
+
1968
2495
  /** @type {() => ResolveOptions} */
1969
2496
  const cjsDeps = () => ({
1970
2497
  aliasFields: browserField ? ["browser"] : [],
1971
2498
  mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
1972
- conditionNames: ["require", "module", "..."],
2499
+ conditionNames: [
2500
+ ...tsConditionPrefix,
2501
+ "require",
2502
+ "module-sync",
2503
+ "module",
2504
+ "..."
2505
+ ],
1973
2506
  extensions: [...jsExtensions]
1974
2507
  });
1975
2508
  /** @type {() => ResolveOptions} */
1976
2509
  const esmDeps = () => ({
1977
2510
  aliasFields: browserField ? ["browser"] : [],
1978
2511
  mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
1979
- conditionNames: ["import", "module", "..."],
1980
- extensions: [...jsExtensions]
2512
+ conditionNames: [
2513
+ ...tsConditionPrefix,
2514
+ "import",
2515
+ "module-sync",
2516
+ "module",
2517
+ "..."
2518
+ ],
2519
+ extensions: [...esmResolveExtensions]
1981
2520
  });
1982
2521
 
1983
2522
  /** @type {() => ResolveOptions} */
@@ -2057,10 +2596,20 @@ const getResolveDefaults = ({
2057
2596
  cssResolveOptions;
2058
2597
  }
2059
2598
 
2599
+ if (typescript) {
2600
+ resolveOptions.tsconfig = true;
2601
+ resolveOptions.extensionAlias = {
2602
+ ".js": [".js", ".ts"],
2603
+ ".cjs": [".cjs", ".cts"],
2604
+ ".mjs": [".mjs", ".mts"]
2605
+ };
2606
+ }
2607
+
2060
2608
  return resolveOptions;
2061
2609
  };
2062
2610
 
2063
2611
  /**
2612
+ * Gets resolve loader defaults.
2064
2613
  * @param {object} options options
2065
2614
  * @param {boolean} options.cache is cache enable
2066
2615
  * @returns {ResolveOptions} resolve options
@@ -2080,6 +2629,7 @@ const getResolveLoaderDefaults = ({ cache }) => {
2080
2629
  };
2081
2630
 
2082
2631
  /**
2632
+ * Apply infrastructure logging defaults.
2083
2633
  * @param {InfrastructureLogging} infrastructureLogging options
2084
2634
  * @returns {void}
2085
2635
  */