@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,25 +12,40 @@ const ModuleDependency = require("./ModuleDependency");
12
12
 
13
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
14
  /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
15
+ /** @typedef {import("../Chunk")} Chunk */
15
16
  /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
16
17
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
17
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
19
  /** @typedef {import("../Entrypoint")} Entrypoint */
19
20
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
21
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
21
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[WorkerDependencyOptions]>} ObjectDeserializerContext */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[WorkerDependencyOptions]>} ObjectSerializerContext */
23
24
  /** @typedef {import("../util/Hash")} Hash */
24
25
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
25
26
 
26
27
  /**
28
+ * @typedef {object} ResourceHint
29
+ * @property {true=} prefetch emit `<link rel="prefetch">`
30
+ * @property {true=} preload emit `<link rel="preload">` (wins over prefetch when both are set)
31
+ * @property {("high" | "low" | "auto")=} fetchPriority value for the `fetchpriority` attribute
32
+ * @property {string=} as override for the `as` attribute (defaults to `"script"`)
33
+ * @property {string=} type value for the `type` attribute
34
+ * @property {string=} media value for the `media` attribute
35
+ */
36
+
37
+ /**
38
+ * Represents the worker dependency runtime component.
27
39
  * @typedef {object} WorkerDependencyOptions
28
40
  * @property {string=} publicPath public path for the worker
29
41
  * @property {boolean=} needNewUrl true when need generate `new URL(...)`, otherwise false
42
+ * @property {Range=} workerConstructorRange range of the global `Worker` constructor, set only for the `new Worker()` global syntax that needs a node-target rewrite
43
+ * @property {ResourceHint=} resourceHint resource hint to inject for the worker chunk
30
44
  */
31
45
 
32
46
  class WorkerDependency extends ModuleDependency {
33
47
  /**
48
+ * Creates an instance of WorkerDependency.
34
49
  * @param {string} request request
35
50
  * @param {Range} range range
36
51
  * @param {WorkerDependencyOptions} workerDependencyOptions options
@@ -65,7 +80,7 @@ class WorkerDependency extends ModuleDependency {
65
80
  }
66
81
 
67
82
  /**
68
- * Update the hash
83
+ * Updates the hash with the data contributed by this instance.
69
84
  * @param {Hash} hash hash to be updated
70
85
  * @param {UpdateHashContext} context context
71
86
  * @returns {void}
@@ -78,21 +93,21 @@ class WorkerDependency extends ModuleDependency {
78
93
  }
79
94
 
80
95
  /**
96
+ * Serializes this instance into the provided serializer context.
81
97
  * @param {ObjectSerializerContext} context context
82
98
  */
83
99
  serialize(context) {
84
- const { write } = context;
85
- write(this.options);
100
+ context.write(this.options);
86
101
  super.serialize(context);
87
102
  }
88
103
 
89
104
  /**
105
+ * Restores this instance from the provided deserializer context.
90
106
  * @param {ObjectDeserializerContext} context context
91
107
  */
92
108
  deserialize(context) {
93
- const { read } = context;
94
- this.options = read();
95
- super.deserialize(context);
109
+ this.options = context.read();
110
+ super.deserialize(context.rest);
96
111
  }
97
112
  }
98
113
 
@@ -100,13 +115,15 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
100
115
  ModuleDependency.Template
