@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
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
9
+ const { InlinedUsedName } = require("./optimize/InlineExports");
9
10
  const { equals } = require("./util/ArrayHelpers");
10
11
  const SortableSet = require("./util/SortableSet");
11
12
  const makeSerializable = require("./util/makeSerializable");
@@ -19,8 +20,10 @@ const { forEachRuntime } = require("./util/runtime");
19
20
  /** @typedef {import("./Module")} Module */
20
21
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
21
22
  /** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
22
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
23
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
23
+ /** @typedef {import("./optimize/InlineExports").InlinedValue} InlinedValue */
24
+ /** @typedef {[RestoreProvidedDataExports[], ExportInfo["provided"], ExportInfo["canMangleProvide"], ExportInfo["terminalBinding"]]} RestoreProvidedDataTuple */
25
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext<RestoreProvidedDataTuple>} ObjectDeserializerContext */
26
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext<RestoreProvidedDataTuple>} ObjectSerializerContext */
24
27
  /** @typedef {import("./util/Hash")} Hash */
25
28
 
26
29
  /** @typedef {typeof UsageState.OnlyPropertiesUsed | typeof UsageState.NoInfo | typeof UsageState.Unknown | typeof UsageState.Used} RuntimeUsageStateType */
@@ -34,19 +37,22 @@ const { forEachRuntime } = require("./util/runtime");
34
37
  /** @typedef {{ connection: ModuleGraphConnection, export: ExportInfoName[], priority: number }} TargetItem */
35
38
  /** @typedef {Map<Dependency | undefined, TargetItem>} Target */
36
39
 
37
- /** @typedef {string | null} ExportInfoUsedName */
40
+ /** @typedef {string | InlinedUsedName | null} ExportInfoUsedName */
38
41
  /** @typedef {boolean | null} ExportInfoProvided */
39
42
 
40
43
  /** @typedef {Map<ExportInfoName, ExportInfo>} Exports */
41
- /** @typedef {string | string[] | false} UsedName */
44
+ /** @typedef {string | string[] | InlinedUsedName | false} UsedName */
42
45
  /** @typedef {Set<ExportInfo>} AlreadyVisitedExportInfo */
43
46
 
44
47
  /**
48
+ * Defines the restore provided data exports type used by this module.
45
49
  * @typedef {object} RestoreProvidedDataExports
46
50
  * @property {ExportInfoName} name
47
51
  * @property {ExportInfo["provided"]} provided
48
52
  * @property {ExportInfo["canMangleProvide"]} canMangleProvide
53
+ * @property {ExportInfo["canInlineProvide"]=} canInlineProvide
49
54
  * @property {ExportInfo["terminalBinding"]} terminalBinding
55
+ * @property {ExportInfo["pureProvide"]=} pureProvide
50
56
  * @property {RestoreProvidedData | undefined} exportsInfo
51
57
  */
52
58
 
