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
@@ -13,12 +13,18 @@ const compileBooleanMatcher = require("./util/compileBooleanMatcher");
13
13
  const propertyAccess = require("./util/propertyAccess");
14
14
  const { forEachRuntime, subtractRuntime } = require("./util/runtime");
15
15
 
16
+ /** @typedef {import("../declarations/WebpackOptions").Environment} Environment */
16
17
  /** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputOptions */
17
18
  /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
19
+ /** @typedef {import("./Chunk")} Chunk */
18
20
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
21
+ /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
22
+ /** @typedef {import("./CodeGenerationResults").CodeGenerationResult} CodeGenerationResult */
19
23
  /** @typedef {import("./Compilation")} Compilation */
20
24
  /** @typedef {import("./Dependency")} Dependency */
21
25
  /** @typedef {import("./Module")} Module */
26
+ /** @typedef {import("./Module").BuildMeta} BuildMeta */
27
+ /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
22
28
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
23
29
  /** @typedef {import("./RequestShortener")} RequestShortener */
24
30
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
@@ -28,27 +34,49 @@ const { forEachRuntime, subtractRuntime } = require("./util/runtime");
28
34
  * @param {ChunkGraph} chunkGraph the chunk graph
29
35
  * @returns {string} error message
30
36
  */
31
- const noModuleIdErrorMessage = (module, chunkGraph) => {
32
- return `Module ${module.identifier()} has no id assigned.
37
+ const noModuleIdErrorMessage = (
38
+ module,
39
+ chunkGraph
40
+ ) => `Module ${module.identifier()} has no id assigned.
33
41
  This should not happen.
34
42
  It's in these chunks: ${
35
- Array.from(
36
- chunkGraph.getModuleChunksIterable(module),
37
- c => c.name || c.id || c.debugId
38
- ).join(", ") || "none"
39
- } (If module is in no chunk this indicates a bug in some chunk/module optimization logic)
43
+ Array.from(
44
+ chunkGraph.getModuleChunksIterable(module),
45
+ c => c.name || c.id || c.debugId
46
+ ).join(", ") || "none"
47
+ } (If module is in no chunk this indicates a bug in some chunk/module optimization logic)
40
48
  Module has these incoming connections: ${Array.from(
41
- chunkGraph.moduleGraph.getIncomingConnections(module),
42
- connection =>
43
- `\n - ${
44
- connection.originModule && connection.originModule.identifier()
45
- } ${connection.dependency && connection.dependency.type} ${
46
- (connection.explanations &&
47
- Array.from(connection.explanations).join(", ")) ||
48
- ""
49
- }`
50
- ).join("")}`;
51
- };
49
+ chunkGraph.moduleGraph.getIncomingConnections(module),
50
+ connection =>
51
+ `\n - ${
52
+ connection.originModule && connection.originModule.identifier()
53
+ } ${connection.dependency && connection.dependency.type} ${
54
+ (connection.explanations &&
55
+ Array.from(connection.explanations).join(", ")) ||
56
+ ""
57
+ }`
58
+ ).join("")}`;
59
+
60
+ /**
61
+ * @param {string | undefined} definition global object definition
62
+ * @returns {string | undefined} save to use global object
63
+ */
64
+ function getGlobalObject(definition) {
65
+ if (!definition) return definition;
66
+ const trimmed = definition.trim();
67
+
68
+ if (
69
+ // identifier, we do not need real identifier regarding ECMAScript/Unicode
70
+ /^[_\p{L}][_0-9\p{L}]*$/iu.test(trimmed) ||
71
+ // iife
72
+ // call expression
73
+ // expression in parentheses
74
+ /^([_\p{L}][_0-9\p{L}]*)?\(.*\)$/iu.test(trimmed)
75
+ )
76
+ return trimmed;
77
+
78
+ return `Object(${trimmed})`;
79
+ }
52
80
 
53
81
  class RuntimeTemplate {
54
82
  /**
@@ -60,6 +88,13 @@ class RuntimeTemplate {
60
88
  this.compilation = compilation;
61
89
  this.outputOptions = outputOptions || {};
62
90
  this.requestShortener = requestShortener;
91
+ this.globalObject =
92
+ /** @type {string} */
93
+ (getGlobalObject(outputOptions.globalObject));
94
+ this.contentHashReplacement = "X".repeat(
95
+ /** @type {NonNullable<OutputOptions["hashDigestLength"]>} */
96
+ (outputOptions.hashDigestLength)
97
+ );
63
98
  }
