webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -18,6 +18,7 @@ const ChunkGraph = require("./ChunkGraph");
18
18
  const Module = require("./Module");
19
19
  const ModuleFactory = require("./ModuleFactory");
20
20
  const ModuleGraph = require("./ModuleGraph");
21
+ const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
21
22
  const NormalModule = require("./NormalModule");
22
23
  const BasicEffectRulePlugin = require("./rules/BasicEffectRulePlugin");
23
24
  const BasicMatcherRulePlugin = require("./rules/BasicMatcherRulePlugin");
@@ -28,19 +29,34 @@ const LazySet = require("./util/LazySet");
28
29
  const { getScheme } = require("./util/URLAbsoluteSpecifier");
29
30
  const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge");
30
31
  const { join } = require("./util/fs");
31
- const { parseResource } = require("./util/identifier");
32
+ const {
33
+ parseResource,
34
+ parseResourceWithoutFragment
35
+ } = require("./util/identifier");
32
36
 
33
37
  /** @typedef {import("../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
38
+ /** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
34
39
  /** @typedef {import("./Generator")} Generator */
35
40
  /** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
41
+ /** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
36
42
  /** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
43
+ /** @typedef {import("./NormalModule").GeneratorOptions} GeneratorOptions */
44
+ /** @typedef {import("./NormalModule").LoaderItem} LoaderItem */
45
+ /** @typedef {import("./NormalModule").NormalModuleCreateData} NormalModuleCreateData */
46
+ /** @typedef {import("./NormalModule").ParserOptions} ParserOptions */
37
47
  /** @typedef {import("./Parser")} Parser */
38
48
  /** @typedef {import("./ResolverFactory")} ResolverFactory */
49
+ /** @typedef {import("./ResolverFactory").ResolveContext} ResolveContext */
50
+ /** @typedef {import("./ResolverFactory").ResolveRequest} ResolveRequest */
51
+ /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
39
52
  /** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
40
53
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
41
54
 
55
+ /** @typedef {Pick<RuleSetRule, 'type'|'sideEffects'|'parser'|'generator'|'resolve'|'layer'>} ModuleSettings */
56
+ /** @typedef {Partial<NormalModuleCreateData & {settings: ModuleSettings}>} CreateData */
57
+
42
58
  /**
43
- * @typedef {Object} ResolveData
59
+ * @typedef {object} ResolveData
44
60
  * @property {ModuleFactoryCreateData["contextInfo"]} contextInfo
45
61
  * @property {ModuleFactoryCreateData["resolveOptions"]} resolveOptions
46
62
  * @property {string} context
@@ -48,7 +64,7 @@ const { parseResource } = require("./util/identifier");
48
64
  * @property {Record<string, any> | undefined} assertions
49
65
  * @property {ModuleDependency[]} dependencies
50
66
  * @property {string} dependencyType
51
- * @property {Object} createData
67
+ * @property {CreateData} createData
52
68
  * @property {LazySet<string>} fileDependencies
53
69
  * @property {LazySet<string>} missingDependencies
54
70
  * @property {LazySet<string>} contextDependencies
@@ -56,80 +72,97 @@ const { parseResource } = require("./util/identifier");
56
72
  */
57
73
 
58
74
  /**
59
- * @typedef {Object} ResourceData
75
+ * @typedef {object} ResourceData
60
76
  * @property {string} resource
61
- * @property {string} path
62
- * @property {string} query
63
- * @property {string} fragment
77
+ * @property {string=} path
78
+ * @property {string=} query
79
+ * @property {string=} fragment
64
80
  * @property {string=} context
65
81
  */
66
82
 
67
83
  /** @typedef {ResourceData & { data: Record<string, any> }} ResourceDataWithData */
68
84
 
85
+ /**
86
+ * @typedef {object} ParsedLoaderRequest
87
+ * @property {string} loader loader
88
+ * @property {string|undefined} options options
89
+ */
90
+
91
+ /**
92
+ * @template T
93
+ * @callback Callback
94
+ * @param {(Error | null)=} err
95
+ * @param {T=} stats
96
+ * @returns {void}
97
+ */
98
+
69
99
  const EMPTY_RESOLVE_OPTIONS = {};
100
+ /** @type {ParserOptions} */
70
101
  const EMPTY_PARSER_OPTIONS = {};
102
+ /** @type {GeneratorOptions} */
71
103
  const EMPTY_GENERATOR_OPTIONS = {};
104
+ /** @type {ParsedLoaderRequest[]} */
72
105
  const EMPTY_ELEMENTS = [];
73
106
 
74
107
  const MATCH_RESOURCE_REGEX = /^([^!]+)!=!/;
108
+ const LEADING_DOT_EXTENSION_REGEX = /^[^.]/;
75
109
 
