webpack 5.106.1 → 5.107.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 (600) hide show
  1. package/README.md +2 -2
  2. package/lib/APIPlugin.js +4 -2
  3. package/lib/AsyncDependenciesBlock.js +3 -0
  4. package/lib/AutomaticPrefetchPlugin.js +6 -1
  5. package/lib/BannerPlugin.js +10 -1
  6. package/lib/Cache.js +27 -5
  7. package/lib/CacheFacade.js +26 -0
  8. package/lib/Chunk.js +46 -0
  9. package/lib/ChunkGraph.js +111 -0
  10. package/lib/ChunkGroup.js +57 -13
  11. package/lib/ChunkTemplate.js +9 -0
  12. package/lib/CleanPlugin.js +14 -1
  13. package/lib/CodeGenerationResults.js +19 -0
  14. package/lib/CompatibilityPlugin.js +23 -8
  15. package/lib/Compilation.js +161 -27
  16. package/lib/Compiler.js +41 -17
  17. package/lib/ConcatenationScope.js +24 -1
  18. package/lib/ConditionalInitFragment.js +6 -0
  19. package/lib/ConstPlugin.js +4 -1
  20. package/lib/ContextExclusionPlugin.js +2 -1
  21. package/lib/ContextModule.js +14 -2
  22. package/lib/ContextModuleFactory.js +10 -0
  23. package/lib/ContextReplacementPlugin.js +4 -1
  24. package/lib/DefinePlugin.js +22 -9
  25. package/lib/DependenciesBlock.js +6 -1
  26. package/lib/Dependency.js +48 -4
  27. package/lib/DependencyTemplate.js +7 -1
  28. package/lib/DependencyTemplates.js +4 -0
  29. package/lib/DotenvPlugin.js +3 -0
  30. package/lib/DynamicEntryPlugin.js +3 -1
  31. package/lib/EntryOptionPlugin.js +3 -0
  32. package/lib/EntryPlugin.js +2 -1
  33. package/lib/Entrypoint.js +4 -0
  34. package/lib/EnvironmentPlugin.js +3 -2
  35. package/lib/ErrorHelpers.js +7 -0
  36. package/lib/EvalDevToolModulePlugin.js +3 -1
  37. package/lib/EvalSourceMapDevToolPlugin.js +11 -10
  38. package/lib/ExportsInfo.js +56 -2
  39. package/lib/ExportsInfoApiPlugin.js +2 -1
  40. package/lib/ExternalModule.js +114 -15
  41. package/lib/ExternalModuleFactoryPlugin.js +15 -0
  42. package/lib/ExternalsPlugin.js +2 -1
  43. package/lib/FileSystemInfo.js +291 -71
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -1
  45. package/lib/FlagDependencyExportsPlugin.js +4 -1
  46. package/lib/FlagDependencyUsagePlugin.js +5 -1
  47. package/lib/FlagEntryExportAsUsedPlugin.js +2 -1
  48. package/lib/Generator.js +16 -3
  49. package/lib/HotModuleReplacementPlugin.js +35 -9
  50. package/lib/IgnorePlugin.js +4 -2
  51. package/lib/IgnoreWarningsPlugin.js +2 -1
  52. package/lib/InitFragment.js +10 -0
  53. package/lib/JavascriptMetaInfoPlugin.js +2 -1
  54. package/lib/LibraryTemplatePlugin.js +2 -1
  55. package/lib/LoaderOptionsPlugin.js +3 -1
  56. package/lib/LoaderTargetPlugin.js +2 -1
  57. package/lib/MainTemplate.js +15 -0
  58. package/lib/ManifestPlugin.js +9 -2
  59. package/lib/Module.js +101 -19
  60. package/lib/ModuleFactory.js +6 -1
  61. package/lib/ModuleFilenameHelpers.js +3 -0
  62. package/lib/ModuleGraph.js +66 -0
  63. package/lib/ModuleGraphConnection.js +9 -0
  64. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  65. package/lib/ModuleSourceTypeConstants.js +32 -1
  66. package/lib/ModuleTemplate.js +8 -0
  67. package/lib/ModuleTypeConstants.js +12 -3
  68. package/lib/MultiCompiler.js +30 -2
  69. package/lib/MultiStats.js +8 -0
  70. package/lib/MultiWatching.js +3 -0
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +11 -2
  73. package/lib/NormalModule.js +43 -33
  74. package/lib/NormalModuleFactory.js +35 -2
  75. package/lib/NormalModuleReplacementPlugin.js +1 -1
  76. package/lib/NullFactory.js +1 -0
  77. package/lib/OptionsApply.js +1 -0
  78. package/lib/Parser.js +3 -1
  79. package/lib/PlatformPlugin.js +2 -1
  80. package/lib/PrefetchPlugin.js +2 -1
  81. package/lib/ProgressPlugin.js +158 -68
  82. package/lib/ProvidePlugin.js +3 -1
  83. package/lib/RawModule.js +12 -0
  84. package/lib/RecordIdsPlugin.js +8 -0
  85. package/lib/RequestShortener.js +8 -0
  86. package/lib/ResolverFactory.js +5 -0
  87. package/lib/RuntimeGlobals.js +6 -5
  88. package/lib/RuntimeModule.js +22 -7
  89. package/lib/RuntimePlugin.js +13 -0
  90. package/lib/RuntimeTemplate.js +35 -1
  91. package/lib/SelfModuleFactory.js +2 -0
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  93. package/lib/SourceMapDevToolPlugin.js +3 -1
  94. package/lib/Stats.js +5 -0
  95. package/lib/Template.js +20 -0
  96. package/lib/TemplatedPathPlugin.js +10 -3
  97. package/lib/UseStrictPlugin.js +2 -1
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +71 -3
  99. package/lib/WarnDeprecatedOptionPlugin.js +2 -2
  100. package/lib/WarnNoModeSetPlugin.js +17 -2
  101. package/lib/WatchIgnorePlugin.js +4 -1
  102. package/lib/Watching.js +16 -3
  103. package/lib/WebpackError.js +3 -74
  104. package/lib/WebpackIsIncludedPlugin.js +3 -1
  105. package/lib/WebpackOptionsApply.js +14 -1
  106. package/lib/WebpackOptionsDefaulter.js +1 -0
  107. package/lib/asset/AssetBytesGenerator.js +12 -2
  108. package/lib/asset/AssetBytesParser.js +1 -0
  109. package/lib/asset/AssetGenerator.js +42 -10
  110. package/lib/asset/AssetModulesPlugin.js +7 -2
  111. package/lib/asset/AssetParser.js +2 -0
  112. package/lib/asset/AssetSourceGenerator.js +12 -2
  113. package/lib/asset/AssetSourceParser.js +1 -0
  114. package/lib/asset/RawDataUrlModule.js +11 -0
  115. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  116. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  117. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  118. package/lib/buildChunkGraph.js +19 -6
  119. package/lib/cache/AddBuildDependenciesPlugin.js +2 -1
  120. package/lib/cache/AddManagedPathsPlugin.js +2 -1
  121. package/lib/cache/IdleFileCachePlugin.js +2 -1
  122. package/lib/cache/MemoryCachePlugin.js +1 -1
  123. package/lib/cache/MemoryWithGcCachePlugin.js +3 -1
  124. package/lib/cache/PackFileCacheStrategy.js +33 -4
  125. package/lib/cache/ResolverCachePlugin.js +10 -1
  126. package/lib/cache/getLazyHashedEtag.js +4 -0
  127. package/lib/cache/mergeEtags.js +2 -0
  128. package/lib/cli.js +33 -1
  129. package/lib/config/browserslistTargetHandler.js +2 -0
  130. package/lib/config/defaults.js +232 -12
  131. package/lib/config/normalization.js +15 -1
  132. package/lib/config/target.js +11 -0
  133. package/lib/container/ContainerEntryDependency.js +2 -0
  134. package/lib/container/ContainerEntryModule.js +12 -0
  135. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  136. package/lib/container/ContainerExposedDependency.js +4 -0
  137. package/lib/container/ContainerPlugin.js +2 -1
  138. package/lib/container/ContainerReferencePlugin.js +2 -1
  139. package/lib/container/FallbackDependency.js +4 -0
  140. package/lib/container/FallbackItemDependency.js +1 -0
  141. package/lib/container/FallbackModule.js +12 -0
  142. package/lib/container/FallbackModuleFactory.js +1 -0
  143. package/lib/container/ModuleFederationPlugin.js +3 -1
  144. package/lib/container/RemoteModule.js +13 -0
  145. package/lib/container/RemoteRuntimeModule.js +1 -0
  146. package/lib/container/RemoteToExternalDependency.js +1 -0
  147. package/lib/container/options.js +7 -0
  148. package/lib/css/CssGenerator.js +336 -100
  149. package/lib/css/CssInjectStyleRuntimeModule.js +45 -42
  150. package/lib/css/CssLoadingRuntimeModule.js +23 -4
  151. package/lib/{CssModule.js → css/CssModule.js} +21 -15
  152. package/lib/css/CssModulesPlugin.js +235 -89
  153. package/lib/css/CssParser.js +616 -261
  154. package/lib/css/walkCssTokens.js +179 -2
  155. package/lib/debug/ProfilingPlugin.js +19 -1
  156. package/lib/dependencies/AMDDefineDependency.js +7 -0
  157. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -0
  158. package/lib/dependencies/AMDPlugin.js +4 -1
  159. package/lib/dependencies/AMDRequireArrayDependency.js +6 -0
  160. package/lib/dependencies/AMDRequireContextDependency.js +3 -0
  161. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  162. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +14 -1
  163. package/lib/dependencies/AMDRequireDependency.js +4 -0
  164. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  165. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  166. package/lib/dependencies/CachedConstDependency.js +6 -1
  167. package/lib/dependencies/CommonJsDependencyHelpers.js +64 -0
  168. package/lib/dependencies/CommonJsExportRequireDependency.js +62 -10
  169. package/lib/dependencies/CommonJsExportsDependency.js +4 -0
  170. package/lib/dependencies/CommonJsExportsParserPlugin.js +9 -1
  171. package/lib/dependencies/CommonJsFullRequireDependency.js +36 -9
  172. package/lib/dependencies/CommonJsImportsParserPlugin.js +24 -3
  173. package/lib/dependencies/CommonJsPlugin.js +4 -1
  174. package/lib/dependencies/CommonJsRequireContextDependency.js +3 -0
  175. package/lib/dependencies/CommonJsRequireDependency.js +70 -4
  176. package/lib/dependencies/CommonJsSelfReferenceDependency.js +5 -0
  177. package/lib/dependencies/ConstDependency.js +6 -1
  178. package/lib/dependencies/ContextDependency.js +9 -2
  179. package/lib/dependencies/ContextDependencyHelpers.js +4 -1
  180. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  181. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  182. package/lib/dependencies/ContextElementDependency.js +4 -0
  183. package/lib/dependencies/CreateRequireParserPlugin.js +7 -1
  184. package/lib/dependencies/CreateScriptUrlDependency.js +4 -0
  185. package/lib/dependencies/CriticalDependencyWarning.js +2 -1
  186. package/lib/dependencies/CssIcssExportDependency.js +339 -66
  187. package/lib/dependencies/CssIcssImportDependency.js +53 -8
  188. package/lib/dependencies/CssIcssSymbolDependency.js +16 -4
  189. package/lib/dependencies/CssImportDependency.js +12 -0
  190. package/lib/dependencies/CssUrlDependency.js +32 -0
  191. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  192. package/lib/dependencies/DllEntryDependency.js +3 -0
  193. package/lib/dependencies/DynamicExports.js +5 -0
  194. package/lib/dependencies/EntryDependency.js +1 -0
  195. package/lib/dependencies/ExportsInfoDependency.js +6 -0
  196. package/lib/dependencies/ExternalModuleDependency.js +5 -0
  197. package/lib/dependencies/ExternalModuleInitFragment.js +3 -0
  198. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +4 -0
  199. package/lib/dependencies/HarmonyAcceptDependency.js +6 -0
  200. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  201. package/lib/dependencies/HarmonyCompatibilityDependency.js +1 -0
  202. package/lib/dependencies/HarmonyDetectionParserPlugin.js +4 -1
  203. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -0
  204. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  205. package/lib/dependencies/HarmonyExportExpressionDependency.js +27 -14
  206. package/lib/dependencies/HarmonyExportHeaderDependency.js +4 -0
  207. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -5
  208. package/lib/dependencies/HarmonyExportInitFragment.js +6 -0
  209. package/lib/dependencies/HarmonyExportSpecifierDependency.js +5 -0
  210. package/lib/dependencies/HarmonyExports.js +2 -0
  211. package/lib/dependencies/HarmonyImportDependency.js +21 -2
  212. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -1
  213. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -0
  214. package/lib/dependencies/HarmonyImportSpecifierDependency.js +18 -3
  215. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +5 -3
  216. package/lib/dependencies/HarmonyModulesPlugin.js +4 -1
  217. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -0
  218. package/lib/dependencies/HtmlInlineScriptDependency.js +133 -0
  219. package/lib/dependencies/HtmlInlineStyleDependency.js +101 -0
  220. package/lib/dependencies/HtmlScriptSrcDependency.js +318 -0
  221. package/lib/dependencies/HtmlSourceDependency.js +127 -0
  222. package/lib/dependencies/ImportContextDependency.js +4 -0
  223. package/lib/dependencies/ImportDependency.js +5 -0
  224. package/lib/dependencies/ImportEagerDependency.js +2 -0
  225. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  226. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -1
  227. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  228. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  229. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  230. package/lib/dependencies/ImportMetaPlugin.js +6 -0
  231. package/lib/dependencies/ImportParserPlugin.js +9 -2
  232. package/lib/dependencies/ImportPhase.js +7 -3
  233. package/lib/dependencies/ImportPlugin.js +2 -1
  234. package/lib/dependencies/ImportWeakDependency.js +2 -0
  235. package/lib/dependencies/JsonExportsDependency.js +6 -1
  236. package/lib/dependencies/LoaderDependency.js +2 -0
  237. package/lib/dependencies/LoaderImportDependency.js +2 -0
  238. package/lib/dependencies/LoaderPlugin.js +4 -1
  239. package/lib/dependencies/LocalModule.js +4 -0
  240. package/lib/dependencies/LocalModuleDependency.js +4 -0
  241. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  242. package/lib/dependencies/ModuleDecoratorDependency.js +7 -1
  243. package/lib/dependencies/ModuleDependency.js +7 -0
  244. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  245. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  246. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  247. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  248. package/lib/dependencies/ModuleInitFragmentDependency.js +4 -0
  249. package/lib/dependencies/NullDependency.js +2 -0
  250. package/lib/dependencies/PrefetchDependency.js +1 -0
  251. package/lib/dependencies/ProvidedDependency.js +6 -1
  252. package/lib/dependencies/PureExpressionDependency.js +7 -1
  253. package/lib/dependencies/RequireContextDependency.js +1 -0
  254. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -0
  255. package/lib/dependencies/RequireContextPlugin.js +2 -1
  256. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  257. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -0
  258. package/lib/dependencies/RequireEnsureDependency.js +4 -0
  259. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  260. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  261. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  262. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  263. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +4 -1
  264. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  265. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  266. package/lib/dependencies/RequireResolveContextDependency.js +3 -0
  267. package/lib/dependencies/RequireResolveDependency.js +1 -0
  268. package/lib/dependencies/RequireResolveHeaderDependency.js +5 -0
  269. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -1
  270. package/lib/dependencies/StaticExportsDependency.js +3 -0
  271. package/lib/dependencies/SystemPlugin.js +5 -2
  272. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  273. package/lib/dependencies/URLContextDependency.js +3 -0
  274. package/lib/dependencies/URLDependency.js +6 -0
  275. package/lib/dependencies/URLPlugin.js +2 -0
  276. package/lib/dependencies/UnsupportedDependency.js +4 -0
  277. package/lib/dependencies/WebAssemblyExportImportedDependency.js +4 -0
  278. package/lib/dependencies/WebAssemblyImportDependency.js +5 -2
  279. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -0
  280. package/lib/dependencies/WorkerDependency.js +6 -1
  281. package/lib/dependencies/WorkerPlugin.js +11 -3
  282. package/lib/dependencies/getFunctionExpression.js +1 -0
  283. package/lib/dependencies/processExportInfo.js +1 -0
  284. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +44 -31
  285. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +7 -4
  286. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +4 -3
  287. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +6 -5
  288. package/lib/{DllModule.js → dll/DllModule.js} +35 -24
  289. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  290. package/lib/{DllPlugin.js → dll/DllPlugin.js} +8 -6
  291. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +23 -18
  292. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +13 -10
  293. package/lib/electron/ElectronTargetPlugin.js +2 -1
  294. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  295. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  296. package/lib/errors/BuildCycleError.js +1 -1
  297. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  298. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  299. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  300. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +4 -2
  301. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +4 -4
  302. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +11 -5
  303. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +6 -4
  304. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +4 -3
  305. package/lib/errors/JSONParseError.js +114 -0
  306. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +8 -5
  307. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +2 -2
  308. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +5 -4
  309. package/lib/{ModuleError.js → errors/ModuleError.js} +7 -5
  310. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +1 -1
  311. package/lib/{ModuleNotFoundError.js → errors/ModuleNotFoundError.js} +3 -2
  312. package/lib/{ModuleParseError.js → errors/ModuleParseError.js} +11 -6
  313. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +2 -1
  314. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +2 -1
  315. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +8 -5
  316. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +5 -4
  317. package/lib/errors/NonErrorEmittedError.js +28 -0
  318. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +8 -2
  319. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  320. package/lib/errors/WebpackError.js +84 -0
  321. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  322. package/lib/esm/ModuleChunkFormatPlugin.js +5 -1
  323. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -1
  324. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +5 -0
  325. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  326. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  327. package/lib/hmr/LazyCompilationPlugin.js +20 -1
  328. package/lib/hmr/lazyCompilationBackend.js +2 -0
  329. package/lib/html/HtmlGenerator.js +379 -0
  330. package/lib/html/HtmlModulesPlugin.js +433 -0
  331. package/lib/html/HtmlParser.js +1489 -0
  332. package/lib/html/walkHtmlTokens.js +2733 -0
  333. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  334. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  335. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  336. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  337. package/lib/ids/IdHelpers.js +22 -1
  338. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  339. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  340. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  341. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  342. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  343. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  344. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  345. package/lib/index.js +39 -15
  346. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
  347. package/lib/javascript/BasicEvaluatedExpression.js +4 -2
  348. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  349. package/lib/javascript/ChunkHelpers.js +1 -0
  350. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  351. package/lib/javascript/EnableChunkLoadingPlugin.js +5 -1
  352. package/lib/javascript/JavascriptGenerator.js +10 -0
  353. package/lib/javascript/JavascriptModulesPlugin.js +112 -9
  354. package/lib/javascript/JavascriptParser.js +360 -16
  355. package/lib/javascript/JavascriptParserHelpers.js +7 -1
  356. package/lib/javascript/StartupHelpers.js +5 -0
  357. package/lib/json/JsonData.js +5 -0
  358. package/lib/json/JsonGenerator.js +21 -0
  359. package/lib/json/JsonModulesPlugin.js +1 -1
  360. package/lib/json/JsonParser.js +14 -25
  361. package/lib/library/AbstractLibraryPlugin.js +17 -2
  362. package/lib/library/AmdLibraryPlugin.js +8 -0
  363. package/lib/library/AssignLibraryPlugin.js +16 -0
  364. package/lib/library/EnableLibraryPlugin.js +8 -2
  365. package/lib/library/ExportPropertyLibraryPlugin.js +9 -0
  366. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +1 -1
  367. package/lib/library/JsonpLibraryPlugin.js +8 -0
  368. package/lib/library/ModuleLibraryPlugin.js +86 -1
  369. package/lib/library/SystemLibraryPlugin.js +8 -0
  370. package/lib/library/UmdLibraryPlugin.js +16 -0
  371. package/lib/logging/Logger.js +17 -0
  372. package/lib/logging/createConsoleLogger.js +7 -0
  373. package/lib/logging/runtime.js +2 -0
  374. package/lib/logging/truncateArgs.js +2 -0
  375. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  376. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  377. package/lib/node/NodeSourcePlugin.js +1 -1
  378. package/lib/node/NodeTargetPlugin.js +2 -1
  379. package/lib/node/NodeTemplatePlugin.js +3 -1
  380. package/lib/node/NodeWatchFileSystem.js +2 -0
  381. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +3 -0
  382. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +4 -1
  383. package/lib/node/ReadFileCompileWasmPlugin.js +4 -1
  384. package/lib/node/RequireChunkLoadingRuntimeModule.js +3 -0
  385. package/lib/node/nodeConsole.js +116 -64
  386. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  387. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  388. package/lib/optimize/ConcatenatedModule.js +62 -6
  389. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  390. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -1
  391. package/lib/optimize/InnerGraph.js +16 -1
  392. package/lib/optimize/InnerGraphPlugin.js +14 -2
  393. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  394. package/lib/optimize/MangleExportsPlugin.js +5 -1
  395. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  396. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  397. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  398. package/lib/optimize/ModuleConcatenationPlugin.js +36 -8
  399. package/lib/optimize/RealContentHashPlugin.js +104 -26
  400. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  401. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  402. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  403. package/lib/optimize/SideEffectsFlagPlugin.js +118 -4
  404. package/lib/optimize/SplitChunksPlugin.js +50 -2
  405. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  406. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  407. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  408. package/lib/performance/SizeLimitsPlugin.js +8 -2
  409. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  410. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +6 -0
  411. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  412. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  413. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -0
  414. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  415. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  416. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  417. package/lib/rules/RuleSetCompiler.js +18 -0
  418. package/lib/rules/UseEffectRulePlugin.js +10 -3
  419. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -0
  420. package/lib/runtime/AutoPublicPathRuntimeModule.js +1 -0
  421. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  422. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  423. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -0
  424. package/lib/runtime/CompatRuntimeModule.js +2 -0
  425. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -0
  426. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  427. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  428. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -0
  429. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  430. package/lib/runtime/GetChunkFilenameRuntimeModule.js +1 -0
  431. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  432. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  433. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -0
  434. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  435. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -0
  436. package/lib/runtime/HelperRuntimeModule.js +5 -0
  437. package/lib/runtime/LoadScriptRuntimeModule.js +1 -0
  438. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +121 -13
  439. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -0
  440. package/lib/runtime/NonceRuntimeModule.js +1 -0
  441. package/lib/runtime/OnChunksLoadedRuntimeModule.js +1 -0
  442. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  443. package/lib/runtime/RelativeUrlRuntimeModule.js +1 -0
  444. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  445. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +35 -0
  446. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  447. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -0
  448. package/lib/runtime/StartupEntrypointRuntimeModule.js +1 -0
  449. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  450. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  451. package/lib/schemes/DataUriPlugin.js +14 -2
  452. package/lib/schemes/FileUriPlugin.js +1 -1
  453. package/lib/schemes/HttpUriPlugin.js +43 -1
  454. package/lib/schemes/VirtualUrlPlugin.js +7 -2
  455. package/lib/serialization/AggregateErrorSerializer.js +2 -0
  456. package/lib/serialization/ArraySerializer.js +2 -0
  457. package/lib/serialization/BinaryMiddleware.js +20 -1
  458. package/lib/serialization/DateObjectSerializer.js +2 -0
  459. package/lib/serialization/ErrorObjectSerializer.js +3 -0
  460. package/lib/serialization/FileMiddleware.js +21 -0
  461. package/lib/serialization/MapObjectSerializer.js +2 -0
  462. package/lib/serialization/NullPrototypeObjectSerializer.js +2 -0
  463. package/lib/serialization/ObjectMiddleware.js +23 -0
  464. package/lib/serialization/PlainObjectSerializer.js +7 -0
  465. package/lib/serialization/RegExpObjectSerializer.js +2 -0
  466. package/lib/serialization/Serializer.js +5 -0
  467. package/lib/serialization/SerializerMiddleware.js +14 -2
  468. package/lib/serialization/SetObjectSerializer.js +2 -0
  469. package/lib/serialization/SingleItemMiddleware.js +3 -0
  470. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  471. package/lib/sharing/ConsumeSharedModule.js +15 -0
  472. package/lib/sharing/ConsumeSharedPlugin.js +8 -3
  473. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -4
  474. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  475. package/lib/sharing/ProvideSharedDependency.js +4 -0
  476. package/lib/sharing/ProvideSharedModule.js +12 -1
  477. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  478. package/lib/sharing/ProvideSharedPlugin.js +5 -2
  479. package/lib/sharing/SharePlugin.js +2 -1
  480. package/lib/sharing/ShareRuntimeModule.js +1 -0
  481. package/lib/sharing/resolveMatchedConfigs.js +4 -1
  482. package/lib/sharing/utils.js +8 -0
  483. package/lib/stats/DefaultStatsFactoryPlugin.js +58 -3
  484. package/lib/stats/DefaultStatsPresetPlugin.js +12 -2
  485. package/lib/stats/DefaultStatsPrinterPlugin.js +38 -2
  486. package/lib/stats/StatsFactory.js +13 -1
  487. package/lib/stats/StatsPrinter.js +7 -0
  488. package/lib/typescript/TypeScriptPlugin.js +210 -0
  489. package/lib/url/URLParserPlugin.js +8 -2
  490. package/lib/util/AppendOnlyStackedSet.js +15 -0
  491. package/lib/util/ArrayHelpers.js +1 -0
  492. package/lib/util/ArrayQueue.js +10 -5
  493. package/lib/util/AsyncQueue.js +22 -2
  494. package/lib/util/Hash.js +2 -2
  495. package/lib/util/IterableHelpers.js +3 -0
  496. package/lib/util/LazyBucketSortedSet.js +21 -0
  497. package/lib/util/LazySet.js +39 -0
  498. package/lib/util/LocConverter.js +53 -0
  499. package/lib/util/ParallelismFactorCalculator.js +1 -0
  500. package/lib/util/Queue.js +6 -3
  501. package/lib/util/Semaphore.js +14 -1
  502. package/lib/util/SetHelpers.js +3 -0
  503. package/lib/util/SortableSet.js +7 -1
  504. package/lib/util/StackedCacheMap.js +20 -3
  505. package/lib/util/StackedMap.js +45 -0
  506. package/lib/util/StringXor.js +1 -1
  507. package/lib/util/TupleQueue.js +7 -3
  508. package/lib/util/TupleSet.js +13 -0
  509. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  510. package/lib/util/WeakTupleMap.js +33 -0
  511. package/lib/util/binarySearchBounds.js +1 -0
  512. package/lib/util/cleverMerge.js +19 -2
  513. package/lib/util/comparators.js +34 -3
  514. package/lib/util/compileBooleanMatcher.js +9 -0
  515. package/lib/util/concatenate.js +9 -3
  516. package/lib/util/conventions.js +46 -1
  517. package/lib/util/createMappings.js +118 -0
  518. package/lib/util/dataURL.js +1 -0
  519. package/lib/util/deprecation.js +19 -0
  520. package/lib/util/deterministicGrouping.js +20 -0
  521. package/lib/util/extractSourceMap.js +1 -0
  522. package/lib/util/extractUrlAndGlobal.js +1 -0
  523. package/lib/util/findGraphRoots.js +5 -0
  524. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  525. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +4 -1
  526. package/lib/util/fs.js +71 -8
  527. package/lib/util/generateDebugId.js +1 -0
  528. package/lib/util/hash/BatchedHash.js +1 -0
  529. package/lib/util/hash/BulkUpdateHash.js +1 -0
  530. package/lib/util/hash/hash-digest.js +8 -0
  531. package/lib/util/hash/md4.js +1 -1
  532. package/lib/util/hash/wasm-hash.js +5 -0
  533. package/lib/util/hash/xxhash64.js +1 -1
  534. package/lib/util/identifier.js +67 -0
  535. package/lib/util/internalSerializables.js +35 -19
  536. package/lib/util/magicComment.js +10 -6
  537. package/lib/util/makeSerializable.js +6 -0
  538. package/lib/util/memoize.js +2 -0
  539. package/lib/util/mimeTypes.js +176 -0
  540. package/lib/util/nonNumericOnlyHash.js +1 -0
  541. package/lib/util/parseJson.js +41 -0
  542. package/lib/util/processAsyncTree.js +8 -0
  543. package/lib/util/property.js +1 -0
  544. package/lib/util/registerExternalSerializer.js +20 -0
  545. package/lib/util/removeBOM.js +1 -0
  546. package/lib/util/runtime.js +32 -0
  547. package/lib/util/semver.js +15 -0
  548. package/lib/util/serialization.js +2 -0
  549. package/lib/util/smartGrouping.js +8 -0
  550. package/lib/util/source.js +23 -0
  551. package/lib/util/topologicalSort.js +69 -0
  552. package/lib/validateSchema.js +1 -0
  553. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  554. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +1 -0
  555. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -0
  556. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  557. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -0
  558. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +12 -3
  559. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
  560. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +12 -1
  561. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +6 -3
  562. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +1 -0
  563. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
  564. package/lib/wasm-sync/WebAssemblyGenerator.js +26 -1
  565. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +7 -3
  566. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  567. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -1
  568. package/lib/wasm-sync/WebAssemblyParser.js +2 -0
  569. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  570. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -1
  571. package/lib/web/FetchCompileWasmPlugin.js +13 -1
  572. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  573. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -0
  574. package/lib/web/JsonpTemplatePlugin.js +2 -1
  575. package/lib/webpack.js +13 -1
  576. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  577. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -0
  578. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  579. package/package.json +31 -31
  580. package/schemas/WebpackOptions.check.js +1 -1
  581. package/schemas/WebpackOptions.json +161 -57
  582. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  583. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  584. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  585. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  586. package/schemas/plugins/ProgressPlugin.json +22 -0
  587. package/schemas/plugins/{DllReferencePlugin.check.d.ts → css/CssAutoOrModuleParserOptions.check.d.ts} +1 -1
  588. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  589. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  590. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  591. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  592. package/types.d.ts +5325 -353
  593. package/lib/CaseSensitiveModulesWarning.js +0 -72
  594. package/lib/GraphHelpers.js +0 -46
  595. package/lib/NoModeWarning.js +0 -23
  596. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  597. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  598. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  599. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  600. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -8,7 +8,6 @@
