@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -12,14 +12,17 @@ const { SyncHook } = require("tapable");
12
12
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
13
13
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
14
14
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
15
+ /** @typedef {import("../../declarations/WebpackOptions").RuleSetConditionAbsolute} RuleSetConditionAbsolute */
15
16
 
16
17
  /** @typedef {(Falsy | RuleSetRule)[]} RuleSetRules */
17
18
 
18
19
  /**
20
+ * Defines the rule condition function type used by this module.
19
21
  * @typedef {(value: EffectData[keyof EffectData]) => boolean} RuleConditionFunction
20
22
  */
21
23
 
22
24
  /**
25
+ * Defines the rule condition type used by this module.
23
26
  * @typedef {object} RuleCondition
24
27
  * @property {string | string[]} property
25
28
  * @property {boolean} matchWhenEmpty
@@ -27,12 +30,14 @@ const { SyncHook } = require("tapable");
27
30
  */
28
31
 
29
32
  /**
33
+ * Defines the condition type used by this module.
30
34
  * @typedef {object} Condition
31
35
  * @property {boolean} matchWhenEmpty
32
36
  * @property {RuleConditionFunction} fn
33
37
  */
34
38
 
35
39
  /**
40
+ * Defines the effect data type used by this module.
36
41
  * @typedef {object} EffectData
37
42
  * @property {string=} resource
38
43
  * @property {string=} realResource
@@ -50,6 +55,7 @@ const { SyncHook } = require("tapable");
50
55
  */
51
56
 
52
57
  /**
58
+ * Defines the compiled rule type used by this module.
53
59
  * @typedef {object} CompiledRule
54
60
  * @property {RuleCondition[]} conditions
55
61
  * @property {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
@@ -60,12 +66,14 @@ const { SyncHook } = require("tapable");
60
66
  /** @typedef {"use" | "use-pre" | "use-post"} EffectUseType */
61
67
 
62
68
  /**
69
+ * Defines the effect use type used by this module.
63
70
  * @typedef {object} EffectUse
64
71
  * @property {EffectUseType} type
65
72
  * @property {{ loader: string, options?: string | null | Record<string, EXPECTED_ANY>, ident?: string }} value
66
73
  */
67
74
 
68
75
  /**
76
+ * Defines the effect basic type used by this module.
69
77
  * @typedef {object} EffectBasic
70
78
  * @property {string} type
71
79
  * @property {EXPECTED_ANY} value
@@ -76,12 +84,14 @@ const { SyncHook } = require("tapable");
76
84
  /** @typedef {Map<string, RuleSetLoaderOptions>} References */
77
85
 
78
86
  /**
87
+ * Defines the rule set type used by this module.
79
88
  * @typedef {object} RuleSet
80
89
  * @property {References} references map of references in the rule set (may grow over time)
81
90
  * @property {(effectData: EffectData) => Effect[]} exec execute the rule set
82
91
  */
83
92
 
84
93
  /**
94
+ * Defines the keys of types type used by this module.
85
95
  * @template T
86
96
  * @template {T[keyof T]} V
87
97
  * @typedef {({ [key in keyof Required<T>]: Required<T>[key] extends V ? key : never })[keyof T]} KeysOfTypes
@@ -96,6 +106,7 @@ const { SyncHook } = require("tapable");
96
106
 
97
107
  class RuleSetCompiler {
98
108
  /**
109
+ * Creates an instance of RuleSetCompiler.
99
110
  * @param {RuleSetPlugin[]} plugins plugins
100
111
  */