110
+ /**
111
+ * @param {LoaderItem} data data
112
+ * @returns {string} ident
113
+ */
76
114
  const loaderToIdent = data => {
77
115
  if (!data.options) {
78
116
  return data.loader;
79
117
  }
80
118
  if (typeof data.options === "string") {
81
- return data.loader + "?" + data.options;
119
+ return `${data.loader}?${data.options}`;
82
120
  }
83
121
  if (typeof data.options !== "object") {
84
122
  throw new Error("loader options must be string or object");
85
123
  }
86
124
  if (data.ident) {
87
- return data.loader + "??" + data.ident;
125
+ return `${data.loader}??${data.ident}`;
88
126
  }
89
- return data.loader + "?" + JSON.stringify(data.options);
127
+ return `${data.loader}?${JSON.stringify(data.options)}`;
90
128
  };
91
129
 
130
+ /**
131
+ * @param {LoaderItem[]} loaders loaders
132
+ * @param {string} resource resource
133
+ * @returns {string} stringified loaders and resource
134
+ */
92
135
  const stringifyLoadersAndResource = (loaders, resource) => {
93
136
  let str = "";
94
137
  for (const loader of loaders) {
95
- str += loaderToIdent(loader) + "!";
138
+ str += `${loaderToIdent(loader)}!`;
96
139
  }
97
140
  return str + resource;
98
141
  };
99
142
 
100
143
  /**
101
- * @param {string} resultString resultString
102
- * @returns {{loader: string, options: string|undefined}} parsed loader request
144
+ * @param {number} times times
145
+ * @param {(err?: null | Error) => void} callback callback
146
+ * @returns {(err?: null | Error) => void} callback
103
147
  */
