webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -8,36 +8,40 @@
8
8
  const fs = require("fs");
9
9
  const path = require("path");
10
10
  const {
11
- JAVASCRIPT_MODULE_TYPE_AUTO,
12
- JAVASCRIPT_MODULE_TYPE_ESM,
13
- JAVASCRIPT_MODULE_TYPE_DYNAMIC,
14
- JSON_MODULE_TYPE,
15
- WEBASSEMBLY_MODULE_TYPE_ASYNC,
16
- WEBASSEMBLY_MODULE_TYPE_SYNC,
11
+ CSS_TYPE,
12
+ JAVASCRIPT_TYPE,
13
+ UNKNOWN_TYPE
14
+ } = require("../ModuleSourceTypeConstants");
15
+ const {
17
16
  ASSET_MODULE_TYPE,
17
+ ASSET_MODULE_TYPE_BYTES,
18
18
  ASSET_MODULE_TYPE_INLINE,
19
19
  ASSET_MODULE_TYPE_RESOURCE,
20
- CSS_MODULE_TYPE_AUTO,
20
+ ASSET_MODULE_TYPE_SOURCE,
21
21
  CSS_MODULE_TYPE,
22
+ CSS_MODULE_TYPE_AUTO,
23
+ CSS_MODULE_TYPE_GLOBAL,
22
24
  CSS_MODULE_TYPE_MODULE,
23
- CSS_MODULE_TYPE_GLOBAL
25
+ JAVASCRIPT_MODULE_TYPE_AUTO,
26
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
27
+ JAVASCRIPT_MODULE_TYPE_ESM,
28
+ JSON_MODULE_TYPE,
29
+ WEBASSEMBLY_MODULE_TYPE_ASYNC,
30
+ WEBASSEMBLY_MODULE_TYPE_SYNC
24
31
  } = require("../ModuleTypeConstants");
25
32
  const Template = require("../Template");
26
33
  const { cleverMerge } = require("../util/cleverMerge");
27
34
  const {
28
- getTargetsProperties,
35
+ getDefaultTarget,
29
36
  getTargetProperties,
30
- getDefaultTarget
37
+ getTargetsProperties
31
38
  } = require("./target");
32
39
 
33
- /** @typedef {import("../../declarations/WebpackOptions").CacheOptions} CacheOptions */
34
40
  /** @typedef {import("../../declarations/WebpackOptions").CacheOptionsNormalized} CacheOptionsNormalized */
35
41
  /** @typedef {import("../../declarations/WebpackOptions").Context} Context */
36
42
  /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorOptions} CssGeneratorOptions */
37
- /** @typedef {import("../../declarations/WebpackOptions").CssParserOptions} CssParserOptions */
38
43
  /** @typedef {import("../../declarations/WebpackOptions").EntryDescription} EntryDescription */
39
44
  /** @typedef {import("../../declarations/WebpackOptions").EntryNormalized} Entry */
40
- /** @typedef {import("../../declarations/WebpackOptions").EntryStaticNormalized} EntryStaticNormalized */
41
45
  /** @typedef {import("../../declarations/WebpackOptions").Environment} Environment */
42
46
  /** @typedef {import("../../declarations/WebpackOptions").Experiments} Experiments */
43
47
  /** @typedef {import("../../declarations/WebpackOptions").ExperimentsNormalized} ExperimentsNormalized */
@@ -47,15 +51,18 @@ const {
47
51
  /** @typedef {import("../../declarations/WebpackOptions").GeneratorOptionsByModuleTypeKnown} GeneratorOptionsByModuleTypeKnown */
48
52
  /** @typedef {import("../../declarations/WebpackOptions").InfrastructureLogging} InfrastructureLogging */
49
53
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
54
+ /** @typedef {import("../../declarations/WebpackOptions").JsonGeneratorOptions} JsonGeneratorOptions */
50
55
  /** @typedef {import("../../declarations/WebpackOptions").Library} Library */
51
56
  /** @typedef {import("../../declarations/WebpackOptions").LibraryName} LibraryName */
52
- /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
53
57
  /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
54
58
  /** @typedef {import("../../declarations/WebpackOptions").Loader} Loader */
55
59
  /** @typedef {import("../../declarations/WebpackOptions").Mode} Mode */
60
+ /** @typedef {import("../../declarations/WebpackOptions").HashSalt} HashSalt */
61
+ /** @typedef {import("../../declarations/WebpackOptions").HashSalt} HashDigest */
62
+ /** @typedef {import("../../declarations/WebpackOptions").HashDigestLength} HashDigestLength */
56
63
  /** @typedef {import("../../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
57
64
  /** @typedef {import("../../declarations/WebpackOptions").Node} WebpackNode */
58
- /** @typedef {import("../../declarations/WebpackOptions").Optimization} Optimization */
65
+ /** @typedef {import("../../declarations/WebpackOptions").OptimizationNormalized} Optimization */
59
66
  /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksOptions} OptimizationSplitChunksOptions */
60
67
  /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} Output */
61
68
  /** @typedef {import("../../declarations/WebpackOptions").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */
