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
@@ -9,6 +9,7 @@ const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const AsyncDependenciesBlock = require("./AsyncDependenciesBlock");
10
10
  const { makeWebpackError } = require("./HookWebpackError");
11
11
  const Module = require("./Module");
12
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
12
13
  const RuntimeGlobals = require("./RuntimeGlobals");
13
14
  const Template = require("./Template");
14
15
  const WebpackError = require("./WebpackError");
@@ -19,32 +20,45 @@ const {
19
20
  keepOriginalOrder,
20
21
  compareModulesById
21
22
  } = require("./util/comparators");
22
- const { contextify, parseResource } = require("./util/identifier");
23
+ const {
24
+ contextify,
25
+ parseResource,
26
+ makePathsRelative
27
+ } = require("./util/identifier");
23
28
  const makeSerializable = require("./util/makeSerializable");
24
29
 
25
30
  /** @typedef {import("webpack-sources").Source} Source */
26
31
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
32
+ /** @typedef {import("./Chunk")} Chunk */
33
+ /** @typedef {import("./Chunk").ChunkId} ChunkId */
27
34
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
35
+ /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
28
36
  /** @typedef {import("./ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
29
37
  /** @typedef {import("./Compilation")} Compilation */
38
+ /** @typedef {import("./Dependency")} Dependency */
30
39
  /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
40
+ /** @typedef {import("./Module").BuildInfo} BuildInfo */
31
41
  /** @typedef {import("./Module").BuildMeta} BuildMeta */
32
42
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
33
43
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
34
44
  /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
35
45
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
46
+ /** @typedef {import("./Module").SourceTypes} SourceTypes */
36
47
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
37
48
  /** @typedef {import("./RequestShortener")} RequestShortener */
38
49
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
39
50
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
40
51
  /** @typedef {import("./dependencies/ContextElementDependency")} ContextElementDependency */
52
+ /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
53
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
54
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
41
55
  /** @template T @typedef {import("./util/LazySet")<T>} LazySet<T> */
42
56
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
43
57
 
44
58
  /** @typedef {"sync" | "eager" | "weak" | "async-weak" | "lazy" | "lazy-once"} ContextMode Context mode */
45
59
 
46
60
  /**
47
- * @typedef {Object} ContextOptions
61
+ * @typedef {object} ContextOptions
48
62
  * @property {ContextMode} mode
49
63
  * @property {boolean} recursive
50
64
  * @property {RegExp} regExp
@@ -56,12 +70,14 @@ const makeSerializable = require("./util/makeSerializable");
56
70
  * @property {RawChunkGroupOptions=} groupOptions
57
71
  * @property {string=} typePrefix
58
72
  * @property {string=} category
59
- * @property {string[][]=} referencedExports exports referenced from modules (won't be mangled)
73
+ * @property {(string[][] | null)=} referencedExports exports referenced from modules (won't be mangled)
74
+ * @property {string=} layer
75
+ * @property {ImportAttributes=} attributes
60
76
  */
61
77
 
62
78
  /**
63
- * @typedef {Object} ContextModuleOptionsExtras
64
- * @property {string} resource
79
+ * @typedef {object} ContextModuleOptionsExtras
80
+ * @property {false|string|string[]} resource
65
81
  * @property {string=} resourceQuery
66
82
  * @property {string=} resourceFragment
67
83
  * @property {TODO} resolveOptions
@@ -71,7 +87,7 @@ const makeSerializable = require("./util/makeSerializable");
71
87
 
72
88
  /**
73
89
  * @callback ResolveDependenciesCallback
74
- * @param {Error=} err
90
+ * @param {Error | null} err
75
91
  * @param {ContextElementDependency[]=} dependencies
76
92
  */
77
93
 
@@ -82,6 +98,10 @@ const makeSerializable = require("./util/makeSerializable");
82
98
  * @param {ResolveDependenciesCallback} callback
83
99
  */
84
100
 
101
+ /** @typedef {1 | 3 | 7 | 9} FakeMapType */
102
+
103
+ /** @typedef {Record<ModuleId, FakeMapType>} FakeMap */
104
+
85
105
  const SNAPSHOT_OPTIONS = { timestamp: true };
86
106
 
87
107
  const TYPES = new Set(["javascript"]);