104
- const identToLoaderRequest = resultString => {
105
- const idx = resultString.indexOf("?");
106
- if (idx >= 0) {
107
- const loader = resultString.substr(0, idx);
108
- const options = resultString.substr(idx + 1);
109
- return {
110
- loader,
111
- options
112
- };
113
- } else {
114
- return {
115
- loader: resultString,
116
- options: undefined
117
- };
148
+ const needCalls = (times, callback) => err => {
149
+ if (--times === 0) {
150
+ return callback(err);
151
+ }
152
+ if (err && times > 0) {
153
+ times = Number.NaN;
154
+ return callback(err);
118
155
  }
119
156
  };
120
157
 
121
- const needCalls = (times, callback) => {
122
- return err => {
123
- if (--times === 0) {
124
- return callback(err);
125
- }
126
- if (err && times > 0) {
127
- times = NaN;
128
- return callback(err);
129
- }
130
- };
131
- };
132
-
158
+ /**
159
+ * @template T
160
+ * @template O
161
+ * @param {T} globalOptions global options
162
+ * @param {string} type type
163
+ * @param {O} localOptions local options
164
+ * @returns {T & O | T | O} result
165
+ */
133
166
  const mergeGlobalOptions = (globalOptions, type, localOptions) => {
134
167
  const parts = type.split("/");
135
168
  let result;
@@ -138,26 +171,31 @@ const mergeGlobalOptions = (globalOptions, type, localOptions) => {
138
171
  current = current ? `${current}/${part}` : part;
139
172
  const options = globalOptions[current];
140
173
  if (typeof options === "object") {
141
- if (result === undefined) {
142
- result = options;
143
- } else {
144
- result = cachedCleverMerge(result, options);
145
- }
174
+ result =
175
+ result === undefined ? options : cachedCleverMerge(result, options);
146
176
  }
147
177
  }
148
178
  if (result === undefined) {
149
179
  return localOptions;
150
- } else {
151
- return cachedCleverMerge(result, localOptions);
152
180
  }
181
+ return cachedCleverMerge(result, localOptions);
153
182
  };
154
183
 
155
184
  // TODO webpack 6 remove
185
+ /**
186
+ * @param {string} name name
187
+ * @param {TODO} hook hook
188
+ * @returns {string} result
189
+ */
156
190
  const deprecationChangedHookMessage = (name, hook) => {
157
191
  const names = hook.taps
158
- .map(tapped => {
159
- return tapped.name;
160
- })
192
+ .map(
193
+ /**
194
+ * @param {TODO} tapped tapped
195
+ * @returns {string} name
196
+ */
197
+ tapped => tapped.name
198
+ )
161
199
  .join(", ");
162
200
 
163
201
  return (
@@ -181,7 +219,16 @@ const ruleSetCompiler = new RuleSetCompiler([
181
219
  new BasicMatcherRulePlugin("issuer"),
182
220
  new BasicMatcherRulePlugin("compiler"),
183
221
  new BasicMatcherRulePlugin("issuerLayer"),
184
- new ObjectMatcherRulePlugin("assert", "assertions"),
222
+ new ObjectMatcherRulePlugin(
223
+ "assert",
224
+ "assertions",
225
+ value => value && /** @type {any} */ (value)._isLegacyAssert !== undefined
226
+ ),
227
+ new ObjectMatcherRulePlugin(
228
+ "with",
229
+ "assertions",
230
+ value => value && !(/** @type {any} */ (value)._isLegacyAssert)
231
+ ),
185
232
  new ObjectMatcherRulePlugin("descriptionData"),
186
233
  new BasicEffectRulePlugin("type"),
187
234
  new BasicEffectRulePlugin("sideEffects"),
@@ -194,12 +241,12 @@ const ruleSetCompiler = new RuleSetCompiler([
194
241
 
195
242
  class NormalModuleFactory extends ModuleFactory {
196
243
  /**
197
- * @param {Object} param params
244
+ * @param {object} param params
198
245
  * @param {string=} param.context context
199
246
  * @param {InputFileSystem} param.fs file system
200
247
  * @param {ResolverFactory} param.resolverFactory resolverFactory
201
248
  * @param {ModuleOptions} param.options options
202
- * @param {Object=} param.associatedObjectForCache an object to which the cache will be attached
249
+ * @param {object=} param.associatedObjectForCache an object to which the cache will be attached
203
250
  * @param {boolean=} param.layers enable layers
204
251
  */
205
252
  constructor({
@@ -212,7 +259,7 @@ class NormalModuleFactory extends ModuleFactory {
212
259
  }) {
213
260
  super();
214
261
  this.hooks = Object.freeze({
215
- /** @type {AsyncSeriesBailHook<[ResolveData], TODO>} */
262
+ /** @type {AsyncSeriesBailHook<[ResolveData], Module | false | void>} */
216
263
  resolve: new AsyncSeriesBailHook(["resolveData"]),
217
264
  /** @type {HookMap<AsyncSeriesBailHook<[ResourceDataWithData, ResolveData], true | void>>} */
218
265
  resolveForScheme: new HookMap(
@@ -222,23 +269,31 @@ class NormalModuleFactory extends ModuleFactory {
222
269
  resolveInScheme: new HookMap(
223
270
  () => new AsyncSeriesBailHook(["resourceData", "resolveData"])
224
271
  ),
225
- /** @type {AsyncSeriesBailHook<[ResolveData], TODO>} */
272
+ /** @type {AsyncSeriesBailHook<[ResolveData], Module | undefined>} */
226
273
  factorize: new AsyncSeriesBailHook(["resolveData"]),
227
- /** @type {AsyncSeriesBailHook<[ResolveData], TODO>} */
274
+ /** @type {AsyncSeriesBailHook<[ResolveData], false | void>} */
228
275
  beforeResolve: new AsyncSeriesBailHook(["resolveData"]),
229
- /** @type {AsyncSeriesBailHook<[ResolveData], TODO>} */
276
+ /** @type {AsyncSeriesBailHook<[ResolveData], false | void>} */
230
277
  afterResolve: new AsyncSeriesBailHook(["resolveData"]),
231
- /** @type {AsyncSeriesBailHook<[ResolveData["createData"], ResolveData], TODO>} */
278
+ /** @type {AsyncSeriesBailHook<[ResolveData["createData"], ResolveData], Module | void>} */
232
279
  createModule: new AsyncSeriesBailHook(["createData", "resolveData"]),
233
- /** @type {SyncWaterfallHook<[Module, ResolveData["createData"], ResolveData], TODO>} */
280
+ /** @type {SyncWaterfallHook<[Module, ResolveData["createData"], ResolveData], Module>} */
234
281
  module: new SyncWaterfallHook(["module", "createData", "resolveData"]),
282
+ /** @type {HookMap<SyncBailHook<[ParserOptions], Parser>>} */
235
283
  createParser: new HookMap(() => new SyncBailHook(["parserOptions"])),
284
+ /** @type {HookMap<SyncBailHook<[TODO, ParserOptions], void>>} */
236
285
  parser: new HookMap(() => new SyncHook(["parser", "parserOptions"])),
286
+ /** @type {HookMap<SyncBailHook<[GeneratorOptions], Generator>>} */
237
287
  createGenerator: new HookMap(
238
288
  () => new SyncBailHook(["generatorOptions"])
239
289
  ),
290
+ /** @type {HookMap<SyncBailHook<[TODO, GeneratorOptions], void>>} */
240
291
  generator: new HookMap(
241
292
  () => new SyncHook(["generator", "generatorOptions"])
293
+ ),
294
+ /** @type {HookMap<SyncBailHook<[TODO, ResolveData], Module>>} */
295
+ createModuleClass: new HookMap(
296
+ () => new SyncBailHook(["createData", "resolveData"])
242
297
  )
243
298
  });
244
299
  this.resolverFactory = resolverFactory;
@@ -254,9 +309,9 @@ class NormalModuleFactory extends ModuleFactory {
254
309
  this.fs = fs;
255
310
  this._globalParserOptions = options.parser;
256
311
  this._globalGeneratorOptions = options.generator;
257
- /** @type {Map<string, WeakMap<Object, TODO>>} */
312
+ /** @type {Map<string, WeakMap<object, Parser>>} */
258
313
  this.parserCache = new Map();
259
- /** @type {Map<string, WeakMap<Object, Generator>>} */
314
+ /** @type {Map<string, WeakMap<object, Generator>>} */
260
315
  this.generatorCache = new Map();
261
316
  /** @type {Set<Module>} */
262
317
  this._restoredUnsafeCacheEntries = new Set();
@@ -264,6 +319,9 @@ class NormalModuleFactory extends ModuleFactory {
264
319
  const cacheParseResource = parseResource.bindCache(
265
320
  associatedObjectForCache
266
321
  );
322
+ const cachedParseResourceWithoutFragment =
323
+ parseResourceWithoutFragment.bindCache(associatedObjectForCache);
324
+ this._parseResourceWithoutFragment = cachedParseResourceWithoutFragment;
267
325
 
268
326
  this.hooks.factorize.tapAsync(
269
327
  {
@@ -282,8 +340,10 @@ class NormalModuleFactory extends ModuleFactory {
282
340
 
283
341
  if (typeof result === "object")
284
342
  throw new Error(
285
- deprecationChangedHookMessage("resolve", this.hooks.resolve) +
286
- " Returning a Module object will result in this module used as result."
343
+ `${deprecationChangedHookMessage(
344
+ "resolve",
345
+ this.hooks.resolve
346
+ )} Returning a Module object will result in this module used as result.`
287
347
  );
288
348
 
289
349
  this.hooks.afterResolve.callAsync(resolveData, (err, result) => {
@@ -311,7 +371,20 @@ class NormalModuleFactory extends ModuleFactory {
311
371
  return callback(new Error("Empty dependency (no request)"));
312
372
  }
313
373
 
314
- createdModule = new NormalModule(createData);
374
+ // TODO webpack 6 make it required and move javascript/wasm/asset properties to own module
375
+ createdModule = this.hooks.createModuleClass
376
+ .for(
377
+ /** @type {ModuleSettings} */ (createData.settings).type
378
+ )
379
+ .call(createData, resolveData);
380
+
381
+ if (!createdModule) {
382
+ createdModule = /** @type {Module} */ (
383
+ new NormalModule(
384
+ /** @type {NormalModuleCreateData} */ (createData)
385
+ )
386
+ );
387
+ }
315
388
  }
316
389
 
317
390
  createdModule = this.hooks.module.call(
@@ -348,10 +421,10 @@ class NormalModuleFactory extends ModuleFactory {
348
421
  const loaderResolver = this.getResolver("loader");
349
422
 
350
423
  /** @type {ResourceData | undefined} */
351
- let matchResourceData = undefined;
424
+ let matchResourceData;
352
425
  /** @type {string} */
353
426
  let unresolvedResource;
354
- /** @type {{loader: string, options: string|undefined}[]} */
427
+ /** @type {ParsedLoaderRequest[]} */
355
428
  let elements;
356
429
  let noPreAutoLoaders = false;
357
430
  let noAutoLoaders = false;
@@ -382,7 +455,7 @@ class NormalModuleFactory extends ModuleFactory {
382
455
  resource: matchResource,
383
456
  ...cacheParseResource(matchResource)
384
457
  };
385
- requestWithoutMatchResource = request.substr(
458
+ requestWithoutMatchResource = request.slice(
386
459
  matchResourceMatch[0].length
387
460
  );
388
461
  }
@@ -400,12 +473,18 @@ class NormalModuleFactory extends ModuleFactory {
400
473
  noPreAutoLoaders || noPrePostAutoLoaders
401
474
  ? 2
402
475
  : noAutoLoaders
403
- ? 1
404
- : 0
476
+ ? 1
477
+ : 0
405
478
  )
406
479
  .split(/!+/);
407
- unresolvedResource = rawElements.pop();
408
- elements = rawElements.map(identToLoaderRequest);
480
+ unresolvedResource = /** @type {string} */ (rawElements.pop());
481
+ elements = rawElements.map(el => {
482
+ const { path, query } = cachedParseResourceWithoutFragment(el);
483
+ return {
484
+ loader: path,
485
+ options: query ? query.slice(1) : undefined
486
+ };
487
+ });
409
488
  scheme = getScheme(unresolvedResource);
410
489
  } else {
411
490
  unresolvedResource = requestWithoutMatchResource;
@@ -416,6 +495,7 @@ class NormalModuleFactory extends ModuleFactory {
416
495
  elements = EMPTY_ELEMENTS;
417
496
  }
418
497
 
498
+ /** @type {ResolveContext} */
419
499
  const resolveContext = {
420
500
  fileDependencies,
421
501
  missingDependencies,
@@ -425,6 +505,7 @@ class NormalModuleFactory extends ModuleFactory {
425
505
  /** @type {ResourceDataWithData} */
426
506
  let resourceData;
427
507
 
508
+ /** @type {undefined | LoaderItem[]} */
428
509
  let loaders;
429
510
 
430
511
  const continueCallback = needCalls(2, err => {
@@ -432,9 +513,9 @@ class NormalModuleFactory extends ModuleFactory {
432
513
 
433
514
  // translate option idents
434
515
  try {
435
- for (const item of loaders) {
516
+ for (const item of /** @type {LoaderItem[]} */ (loaders)) {
436
517
  if (typeof item.options === "string" && item.options[0] === "?") {
437
- const ident = item.options.substr(1);
518
+ const ident = item.options.slice(1);
438
519
  if (ident === "[[missing ident]]") {
439
520
  throw new Error(
440
521
  "No ident is provided by referenced loader. " +
@@ -451,8 +532,8 @@ class NormalModuleFactory extends ModuleFactory {
451
532
  item.ident = ident;
452
533
  }
453
534
  }
454
- } catch (e) {
455
- return callback(e);
535
+ } catch (identErr) {
536
+ return callback(/** @type {Error} */ (identErr));
456
537
  }
457
538
 
458
539
  if (!resourceData) {
@@ -464,8 +545,12 @@ class NormalModuleFactory extends ModuleFactory {
464
545
  (matchResourceData !== undefined
465
546
  ? `${matchResourceData.resource}!=!`
466
547
  : "") +
467
- stringifyLoadersAndResource(loaders, resourceData.resource);
548
+ stringifyLoadersAndResource(
549
+ /** @type {LoaderItem[]} */ (loaders),
550
+ resourceData.resource
551
+ );
468
552
 
553
+ /** @type {ModuleSettings} */
469
554
  const settings = {};
470
555
  const useLoadersPost = [];
471
556
  const useLoaders = [];
@@ -485,7 +570,7 @@ class NormalModuleFactory extends ModuleFactory {
485
570
  -settings.type.length - 10
486
571
  );
487
572
  } else {
488
- settings.type = "javascript/auto";
573
+ settings.type = JAVASCRIPT_MODULE_TYPE_AUTO;
489
574
  const resourceDataForRules = matchResourceData || resourceData;
490
575
  const result = this.ruleSet.exec({
491
576
  resource: resourceDataForRules.path,
@@ -506,6 +591,11 @@ class NormalModuleFactory extends ModuleFactory {
506
591
  issuerLayer: contextInfo.issuerLayer || ""
507
592
  });
508
593
  for (const r of result) {
594
+ // https://github.com/webpack/webpack/issues/16466
595
+ // if a request exists PrePostAutoLoaders, should disable modifying Rule.type
596
+ if (r.type === "type" && noPrePostAutoLoaders) {
597
+ continue;
598
+ }
509
599
  if (r.type === "use") {
510
600
  if (!noAutoLoaders && !noPrePostAutoLoaders) {
511
601
  useLoaders.push(r.value);
@@ -521,32 +611,47 @@ class NormalModuleFactory extends ModuleFactory {
521
611
  } else if (
522
612
  typeof r.value === "object" &&
523
613
  r.value !== null &&
524
- typeof settings[r.type] === "object" &&
525
- settings[r.type] !== null
614
+ typeof settings[
615
+ /** @type {keyof ModuleSettings} */ (r.type)
616
+ ] === "object" &&
617
+ settings[/** @type {keyof ModuleSettings} */ (r.type)] !== null
526
618
  ) {
527
- settings[r.type] = cachedCleverMerge(settings[r.type], r.value);
619
+ settings[r.type] = cachedCleverMerge(
620
+ settings[/** @type {keyof ModuleSettings} */ (r.type)],
621
+ r.value
622
+ );
528
623
  } else {
529
624
  settings[r.type] = r.value;
530
625
  }
531
626
  }
532
627
  }
533
628
 
534
- let postLoaders, normalLoaders, preLoaders;
629
+ /** @type {undefined | LoaderItem[]} */
630
+ let postLoaders;
631
+ /** @type {undefined | LoaderItem[]} */
632
+ let normalLoaders;
633
+ /** @type {undefined | LoaderItem[]} */
634
+ let preLoaders;
535
635
 
536
636
  const continueCallback = needCalls(3, err => {
537
637
  if (err) {
538
638
  return callback(err);
539
639
  }
540
- const allLoaders = postLoaders;
640
+ const allLoaders = /** @type {LoaderItem[]} */ (postLoaders);
541
641
  if (matchResourceData === undefined) {
542
- for (const loader of loaders) allLoaders.push(loader);
543
- for (const loader of normalLoaders) allLoaders.push(loader);
642
+ for (const loader of /** @type {LoaderItem[]} */ (loaders))
643
+ allLoaders.push(loader);
644
+ for (const loader of /** @type {LoaderItem[]} */ (normalLoaders))
645
+ allLoaders.push(loader);
544
646
  } else {
545
- for (const loader of normalLoaders) allLoaders.push(loader);
546
- for (const loader of loaders) allLoaders.push(loader);
647
+ for (const loader of /** @type {LoaderItem[]} */ (normalLoaders))
648
+ allLoaders.push(loader);
649
+ for (const loader of /** @type {LoaderItem[]} */ (loaders))
650
+ allLoaders.push(loader);
547
651
  }
548
- for (const loader of preLoaders) allLoaders.push(loader);
549
- let type = settings.type;
652
+ for (const loader of /** @type {LoaderItem[]} */ (preLoaders))
653
+ allLoaders.push(loader);
654
+ const type = /** @type {string} */ (settings.type);
550
655
  const resolveOptions = settings.resolve;
551
656
  const layer = settings.layer;
552
657
  if (layer !== undefined && !layers) {
@@ -582,8 +687,8 @@ class NormalModuleFactory extends ModuleFactory {
582
687
  generatorOptions: settings.generator,
583
688
  resolveOptions
584
689
  });
585
- } catch (e) {
586
- return callback(e);
690
+ } catch (createDataErr) {
691
+ return callback(/** @type {Error} */ (createDataErr));
587
692
  }
588
693
  callback();
589
694
  });
@@ -625,7 +730,7 @@ class NormalModuleFactory extends ModuleFactory {
625
730
  this.resolveRequestArray(
626
731
  contextInfo,
627
732
  contextScheme ? this.context : context,
628
- elements,
733
+ /** @type {LoaderItem[]} */ (elements),
629
734
  loaderResolver,
630
735
  resolveContext,
631
736
  (err, result) => {
@@ -635,6 +740,9 @@ class NormalModuleFactory extends ModuleFactory {
635
740
  }
636
741
  );
637
742
 
743
+ /**
744
+ * @param {string} context context
745
+ */
638
746
  const defaultResolve = context => {
639
747
  if (/^($|\?)/.test(unresolvedResource)) {
640
748
  resourceData = {
@@ -654,7 +762,7 @@ class NormalModuleFactory extends ModuleFactory {
654
762
  resolveOptions || EMPTY_RESOLVE_OPTIONS,
655
763
  "dependencyType",
656
764
  dependencyType
657
- )
765
+ )
658
766
  : resolveOptions
659
767
  );
660
768
  this.resolveResource(
@@ -663,12 +771,17 @@ class NormalModuleFactory extends ModuleFactory {
663
771
  unresolvedResource,
664
772
  normalResolver,
665
773
  resolveContext,
666
- (err, resolvedResource, resolvedResourceResolveData) => {
774
+ (err, _resolvedResource, resolvedResourceResolveData) => {
667
775
  if (err) return continueCallback(err);
668
- if (resolvedResource !== false) {
776
+ if (_resolvedResource !== false) {
777
+ const resolvedResource =
778
+ /** @type {string} */
779
+ (_resolvedResource);
669
780
  resourceData = {
670
781
  resource: resolvedResource,
671
- data: resolvedResourceResolveData,
782
+ data:
783
+ /** @type {ResolveRequest} */
784
+ (resolvedResourceResolveData),
672
785
  ...cacheParseResource(resolvedResource)
673
786
  };
674
787
  }
@@ -731,7 +844,7 @@ class NormalModuleFactory extends ModuleFactory {
731
844
 
732
845
  /**
733
846
  * @param {ModuleFactoryCreateData} data data object
734
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
847
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
735
848
  * @returns {void}
736
849
  */
737
850
  create(data, callback) {
@@ -813,6 +926,14 @@ class NormalModuleFactory extends ModuleFactory {
813
926
  });
814
927
  }
815
928
 
929
+ /**
930
+ * @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
931
+ * @param {string} context context
932
+ * @param {string} unresolvedResource unresolved resource
933
+ * @param {ResolverWithOptions} resolver resolver
934
+ * @param {ResolveContext} resolveContext resolver context
935
+ * @param {(err: null | Error, res?: string | false, req?: ResolveRequest) => void} callback callback
936
+ */
816
937
  resolveResource(
817
938
  contextInfo,
818
939
  context,
@@ -838,10 +959,10 @@ class NormalModuleFactory extends ModuleFactory {
838
959
  (err2, hints) => {
839
960
  if (err2) {
840
961
  err.message += `
841
- An fatal error happened during resolving additional hints for this error: ${err2.message}`;
962
+ A fatal error happened during resolving additional hints for this error: ${err2.message}`;
842
963
  err.stack += `
843
964
 
844
- An fatal error happened during resolving additional hints for this error:
965
+ A fatal error happened during resolving additional hints for this error:
845
966
  ${err2.stack}`;
846
967
  return callback(err);
847
968
  }
@@ -849,6 +970,25 @@ ${err2.stack}`;
849
970
  err.message += `
850
971
  ${hints.join("\n\n")}`;
851
972
  }
973
+
974
+ // Check if the extension is missing a leading dot (e.g. "js" instead of ".js")
975
+ let appendResolveExtensionsHint = false;
976
+ const specifiedExtensions = Array.from(
977
+ resolver.options.extensions
978
+ );
979
+ const expectedExtensions = specifiedExtensions.map(extension => {
980
+ if (LEADING_DOT_EXTENSION_REGEX.test(extension)) {
981
+ appendResolveExtensionsHint = true;
982
+ return `.${extension}`;
983
+ }
984
+ return extension;
985
+ });
986
+ if (appendResolveExtensionsHint) {
987
+ err.message += `\nDid you miss the leading dot in 'resolve.extensions'? Did you mean '${JSON.stringify(
988
+ expectedExtensions
989
+ )}' instead of '${JSON.stringify(specifiedExtensions)}'?`;
990
+ }
991
+
852
992
  callback(err);
853
993
  }
854
994
  );
@@ -858,6 +998,16 @@ ${hints.join("\n\n")}`;
858
998
  );
859
999
  }
860
1000
 
1001
+ /**
1002
+ * @param {Error} error error
1003
+ * @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
1004
+ * @param {string} context context
1005
+ * @param {string} unresolvedResource unresolved resource
1006
+ * @param {ResolverWithOptions} resolver resolver
1007
+ * @param {ResolveContext} resolveContext resolver context
1008
+ * @param {Callback<string[]>} callback callback
1009
+ * @private
1010
+ */
861
1011
  _resolveResourceErrorHints(
862
1012
  error,
863
1013
  contextInfo,
@@ -920,13 +1070,12 @@ Add the extension to the request.`
920
1070
  /(\.[^.]+)(\?|$)/,
921
1071
  "$2"
922
1072
  );
923
- if (resolver.options.extensions.has(match[1])) {
924
- hint = `Did you mean '${fixedRequest}'?`;
925
- } else {
926
- hint = `Did you mean '${fixedRequest}'? Also note that '${match[1]}' is not in 'resolve.extensions' yet and need to be added for this to work?`;
927
- }
1073
+ hint = resolver.options.extensions.has(match[1])
1074
+ ? `Did you mean '${fixedRequest}'?`
1075
+ : `Did you mean '${fixedRequest}'? Also note that '${match[1]}' is not in 'resolve.extensions' yet and need to be added for this to work?`;
928
1076
  } else {
929
- hint = `Did you mean to omit the extension or to remove 'resolve.enforceExtension'?`;
1077
+ hint =
1078
+ "Did you mean to omit the extension or to remove 'resolve.enforceExtension'?";
930
1079
  }
931
1080
  return callback(
932
1081
  null,
@@ -969,11 +1118,20 @@ If changing the source code is not an option there is also a resolve options cal
969
1118
  ],
970
1119
  (err, hints) => {
971
1120
  if (err) return callback(err);
972
- callback(null, hints.filter(Boolean));
1121
+ callback(null, /** @type {string[]} */ (hints).filter(Boolean));
973
1122
  }
974
1123
  );
975
1124
  }
976
1125
 
1126
+ /**
1127
+ * @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
1128
+ * @param {string} context context
1129
+ * @param {LoaderItem[]} array array
1130
+ * @param {ResolverWithOptions} resolver resolver
1131
+ * @param {ResolveContext} resolveContext resolve context
1132
+ * @param {Callback<LoaderItem[]>} callback callback
1133
+ * @returns {void} result
1134
+ */
977
1135
  resolveRequestArray(
978
1136
  contextInfo,
979
1137
  context,
@@ -982,6 +1140,7 @@ If changing the source code is not an option there is also a resolve options cal
982
1140
  resolveContext,
983
1141
  callback
984
1142
  ) {
1143
+ // LoaderItem
985
1144
  if (array.length === 0) return callback(null, array);
986
1145
  asyncLib.map(
987
1146
  array,
@@ -991,22 +1150,21 @@ If changing the source code is not an option there is also a resolve options cal
991
1150
  context,
992
1151
  item.loader,
993
1152
  resolveContext,
994
- (err, result) => {
1153
+ (err, result, resolveRequest) => {
995
1154
  if (
996
1155
  err &&
997
1156
  /^[^/]*$/.test(item.loader) &&
998
- !/-loader$/.test(item.loader)
1157
+ !item.loader.endsWith("-loader")
999
1158
  ) {
1000
1159
  return resolver.resolve(
1001
1160
  contextInfo,
1002
1161
  context,
1003
- item.loader + "-loader",
1162
+ `${item.loader}-loader`,
1004
1163
  resolveContext,
1005
1164
  err2 => {
1006
1165
  if (!err2) {
1007
1166
  err.message =
1008
- err.message +
1009
- "\n" +
1167
+ `${err.message}\n` +
1010
1168
  "BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.\n" +
1011
1169
  ` You need to specify '${item.loader}-loader' instead of '${item.loader}',\n` +
1012
1170
  " see https://webpack.js.org/migrate/3/#automatic-loader-module-name-extension-removed";
@@ -1017,23 +1175,47 @@ If changing the source code is not an option there is also a resolve options cal
1017
1175
  }
1018
1176
  if (err) return callback(err);
1019
1177
 
1020
- const parsedResult = identToLoaderRequest(result);
1178
+ const parsedResult = this._parseResourceWithoutFragment(
1179
+ /** @type {string} */ (result)
1180
+ );
1181
+
1182
+ const type = /\.mjs$/i.test(parsedResult.path)
1183
+ ? "module"
1184
+ : /\.cjs$/i.test(parsedResult.path)
1185
+ ? "commonjs"
1186
+ : /** @type {ResolveRequest} */
1187
+ (resolveRequest).descriptionFileData === undefined
1188
+ ? undefined
1189
+ : /** @type {ResolveRequest} */
1190
+ (resolveRequest).descriptionFileData.type;
1021
1191
  const resolved = {
1022
- loader: parsedResult.loader,
1192
+ loader: parsedResult.path,
1193
+ type,
1023
1194
  options:
1024
1195
  item.options === undefined
1025
- ? parsedResult.options
1196
+ ? parsedResult.query
1197
+ ? parsedResult.query.slice(1)
1198
+ : undefined
1026
1199
  : item.options,
1027
- ident: item.options === undefined ? undefined : item.ident
1200
+ ident:
1201
+ item.options === undefined
1202
+ ? undefined
1203
+ : /** @type {string} */ (item.ident)
1028
1204
  };
1029
- return callback(null, resolved);
1205
+
1206
+ return callback(null, /** @type {LoaderItem} */ (resolved));
1030
1207
  }
1031
1208
  );
1032
1209
  },
1033
- callback
1210
+ /** @type {Callback<TODO>} */ (callback)
1034
1211
  );
1035
1212
  }
1036
1213
 
1214
+ /**
1215
+ * @param {string} type type
1216
+ * @param {ParserOptions} parserOptions parser options
1217
+ * @returns {Parser} parser
1218
+ */
1037
1219
  getParser(type, parserOptions = EMPTY_PARSER_OPTIONS) {
1038
1220
  let cache = this.parserCache.get(type);
1039
1221
 
@@ -1054,7 +1236,7 @@ If changing the source code is not an option there is also a resolve options cal
1054
1236
 
1055
1237
  /**
1056
1238
  * @param {string} type type
1057
- * @param {{[k: string]: any}} parserOptions parser options
1239
+ * @param {ParserOptions} parserOptions parser options
1058
1240
  * @returns {Parser} parser
1059
1241
  */
1060
1242
  createParser(type, parserOptions = {}) {
@@ -1071,6 +1253,11 @@ If changing the source code is not an option there is also a resolve options cal
1071
1253
  return parser;
1072
1254
  }
1073
1255
 
1256
+ /**
1257
+ * @param {string} type type of generator
1258
+ * @param {GeneratorOptions} generatorOptions generator options
1259
+ * @returns {Generator} generator
1260
+ */
1074
1261
  getGenerator(type, generatorOptions = EMPTY_GENERATOR_OPTIONS) {
1075
1262
  let cache = this.generatorCache.get(type);
1076
1263
 
@@ -1089,6 +1276,11 @@ If changing the source code is not an option there is also a resolve options cal
1089
1276
  return generator;
1090
1277
  }
1091
1278
 
1279
+ /**
1280
+ * @param {string} type type of generator
1281
+ * @param {GeneratorOptions} generatorOptions generator options
1282
+ * @returns {Generator} generator
1283
+ */
1092
1284
  createGenerator(type, generatorOptions = {}) {
1093
1285
  generatorOptions = mergeGlobalOptions(
1094
1286
  this._globalGeneratorOptions,
@@ -1105,6 +1297,11 @@ If changing the source code is not an option there is also a resolve options cal
1105
1297
  return generator;
1106
1298
  }
1107
1299
 
1300
+ /**
1301
+ * @param {Parameters<ResolverFactory["get"]>[0]} type type of resolver
1302
+ * @param {Parameters<ResolverFactory["get"]>[1]=} resolveOptions options
1303
+ * @returns {ReturnType<ResolverFactory["get"]>} the resolver
1304
+ */
1108
1305
  getResolver(type, resolveOptions) {
1109
1306
  return this.resolverFactory.get(type, resolveOptions);
1110
1307
  }