8
8
  const { SyncBailHook } = require("tapable");
9
9
  const { OriginalSource, RawSource } = require("webpack-sources");
10
10
  const ConcatenationScope = require("./ConcatenationScope");
11
- const EnvironmentNotSupportAsyncWarning = require("./EnvironmentNotSupportAsyncWarning");
12
11
  const { UsageState } = require("./ExportsInfo");
13
12
  const InitFragment = require("./InitFragment");
14
13
  const Module = require("./Module");
@@ -22,7 +21,9 @@ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
22
21
  const RuntimeGlobals = require("./RuntimeGlobals");
23
22
  const Template = require("./Template");
24
23
  const { DEFAULTS } = require("./config/defaults");
24
+ const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
25
25
  const StaticExportsDependency = require("./dependencies/StaticExportsDependency");
26
+ const EnvironmentNotSupportAsyncWarning = require("./errors/EnvironmentNotSupportAsyncWarning");
26
27
  const createHash = require("./util/createHash");
27
28
  const extractUrlAndGlobal = require("./util/extractUrlAndGlobal");
28
29
  const makeSerializable = require("./util/makeSerializable");
@@ -62,19 +63,21 @@ const { register } = require("./util/serialization");
62
63
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
63
64
  /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
64
65
  /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
66
+ /** @typedef {import("./dependencies/ImportPhase").ImportPhaseType} ImportPhaseType */
65
67
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
66
68
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
67
69
  /** @typedef {import("./util/Hash")} Hash */