101
112
  constructor(plugins) {
@@ -117,6 +128,7 @@ class RuleSetCompiler {
117
128
  }
118
129
 
119
130
  /**
131
+ * Returns compiled RuleSet.
120
132
  * @param {RuleSetRules} ruleSet raw user provided rules
121
133
  * @returns {RuleSet} compiled RuleSet
122
134
  */
@@ -126,6 +138,7 @@ class RuleSetCompiler {
126
138
  const rules = this.compileRules("ruleSet", ruleSet, refs);
127
139
 
128
140
  /**
141
+ * Returns true, if the rule has matched.
129
142
  * @param {EffectData} data data passed in
130
143
  * @param {CompiledRule} rule the compiled rule
131
144
  * @param {Effect[]} effects an array where effects are pushed to
@@ -203,6 +216,7 @@ class RuleSetCompiler {
203
216
  }
204
217
 
205
218
  /**
219
+ * Returns rules.
206
220
  * @param {string} path current path
207
221
  * @param {RuleSetRules} rules the raw rules provided by user
208
222
  * @param {References} refs references
@@ -221,6 +235,7 @@ class RuleSetCompiler {
221
235
  }
222
236
 
223
237
  /**
238
+ * Returns normalized and compiled rule for processing.
224
239
  * @param {string} path current path
225
240
  * @param {RuleSetRule} rule the raw rule provided by user
226
241
  * @param {References} refs references
@@ -274,6 +289,7 @@ class RuleSetCompiler {
274
289
  }
275
290
 
276
291
  /**
292
+ * Returns compiled condition.
277
293
  * @param {string} path current path
278
294
  * @param {RuleSetLoaderOptions} condition user provided condition value
279
295
  * @returns {Condition} compiled condition
@@ -395,6 +411,7 @@ class RuleSetCompiler {
395
411
  }
396
412
 
397
413
  /**
414
+ * Combine conditions or.
398
415
  * @param {Condition[]} conditions some conditions
399
416
  * @returns {Condition} merged condition
400
417
  */
@@ -414,6 +431,7 @@ class RuleSetCompiler {
414
431
  }
415
432
 
416
433
  /**
434
+ * Combine conditions and.
417
435
  * @param {Condition[]} conditions some conditions
418
436
  * @returns {Condition} merged condition
419
437
  */
@@ -433,6 +451,7 @@ class RuleSetCompiler {
433
451
  }
434
452
 
435
453
  /**
454
+ * Returns an error object.
436
455
  * @param {string} path current path
437
456
  * @param {EXPECTED_ANY} value value at the error location
438
457
  * @param {string} message message explaining the problem
@@ -443,6 +462,119 @@ class RuleSetCompiler {
443
462
  `Compiling RuleSet failed: ${message} (at ${path}: ${value})`
444
463
  );
445
464
  }
465
+
466
+ /**
467
+ * Best-effort detection of a user-registered loader (or explicit module type)
468
+ * for a resource, without building the whole rule set. Used to resolve the
469
+ * `experiments.css`/`experiments.html`/`experiments.asyncWebAssembly` "auto"
470
+ * defaults: when the user already handles these files the built-in module type
471
+ * stays off, so enabling it by default is non-breaking.
472
+ *
473
+ * `include`/`exclude` are treated leniently — a matching `test`/`resource`/
474
+ * `include` with a loader counts even when another condition would narrow it —
475
+ * so a loader scoped to e.g. `include: /src/` still keeps the built-in type off
476
+ * and those files are not double-processed. `enforce: "pre"`/`"post"` loaders
477
+ * are ignored: they don't establish the module type (e.g. a stylelint pre-loader
478
+ * must not suppress the built-in css type). A `test` regexp that references the
479
+ * extension (e.g. `/source\.css$/`) also counts even if the sample path itself
480
+ * doesn't match, so a loader scoped to specific filenames is still detected.
481
+ * @param {import("../../declarations/WebpackOptions").RuleSetRules | undefined} rules user `module.rules`
482
+ * @param {string} resource sample resource path (e.g. `"/file.css"`)
483
+ * @param {boolean=} inherited whether an enclosing rule already matched the resource
484
+ * @returns {boolean} whether a rule assigns a loader or module type to the resource
485
+ */
486
+ static hasRuleForResource(rules, resource, inherited = false) {
487
+ if (!rules) return false;
488
+ // `\.css` for `/file.css`, `\.wasm` for `/file.wasm`, …
489
+ const extProbe = `\\.${resource.slice(resource.lastIndexOf(".") + 1)}`;
490
+ for (const rule of rules) {
491
+ if (!rule || typeof rule !== "object") continue;
492
+ const matched =
493
+ inherited ||
494
+ matchesResource(rule.test, resource, extProbe) ||
495
+ matchesResource(rule.resource, resource, extProbe) ||
496
+ matchesResource(rule.include, resource, extProbe);
497
+ const establishesType =
498
+ rule.type !== undefined ||
499
+ ((rule.use !== undefined || rule.loader !== undefined) &&
500
+ rule.enforce === undefined);
501
+ if (matched && establishesType) return true;
502
+ if (
503
+ rule.oneOf &&
504
+ RuleSetCompiler.hasRuleForResource(rule.oneOf, resource, matched)
505
+ ) {
506
+ return true;
507
+ }
508
+ if (
509
+ rule.rules &&
510
+ RuleSetCompiler.hasRuleForResource(rule.rules, resource, matched)
511
+ ) {
512
+ return true;
513
+ }
514
+ }
515
+ return false;
516
+ }
446
517
  }
447
518
 
519
+ // Bare compiler reused to match single conditions via `compileCondition`
520
+ // (no plugins needed); created lazily on first use.
521
+ /** @type {RuleSetCompiler | undefined} */
522
+ let conditionCompiler;
523
+
524
+ /**
525
+ * Matches a single rule condition against a sample string, reusing the ruleset
526
+ * condition logic (string/regexp/function/array/and/or/not).
527
+ * @param {RuleSetConditionAbsolute | undefined} condition condition
528
+ * @param {string} resource sample resource path
529
+ * @returns {boolean} whether the condition matches
530
+ */
531
+ const matchRuleSetCondition = (condition, resource) => {
532
+ if (condition === undefined) return false;
533
+ if (conditionCompiler === undefined) {
534
+ conditionCompiler = new RuleSetCompiler([]);
535
+ }
536
+ try {
537
+ return conditionCompiler
538
+ .compileCondition("ruleSet", condition)
539
+ .fn(resource);
540
+ } catch (_err) {
541
+ return false;
542
+ }
543
+ };
544
+
545
+ /**
546
+ * Whether any regexp in the condition references the extension probe (e.g.
547
+ * `\.css`), i.e. the rule clearly targets that extension even if the generic
548
+ * sample path doesn't match its (possibly filename-scoped) pattern.
549
+ * @param {EXPECTED_ANY} condition condition
550
+ * @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
551
+ * @returns {boolean} whether a regexp in the condition targets the extension
552
+ */
553
+ const conditionReferencesExtension = (condition, extProbe) => {
554
+ if (condition instanceof RegExp) return condition.source.includes(extProbe);
555
+ if (Array.isArray(condition)) {
556
+ return condition.some((c) => conditionReferencesExtension(c, extProbe));
557
+ }
558
+ if (condition && typeof condition === "object") {
559
+ return (
560
+ conditionReferencesExtension(condition.and, extProbe) ||
561
+ conditionReferencesExtension(condition.or, extProbe)
562
+ );
563
+ }
564
+ return false;
565
+ };
566
+
567
+ /**
568
+ * A condition counts as targeting the resource if it matches the sample path or
569
+ * references the extension via a regexp.
570
+ * @param {RuleSetConditionAbsolute | undefined} condition condition
571
+ * @param {string} resource sample resource path
572
+ * @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
573
+ * @returns {boolean} whether the condition targets the resource's extension
574
+ */
575
+ const matchesResource = (condition, resource, extProbe) =>
576
+ condition !== undefined &&
577
+ (matchRuleSetCondition(condition, resource) ||
578
+ conditionReferencesExtension(condition, extProbe));
579
+
448
580
  module.exports = RuleSetCompiler;
@@ -13,6 +13,7 @@ const util = require("util");
13
13
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
14
14
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
15
15
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
16
+ /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseFunction} RuleSetUseFunction */
16
17
  /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