@@ -60,10 +66,22 @@ const UsageState = Object.freeze({
60
66
 
61
67
  const RETURNS_TRUE = () => true;
62
68
 
69
+ // Shared empty visited-set for `findTarget`: `_findTarget` only reads
70
+ // `alreadyVisited` (`.has`), never mutates it, so a fresh `new Set()` per call
71
+ // is pure churn on the per-export reexport hot path. Must stay never-mutated.
72
+ const EMPTY_VISITED = /** @type {Set<ExportInfo>} */ (new Set());
73
+
63
74
  const CIRCULAR = Symbol("circular target");
64
75
 
76
+ // bit layout of ExportInfo._inlineFlags
77
+ const INLINE_USE_TRUE = 1;
78
+ const INLINE_USE_FALSE = 2;
79
+ const INLINE_USE_MASK = 3;
80
+ const PURE_PROVIDE_FLAG = 4;
81
+
65
82
  class RestoreProvidedData {
66
83
  /**
84
+ * Creates an instance of RestoreProvidedData.
67
85
  * @param {RestoreProvidedDataExports[]} exports exports
68
86
  * @param {ExportInfo["provided"]} otherProvided other provided
69
87
  * @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
@@ -75,28 +93,47 @@ class RestoreProvidedData {
75
93
  otherCanMangleProvide,
76
94
  otherTerminalBinding
77
95
  ) {
96
+ /** @type {RestoreProvidedDataExports[]} */
78
97
  this.exports = exports;
98
+ /** @type {ExportInfoProvided | undefined} */
79
99
  this.otherProvided = otherProvided;
100
+ /** @type {boolean | undefined} */
80
101
  this.otherCanMangleProvide = otherCanMangleProvide;
102
+ /** @type {boolean} */
81
103
  this.otherTerminalBinding = otherTerminalBinding;
82
104
  }
83
105
 
84
106
  /**
107
+ * Serializes this instance into the provided serializer context.
85
108
  * @param {ObjectSerializerContext} context context
86
109
  */
87
- serialize({ write }) {
88
- write(this.exports);
89
- write(this.otherProvided);
90
- write(this.otherCanMangleProvide);
91
- write(this.otherTerminalBinding);
110
+ serialize(context) {
111
+ context
112
+ .write(this.exports)
113
+ .write(this.otherProvided)
114
+ .write(this.otherCanMangleProvide)
115
+ .write(this.otherTerminalBinding);
92
116
  }
93
117
 
94
118
  /**
119
+ * Restores this instance from the provided deserializer context.
95
120
  * @param {ObjectDeserializerContext} context context
96
121
  * @returns {RestoreProvidedData} RestoreProvidedData
97
122
  */
98
- static deserialize({ read }) {
99
- return new RestoreProvidedData(read(), read(), read(), read());
123
+ static deserialize(context) {
124
+ const exports = context.read();
125
+ const c1 = context.rest;
126
+ const otherProvided = c1.read();
127
+ const c2 = c1.rest;
128
+ const otherCanMangleProvide = c2.read();
129
+ const c3 = c2.rest;
130
+ const otherTerminalBinding = c3.read();
131
+ return new RestoreProvidedData(
132
+ exports,
133
+ otherProvided,
134
+ otherCanMangleProvide,
135
+ otherTerminalBinding
136
+ );
100
137
  }
101
138
  }
102
139
 
@@ -110,6 +147,21 @@ class ExportsInfo {
110
147
  constructor() {
111
148
  /** @type {Exports} */
112
149
  this._exports = new Map();
150
+
151
+ // `_otherExportsInfo` is a fallback entry for unlisted exports. Two roles:
152
+ // 1. factory template — `getExportInfo` creates `new ExportInfo(name, this)`,
153
+ // so created export info extends its properties.
154
+ // 2. flags whether the whole exportsInfo can be statically analyzed.
155
+ // Its `used` reachable values:
156
+ // - NoInfo: no use analysis yet (`optimization#usedExports` off), or used without info
157
+ // - Unused: analyzed, no unlisted export needed
158
+ // - Unknown: used in unknown way
159
+ // - Used/OnlyPropertiesUsed: never reached
160
+ // Its `provided` reachable values:
161
+ // - undefined: provision not determined yet
162
+ // - false: determined, no unlisted export is provided
163
+ // - null: only runtime knows (dynamic/unknown exports)
164
+ // - true: never reached
113
165
  /** @type {ExportInfo} */
114
166
  this._otherExportsInfo = new ExportInfo(null);
115
167
  /** @type {ExportInfo} */
@@ -118,9 +170,21 @@ class ExportsInfo {
118
170
  this._exportsAreOrdered = false;
119
171
  /** @type {ExportsInfo=} */
120
172
  this._redirectTo = undefined;
173
+ // fast-path flag for hasInlinedUsedName; set by InlineExportsPlugin
174
+ /** @type {boolean} */
175
+ this._hasInlinedExports = false;
176
+ }
177
+
178
+ /**
179
+ * Records that an owned export got an inlined used name.
180
+ * @returns {void}
181
+ */
182
+ markInlinedExports() {
183
+ this._hasInlinedExports = true;
121
184
  }
122
185
 
123
186
  /**
187
+ * Gets owned exports.
124
188
  * @returns {Iterable<ExportInfo>} all owned exports in any order
125
189
  */
126
190
  get ownedExports() {
@@ -128,6 +192,7 @@ class ExportsInfo {
128
192
  }
129
193
 
130
194
  /**
195
+ * Gets ordered owned exports.
131
196
  * @returns {Iterable<ExportInfo>} all owned exports in order
132
197
  */
133
198
  get orderedOwnedExports() {
@@ -138,6 +203,7 @@ class ExportsInfo {
138
203
  }
139
204
 
140
205
  /**
206
+ * Returns all exports in any order.
141
207
  * @returns {Iterable<ExportInfo>} all exports in any order
142
208
  */
143
209
  get exports() {
@@ -152,6 +218,7 @@ class ExportsInfo {
152
218
  }
153
219
 
154
220
  /**
221
+ * Gets ordered exports.
155
222
  * @returns {Iterable<ExportInfo>} all exports in order
156
223
  */
157
224
  get orderedExports() {
@@ -175,6 +242,7 @@ class ExportsInfo {
175
242
  }
176
243
 
177
244
  /**
245
+ * Gets other exports info.
178
246
  * @returns {ExportInfo} the export info of unlisted exports
179
247
  */
180
248
  get otherExportsInfo() {
@@ -185,6 +253,7 @@ class ExportsInfo {
185
253
  }
186
254
 
187
255
  /**
256
+ * Processes the provided export.
188
257
  * @param {Exports} exports exports
189
258
  * @private
190
259
  */
@@ -217,6 +286,7 @@ class ExportsInfo {
217
286
  }
218
287
 
219
288
  /**
289
+ * Sets redirect named to.
220
290
  * @param {ExportsInfo | undefined} exportsInfo exports info
221
291
  * @returns {boolean} result
222
292
  */
@@ -228,22 +298,12 @@ class ExportsInfo {
228
298
 
229
299
  setHasProvideInfo() {
230
300
  for (const exportInfo of this._exports.values()) {
231
- if (exportInfo.provided === undefined) {
232
- exportInfo.provided = false;
233
- }
234
- if (exportInfo.canMangleProvide === undefined) {
235
- exportInfo.canMangleProvide = true;
236
- }
301
+ exportInfo.setHasProvideInfo();
237
302
  }
238
303
  if (this._redirectTo !== undefined) {
239
304
  this._redirectTo.setHasProvideInfo();
240
305
  } else {
241
- if (this._otherExportsInfo.provided === undefined) {
242
- this._otherExportsInfo.provided = false;
243
- }
244
- if (this._otherExportsInfo.canMangleProvide === undefined) {
245
- this._otherExportsInfo.canMangleProvide = true;
246
- }
306
+ this._otherExportsInfo.setHasProvideInfo();
247
307
  }
248
308
  }
249
309
 
@@ -260,6 +320,7 @@ class ExportsInfo {
260
320
  }
261
321
 
262
322
  /**
323
+ * Gets own export info.
263
324
  * @param {ExportInfoName} name export name
264
325
  * @returns {ExportInfo} export info for this name
265
326
  */
@@ -273,6 +334,7 @@ class ExportsInfo {
273
334
  }
274
335
 
275
336
  /**
337
+ * Returns export info for this name.
276
338
  * @param {ExportInfoName} name export name
277
339
  * @returns {ExportInfo} export info for this name
278
340
  */
@@ -289,6 +351,7 @@ class ExportsInfo {
289
351
  }
290
352
 
291
353
  /**
354
+ * Gets read only export info.
292
355
  * @param {ExportInfoName} name export name
293
356
  * @returns {ExportInfo} export info for this name
294
357
  */
@@ -302,30 +365,43 @@ class ExportsInfo {
302
365
  }
303
366
 
304
367
  /**
368
+ * Gets read only export info recursive.
305
369
  * @param {ExportInfoName[]} name export name
306
370
  * @returns {ExportInfo | undefined} export info for this name
307
371
  */
308
372
  getReadOnlyExportInfoRecursive(name) {
309
- const exportInfo = this.getReadOnlyExportInfo(name[0]);
310
- if (name.length === 1) return exportInfo;
311
- if (!exportInfo.exportsInfo) return;
312
- return exportInfo.exportsInfo.getReadOnlyExportInfoRecursive(name.slice(1));
373
+ /** @type {ExportsInfo} */
374
+ let exportsInfo = this;
375
+ const last = name.length - 1;
376
+ for (let i = 0; ; i++) {
377
+ const exportInfo = exportsInfo.getReadOnlyExportInfo(name[i]);
378
+ if (i === last) return exportInfo;
379
+ if (!exportInfo.exportsInfo) return;
380
+ exportsInfo = exportInfo.exportsInfo;
381
+ }
313
382
  }
314
383
 
315
384
  /**
385
+ * Gets nested exports info.
316
386
  * @param {ExportInfoName[]=} name the export name
317
387
  * @returns {ExportsInfo | undefined} the nested exports info
318
388
  */
319
389
  getNestedExportsInfo(name) {
320
390
  if (Array.isArray(name) && name.length > 0) {
321
- const info = this.getReadOnlyExportInfo(name[0]);
322
- if (!info.exportsInfo) return;
323
- return info.exportsInfo.getNestedExportsInfo(name.slice(1));
391
+ /** @type {ExportsInfo} */
392
+ let exportsInfo = this;
393
+ for (let i = 0; i < name.length; i++) {
394
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
395
+ if (!info.exportsInfo) return;
396
+ exportsInfo = info.exportsInfo;
397
+ }
398
+ return exportsInfo;
324
399
  }
325
400
  return this;
326
401
  }
327
402
 
328
403
  /**
404
+ * Sets unknown exports provided.
329
405
  * @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
330
406
  * @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
331
407
  * @param {Dependency=} targetKey use this as key for the target
@@ -404,6 +480,7 @@ class ExportsInfo {
404
480
  }
405
481
 
406
482
  /**
483
+ * Sets used in unknown way.
407
484
  * @param {RuntimeSpec} runtime the runtime
408
485
  * @returns {boolean} true, when something changed
409
486
  */
@@ -418,25 +495,14 @@ class ExportsInfo {
418
495
  if (this._redirectTo.setUsedInUnknownWay(runtime)) {
419
496
  changed = true;
420
497
  }
421
- } else {
422
- if (
423
- this._otherExportsInfo.setUsedConditionally(
424
- (used) => used < UsageState.Unknown,
425
- UsageState.Unknown,
426
- runtime
427
- )
428
- ) {
429
- changed = true;
430
- }
431
- if (this._otherExportsInfo.canMangleUse !== false) {
432
- this._otherExportsInfo.canMangleUse = false;
433
- changed = true;
434
- }
498
+ } else if (this._otherExportsInfo.setUsedInUnknownWay(runtime)) {
499
+ changed = true;
435
500
  }
436
501
  return changed;
437
502
  }
438
503
 
439
504
  /**
505
+ * Sets used without info.
440
506
  * @param {RuntimeSpec} runtime the runtime
441
507
  * @returns {boolean} true, when something changed
442
508
  */
@@ -451,19 +517,14 @@ class ExportsInfo {
451
517
  if (this._redirectTo.setUsedWithoutInfo(runtime)) {
452
518
  changed = true;
453
519
  }
454
- } else {
455
- if (this._otherExportsInfo.setUsed(UsageState.NoInfo, runtime)) {
456
- changed = true;
457
- }
458
- if (this._otherExportsInfo.canMangleUse !== false) {
459
- this._otherExportsInfo.canMangleUse = false;
460
- changed = true;
461
- }
520
+ } else if (this._otherExportsInfo.setUsedWithoutInfo(runtime)) {
521
+ changed = true;
462
522
  }
463
523
  return changed;
464
524
  }
465
525
 
466
526
  /**
527
+ * Sets all known exports used.
467
528
  * @param {RuntimeSpec} runtime the runtime
468
529
  * @returns {boolean} true, when something changed
469
530
  */
@@ -479,6 +540,7 @@ class ExportsInfo {
479
540
  }
480
541
 
481
542
  /**
543
+ * Sets used for side effects only.
482
544
  * @param {RuntimeSpec} runtime the runtime
483
545
  * @returns {boolean} true, when something changed
484
546
  */
@@ -491,6 +553,7 @@ class ExportsInfo {
491
553
  }
492
554
 
493
555
  /**
556
+ * Checks whether this exports info is used.
494
557
  * @param {RuntimeSpec} runtime the runtime
495
558
  * @returns {boolean} true, when the module exports are used in any way
496
559
  */
@@ -511,6 +574,7 @@ class ExportsInfo {
511
574
  }
512
575
 
513
576
  /**
577
+ * Checks whether this exports info is module used.
514
578
  * @param {RuntimeSpec} runtime the runtime
515
579
  * @returns {boolean} true, when the module is used in any way
516
580
  */
@@ -523,6 +587,7 @@ class ExportsInfo {
523
587
  }
524
588
 
525
589
  /**
590
+ * Returns set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown).
526
591
  * @param {RuntimeSpec} runtime the runtime
527
592
  * @returns {SortableSet<ExportInfoName> | boolean | null} set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown)
528
593
  */
@@ -572,6 +637,7 @@ class ExportsInfo {
572
637
  }
573
638
 
574
639
  /**
640
+ * Gets provided exports.
575
641
  * @returns {null | true | ExportInfoName[]} list of exports when known
576
642
  */
577
643
  getProvidedExports() {
@@ -611,6 +677,7 @@ class ExportsInfo {
611
677
  }
612
678
 
613
679
  /**
680
+ * Gets relevant exports.
614
681
  * @param {RuntimeSpec} runtime the runtime
615
682
  * @returns {ExportInfo[]} exports that are relevant (not unused and potential provided)
616
683
  */
@@ -638,22 +705,30 @@ class ExportsInfo {
638
705
  }
639
706
 
640
707
  /**
708
+ * Checks whether this exports info is export provided.
641
709
  * @param {ExportInfoName | ExportInfoName[]} name the name of the export
642
710
  * @returns {boolean | undefined | null} if the export is provided
643
711
  */
644
712
  isExportProvided(name) {
645
713
  if (Array.isArray(name)) {
646
- const info = this.getReadOnlyExportInfo(name[0]);
647
- if (info.exportsInfo && name.length > 1) {
648
- return info.exportsInfo.isExportProvided(name.slice(1));
714
+ /** @type {ExportsInfo} */
715
+ let exportsInfo = this;
716
+ const last = name.length - 1;
717
+ for (let i = 0; ; i++) {
718
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
719
+ if (info.exportsInfo && i < last) {
720
+ exportsInfo = info.exportsInfo;
721
+ continue;
722
+ }
723
+ return info.provided ? i === last || undefined : info.provided;
649
724
  }
650
- return info.provided ? name.length === 1 || undefined : info.provided;
651
725
  }
652
726
  const info = this.getReadOnlyExportInfo(name);
653
727
  return info.provided;
654
728
  }
655
729
 
656
730
  /**
731
+ * Returns key representing the usage.
657
732
  * @param {RuntimeSpec} runtime runtime
658
733
  * @returns {string} key representing the usage
659
734
  */
@@ -673,6 +748,7 @@ class ExportsInfo {
673
748
  }
674
749
 
675
750
  /**
751
+ * Checks whether this exports info is equally used.
676
752
  * @param {RuntimeSpec} runtimeA first runtime
677
753
  * @param {RuntimeSpec} runtimeB second runtime
678
754
  * @returns {boolean} true, when equally used
@@ -701,6 +777,7 @@ class ExportsInfo {
701
777
  }
702
778
 
703
779
  /**
780
+ * Returns usage status.
704
781
  * @param {ExportInfoName | ExportInfoName[]} name export name
705
782
  * @param {RuntimeSpec} runtime check usage for this runtime only
706
783
  * @returns {UsageStateType} usage status
@@ -708,53 +785,121 @@ class ExportsInfo {
708
785
  getUsed(name, runtime) {
709
786
  if (Array.isArray(name)) {
710
787
  if (name.length === 0) return this.otherExportsInfo.getUsed(runtime);
711
- const info = this.getReadOnlyExportInfo(name[0]);
712
- if (info.exportsInfo && name.length > 1) {
713
- return info.exportsInfo.getUsed(name.slice(1), runtime);
788
+ // Walk the nested path iteratively to avoid a `slice` per level
789
+ /** @type {ExportsInfo} */
790
+ let exportsInfo = this;
791
+ const last = name.length - 1;
792
+ for (let i = 0; ; i++) {
793
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
794
+ if (i === last || !info.exportsInfo) return info.getUsed(runtime);
795
+ exportsInfo = info.exportsInfo;
714
796
  }
715
- return info.getUsed(runtime);
716
797
  }
717
798
  const info = this.getReadOnlyExportInfo(name);
718
799
  return info.getUsed(runtime);
719
800
  }
720
801
 
721
802
  /**
803
+ * Returns the used name.
722
804
  * @param {ExportInfoName | ExportInfoName[]} name the export name
723
805
  * @param {RuntimeSpec} runtime check usage for this runtime only
724
806
  * @returns {UsedName} the used name
725
807
  */
726
808
  getUsedName(name, runtime) {
727
809
  if (Array.isArray(name)) {
728
- // TODO improve this
729
810
  if (name.length === 0) {
730
811
  if (!this.isUsed(runtime)) return false;
731
812
  return name;
732
813
  }
733
- const info = this.getReadOnlyExportInfo(name[0]);
734
- const x = info.getUsedName(name[0], runtime);
735
- if (x === false) return false;
736
- const arr =
737
- /** @type {ExportInfoName[]} */
738
- (x === name[0] && name.length === 1 ? name : [x]);
739
- if (name.length === 1) {
740
- return arr;
814
+ // Walk the nested path once, collecting used names into a single array
815
+ // instead of slicing/spreading at every level.
816
+ /** @type {ExportsInfo} */
817
+ let exportsInfo = this;
818
+ /** @type {ExportInfoName[] | undefined} */
819
+ let result;
820
+ const last = name.length - 1;
821
+ for (let i = 0; ; i++) {
822
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
823
+ const x = info.getUsedName(name[i], runtime);
824
+ if (x === false) return false;
825
+ if (x instanceof InlinedUsedName) {
826
+ // The inlined value replaces the prefix; trailing ids become its suffix
827
+ if (i === last) return x;
828
+ return new InlinedUsedName(x.value, [
829
+ ...x.suffix,
830
+ ...name.slice(i + 1)
831
+ ]);
832
+ }
833
+ if (i === last) {
834
+ if (result === undefined) return x === name[i] ? name : [x];
835
+ result.push(x);
836
+ return result;
837
+ }
838
+ if (result === undefined) result = [];
839
+ result.push(x);
840
+ // Descend only while the parent is reached purely via property access
841
+ if (
842
+ info.exportsInfo &&
843
+ info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
844
+ ) {
845
+ exportsInfo = info.exportsInfo;
846
+ continue;
847
+ }
848
+ // Cannot descend further: keep the remaining ids unchanged
849
+ for (let j = i + 1; j <= last; j++) result.push(name[j]);
850
+ return result;
851
+ }
852
+ }
853
+ const info = this.getReadOnlyExportInfo(name);
854
+ return info.getUsedName(name, runtime);
855
+ }
856
+
857
+ /**
858
+ * Checks whether `getUsedName(name, runtime)` would return an `InlinedUsedName`,
859
+ * without allocating intermediate used-name arrays (hot path for connection conditions).
860
+ * @param {ExportInfoName[]} name the export name path
861
+ * @param {RuntimeSpec} runtime check usage for this runtime only
862
+ * @returns {boolean} true when the used name resolves to an inlined value
863
+ */
864
+ hasInlinedUsedName(name, runtime) {
865
+ if (name.length === 0) return false;
866
+ /** @type {ExportsInfo} */
867
+ let exportsInfo = this;
868
+ const last = name.length - 1;
869
+ for (let i = 0; ; i++) {
870
+ // follow redirects for the fast-path flag; InlinedUsedName can only
871
+ // exist on a level whose (redirected) exportsInfo is marked
872
+ let hasInlined = false;
873
+ /** @type {ExportsInfo | undefined} */
874
+ let e = exportsInfo;
875
+ while (e !== undefined) {
876
+ if (e._hasInlinedExports) {
877
+ hasInlined = true;
878
+ break;
879
+ }
880
+ e = e._redirectTo;
881
+ }
882
+ if (!hasInlined && i === last) return false;
883
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
884
+ if (hasInlined) {
885
+ const x = info.getUsedName(name[i], runtime);
886
+ if (x === false) return false;
887
+ if (x instanceof InlinedUsedName) return true;
888
+ if (i === last) return false;
741
889
  }
742
890
  if (
743
891
  info.exportsInfo &&
744
892
  info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
745
893
  ) {
746
- const nested = info.exportsInfo.getUsedName(name.slice(1), runtime);
747
- if (!nested) return false;
748
- return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
894
+ exportsInfo = info.exportsInfo;
895
+ continue;
749
896
  }
750
- return [...arr, ...name.slice(1)];
897
+ return false;
751
898
  }
752
- const info = this.getReadOnlyExportInfo(name);
753
- const usedName = info.getUsedName(name, runtime);
754
- return usedName;
755
899
  }
756
900
 
757
901
  /**
902
+ * Updates the hash with the data contributed by this instance.
758
903
  * @param {Hash} hash the hash
759
904
  * @param {RuntimeSpec} runtime the runtime
760
905
  * @returns {void}
@@ -764,27 +909,38 @@ class ExportsInfo {
764
909
  }
765
910
 
766
911
  /**
912
+ * Updates hash using the provided hash.
767
913
  * @param {Hash} hash the hash
768
914
  * @param {RuntimeSpec} runtime the runtime
769
915
  * @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
770
916
  * @returns {void}
771
917
  */
772
918
  _updateHash(hash, runtime, alreadyVisitedExportsInfo) {
773
- const set = new Set(alreadyVisitedExportsInfo);
774
- set.add(this);
919
+ // add/delete keeps path semantics without copying the set per level
920
+ alreadyVisitedExportsInfo.add(this);
775
921
  for (const exportInfo of this.orderedExports) {
776
922
  if (exportInfo.hasInfo(this._otherExportsInfo, runtime)) {
777
- exportInfo._updateHash(hash, runtime, set);
923
+ exportInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
778
924
  }
779
925
  }
780
- this._sideEffectsOnlyInfo._updateHash(hash, runtime, set);
781
- this._otherExportsInfo._updateHash(hash, runtime, set);
926
+ this._sideEffectsOnlyInfo._updateHash(
927
+ hash,
928
+ runtime,
929
+ alreadyVisitedExportsInfo
930
+ );
931
+ this._otherExportsInfo._updateHash(
932
+ hash,
933
+ runtime,
934
+ alreadyVisitedExportsInfo
935
+ );
782
936
  if (this._redirectTo !== undefined) {
783
- this._redirectTo._updateHash(hash, runtime, set);
937
+ this._redirectTo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
784
938
  }
939
+ alreadyVisitedExportsInfo.delete(this);
785
940
  }
786
941
 
787
942
  /**
943
+ * Gets restore provided data.
788
944
  * @returns {RestoreProvidedData} restore provided data
789
945
  */
790
946
  getRestoreProvidedData() {
@@ -794,22 +950,42 @@ class ExportsInfo {
794
950
  /** @type {RestoreProvidedDataExports[]} */
795
951
  const exports = [];
796
952
  for (const exportInfo of this.orderedExports) {
953
+ const canInlineProvide = exportInfo.canInlineProvide;
954
+ const pureProvide = exportInfo.pureProvide;
955
+ // inline-exports data is only stored when present, so builds without the
956
+ // feature don't pay for it in the persistent cache
957
+ const hasInlineInfo =
958
+ canInlineProvide !== undefined || pureProvide !== undefined;
797
959
  if (
798
960
  exportInfo.provided !== otherProvided ||
799
961
  exportInfo.canMangleProvide !== otherCanMangleProvide ||
800
962
  exportInfo.terminalBinding !== otherTerminalBinding ||
963
+ hasInlineInfo ||
801
964
  exportInfo.exportsInfoOwned
802
965
  ) {
803
- exports.push({
804
- name: exportInfo.name,
805
- provided: exportInfo.provided,
806
- canMangleProvide: exportInfo.canMangleProvide,
807
- terminalBinding: exportInfo.terminalBinding,
808
- exportsInfo: exportInfo.exportsInfoOwned
809
- ? /** @type {NonNullable<ExportInfo["exportsInfo"]>} */
810
- (exportInfo.exportsInfo).getRestoreProvidedData()
811
- : undefined
812
- });
966
+ const exportsInfo = exportInfo.exportsInfoOwned
967
+ ? /** @type {NonNullable<ExportInfo["exportsInfo"]>} */
968
+ (exportInfo.exportsInfo).getRestoreProvidedData()
969
+ : undefined;
970
+ exports.push(
971
+ hasInlineInfo
972
+ ? {
973
+ name: exportInfo.name,
974
+ provided: exportInfo.provided,
975
+ canMangleProvide: exportInfo.canMangleProvide,
976
+ canInlineProvide,
977
+ terminalBinding: exportInfo.terminalBinding,
978
+ pureProvide,
979
+ exportsInfo
980
+ }
981
+ : {
982
+ name: exportInfo.name,
983
+ provided: exportInfo.provided,
984
+ canMangleProvide: exportInfo.canMangleProvide,
985
+ terminalBinding: exportInfo.terminalBinding,
986
+ exportsInfo
987
+ }
988
+ );
813
989
  }
814
990
  }
815
991
  return new RestoreProvidedData(
@@ -821,6 +997,7 @@ class ExportsInfo {
821
997
  }
822
998
 
823
999
  /**
1000
+ * Processes the provided data.
824
1001
  * @param {RestoreProvidedData} data data
825
1002
  */
826
1003
  restoreProvided({
@@ -843,7 +1020,9 @@ class ExportsInfo {
843
1020
  const exportInfo = this.getExportInfo(exp.name);
844
1021
  exportInfo.provided = exp.provided;
845
1022
  exportInfo.canMangleProvide = exp.canMangleProvide;
1023
+ exportInfo.canInlineProvide = exp.canInlineProvide;
846
1024
  exportInfo.terminalBinding = exp.terminalBinding;
1025
+ exportInfo.pureProvide = exp.pureProvide;
847
1026
  if (exp.exportsInfo) {
848
1027
  const exportsInfo = exportInfo.createNestedExportsInfo();
849
1028
  exportsInfo.restoreProvided(exp.exportsInfo);
@@ -855,6 +1034,7 @@ class ExportsInfo {
855
1034
 
856
1035
  class ExportInfo {
857
1036
  /**
1037
+ * Creates an instance of ExportInfo.
858
1038
  * @param {ExportInfoName | null} name the original name of the export
859
1039
  * @param {ExportInfo=} initFrom init values from this ExportInfo
860
1040
  */
@@ -906,6 +1086,14 @@ class ExportInfo {
906
1086
  * @type {boolean | undefined}
907
1087
  */
908
1088
  this.canMangleProvide = initFrom ? initFrom.canMangleProvide : undefined;
1089
+ // only specific export info can be inlined,
1090
+ // so _otherExportsInfo.canInlineProvide is always undefined
1091
+ /**
1092
+ * value slot for `canInlineProvide`
1093
+ * @private
1094
+ * @type {InlinedValue | undefined}
1095
+ */
1096
+ this._inlinedValue = undefined;
909
1097
  /**
910
1098
  * true: it can be mangled
911
1099
  * false: is can not be mangled
@@ -913,6 +1101,12 @@ class ExportInfo {
913
1101
  * @type {boolean | undefined}
914
1102
  */
915
1103
  this.canMangleUse = initFrom ? initFrom.canMangleUse : undefined;
1104
+ /**
1105
+ * bitfield backing `canInlineUse` and `pureProvide`
1106
+ * @private
1107
+ * @type {number}
1108
+ */
1109
+ this._inlineFlags = 0;
916
1110
  /** @type {boolean} */
917
1111
  this.exportsInfoOwned = false;
918
1112
  /** @type {ExportsInfo | undefined} */
@@ -933,6 +1127,57 @@ class ExportInfo {
933
1127
  this._maxTarget = undefined;
934
1128
  }
935
1129
 
1130
+ /**
1131
+ * defined: the export binds to a small primitive constant and may be inlined
1132
+ * undefined: not an inlined constant export
1133
+ * @returns {InlinedValue | undefined} inlined value
1134
+ */
1135
+ get canInlineProvide() {
1136
+ return this._inlinedValue;
1137
+ }
1138
+
1139
+ set canInlineProvide(value) {
1140
+ this._inlinedValue = value;
1141
+ }
1142
+
1143
+ /**
1144
+ * true: at least one consumer accepts inlining, none rejected
1145
+ * false: at least one consumer rejected inlining
1146
+ * undefined: collecting; no consumer has decided yet
1147
+ * @returns {boolean | undefined} can inline use
1148
+ */
1149
+ get canInlineUse() {
1150
+ switch (this._inlineFlags & INLINE_USE_MASK) {
1151
+ case INLINE_USE_TRUE:
1152
+ return true;
1153
+ case INLINE_USE_FALSE:
1154
+ return false;
1155
+ default:
1156
+ return undefined;
1157
+ }
1158
+ }
1159
+
1160
+ set canInlineUse(value) {
1161
+ this._inlineFlags =
1162
+ (this._inlineFlags & ~INLINE_USE_MASK) |
1163
+ (value === undefined ? 0 : value ? INLINE_USE_TRUE : INLINE_USE_FALSE);
1164
+ }
1165
+
1166
+ /**
1167
+ * Only specific export info can be pure, so other_export_info.pure is always undefined.
1168
+ * true: calling the export has no observable side effects
1169
+ * undefined: it was not determined whether the export is pure
1170
+ * @returns {boolean | undefined} pure provide
1171
+ */
1172
+ get pureProvide() {
1173
+ return (this._inlineFlags & PURE_PROVIDE_FLAG) !== 0 ? true : undefined;
1174
+ }
1175
+
1176
+ set pureProvide(value) {
1177
+ if (value) this._inlineFlags |= PURE_PROVIDE_FLAG;
1178
+ else this._inlineFlags &= ~PURE_PROVIDE_FLAG;
1179
+ }
1180
+
936
1181
  get canMangle() {
937
1182
  switch (this.canMangleProvide) {
938
1183
  case undefined:
@@ -955,6 +1200,16 @@ class ExportInfo {
955
1200
  }
956
1201
 
957
1202
  /**
1203
+ * @returns {InlinedValue | undefined} the inlined value when both provide and use sides agree, otherwise undefined
1204
+ */
1205
+ canInline() {
1206
+ return this.canInlineProvide !== undefined && this.canInlineUse === true
1207
+ ? this.canInlineProvide
1208
+ : undefined;
1209
+ }
1210
+
1211
+ /**
1212
+ * Sets used in unknown way.
958
1213
  * @param {RuntimeSpec} runtime only apply to this runtime
959
1214
  * @returns {boolean} true, when something changed
960
1215
  */
@@ -973,10 +1228,15 @@ class ExportInfo {
973
1228
  this.canMangleUse = false;
974
1229
  changed = true;
975
1230
  }
1231
+ if (this.canInlineUse !== false) {
1232
+ this.canInlineUse = false;
1233
+ changed = true;
1234
+ }
976
1235
  return changed;
977
1236
  }
978
1237
 
979
1238
  /**
1239
+ * Sets used without info.
980
1240
  * @param {RuntimeSpec} runtime only apply to this runtime
981
1241
  * @returns {boolean} true, when something changed
982
1242
  */
@@ -989,9 +1249,22 @@ class ExportInfo {
989
1249
  this.canMangleUse = false;
990
1250
  changed = true;
991
1251
  }
1252
+ if (this.canInlineUse !== false) {
1253
+ this.canInlineUse = false;
1254
+ changed = true;
1255
+ }
992
1256
  return changed;
993
1257
  }
994
1258
 
1259
+ setHasProvideInfo() {
1260
+ if (this.provided === undefined) {
1261
+ this.provided = false;
1262
+ }
1263
+ if (this.canMangleProvide === undefined) {
1264
+ this.canMangleProvide = true;
1265
+ }
1266
+ }
1267
+
995
1268
  setHasUseInfo() {
996
1269
  if (!this._hasUseInRuntimeInfo) {
997
1270
  this._hasUseInRuntimeInfo = true;
@@ -1006,6 +1279,7 @@ class ExportInfo {
1006
1279
  }
1007
1280
 
1008
1281
  /**
1282
+ * Sets used conditionally.
1009
1283
  * @param {(condition: UsageStateType) => boolean} condition compare with old value
1010
1284
  * @param {UsageStateType} newValue set when condition is true
1011
1285
  * @param {RuntimeSpec} runtime only apply to this runtime
@@ -1059,6 +1333,7 @@ class ExportInfo {
1059
1333
  }
1060
1334
 
1061
1335
  /**
1336
+ * Updates used using the provided new value.
1062
1337
  * @param {UsageStateType} newValue new value of the used state
1063
1338
  * @param {RuntimeSpec} runtime only apply to this runtime
1064
1339
  * @returns {boolean} true when something has changed
@@ -1107,6 +1382,7 @@ class ExportInfo {
1107
1382
  }
1108
1383
 
1109
1384
  /**
1385
+ * Returns true, if something has changed.
1110
1386
  * @param {Dependency} key the key
1111
1387
  * @returns {boolean} true, if something has changed
1112
1388
  */
@@ -1120,6 +1396,7 @@ class ExportInfo {
1120
1396
  }
1121
1397
 
1122
1398
  /**
1399
+ * Updates target using the provided key.
1123
1400
  * @param {Dependency} key the key
1124
1401
  * @param {ModuleGraphConnection} connection the target module if a single one
1125
1402
  * @param {ExportInfoName[] | null=} exportName the exported name
@@ -1127,12 +1404,16 @@ class ExportInfo {
1127
1404
  * @returns {boolean} true, if something has changed
1128
1405
  */
1129
1406
  setTarget(key, connection, exportName, priority = 0) {
1130
- if (exportName) exportName = [...exportName];
1407
+ // `equals` compares element-wise, so the incoming `exportName` can be used
1408
+ // directly for the change-check; only copy it when actually stored, so the
1409
+ // common no-op (unchanged target) path allocates nothing.
1131
1410
  if (!this._target) {
1132
1411
  this._target = /** @type {Target} */ (new Map());
1133
1412
  this._target.set(key, {
1134
1413
  connection,
1135
- export: /** @type {ExportInfoName[]} */ (exportName),
1414
+ export: /** @type {ExportInfoName[]} */ (
1415
+ exportName ? [...exportName] : exportName
1416
+ ),
1136
1417
  priority
1137
1418
  });
1138
1419
  return true;
@@ -1142,7 +1423,9 @@ class ExportInfo {
1142
1423
  if (oldTarget === null && !connection) return false;
1143
1424
  this._target.set(key, {
1144
1425
  connection,
1145
- export: /** @type {ExportInfoName[]} */ (exportName),
1426
+ export: /** @type {ExportInfoName[]} */ (
1427
+ exportName ? [...exportName] : exportName
1428
+ ),
1146
1429
  priority
1147
1430
  });
1148
1431
  this._maxTarget = undefined;
@@ -1156,7 +1439,9 @@ class ExportInfo {
1156
1439
  : oldTarget.export)
1157
1440
  ) {
1158
1441
  oldTarget.connection = connection;
1159
- oldTarget.export = /** @type {ExportInfoName[]} */ (exportName);
1442
+ oldTarget.export = /** @type {ExportInfoName[]} */ (
1443
+ exportName ? [...exportName] : exportName
1444
+ );
1160
1445
  oldTarget.priority = priority;
1161
1446
  this._maxTarget = undefined;
1162
1447
  return true;
@@ -1165,6 +1450,7 @@ class ExportInfo {
1165
1450
  }
1166
1451
 
1167
1452
  /**
1453
+ * Returns usage state.
1168
1454
  * @param {RuntimeSpec} runtime for this runtime
1169
1455
  * @returns {UsageStateType} usage state
1170
1456
  */
@@ -1203,10 +1489,10 @@ class ExportInfo {
1203
1489
  }
1204
1490
 
1205
1491
  /**
1206
- * get used name
1492
+ * Returns used name. May return InlinedUsedName when the export is inlined to a primitive.
1207
1493
  * @param {string | undefined} fallbackName fallback name for used exports with no name
1208
1494
  * @param {RuntimeSpec} runtime check usage for this runtime only
1209
- * @returns {string | false} used name
1495
+ * @returns {string | InlinedUsedName | false} used name
1210
1496
  */
1211
1497
  getUsedName(fallbackName, runtime) {
1212
1498
  if (this._hasUseInRuntimeInfo) {
@@ -1218,14 +1504,17 @@ class ExportInfo {
1218
1504
  if (!this._usedInRuntime.has(runtime)) {
1219
1505
  return false;
1220
1506
  }
1221
- } else if (
1222
- runtime !== undefined &&
1223
- [...runtime].every(
1224
- (runtime) =>
1225
- !(/** @type {UsedInRuntime} */ (this._usedInRuntime).has(runtime))
1226
- )
1227
- ) {
1228
- return false;
1507
+ } else if (runtime !== undefined) {
1508
+ // Unused unless at least one runtime in the set is used; loop avoids
1509
+ // allocating an array from the runtime set on this hot path.
1510
+ let anyUsed = false;
1511
+ for (const r of runtime) {
1512
+ if (this._usedInRuntime.has(r)) {
1513
+ anyUsed = true;
1514
+ break;
1515
+ }
1516
+ }
1517
+ if (!anyUsed) return false;
1229
1518
  }
1230
1519
  }
1231
1520
  }
@@ -1234,6 +1523,7 @@ class ExportInfo {
1234
1523
  }
1235
1524
 
1236
1525
  /**
1526
+ * Checks whether this export info has used name.
1237
1527
  * @returns {boolean} true, when a mangled name of this export is set
1238
1528
  */
1239
1529
  hasUsedName() {
@@ -1241,8 +1531,8 @@ class ExportInfo {
1241
1531
  }
1242
1532
 
1243
1533
  /**
1244
- * Sets the mangled name of this export
1245
- * @param {string} name the new name
1534
+ * Updates used name using the provided name.
1535
+ * @param {string | InlinedUsedName} name the new name
1246
1536
  * @returns {void}
1247
1537
  */
1248
1538
  setUsedName(name) {
@@ -1250,6 +1540,7 @@ class ExportInfo {
1250
1540
  }
1251
1541
 
1252
1542
  /**
1543
+ * Gets terminal binding.
1253
1544
  * @param {ModuleGraph} moduleGraph the module graph
1254
1545
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1255
1546
  * @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
@@ -1294,15 +1585,21 @@ class ExportInfo {
1294
1585
  }
1295
1586
 
1296
1587
  /**
1588
+ * Returns the target, undefined when there is no target, false when no target is valid.
1297
1589
  * @param {ModuleGraph} moduleGraph the module graph
1298
1590
  * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1299
1591
  * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
1300
1592
  */
1301
1593
  findTarget(moduleGraph, validTargetModuleFilter) {
1302
- return this._findTarget(moduleGraph, validTargetModuleFilter, new Set());
1594
+ return this._findTarget(
1595
+ moduleGraph,
1596
+ validTargetModuleFilter,
1597
+ EMPTY_VISITED
1598
+ );
1303
1599
  }
1304
1600
 
1305
1601
  /**
1602
+ * Returns the target, undefined when there is no target, false when no target is valid.
1306
1603
  * @param {ModuleGraph} moduleGraph the module graph
1307
1604
  * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1308
1605
  * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
@@ -1353,6 +1650,7 @@ class ExportInfo {
1353
1650
  }
1354
1651
 
1355
1652
  /**
1653
+ * Returns the target.
1356
1654
  * @param {ModuleGraph} moduleGraph the module graph
1357
1655
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1358
1656
  * @returns {TargetItemWithConnection | undefined} the target
@@ -1364,6 +1662,7 @@ class ExportInfo {
1364
1662
  }
1365
1663
 
1366
1664
  /**
1665
+ * Returns the target.
1367
1666
  * @param {ModuleGraph} moduleGraph the module graph
1368
1667
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1369
1668
  * @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
@@ -1371,6 +1670,7 @@ class ExportInfo {
1371
1670
  */
1372
1671
  _getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
1373
1672
  /**
1673
+ * Returns resolved target.
1374
1674
  * @param {TargetItem | undefined | null} inputTarget unresolved target
1375
1675
  * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
1376
1676
  * @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
@@ -1466,7 +1766,7 @@ class ExportInfo {
1466
1766
  * Move the target forward as long resolveTargetFilter is fulfilled
1467
1767
  * @param {ModuleGraph} moduleGraph the module graph
1468
1768
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1469
- * @param {(target: TargetItemWithConnection) => ModuleGraphConnection=} updateOriginalConnection updates the original connection instead of using the target connection
1769
+ * @param {((target: TargetItemWithConnection) => ModuleGraphConnection | undefined)=} updateOriginalConnection updates the original connection instead of using the target connection
1470
1770
  * @returns {TargetItemWithConnection | undefined} the resolved target when moved
1471
1771
  */
1472
1772
  moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
@@ -1490,7 +1790,7 @@ class ExportInfo {
1490
1790
  /** @type {Target} */
1491
1791
  (this._target).set(undefined, {
1492
1792
  connection: updateOriginalConnection
1493
- ? updateOriginalConnection(target)
1793
+ ? updateOriginalConnection(target) || target.connection
1494
1794
  : target.connection,
1495
1795
  export: /** @type {NonNullable<TargetItemWithConnection["export"]>} */ (
1496
1796
  target.export
@@ -1501,6 +1801,7 @@ class ExportInfo {
1501
1801
  }
1502
1802
 
1503
1803
  /**
1804
+ * Creates a nested exports info.
1504
1805
  * @returns {ExportsInfo} an exports info
1505
1806
  */
1506
1807
  createNestedExportsInfo() {
@@ -1522,6 +1823,7 @@ class ExportInfo {
1522
1823
  }
1523
1824
 
1524
1825
  /**
1826
+ * Checks whether this export info contains the base info.
1525
1827
  * @param {ExportInfo} baseInfo base info
1526
1828
  * @param {RuntimeSpec} runtime runtime
1527
1829
  * @returns {boolean} true when has info, otherwise false
@@ -1536,6 +1838,7 @@ class ExportInfo {
1536
1838
  }
1537
1839
 
1538
1840
  /**
1841
+ * Updates the hash with the data contributed by this instance.
1539
1842
  * @param {Hash} hash the hash
1540
1843
  * @param {RuntimeSpec} runtime the runtime
1541
1844
  * @returns {void}
@@ -1545,15 +1848,20 @@ class ExportInfo {
1545
1848
  }
1546
1849
 
1547
1850
  /**
1851
+ * Updates hash using the provided hash.
1548
1852
  * @param {Hash} hash the hash
1549
1853
  * @param {RuntimeSpec} runtime the runtime
1550
1854
  * @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
1551
1855
  */
1552
1856
  _updateHash(hash, runtime, alreadyVisitedExportsInfo) {
1857
+ const usedNameHash =
1858
+ this._usedName instanceof InlinedUsedName
1859
+ ? `inlined:${this._usedName.render("")}`
1860
+ : this._usedName || this.name;
1553
1861
  hash.update(
1554
- `${this._usedName || this.name}${this.getUsed(runtime)}${this.provided}${
1862
+ `${usedNameHash}${this.getUsed(runtime)}${this.provided}${
1555
1863
  this.terminalBinding
1556
- }`
1864
+ }${this.pureProvide ? "P" : ""}`
1557
1865
  );
1558
1866
  if (this.exportsInfo && !alreadyVisitedExportsInfo.has(this.exportsInfo)) {
1559
1867
  this.exportsInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);