68
70
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
69
71
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
70
72
 
71
- /** @typedef {{ attributes?: ImportAttributes, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
73
+ /** @typedef {{ attributes?: ImportAttributes, phase?: ImportPhaseType, externalType: "import" | "module" | undefined }} ImportDependencyMeta */
72
74
  /** @typedef {{ layer?: string, supports?: string, media?: string }} CssImportDependencyMeta */
73
75
  /** @typedef {{ sourceType: "css-url" }} AssetDependencyMeta */
74
76
 
75
77
  /** @typedef {ImportDependencyMeta | CssImportDependencyMeta | AssetDependencyMeta} DependencyMeta */
76
78
 
77
79
  /**
80
+ * Defines the source data type used by this module.
78
81
  * @typedef {object} SourceData
79
82
  * @property {boolean=} iife
80
83
  * @property {string=} init
@@ -98,6 +101,7 @@ const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
98
101
  const EMPTY_RUNTIME_REQUIREMENTS = new Set();
99
102
 
100
103
  /**
104
+ * Gets source for global variable external.
101
105
  * @param {string | string[]} variableName the variable name or path
102
106
  * @param {string} type the module system
103
107
  * @returns {SourceData} the generated source
@@ -121,6 +125,7 @@ const getSourceForGlobalVariableExternal = (variableName, type) => {
121
125
  /** @typedef {string | string[]} ModuleAndSpecifiers */