17
18
  /** @typedef {import("./RuleSetCompiler").Effect} Effect */
18
19
  /** @typedef {import("./RuleSetCompiler").EffectData} EffectData */
@@ -22,6 +23,7 @@ const PLUGIN_NAME = "UseEffectRulePlugin";
22
23
 
23
24
  class UseEffectRulePlugin {
24
25
  /**
26
+ * Applies the plugin by registering its hooks on the compiler.
25
27
  * @param {RuleSetCompiler} ruleSetCompiler the rule set compiler
26
28
  * @returns {void}
27
29
  */
@@ -30,6 +32,7 @@ class UseEffectRulePlugin {
30
32
  PLUGIN_NAME,
31
33
  (path, rule, unhandledProperties, result, references) => {
32
34
  /**
35
+ * Processes the provided property.
33
36
  * @param {keyof RuleSetRule} property property
34
37
  * @param {string} correctProperty correct property
35
38
  */
@@ -58,6 +61,7 @@ class UseEffectRulePlugin {
58
61
  (enforce ? `use-${enforce}` : "use");
59
62
 
60
63
  /**
64
+ * Returns effect.
61
65
  * @param {string} path options path
62
66
  * @param {string} defaultIdent default ident when none is provided
63
67
  * @param {RuleSetUseItem} item user provided use value
@@ -76,9 +80,10 @@ class UseEffectRulePlugin {
76
80
  };
77
81
 
78
82
  /**
83
+ * Returns effect.
79
84
  * @param {string} path options path
80
85
  * @param {string} defaultIdent default ident when none is provided
81
- * @param {Exclude<NonNullable<RuleSetUseItem>, EXPECTED_FUNCTION>} item user provided use value
86
+ * @param {Exclude<NonNullable<RuleSetUseItem>, RuleSetUseFunction>} item user provided use value
82
87
  * @returns {Effect} effect
83
88
  */
84
89
  const useToEffectRaw = (path, defaultIdent, item) => {
@@ -117,6 +122,7 @@ class UseEffectRulePlugin {
117
122
  };
118
123
 
119
124
  /**
125
+ * Use to effects without ident.
120
126
  * @param {string} path options path
121
127
  * @param {RuleSetUseItem | (Falsy | RuleSetUseItem)[]} items user provided use value
122
128
  * @returns {Effect[]} effects
@@ -127,7 +133,7 @@ class UseEffectRulePlugin {
127
133
  useToEffectRaw(
128
134
  `${path}[${idx}]`,
129
135
  "[[missing ident]]",
130
- /** @type {Exclude<RuleSetUseItem, EXPECTED_FUNCTION>} */
136
+ /** @type {Exclude<RuleSetUseItem, RuleSetUseFunction>} */
131
137
  (item)
132
138
  )
133
139
  );
@@ -136,13 +142,14 @@ class UseEffectRulePlugin {
136
142
  useToEffectRaw(
137
143
  path,
138
144
  "[[missing ident]]",
139
- /** @type {Exclude<RuleSetUseItem, EXPECTED_FUNCTION>} */
145
+ /** @type {Exclude<RuleSetUseItem, RuleSetUseFunction>} */
140
146
  (items)
141
147
  )
142
148
  ];
143
149
  };
144
150
 
145
151
  /**
152
+ * Returns effects.
146
153
  * @param {string} path current path
147
154
  * @param {RuleSetUse} items user provided use value
148
155
  * @returns {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
@@ -0,0 +1,56 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const RuntimeGlobals = require("../RuntimeGlobals");
8
+ const Template = require("../Template");
9
+ const HelperRuntimeModule = require("./HelperRuntimeModule");
10
+
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
13
+ class AsyncModuleGeneratorRuntimeModule extends HelperRuntimeModule {
14
+ constructor() {
15
+ super("async module generator");
16
+ }
17
+
18
+ /**
19
+ * Generates runtime code for this runtime module.
20
+ * @returns {string | null} runtime code
21
+ */
22
+ generate() {
23
+ const compilation = /** @type {Compilation} */ (this.compilation);
24
+ const { runtimeTemplate } = compilation;
25
+ const fn = RuntimeGlobals.asyncModuleGenerator;
26
+ const cst = runtimeTemplate.renderConst();
27
+ // Wrap a generator-based async module body so it drives like an `async`
28
+ // function: run the generator and resolve each `yield`ed dependency
29
+ // promise, without emitting `async`/`await`.
30
+ return Template.asString([
31
+ `${fn} = ${runtimeTemplate.returningFunction(
32
+ runtimeTemplate.basicFunction(
33
+ "__webpack_handle_async_dependencies__, __webpack_async_result__",
34
+ [
35
+ `${cst} gen = body(__webpack_handle_async_dependencies__, __webpack_async_result__);`,
36
+ `${cst} step = ${runtimeTemplate.basicFunction("key, arg", [
37
+ `${cst} info = gen[key](arg);`,
38
+ "if (info.done) return;",
39
+ `Promise.resolve(info.value).then(${runtimeTemplate.expressionFunction(
40
+ 'step("next", value)',
41
+ "value"
42
+ )}, ${runtimeTemplate.expressionFunction(
43
+ 'step("throw", err)',
44
+ "err"
45
+ )});`
46
+ ])};`,
47
+ 'step("next");'
48
+ ]
49
+ ),
50
+ "body"
51
+ )};`
52
+ ]);
53
+ }
54
+ }
55
+
56
+ module.exports = AsyncModuleGeneratorRuntimeModule;
@@ -21,6 +21,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
21
21
  }