@@ -92,23 +112,38 @@ class ContextModule extends Module {
92
112
  * @param {ContextModuleOptions} options options object
93
113
  */
94
114
  constructor(resolveDependencies, options) {
95
- const parsed = parseResource(options ? options.resource : "");
96
- const resource = parsed.path;
97
- const resourceQuery = (options && options.resourceQuery) || parsed.query;
98
- const resourceFragment =
99
- (options && options.resourceFragment) || parsed.fragment;
100
-
101
- super("javascript/dynamic", resource);
115
+ if (!options || typeof options.resource === "string") {
116
+ const parsed = parseResource(
117
+ options ? /** @type {string} */ (options.resource) : ""
118
+ );
119
+ const resource = parsed.path;
120
+ const resourceQuery = (options && options.resourceQuery) || parsed.query;
121
+ const resourceFragment =
122
+ (options && options.resourceFragment) || parsed.fragment;
123
+ const layer = options && options.layer;
124
+
125
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, resource, layer);
126
+ /** @type {ContextModuleOptions} */
127
+ this.options = {
128
+ ...options,
129
+ resource,
130
+ resourceQuery,
131
+ resourceFragment
132
+ };
133
+ } else {
134
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, undefined, options.layer);
135
+ /** @type {ContextModuleOptions} */
136
+ this.options = {
137
+ ...options,
138
+ resource: options.resource,
139
+ resourceQuery: options.resourceQuery || "",
140
+ resourceFragment: options.resourceFragment || ""
141
+ };
142
+ }
102
143
 
103
144
  // Info from Factory
145
+ /** @type {ResolveDependencies | undefined} */
104
146
  this.resolveDependencies = resolveDependencies;
105
- /** @type {ContextModuleOptions} */
106
- this.options = {
107
- ...options,
108
- resource,
109
- resourceQuery,
110
- resourceFragment
111
- };
112
147
  if (options && options.resolveOptions !== undefined) {
113
148
  this.resolveOptions = options.resolveOptions;
114
149
  }
@@ -122,7 +157,7 @@ class ContextModule extends Module {
122
157
  }
123
158
 
124
159
  /**
125
- * @returns {Set<string>} types available (do not mutate)
160
+ * @returns {SourceTypes} types available (do not mutate)
126
161
  */