64
99
 
65
100
  isIIFE() {
@@ -71,86 +106,209 @@ class RuntimeTemplate {
71
106
  }
72
107
 
73
108
  supportsConst() {
74
- return this.outputOptions.environment.const;
109
+ return /** @type {Environment} */ (this.outputOptions.environment).const;
75
110
  }
76
111
 
77
112
  supportsArrowFunction() {
78
- return this.outputOptions.environment.arrowFunction;
113
+ return /** @type {Environment} */ (this.outputOptions.environment)
114
+ .arrowFunction;
115
+ }
116
+
117
+ supportsAsyncFunction() {
118
+ return /** @type {Environment} */ (this.outputOptions.environment)
119
+ .asyncFunction;
120
+ }
121
+
122
+ supportsOptionalChaining() {
123
+ return /** @type {Environment} */ (this.outputOptions.environment)
124
+ .optionalChaining;
79
125
  }
80
126
 
81
127
  supportsForOf() {
82
- return this.outputOptions.environment.forOf;
128
+ return /** @type {Environment} */ (this.outputOptions.environment).forOf;
83
129
  }
84
130
 
85
131
  supportsDestructuring() {
86
- return this.outputOptions.environment.destructuring;
132
+ return /** @type {Environment} */ (this.outputOptions.environment)
133
+ .destructuring;
87
134
  }
88
135
 
89
136
  supportsBigIntLiteral() {
90
- return this.outputOptions.environment.bigIntLiteral;
137
+ return /** @type {Environment} */ (this.outputOptions.environment)
138
+ .bigIntLiteral;
91
139
  }
92
140
 
93
141
  supportsDynamicImport() {
94
- return this.outputOptions.environment.dynamicImport;
142
+ return /** @type {Environment} */ (this.outputOptions.environment)
143
+ .dynamicImport;
95
144
  }
96
145
 
97
146
  supportsEcmaScriptModuleSyntax() {
98
- return this.outputOptions.environment.module;
147
+ return /** @type {Environment} */ (this.outputOptions.environment).module;
99
148
  }
100
149
 
101
150
  supportTemplateLiteral() {
102
- // TODO
103
- return false;
151
+ return /** @type {Environment} */ (this.outputOptions.environment)
152
+ .templateLiteral;
104
153
  }
105
154
 
155
+ supportNodePrefixForCoreModules() {
156
+ return /** @type {Environment} */ (this.outputOptions.environment)
157
+ .nodePrefixForCoreModules;
158
+ }
159
+
160
+ /**
161
+ * @param {string} returnValue return value
162
+ * @param {string} args arguments
163
+ * @returns {string} returning function
164
+ */
106
165
  returningFunction(returnValue, args = "") {
107
166
  return this.supportsArrowFunction()
108
167
  ? `(${args}) => (${returnValue})`
109
168
  : `function(${args}) { return ${returnValue}; }`;
110
169
  }
111
170
 
171
+ /**
172
+ * @param {string} args arguments
173
+ * @param {string | string[]} body body
174
+ * @returns {string} basic function
175
+ */
112
176
  basicFunction(args, body) {
113
177
  return this.supportsArrowFunction()
114
178
  ? `(${args}) => {\n${Template.indent(body)}\n}`
115
179
  : `function(${args}) {\n${Template.indent(body)}\n}`;
116
180
  }
117
181
 
182
+ /**
183
+ * @param {Array<string|{expr: string}>} args args
184
+ * @returns {string} result expression
185
+ */
186
+ concatenation(...args) {
187
+ const len = args.length;
188
+
189
+ if (len === 2) return this._es5Concatenation(args);
190
+ if (len === 0) return '""';
191
+ if (len === 1) {
192
+ return typeof args[0] === "string"
193
+ ? JSON.stringify(args[0])
194
+ : `"" + ${args[0].expr}`;
195
+ }
196
+ if (!this.supportTemplateLiteral()) return this._es5Concatenation(args);
197
+
198
+ // cost comparison between template literal and concatenation:
199
+ // both need equal surroundings: `xxx` vs "xxx"
200
+ // template literal has constant cost of 3 chars for each expression
201
+ // es5 concatenation has cost of 3 + n chars for n expressions in row
202
+ // when a es5 concatenation ends with an expression it reduces cost by 3
203
+ // when a es5 concatenation starts with an single expression it reduces cost by 3
204
+ // e. g. `${a}${b}${c}` (3*3 = 9) is longer than ""+a+b+c ((3+3)-3 = 3)
205
+ // e. g. `x${a}x${b}x${c}x` (3*3 = 9) is shorter than "x"+a+"x"+b+"x"+c+"x" (4+4+4 = 12)
206
+
207
+ let templateCost = 0;
208
+ let concatenationCost = 0;
209
+
210
+ let lastWasExpr = false;
211
+ for (const arg of args) {
212
+ const isExpr = typeof arg !== "string";
213
+ if (isExpr) {
214
+ templateCost += 3;
215
+ concatenationCost += lastWasExpr ? 1 : 4;
216
+ }
217
+ lastWasExpr = isExpr;
218
+ }
219
+ if (lastWasExpr) concatenationCost -= 3;
220
+ if (typeof args[0] !== "string" && typeof args[1] === "string")
221
+ concatenationCost -= 3;
222
+
223
+ if (concatenationCost <= templateCost) return this._es5Concatenation(args);
224
+
225
+ return `\`${args
226
+ .map(arg => (typeof arg === "string" ? arg : `\${${arg.expr}}`))
227
+ .join("")}\``;
228
+ }
229
+
230
+ /**
231
+ * @param {Array<string|{expr: string}>} args args (len >= 2)
232
+ * @returns {string} result expression
233
+ * @private
234
+ */
235
+ _es5Concatenation(args) {
236
+ const str = args
237
+ .map(arg => (typeof arg === "string" ? JSON.stringify(arg) : arg.expr))
238
+ .join(" + ");
239
+
240
+ // when the first two args are expression, we need to prepend "" + to force string
241
+ // concatenation instead of number addition.
242
+ return typeof args[0] !== "string" && typeof args[1] !== "string"
243
+ ? `"" + ${str}`
244
+ : str;
245
+ }
246
+
247
+ /**
248
+ * @param {string} expression expression
249
+ * @param {string} args arguments
250
+ * @returns {string} expression function code
251
+ */
118
252
  expressionFunction(expression, args = "") {
119
253
  return this.supportsArrowFunction()
120
254
  ? `(${args}) => (${expression})`
121
255
  : `function(${args}) { ${expression}; }`;
122
256
  }
123
257
 
258
+ /**
259
+ * @returns {string} empty function code
260
+ */
124
261
  emptyFunction() {
125
262
  return this.supportsArrowFunction() ? "x => {}" : "function() {}";
126
263
  }
127
264
 
265
+ /**
266
+ * @param {string[]} items items
267
+ * @param {string} value value
268
+ * @returns {string} destructure array code
269
+ */
128
270
  destructureArray(items, value) {
129
271
  return this.supportsDestructuring()
130
272
  ? `var [${items.join(", ")}] = ${value};`
131
273
  : Template.asString(
132
274
  items.map((item, i) => `var ${item} = ${value}[${i}];`)
133
- );
275
+ );
134
276
  }