22
22
 
23
23
  /**
24
+ * Generates runtime code for this runtime module.
24
25
  * @returns {string | null} runtime code
25
26
  */
26
27
  generate() {
@@ -28,24 +29,34 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
28
29
  const { runtimeTemplate } = compilation;
29
30
  const fn = RuntimeGlobals.asyncModule;
30
31
  const defer = this._deferInterop;
32
+ const cst = runtimeTemplate.renderConst();
33
+ const lt = runtimeTemplate.renderLet();
34
+ const supportsSymbol = runtimeTemplate.supportsSymbol();
35
+ /** @type {(name: string, fallback: string) => string} */
36
+ const renderSymbol = (name, fallback) =>
37
+ supportsSymbol
38
+ ? `Symbol("${name}")`
39
+ : `hasSymbol ? Symbol("${name}") : "${fallback}"`;
31
40
  return Template.asString([
32
- 'var hasSymbol = typeof Symbol === "function";',
33
- 'var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__";',
34
- `var webpackExports = ${
41
+ ...(supportsSymbol
42
+ ? []
43
+ : [`${cst} hasSymbol = typeof Symbol === "function";`]),
44
+ `${cst} webpackQueues = ${renderSymbol("webpack queues", "__webpack_queues__")};`,
45
+ `${cst} webpackExports = ${
35
46
  defer ? `${RuntimeGlobals.asyncModuleExportSymbol}= ` : ""
36
- }hasSymbol ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
37
- 'var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__";',
47
+ }${renderSymbol("webpack exports", RuntimeGlobals.exports)};`,
48
+ `${cst} webpackError = ${renderSymbol("webpack error", "__webpack_error__")};`,
38
49
  defer
39
50
  ? Template.asString([
40
- `var webpackDone = ${RuntimeGlobals.asyncModuleDoneSymbol} = hasSymbol ? Symbol("webpack done") : "__webpack_done__";`,
41
- `var webpackDefer = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol} = hasSymbol ? Symbol("webpack defer") : "__webpack_defer__";`,
51
+ `${cst} webpackDone = ${RuntimeGlobals.asyncModuleDoneSymbol} = ${renderSymbol("webpack done", "__webpack_done__")};`,
52
+ `${cst} webpackDefer = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol} = ${renderSymbol("webpack defer", "__webpack_defer__")};`,
42
53
  `${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies} = ${runtimeTemplate.basicFunction(
43
54
  "asyncDeps",
44
55
  [
45
56
  Template.indent([
46
- "var hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {",
57
+ `${cst} hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {`,
47
58
  Template.indent([
48
- "var cache = __webpack_module_cache__[id];",
59
+ `${cst} cache = __webpack_module_cache__[id];`,
49
60
  "return !cache || cache[webpackDone] === false;"
50
61
  ]),
51
62
  "});",
@@ -59,8 +70,8 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
59
70
  )}`
60
71
  ])
61
72
  : "",
62
- `var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
63
- "if(queue && queue.d < 1) {",
73
+ `${cst} resolveQueue = ${runtimeTemplate.basicFunction("queue", [
74
+ `if(${runtimeTemplate.optionalChaining("queue", "d < 1")}) {`,
64
75
  Template.indent([
65
76
  "queue.d = 1;",
66
77
  `queue.forEach(${runtimeTemplate.expressionFunction(
@@ -74,7 +85,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
74
85
  ]),
75
86
  "}"
76
87
  ])}`,
77
- `var wrapDeps = ${runtimeTemplate.returningFunction(
88
+ `${cst} wrapDeps = ${runtimeTemplate.returningFunction(
78
89
  `deps.map(${runtimeTemplate.basicFunction("dep", [
79
90
  'if(dep !== null && typeof dep === "object") {',
80
91
  Template.indent([
@@ -82,10 +93,10 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
82
93
  ? Template.asString([
83
94
  "if(!dep[webpackQueues] && dep[webpackDefer]) {",
84
95
  Template.indent([
85
- `var asyncDeps = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(dep[webpackDefer]);`,
96
+ `${cst} asyncDeps = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(dep[webpackDefer]);`,
86
97
  "if (asyncDeps) {",
87
98
  Template.indent([
88
- "var d = dep;",
99
+ `${cst} d = dep;`,
89
100
  "dep = {",
90
101
  Template.indent([
91
102
  "then(onFulfilled, onRejected) {",
@@ -106,7 +117,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
106
117
  "if(dep[webpackQueues]) return dep;",
107
118
  "if(dep.then) {",
108
119
  Template.indent([
109
- "var queue = [];",
120
+ `${cst} queue = [];`,
110
121
  "queue.d = 0;",
111
122
  `dep.then(${runtimeTemplate.basicFunction("r", [
112
123
  "obj[webpackExports] = r;",
@@ -115,7 +126,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
115
126
  "obj[webpackError] = e;",
116
127
  "resolveQueue(queue);"
117
128
  ])});`,
118
- "var obj = {};",
129
+ `${cst} obj = {};`,
119
130
  defer ? "obj[webpackDefer] = false;" : "",
120
131
  `obj[webpackQueues] = ${runtimeTemplate.expressionFunction(
121
132
  "fn(queue)",
@@ -126,7 +137,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
126
137
  "}"
127
138
  ]),
128
139
  "}",
129
- "var ret = {};",
140
+ `${cst} ret = {};`,
130
141
  `ret[webpackQueues] = ${runtimeTemplate.emptyFunction()};`,
131
142
  "ret[webpackExports] = dep;",
132
143
  "return ret;"
@@ -134,14 +145,14 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
134
145
  "deps"
135
146
  )};`,
136
147
  `${fn} = ${runtimeTemplate.basicFunction("module, body, hasAwait", [
137
- "var queue;",
148
+ `${lt} queue;`,
138
149
  "hasAwait && ((queue = []).d = -1);",
139
- "var depQueues = new Set();",
140
- "var exports = module.exports;",
141
- "var currentDeps;",
142
- "var outerResolve;",
143
- "var reject;",
144
- `var promise = new Promise(${runtimeTemplate.basicFunction(
150
+ `${cst} depQueues = new Set();`,
151
+ `${cst} exports = module.exports;`,
152
+ `${lt} currentDeps;`,
153
+ `${lt} outerResolve;`,
154
+ `${lt} reject;`,
155
+ `${cst} promise = new Promise(${runtimeTemplate.basicFunction(
145
156
  "resolve, rej",
146
157
  ["reject = rej;", "outerResolve = resolve;"]
147
158
  )});`,
@@ -151,17 +162,17 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
151
162
  "fn"
152
163
  )};`,
153
164
  "module.exports = promise;",
154
- `var handle = ${runtimeTemplate.basicFunction("deps", [
165
+ `${cst} handle = ${runtimeTemplate.basicFunction("deps", [
155
166
  "currentDeps = wrapDeps(deps);",
156
- "var fn;",
157
- `var getResult = ${runtimeTemplate.returningFunction(
167
+ `${lt} fn;`,
168
+ `${cst} getResult = ${runtimeTemplate.returningFunction(
158
169
  `currentDeps.map(${runtimeTemplate.basicFunction("d", [
159
170
  defer ? "if(d[webpackDefer]) return d;" : "",
160
171
  "if(d[webpackError]) throw d[webpackError];",
161
172
  "return d[webpackExports];"
162
173
  ])})`
163
174
  )}`,
164
- `var promise = new Promise(${runtimeTemplate.basicFunction(
175
+ `${cst} promise = new Promise(${runtimeTemplate.basicFunction(
165
176
  "resolve",
166
177
  [
167
178
  `fn = ${runtimeTemplate.expressionFunction(
@@ -169,11 +180,11 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
169
180
  ""
170
181
  )};`,
171
182
  "fn.r = 0;",
172
- `var fnQueue = ${runtimeTemplate.expressionFunction(
183
+ `${cst} fnQueue = ${runtimeTemplate.expressionFunction(
173
184
  "q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))",
174
185
  "q"
175
186
  )};`,
176
- `currentDeps.map(${runtimeTemplate.expressionFunction(
187
+ `currentDeps.forEach(${runtimeTemplate.expressionFunction(
177
188
  `${
178
189
  defer ? "dep[webpackDefer]||" : ""
179
190
  }dep[webpackQueues](fnQueue)`,
@@ -183,14 +194,22 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
183
194
  )});`,
184
195
  "return fn.r ? promise : getResult();"
185
196
  ])}`,
186
- `var done = ${runtimeTemplate.expressionFunction(
197
+ `${cst} done = ${runtimeTemplate.expressionFunction(
187
198
  `(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)${
188
- defer ? ", promise[webpackDone] = true" : ""
199
+ defer
200
+ ? ", promise[webpackDone] = true, module.evaluatingAsync = false"
201
+ : ""
189
202
  }`,
190
203
  "err"
191
204
  )}`,
205
+ // Track the async body's whole lifetime (evaluating +
206
+ // evaluating-async states) with a dedicated flag — the sync require
207
+ // wrapper clears `module.evaluating` as soon as `.a` returns, so a
208
+ // deferred namespace reaching this module through a cycle relies on
209
+ // `evaluatingAsync` to keep throwing until it is fully evaluated.
210
+ defer ? "module.evaluatingAsync = true;" : "",
192
211
  "body(handle, done);",
193
- "queue && queue.d < 0 && (queue.d = 0);"
212
+ `${runtimeTemplate.optionalChaining("queue", "d < 0")} && (queue.d = 0);`
194
213
  ])};`
195
214
  ]);
196
215
  }
@@ -19,20 +19,21 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
19
19
  }
20
20
 
21
21
  /**
22
+ * Generates runtime code for this runtime module.
22
23
  * @returns {string | null} runtime code
23
24
  */
24
25
  generate() {
25
26
  const compilation = /** @type {Compilation} */ (this.compilation);
26
27
  const { scriptType, importMetaName, path, environment } =
27
28
  compilation.outputOptions;
29
+ const chunk = /** @type {Chunk} */ (this.chunk);
28
30
  const chunkName = compilation.getPath(
29
31
  JavascriptModulesPlugin.getChunkFilenameTemplate(
30
- /** @type {Chunk} */
31
- (this.chunk),
32
+ chunk,
32
33
  compilation.outputOptions
33
34
  ),
34
35
  {
35
- chunk: this.chunk,
36
+ chunk,
36
37
  contentHashType: "javascript"
37
38
  }
38
39
  );
@@ -46,26 +47,38 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
46
47
  ? "globalThis"
47
48
  : RuntimeGlobals.global;
48
49
 
50
+ const entryOptions = chunk.getEntryOptions();
51
+ // A worklet chunk is always loaded as a module via `addModule`, so it can
52
+ // read `import.meta.url` directly instead of the worker-scope detection.
53
+ const fromImportMeta =
54
+ scriptType === "module" || Boolean(entryOptions && entryOptions.worklet);
55
+
56
+ const runtimeTemplate = compilation.runtimeTemplate;
57
+ const cst = runtimeTemplate.renderConst();
58
+ const lt = runtimeTemplate.renderLet();
49
59
  return Template.asString([
50
- "var scriptUrl;",
51
- scriptType === "module"
60
+ `${lt} scriptUrl;`,
61
+ fromImportMeta
52
62
  ? `if (typeof ${importMetaName}.url === "string") scriptUrl = ${importMetaName}.url`
53
63
  : Template.asString([
54
64
  `if (${global}.importScripts) scriptUrl = ${global}.location + "";`,
55
- `var document = ${global}.document;`,
65
+ `${cst} document = ${global}.document;`,
56
66
  "if (!scriptUrl && document) {",
57
67
  Template.indent([
58
68
  // Technically we could use `document.currentScript instanceof window.HTMLScriptElement`,
59
69
  // but an attacker could try to inject `<script>HTMLScriptElement = HTMLImageElement</script>`
60
70
  // and use `<img name="currentScript" src="https://attacker.controlled.server/"></img>`
61
- "if (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT')",
71
+ `if (${runtimeTemplate.optionalChaining(
72
+ "document.currentScript",
73
+ "tagName.toUpperCase() === 'SCRIPT'"
74
+ )})`,
62
75
  Template.indent("scriptUrl = document.currentScript.src;"),
63
76
  "if (!scriptUrl) {",
64
77
  Template.indent([
65
- 'var scripts = document.getElementsByTagName("script");',
78
+ `${cst} scripts = document.getElementsByTagName("script");`,
66
79
  "if(scripts.length) {",
67
80
  Template.indent([
68
- "var i = scripts.length - 1;",
81
+ `${lt} i = scripts.length - 1;`,
69
82
  "while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;"
70
83
  ]),
71
84
  "}"
@@ -17,6 +17,7 @@ class BaseUriRuntimeModule extends RuntimeModule {
17
17
  }
18
18
 
19
19
  /**
20
+ * Generates runtime code for this runtime module.
20
21
  * @returns {string | null} runtime code
21
22
  */
22
23
  generate() {
@@ -18,6 +18,7 @@ class ChunkNameRuntimeModule extends RuntimeModule {
18
18
  }
19
19
 
20
20
  /**
21
+ * Generates runtime code for this runtime module.
21
22
  * @returns {string | null} runtime code
22
23
  */
23
24
  generate() {