webpack 5.76.1 → 5.88.2

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -7,6 +7,18 @@
7
7
 
8
8
  const fs = require("fs");
9
9
  const path = require("path");
10
+ const {
11
+ JAVASCRIPT_MODULE_TYPE_AUTO,
12
+ JSON_MODULE_TYPE,
13
+ WEBASSEMBLY_MODULE_TYPE_ASYNC,
14
+ JAVASCRIPT_MODULE_TYPE_ESM,
15
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
16
+ WEBASSEMBLY_MODULE_TYPE_SYNC,
17
+ ASSET_MODULE_TYPE,
18
+ CSS_MODULE_TYPE_AUTO,
19
+ CSS_MODULE_TYPE,
20
+ CSS_MODULE_TYPE_MODULE
21
+ } = require("../ModuleTypeConstants");
10
22
  const Template = require("../Template");
11
23
  const { cleverMerge } = require("../util/cleverMerge");
12
24
  const {
@@ -16,30 +28,39 @@ const {
16
28
  } = require("./target");
17
29
 
18
30
  /** @typedef {import("../../declarations/WebpackOptions").CacheOptionsNormalized} CacheOptions */
31
+ /** @typedef {import("../../declarations/WebpackOptions").Context} Context */
19
32
  /** @typedef {import("../../declarations/WebpackOptions").CssExperimentOptions} CssExperimentOptions */
20
33
  /** @typedef {import("../../declarations/WebpackOptions").EntryDescription} EntryDescription */
21
34
  /** @typedef {import("../../declarations/WebpackOptions").EntryNormalized} Entry */
35
+ /** @typedef {import("../../declarations/WebpackOptions").EntryStaticNormalized} EntryStaticNormalized */
36
+ /** @typedef {import("../../declarations/WebpackOptions").Environment} Environment */
22
37
  /** @typedef {import("../../declarations/WebpackOptions").Experiments} Experiments */
23
38
  /** @typedef {import("../../declarations/WebpackOptions").ExperimentsNormalized} ExperimentsNormalized */
24
39
  /** @typedef {import("../../declarations/WebpackOptions").ExternalsPresets} ExternalsPresets */
25
40
  /** @typedef {import("../../declarations/WebpackOptions").ExternalsType} ExternalsType */
41
+ /** @typedef {import("../../declarations/WebpackOptions").FileCacheOptions} FileCacheOptions */
26
42
  /** @typedef {import("../../declarations/WebpackOptions").InfrastructureLogging} InfrastructureLogging */
27
43
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
28
44
  /** @typedef {import("../../declarations/WebpackOptions").Library} Library */
29
45
  /** @typedef {import("../../declarations/WebpackOptions").LibraryName} LibraryName */
30
46
  /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
47
+ /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
31
48
  /** @typedef {import("../../declarations/WebpackOptions").Loader} Loader */
32
49
  /** @typedef {import("../../declarations/WebpackOptions").Mode} Mode */
33
50
  /** @typedef {import("../../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
34
51
  /** @typedef {import("../../declarations/WebpackOptions").Node} WebpackNode */
35
52
  /** @typedef {import("../../declarations/WebpackOptions").Optimization} Optimization */
53
+ /** @typedef {import("../../declarations/WebpackOptions").OptimizationSplitChunksOptions} OptimizationSplitChunksOptions */
36
54
  /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} Output */
55
+ /** @typedef {import("../../declarations/WebpackOptions").ParserOptionsByModuleTypeKnown} ParserOptionsByModuleTypeKnown */
37
56
  /** @typedef {import("../../declarations/WebpackOptions").Performance} Performance */
38
57
  /** @typedef {import("../../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
39
58
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRules} RuleSetRules */
40
59
  /** @typedef {import("../../declarations/WebpackOptions").SnapshotOptions} SnapshotOptions */
41
60
  /** @typedef {import("../../declarations/WebpackOptions").Target} Target */
42
61
  /** @typedef {import("../../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
62
+ /** @typedef {import("../Compiler")} Compiler */
63
+ /** @typedef {import("../Module")} Module */
43
64
  /** @typedef {import("./target").TargetProperties} TargetProperties */
44
65
 
45
66
  const NODE_MODULES_REGEXP = /[\\/]node_modules[\\/]/i;