101
116
  ) {
102
117
  /**
118
+ * Applies the plugin by registering its hooks on the compiler.
103
119
  * @param {Dependency} dependency the dependency for which the template should be applied
104
120
  * @param {ReplaceSource} source the current replace source which can be modified
105
121
  * @param {DependencyTemplateContext} templateContext the context object
106
122
  * @returns {void}
107
123
  */
108
124
  apply(dependency, source, templateContext) {
109
- const { chunkGraph, moduleGraph, runtimeRequirements } = templateContext;
125
+ const { chunkGraph, moduleGraph, runtimeRequirements, runtimeTemplate } =
126
+ templateContext;
110
127
  const dep = /** @type {WorkerDependency} */ (dependency);
111
128
  const block = /** @type {AsyncDependenciesBlock} */ (
112
129
  moduleGraph.getParentBlock(dependency)
@@ -115,24 +132,91 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
115
132
  chunkGraph.getBlockChunkGroup(block)
116
133
  );
117
134
  const chunk = entrypoint.getEntrypointChunk();
118
- // We use the workerPublicPath option if provided, else we fallback to the RuntimeGlobal publicPath
119
- const workerImportBaseUrl = dep.options.publicPath
120
- ? `"${dep.options.publicPath}"`
121
- : RuntimeGlobals.publicPath;
122
-
123
- runtimeRequirements.add(RuntimeGlobals.publicPath);
124
- runtimeRequirements.add(RuntimeGlobals.baseURI);
125
- runtimeRequirements.add(RuntimeGlobals.getChunkScriptFilename);
126
-
127
- const workerImportStr = `/* worker import */ ${workerImportBaseUrl} + ${
128
- RuntimeGlobals.getChunkScriptFilename
129
- }(${JSON.stringify(chunk.id)}), ${RuntimeGlobals.baseURI}`;
130
-
131
- source.replace(
132
- dep.range[0],
133
- dep.range[1] - 1,
134
- dep.options.needNewUrl ? `new URL(${workerImportStr})` : workerImportStr
135
- );
135
+
136
+ // For ESM module output emit the analyzable `new URL("./worker.<name>.js",
137
+ // import.meta.url)` form (literal specifier, no runtime helpers) so other bundlers
138
+ // and webpack itself can statically follow the worker. Resource-hint workers keep
139
+ // the runtime form because the hint needs the runtime chunk reference.
140
+ const analyzableSpecifier =
141
+ !dep.options.resourceHint && runtimeTemplate.supportsAnalyzableEsm()
142
+ ? runtimeTemplate._getAnalyzableChunkSpecifier(
143
+ dep.options.publicPath,
144
+ chunk,
145
+ templateContext.module,
146
+ chunkGraph
147
+ )
148
+ : null;
149
+
150
+ if (analyzableSpecifier !== null) {
151
+ const urlArgs = `/* worker import */ ${analyzableSpecifier}, ${runtimeTemplate.outputOptions.importMetaName}.url`;
152
+ source.replace(
153
+ dep.range[0],
154
+ dep.range[1] - 1,
155
+ dep.options.needNewUrl ? `new URL(${urlArgs})` : urlArgs
156
+ );
157
+ } else {
158
+ // We use the workerPublicPath option if provided, else we fallback to the RuntimeGlobal publicPath
159
+ const workerImportBaseUrl = dep.options.publicPath
160
+ ? `"${dep.options.publicPath}"`
161
+ : RuntimeGlobals.publicPath;
162
+
163
+ runtimeRequirements.add(RuntimeGlobals.publicPath);
164
+ runtimeRequirements.add(RuntimeGlobals.baseURI);
165
+ runtimeRequirements.add(RuntimeGlobals.getChunkScriptFilename);
166
+
167
+ const hrefExpr = `${workerImportBaseUrl} + ${
168
+ RuntimeGlobals.getChunkScriptFilename
169
+ }(${JSON.stringify(chunk.id)})`;
170
+
171
+ const hint = dep.options.resourceHint;
172
+ const rel =
173
+ hint && hint.preload
174
+ ? "preload"
175
+ : hint && hint.prefetch
176
+ ? "prefetch"
177
+ : null;
178
+ let wrappedHref;
179
+ if (rel && hint) {
180
+ const fn =
181
+ rel === "preload"
182
+ ? RuntimeGlobals.preloadAsset
183
+ : RuntimeGlobals.prefetchAsset;
184
+ runtimeRequirements.add(fn);
185
+ const as = hint.as || "script";
186
+ const args = [
187
+ hrefExpr,
188
+ JSON.stringify(as),
189
+ hint.type ? JSON.stringify(hint.type) : "undefined",
190
+ hint.media ? JSON.stringify(hint.media) : "undefined",
191
+ hint.fetchPriority ? JSON.stringify(hint.fetchPriority) : "undefined"
192
+ ];
193
+ wrappedHref = `${fn}(${args.join(", ")})`;
194
+ } else {
195
+ wrappedHref = hrefExpr;
196
+ }
197
+
198
+ const workerImportStr = `/* worker import */ ${wrappedHref}, ${RuntimeGlobals.baseURI}`;
199
+
200
+ source.replace(
201
+ dep.range[0],
202
+ dep.range[1] - 1,
203
+ dep.options.needNewUrl ? `new URL(${workerImportStr})` : workerImportStr
204
+ );
205
+ }
206
+
207
+ // `Worker` is global only on the web, so route node (universal or node-only) through `worker_threads`
208
+ const { platform } = runtimeTemplate.compilation.compiler;
209
+ const ctorRange = dep.options.workerConstructorRange;
210
+ if (
211
+ ctorRange &&
212
+ (runtimeTemplate.isUniversalTarget() || (platform.node && !platform.web))
213
+ ) {
214
+ // `__webpack_require__.wc` attaches to `__webpack_require__`; the analyzable
215
+ // branch adds no other requirement that would emit it, so require it here.
216
+ runtimeRequirements.add(RuntimeGlobals.require);
217
+ runtimeRequirements.add(RuntimeGlobals.worker);
218
+ source.replace(ctorRange[0], ctorRange[1] - 1, RuntimeGlobals.worker);
219
+ }
136
220
  }
137
221
  };