122
126
 
123
127
  /**
128
+ * Gets source for common js external.
124
129
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
125
130
  * @returns {SourceData} the generated source
126
131
  */
@@ -140,6 +145,7 @@ const getSourceForCommonJsExternal = (moduleAndSpecifiers) => {
140
145
  };
141
146
 
142
147
  /**
148
+ * Gets external module node commonjs init fragment.
143
149
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
144
150
  * @returns {InitFragment<ChunkRenderContext>} code
145
151
  */
@@ -157,6 +163,7 @@ const getExternalModuleNodeCommonjsInitFragment = (runtimeTemplate) => {
157
163
  };
158
164
 
159
165
  /**
166
+ * Gets source for common js external in node module.
160
167
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
161
168
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
162
169
  * @returns {SourceData} the generated source
@@ -186,6 +193,7 @@ const getSourceForCommonJsExternalInNodeModule = (
186
193
  };
187
194
 
188
195
  /**
196
+ * Gets source for import external.
189
197
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
190
198
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
191
199
  * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
@@ -196,15 +204,25 @@ const getSourceForImportExternal = (
196
204
  runtimeTemplate,
197
205
  dependencyMeta
198
206
  ) => {
199
- const importName = runtimeTemplate.outputOptions.importFunctionName;
207
+ const baseImportName = runtimeTemplate.outputOptions.importFunctionName;
200
208
  if (
201
209
  !runtimeTemplate.supportsDynamicImport() &&
202
- (importName === "import" || importName === "module-import")
210
+ (baseImportName === "import" || baseImportName === "module-import")
203
211
  ) {
204
212
  throw new Error(
205
213
  "The target environment doesn't support 'import()' so it's not possible to use external type 'import'"
206
214
  );
207
215
  }
216
+ const phase = dependencyMeta && dependencyMeta.phase;
217
+ // `import.defer(…)` and `import.source(…)` are only valid forms of the
218
+ // native `import(…)` function, so we only emit the phase suffix when the
219
+ // importFunctionName is the default `"import"`.
220
+ const importName =
221
+ baseImportName === "import" && ImportPhaseUtils.isDefer(phase)
222
+ ? "import.defer"
223
+ : baseImportName === "import" && ImportPhaseUtils.isSource(phase)
224
+ ? "import.source"
225
+ : baseImportName;
208
226
  const attributes =
209
227
  dependencyMeta && dependencyMeta.attributes
210
228
  ? dependencyMeta.attributes._isLegacyAssert
@@ -240,6 +258,7 @@ const getSourceForImportExternal = (
240
258
  };
241
259
 
242
260
  /**
261
+ * Import assertion replacer.
243
262
  * @param {string} key key
244
263
  * @param {ImportAttributes | string | boolean | undefined} value value
245
264
  * @returns {ImportAttributes | string | boolean | undefined} replaced value
@@ -253,10 +272,12 @@ const importAssertionReplacer = (key, value) => {
253
272
  };
254
273
 
255
274
  /**
275
+ * Represents ModuleExternalInitFragment.
256
276
  * @extends {InitFragment<GenerateContext>}
257
277
  */