@@ -91,7 +112,7 @@ const A = (obj, prop, factory) => {
91
112
  if (value === undefined) {
92
113
  obj[prop] = factory();
93
114
  } else if (Array.isArray(value)) {
94
- /** @type {any[]} */
115
+ /** @type {any[] | undefined} */
95
116
  let newArray = undefined;
96
117
  for (let i = 0; i < value.length; i++) {
97
118
  const item = value[i];
@@ -129,7 +150,7 @@ const applyWebpackOptionsBaseDefaults = options => {
129
150
  const applyWebpackOptionsDefaults = options => {
130
151
  F(options, "context", () => process.cwd());
131
152
  F(options, "target", () => {
132
- return getDefaultTarget(options.context);
153
+ return getDefaultTarget(/** @type {string} */ (options.context));
133
154
  });
134
155
 
135
156
  const { mode, name, target } = options;
@@ -138,8 +159,11 @@ const applyWebpackOptionsDefaults = options => {
138
159
  target === false
139
160
  ? /** @type {false} */ (false)
140
161
  : typeof target === "string"
141
- ? getTargetProperties(target, options.context)
142
- : getTargetsProperties(target, options.context);
162
+ ? getTargetProperties(target, /** @type {Context} */ (options.context))
163
+ : getTargetsProperties(
164
+ /** @type {string[]} */ (target),
165
+ /** @type {Context} */ (options.context)
166
+ );
143
167
 
144
168
  const development = mode === "development";
145
169
  const production = mode === "production" || !mode;
@@ -167,7 +191,9 @@ const applyWebpackOptionsDefaults = options => {
167
191
  targetProperties
168
192
  });
169
193
 
170
- const futureDefaults = options.experiments.futureDefaults;
194
+ const futureDefaults =
195
+ /** @type {NonNullable<ExperimentsNormalized["futureDefaults"]>} */
196
+ (options.experiments.futureDefaults);
171
197
 
172
198
  F(options, "cache", () =>
173
199
  development ? { type: /** @type {"memory"} */ ("memory") } : false
@@ -187,22 +213,30 @@ const applyWebpackOptionsDefaults = options => {
187
213
 
188
214
  applyModuleDefaults(options.module, {
189
215
  cache,
190
- syncWebAssembly: options.experiments.syncWebAssembly,
191
- asyncWebAssembly: options.experiments.asyncWebAssembly,
192
- css: options.experiments.css,
216
+ syncWebAssembly:
217
+ /** @type {NonNullable<ExperimentsNormalized["syncWebAssembly"]>} */
218
+ (options.experiments.syncWebAssembly),
219
+ asyncWebAssembly:
220
+ /** @type {NonNullable<ExperimentsNormalized["asyncWebAssembly"]>} */
221
+ (options.experiments.asyncWebAssembly),
222
+ css:
223
+ /** @type {NonNullable<ExperimentsNormalized["css"]>} */
224
+ (options.experiments.css),
193
225
  futureDefaults,
194
226
  isNode: targetProperties && targetProperties.node === true
195
227
  });
196
228
 
197
229
  applyOutputDefaults(options.output, {
198
- context: options.context,
230
+ context: /** @type {Context} */ (options.context),
199
231
  targetProperties,
200
232
  isAffectedByBrowserslist:
201
233
  target === undefined ||
202
234
  (typeof target === "string" && target.startsWith("browserslist")) ||
203
235
  (Array.isArray(target) &&
204
236
  target.some(target => target.startsWith("browserslist"))),
205
- outputModule: options.experiments.outputModule,
237
+ outputModule:
238
+ /** @type {NonNullable<ExperimentsNormalized["outputModule"]>} */
239
+ (options.experiments.outputModule),
206
240
  development,
207
241
  entry: options.entry,
208
242
  module: options.module,
@@ -214,7 +248,10 @@ const applyWebpackOptionsDefaults = options => {
214
248
  buildHttp: !!options.experiments.buildHttp
215
249
  });
216
250
 
217
- applyLoaderDefaults(options.loader, { targetProperties });
251
+ applyLoaderDefaults(
252
+ /** @type {NonNullable<WebpackOptions["loader"]>} */ (options.loader),
253
+ { targetProperties, environment: options.output.environment }
254
+ );
218
255
 
219
256
  F(options, "externalsType", () => {
220
257
  const validExternalTypes = require("../../schemas/WebpackOptions.json")
@@ -228,7 +265,9 @@ const applyWebpackOptionsDefaults = options => {
228
265
  });
229
266
 
230
267
  applyNodeDefaults(options.node, {
231
- futureDefaults: options.experiments.futureDefaults,
268
+ futureDefaults:
269
+ /** @type {NonNullable<WebpackOptions["experiments"]["futureDefaults"]>} */
270
+ (options.experiments.futureDefaults),
232
271
  targetProperties
233
272
  });
234
273
 
@@ -239,23 +278,32 @@ const applyWebpackOptionsDefaults = options => {
239
278
  ? {}
240
279
  : false
241
280
  );
242
- applyPerformanceDefaults(options.performance, {
243
- production
244
- });
281
+ applyPerformanceDefaults(
282
+ /** @type {NonNullable<WebpackOptions["performance"]>} */
283
+ (options.performance),
284
+ {
285
+ production
286
+ }
287
+ );
245
288
 
246
289
  applyOptimizationDefaults(options.optimization, {
247
290
  development,
248
291
  production,
249
- css: options.experiments.css,
292
+ css:
293
+ /** @type {NonNullable<ExperimentsNormalized["css"]>} */
294
+ (options.experiments.css),
250
295
  records: !!(options.recordsInputPath || options.recordsOutputPath)
251
296
  });
252
297
 
253
298
  options.resolve = cleverMerge(
254
299
  getResolveDefaults({
255
300
  cache,
256
- context: options.context,
301
+ context: /** @type {Context} */ (options.context),
257
302
  targetProperties,
258
- mode: options.mode
303
+ mode: /** @type {Mode} */ (options.mode),
304
+ css:
305
+ /** @type {NonNullable<ExperimentsNormalized["css"]>} */
306
+ (options.experiments.css)
259
307
  }),
260
308
  options.resolve
261
309
  );
@@ -280,7 +328,6 @@ const applyExperimentsDefaults = (
280
328
  ) => {
281
329
  D(experiments, "futureDefaults", false);
282
330
  D(experiments, "backCompat", !experiments.futureDefaults);
283
- D(experiments, "topLevelAwait", experiments.futureDefaults);
284
331
  D(experiments, "syncWebAssembly", false);
285
332
  D(experiments, "asyncWebAssembly", experiments.futureDefaults);
286
333
  D(experiments, "outputModule", false);
@@ -290,6 +337,13 @@ const applyExperimentsDefaults = (
290
337
  D(experiments, "cacheUnaffected", experiments.futureDefaults);
291
338
  F(experiments, "css", () => (experiments.futureDefaults ? {} : undefined));
292
339
 
340
+ // TODO webpack 6: remove this. topLevelAwait should be enabled by default
341
+ let shouldEnableTopLevelAwait = true;
342
+ if (typeof experiments.topLevelAwait === "boolean") {
343
+ shouldEnableTopLevelAwait = experiments.topLevelAwait;
344
+ }
345
+ D(experiments, "topLevelAwait", shouldEnableTopLevelAwait);
346
+
293
347
  if (typeof experiments.buildHttp === "object") {
294
348
  D(experiments.buildHttp, "frozen", production);
295
349
  D(experiments.buildHttp, "upgrade", false);
@@ -308,9 +362,9 @@ const applyExperimentsDefaults = (
308
362
  * @param {CacheOptions} cache options
309
363
  * @param {Object} options options
310
364
  * @param {string} options.name name
311
- * @param {string} options.mode mode
365
+ * @param {Mode} options.mode mode
312
366
  * @param {boolean} options.development is development mode
313
- * @param {boolean} options.cacheUnaffected the cacheUnaffected experiment is enabled
367
+ * @param {Experiments["cacheUnaffected"]} options.cacheUnaffected the cacheUnaffected experiment is enabled
314
368
  * @returns {void}
315
369
  */
316
370
  const applyCacheDefaults = (
@@ -324,6 +378,7 @@ const applyCacheDefaults = (
324
378
  D(cache, "version", "");
325
379
  F(cache, "cacheDirectory", () => {
326
380
  const cwd = process.cwd();
381
+ /** @type {string | undefined} */
327
382
  let dir = cwd;
328
383
  for (;;) {
329
384
  try {
@@ -348,7 +403,11 @@ const applyCacheDefaults = (
348
403
  }
349
404
  });
350
405
  F(cache, "cacheLocation", () =>
351
- path.resolve(cache.cacheDirectory, cache.name)
406
+ path.resolve(
407
+ /** @type {NonNullable<FileCacheOptions["cacheDirectory"]>} */
408
+ (cache.cacheDirectory),
409
+ /** @type {NonNullable<FileCacheOptions["name"]>} */ (cache.name)
410
+ )
352
411
  );
353
412
  D(cache, "hashAlgorithm", "md4");
354
413
  D(cache, "store", "pack");
@@ -361,9 +420,13 @@ const applyCacheDefaults = (
361
420
  D(cache, "maxAge", 1000 * 60 * 60 * 24 * 60); // 1 month
362
421
  D(cache, "allowCollectingMemory", development);
363
422
  D(cache, "memoryCacheUnaffected", development && cacheUnaffected);
364
- D(cache.buildDependencies, "defaultWebpack", [
365
- path.resolve(__dirname, "..") + path.sep
366
- ]);
423
+ D(cache, "readonly", false);
424
+ D(
425
+ /** @type {NonNullable<FileCacheOptions["buildDependencies"]>} */
426
+ (cache.buildDependencies),
427
+ "defaultWebpack",
428
+ [path.resolve(__dirname, "..") + path.sep]
429
+ );
367
430
  break;
368
431
  case "memory":
369
432
  D(cache, "maxGenerations", Infinity);
@@ -475,6 +538,7 @@ const applyJavascriptParserOptionsDefaults = (
475
538
  D(parserOptions, "dynamicImportMode", "lazy");
476
539
  D(parserOptions, "dynamicImportPrefetch", false);
477
540
  D(parserOptions, "dynamicImportPreload", false);
541
+ D(parserOptions, "dynamicImportFetchPriority", false);
478
542
  D(parserOptions, "createRequire", isNode);
479
543
  if (futureDefaults) D(parserOptions, "exportsPresence", "error");
480
544
  };
@@ -495,29 +559,57 @@ const applyModuleDefaults = (
495
559
  { cache, syncWebAssembly, asyncWebAssembly, css, futureDefaults, isNode }
496
560
  ) => {
497
561
  if (cache) {
498
- D(module, "unsafeCache", module => {
499
- const name = module.nameForCondition();
500
- return name && NODE_MODULES_REGEXP.test(name);
501
- });
562
+ D(
563
+ module,
564
+ "unsafeCache",
565
+ /**
566
+ * @param {Module} module module
567
+ * @returns {boolean | null | string} true, if we want to cache the module
568
+ */
569
+ module => {
570
+ const name = module.nameForCondition();
571
+ return name && NODE_MODULES_REGEXP.test(name);
572
+ }
573
+ );
502
574
  } else {
503
575
  D(module, "unsafeCache", false);
504
576
  }
505
577
 
506
- F(module.parser, "asset", () => ({}));
507
- F(module.parser.asset, "dataUrlCondition", () => ({}));
508
- if (typeof module.parser.asset.dataUrlCondition === "object") {
509
- D(module.parser.asset.dataUrlCondition, "maxSize", 8096);
578
+ F(module.parser, ASSET_MODULE_TYPE, () => ({}));
579
+ F(
580
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown["asset"]>} */
581
+ (module.parser.asset),
582
+ "dataUrlCondition",
583
+ () => ({})
584
+ );
585
+ if (
586
+ typeof (
587
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown["asset"]>} */
588
+ (module.parser.asset).dataUrlCondition
589
+ ) === "object"
590
+ ) {
591
+ D(
592
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown["asset"]>} */
593
+ (module.parser.asset).dataUrlCondition,
594
+ "maxSize",
595
+ 8096
596
+ );
510
597
  }
511
598
 
512
599
  F(module.parser, "javascript", () => ({}));
513
- applyJavascriptParserOptionsDefaults(module.parser.javascript, {
514
- futureDefaults,
515
- isNode
516
- });
600
+
601
+ applyJavascriptParserOptionsDefaults(
602
+ /** @type {NonNullable<ParserOptionsByModuleTypeKnown["javascript"]>} */
603
+ (module.parser.javascript),
604
+ {
605
+ futureDefaults,
606
+ isNode
607
+ }
608
+ );
517
609
 
518
610
  A(module, "defaultRules", () => {
519
611
  const esm = {
520
- type: "javascript/esm",
612
+ type: JAVASCRIPT_MODULE_TYPE_ESM,
521
613
  resolve: {
522
614
  byDependency: {
523
615
  esm: {
@@ -527,21 +619,21 @@ const applyModuleDefaults = (
527
619
  }
528
620
  };
529
621
  const commonjs = {
530
- type: "javascript/dynamic"
622
+ type: JAVASCRIPT_MODULE_TYPE_DYNAMIC
531
623
  };
532
624
  /** @type {RuleSetRules} */
533
625
  const rules = [
534
626
  {
535
627
  mimetype: "application/node",
536
- type: "javascript/auto"
628
+ type: JAVASCRIPT_MODULE_TYPE_AUTO
537
629
  },
538
630
  {
539
631
  test: /\.json$/i,
540
- type: "json"
632
+ type: JSON_MODULE_TYPE
541
633
  },
542
634
  {
543
635
  mimetype: "application/json",
544
- type: "json"
636
+ type: JSON_MODULE_TYPE
545
637
  },
546
638
  {
547
639
  test: /\.mjs$/i,
@@ -574,7 +666,7 @@ const applyModuleDefaults = (
574
666
  ];
575
667
  if (asyncWebAssembly) {
576
668
  const wasm = {
577
- type: "webassembly/async",
669
+ type: WEBASSEMBLY_MODULE_TYPE_ASYNC,
578
670
  rules: [
579
671
  {
580
672
  descriptionData: {
@@ -596,7 +688,7 @@ const applyModuleDefaults = (
596
688
  });
597
689
  } else if (syncWebAssembly) {
598
690
  const wasm = {
599
- type: "webassembly/sync",
691
+ type: WEBASSEMBLY_MODULE_TYPE_SYNC,
600
692
  rules: [
601
693
  {
602
694
  descriptionData: {
@@ -618,38 +710,24 @@ const applyModuleDefaults = (
618
710
  });
619
711
  }
620
712
  if (css) {
621
- const cssRule = {
622
- type: "css",
623
- resolve: {
624
- fullySpecified: true,
625
- preferRelative: true
626
- }
627
- };
628
- const cssModulesRule = {
629
- type: "css/module",
630
- resolve: {
631
- fullySpecified: true
632
- }
713
+ const resolve = {
714
+ fullySpecified: true,
715
+ preferRelative: true
633
716
  };
634
717
  rules.push({
635
718
  test: /\.css$/i,
636
- oneOf: [
637
- {
638
- test: /\.module\.css$/i,
639
- ...cssModulesRule
640
- },
641
- {
642
- ...cssRule
643
- }
644
- ]
719
+ type: CSS_MODULE_TYPE_AUTO,
720
+ resolve
645
721
  });
646
722
  rules.push({
647
723
  mimetype: "text/css+module",
648
- ...cssModulesRule
724
+ type: CSS_MODULE_TYPE_MODULE,
725
+ resolve
649
726
  });
650
727
  rules.push({
651
728
  mimetype: "text/css",
652
- ...cssRule
729
+ type: CSS_MODULE_TYPE,
730
+ resolve
653
731
  });
654
732
  }
655
733
  rules.push(
@@ -667,7 +745,7 @@ const applyModuleDefaults = (
667
745
  },
668
746
  {
669
747
  assert: { type: "json" },
670
- type: "json"
748
+ type: JSON_MODULE_TYPE
671
749
  }
672
750
  );
673
751
  return rules;
@@ -711,7 +789,7 @@ const applyOutputDefaults = (
711
789
  !Array.isArray(library) &&
712
790
  "type" in library
713
791
  ? library.name
714
- : /** @type {LibraryName=} */ (library);
792
+ : /** @type {LibraryName} */ (library);
715
793
  if (Array.isArray(libraryName)) {
716
794
  return libraryName.join(".");
717
795
  } else if (typeof libraryName === "object") {
@@ -738,8 +816,11 @@ const applyOutputDefaults = (
738
816
  const packageInfo = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
739
817
  return packageInfo.name || "";
740
818
  } catch (e) {
741
- if (e.code !== "ENOENT") {
742
- e.message += `\nwhile determining default 'output.uniqueName' from 'name' in ${pkgPath}`;
819
+ if (/** @type {Error & { code: string }} */ (e).code !== "ENOENT") {
820
+ /** @type {Error & { code: string }} */
821
+ (
822
+ e
823
+ ).message += `\nwhile determining default 'output.uniqueName' from 'name' in ${pkgPath}`;
743
824
  throw e;
744
825
  }
745
826
  return "";
@@ -752,7 +833,9 @@ const applyOutputDefaults = (
752
833
  D(output, "importFunctionName", "import");
753
834
  D(output, "importMetaName", "import.meta");
754
835
  F(output, "chunkFilename", () => {
755
- const filename = output.filename;
836
+ const filename =
837
+ /** @type {NonNullable<Output["chunkFilename"]>} */
838
+ (output.filename);
756
839
  if (typeof filename !== "function") {
757
840
  const hasName = filename.includes("[name]");
758
841
  const hasId = filename.includes("[id]");
@@ -766,14 +849,18 @@ const applyOutputDefaults = (
766
849
  return output.module ? "[id].mjs" : "[id].js";
767
850
  });
768
851
  F(output, "cssFilename", () => {
769
- const filename = output.filename;
852
+ const filename =
853
+ /** @type {NonNullable<Output["cssFilename"]>} */
854
+ (output.filename);
770
855
  if (typeof filename !== "function") {
771
856
  return filename.replace(/\.[mc]?js(\?|$)/, ".css$1");
772
857
  }
773
858
  return "[id].css";
774
859
  });
775
860
  F(output, "cssChunkFilename", () => {
776
- const chunkFilename = output.chunkFilename;
861
+ const chunkFilename =
862
+ /** @type {NonNullable<Output["cssChunkFilename"]>} */
863
+ (output.chunkFilename);
777
864
  if (typeof chunkFilename !== "function") {
778
865
  return chunkFilename.replace(/\.[mc]?js(\?|$)/, ".css$1");
779
866
  }
@@ -785,12 +872,18 @@ const applyOutputDefaults = (
785
872
  D(output, "charset", true);
786
873
  F(output, "hotUpdateGlobal", () =>
787
874
  Template.toIdentifier(
788
- "webpackHotUpdate" + Template.toIdentifier(output.uniqueName)
875
+ "webpackHotUpdate" +
876
+ Template.toIdentifier(
877
+ /** @type {NonNullable<Output["uniqueName"]>} */ (output.uniqueName)
878
+ )
789
879
  )
790
880
  );
791
881
  F(output, "chunkLoadingGlobal", () =>
792
882
  Template.toIdentifier(
793
- "webpackChunk" + Template.toIdentifier(output.uniqueName)
883
+ "webpackChunk" +
884
+ Template.toIdentifier(
885
+ /** @type {NonNullable<Output["uniqueName"]>} */ (output.uniqueName)
886
+ )
794
887
  )
795
888
  );
796
889
  F(output, "globalObject", () => {
@@ -916,32 +1009,87 @@ const applyOutputDefaults = (
916
1009
  ? "auto"
917
1010
  : ""
918
1011
  );
1012
+ D(output, "workerPublicPath", "");
919
1013
  D(output, "chunkLoadTimeout", 120000);
920
1014
  D(output, "hashFunction", futureDefaults ? "xxhash64" : "md4");
921
1015
  D(output, "hashDigest", "hex");
922
1016
  D(output, "hashDigestLength", futureDefaults ? 16 : 20);
923
1017
  D(output, "strictModuleExceptionHandling", false);
924
1018
 
1019
+ const environment = /** @type {Environment} */ (output.environment);
1020
+ /**
1021
+ * @param {boolean | undefined} v value
1022
+ * @returns {boolean} true, when v is truthy or undefined
1023
+ */
925
1024
  const optimistic = v => v || v === undefined;
1025
+ /**
1026
+ * @param {boolean | undefined} v value
1027
+ * @param {boolean | undefined} c condition
1028
+ * @returns {boolean | undefined} true, when v is truthy or undefined, or c is truthy
1029
+ */
926
1030
  const conditionallyOptimistic = (v, c) => (v === undefined && c) || v;
1031
+
1032
+ F(
1033
+ environment,
1034
+ "globalThis",
1035
+ () => /** @type {boolean | undefined} */ (tp && tp.globalThis)
1036
+ );
1037
+ F(
1038
+ environment,
1039
+ "bigIntLiteral",
1040
+ () => /** @type {boolean | undefined} */ (tp && tp.bigIntLiteral)
1041
+ );
1042
+ F(
1043
+ environment,
1044
+ "const",
1045
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.const))
1046
+ );
927
1047
  F(
928
- output.environment,
1048
+ environment,
929
1049
  "arrowFunction",
930
- () => tp && optimistic(tp.arrowFunction)
1050
+ () =>
1051
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.arrowFunction))
931
1052
  );
932
- F(output.environment, "const", () => tp && optimistic(tp.const));
933
1053
  F(
934
- output.environment,
1054
+ environment,
1055
+ "forOf",
1056
+ () => tp && optimistic(/** @type {boolean | undefined} */ (tp.forOf))
1057
+ );
1058
+ F(
1059
+ environment,
935
1060
  "destructuring",
936
- () => tp && optimistic(tp.destructuring)
1061
+ () =>
1062
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.destructuring))
937
1063
  );
938
- F(output.environment, "forOf", () => tp && optimistic(tp.forOf));
939
- F(output.environment, "bigIntLiteral", () => tp && tp.bigIntLiteral);
940
- F(output.environment, "dynamicImport", () =>
941
- conditionallyOptimistic(tp && tp.dynamicImport, output.module)
1064
+ F(
1065
+ environment,
1066
+ "optionalChaining",
1067
+ () =>
1068
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.optionalChaining))
1069
+ );
1070
+ F(
1071
+ environment,
1072
+ "templateLiteral",
1073
+ () =>
1074
+ tp && optimistic(/** @type {boolean | undefined} */ (tp.templateLiteral))
1075
+ );
1076
+ F(environment, "dynamicImport", () =>
1077
+ conditionallyOptimistic(
1078
+ /** @type {boolean | undefined} */ (tp && tp.dynamicImport),
1079
+ output.module
1080
+ )
1081
+ );
1082
+ F(environment, "dynamicImportInWorker", () =>
1083
+ conditionallyOptimistic(
1084
+ /** @type {boolean | undefined} */ (tp && tp.dynamicImportInWorker),
1085
+ output.module
1086
+ )
942
1087
  );
943
- F(output.environment, "module", () =>
944
- conditionallyOptimistic(tp && tp.module, output.module)
1088
+ F(environment, "module", () =>
1089
+ conditionallyOptimistic(
1090
+ /** @type {boolean | undefined} */ (tp && tp.module),
1091
+ output.module
1092
+ )
945
1093
  );
946
1094
 
947
1095
  const { trustedTypes } = output;
@@ -950,8 +1098,10 @@ const applyOutputDefaults = (
950
1098
  trustedTypes,
951
1099
  "policyName",
952
1100
  () =>
953
- output.uniqueName.replace(/[^a-zA-Z0-9\-#=_/@.%]+/g, "_") || "webpack"
1101
+ /** @type {NonNullable<Output["uniqueName"]>} */
1102
+ (output.uniqueName).replace(/[^a-zA-Z0-9\-#=_/@.%]+/g, "_") || "webpack"
954
1103
  );
1104
+ D(trustedTypes, "onPolicyCreationFailure", "stop");
955
1105
  }
956
1106
 
957
1107
  /**
@@ -960,10 +1110,11 @@ const applyOutputDefaults = (
960
1110
  */
961
1111
  const forEachEntry = fn => {
962
1112
  for (const name of Object.keys(entry)) {
963
- fn(entry[name]);
1113
+ fn(/** @type {{[k: string] : EntryDescription}} */ (entry)[name]);
964
1114
  }
965
1115
  };
966
1116
  A(output, "enabledLibraryTypes", () => {
1117
+ /** @type {LibraryType[]} */
967
1118
  const enabledLibraryTypes = [];
968
1119
  if (output.library) {
969
1120
  enabledLibraryTypes.push(output.library.type);
@@ -1023,35 +1174,56 @@ const applyExternalsPresetsDefaults = (
1023
1174
  D(
1024
1175
  externalsPresets,
1025
1176
  "web",
1026
- !buildHttp && targetProperties && targetProperties.web
1177
+ /** @type {boolean | undefined} */
1178
+ (!buildHttp && targetProperties && targetProperties.web)
1179
+ );
1180
+ D(
1181
+ externalsPresets,
1182
+ "node",
1183
+ /** @type {boolean | undefined} */
1184
+ (targetProperties && targetProperties.node)
1185
+ );
1186
+ D(
1187
+ externalsPresets,
1188
+ "nwjs",
1189
+ /** @type {boolean | undefined} */
1190
+ (targetProperties && targetProperties.nwjs)
1027
1191
  );
1028
- D(externalsPresets, "node", targetProperties && targetProperties.node);
1029
- D(externalsPresets, "nwjs", targetProperties && targetProperties.nwjs);
1030
1192
  D(
1031
1193
  externalsPresets,
1032
1194
  "electron",
1033
- targetProperties && targetProperties.electron
1195
+ /** @type {boolean | undefined} */
1196
+ (targetProperties && targetProperties.electron)
1034
1197
  );
1035
1198
  D(
1036
1199
  externalsPresets,
1037
1200
  "electronMain",
1038
- targetProperties &&
1039
- targetProperties.electron &&
1040
- targetProperties.electronMain
1201
+ /** @type {boolean | undefined} */
1202
+ (
1203
+ targetProperties &&
1204
+ targetProperties.electron &&
1205
+ targetProperties.electronMain
1206
+ )
1041
1207
  );
1042
1208
  D(
1043
1209
  externalsPresets,
1044
1210
  "electronPreload",
1045
- targetProperties &&
1046
- targetProperties.electron &&
1047
- targetProperties.electronPreload
1211
+ /** @type {boolean | undefined} */
1212
+ (
1213
+ targetProperties &&
1214
+ targetProperties.electron &&
1215
+ targetProperties.electronPreload
1216
+ )
1048
1217
  );
1049
1218
  D(
1050
1219
  externalsPresets,
1051
1220
  "electronRenderer",
1052
- targetProperties &&
1053
- targetProperties.electron &&
1054
- targetProperties.electronRenderer
1221
+ /** @type {boolean | undefined} */
1222
+ (
1223
+ targetProperties &&
1224
+ targetProperties.electron &&
1225
+ targetProperties.electronRenderer
1226
+ )
1055
1227
  );
1056
1228
  };
1057
1229
 
@@ -1059,9 +1231,10 @@ const applyExternalsPresetsDefaults = (
1059
1231
  * @param {Loader} loader options
1060
1232
  * @param {Object} options options
1061
1233
  * @param {TargetProperties | false} options.targetProperties target properties
1234
+ * @param {Environment} options.environment environment
1062
1235
  * @returns {void}
1063
1236
  */
1064
- const applyLoaderDefaults = (loader, { targetProperties }) => {
1237
+ const applyLoaderDefaults = (loader, { targetProperties, environment }) => {
1065
1238
  F(loader, "target", () => {
1066
1239
  if (targetProperties) {
1067
1240
  if (targetProperties.electron) {
@@ -1075,6 +1248,7 @@ const applyLoaderDefaults = (loader, { targetProperties }) => {
1075
1248
  if (targetProperties.web) return "web";
1076
1249
  }
1077
1250
  });
1251
+ D(loader, "environment", environment);
1078
1252
  };
1079
1253
 
1080
1254
  /**
@@ -1192,7 +1366,9 @@ const applyOptimizationDefaults = (
1192
1366
  F(splitChunks, "maxAsyncRequests", () => (production ? 30 : Infinity));
1193
1367
  F(splitChunks, "maxInitialRequests", () => (production ? 30 : Infinity));
1194
1368
  D(splitChunks, "automaticNameDelimiter", "-");
1195
- const { cacheGroups } = splitChunks;
1369
+ const cacheGroups =
1370
+ /** @type {NonNullable<OptimizationSplitChunksOptions["cacheGroups"]>} */
1371
+ (splitChunks.cacheGroups);
1196
1372
  F(cacheGroups, "default", () => ({
1197
1373
  idHint: "",
1198
1374
  reuseExistingChunk: true,
@@ -1214,9 +1390,16 @@ const applyOptimizationDefaults = (
1214
1390
  * @param {string} options.context build context
1215
1391
  * @param {TargetProperties | false} options.targetProperties target properties
1216
1392
  * @param {Mode} options.mode mode
1393
+ * @param {CssExperimentOptions|false} options.css is css enabled
1217
1394
  * @returns {ResolveOptions} resolve options
1218
1395
  */
1219
- const getResolveDefaults = ({ cache, context, targetProperties, mode }) => {
1396
+ const getResolveDefaults = ({
1397
+ cache,
1398
+ context,
1399
+ targetProperties,
1400
+ mode,
1401
+ css
1402
+ }) => {
1220
1403
  /** @type {string[]} */
1221
1404
  const conditions = ["webpack"];
1222
1405
 
@@ -1284,6 +1467,24 @@ const getResolveDefaults = ({ cache, context, targetProperties, mode }) => {
1284
1467
  }
1285
1468
  };
1286
1469
 
1470
+ if (css) {
1471
+ const styleConditions = [];
1472
+
1473
+ styleConditions.push("webpack");
1474
+ styleConditions.push(mode === "development" ? "development" : "production");
1475
+ styleConditions.push("style");
1476
+
1477
+ resolveOptions.byDependency["css-import"] = {
1478
+ // We avoid using any main files because we have to be consistent with CSS `@import`
1479
+ // and CSS `@import` does not handle `main` files in directories,
1480
+ // you should always specify the full URL for styles
1481
+ mainFiles: [],
1482
+ mainFields: ["style", "..."],
1483
+ conditionNames: styleConditions,
1484
+ extensions: [".css"]
1485
+ };
1486
+ }
1487
+
1287
1488
  return resolveOptions;
1288
1489
  };
1289
1490