135
277
 
278
+ /**
279
+ * @param {string[]} items items
280
+ * @param {string} value value
281
+ * @returns {string} destructure object code
282
+ */
136
283
  destructureObject(items, value) {
137
284
  return this.supportsDestructuring()
138
285
  ? `var {${items.join(", ")}} = ${value};`
139
286
  : Template.asString(
140
287
  items.map(item => `var ${item} = ${value}${propertyAccess([item])};`)
141
- );
288
+ );
142
289
  }
143
290
 
291
+ /**
292
+ * @param {string} args arguments
293
+ * @param {string} body body
294
+ * @returns {string} IIFE code
295
+ */
144
296
  iife(args, body) {
145
297
  return `(${this.basicFunction(args, body)})()`;
146
298
  }
147
299
 
300
+ /**
301
+ * @param {string} variable variable
302
+ * @param {string} array array
303
+ * @param {string | string[]} body body
304
+ * @returns {string} for each code
305
+ */
148
306
  forEach(variable, array, body) {
149
307
  return this.supportsForOf()
150
308
  ? `for(const ${variable} of ${array}) {\n${Template.indent(body)}\n}`
151
309
  : `${array}.forEach(function(${variable}) {\n${Template.indent(
152
310
  body
153
- )}\n});`;
311
+ )}\n});`;
154
312
  }
155
313
 
156
314
  /**
@@ -178,10 +336,9 @@ class RuntimeTemplate {
178
336
  }
179
337
  if (!content) return "";
180
338
  if (this.outputOptions.pathinfo) {
181
- return Template.toComment(content) + " ";
182
- } else {
183
- return Template.toNormalComment(content) + " ";
339
+ return `${Template.toComment(content)} `;
184
340
  }
341
+ return `${Template.toNormalComment(content)} `;
185
342
  }
186
343
 
187
344
  /**
@@ -237,10 +394,10 @@ class RuntimeTemplate {
237
394
  }
238
395
 
239
396
  /**
240
- * @param {Object} options options object
397
+ * @param {object} options options object
241
398
  * @param {ChunkGraph} options.chunkGraph the chunk graph
242
399
  * @param {Module} options.module the module
243
- * @param {string} options.request the request that should be printed as comment
400
+ * @param {string=} options.request the request that should be printed as comment
244
401
  * @param {string=} options.idExpr expression to use as id expression
245
402
  * @param {"expression" | "promise" | "statements"} options.type which kind of code should be returned
246
403
  * @returns {string} the code
@@ -251,15 +408,14 @@ class RuntimeTemplate {
251
408
  moduleId === null
252
409
  ? JSON.stringify("Module is not available (weak dependency)")
253
410
  : idExpr
254
- ? `"Module '" + ${idExpr} + "' is not available (weak dependency)"`
255
- : JSON.stringify(
256
- `Module '${moduleId}' is not available (weak dependency)`
257
- );
258
- const comment = request ? Template.toNormalComment(request) + " " : "";
259
- const errorStatements =
260
- `var e = new Error(${errorMessage}); ` +
261
- comment +
262
- "e.code = 'MODULE_NOT_FOUND'; throw e;";
411
+ ? `"Module '" + ${idExpr} + "' is not available (weak dependency)"`
412
+ : JSON.stringify(
413
+ `Module '${moduleId}' is not available (weak dependency)`
414
+ );
415
+ const comment = request ? `${Template.toNormalComment(request)} ` : "";
416
+ const errorStatements = `var e = new Error(${errorMessage}); ${
417
+ comment
418
+ }e.code = 'MODULE_NOT_FOUND'; throw e;`;
263
419
  switch (type) {
264
420
  case "statements":
265
421
  return errorStatements;
@@ -274,10 +430,10 @@ class RuntimeTemplate {
274
430
  }
275
431
 
276
432
  /**
277
- * @param {Object} options options object
433
+ * @param {object} options options object
278
434
  * @param {Module} options.module the module
279
435
  * @param {ChunkGraph} options.chunkGraph the chunk graph
280
- * @param {string} options.request the request that should be printed as comment
436
+ * @param {string=} options.request the request that should be printed as comment
281
437
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
282
438
  * @returns {string} the expression
283
439
  */
@@ -303,12 +459,12 @@ class RuntimeTemplate {
303
459
  }
304
460
 
305
461
  /**
306
- * @param {Object} options options object
307
- * @param {Module} options.module the module
462
+ * @param {object} options options object
463
+ * @param {Module | null} options.module the module
308
464
  * @param {ChunkGraph} options.chunkGraph the chunk graph
309
- * @param {string} options.request the request that should be printed as comment
465
+ * @param {string=} options.request the request that should be printed as comment
310
466
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
311
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
467
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
312
468
  * @returns {string} the expression
313
469
  */
314
470
  moduleRaw({ module, chunkGraph, request, weak, runtimeRequirements }) {
@@ -337,7 +493,7 @@ class RuntimeTemplate {
337
493
  );
338
494
  }
339
495
  runtimeRequirements.add(RuntimeGlobals.require);
340
- return `__webpack_require__(${this.moduleId({
496
+ return `${RuntimeGlobals.require}(${this.moduleId({
341
497
  module,
342
498
  chunkGraph,
343
499
  request,
@@ -346,12 +502,12 @@ class RuntimeTemplate {
346
502
  }
347
503
 
348
504
  /**
349
- * @param {Object} options options object
350
- * @param {Module} options.module the module
505
+ * @param {object} options options object
506
+ * @param {Module | null} options.module the module
351
507
  * @param {ChunkGraph} options.chunkGraph the chunk graph
352
508
  * @param {string} options.request the request that should be printed as comment
353
509
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
354
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
510
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
355
511
  * @returns {string} the expression
356
512
  */
357
513
  moduleExports({ module, chunkGraph, request, weak, runtimeRequirements }) {
@@ -365,13 +521,13 @@ class RuntimeTemplate {
365
521
  }
366
522
 
367
523
  /**
368
- * @param {Object} options options object
524
+ * @param {object} options options object
369
525
  * @param {Module} options.module the module
370
526
  * @param {ChunkGraph} options.chunkGraph the chunk graph
371
527
  * @param {string} options.request the request that should be printed as comment
372
528
  * @param {boolean=} options.strict if the current module is in strict esm mode
373
529
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
374
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
530
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
375
531
  * @returns {string} the expression
376
532
  */
377
533
  moduleNamespace({
@@ -434,7 +590,7 @@ class RuntimeTemplate {
434
590
  }
435
591
 
436
592
  /**
437
- * @param {Object} options options object
593
+ * @param {object} options options object
438
594
  * @param {ChunkGraph} options.chunkGraph the chunk graph
439
595
  * @param {AsyncDependenciesBlock=} options.block the current dependencies block
440
596
  * @param {Module} options.module the module
@@ -442,7 +598,7 @@ class RuntimeTemplate {
442
598
  * @param {string} options.message a message for the comment
443
599
  * @param {boolean=} options.strict if the current module is in strict esm mode
444
600
  * @param {boolean=} options.weak if the dependency is weak (will create a nice error message)
445
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
601
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
446
602
  * @returns {string} the promise expression
447
603
  */
448
604
  moduleNamespacePromise({
@@ -533,7 +689,7 @@ class RuntimeTemplate {
533
689
  )})`;
534
690
  } else {
535
691
  runtimeRequirements.add(RuntimeGlobals.require);
536
- appending = `.then(__webpack_require__.bind(__webpack_require__, ${comment}${idExpr}))`;
692
+ appending = `.then(${RuntimeGlobals.require}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}))`;
537
693
  }
538
694
  break;
539
695
  case "dynamic":
@@ -559,7 +715,7 @@ class RuntimeTemplate {
559
715
  )})`;
560
716
  } else {
561
717
  runtimeRequirements.add(RuntimeGlobals.require);
562
- appending = `.then(__webpack_require__.bind(__webpack_require__, ${comment}${idExpr}))`;
718
+ appending = `.then(${RuntimeGlobals.require}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}))`;
563
719
  }
564
720
  appending += `.then(${this.returningFunction(
565
721
  `${RuntimeGlobals.createFakeNamespaceObject}(m, ${fakeType})`,
@@ -574,7 +730,7 @@ class RuntimeTemplate {
574
730
  `${header}return ${returnExpression};`
575
731
  )})`;
576
732
  } else {
577
- appending = `.then(${RuntimeGlobals.createFakeNamespaceObject}.bind(__webpack_require__, ${comment}${idExpr}, ${fakeType}))`;
733
+ appending = `.then(${RuntimeGlobals.createFakeNamespaceObject}.bind(${RuntimeGlobals.require}, ${comment}${idExpr}, ${fakeType}))`;
578
734
  }
579
735
  }
580
736
  break;
@@ -584,11 +740,11 @@ class RuntimeTemplate {
584
740
  }
585
741
 
586
742
  /**
587
- * @param {Object} options options object
743
+ * @param {object} options options object
588
744
  * @param {ChunkGraph} options.chunkGraph the chunk graph
589
745
  * @param {RuntimeSpec=} options.runtime runtime for which this code will be generated
590
746
  * @param {RuntimeSpec | boolean=} options.runtimeCondition only execute the statement in some runtimes
591
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
747
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
592
748
  * @returns {string} expression
593
749
  */
594
750
  runtimeConditionExpression({
@@ -602,12 +758,16 @@ class RuntimeTemplate {
602
758
  /** @type {Set<string>} */
603
759
  const positiveRuntimeIds = new Set();
604
760
  forEachRuntime(runtimeCondition, runtime =>
605
- positiveRuntimeIds.add(`${chunkGraph.getRuntimeId(runtime)}`)
761
+ positiveRuntimeIds.add(
762
+ `${chunkGraph.getRuntimeId(/** @type {string} */ (runtime))}`
763
+ )
606
764
  );
607
765
  /** @type {Set<string>} */
608
766
  const negativeRuntimeIds = new Set();
609
767
  forEachRuntime(subtractRuntime(runtime, runtimeCondition), runtime =>
610
- negativeRuntimeIds.add(`${chunkGraph.getRuntimeId(runtime)}`)
768
+ negativeRuntimeIds.add(
769
+ `${chunkGraph.getRuntimeId(/** @type {string} */ (runtime))}`
770
+ )
611
771
  );
612
772
  runtimeRequirements.add(RuntimeGlobals.runtimeId);
613
773
  return compileBooleanMatcher.fromLists(
@@ -617,8 +777,7 @@ class RuntimeTemplate {
617
777
  }
618
778
 
619
779
  /**
620
- *
621
- * @param {Object} options options object
780
+ * @param {object} options options object
622
781
  * @param {boolean=} options.update whether a new variable should be created or the existing one updated
623
782
  * @param {Module} options.module the module
624
783
  * @param {ChunkGraph} options.chunkGraph the chunk graph
@@ -626,7 +785,7 @@ class RuntimeTemplate {
626
785
  * @param {string} options.importVar name of the import variable
627
786
  * @param {Module} options.originModule module in which the statement is emitted
628
787
  * @param {boolean=} options.weak true, if this is a weak dependency
629
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
788
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
630
789
  * @returns {[string, string]} the import statement and the compat statement
631
790
  */
632
791
  importStatement({
@@ -678,10 +837,11 @@ class RuntimeTemplate {
678
837
 
679
838
  const exportsType = module.getExportsType(
680
839
  chunkGraph.moduleGraph,
681
- originModule.buildMeta.strictHarmonyModule
840
+ /** @type {BuildMeta} */
841
+ (originModule.buildMeta).strictHarmonyModule
682
842
  );
683
843
  runtimeRequirements.add(RuntimeGlobals.require);
684
- const importContent = `/* harmony import */ ${optDeclaration}${importVar} = __webpack_require__(${moduleId});\n`;
844
+ const importContent = `/* harmony import */ ${optDeclaration}${importVar} = ${RuntimeGlobals.require}(${moduleId});\n`;
685
845
 
686
846
  if (exportsType === "dynamic") {
687
847
  runtimeRequirements.add(RuntimeGlobals.compatGetDefaultExport);
@@ -694,7 +854,7 @@ class RuntimeTemplate {
694
854
  }
695
855
 
696
856
  /**
697
- * @param {Object} options options
857
+ * @param {object} options options
698
858
  * @param {ModuleGraph} options.moduleGraph the module graph
699
859
  * @param {Module} options.module the module
700
860
  * @param {string} options.request the request
@@ -702,12 +862,12 @@ class RuntimeTemplate {
702
862
  * @param {Module} options.originModule the origin module
703
863
  * @param {boolean|undefined} options.asiSafe true, if location is safe for ASI, a bracket can be emitted
704
864
  * @param {boolean} options.isCall true, if expression will be called
705
- * @param {boolean} options.callContext when false, call context will not be preserved
865
+ * @param {boolean | null} options.callContext when false, call context will not be preserved
706
866
  * @param {boolean} options.defaultInterop when true and accessing the default exports, interop code will be generated
707
867
  * @param {string} options.importVar the identifier name of the import variable
708
- * @param {InitFragment[]} options.initFragments init fragments will be added here
868
+ * @param {InitFragment<TODO>[]} options.initFragments init fragments will be added here
709
869
  * @param {RuntimeSpec} options.runtime runtime for which this code will be generated
710
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
870
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
711
871
  * @returns {string} expression
712
872
  */
713
873
  exportFromImport({
@@ -735,7 +895,8 @@ class RuntimeTemplate {
735
895
  }
736
896
  const exportsType = module.getExportsType(
737
897
  moduleGraph,
738
- originModule.buildMeta.strictHarmonyModule
898
+ /** @type {BuildMeta} */
899
+ (originModule.buildMeta).strictHarmonyModule
739
900
  );
740
901
 
741
902
  if (defaultInterop) {
@@ -744,13 +905,13 @@ class RuntimeTemplate {
744
905
  case "dynamic":
745
906
  if (isCall) {
746
907
  return `${importVar}_default()${propertyAccess(exportName, 1)}`;
747
- } else {
748
- return asiSafe
749
- ? `(${importVar}_default()${propertyAccess(exportName, 1)})`
750
- : asiSafe === false
908
+ }
909
+ return asiSafe
910
+ ? `(${importVar}_default()${propertyAccess(exportName, 1)})`
911
+ : asiSafe === false
751
912
  ? `;(${importVar}_default()${propertyAccess(exportName, 1)})`
752
913
  : `${importVar}_default.a${propertyAccess(exportName, 1)}`;
753
- }
914
+
754
915
  case "default-only":
755
916
  case "default-with-named":
756
917
  exportName = exportName.slice(1);
@@ -758,10 +919,10 @@ class RuntimeTemplate {
758
919
  }
759
920
  } else if (exportName.length > 0) {
760
921
  if (exportsType === "default-only") {
761
- return (
762
- "/* non-default import from non-esm module */undefined" +
763
- propertyAccess(exportName, 1)
764
- );
922
+ return `/* non-default import from non-esm module */undefined${propertyAccess(
923
+ exportName,
924
+ 1
925
+ )}`;
765
926
  } else if (
766
927
  exportsType !== "namespace" &&
767
928
  exportName[0] === "__esModule"
@@ -800,27 +961,26 @@ class RuntimeTemplate {
800
961
  }
801
962
  const comment = equals(used, exportName)
802
963
  ? ""
803
- : Template.toNormalComment(propertyAccess(exportName)) + " ";
964
+ : `${Template.toNormalComment(propertyAccess(exportName))} `;
804
965
  const access = `${importVar}${comment}${propertyAccess(used)}`;
805
966
  if (isCall && callContext === false) {
806
967
  return asiSafe
807
968
  ? `(0,${access})`
808
969
  : asiSafe === false
809
- ? `;(0,${access})`
810
- : `/*#__PURE__*/Object(${access})`;
970
+ ? `;(0,${access})`
971
+ : `/*#__PURE__*/Object(${access})`;
811
972
  }
812
973
  return access;
813
- } else {
814
- return importVar;
815
974
  }
975
+ return importVar;
816
976
  }
817
977
 
818
978
  /**
819
- * @param {Object} options options
820
- * @param {AsyncDependenciesBlock} options.block the async block
979
+ * @param {object} options options
980
+ * @param {AsyncDependenciesBlock | undefined} options.block the async block
821
981
  * @param {string} options.message the message
822
982
  * @param {ChunkGraph} options.chunkGraph the chunk graph
823
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
983
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
824
984
  * @returns {string} expression
825
985
  */
826
986
  blockPromise({ block, message, chunkGraph, runtimeRequirements }) {
@@ -847,24 +1007,45 @@ class RuntimeTemplate {
847
1007
  if (chunks.length === 1) {
848
1008
  const chunkId = JSON.stringify(chunks[0].id);
849
1009
  runtimeRequirements.add(RuntimeGlobals.ensureChunk);
850
- return `${RuntimeGlobals.ensureChunk}(${comment}${chunkId})`;
1010
+
1011
+ const fetchPriority = chunkGroup.options.fetchPriority;
1012
+
1013
+ if (fetchPriority) {
1014
+ runtimeRequirements.add(RuntimeGlobals.hasFetchPriority);
1015
+ }
1016
+
1017
+ return `${RuntimeGlobals.ensureChunk}(${comment}${chunkId}${
1018
+ fetchPriority ? `, ${JSON.stringify(fetchPriority)}` : ""
1019
+ })`;
851
1020
  } else if (chunks.length > 0) {
852
1021
  runtimeRequirements.add(RuntimeGlobals.ensureChunk);
1022
+
1023
+ const fetchPriority = chunkGroup.options.fetchPriority;
1024
+
1025
+ if (fetchPriority) {
1026
+ runtimeRequirements.add(RuntimeGlobals.hasFetchPriority);
1027
+ }
1028
+
1029
+ /**
1030
+ * @param {Chunk} chunk chunk
1031
+ * @returns {string} require chunk id code
1032
+ */
853
1033
  const requireChunkId = chunk =>
854
- `${RuntimeGlobals.ensureChunk}(${JSON.stringify(chunk.id)})`;
1034
+ `${RuntimeGlobals.ensureChunk}(${JSON.stringify(chunk.id)}${
1035
+ fetchPriority ? `, ${JSON.stringify(fetchPriority)}` : ""
1036
+ })`;
855
1037
  return `Promise.all(${comment.trim()}[${chunks
856
1038
  .map(requireChunkId)
857
1039
  .join(", ")}])`;
858
- } else {
859
- return `Promise.resolve(${comment.trim()})`;
860
1040
  }
1041
+ return `Promise.resolve(${comment.trim()})`;
861
1042
  }
862
1043
 
863
1044
  /**
864
- * @param {Object} options options
1045
+ * @param {object} options options
865
1046
  * @param {AsyncDependenciesBlock} options.block the async block
866
1047
  * @param {ChunkGraph} options.chunkGraph the chunk graph
867
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
1048
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
868
1049
  * @param {string=} options.request request string used originally
869
1050
  * @returns {string} expression
870
1051
  */
@@ -893,10 +1074,10 @@ class RuntimeTemplate {
893
1074
  }
894
1075
 
895
1076
  /**
896
- * @param {Object} options options
1077
+ * @param {object} options options
897
1078
  * @param {Dependency} options.dependency the dependency
898
1079
  * @param {ChunkGraph} options.chunkGraph the chunk graph
899
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
1080
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
900
1081
  * @param {string=} options.request request string used originally
901
1082
  * @returns {string} expression
902
1083
  */
@@ -914,9 +1095,9 @@ class RuntimeTemplate {
914
1095
  }
915
1096
 
916
1097
  /**
917
- * @param {Object} options options
1098
+ * @param {object} options options
918
1099
  * @param {string} options.exportsArgument the name of the exports object
919
- * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements
1100
+ * @param {RuntimeRequirements} options.runtimeRequirements if set, will be filled with runtime requirements
920
1101
  * @returns {string} statement
921
1102
  */
922
1103
  defineEsModuleFlagStatement({ exportsArgument, runtimeRequirements }) {
@@ -924,6 +1105,27 @@ class RuntimeTemplate {
924
1105
  runtimeRequirements.add(RuntimeGlobals.exports);
925
1106
  return `${RuntimeGlobals.makeNamespaceObject}(${exportsArgument});\n`;
926
1107
  }
1108
+
1109
+ /**
1110
+ * @param {object} options options object
1111
+ * @param {Module} options.module the module
1112
+ * @param {RuntimeSpec=} options.runtime runtime
1113
+ * @param {CodeGenerationResults} options.codeGenerationResults the code generation results
1114
+ * @returns {string} the url of the asset
1115
+ */
1116
+ assetUrl({ runtime, module, codeGenerationResults }) {
1117
+ if (!module) {
1118
+ return "data:,";
1119
+ }
1120
+ const codeGen = codeGenerationResults.get(module, runtime);
1121
+ const data = /** @type {NonNullable<CodeGenerationResult["data"]>} */ (
1122
+ codeGen.data
1123
+ );
1124
+ const url = data.get("url");
1125
+ if (url) return url.toString();
1126
+ const assetPath = data.get("assetPathForCss");
1127
+ return assetPath;
1128
+ }
927
1129
  }
928
1130
 
929
1131
  module.exports = RuntimeTemplate;