138
222
 
@@ -0,0 +1,278 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author sheo13666q
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const Dependency = require("../Dependency");
9
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
+ const Template = require("../Template");
11
+ const makeSerializable = require("../util/makeSerializable");
12
+ const ModuleDependency = require("./ModuleDependency");
13
+
14
+ /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
15
+ /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
16
+ /** @typedef {import("../Chunk")} Chunk */
17
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
18
+ /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
19
+ /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
20
+ /** @typedef {import("../Entrypoint")} Entrypoint */
21
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
22
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[WorkletDependencyOptions, Range]>} ObjectDeserializerContext */
24
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[WorkletDependencyOptions, Range]>} ObjectSerializerContext */
25
+ /** @typedef {import("../util/Hash")} Hash */
26
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
+
28
+ /**
29
+ * @typedef {object} WorkletDependencyOptions
30
+ * @property {string=} publicPath public path for the worklet
31
+ */
32
+
33
+ // The wrapper param forwarded as the module argument to the original `addModule`.
34
+ const WORKLET_MODULE = "__webpack_worklet_module__";
35
+
36
+ class WorkletDependency extends ModuleDependency {
37
+ /**
38
+ * Creates an instance of WorkletDependency.
39
+ * @param {string} request request
40
+ * @param {Range} range range of the zero-width insertion point (before the call)
41
+ * @param {Range} callRange range of the call argument list `(<url>)`
42
+ * @param {WorkletDependencyOptions} workletDependencyOptions options
43
+ */
44
+ constructor(request, range, callRange, workletDependencyOptions) {
45
+ super(request);
46
+ this.range = range;
47
+ /** @type {Range} */
48
+ this.callRange = callRange;
49
+ // If options are updated, don't forget to update the hash and serialization functions
50
+ /** @type {WorkletDependencyOptions} */
51
+ this.options = workletDependencyOptions;
52
+ /** Cache the hash */
53
+ /** @type {undefined | string} */
54
+ this._hashUpdate = undefined;
55
+ }
56
+
57
+ /**
58
+ * Returns list of exports referenced by this dependency
59
+ * @param {ModuleGraph} moduleGraph module graph
60
+ * @param {RuntimeSpec} runtime the runtime for which the module is analysed
61
+ * @returns {ReferencedExports} referenced exports
62
+ */
63
+ getReferencedExports(moduleGraph, runtime) {
64
+ return Dependency.NO_EXPORTS_REFERENCED;
65
+ }
66
+
67
+ get type() {
68
+ return "Worklet.addModule()";
69
+ }
70
+
71
+ get category() {
72
+ return "worker";
73
+ }
74
+
75
+ /**
76
+ * Updates the hash with the data contributed by this instance.
77
+ * @param {Hash} hash hash to be updated
78
+ * @param {UpdateHashContext} context context
79
+ * @returns {void}
80
+ */
81
+ updateHash(hash, context) {
82
+ if (this._hashUpdate === undefined) {
83
+ this._hashUpdate = JSON.stringify(this.options);
84
+ }
85
+ hash.update(this._hashUpdate);
86
+ }
87
+
88
+ /**
89
+ * Serializes this instance into the provided serializer context.
90
+ * @param {ObjectSerializerContext} context context
91
+ */
92
+ serialize(context) {
93
+ context.write(this.options).write(this.callRange);
94
+ super.serialize(context);
95
+ }
96
+
97
+ /**
98
+ * Restores this instance from the provided deserializer context.
99
+ * @param {ObjectDeserializerContext} context context
100
+ */
101
+ deserialize(context) {
102
+ this.options = context.read();
103
+ const rest = context.rest;
104
+ this.callRange = rest.read();
105
+ super.deserialize(rest.rest);
106
+ }
107
+ }
108
+
109
+ WorkletDependency.Template = class WorkletDependencyTemplate extends (
110
+ ModuleDependency.Template
111
+ ) {
112
+ /**
113
+ * Applies the plugin by registering its hooks on the compiler.
114
+ * @param {Dependency} dependency the dependency for which the template should be applied
115
+ * @param {ReplaceSource} source the current replace source which can be modified
116
+ * @param {DependencyTemplateContext} templateContext the context object
117
+ * @returns {void}
118
+ */
119
+ apply(dependency, source, templateContext) {
120
+ const {
121
+ module,
122
+ chunkGraph,
123
+ moduleGraph,
124
+ runtimeRequirements,
125
+ runtimeTemplate
126
+ } = templateContext;
127
+ const dep = /** @type {WorkletDependency} */ (dependency);
128
+ const block = /** @type {AsyncDependenciesBlock} */ (
129
+ moduleGraph.getParentBlock(dependency)
130
+ );
131
+ const entrypoint = /** @type {Entrypoint} */ (
132
+ chunkGraph.getBlockChunkGroup(block)
133
+ );
134
+
135
+ const entryChunk = entrypoint.getEntrypointChunk();
136
+ const runtimeChunk = entrypoint.getRuntimeChunk();
137
+ const referencedChunks = entryChunk.getAllReferencedChunks();
138
+ const runtimeChunkId =
139
+ runtimeChunk && runtimeChunk.id !== null ? runtimeChunk.id : null;
140
+
141
+ // For ESM module output emit the analyzable `new URL("./worklet.<name>.js",
142
+ // import.meta.url)` form (literal specifier, no runtime helpers) so other bundlers
143
+ // and webpack itself can statically follow the worklet. The worklet chunk links its
144
+ // splits via native `import`, so only the entry chunk is referenced.
145
+ const analyzableSpecifier =
146
+ runtimeTemplate.supportsAnalyzableEsm() && entryChunk.id !== null
147
+ ? runtimeTemplate._getAnalyzableChunkSpecifier(
148
+ dep.options.publicPath,
149
+ entryChunk,
150
+ module,
151
+ chunkGraph
152
+ )
153
+ : null;
154
+ if (analyzableSpecifier !== null) {
155
+ source.replace(
156
+ dep.callRange[0],
157
+ dep.callRange[1] - 1,
158
+ `(new URL(/* worklet import */ ${analyzableSpecifier}, ${runtimeTemplate.outputOptions.importMetaName}.url))`
159
+ );
160
+ return;
161
+ }
162
+
163
+ const workletImportBaseUrl = dep.options.publicPath
164
+ ? JSON.stringify(dep.options.publicPath)
165
+ : RuntimeGlobals.publicPath;
166
+
167
+ runtimeRequirements.add(RuntimeGlobals.publicPath);
168
+ runtimeRequirements.add(RuntimeGlobals.baseURI);
169
+ runtimeRequirements.add(RuntimeGlobals.getChunkScriptFilename);
170
+
171
+ /**
172
+ * @param {string | number} id chunk id
173
+ * @returns {string} `new URL(...)` expression for the chunk file
174
+ */
175
+ const toUrl = (id) =>
176
+ `new URL(${workletImportBaseUrl} + ${
177
+ RuntimeGlobals.getChunkScriptFilename
178
+ }(${JSON.stringify(id)}), ${RuntimeGlobals.baseURI})`;
179
+
180
+ // Module output: the worklet chunk is an ES module that links its split
181
+ // chunks via native `import`, which `addModule` resolves — so add just the
182
+ // entry chunk, with no worker-scope shim and no chunk pre-loading.
183
+ if (runtimeTemplate.isModule() && entryChunk.id !== null) {
184
+ source.replace(
185
+ dep.callRange[0],
186
+ dep.callRange[1] - 1,
187
+ `(${toUrl(entryChunk.id)})`
188
+ );
189
+ return;
190
+ }
191
+
192
+ // Fast path: a self-contained worklet (a single chunk, no splits or async
193
+ // `import()`) needs no chunk-loading runtime and no worker-scope shim, so the
194
+ // chunk is `addModule`-d directly with no bootstrap.
195
+ if (referencedChunks.size === 1 && runtimeChunkId !== null) {
196
+ source.replace(
197
+ dep.callRange[0],
198
+ dep.callRange[1] - 1,
199
+ `(${toUrl(runtimeChunkId)})`
200
+ );
201
+ return;
202
+ }
203
+
204
+ // A worklet can't load chunks at runtime, so every reachable chunk (initial
205
+ // splits and async `import()` targets alike) is pre-added via `addModule`
206
+ // from the calling scope. The runtime chunk is added last so it installs the
207
+ // chunks pushed before it and runs entry startup with every module present
208
+ // (see ImportScriptsChunkLoadingRuntimeModule).
209
+ /** @type {(string | number)[]} */
210
+ const restChunkIds = [];
211
+ for (const chunk of referencedChunks) {
212
+ if (chunk !== runtimeChunk && chunk.id !== null) {
213
+ restChunkIds.push(chunk.id);
214
+ }
215
+ }
216
+
217
+ runtimeRequirements.add(RuntimeGlobals.getWorkletBootstrap);
218
+
219
+ const add = "__webpack_worklet_add__";
220
+ const boot = `${add}(${RuntimeGlobals.getWorkletBootstrap}())`;
221
+ // Non-runtime chunks have no ordering constraint, so add them concurrently.
222
+ const addOne = runtimeTemplate.returningFunction(`${add}(u)`, "u");
223
+ const parallel =
224
+ restChunkIds.length > 0
225
+ ? `Promise.all([${restChunkIds.map(toUrl).join(", ")}].map(${addOne}))`
226
+ : undefined;
227
+ // The runtime chunk is added last: it runs entry startup with every module present.
228
+ const runtimeAdd =
229
+ runtimeChunkId !== null ? `${add}(${toUrl(runtimeChunkId)})` : undefined;
230
+
231
+ // Emit `async`/`await` only where the target supports async functions;
232
+ // otherwise fall back to an equivalent Promise chain (boot → rest → runtime).
233
+ let bootstrap;
234
+ if (runtimeTemplate.supportsAsyncFunction()) {
235
+ bootstrap = Template.asString([
236
+ `async function(${add}) {`,
237
+ Template.indent(
238
+ [
239
+ `await ${boot};`,
240
+ parallel ? `await ${parallel};` : "",
241
+ runtimeAdd ? `await ${runtimeAdd};` : ""
242
+ ].filter(Boolean)
243
+ ),
244
+ "}"
245
+ ]);
246
+ } else {
247
+ let chain = boot;
248
+ if (parallel) {
249
+ chain += `.then(${runtimeTemplate.returningFunction(parallel)})`;
250
+ }
251
+ if (runtimeAdd) {
252
+ chain += `.then(${runtimeTemplate.returningFunction(runtimeAdd)})`;
253
+ }
254
+ bootstrap = `function(${add}) { return ${chain}; }`;
255
+ }
256
+
257
+ // The wrapper forwards to the original `addModule` (its callee stays in the
258
+ // source, so the receiver is preserved); a plain function keeps it valid on
259
+ // ES targets without arrow functions.
260
+ source.insert(
261
+ dep.range[0],
262
+ `(/* worklet bootstrap */ ${bootstrap})(function(${WORKLET_MODULE}) { return `
263
+ );
264
+ source.replace(
265
+ dep.callRange[0],
266
+ dep.callRange[1] - 1,
267
+ `(${WORKLET_MODULE}); })`
268
+ );
269
+ }
270
+ };
271
+
272
+ makeSerializable(
273
+ WorkletDependency,
274
+ "webpack/lib/dependencies/WorkletDependency"
275
+ );
276
+
277
+ module.exports = WorkletDependency;
278
+ module.exports.WORKLET_MODULE = WORKLET_MODULE;
@@ -13,6 +13,7 @@
13
13
  /** @typedef {{ fn: FunctionExpression | ArrowFunctionExpression, expressions: (Expression | SpreadElement)[], needThis: boolean | undefined }} FunctionExpressionResult */