127
162
  getSourceTypes() {
128
163
  return TYPES;
@@ -149,16 +184,26 @@ class ContextModule extends Module {
149
184
  this.resolveDependencies = undefined;
150
185
  }
151
186
 
152
- prettyRegExp(regexString) {
153
- // remove the "/" at the front and the beginning
154
- // "/foo/" -> "foo"
155
- return regexString
156
- .substring(1, regexString.length - 1)
157
- .replace(/!/g, "%21");
187
+ /**
188
+ * @private
189
+ * @param {RegExp} regexString RegExp as a string
190
+ * @param {boolean=} stripSlash do we need to strip a slsh
191
+ * @returns {string} pretty RegExp
192
+ */
193
+ _prettyRegExp(regexString, stripSlash = true) {
194
+ const str = stripSlash
195
+ ? regexString.source + regexString.flags
196
+ : `${regexString}`;
197
+ return str.replace(/!/g, "%21").replace(/\|/g, "%7C");
158
198
  }
159
199
 
160
200
  _createIdentifier() {
161
- let identifier = this.context;
201
+ let identifier =
202
+ this.context ||
203
+ (typeof this.options.resource === "string" ||
204
+ this.options.resource === false
205
+ ? `${this.options.resource}`
206
+ : this.options.resource.join("|"));
162
207
  if (this.options.resourceQuery) {
163
208
  identifier += `|${this.options.resourceQuery}`;
164
209
  }
@@ -175,13 +220,19 @@ class ContextModule extends Module {
175
220
  identifier += `|${this.options.addon}`;
176
221
  }
177
222
  if (this.options.regExp) {
178
- identifier += `|${this.options.regExp}`;
223
+ identifier += `|${this._prettyRegExp(this.options.regExp, false)}`;
179
224
  }
180
225
  if (this.options.include) {
181
- identifier += `|include: ${this.options.include}`;
226
+ identifier += `|include: ${this._prettyRegExp(
227
+ this.options.include,
228
+ false
229
+ )}`;
182
230
  }
183
231
  if (this.options.exclude) {
184
- identifier += `|exclude: ${this.options.exclude}`;
232
+ identifier += `|exclude: ${this._prettyRegExp(
233
+ this.options.exclude,
234
+ false
235
+ )}`;
185
236
  }
186
237
  if (this.options.referencedExports) {
187
238
  identifier += `|referencedExports: ${JSON.stringify(
@@ -201,6 +252,9 @@ class ContextModule extends Module {
201
252
  } else if (this.options.namespaceObject) {
202
253
  identifier += "|namespace object";
203
254
  }
255
+ if (this.layer) {
256
+ identifier += `|layer: ${this.layer}`;
257
+ }
204
258
 
205
259
  return identifier;
206
260
  }
@@ -217,7 +271,19 @@ class ContextModule extends Module {
217
271
  * @returns {string} a user readable identifier of the module
218
272
  */
219
273
  readableIdentifier(requestShortener) {
220
- let identifier = requestShortener.shorten(this.context) + "/";
274
+ let identifier;
275
+ if (this.context) {
276
+ identifier = `${requestShortener.shorten(this.context)}/`;
277
+ } else if (
278
+ typeof this.options.resource === "string" ||
279
+ this.options.resource === false
280
+ ) {
281
+ identifier = `${requestShortener.shorten(`${this.options.resource}`)}/`;
282
+ } else {
283
+ identifier = this.options.resource
284
+ .map(r => `${requestShortener.shorten(r)}/`)
285
+ .join(" ");
286
+ }
221
287
  if (this.options.resourceQuery) {
222
288
  identifier += ` ${this.options.resourceQuery}`;
223
289
  }
@@ -231,13 +297,13 @@ class ContextModule extends Module {
231
297
  identifier += ` ${requestShortener.shorten(this.options.addon)}`;
232
298
  }
233
299
  if (this.options.regExp) {
234
- identifier += ` ${this.prettyRegExp(this.options.regExp + "")}`;
300
+ identifier += ` ${this._prettyRegExp(this.options.regExp)}`;
235
301
  }
236
302
  if (this.options.include) {
237
- identifier += ` include: ${this.prettyRegExp(this.options.include + "")}`;
303
+ identifier += ` include: ${this._prettyRegExp(this.options.include)}`;
238
304
  }
239
305
  if (this.options.exclude) {
240
- identifier += ` exclude: ${this.prettyRegExp(this.options.exclude + "")}`;
306
+ identifier += ` exclude: ${this._prettyRegExp(this.options.exclude)}`;
241
307
  }
242
308
  if (this.options.referencedExports) {
243
309
  identifier += ` referencedExports: ${this.options.referencedExports
@@ -250,7 +316,9 @@ class ContextModule extends Module {
250
316
  if (this.options.groupOptions) {
251
317
  const groupOptions = this.options.groupOptions;
252
318
  for (const key of Object.keys(groupOptions)) {
253
- identifier += ` ${key}: ${groupOptions[key]}`;
319
+ identifier += ` ${key}: ${
320
+ groupOptions[/** @type {keyof RawChunkGroupOptions} */ (key)]
321
+ }`;
254
322
  }
255
323
  }
256
324
  if (this.options.namespaceObject === "strict") {
@@ -267,11 +335,31 @@ class ContextModule extends Module {
267
335
  * @returns {string | null} an identifier for library inclusion
268
336
  */
269
337
  libIdent(options) {
270
- let identifier = contextify(
271
- options.context,
272
- this.context,
273
- options.associatedObjectForCache
274
- );
338
+ let identifier;
339
+
340
+ if (this.context) {
341
+ identifier = contextify(
342
+ options.context,
343
+ this.context,
344
+ options.associatedObjectForCache
345
+ );
346
+ } else if (typeof this.options.resource === "string") {
347
+ identifier = contextify(
348
+ options.context,
349
+ this.options.resource,
350
+ options.associatedObjectForCache
351
+ );
352
+ } else if (this.options.resource === false) {
353
+ identifier = "false";
354
+ } else {
355
+ identifier = this.options.resource
356
+ .map(res =>
357
+ contextify(options.context, res, options.associatedObjectForCache)
358
+ )
359
+ .join(" ");
360
+ }
361
+
362
+ if (this.layer) identifier = `(${this.layer})/${identifier}`;
275
363
  if (this.options.mode) {
276
364
  identifier += ` ${this.options.mode}`;
277
365
  }
@@ -286,13 +374,13 @@ class ContextModule extends Module {
286
374
  )}`;
287
375
  }
288
376
  if (this.options.regExp) {
289
- identifier += ` ${this.prettyRegExp(this.options.regExp + "")}`;
377
+ identifier += ` ${this._prettyRegExp(this.options.regExp)}`;
290
378
  }
291
379
  if (this.options.include) {
292
- identifier += ` include: ${this.prettyRegExp(this.options.include + "")}`;
380
+ identifier += ` include: ${this._prettyRegExp(this.options.include)}`;
293
381
  }
294
382
  if (this.options.exclude) {
295
- identifier += ` exclude: ${this.prettyRegExp(this.options.exclude + "")}`;
383
+ identifier += ` exclude: ${this._prettyRegExp(this.options.exclude)}`;
296
384
  }
297
385
  if (this.options.referencedExports) {
298
386
  identifier += ` referencedExports: ${this.options.referencedExports
@@ -312,17 +400,20 @@ class ContextModule extends Module {
312
400
 
313
401
  /**
314
402
  * @param {NeedBuildContext} context context info
315
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
403
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
316
404
  * @returns {void}
317
405
  */
318
406
  needBuild({ fileSystemInfo }, callback) {
319
407
  // build if enforced
320
408
  if (this._forceBuild) return callback(null, true);
321
409
 
322
- // always build when we have no snapshot
323
- if (!this.buildInfo.snapshot) return callback(null, true);
410
+ const buildInfo = /** @type {BuildInfo} */ (this.buildInfo);
411
+
412
+ // always build when we have no snapshot and context
413
+ if (!buildInfo.snapshot)
414
+ return callback(null, Boolean(this.context || this.options.resource));
324
415
 
325
- fileSystemInfo.checkSnapshotValid(this.buildInfo.snapshot, (err, valid) => {
416
+ fileSystemInfo.checkSnapshotValid(buildInfo.snapshot, (err, valid) => {
326
417
  callback(err, !valid);
327
418
  });
328
419
  }
@@ -348,7 +439,8 @@ class ContextModule extends Module {
348
439
  this.dependencies.length = 0;
349
440
  this.blocks.length = 0;
350
441
  const startTime = Date.now();
351
- this.resolveDependencies(fs, this.options, (err, dependencies) => {
442
+ /** @type {ResolveDependencies} */
443
+ (this.resolveDependencies)(fs, this.options, (err, dependencies) => {
352
444
  if (err) {
353
445
  return callback(
354
446
  makeWebpackError(err, "ContextModule.resolveDependencies")
@@ -435,15 +527,22 @@ class ContextModule extends Module {
435
527
  );
436
528
  return;
437
529
  }
530
+ if (!this.context && !this.options.resource) return callback();
531
+
438
532
  compilation.fileSystemInfo.createSnapshot(
439
533
  startTime,
440
534
  null,
441
- [this.context],
535
+ this.context
536
+ ? [this.context]
537
+ : typeof this.options.resource === "string"
538
+ ? [this.options.resource]
539
+ : /** @type {string[]} */ (this.options.resource),
442
540
  null,
443
541
  SNAPSHOT_OPTIONS,
444
542
  (err, snapshot) => {
445
543
  if (err) return callback(err);
446
- this.buildInfo.snapshot = snapshot;
544
+ /** @type {BuildInfo} */
545
+ (this.buildInfo).snapshot = snapshot;
447
546
  callback();
448
547
  }
449
548
  );
@@ -462,39 +561,49 @@ class ContextModule extends Module {
462
561
  missingDependencies,
463
562
  buildDependencies
464
563
  ) {
465
- contextDependencies.add(this.context);
564
+ if (this.context) {
565
+ contextDependencies.add(this.context);
566
+ } else if (typeof this.options.resource === "string") {
567
+ contextDependencies.add(this.options.resource);
568
+ } else if (this.options.resource === false) {
569
+ // Do nothing
570
+ } else {
571
+ for (const res of this.options.resource) contextDependencies.add(res);
572
+ }
466
573
  }
467
574
 
468
575
  /**
469
- * @param {ContextElementDependency[]} dependencies all dependencies
576
+ * @param {Dependency[]} dependencies all dependencies
470
577
  * @param {ChunkGraph} chunkGraph chunk graph
471
- * @returns {TODO} TODO
578
+ * @returns {Map<string, string | number>} map with user requests
472
579
  */
473
580
  getUserRequestMap(dependencies, chunkGraph) {
474
581
  const moduleGraph = chunkGraph.moduleGraph;
475
582
  // if we filter first we get a new array
476
583
  // therefore we don't need to create a clone of dependencies explicitly
477
584
  // therefore the order of this is !important!
478
- const sortedDependencies = dependencies
479
- .filter(dependency => moduleGraph.getModule(dependency))
480
- .sort((a, b) => {
481
- if (a.userRequest === b.userRequest) {
482
- return 0;
483
- }
484
- return a.userRequest < b.userRequest ? -1 : 1;
485
- });
585
+ const sortedDependencies =
586
+ /** @type {ContextElementDependency[]} */
587
+ (dependencies)
588
+ .filter(dependency => moduleGraph.getModule(dependency))
589
+ .sort((a, b) => {
590
+ if (a.userRequest === b.userRequest) {
591
+ return 0;
592
+ }
593
+ return a.userRequest < b.userRequest ? -1 : 1;
594
+ });
486
595
  const map = Object.create(null);
487
596
  for (const dep of sortedDependencies) {
488
- const module = moduleGraph.getModule(dep);
597
+ const module = /** @type {Module} */ (moduleGraph.getModule(dep));
489
598
  map[dep.userRequest] = chunkGraph.getModuleId(module);
490
599
  }
491
600
  return map;
492
601
  }
493
602
 
494
603
  /**
495
- * @param {ContextElementDependency[]} dependencies all dependencies
604
+ * @param {Dependency[]} dependencies all dependencies
496
605
  * @param {ChunkGraph} chunkGraph chunk graph
497
- * @returns {TODO} TODO
606
+ * @returns {FakeMap | FakeMapType} fake map
498
607
  */
499
608
  getFakeMap(dependencies, chunkGraph) {
500
609
  if (!this.options.namespaceObject) {
@@ -508,16 +617,19 @@ class ContextModule extends Module {
508
617
  // therefore we don't need to create a clone of dependencies explicitly
509
618
  // therefore the order of this is !important!
510
619
  const sortedModules = dependencies
511
- .map(dependency => moduleGraph.getModule(dependency))
620
+ .map(
621
+ dependency => /** @type {Module} */ (moduleGraph.getModule(dependency))
622
+ )
512
623
  .filter(Boolean)
513
624
  .sort(comparator);
625
+ /** @type {FakeMap} */
514
626
  const fakeMap = Object.create(null);
515
627
  for (const module of sortedModules) {
516
628
  const exportsType = module.getExportsType(
517
629
  moduleGraph,
518
630
  this.options.namespaceObject === "strict"
519
631
  );
520
- const id = chunkGraph.getModuleId(module);
632
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
521
633
  switch (exportsType) {
522
634
  case "namespace":
523
635
  fakeMap[id] = 9;
@@ -557,21 +669,36 @@ class ContextModule extends Module {
557
669
  return fakeMap;
558
670
  }
559
671
 
672
+ /**
673
+ * @param {FakeMap | FakeMapType} fakeMap fake map
674
+ * @returns {string} fake map init statement
675
+ */
560
676
  getFakeMapInitStatement(fakeMap) {
561
677
  return typeof fakeMap === "object"
562
678
  ? `var fakeMap = ${JSON.stringify(fakeMap, null, "\t")};`
563
679
  : "";
564
680
  }
565
681
 
682
+ /**
683
+ * @param {FakeMapType} type type
684
+ * @param {boolean=} asyncModule is async module
685
+ * @returns {string} return result
686
+ */
566
687
  getReturn(type, asyncModule) {
567
688
  if (type === 9) {
568
- return "__webpack_require__(id)";
689
+ return `${RuntimeGlobals.require}(id)`;
569
690
  }
570
691
  return `${RuntimeGlobals.createFakeNamespaceObject}(id, ${type}${
571
692
  asyncModule ? " | 16" : ""
572
693
  })`;
573
694
  }
574
695
 
696
+ /**
697
+ * @param {FakeMap | FakeMapType} fakeMap fake map
698
+ * @param {boolean=} asyncModule us async module
699
+ * @param {string=} fakeMapDataExpression fake map data expression
700
+ * @returns {string} module object source
701
+ */
575
702
  getReturnModuleObjectSource(
576
703
  fakeMap,
577
704
  asyncModule,
@@ -586,8 +713,8 @@ class ContextModule extends Module {
586
713
  }
587
714
 
588
715
  /**
589
- * @param {TODO} dependencies TODO
590
- * @param {TODO} id TODO
716
+ * @param {Dependency[]} dependencies dependencies
717
+ * @param {ModuleId} id module id
591
718
  * @param {ChunkGraph} chunkGraph the chunk graph
592
719
  * @returns {string} source code
593
720
  */
@@ -620,8 +747,8 @@ webpackContext.id = ${JSON.stringify(id)};`;
620
747
  }
621
748
 
622
749
  /**
623
- * @param {TODO} dependencies TODO
624
- * @param {TODO} id TODO
750
+ * @param {Dependency[]} dependencies dependencies
751
+ * @param {ModuleId} id module id
625
752
  * @param {ChunkGraph} chunkGraph the chunk graph
626
753
  * @returns {string} source code
627
754
  */
@@ -659,9 +786,9 @@ module.exports = webpackContext;`;
659
786
  }
660
787
 
661
788
  /**
662
- * @param {TODO} dependencies TODO
663
- * @param {TODO} id TODO
664
- * @param {Object} context context
789
+ * @param {Dependency[]} dependencies dependencies
790
+ * @param {ModuleId} id module id
791
+ * @param {object} context context
665
792
  * @param {ChunkGraph} context.chunkGraph the chunk graph
666
793
  * @param {RuntimeTemplate} context.runtimeTemplate the chunk graph
667
794
  * @returns {string} source code
@@ -708,9 +835,9 @@ module.exports = webpackAsyncContext;`;
708
835
  }
709
836
 
710
837
  /**
711
- * @param {TODO} dependencies TODO
712
- * @param {TODO} id TODO
713
- * @param {Object} context context
838
+ * @param {Dependency[]} dependencies dependencies
839
+ * @param {ModuleId} id module id
840
+ * @param {object} context context
714
841
  * @param {ChunkGraph} context.chunkGraph the chunk graph
715
842
  * @param {RuntimeTemplate} context.runtimeTemplate the chunk graph
716
843
  * @returns {string} source code
@@ -722,9 +849,9 @@ module.exports = webpackAsyncContext;`;
722
849
  const thenFunction =
723
850
  fakeMap !== 9
724
851
  ? `${arrow ? "id =>" : "function(id)"} {
725
- ${this.getReturnModuleObjectSource(fakeMap)}
852
+ ${this.getReturnModuleObjectSource(fakeMap, true)}
726
853
  }`
727
- : "__webpack_require__";
854
+ : RuntimeGlobals.require;
728
855
  return `var map = ${JSON.stringify(map, null, "\t")};
729
856
  ${this.getFakeMapInitStatement(fakeMap)}
730
857
 
@@ -752,10 +879,10 @@ module.exports = webpackAsyncContext;`;
752
879
  }
753
880
 
754
881
  /**
755
- * @param {TODO} block TODO
756
- * @param {TODO} dependencies TODO
757
- * @param {TODO} id TODO
758
- * @param {Object} options options object
882
+ * @param {AsyncDependenciesBlock} block block
883
+ * @param {Dependency[]} dependencies dependencies
884
+ * @param {ModuleId} id module id
885
+ * @param {object} options options object
759
886
  * @param {RuntimeTemplate} options.runtimeTemplate the runtime template
760
887
  * @param {ChunkGraph} options.chunkGraph the chunk graph
761
888
  * @returns {string} source code
@@ -775,7 +902,7 @@ module.exports = webpackAsyncContext;`;
775
902
  ? `${arrow ? "id =>" : "function(id)"} {
776
903
  ${this.getReturnModuleObjectSource(fakeMap, true)};
777
904
  }`
778
- : "__webpack_require__";
905
+ : RuntimeGlobals.require;
779
906
 
780
907
  return `var map = ${JSON.stringify(map, null, "\t")};
781
908
  ${this.getFakeMapInitStatement(fakeMap)}
@@ -802,9 +929,9 @@ module.exports = webpackAsyncContext;`;
802
929
  }
803
930
 
804
931
  /**
805
- * @param {TODO} blocks TODO
806
- * @param {TODO} id TODO
807
- * @param {Object} context context
932
+ * @param {AsyncDependenciesBlock[]} blocks blocks
933
+ * @param {ModuleId} id module id
934
+ * @param {object} context context
808
935
  * @param {ChunkGraph} context.chunkGraph the chunk graph
809
936
  * @param {RuntimeTemplate} context.runtimeTemplate the chunk graph
810
937
  * @returns {string} source code
@@ -819,13 +946,19 @@ module.exports = webpackAsyncContext;`;
819
946
  chunkGraph
820
947
  );
821
948
  const hasFakeMap = typeof fakeMap === "object";
949
+ /** @typedef {{userRequest: string, dependency: ContextElementDependency, chunks: undefined | Chunk[], module: Module, block: AsyncDependenciesBlock}} Item */
950
+ /**
951
+ * @type {Item[]}
952
+ */
822
953
  const items = blocks
823
954
  .map(block => {
824
- const dependency = block.dependencies[0];
955
+ const dependency =
956
+ /** @type {ContextElementDependency} */
957
+ (block.dependencies[0]);
825
958
  return {
826
- dependency: dependency,
827
- module: moduleGraph.getModule(dependency),
828
- block: block,
959
+ dependency,
960
+ module: /** @type {Module} */ (moduleGraph.getModule(dependency)),
961
+ block,
829
962
  userRequest: dependency.userRequest,
830
963
  chunks: undefined
831
964
  };
@@ -847,18 +980,23 @@ module.exports = webpackAsyncContext;`;
847
980
  if (a.userRequest === b.userRequest) return 0;
848
981
  return a.userRequest < b.userRequest ? -1 : 1;
849
982
  });
983
+ /** @type {Record<string, ModuleId | (ModuleId[] | ChunkId[])>} */
850
984
  const map = Object.create(null);
851
985
  for (const item of sortedItems) {
852
- const moduleId = chunkGraph.getModuleId(item.module);
986
+ const moduleId =
987
+ /** @type {ModuleId} */
988
+ (chunkGraph.getModuleId(item.module));
853
989
  if (shortMode) {
854
990
  map[item.userRequest] = moduleId;
855
991
  } else {
992
+ /** @type {(ModuleId | ChunkId)[]} */
856
993
  const arrayStart = [moduleId];
857
994
  if (hasFakeMap) {
858
995
  arrayStart.push(fakeMap[moduleId]);
859
996
  }
860
997
  map[item.userRequest] = arrayStart.concat(
861
- item.chunks.map(chunk => chunk.id)
998
+ /** @type {Chunk[]} */
999
+ (item.chunks).map(chunk => /** @type {ChunkId} */ (chunk.id))
862
1000
  );
863
1001
  }
864
1002
  }
@@ -867,8 +1005,8 @@ module.exports = webpackAsyncContext;`;
867
1005
  const requestPrefix = hasNoChunk
868
1006
  ? "Promise.resolve()"
869
1007
  : hasMultipleOrNoChunks
870
- ? `Promise.all(ids.slice(${chunksStartPosition}).map(${RuntimeGlobals.ensureChunk}))`
871
- : `${RuntimeGlobals.ensureChunk}(ids[${chunksStartPosition}])`;
1008
+ ? `Promise.all(ids.slice(${chunksStartPosition}).map(${RuntimeGlobals.ensureChunk}))`
1009
+ : `${RuntimeGlobals.ensureChunk}(ids[${chunksStartPosition}])`;
872
1010
  const returnModuleObject = this.getReturnModuleObjectSource(
873
1011
  fakeMap,
874
1012
  true,
@@ -914,6 +1052,11 @@ webpackAsyncContext.id = ${JSON.stringify(id)};
914
1052
  module.exports = webpackAsyncContext;`;
915
1053
  }
916
1054
 
1055
+ /**
1056
+ * @param {ModuleId} id module id
1057
+ * @param {RuntimeTemplate} runtimeTemplate runtime template
1058
+ * @returns {string} source for empty async context
1059
+ */
917
1060
  getSourceForEmptyContext(id, runtimeTemplate) {
918
1061
  return `function webpackEmptyContext(req) {
919
1062
  var e = new Error("Cannot find module '" + req + "'");
@@ -926,6 +1069,11 @@ webpackEmptyContext.id = ${JSON.stringify(id)};
926
1069
  module.exports = webpackEmptyContext;`;
927
1070
  }
928
1071
 
1072
+ /**
1073
+ * @param {ModuleId} id module id
1074
+ * @param {RuntimeTemplate} runtimeTemplate runtime template
1075
+ * @returns {string} source for empty async context
1076
+ */
929
1077
  getSourceForEmptyAsyncContext(id, runtimeTemplate) {
930
1078
  const arrow = runtimeTemplate.supportsArrowFunction();
931
1079
  return `function webpackEmptyAsyncContext(req) {
@@ -949,7 +1097,7 @@ module.exports = webpackEmptyAsyncContext;`;
949
1097
  * @returns {string} the source code
950
1098
  */
951
1099
  getSourceString(asyncMode, { runtimeTemplate, chunkGraph }) {
952
- const id = chunkGraph.getModuleId(this);
1100
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(this));
953
1101
  if (asyncMode === "lazy") {
954
1102
  if (this.blocks && this.blocks.length > 0) {
955
1103
  return this.getLazySource(this.blocks, id, {
@@ -987,10 +1135,12 @@ module.exports = webpackEmptyAsyncContext;`;
987
1135
  }
988
1136
  return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
989
1137
  }
990
- if (asyncMode === "weak") {
991
- if (this.dependencies && this.dependencies.length > 0) {
992
- return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
993
- }
1138
+ if (
1139
+ asyncMode === "weak" &&
1140
+ this.dependencies &&
1141
+ this.dependencies.length > 0
1142
+ ) {
1143
+ return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
994
1144
  }
995
1145
  if (this.dependencies && this.dependencies.length > 0) {
996
1146
  return this.getSyncSource(this.dependencies, id, chunkGraph);
@@ -998,9 +1148,21 @@ module.exports = webpackEmptyAsyncContext;`;
998
1148
  return this.getSourceForEmptyContext(id, runtimeTemplate);
999
1149
  }
1000
1150
 
1001
- getSource(sourceString) {
1151
+ /**
1152
+ * @param {string} sourceString source content
1153
+ * @param {Compilation=} compilation the compilation
1154
+ * @returns {Source} generated source
1155
+ */
1156
+ getSource(sourceString, compilation) {
1002
1157
  if (this.useSourceMap || this.useSimpleSourceMap) {
1003
- return new OriginalSource(sourceString, this.identifier());
1158
+ return new OriginalSource(
1159
+ sourceString,
1160
+ `webpack://${makePathsRelative(
1161
+ (compilation && compilation.compiler.context) || "",
1162
+ this.identifier(),
1163
+ compilation && compilation.compiler.root
1164
+ )}`
1165
+ );
1004
1166
  }
1005
1167
  return new RawSource(sourceString);
1006
1168
  }
@@ -1010,16 +1172,23 @@ module.exports = webpackEmptyAsyncContext;`;
1010
1172
  * @returns {CodeGenerationResult} result
1011
1173
  */
1012
1174
  codeGeneration(context) {
1013
- const { chunkGraph } = context;
1175
+ const { chunkGraph, compilation } = context;
1014
1176
  const sources = new Map();
1015
1177
  sources.set(
1016
1178
  "javascript",
1017
- this.getSource(this.getSourceString(this.options.mode, context))
1179
+ this.getSource(
1180
+ this.getSourceString(this.options.mode, context),
1181
+ compilation
1182
+ )
1018
1183
  );
1019
1184
  const set = new Set();
1020
- const allDeps = /** @type {ContextElementDependency[]} */ (
1021
- this.dependencies.concat(this.blocks.map(b => b.dependencies[0]))
1022
- );
1185
+ const allDeps =
1186
+ this.dependencies.length > 0
1187
+ ? /** @type {ContextElementDependency[]} */ (this.dependencies).slice()
1188
+ : [];
1189
+ for (const block of this.blocks)
1190
+ for (const dep of block.dependencies)
1191
+ allDeps.push(/** @type {ContextElementDependency} */ (dep));
1023
1192
  set.add(RuntimeGlobals.module);
1024
1193
  set.add(RuntimeGlobals.hasOwnProperty);
1025
1194
  if (allDeps.length > 0) {
@@ -1059,6 +1228,9 @@ module.exports = webpackEmptyAsyncContext;`;
1059
1228
  return size;
1060
1229
  }
1061
1230
 
1231
+ /**
1232
+ * @param {ObjectSerializerContext} context context
1233
+ */
1062
1234
  serialize(context) {
1063
1235
  const { write } = context;
1064
1236
  write(this._identifier);
@@ -1066,6 +1238,9 @@ module.exports = webpackEmptyAsyncContext;`;
1066
1238
  super.serialize(context);
1067
1239
  }
1068
1240
 
1241
+ /**
1242
+ * @param {ObjectDeserializerContext} context context
1243
+ */
1069
1244
  deserialize(context) {
1070
1245
  const { read } = context;
1071
1246
  this._identifier = read();