@@ -63,14 +70,150 @@ const {
63
70
  /** @typedef {import("../../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
64
71
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRules} RuleSetRules */
65
72
  /** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
66
- /** @typedef {import("../../declarations/WebpackOptions").Target} Target */
67
- /** @typedef {import("../../declarations/WebpackOptions").WebpackOptions} WebpackOptions */
68
73
  /** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
69
- /** @typedef {import("../Compiler")} Compiler */
70
74
  /** @typedef {import("../Module")} Module */
71
75
  /** @typedef {import("./target").PlatformTargetProperties} PlatformTargetProperties */
72
76
  /** @typedef {import("./target").TargetProperties} TargetProperties */
73
77
 
78
+ /**
79
+ * @template T
80
+ * @typedef {{ [P in keyof T]-?: T[P] extends object ? RecursiveNonNullable<NonNullable<T[P]>> : NonNullable<T[P]> }} RecursiveNonNullable
81
+ */
82
+
83
+ /**
84
+ * @typedef {Output & {
85
+ * uniqueName: NonNullable<Output["uniqueName"]>,
86
+ * filename: NonNullable<Output["filename"]>,
87
+ * cssFilename: NonNullable<Output["cssFilename"]>,
88
+ * chunkFilename: NonNullable<Output["chunkFilename"]>,
89
+ * cssChunkFilename: NonNullable<Output["cssChunkFilename"]>,
90
+ * hotUpdateChunkFilename: NonNullable<Output["hotUpdateChunkFilename"]>,
91
+ * hotUpdateGlobal: NonNullable<Output["hotUpdateGlobal"]>,
92
+ * assetModuleFilename: NonNullable<Output["assetModuleFilename"]>,
93
+ * webassemblyModuleFilename: NonNullable<Output["webassemblyModuleFilename"]>
94
+ * sourceMapFilename: NonNullable<Output["sourceMapFilename"]>,
95
+ * hotUpdateMainFilename: NonNullable<Output["hotUpdateMainFilename"]>,
96
+ * devtoolNamespace: NonNullable<Output["devtoolNamespace"]>,
97
+ * publicPath: NonNullable<Output["publicPath"]>
98
+ * workerPublicPath: NonNullable<Output["workerPublicPath"]>
99
+ * workerWasmLoading: NonNullable<Output["workerWasmLoading"]>
100
+ * workerChunkLoading: NonNullable<Output["workerChunkLoading"]>
101
+ * chunkFormat: NonNullable<Output["chunkFormat"]>,
102
+ * module: NonNullable<Output["module"]>,
103
+ * asyncChunks: NonNullable<Output["asyncChunks"]>,
104
+ * charset: NonNullable<Output["charset"]>,
105
+ * iife: NonNullable<Output["iife"]>,
106
+ * globalObject: NonNullable<Output["globalObject"]>,
107
+ * scriptType: NonNullable<Output["scriptType"]>,
108
+ * path: NonNullable<Output["path"]>,
109
+ * pathinfo: NonNullable<Output["pathinfo"]>,
110
+ * hashFunction: NonNullable<Output["hashFunction"]>,
111
+ * hashDigest: NonNullable<Output["hashDigest"]>,
112
+ * hashDigestLength: NonNullable<Output["hashDigestLength"]>,
113
+ * chunkLoadTimeout: NonNullable<Output["chunkLoadTimeout"]>,
114
+ * chunkLoading: NonNullable<Output["chunkLoading"]>,
115
+ * chunkLoadingGlobal: NonNullable<Output["chunkLoadingGlobal"]>,
116
+ * compareBeforeEmit: NonNullable<Output["compareBeforeEmit"]>,
117
+ * strictModuleErrorHandling: NonNullable<Output["strictModuleErrorHandling"]>,
118
+ * strictModuleExceptionHandling: NonNullable<Output["strictModuleExceptionHandling"]>,
119
+ * importFunctionName: NonNullable<Output["importFunctionName"]>,
120
+ * importMetaName: NonNullable<Output["importMetaName"]>,
121
+ * environment: RecursiveNonNullable<Output["environment"]>,
122
+ * crossOriginLoading: NonNullable<Output["crossOriginLoading"]>,
123
+ * wasmLoading: NonNullable<Output["wasmLoading"]>,
124
+ * }} OutputNormalizedWithDefaults
125
+ */
126
+
127
+ /**
128
+ * @typedef {SnapshotOptions & {
129
+ * managedPaths: NonNullable<SnapshotOptions["managedPaths"]>,
130
+ * unmanagedPaths: NonNullable<SnapshotOptions["unmanagedPaths"]>,
131
+ * immutablePaths: NonNullable<SnapshotOptions["immutablePaths"]>,
132
+ * resolveBuildDependencies: NonNullable<SnapshotOptions["resolveBuildDependencies"]>,
133
+ * buildDependencies: NonNullable<SnapshotOptions["buildDependencies"]>,
134
+ * module: NonNullable<SnapshotOptions["module"]>,
135
+ * resolve: NonNullable<SnapshotOptions["resolve"]>,
136
+ * }} SnapshotNormalizedWithDefaults
137
+ */
138
+
139
+ /**
140
+ * @typedef {Optimization & {
141
+ * runtimeChunk: NonNullable<Optimization["runtimeChunk"]>,
142
+ * splitChunks: NonNullable<Optimization["splitChunks"]>,
143
+ * mergeDuplicateChunks: NonNullable<Optimization["mergeDuplicateChunks"]>,
144
+ * removeAvailableModules: NonNullable<Optimization["removeAvailableModules"]>,
145
+ * removeEmptyChunks: NonNullable<Optimization["removeEmptyChunks"]>,
146
+ * flagIncludedChunks: NonNullable<Optimization["flagIncludedChunks"]>,
147
+ * moduleIds: NonNullable<Optimization["moduleIds"]>,
148
+ * chunkIds: NonNullable<Optimization["chunkIds"]>,
149
+ * sideEffects: NonNullable<Optimization["sideEffects"]>,
150
+ * providedExports: NonNullable<Optimization["providedExports"]>,
151
+ * usedExports: NonNullable<Optimization["usedExports"]>,
152
+ * mangleExports: NonNullable<Optimization["mangleExports"]>,
153
+ * innerGraph: NonNullable<Optimization["innerGraph"]>,
154
+ * concatenateModules: NonNullable<Optimization["concatenateModules"]>,
155
+ * avoidEntryIife: NonNullable<Optimization["avoidEntryIife"]>,
156
+ * emitOnErrors: NonNullable<Optimization["emitOnErrors"]>,
157
+ * checkWasmTypes: NonNullable<Optimization["checkWasmTypes"]>,
158
+ * mangleWasmImports: NonNullable<Optimization["mangleWasmImports"]>,
159
+ * portableRecords: NonNullable<Optimization["portableRecords"]>,
160
+ * realContentHash: NonNullable<Optimization["realContentHash"]>,
161
+ * minimize: NonNullable<Optimization["minimize"]>,
162
+ * minimizer: NonNullable<Exclude<Optimization["minimizer"], "...">>,
163
+ * nodeEnv: NonNullable<Optimization["nodeEnv"]>,
164
+ * }} OptimizationNormalizedWithDefaults
165
+ */
166
+
167
+ /**
168
+ * @typedef {ExternalsPresets & {
169
+ * web: NonNullable<ExternalsPresets["web"]>,
170
+ * node: NonNullable<ExternalsPresets["node"]>,
171
+ * nwjs: NonNullable<ExternalsPresets["nwjs"]>,
172
+ * electron: NonNullable<ExternalsPresets["electron"]>,
173
+ * electronMain: NonNullable<ExternalsPresets["electronMain"]>,
174
+ * electronPreload: NonNullable<ExternalsPresets["electronPreload"]>,
175
+ * electronRenderer: NonNullable<ExternalsPresets["electronRenderer"]>,
176
+ * }} ExternalsPresetsNormalizedWithDefaults
177
+ */
178
+
179
+ /**
180
+ * @typedef {InfrastructureLogging & {
181
+ * stream: NonNullable<InfrastructureLogging["stream"]>,
182
+ * level: NonNullable<InfrastructureLogging["level"]>,
183
+ * debug: NonNullable<InfrastructureLogging["debug"]>,
184
+ * colors: NonNullable<InfrastructureLogging["colors"]>,
185
+ * appendOnly: NonNullable<InfrastructureLogging["appendOnly"]>,
186
+ * }} InfrastructureLoggingNormalizedWithDefaults
187
+ */
188
+
189
+ /**
190
+ * @typedef {WebpackOptionsNormalized
191
+ * & { context: NonNullable<WebpackOptionsNormalized["context"]> }
192
+ * & { infrastructureLogging: InfrastructureLoggingNormalizedWithDefaults }
193
+ * } WebpackOptionsNormalizedWithBaseDefaults
194
+ */
195
+
196
+ /**
197
+ * @typedef {WebpackOptionsNormalizedWithBaseDefaults
198
+ * & { target: NonNullable<WebpackOptionsNormalized["target"]> }
199
+ * & { output: OutputNormalizedWithDefaults }
200
+ * & { optimization: OptimizationNormalizedWithDefaults }
201
+ * & { devtool: NonNullable<WebpackOptionsNormalized["devtool"]> }
202
+ * & { stats: NonNullable<WebpackOptionsNormalized["stats"]> }
203
+ * & { node: NonNullable<WebpackOptionsNormalized["node"]> }
204
+ * & { profile: NonNullable<WebpackOptionsNormalized["profile"]> }
205
+ * & { parallelism: NonNullable<WebpackOptionsNormalized["parallelism"]> }
206
+ * & { snapshot: SnapshotNormalizedWithDefaults }
207
+ * & { externalsPresets: ExternalsPresetsNormalizedWithDefaults }
208
+ * & { externalsType: NonNullable<WebpackOptionsNormalized["externalsType"]> }
209
+ * & { watch: NonNullable<WebpackOptionsNormalized["watch"]> }
210
+ * & { performance: NonNullable<WebpackOptionsNormalized["performance"]> }
211
+ * & { recordsInputPath: NonNullable<WebpackOptionsNormalized["recordsInputPath"]> }
212
+ * & { recordsOutputPath: NonNullable<WebpackOptionsNormalized["recordsOutputPath"]>
213
+ * & { dotenv: NonNullable<WebpackOptionsNormalized["dotenv"]> }
214
+ * }} WebpackOptionsNormalizedWithDefaults
215
+ */
216
+
74
217
  /**
75
218
  * @typedef {object} ResolvedOptions
76
219
  * @property {PlatformTargetProperties | false} platform - platform target properties
@@ -78,6 +221,10 @@ const {
78
221
 
79
222
  const NODE_MODULES_REGEXP = /[\\/]node_modules[\\/]/i;
80
223
  const DEFAULT_CACHE_NAME = "default";
224
+ const DEFAULTS = {
225
+ // TODO webpack 6 - use xxhash64
226
+ HASH_FUNCTION: "md4"
227
+ };
81
228
 
82
229
  /**
83
230
  * Sets a constant default value when undefined
@@ -100,7 +247,7 @@ const D = (obj, prop, value) => {
100
247
  * @template {keyof T} P
101
248
  * @param {T} obj an object
102
249
  * @param {P} prop a property of this object
103
- * @param {function(): T[P]} factory a default value factory for the property
250
+ * @param {() => T[P]} factory a default value factory for the property
104
251
  * @returns {void}
105
252
  */
106
253
  const F = (obj, prop, factory) => {
@@ -118,7 +265,7 @@ const F = (obj, prop, factory) => {
118
265
  * @template {keyof T} P
119
266
  * @param {T} obj an object
120
267
  * @param {P} prop a property of this object
121
- * @param {function(): T[P]} factory a default value factory for the property
268
+ * @param {() => T[P]} factory a default value factory for the property
122
269
  * @returns {void}
123
270
  */
124
271
  const A = (obj, prop, factory) => {
@@ -135,9 +282,9 @@ const A = (obj, prop, factory) => {
135
282
  newArray = value.slice(0, i);
136
283
  obj[prop] = /** @type {T[P]} */ (/** @type {unknown} */ (newArray));
137
284
  }
138
- const items = /** @type {EXPECTED_ANY[]} */ (
139
- /** @type {unknown} */ (factory())
140
- );
285
+ const items =
286
+ /** @type {EXPECTED_ANY[]} */
287
+ (/** @type {unknown} */ (factory()));
141
288
  if (items !== undefined) {
142
289
  for (const item of items) {
143
290
  newArray.push(item);
@@ -154,14 +301,14 @@ const A = (obj, prop, factory) => {
154
301
  * @param {WebpackOptionsNormalized} options options to be modified
155
302
  * @returns {void}
156
303
  */
157
- const applyWebpackOptionsBaseDefaults = options => {
304
+ const applyWebpackOptionsBaseDefaults = (options) => {
158
305
  F(options, "context", () => process.cwd());
159
306
  applyInfrastructureLoggingDefaults(options.infrastructureLogging);
160
307
  };
161
308
 
162
309
  /**
163
310
  * @param {WebpackOptionsNormalized} options options to be modified
164
- * @param {number} [compilerIndex] index of compiler
311
+ * @param {number=} compilerIndex index of compiler
165
312
  * @returns {ResolvedOptions} Resolved options after apply defaults
166
313
  */
167
314
  const applyWebpackOptionsDefaults = (options, compilerIndex) => {
@@ -220,6 +367,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
220
367
  mode: mode || "production",
221
368
  development,
222
369
  cacheUnaffected: options.experiments.cacheUnaffected,
370
+ futureDefaults,
223
371
  compilerIndex
224
372
  });
225
373
  const cache = Boolean(options.cache);
@@ -236,7 +384,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
236
384
  target === undefined ||
237
385
  (typeof target === "string" && target.startsWith("browserslist")) ||
238
386
  (Array.isArray(target) &&
239
- target.some(target => target.startsWith("browserslist"))),
387
+ target.some((target) => target.startsWith("browserslist"))),
240
388
  outputModule:
241
389
  /** @type {NonNullable<ExperimentsNormalized["outputModule"]>} */
242
390
  (options.experiments.outputModule),
@@ -250,6 +398,15 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
250
398
 
251
399
  applyModuleDefaults(options.module, {
252
400
  cache,
401
+ hashSalt: /** @type {NonNullable<Output["hashSalt"]>} */ (
402
+ options.output.hashSalt
403
+ ),
404
+ hashDigest: /** @type {NonNullable<Output["hashDigest"]>} */ (
405
+ options.output.hashDigest
406
+ ),
407
+ hashDigestLength: /** @type {NonNullable<Output["hashDigestLength"]>} */ (
408
+ options.output.hashDigestLength
409
+ ),
253
410
  syncWebAssembly:
254
411
  /** @type {NonNullable<ExperimentsNormalized["syncWebAssembly"]>} */
255
412
  (options.experiments.syncWebAssembly),
@@ -259,15 +416,22 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
259
416
  css:
260
417
  /** @type {NonNullable<ExperimentsNormalized["css"]>} */
261
418
  (options.experiments.css),
419
+ deferImport:
420
+ /** @type {NonNullable<ExperimentsNormalized["deferImport"]>} */
421
+ (options.experiments.deferImport),
262
422
  futureDefaults,
263
423
  isNode: targetProperties && targetProperties.node === true,
264
- uniqueName: options.output.uniqueName,
265
- targetProperties
424
+ uniqueName: /** @type {string} */ (options.output.uniqueName),
425
+ targetProperties,
426
+ mode: options.mode
266
427
  });
267
428
 
268
429
  applyExternalsPresetsDefaults(options.externalsPresets, {
269
430
  targetProperties,
270
- buildHttp: Boolean(options.experiments.buildHttp)
431
+ buildHttp: Boolean(options.experiments.buildHttp),
432
+ outputModule:
433
+ /** @type {NonNullable<WebpackOptionsNormalized["output"]["module"]>} */
434
+ (options.output.module)
271
435
  });
272
436
 
273
437
  applyLoaderDefaults(
@@ -280,6 +444,7 @@ const applyWebpackOptionsDefaults = (options, compilerIndex) => {
280
444
  F(options, "externalsType", () => {
281
445
  const validExternalTypes = require("../../schemas/WebpackOptions.json")
282
446
  .definitions.ExternalsType.enum;
447
+
283
448
  return options.output.library &&
284
449
  validExternalTypes.includes(options.output.library.type)
285
450
  ? /** @type {ExternalsType} */ (options.output.library.type)
@@ -369,22 +534,16 @@ const applyExperimentsDefaults = (
369
534
  ) => {
370
535
  D(experiments, "futureDefaults", false);
371
536
  D(experiments, "backCompat", !experiments.futureDefaults);
537
+ // TODO do we need sync web assembly in webpack@6?
372
538
  D(experiments, "syncWebAssembly", false);
373
539
  D(experiments, "asyncWebAssembly", experiments.futureDefaults);
374
540
  D(experiments, "outputModule", false);
375
- D(experiments, "layers", false);
376
541
  D(experiments, "lazyCompilation", undefined);
377
542
  D(experiments, "buildHttp", undefined);
378
543
  D(experiments, "cacheUnaffected", experiments.futureDefaults);
544
+ D(experiments, "deferImport", false);
379
545
  F(experiments, "css", () => (experiments.futureDefaults ? true : undefined));
380
546
 
381
- // TODO webpack 6: remove this. topLevelAwait should be enabled by default
382
- let shouldEnableTopLevelAwait = true;
383
- if (typeof experiments.topLevelAwait === "boolean") {
384
- shouldEnableTopLevelAwait = experiments.topLevelAwait;
385
- }
386
- D(experiments, "topLevelAwait", shouldEnableTopLevelAwait);
387
-
388
547
  if (typeof experiments.buildHttp === "object") {
389
548
  D(experiments.buildHttp, "frozen", production);
390
549
  D(experiments.buildHttp, "upgrade", false);
@@ -396,14 +555,15 @@ const applyExperimentsDefaults = (
396
555
  * @param {object} options options
397
556
  * @param {string} options.name name
398
557
  * @param {Mode} options.mode mode
558
+ * @param {boolean} options.futureDefaults is future defaults enabled
399
559
  * @param {boolean} options.development is development mode
400
- * @param {number} [options.compilerIndex] index of compiler
560
+ * @param {number=} options.compilerIndex index of compiler
401
561
  * @param {Experiments["cacheUnaffected"]} options.cacheUnaffected the cacheUnaffected experiment is enabled
402
562
  * @returns {void}
403
563
  */
404
564
  const applyCacheDefaults = (
405
565
  cache,
406
- { name, mode, development, cacheUnaffected, compilerIndex }
566
+ { name, mode, development, cacheUnaffected, compilerIndex, futureDefaults }
407
567
  ) => {
408
568
  if (cache === false) return;
409
569
  switch (cache.type) {
@@ -446,7 +606,7 @@ const applyCacheDefaults = (
446
606
  /** @type {NonNullable<FileCacheOptions["name"]>} */ (cache.name)
447
607
  )
448
608
  );
449
- D(cache, "hashAlgorithm", "md4");
609
+ D(cache, "hashAlgorithm", futureDefaults ? "xxhash64" : "md4");
450
610
  D(cache, "store", "pack");
451
611
  D(cache, "compression", false);
452
612
  D(cache, "profile", false);
@@ -543,6 +703,7 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
543
703
  F(snapshot, "module", () =>
544
704
  production ? { timestamp: true, hash: true } : { timestamp: true }
545
705
  );
706
+ F(snapshot, "contextModule", () => ({ timestamp: true }));
546
707
  F(snapshot, "resolve", () =>
547
708
  production ? { timestamp: true, hash: true } : { timestamp: true }
548
709
  );
@@ -552,12 +713,13 @@ const applySnapshotDefaults = (snapshot, { production, futureDefaults }) => {
552
713
  * @param {JavascriptParserOptions} parserOptions parser options
553
714
  * @param {object} options options
554
715
  * @param {boolean} options.futureDefaults is future defaults enabled
716
+ * @param {boolean} options.deferImport is defer import enabled
555
717
  * @param {boolean} options.isNode is node target platform
556
718
  * @returns {void}
557
719
  */
558
720
  const applyJavascriptParserOptionsDefaults = (
559
721
  parserOptions,
560
- { futureDefaults, isNode }
722
+ { futureDefaults, deferImport, isNode }
561
723
  ) => {
562
724
  D(parserOptions, "unknownContextRequest", ".");
563
725
  D(parserOptions, "unknownContextRegExp", false);
@@ -577,9 +739,19 @@ const applyJavascriptParserOptionsDefaults = (
577
739
  D(parserOptions, "dynamicImportPreload", false);
578
740
  D(parserOptions, "dynamicImportFetchPriority", false);
579
741
  D(parserOptions, "createRequire", isNode);
742
+ D(parserOptions, "dynamicUrl", true);
743
+ D(parserOptions, "deferImport", deferImport);
580
744
  if (futureDefaults) D(parserOptions, "exportsPresence", "error");
581
745
  };
582
746
 
747
+ /**
748
+ * @param {JsonGeneratorOptions} generatorOptions generator options
749
+ * @returns {void}
750
+ */
751
+ const applyJsonGeneratorOptionsDefaults = (generatorOptions) => {
752
+ D(generatorOptions, "JSONParse", true);
753
+ };
754
+
583
755
  /**
584
756
  * @param {CssGeneratorOptions} generatorOptions generator options
585
757
  * @param {object} options options
@@ -608,12 +780,20 @@ const applyCssGeneratorOptionsDefaults = (
608
780
  * @param {boolean} options.futureDefaults is future defaults enabled
609
781
  * @param {string} options.uniqueName the unique name
610
782
  * @param {boolean} options.isNode is node target platform
783
+ * @param {boolean} options.deferImport is defer import enabled
611
784
  * @param {TargetProperties | false} options.targetProperties target properties
785
+ * @param {Mode | undefined} options.mode mode
786
+ * @param {HashSalt} options.hashSalt hash salt
787
+ * @param {HashDigest} options.hashDigest hash digest
788
+ * @param {HashDigestLength} options.hashDigestLength hash digest length
612
789
  * @returns {void}
613
790
  */
614
791
  const applyModuleDefaults = (
615
792
  module,
616
793
  {
794
+ hashSalt,
795
+ hashDigest,
796
+ hashDigestLength,
617
797
  cache,
618
798
  syncWebAssembly,
619
799
  asyncWebAssembly,
@@ -621,7 +801,9 @@ const applyModuleDefaults = (
621
801
  futureDefaults,
622
802
  isNode,
623
803
  uniqueName,
624
- targetProperties
804
+ targetProperties,
805
+ mode,
806
+ deferImport
625
807
  }
626
808
  ) => {
627
809
  if (cache) {
@@ -630,11 +812,14 @@ const applyModuleDefaults = (
630
812
  "unsafeCache",
631
813
  /**
632
814
  * @param {Module} module module
633
- * @returns {boolean | null | string} true, if we want to cache the module
815
+ * @returns {boolean} true, if we want to cache the module
634
816
  */
635
- module => {
817
+ (module) => {
636
818
  const name = module.nameForCondition();
637
- return name && NODE_MODULES_REGEXP.test(name);
819
+ if (!name) {
820
+ return false;
821
+ }
822
+ return NODE_MODULES_REGEXP.test(name);
638
823
  }
639
824
  );
640
825
  } else {
@@ -643,19 +828,19 @@ const applyModuleDefaults = (
643
828
 
644
829
  F(module.parser, ASSET_MODULE_TYPE, () => ({}));
645
830
  F(
646
- /** @type {NonNullable<ParserOptionsByModuleTypeKnown["asset"]>} */
831
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[ASSET_MODULE_TYPE]>} */
647
832
  (module.parser[ASSET_MODULE_TYPE]),
648
833
  "dataUrlCondition",
649
834
  () => ({})
650
835
  );
651
836
  if (
652
837
  typeof (
653
- /** @type {NonNullable<ParserOptionsByModuleTypeKnown["asset"]>} */
838
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[ASSET_MODULE_TYPE]>} */
654
839
  (module.parser[ASSET_MODULE_TYPE]).dataUrlCondition
655
840
  ) === "object"
656
841
  ) {
657
842
  D(
658
- /** @type {NonNullable<ParserOptionsByModuleTypeKnown["asset"]>} */
843
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[ASSET_MODULE_TYPE]>} */
659
844
  (module.parser[ASSET_MODULE_TYPE]).dataUrlCondition,
660
845
  "maxSize",
661
846
  8096
@@ -663,53 +848,158 @@ const applyModuleDefaults = (
663
848
  }
664
849
 
665
850
  F(module.parser, "javascript", () => ({}));
851
+ F(module.parser, JSON_MODULE_TYPE, () => ({}));
852
+ D(
853
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[JSON_MODULE_TYPE]>} */
854
+ (module.parser[JSON_MODULE_TYPE]),
855
+ "exportsDepth",
856
+ mode === "development" ? 1 : Infinity
857
+ );
666
858
 
667
859
  applyJavascriptParserOptionsDefaults(
668
860
  /** @type {NonNullable<ParserOptionsByModuleTypeKnown["javascript"]>} */
669
861
  (module.parser.javascript),
670
862
  {
671
863
  futureDefaults,
864
+ deferImport,
672
865
  isNode
673
866
  }
674
867
  );
675
868
 
869
+ F(module.generator, "json", () => ({}));
870
+ applyJsonGeneratorOptionsDefaults(
871
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown["json"]>} */
872
+ (module.generator.json)
873
+ );
874
+
676
875
  if (css) {
677
876
  F(module.parser, CSS_MODULE_TYPE, () => ({}));
678
877
 
679
- D(module.parser[CSS_MODULE_TYPE], "import", true);
680
- D(module.parser[CSS_MODULE_TYPE], "url", true);
681
- D(module.parser[CSS_MODULE_TYPE], "namedExports", true);
878
+ D(
879
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
880
+ (module.parser[CSS_MODULE_TYPE]),
881
+ "import",
882
+ true
883
+ );
884
+ D(
885
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
886
+ (module.parser[CSS_MODULE_TYPE]),
887
+ "url",
888
+ true
889
+ );
890
+ D(
891
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
892
+ (module.parser[CSS_MODULE_TYPE]),
893
+ "namedExports",
894
+ true
895
+ );
896
+
897
+ for (const type of [
898
+ CSS_MODULE_TYPE_AUTO,
899
+ CSS_MODULE_TYPE_MODULE,
900
+ CSS_MODULE_TYPE_GLOBAL
901
+ ]) {
902
+ F(module.parser, type, () => ({}));
903
+
904
+ D(
905
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
906
+ (module.parser[type]),
907
+ "animation",
908
+ true
909
+ );
910
+ D(
911
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
912
+ (module.parser[type]),
913
+ "container",
914
+ true
915
+ );
916
+ D(
917
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
918
+ (module.parser[type]),
919
+ "customIdents",
920
+ true
921
+ );
922
+ D(
923
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
924
+ (module.parser[type]),
925
+ "dashedIdents",
926
+ true
927
+ );
928
+ D(
929
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
930
+ (module.parser[type]),
931
+ "function",
932
+ true
933
+ );
934
+ D(
935
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<ParserOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
936
+ (module.parser[type]),
937
+ "grid",
938
+ true
939
+ );
940
+ }
682
941
 
683
942
  F(module.generator, CSS_MODULE_TYPE, () => ({}));
684
943
 
685
944
  applyCssGeneratorOptionsDefaults(
686
- /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown["css"]>} */
945
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE]>} */
687
946
  (module.generator[CSS_MODULE_TYPE]),
688
947
  { targetProperties }
689
948
  );
690
949
 
691
950
  const localIdentName =
692
- uniqueName.length > 0 ? "[uniqueName]-[id]-[local]" : "[id]-[local]";
951
+ mode === "development"
952
+ ? uniqueName.length > 0
953
+ ? "[uniqueName]-[id]-[local]"
954
+ : "[id]-[local]"
955
+ : "[fullhash]";
956
+ const localIdentHashSalt = hashSalt;
957
+ const localIdentHashDigest = "base64url";
958
+ const localIdentHashDigestLength = 6;
959
+ const exportsConvention = "as-is";
960
+
961
+ for (const type of [
962
+ CSS_MODULE_TYPE_AUTO,
963
+ CSS_MODULE_TYPE_MODULE,
964
+ CSS_MODULE_TYPE_GLOBAL
965
+ ]) {
966
+ F(module.generator, type, () => ({}));
967
+
968
+ D(
969
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
970
+ (module.generator[type]),
971
+ "localIdentName",
972
+ localIdentName
973
+ );
693
974
 
694
- F(module.generator, CSS_MODULE_TYPE_AUTO, () => ({}));
695
- D(module.generator[CSS_MODULE_TYPE_AUTO], "localIdentName", localIdentName);
696
- D(module.generator[CSS_MODULE_TYPE_AUTO], "exportsConvention", "as-is");
975
+ D(
976
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
977
+ (module.generator[type]),
978
+ "localIdentHashSalt",
979
+ localIdentHashSalt
980
+ );
697
981
 
698
- F(module.generator, CSS_MODULE_TYPE_MODULE, () => ({}));
699
- D(
700
- module.generator[CSS_MODULE_TYPE_MODULE],
701
- "localIdentName",
702
- localIdentName
703
- );
704
- D(module.generator[CSS_MODULE_TYPE_MODULE], "exportsConvention", "as-is");
982
+ D(
983
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]>} */
984
+ (module.generator[type]),
985
+ "localIdentHashDigest",
986
+ localIdentHashDigest
987
+ );
705
988
 
706
- F(module.generator, CSS_MODULE_TYPE_GLOBAL, () => ({}));
707
- D(
708
- module.generator[CSS_MODULE_TYPE_GLOBAL],
709
- "localIdentName",
710
- localIdentName
711
- );
712
- D(module.generator[CSS_MODULE_TYPE_GLOBAL], "exportsConvention", "as-is");
989
+ D(
990
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]>} */
991
+ (module.generator[type]),
992
+ "localIdentHashDigestLength",
993
+ localIdentHashDigestLength
994
+ );
995
+
996
+ D(
997
+ /** @type {NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_AUTO]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_MODULE]> | NonNullable<GeneratorOptionsByModuleTypeKnown[CSS_MODULE_TYPE_GLOBAL]>} */
998
+ (module.generator[type]),
999
+ "exportsConvention",
1000
+ exportsConvention
1001
+ );
1002
+ }
713
1003
  }
714
1004
 
715
1005
  A(module, "defaultRules", () => {
@@ -834,6 +1124,35 @@ const applyModuleDefaults = (
834
1124
  type: CSS_MODULE_TYPE,
835
1125
  resolve
836
1126
  });
1127
+ // For CSS modules, i.e. `.class { composes: className from "./style.css" }`
1128
+ // We inherit for such constructions
1129
+ rules.push({
1130
+ dependency: /css-import-local-module/,
1131
+ type: CSS_MODULE_TYPE_MODULE,
1132
+ resolve
1133
+ });
1134
+ rules.push({
1135
+ dependency: /css-import-global-module/,
1136
+ type: CSS_MODULE_TYPE_GLOBAL,
1137
+ resolve
1138
+ });
1139
+
1140
+ rules.push(
1141
+ {
1142
+ with: { type: "css" },
1143
+ parser: {
1144
+ exportType: "css-style-sheet"
1145
+ },
1146
+ resolve
1147
+ },
1148
+ {
1149
+ assert: { type: "css" },
1150
+ parser: {
1151
+ exportType: "css-style-sheet"
1152
+ },
1153
+ resolve
1154
+ }
1155
+ );
837
1156
  }
838
1157
  rules.push(
839
1158
  {
@@ -848,13 +1167,23 @@ const applyModuleDefaults = (
848
1167
  }
849
1168
  ]
850
1169
  },
1170
+ {
1171
+ with: { type: JSON_MODULE_TYPE },
1172
+ type: JSON_MODULE_TYPE,
1173
+ parser: { namedExports: false }
1174
+ },
851
1175
  {
852
1176
  assert: { type: JSON_MODULE_TYPE },
853
- type: JSON_MODULE_TYPE
1177
+ type: JSON_MODULE_TYPE,
1178
+ parser: { namedExports: false }
854
1179
  },
855
1180
  {
856
- with: { type: JSON_MODULE_TYPE },
857
- type: JSON_MODULE_TYPE
1181
+ with: { type: "text" },
1182
+ type: ASSET_MODULE_TYPE_SOURCE
1183
+ },
1184
+ {
1185
+ with: { type: "bytes" },
1186
+ type: ASSET_MODULE_TYPE_BYTES
858
1187
  }
859
1188
  );
860
1189
  return rules;
@@ -891,7 +1220,7 @@ const applyOutputDefaults = (
891
1220
  * @param {Library=} library the library option
892
1221
  * @returns {string} a readable library name
893
1222
  */
894
- const getLibraryName = library => {
1223
+ const getLibraryName = (library) => {
895
1224
  const libraryName =
896
1225
  typeof library === "object" &&
897
1226
  library &&
@@ -922,7 +1251,7 @@ const applyOutputDefaults = (
922
1251
  if (libraryName) return libraryName;
923
1252
  const pkgPath = path.resolve(context, "package.json");
924
1253
  try {
925
- const packageInfo = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
1254
+ const packageInfo = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
926
1255
  return packageInfo.name || "";
927
1256
  } catch (err) {
928
1257
  if (/** @type {Error & { code: string }} */ (err).code !== "ENOENT") {
@@ -942,7 +1271,7 @@ const applyOutputDefaults = (
942
1271
  * @param {boolean | undefined} v value
943
1272
  * @returns {boolean} true, when v is truthy or undefined
944
1273
  */
945
- const optimistic = v => v || v === undefined;
1274
+ const optimistic = (v) => v || v === undefined;
946
1275
  /**
947
1276
  * @param {boolean | undefined} v value
948
1277
  * @param {boolean | undefined} c condition
@@ -966,6 +1295,12 @@ const applyOutputDefaults = (
966
1295
  "const",
967
1296
  () => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
968
1297
  );
1298
+ F(
1299
+ environment,
1300
+ "methodShorthand",
1301
+ () =>
1302
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.methodShorthand))
1303
+ );
969
1304
  F(
970
1305
  environment,
971
1306
  "arrowFunction",
@@ -1004,6 +1339,13 @@ const applyOutputDefaults = (
1004
1339
  /** @type {boolean | undefined} */ (tp.nodePrefixForCoreModules)
1005
1340
  )
1006
1341
  );
1342
+ F(
1343
+ environment,
1344
+ "importMetaDirnameAndFilename",
1345
+ () =>
1346
+ // No optimistic, because it is new
1347
+ tp && /** @type {boolean | undefined} */ (tp.importMetaDirnameAndFilename)
1348
+ );
1007
1349
  F(
1008
1350
  environment,
1009
1351
  "templateLiteral",
@@ -1072,10 +1414,10 @@ const applyOutputDefaults = (
1072
1414
  }
1073
1415
  return "[id].css";
1074
1416
  });
1075
- D(output, "assetModuleFilename", "[hash][ext][query]");
1417
+ D(output, "assetModuleFilename", "[hash][ext][query][fragment]");
1076
1418
  D(output, "webassemblyModuleFilename", "[hash].module.wasm");
1077
1419
  D(output, "compareBeforeEmit", true);
1078
- D(output, "charset", true);
1420
+ D(output, "charset", !futureDefaults);
1079
1421
  const uniqueNameId = Template.toIdentifier(
1080
1422
  /** @type {NonNullable<Output["uniqueName"]>} */ (output.uniqueName)
1081
1423
  );
@@ -1085,6 +1427,8 @@ const applyOutputDefaults = (
1085
1427
  if (tp) {
1086
1428
  if (tp.global) return "global";
1087
1429
  if (tp.globalThis) return "globalThis";
1430
+ // For universal target (i.e. code can be run in browser/node/worker etc.)
1431
+ if (tp.web === null && tp.node === null && tp.module) return "globalThis";
1088
1432
  }
1089
1433
  return "self";
1090
1434
  });
@@ -1110,8 +1454,13 @@ const applyOutputDefaults = (
1110
1454
  if (tp.importScripts) return "array-push";
1111
1455
  throw new Error(
1112
1456
  "For the selected environment is no default script chunk format available:\n" +
1113
- "JSONP Array push can be chosen when 'document' or 'importScripts' is available.\n" +
1114
- `CommonJs exports can be chosen when 'require' or node builtins are available.\n${
1457
+ `${
1458
+ tp.module
1459
+ ? "Module ('module') can be chosen when ES modules are available (please set 'experiments.outputModule' and 'output.module' to `true`)"
1460
+ : ""
1461
+ }\n` +
1462
+ "JSONP Array push ('array-push') can be chosen when 'document' or 'importScripts' is available.\n" +
1463
+ `CommonJs exports ('commonjs') can be chosen when 'require' or node builtins are available.\n${
1115
1464
  helpMessage
1116
1465
  }`
1117
1466
  );
@@ -1169,7 +1518,7 @@ const applyOutputDefaults = (
1169
1518
  tp.nodeBuiltins === null ||
1170
1519
  tp.importScriptsInWorker === null) &&
1171
1520
  output.module &&
1172
- environment.dynamicImport
1521
+ environment.dynamicImportInWorker
1173
1522
  ) {
1174
1523
  return "universal";
1175
1524
  }
@@ -1182,7 +1531,6 @@ const applyOutputDefaults = (
1182
1531
  if (tp.nodeBuiltins) return "async-node";
1183
1532
  if (
1184
1533
  (tp.nodeBuiltins === null || tp.fetchWasm === null) &&
1185
- asyncWebAssembly &&
1186
1534
  output.module &&
1187
1535
  environment.dynamicImport
1188
1536
  ) {
@@ -1204,7 +1552,11 @@ const applyOutputDefaults = (
1204
1552
  "hotUpdateChunkFilename",
1205
1553
  `[id].[fullhash].hot-update.${output.module ? "mjs" : "js"}`
1206
1554
  );
1207
- D(output, "hotUpdateMainFilename", "[runtime].[fullhash].hot-update.json");
1555
+ D(
1556
+ output,
1557
+ "hotUpdateMainFilename",
1558
+ `[runtime].[fullhash].hot-update.${output.module ? "json.mjs" : "json"}`
1559
+ );
1208
1560
  D(output, "crossOriginLoading", false);
1209
1561
  F(output, "scriptType", () => (output.module ? "module" : false));
1210
1562
  D(
@@ -1216,7 +1568,14 @@ const applyOutputDefaults = (
1216
1568
  );
1217
1569
  D(output, "workerPublicPath", "");
1218
1570
  D(output, "chunkLoadTimeout", 120000);
1219
- D(output, "hashFunction", futureDefaults ? "xxhash64" : "md4");
1571
+ F(output, "hashFunction", () => {
1572
+ if (futureDefaults) {
1573
+ DEFAULTS.HASH_FUNCTION = "xxhash64";
1574
+ return "xxhash64";
1575
+ }
1576
+
1577
+ return "md4";
1578
+ });
1220
1579
  D(output, "hashDigest", "hex");
1221
1580
  D(output, "hashDigestLength", futureDefaults ? 16 : 20);
1222
1581
  D(output, "strictModuleErrorHandling", false);
@@ -1235,12 +1594,12 @@ const applyOutputDefaults = (
1235
1594
  }
1236
1595
 
1237
1596
  /**
1238
- * @param {function(EntryDescription): void} fn iterator
1597
+ * @param {(entryDescription: EntryDescription) => void} fn iterator
1239
1598
  * @returns {void}
1240
1599
  */
1241
- const forEachEntry = fn => {
1600
+ const forEachEntry = (fn) => {
1242
1601
  for (const name of Object.keys(entry)) {
1243
- fn(/** @type {{[k: string] : EntryDescription}} */ (entry)[name]);
1602
+ fn(/** @type {{ [k: string]: EntryDescription }} */ (entry)[name]);
1244
1603
  }
1245
1604
  };
1246
1605
  A(output, "enabledLibraryTypes", () => {
@@ -1249,7 +1608,7 @@ const applyOutputDefaults = (
1249
1608
  if (output.library) {
1250
1609
  enabledLibraryTypes.push(output.library.type);
1251
1610
  }
1252
- forEachEntry(desc => {
1611
+ forEachEntry((desc) => {
1253
1612
  if (desc.library) {
1254
1613
  enabledLibraryTypes.push(desc.library.type);
1255
1614
  }
@@ -1265,12 +1624,12 @@ const applyOutputDefaults = (
1265
1624
  if (output.workerChunkLoading) {
1266
1625
  enabledChunkLoadingTypes.add(output.workerChunkLoading);
1267
1626
  }
1268
- forEachEntry(desc => {
1627
+ forEachEntry((desc) => {
1269
1628
  if (desc.chunkLoading) {
1270
1629
  enabledChunkLoadingTypes.add(desc.chunkLoading);
1271
1630
  }
1272
1631
  });
1273
- return Array.from(enabledChunkLoadingTypes);
1632
+ return [...enabledChunkLoadingTypes];
1274
1633
  });
1275
1634
 
1276
1635
  A(output, "enabledWasmLoadingTypes", () => {
@@ -1281,12 +1640,12 @@ const applyOutputDefaults = (
1281
1640
  if (output.workerWasmLoading) {
1282
1641
  enabledWasmLoadingTypes.add(output.workerWasmLoading);
1283
1642
  }
1284
- forEachEntry(desc => {
1643
+ forEachEntry((desc) => {
1285
1644
  if (desc.wasmLoading) {
1286
1645
  enabledWasmLoadingTypes.add(desc.wasmLoading);
1287
1646
  }
1288
1647
  });
1289
- return Array.from(enabledWasmLoadingTypes);
1648
+ return [...enabledWasmLoadingTypes];
1290
1649
  });
1291
1650
  };
1292
1651
 
@@ -1295,35 +1654,47 @@ const applyOutputDefaults = (
1295
1654
  * @param {object} options options
1296
1655
  * @param {TargetProperties | false} options.targetProperties target properties
1297
1656
  * @param {boolean} options.buildHttp buildHttp experiment enabled
1657
+ * @param {boolean} options.outputModule is output type is module
1298
1658
  * @returns {void}
1299
1659
  */
1300
1660
  const applyExternalsPresetsDefaults = (
1301
1661
  externalsPresets,
1302
- { targetProperties, buildHttp }
1662
+ { targetProperties, buildHttp, outputModule }
1303
1663
  ) => {
1664
+ /**
1665
+ * @param {keyof TargetProperties} key a key
1666
+ * @returns {boolean} true when target is universal, otherwise false
1667
+ */
1668
+ const isUniversal = (key) =>
1669
+ Boolean(outputModule && targetProperties && targetProperties[key] === null);
1670
+
1304
1671
  D(
1305
1672
  externalsPresets,
1306
1673
  "web",
1307
1674
  /** @type {boolean | undefined} */
1308
- (!buildHttp && targetProperties && targetProperties.web)
1675
+ (
1676
+ !buildHttp &&
1677
+ targetProperties &&
1678
+ (targetProperties.web || isUniversal("node"))
1679
+ )
1309
1680
  );
1310
1681
  D(
1311
1682
  externalsPresets,
1312
1683
  "node",
1313
1684
  /** @type {boolean | undefined} */
1314
- (targetProperties && targetProperties.node)
1685
+ (targetProperties && (targetProperties.node || isUniversal("node")))
1315
1686
  );
1316
1687
  D(
1317
1688
  externalsPresets,
1318
1689
  "nwjs",
1319
1690
  /** @type {boolean | undefined} */
1320
- (targetProperties && targetProperties.nwjs)
1691
+ (targetProperties && (targetProperties.nwjs || isUniversal("nwjs")))
1321
1692
  );
1322
1693
  D(
1323
1694
  externalsPresets,
1324
1695
  "electron",
1325
1696
  /** @type {boolean | undefined} */
1326
- (targetProperties && targetProperties.electron)
1697
+ ((targetProperties && targetProperties.electron) || isUniversal("electron"))
1327
1698
  );
1328
1699
  D(
1329
1700
  externalsPresets,
@@ -1332,7 +1703,7 @@ const applyExternalsPresetsDefaults = (
1332
1703
  (
1333
1704
  targetProperties &&
1334
1705
  targetProperties.electron &&
1335
- targetProperties.electronMain
1706
+ (targetProperties.electronMain || isUniversal("electronMain"))
1336
1707
  )
1337
1708
  );
1338
1709
  D(
@@ -1342,7 +1713,7 @@ const applyExternalsPresetsDefaults = (
1342
1713
  (
1343
1714
  targetProperties &&
1344
1715
  targetProperties.electron &&
1345
- targetProperties.electronPreload
1716
+ (targetProperties.electronPreload || isUniversal("electronPreload"))
1346
1717
  )
1347
1718
  );
1348
1719
  D(
@@ -1352,7 +1723,7 @@ const applyExternalsPresetsDefaults = (
1352
1723
  (
1353
1724
  targetProperties &&
1354
1725
  targetProperties.electron &&
1355
- targetProperties.electronRenderer
1726
+ (targetProperties.electronRenderer || isUniversal("electronRenderer"))
1356
1727
  )
1357
1728
  );
1358
1729
  };
@@ -1397,14 +1768,28 @@ const applyNodeDefaults = (
1397
1768
 
1398
1769
  F(node, "global", () => {
1399
1770
  if (targetProperties && targetProperties.global) return false;
1400
- // TODO webpack 6 should always default to false
1771
+ // We use `warm` because overriding `global` with `globalThis` (or a polyfill) is sometimes safe (global.URL), sometimes unsafe (global.process), but we need to warn about it
1401
1772
  return futureDefaults ? "warn" : true;
1402
1773
  });
1403
1774
 
1404
1775
  const handlerForNames = () => {
1405
- if (targetProperties && targetProperties.node)
1406
- return outputModule ? "node-module" : "eval-only";
1407
- // TODO webpack 6 should always default to false
1776
+ // TODO webpack@6 remove `node-module` in favor of `eval-only`
1777
+ if (targetProperties) {
1778
+ if (targetProperties.node) {
1779
+ return "eval-only";
1780
+ }
1781
+
1782
+ // For the "universal" target we only evaluate these values
1783
+ if (
1784
+ outputModule &&
1785
+ targetProperties.node === null &&
1786
+ targetProperties.web === null
1787
+ ) {
1788
+ return "eval-only";
1789
+ }
1790
+ }
1791
+
1792
+ // TODO webpack@6 should we use `warn-even-only`?
1408
1793
  return futureDefaults ? "warn-mock" : "mock";
1409
1794
  };
1410
1795
 
@@ -1468,16 +1853,17 @@ const applyOptimizationDefaults = (
1468
1853
  D(optimization, "minimize", production);
1469
1854
  A(optimization, "minimizer", () => [
1470
1855
  {
1471
- apply: compiler => {
1856
+ apply: (compiler) => {
1472
1857
  // Lazy load the Terser plugin
1473
1858
  const TerserPlugin = require("terser-webpack-plugin");
1859
+
1474
1860
  new TerserPlugin({
1475
1861
  terserOptions: {
1476
1862
  compress: {
1477
1863
  passes: 2
1478
1864
  }
1479
1865
  }
1480
- }).apply(compiler);
1866
+ }).apply(/** @type {EXPECTED_ANY} */ (compiler));
1481
1867
  }
1482
1868
  }
1483
1869
  ]);
@@ -1489,7 +1875,9 @@ const applyOptimizationDefaults = (
1489
1875
  const { splitChunks } = optimization;
1490
1876
  if (splitChunks) {
1491
1877
  A(splitChunks, "defaultSizeTypes", () =>
1492
- css ? ["javascript", "css", "unknown"] : ["javascript", "unknown"]
1878
+ css
1879
+ ? [JAVASCRIPT_TYPE, CSS_TYPE, UNKNOWN_TYPE]
1880
+ : [JAVASCRIPT_TYPE, UNKNOWN_TYPE]
1493
1881
  );
1494
1882
  D(splitChunks, "hidePathInfo", production);
1495
1883
  D(splitChunks, "chunks", "async");
@@ -1554,14 +1942,14 @@ const getResolveDefaults = ({
1554
1942
  const browserField =
1555
1943
  tp && tp.web && (!tp.node || (tp.electron && tp.electronRenderer));
1556
1944
 
1557
- /** @type {function(): ResolveOptions} */
1945
+ /** @type {() => ResolveOptions} */
1558
1946
  const cjsDeps = () => ({
1559
1947
  aliasFields: browserField ? ["browser"] : [],
1560
1948
  mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
1561
1949
  conditionNames: ["require", "module", "..."],
1562
1950
  extensions: [...jsExtensions]
1563
1951
  });
1564
- /** @type {function(): ResolveOptions} */
1952
+ /** @type {() => ResolveOptions} */
1565
1953
  const esmDeps = () => ({
1566
1954
  aliasFields: browserField ? ["browser"] : [],
1567
1955
  mainFields: browserField ? ["browser", "module", "..."] : ["module", "..."],
@@ -1610,7 +1998,8 @@ const getResolveDefaults = ({
1610
1998
  styleConditions.push(mode === "development" ? "development" : "production");
1611
1999
  styleConditions.push("style");
1612
2000
 
1613
- resolveOptions.byDependency["css-import"] = {
2001
+ /** @type {ResolveOptions} */
2002
+ const cssResolveOptions = {
1614
2003
  // We avoid using any main files because we have to be consistent with CSS `@import`
1615
2004
  // and CSS `@import` does not handle `main` files in directories,
1616
2005
  // you should always specify the full URL for styles
@@ -1620,6 +2009,17 @@ const getResolveDefaults = ({
1620
2009
  extensions: [".css"],
1621
2010
  preferRelative: true
1622
2011
  };
2012
+
2013
+ /** @type {NonNullable<ResolveOptions["byDependency"]>} */
2014
+ (resolveOptions.byDependency)["css-import"] = cssResolveOptions;
2015
+ // For CSS modules, i.e. `.class { composes: className from "./style.css" }`
2016
+ // We inherit for such constructions
2017
+ /** @type {NonNullable<ResolveOptions["byDependency"]>} */
2018
+ (resolveOptions.byDependency)["css-import-local-module"] =
2019
+ cssResolveOptions;
2020
+ /** @type {NonNullable<ResolveOptions["byDependency"]>} */
2021
+ (resolveOptions.byDependency)["css-import-global-module"] =
2022
+ cssResolveOptions;
1623
2023
  }
1624
2024
 
1625
2025
  return resolveOptions;
@@ -1648,17 +2048,18 @@ const getResolveLoaderDefaults = ({ cache }) => {
1648
2048
  * @param {InfrastructureLogging} infrastructureLogging options
1649
2049
  * @returns {void}
1650
2050
  */
1651
- const applyInfrastructureLoggingDefaults = infrastructureLogging => {
2051
+ const applyInfrastructureLoggingDefaults = (infrastructureLogging) => {
1652
2052
  F(infrastructureLogging, "stream", () => process.stderr);
1653
2053
  const tty =
1654
- /** @type {any} */ (infrastructureLogging.stream).isTTY &&
1655
- process.env.TERM !== "dumb";
2054
+ /** @type {NonNullable<InfrastructureLogging["stream"]>} */
2055
+ (infrastructureLogging.stream).isTTY && process.env.TERM !== "dumb";
1656
2056
  D(infrastructureLogging, "level", "info");
1657
2057
  D(infrastructureLogging, "debug", false);
1658
2058
  D(infrastructureLogging, "colors", tty);
1659
2059
  D(infrastructureLogging, "appendOnly", !tty);
1660
2060
  };
1661
2061
 
2062
+ module.exports.DEFAULTS = DEFAULTS;
1662
2063
  module.exports.applyWebpackOptionsBaseDefaults =
1663
2064
  applyWebpackOptionsBaseDefaults;
1664
2065
  module.exports.applyWebpackOptionsDefaults = applyWebpackOptionsDefaults;