14
14
 
15
15
  /**
16
+ * Returns function expression with additional information.
16
17
  * @param {Expression | SpreadElement} expr expressions
17
18
  * @returns {FunctionExpressionResult | undefined} function expression with additional information
18
19
  */
@@ -12,12 +12,13 @@ const { UsageState } = require("../ExportsInfo");
12
12
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
13
13
 
14
14
  /**
15
+ * Process export info.
15
16
  * @param {RuntimeSpec} runtime the runtime
16
17
  * @param {RawReferencedExports} referencedExports list of referenced exports, will be added to
17
18
  * @param {string[]} prefix export prefix
18
19
  * @param {ExportInfo=} exportInfo the export info
19
20
  * @param {boolean} defaultPointsToSelf when true, using default will reference itself
20
- * @param {Set<ExportInfo>} alreadyVisited already visited export info (to handle circular reexports)
21
+ * @param {Set<ExportInfo>=} alreadyVisited already visited export info (to handle circular reexports)
21
22
  */
22
23
  const processExportInfo = (
23
24
  runtime,
@@ -25,7 +26,7 @@ const processExportInfo = (
25
26
  prefix,
26
27
  exportInfo,
27
28
  defaultPointsToSelf = false,
28
- alreadyVisited = new Set()
29
+ alreadyVisited = undefined
29
30
  ) => {
30
31
  if (!exportInfo) {
31
32
  referencedExports.push(prefix);
@@ -33,35 +34,37 @@ const processExportInfo = (
33
34
  }
34
35
  const used = exportInfo.getUsed(runtime);
35
36
  if (used === UsageState.Unused) return;
36
- if (alreadyVisited.has(exportInfo)) {
37
+ if (alreadyVisited !== undefined && alreadyVisited.has(exportInfo)) {
37
38
  referencedExports.push(prefix);
38
39
  return;
39
40
  }
40
- alreadyVisited.add(exportInfo);
41
+ // Terminal case: not recursing, so no need to track visited here
41
42
  if (
42
43
  used !== UsageState.OnlyPropertiesUsed ||
43
44
  !exportInfo.exportsInfo ||
44
45
  exportInfo.exportsInfo.otherExportsInfo.getUsed(runtime) !==
45
46
  UsageState.Unused
46
47
  ) {
47
- alreadyVisited.delete(exportInfo);
48
48
  referencedExports.push(prefix);
49
49
  return;
50
50
  }
51
+ // Only the recursive path needs the visited set; allocate it lazily
52
+ const visited = alreadyVisited !== undefined ? alreadyVisited : new Set();
53
+ visited.add(exportInfo);
51
54
  const exportsInfo = exportInfo.exportsInfo;
52
- for (const exportInfo of exportsInfo.orderedExports) {
55
+ for (const childExportInfo of exportsInfo.orderedExports) {
53
56
  processExportInfo(
54
57
  runtime,
55
58
  referencedExports,
56
- defaultPointsToSelf && exportInfo.name === "default"
59
+ defaultPointsToSelf && childExportInfo.name === "default"
57
60
  ? prefix
58
- : [...prefix, exportInfo.name],
59
- exportInfo,
61
+ : [...prefix, childExportInfo.name],
62
+ childExportInfo,
60
63
  false,
61
- alreadyVisited
64
+ visited
62
65
  );
63
66
  }
64
- alreadyVisited.delete(exportInfo);
67
+ visited.delete(exportInfo);
65
68
  };
66
69
 
67
70
  module.exports = processExportInfo;