258
278
  class ModuleExternalInitFragment extends InitFragment {
259
279
  /**
280
+ * Creates an instance of ModuleExternalInitFragment.
260
281
  * @param {string} request import source
261
282
  * @param {Imported} imported the imported specifiers
262
283
  * @param {string=} ident recomputed ident
@@ -284,7 +305,9 @@ class ModuleExternalInitFragment extends InitFragment {
284
305
  "",
285
306
  InitFragment.STAGE_HARMONY_IMPORTS,
286
307
  0,
287
- `external module import ${ident} ${imported === true ? imported : imported.join(" ")}`
308
+ `external module import ${ident} ${
309
+ imported === true ? imported : imported.join(" ")
310
+ }`
288
311
  );
289
312
  this._ident = ident;
290
313
  this._request = request;
@@ -294,6 +317,7 @@ class ModuleExternalInitFragment extends InitFragment {
294
317
  }
295
318
 
296
319
  /**
320
+ * Returns imported.
297
321
  * @returns {Imported} imported
298
322
  */
299
323
  getImported() {
@@ -301,6 +325,7 @@ class ModuleExternalInitFragment extends InitFragment {
301
325
  }
302
326
 
303
327
  /**
328
+ * Updates imported using the provided imported.
304
329
  * @param {Imported} imported imported
305
330
  */
306
331
  setImported(imported) {
@@ -308,6 +333,7 @@ class ModuleExternalInitFragment extends InitFragment {
308
333
  }
309
334
 
310
335
  /**
336
+ * Returns the source code that will be included as initialization code.
311
337
  * @param {GenerateContext} context context
312
338
  * @returns {string | Source | undefined} the source code that will be included as initialization code
313
339
  */
@@ -320,23 +346,34 @@ class ModuleExternalInitFragment extends InitFragment {
320
346
  } = this;
321
347
  const attributes =
322
348
  dependencyMeta && dependencyMeta.attributes
323
- ? dependencyMeta.attributes._isLegacyAssert &&
324
- dependencyMeta.attributes._isLegacyAssert
349
+ ? dependencyMeta.attributes._isLegacyAssert
325
350
  ? ` assert ${JSON.stringify(
326
351
  dependencyMeta.attributes,
327
352
  importAssertionReplacer
328
353
  )}`
329
354
  : ` with ${JSON.stringify(dependencyMeta.attributes)}`
330
355
  : "";
356
+ const phase = dependencyMeta && dependencyMeta.phase;
331
357
  let content = "";
332
358
  if (imported === true) {
333
359
  // namespace
334
- content = `import * as ${identifier} from ${JSON.stringify(request)}${
335
- attributes
336
- };\n`;
360
+ const phaseKeyword = ImportPhaseUtils.isDefer(phase) ? "defer " : "";
361
+ content = `import ${phaseKeyword}* as ${identifier} from ${JSON.stringify(
362
+ request
363
+ )}${attributes};\n`;
337
364
  } else if (imported.length === 0) {
338
365
  // just import, no use
339
366
  content = `import ${JSON.stringify(request)}${attributes};\n`;
367
+ } else if (
368
+ ImportPhaseUtils.isSource(phase) &&
369
+ imported.length === 1 &&
370
+ imported[0][0] === "default"
371
+ ) {
372
+ // `import source x from "…"` — the source-phase form binds the source
373
+ // object directly to a single identifier (no namespace, no destructuring).
374
+ content = `import source ${imported[0][1]} from ${JSON.stringify(
375
+ request
376
+ )}${attributes};\n`;
340
377
  } else {
341
378
  content = `import { ${imported
342
379
  .map(([name, finalName]) => {
@@ -355,6 +392,7 @@ class ModuleExternalInitFragment extends InitFragment {
355
392
  }
356
393
 
357
394
  /**
395
+ * Returns identifier.
358
396
  * @param {string} ident ident
359
397
  * @returns {string} identifier
360
398
  */
@@ -363,6 +401,7 @@ class ModuleExternalInitFragment extends InitFragment {
363
401
  }
364
402
 
365
403
  /**
404
+ * Returns normalized imported.
366
405
  * @param {Imported} imported imported
367
406
  * @returns {Imported} normalized imported
368
407
  */
@@ -395,6 +434,7 @@ register(
395
434
  );
396
435
 
397
436
  /**
437
+ * Generates module remapping.
398
438
  * @param {string} input input
399
439
  * @param {ExportsInfo} exportsInfo the exports info
400
440
  * @param {RuntimeSpec=} runtime the runtime
@@ -437,6 +477,7 @@ const generateModuleRemapping = (
437
477
  };
438
478
 
439
479
  /**
480
+ * Gets source for module external.
440
481
  * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
441
482
  * @param {ExportsInfo} exportsInfo exports info of this module
442
483
  * @param {RuntimeSpec} runtime the runtime
@@ -453,6 +494,7 @@ const getSourceForModuleExternal = (
453
494
  dependencyMeta,
454
495
  concatenationScope
455
496
  ) => {
497
+ const phase = dependencyMeta && dependencyMeta.phase;
456
498
  /** @type {Imported} */
457
499
  let imported = true;
458
500
  if (concatenationScope) {
@@ -481,6 +523,14 @@ const getSourceForModuleExternal = (
481
523
  imported = true;
482
524
  }
483
525
 
526
+ // `import defer …` is only valid as `import defer * as ns from "…"`, so
527
+ // keep the namespace form even if usage analysis would otherwise narrow
528
+ // the import down to specific names. Defer + concatenation is semantically
529
+ // at odds (lazy vs. eager), so we preserve the user-written shape here.
530
+ if (ImportPhaseUtils.isDefer(phase)) {
531
+ imported = true;
532
+ }
533
+
484
534
  const initFragment = new ModuleExternalInitFragment(
485
535
  moduleAndSpecifiers[0],
486
536
  imported,
@@ -530,6 +580,7 @@ const getSourceForModuleExternal = (
530
580
  };
531
581
 
532
582
  /**
583
+ * Gets source for script external.
533
584
  * @param {string | string[]} urlAndGlobal the script request
534
585
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
535
586
  * @returns {SourceData} the generated source
@@ -567,6 +618,7 @@ const getSourceForScriptExternal = (urlAndGlobal, runtimeTemplate) => {
567
618
  };
568
619
 
569
620
  /**
621
+ * Checks external variable.
570
622
  * @param {string} variableName the variable name to check
571
623
  * @param {string} request the request path
572
624
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -578,6 +630,7 @@ const checkExternalVariable = (variableName, request, runtimeTemplate) =>
578
630
  )} }\n`;
579
631
 
580
632
  /**
633
+ * Gets source for amd or umd external.
581
634
  * @param {ModuleId | string} id the module id
582
635
  * @param {boolean} optional true, if the module is optional
583
636
  * @param {string | string[]} request the request path
@@ -606,6 +659,7 @@ const getSourceForAmdOrUmdExternal = (
606
659
  };
607
660
 
608
661
  /**
662
+ * Gets source for default case.
609
663
  * @param {boolean} optional true, if the module is optional
610
664
  * @param {string | string[]} request the request path
611
665
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -631,6 +685,7 @@ const getSourceForDefaultCase = (optional, request, runtimeTemplate) => {
631
685
  /** @typedef {string | string[] | RequestRecord} ExternalModuleRequest */
632
686
 
633
687
  /**
688
+ * Defines the external module hooks type used by this module.
634
689
  * @typedef {object} ExternalModuleHooks
635
690
  * @property {SyncBailHook<[Chunk, Compilation], boolean>} chunkCondition
636
691
  */
@@ -640,6 +695,7 @@ const compilationHooksMap = new WeakMap();
640
695
 
641
696
  class ExternalModule extends Module {
642
697
  /**
698
+ * Creates an instance of ExternalModule.
643
699
  * @param {ExternalModuleRequest} request request
644
700
  * @param {ExternalsType} type type
645
701
  * @param {string} userRequest user request
@@ -660,6 +716,7 @@ class ExternalModule extends Module {
660
716
  }
661
717
 
662
718
  /**
719
+ * Returns the attached hooks.
663
720
  * @param {Compilation} compilation the compilation
664
721
  * @returns {ExternalModuleHooks} the attached hooks
665
722
  */
@@ -675,6 +732,7 @@ class ExternalModule extends Module {
675
732
  }
676
733
 
677
734
  /**
735
+ * Returns the source types this module can generate.
678
736
  * @returns {SourceTypes} types available (do not mutate)
679
737
  */
680
738
  getSourceTypes() {
@@ -693,6 +751,7 @@ class ExternalModule extends Module {
693
751
  }
694
752
 
695
753
  /**
754
+ * Gets the library identifier.
696
755
  * @param {LibIdentOptions} options options
697
756
  * @returns {LibIdent | null} an identifier for library inclusion
698
757
  */
@@ -701,6 +760,7 @@ class ExternalModule extends Module {
701
760
  }
702
761
 
703
762
  /**
763
+ * Returns true if the module can be placed in the chunk.
704
764
  * @param {Chunk} chunk the chunk which condition should be checked
705
765
  * @param {Compilation} compilation the compilation
706
766
  * @returns {boolean} true if the module can be placed in the chunk
@@ -721,13 +781,29 @@ class ExternalModule extends Module {
721
781
  }
722
782
 
723
783
  /**
784
+ * Returns the unique identifier used to reference this module.
724
785
  * @returns {string} a unique identifier of the module
725
786
  */
726
787
  identifier() {
727
- return `external ${this._resolveExternalType(this.externalType)} ${JSON.stringify(this.request)}`;
788
+ let id = `external ${this._resolveExternalType(
789
+ this.externalType
790
+ )} ${JSON.stringify(this.request)}`;
791
+ const meta = /** @type {ImportDependencyMeta | undefined} */ (
792
+ this.dependencyMeta
793
+ );
794
+ if (meta) {
795
+ if (meta.phase) {
796
+ id += `|phase=${ImportPhaseUtils.stringify(meta.phase)}`;
797
+ }
798
+ if (meta.attributes) {
799
+ id += `|attributes=${JSON.stringify(meta.attributes)}`;
800
+ }
801
+ }
802
+ return id;
728
803
  }
729
804
 
730
805
  /**
806
+ * Returns a human-readable identifier for this module.
731
807
  * @param {RequestShortener} requestShortener the request shortener
732
808
  * @returns {string} a user readable identifier of the module
733
809
  */
@@ -736,6 +812,7 @@ class ExternalModule extends Module {
736
812
  }
737
813
 
738
814
  /**
815
+ * Checks whether the module needs to be rebuilt for the current build state.
739
816
  * @param {NeedBuildContext} context context info
740
817
  * @param {NeedBuildCallback} callback callback function, returns true, if the module needs a rebuild
741
818
  * @returns {void}
@@ -745,6 +822,7 @@ class ExternalModule extends Module {
745
822
  }
746
823
 
747
824
  /**
825
+ * Builds the module using the provided compilation context.
748
826
  * @param {WebpackOptions} options webpack options
749
827
  * @param {Compilation} compilation the compilation
750
828
  * @param {ResolverWithOptions} resolver the resolver
@@ -838,6 +916,7 @@ class ExternalModule extends Module {
838
916
  }
839
917
 
840
918
  /**
919
+ * Returns the reason this module cannot be concatenated, when one exists.
841
920
  * @param {ConcatenationBailoutReasonContext} context context
842
921
  * @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
843
922
  */
@@ -855,6 +934,7 @@ class ExternalModule extends Module {
855
934
  }
856
935
 
857
936
  /**
937
+ * Get request and external type.
858
938
  * @private
859
939
  * @returns {{ request: string | string[], externalType: ExternalsType }} the request and external type
860
940
  */
@@ -901,6 +981,7 @@ class ExternalModule extends Module {
901
981
  }
902
982
 
903
983
  /**
984
+ * Returns the source data.
904
985
  * @private
905
986
  * @param {string | string[]} request request
906
987
  * @param {ExternalsType} externalType the external type
@@ -1007,6 +1088,7 @@ class ExternalModule extends Module {
1007
1088
  }
1008
1089
 
1009
1090
  /**
1091
+ * Generates code and runtime requirements for this module.
1010
1092
  * @param {CodeGenerationContext} context context for code generation
1011
1093
  * @returns {CodeGenerationResult} result
1012
1094
  */
@@ -1092,7 +1174,9 @@ class ExternalModule extends Module {
1092
1174
  scope.registerRawExport(specifier, finalName);
1093
1175
  }
1094
1176
  } else if (concatenationScope) {
1095
- sourceString = `${runtimeTemplate.renderConst()} ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
1177
+ sourceString = `${runtimeTemplate.renderConst()} ${
1178
+ ConcatenationScope.NAMESPACE_OBJECT_EXPORT
1179
+ } = ${sourceString};`;
1096
1180
  concatenationScope.registerNamespaceExport(
1097
1181
  ConcatenationScope.NAMESPACE_OBJECT_EXPORT
1098
1182
  );
@@ -1143,6 +1227,7 @@ class ExternalModule extends Module {
1143
1227
  }
1144
1228
 
1145
1229
  /**
1230
+ * Returns the estimated size for the requested source type.
1146
1231
  * @param {string=} type the source type for which the size should be estimated
1147
1232
  * @returns {number} the estimated size of the module (must be non-zero)
1148
1233
  */
@@ -1151,6 +1236,7 @@ class ExternalModule extends Module {
1151
1236
  }
1152
1237
 
1153
1238
  /**
1239
+ * Updates the hash with the data contributed by this instance.
1154
1240
  * @param {Hash} hash the hash used to track dependencies
1155
1241
  * @param {UpdateHashContext} context context
1156
1242
  * @returns {void}
@@ -1158,14 +1244,26 @@ class ExternalModule extends Module {
1158
1244
  updateHash(hash, context) {
1159
1245
  const { chunkGraph } = context;
1160
1246
  hash.update(
1161
- `${this._resolveExternalType(this.externalType)}${JSON.stringify(this.request)}${this.isOptional(
1162
- chunkGraph.moduleGraph
1163
- )}`
1247
+ `${this._resolveExternalType(this.externalType)}${JSON.stringify(
1248
+ this.request
1249
+ )}${this.isOptional(chunkGraph.moduleGraph)}`
1250
+ );
1251
+ const meta = /** @type {ImportDependencyMeta | undefined} */ (
1252
+ this.dependencyMeta
1164
1253
  );
1254
+ if (meta) {
1255
+ if (meta.phase) {
1256
+ hash.update(`|phase=${ImportPhaseUtils.stringify(meta.phase)}`);
1257
+ }
1258
+ if (meta.attributes) {
1259
+ hash.update(`|attributes=${JSON.stringify(meta.attributes)}`);
1260
+ }
1261
+ }
1165
1262
  super.updateHash(hash, context);
1166
1263
  }
1167
1264
 
1168
1265
  /**
1266
+ * Serializes this instance into the provided serializer context.
1169
1267
  * @param {ObjectSerializerContext} context context
1170
1268
  */
1171
1269
  serialize(context) {
@@ -1180,6 +1278,7 @@ class ExternalModule extends Module {
1180
1278
  }
1181
1279
 
1182
1280
  /**
1281
+ * Restores this instance from the provided deserializer context.
1183
1282
  * @param {ObjectDeserializerContext} context context
1184
1283
  */
1185
1284
  deserialize(context) {
@@ -33,6 +33,7 @@ const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
33
33
  /** @typedef {(options?: ResolveOptions) => ExternalItemFunctionDataGetResolveCallbackResult | ExternalItemFunctionDataGetResolveResult} ExternalItemFunctionDataGetResolve */
34
34
 
35
35
  /**
36
+ * Defines the external item function data type used by this module.
36
37
  * @typedef {object} ExternalItemFunctionData
37
38
  * @property {string} context the directory in which the request is placed
38
39
  * @property {ModuleFactoryCreateDataContextInfo} contextInfo contextual information
@@ -50,6 +51,7 @@ const EMPTY_RESOLVE_OPTIONS = {};
50
51
  // TODO webpack 6 remove this
51
52
  const callDeprecatedExternals = util.deprecate(
52
53
  /**
54
+ * Handles the callback logic for this hook.
53
55
  * @param {EXPECTED_FUNCTION} externalsFunction externals function
54
56
  * @param {string} context context
55
57
  * @param {string} request request
@@ -67,6 +69,7 @@ const callDeprecatedExternals = util.deprecate(
67
69
  /** @typedef {ExternalItemObjectKnown & ExternalItemObjectUnknown} ExternalItemObject */
68
70
 
69
71
  /**
72
+ * Defines the external weak cache type used by this module.
70
73
  * @template {ExternalItemObject} T
71
74
  * @typedef {WeakMap<T, Map<IssuerLayer, Omit<T, "byLayer">>>} ExternalWeakCache
72
75
  */
@@ -75,6 +78,7 @@ const callDeprecatedExternals = util.deprecate(
75
78
  const cache = new WeakMap();
76
79
 
77
80
  /**
81
+ * Returns result.
78
82
  * @param {ExternalItemObject} obj obj
79
83
  * @param {IssuerLayer} layer layer
80
84
  * @returns {Omit<ExternalItemObject, "byLayer">} result
@@ -99,6 +103,7 @@ const PLUGIN_NAME = "ExternalModuleFactoryPlugin";
99
103
 
100
104
  class ExternalModuleFactoryPlugin {
101
105
  /**
106
+ * Creates an instance of ExternalModuleFactoryPlugin.
102
107
  * @param {ExternalsType | ((dependency: Dependency) => ExternalsType)} type default external type
103
108
  * @param {Externals} externals externals config
104
109
  */
@@ -108,6 +113,7 @@ class ExternalModuleFactoryPlugin {
108
113
  }
109
114
 
110
115
  /**
116
+ * Applies the plugin by registering its hooks on the compiler.
111
117
  * @param {NormalModuleFactory} normalModuleFactory the normal module factory
112
118
  * @returns {void}
113
119
  */
@@ -124,6 +130,7 @@ class ExternalModuleFactoryPlugin {
124
130
  /** @typedef {(err?: Error | null, externalModule?: ExternalModule) => void} HandleExternalCallback */
125
131
 
126
132
  /**
133
+ * Processes the provided value.
127
134
  * @param {ExternalValue} value the external config
128
135
  * @param {ExternalsType | undefined} type type of external
129
136
  * @param {HandleExternalCallback} callback callback
@@ -186,6 +193,11 @@ class ExternalModuleFactoryPlugin {
186
193
 
187
194
  dependencyMeta = {
188
195
  attributes: dependency.attributes,
196
+ phase:
197
+ dependency instanceof HarmonyImportDependency ||
198
+ dependency instanceof ImportDependency
199
+ ? dependency.phase
200
+ : undefined,
189
201
  externalType
190
202
  };
191
203
  } else if (dependency instanceof CssImportDependency) {
@@ -215,6 +227,7 @@ class ExternalModuleFactoryPlugin {
215
227
  };
216
228
 
217
229
  /**
230
+ * Processes the provided external.
218
231
  * @param {Externals} externals externals config
219
232
  * @param {HandleExternalCallback} callback callback
220
233
  * @returns {void}
@@ -230,6 +243,7 @@ class ExternalModuleFactoryPlugin {
230
243
  /** @type {boolean | undefined} */
231
244
  let asyncFlag;
232
245
  /**
246
+ * Handle externals and callback.
233
247
  * @param {(Error | null)=} err err
234
248
  * @param {ExternalModule=} module module
235
249
  * @returns {void}
@@ -262,6 +276,7 @@ class ExternalModuleFactoryPlugin {
262
276
  }
263
277
  } else if (typeof externals === "function") {
264
278
  /**
279
+ * Processes the provided err.
265
280
  * @param {Error | null | undefined} err err
266
281
  * @param {ExternalValue=} value value
267
282
  * @param {ExternalsType=} type type
@@ -19,6 +19,7 @@ const PLUGIN_NAME = "ExternalsPlugin";
19
19
 
20
20
  class ExternalsPlugin {
21
21
  /**
22
+ * Creates an instance of ExternalsPlugin.
22
23
  * @param {ExternalsType | ((dependency: Dependency) => ExternalsType)} type default external type
23
24
  * @param {Externals} externals externals config
24
25
  */
@@ -28,7 +29,7 @@ class ExternalsPlugin {
28
29
  }
29
30
 
30
31
  /**
31
- * Apply the plugin
32
+ * Applies the plugin by registering its hooks on the compiler.
32
33
  * @param {Compiler} compiler the compiler instance
33
34
  * @returns {void}
34
35
  */