@depup/webpack 5.106.0-depup.0 → 5.109.0-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 (667) hide show
  1. package/README.md +9 -11
  2. package/changes.json +16 -24
  3. package/hot/dev-server.js +2 -0
  4. package/lib/APIPlugin.js +60 -35
  5. package/lib/AsyncDependenciesBlock.js +3 -0
  6. package/lib/AutomaticPrefetchPlugin.js +6 -1
  7. package/lib/BannerPlugin.js +13 -5
  8. package/lib/Cache.js +27 -5
  9. package/lib/CacheFacade.js +41 -0
  10. package/lib/Chunk.js +71 -25
  11. package/lib/ChunkGraph.js +141 -9
  12. package/lib/ChunkGroup.js +115 -28
  13. package/lib/ChunkTemplate.js +9 -0
  14. package/lib/CircularModulesPlugin.js +190 -0
  15. package/lib/CleanPlugin.js +23 -26
  16. package/lib/CodeGenerationResults.js +19 -0
  17. package/lib/CompatibilityPlugin.js +54 -37
  18. package/lib/Compilation.js +635 -107
  19. package/lib/Compiler.js +93 -31
  20. package/lib/ConcatenationScope.js +34 -4
  21. package/lib/ConditionalInitFragment.js +6 -0
  22. package/lib/ConstPlugin.js +15 -12
  23. package/lib/ContextExclusionPlugin.js +3 -1
  24. package/lib/ContextModule.js +345 -55
  25. package/lib/ContextModuleFactory.js +193 -51
  26. package/lib/ContextReplacementPlugin.js +8 -1
  27. package/lib/DefinePlugin.js +498 -127
  28. package/lib/DependenciesBlock.js +6 -1
  29. package/lib/Dependency.js +159 -11
  30. package/lib/DependencyTemplate.js +7 -1
  31. package/lib/DependencyTemplates.js +4 -0
  32. package/lib/DotenvPlugin.js +3 -0
  33. package/lib/DynamicEntryPlugin.js +3 -1
  34. package/lib/EntryOptionPlugin.js +42 -2
  35. package/lib/EntryPlugin.js +4 -1
  36. package/lib/Entrypoint.js +5 -1
  37. package/lib/EnvironmentPlugin.js +3 -2
  38. package/lib/ErrorHelpers.js +7 -0
  39. package/lib/EvalDevToolModulePlugin.js +3 -1
  40. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  41. package/lib/ExportsInfo.js +399 -108
  42. package/lib/ExportsInfoApiPlugin.js +4 -3
  43. package/lib/ExternalModule.js +376 -78
  44. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  45. package/lib/ExternalsPlugin.js +3 -1
  46. package/lib/FileSystemInfo.js +575 -149
  47. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  48. package/lib/FlagDependencyExportsPlugin.js +82 -9
  49. package/lib/FlagDependencyUsagePlugin.js +92 -6
  50. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  51. package/lib/Generator.js +24 -3
  52. package/lib/HotModuleReplacementPlugin.js +110 -44
  53. package/lib/IgnorePlugin.js +5 -2
  54. package/lib/IgnoreWarningsPlugin.js +2 -1
  55. package/lib/InitFragment.js +15 -0
  56. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  57. package/lib/LazyBarrel.js +389 -0
  58. package/lib/LibraryTemplatePlugin.js +2 -1
  59. package/lib/LoaderOptionsPlugin.js +3 -1
  60. package/lib/LoaderTargetPlugin.js +3 -1
  61. package/lib/MainTemplate.js +15 -0
  62. package/lib/ManifestPlugin.js +9 -2
  63. package/lib/Module.js +121 -60
  64. package/lib/ModuleFactory.js +6 -1
  65. package/lib/ModuleFilenameHelpers.js +5 -2
  66. package/lib/ModuleGraph.js +69 -2
  67. package/lib/ModuleGraphConnection.js +9 -0
  68. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  69. package/lib/ModuleNotFoundError.js +3 -83
  70. package/lib/ModuleProfile.js +27 -1
  71. package/lib/ModuleSourceTypeConstants.js +52 -19
  72. package/lib/ModuleTemplate.js +10 -0
  73. package/lib/ModuleTypeConstants.js +20 -4
  74. package/lib/MultiCompiler.js +59 -4
  75. package/lib/MultiStats.js +9 -0
  76. package/lib/MultiWatching.js +6 -0
  77. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  78. package/lib/NodeStuffPlugin.js +78 -46
  79. package/lib/NormalModule.js +485 -181
  80. package/lib/NormalModuleFactory.js +148 -29
  81. package/lib/NormalModuleReplacementPlugin.js +3 -1
  82. package/lib/NullFactory.js +1 -0
  83. package/lib/OptionsApply.js +1 -0
  84. package/lib/Parser.js +3 -1
  85. package/lib/PlatformPlugin.js +2 -1
  86. package/lib/PrefetchPlugin.js +4 -1
  87. package/lib/ProgressPlugin.js +351 -161
  88. package/lib/ProvidePlugin.js +6 -3
  89. package/lib/RawModule.js +32 -16
  90. package/lib/RecordIdsPlugin.js +9 -0
  91. package/lib/RequestShortener.js +8 -0
  92. package/lib/ResolverFactory.js +5 -0
  93. package/lib/RuntimeGlobals.js +58 -5
  94. package/lib/RuntimeModule.js +22 -7
  95. package/lib/RuntimePlugin.js +104 -26
  96. package/lib/RuntimeTemplate.js +616 -37
  97. package/lib/SelfModuleFactory.js +3 -0
  98. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  99. package/lib/SourceMapDevToolPlugin.js +341 -63
  100. package/lib/Stats.js +6 -0
  101. package/lib/Template.js +29 -3
  102. package/lib/TemplatedPathPlugin.js +505 -138
  103. package/lib/UseStrictPlugin.js +3 -2
  104. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  105. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  106. package/lib/WarnNoModeSetPlugin.js +18 -2
  107. package/lib/WatchIgnorePlugin.js +5 -1
  108. package/lib/Watching.js +25 -3
  109. package/lib/WebpackError.js +3 -74
  110. package/lib/WebpackIsIncludedPlugin.js +4 -2
  111. package/lib/WebpackOptionsApply.js +88 -25
  112. package/lib/WebpackOptionsDefaulter.js +1 -0
  113. package/lib/asset/AssetBytesGenerator.js +28 -10
  114. package/lib/asset/AssetBytesParser.js +1 -0
  115. package/lib/asset/AssetGenerator.js +199 -60
  116. package/lib/asset/AssetModule.js +47 -0
  117. package/lib/asset/AssetModulesPlugin.js +115 -24
  118. package/lib/asset/AssetParser.js +4 -2
  119. package/lib/asset/AssetSourceGenerator.js +26 -8
  120. package/lib/asset/AssetSourceParser.js +1 -0
  121. package/lib/asset/RawDataUrlModule.js +23 -13
  122. package/lib/asset/WebManifestGenerator.js +164 -0
  123. package/lib/asset/WebManifestParser.js +130 -0
  124. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  125. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  126. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  127. package/lib/async-modules/isGeneratorLowered.js +26 -0
  128. package/lib/buildChunkGraph.js +107 -15
  129. package/lib/bun/BunTargetPlugin.js +42 -0
  130. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  131. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  132. package/lib/cache/IdleFileCachePlugin.js +6 -1
  133. package/lib/cache/MemoryCachePlugin.js +1 -1
  134. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  135. package/lib/cache/PackFileCacheStrategy.js +43 -7
  136. package/lib/cache/ResolverCachePlugin.js +12 -1
  137. package/lib/cache/getLazyHashedEtag.js +13 -2
  138. package/lib/cache/mergeEtags.js +4 -0
  139. package/lib/cli.js +142 -20
  140. package/lib/config/browserslistTargetHandler.js +141 -0
  141. package/lib/config/defaults.js +591 -41
  142. package/lib/config/defineConfig.js +31 -0
  143. package/lib/config/normalization.js +46 -1
  144. package/lib/config/target.js +200 -2
  145. package/lib/container/ContainerEntryDependency.js +2 -0
  146. package/lib/container/ContainerEntryModule.js +27 -14
  147. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  148. package/lib/container/ContainerExposedDependency.js +6 -2
  149. package/lib/container/ContainerPlugin.js +2 -1
  150. package/lib/container/ContainerReferencePlugin.js +3 -2
  151. package/lib/container/FallbackDependency.js +9 -7
  152. package/lib/container/FallbackItemDependency.js +1 -0
  153. package/lib/container/FallbackModule.js +22 -9
  154. package/lib/container/FallbackModuleFactory.js +1 -0
  155. package/lib/container/ModuleFederationPlugin.js +12 -26
  156. package/lib/container/RemoteModule.js +33 -10
  157. package/lib/container/RemoteRuntimeModule.js +15 -12
  158. package/lib/container/RemoteToExternalDependency.js +1 -0
  159. package/lib/container/options.js +7 -0
  160. package/lib/css/CssGenerator.js +534 -272
  161. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  162. package/lib/css/CssLoadingRuntimeModule.js +156 -77
  163. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  164. package/lib/css/CssModulesPlugin.js +356 -204
  165. package/lib/css/CssParser.js +3452 -1950
  166. package/lib/css/syntax.js +4058 -0
  167. package/lib/debug/ProfilingPlugin.js +33 -2
  168. package/lib/deno/DenoTargetPlugin.js +41 -0
  169. package/lib/dependencies/AMDDefineDependency.js +29 -17
  170. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  171. package/lib/dependencies/AMDPlugin.js +6 -3
  172. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  173. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  174. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  175. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  176. package/lib/dependencies/AMDRequireDependency.js +28 -20
  177. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  178. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  179. package/lib/dependencies/CachedConstDependency.js +9 -1
  180. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  181. package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
  182. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  183. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  184. package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
  185. package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
  186. package/lib/dependencies/CommonJsPlugin.js +7 -4
  187. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  188. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  189. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  190. package/lib/dependencies/ConstDependency.js +22 -12
  191. package/lib/dependencies/ContextDependency.js +13 -2
  192. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  193. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  194. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  195. package/lib/dependencies/ContextElementDependency.js +27 -14
  196. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  197. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  198. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  199. package/lib/dependencies/CssIcssExportDependency.js +682 -368
  200. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  201. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  202. package/lib/dependencies/CssImportDependency.js +37 -1
  203. package/lib/dependencies/CssUrlDependency.js +87 -14
  204. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  205. package/lib/dependencies/DllEntryDependency.js +12 -13
  206. package/lib/dependencies/DynamicExports.js +5 -0
  207. package/lib/dependencies/EntryDependency.js +1 -0
  208. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  209. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  210. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  211. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  212. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  213. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  214. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  215. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  216. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  217. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
  218. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  219. package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
  220. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  221. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
  222. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  223. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  224. package/lib/dependencies/HarmonyExports.js +6 -1
  225. package/lib/dependencies/HarmonyImportDependency.js +59 -3
  226. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  227. package/lib/dependencies/HarmonyImportGuard.js +426 -0
  228. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  229. package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
  230. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  231. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  233. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  234. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  235. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  236. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  237. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  238. package/lib/dependencies/ImportContextDependency.js +9 -9
  239. package/lib/dependencies/ImportDependency.js +92 -3
  240. package/lib/dependencies/ImportEagerDependency.js +2 -0
  241. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  242. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  243. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  244. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  245. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  246. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  247. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  248. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  249. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  250. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  251. package/lib/dependencies/ImportParserPlugin.js +114 -27
  252. package/lib/dependencies/ImportPhase.js +17 -11
  253. package/lib/dependencies/ImportPlugin.js +2 -1
  254. package/lib/dependencies/ImportWeakDependency.js +3 -0
  255. package/lib/dependencies/JsonExportsDependency.js +15 -10
  256. package/lib/dependencies/LoaderDependency.js +2 -0
  257. package/lib/dependencies/LoaderImportDependency.js +3 -0
  258. package/lib/dependencies/LoaderPlugin.js +9 -2
  259. package/lib/dependencies/LocalModule.js +15 -12
  260. package/lib/dependencies/LocalModuleDependency.js +15 -13
  261. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  262. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  263. package/lib/dependencies/ModuleDependency.js +14 -0
  264. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  265. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  266. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  267. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  268. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  269. package/lib/dependencies/NullDependency.js +2 -0
  270. package/lib/dependencies/PrefetchDependency.js +1 -0
  271. package/lib/dependencies/ProvidedDependency.js +36 -27
  272. package/lib/dependencies/PureExpressionDependency.js +14 -10
  273. package/lib/dependencies/RequireContextDependency.js +1 -0
  274. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  275. package/lib/dependencies/RequireContextPlugin.js +2 -1
  276. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  277. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  278. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  279. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  280. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  281. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  282. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  283. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  284. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  285. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  286. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  287. package/lib/dependencies/RequireResolveDependency.js +2 -0
  288. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  289. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  290. package/lib/dependencies/StaticExportsDependency.js +13 -10
  291. package/lib/dependencies/SystemPlugin.js +9 -6
  292. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  293. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  294. package/lib/dependencies/URLContextDependency.js +8 -7
  295. package/lib/dependencies/URLDependency.js +157 -33
  296. package/lib/dependencies/URLPlugin.js +2 -0
  297. package/lib/dependencies/UnsupportedDependency.js +12 -13
  298. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  299. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  300. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  301. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  302. package/lib/dependencies/WorkerDependency.js +111 -27
  303. package/lib/dependencies/WorkletDependency.js +278 -0
  304. package/lib/dependencies/getFunctionExpression.js +1 -0
  305. package/lib/dependencies/processExportInfo.js +14 -11
  306. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  307. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  308. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  309. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  310. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  311. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  312. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  313. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  314. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  315. package/lib/electron/ElectronTargetPlugin.js +24 -5
  316. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  317. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  318. package/lib/errors/BuildCycleError.js +1 -1
  319. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  320. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  321. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  322. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  323. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  324. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  325. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  326. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  327. package/lib/errors/JSONParseError.js +115 -0
  328. package/lib/errors/LoaderLoadingError.js +20 -0
  329. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  330. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  331. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  332. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  333. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  334. package/lib/errors/ModuleNotFoundError.js +94 -0
  335. package/lib/errors/ModuleParseError.js +141 -0
  336. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  337. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  338. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  339. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  340. package/lib/errors/NonErrorEmittedError.js +30 -0
  341. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  342. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  343. package/lib/errors/WebpackError.js +84 -0
  344. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  345. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  346. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  347. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
  348. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  349. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  350. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  351. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  352. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  353. package/lib/hmr/lazyCompilationBackend.js +34 -8
  354. package/lib/html/HtmlGenerator.js +1470 -0
  355. package/lib/html/HtmlModule.js +41 -0
  356. package/lib/html/HtmlModulesPlugin.js +1111 -0
  357. package/lib/html/HtmlParser.js +1970 -0
  358. package/lib/html/favicon.svg +1 -0
  359. package/lib/html/syntax.js +9020 -0
  360. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  361. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  362. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  363. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  364. package/lib/ids/IdHelpers.js +25 -2
  365. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  366. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  367. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  368. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  369. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  370. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  371. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  372. package/lib/index.js +66 -15
  373. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  374. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  375. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  376. package/lib/javascript/ChunkHelpers.js +1 -0
  377. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  378. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  379. package/lib/javascript/JavascriptGenerator.js +213 -51
  380. package/lib/javascript/JavascriptModule.js +54 -0
  381. package/lib/javascript/JavascriptModulesPlugin.js +579 -183
  382. package/lib/javascript/JavascriptParser.js +1289 -462
  383. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  384. package/lib/javascript/StartupHelpers.js +5 -0
  385. package/lib/javascript/syntax.js +4380 -0
  386. package/lib/json/JsonData.js +5 -0
  387. package/lib/json/JsonGenerator.js +21 -0
  388. package/lib/json/JsonModule.js +40 -0
  389. package/lib/json/JsonModulesPlugin.js +8 -1
  390. package/lib/json/JsonParser.js +18 -27
  391. package/lib/library/AbstractLibraryPlugin.js +17 -2
  392. package/lib/library/AmdLibraryPlugin.js +8 -0
  393. package/lib/library/AssignLibraryPlugin.js +21 -3
  394. package/lib/library/EnableLibraryPlugin.js +8 -2
  395. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  396. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  397. package/lib/library/JsonpLibraryPlugin.js +8 -0
  398. package/lib/library/ModuleLibraryPlugin.js +154 -7
  399. package/lib/library/SystemLibraryPlugin.js +11 -3
  400. package/lib/library/UmdLibraryPlugin.js +16 -0
  401. package/lib/loaders/LoaderRunner.js +714 -0
  402. package/lib/loaders/loadLoader.js +100 -0
  403. package/lib/logging/Logger.js +17 -0
  404. package/lib/logging/createConsoleLogger.js +7 -0
  405. package/lib/logging/runtime.js +2 -0
  406. package/lib/logging/truncateArgs.js +2 -0
  407. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  408. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  409. package/lib/node/NodeSourcePlugin.js +1 -1
  410. package/lib/node/NodeTargetPlugin.js +4 -63
  411. package/lib/node/NodeTemplatePlugin.js +3 -1
  412. package/lib/node/NodeWatchFileSystem.js +40 -22
  413. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  414. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
  415. package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
  416. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  417. package/lib/node/nodeBuiltins.js +80 -0
  418. package/lib/node/nodeConsole.js +116 -64
  419. package/lib/optimize/AggressiveMergingPlugin.js +3 -1
  420. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  421. package/lib/optimize/ConcatenatedModule.js +585 -116
  422. package/lib/optimize/ConstExportsPlugin.js +211 -0
  423. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  424. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  425. package/lib/optimize/InlineExports.js +178 -0
  426. package/lib/optimize/InnerGraph.js +374 -262
  427. package/lib/optimize/InnerGraphPlugin.js +246 -117
  428. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  429. package/lib/optimize/MangleExportsPlugin.js +5 -1
  430. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  431. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  432. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  433. package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
  434. package/lib/optimize/RealContentHashPlugin.js +125 -50
  435. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  436. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  437. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  438. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  439. package/lib/optimize/SplitChunksPlugin.js +54 -6
  440. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  441. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  442. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  443. package/lib/performance/SizeLimitsPlugin.js +8 -2
  444. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  445. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  446. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  448. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  449. package/lib/prefetch/ResourceHintPlugin.js +663 -0
  450. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  451. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  452. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  453. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  454. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  455. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  456. package/lib/rules/RuleSetCompiler.js +132 -0
  457. package/lib/rules/UseEffectRulePlugin.js +10 -3
  458. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  459. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  460. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  461. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  462. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  463. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  464. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  465. package/lib/runtime/CompatRuntimeModule.js +2 -0
  466. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  467. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  468. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  469. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  470. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  471. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  472. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  473. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  474. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  475. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  476. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  477. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  478. package/lib/runtime/HelperRuntimeModule.js +5 -0
  479. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  480. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  481. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  482. package/lib/runtime/NonceRuntimeModule.js +1 -0
  483. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  484. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  485. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  486. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  487. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  488. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  489. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  490. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  491. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  492. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  493. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  494. package/lib/schemes/DataUriPlugin.js +14 -2
  495. package/lib/schemes/FileUriPlugin.js +1 -1
  496. package/lib/schemes/HttpUriPlugin.js +86 -4
  497. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  498. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  499. package/lib/serialization/ArraySerializer.js +6 -8
  500. package/lib/serialization/BinaryMiddleware.js +552 -463
  501. package/lib/serialization/DateObjectSerializer.js +4 -2
  502. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  503. package/lib/serialization/FileMiddleware.js +50 -3
  504. package/lib/serialization/MapObjectSerializer.js +7 -9
  505. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  506. package/lib/serialization/ObjectMiddleware.js +73 -13
  507. package/lib/serialization/PlainObjectSerializer.js +16 -8
  508. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  509. package/lib/serialization/Serializer.js +6 -0
  510. package/lib/serialization/SerializerMiddleware.js +14 -2
  511. package/lib/serialization/SetObjectSerializer.js +6 -8
  512. package/lib/serialization/SingleItemMiddleware.js +3 -0
  513. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  514. package/lib/sharing/ConsumeSharedModule.js +21 -7
  515. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  516. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  517. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  518. package/lib/sharing/ProvideSharedDependency.js +34 -15
  519. package/lib/sharing/ProvideSharedModule.js +42 -12
  520. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  521. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  522. package/lib/sharing/SharePlugin.js +5 -1
  523. package/lib/sharing/ShareRuntimeModule.js +19 -16
  524. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  525. package/lib/sharing/utils.js +9 -1
  526. package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
  527. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  528. package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
  529. package/lib/stats/StatsFactory.js +39 -18
  530. package/lib/stats/StatsPrinter.js +16 -2
  531. package/lib/typescript/TypeScriptPlugin.js +210 -0
  532. package/lib/url/URLParserPlugin.js +111 -23
  533. package/lib/util/ArrayHelpers.js +1 -0
  534. package/lib/util/ArrayQueue.js +10 -5
  535. package/lib/util/AsyncQueue.js +154 -74
  536. package/lib/util/Hash.js +2 -2
  537. package/lib/util/IterableHelpers.js +3 -0
  538. package/lib/util/LazyBucketSortedSet.js +26 -0
  539. package/lib/util/LazySet.js +45 -4
  540. package/lib/util/LocConverter.js +64 -0
  541. package/lib/util/ParallelismFactorCalculator.js +1 -0
  542. package/lib/util/Queue.js +6 -3
  543. package/lib/util/Semaphore.js +15 -1
  544. package/lib/util/SetHelpers.js +4 -1
  545. package/lib/util/SortableSet.js +7 -1
  546. package/lib/util/SourceProcessor.js +119 -0
  547. package/lib/util/StackedCacheMap.js +20 -3
  548. package/lib/util/StackedMap.js +162 -43
  549. package/lib/util/StringXor.js +1 -1
  550. package/lib/util/TupleQueue.js +7 -3
  551. package/lib/util/TupleSet.js +14 -0
  552. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  553. package/lib/util/WeakTupleMap.js +60 -1
  554. package/lib/util/binarySearchBounds.js +3 -2
  555. package/lib/util/chainedImports.js +3 -3
  556. package/lib/util/cleverMerge.js +19 -2
  557. package/lib/util/comparators.js +35 -4
  558. package/lib/util/compileBooleanMatcher.js +9 -0
  559. package/lib/util/concatenate.js +80 -24
  560. package/lib/util/conventions.js +46 -1
  561. package/lib/util/createHash.js +0 -1
  562. package/lib/util/createHooksRegistry.js +43 -0
  563. package/lib/util/createMappings.js +118 -0
  564. package/lib/util/dataURL.js +3 -2
  565. package/lib/util/deprecation.js +19 -0
  566. package/lib/util/deterministicGrouping.js +46 -17
  567. package/lib/util/extractSourceMap.js +2 -1
  568. package/lib/util/extractUrlAndGlobal.js +1 -0
  569. package/lib/util/findGraphRoots.js +7 -0
  570. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  571. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  572. package/lib/util/fs.js +87 -14
  573. package/lib/util/generateDebugId.js +1 -0
  574. package/lib/util/globUtils.js +710 -0
  575. package/lib/util/hash/BatchedHash.js +1 -0
  576. package/lib/util/hash/BulkUpdateHash.js +1 -0
  577. package/lib/util/hash/DebugHash.js +1 -0
  578. package/lib/util/hash/hash-digest.js +32 -15
  579. package/lib/util/hash/md4.js +1 -1
  580. package/lib/util/hash/wasm-hash.js +5 -0
  581. package/lib/util/hash/xxhash64.js +1 -1
  582. package/lib/util/identifier.js +97 -6
  583. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  584. package/lib/util/internalSerializables.js +102 -60
  585. package/lib/util/magicComment.js +149 -7
  586. package/lib/util/makeSerializable.js +7 -0
  587. package/lib/util/memoize.js +2 -0
  588. package/lib/util/mimeTypes.js +176 -0
  589. package/lib/util/nonNumericOnlyHash.js +31 -1
  590. package/lib/util/numberHash.js +2 -2
  591. package/lib/util/parseJson.js +41 -0
  592. package/lib/util/processAsyncTree.js +8 -0
  593. package/lib/util/property.js +9 -2
  594. package/lib/util/publicPathPlaceholder.js +64 -0
  595. package/lib/util/registerExternalSerializer.js +24 -4
  596. package/lib/util/removeBOM.js +1 -0
  597. package/lib/util/runtime.js +32 -0
  598. package/lib/util/semver.js +15 -0
  599. package/lib/util/serialization.js +2 -0
  600. package/lib/util/smartGrouping.js +8 -0
  601. package/lib/util/source.js +23 -0
  602. package/lib/util/topologicalSort.js +69 -0
  603. package/lib/validateSchema.js +1 -0
  604. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  605. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  606. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  607. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  608. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  609. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  610. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  611. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  612. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  613. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  614. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  615. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  616. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  617. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  618. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  619. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  620. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  621. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  622. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  623. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  624. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  625. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  626. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  627. package/lib/web/JsonpTemplatePlugin.js +2 -1
  628. package/lib/webpack.js +78 -1
  629. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  630. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  631. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  632. package/module.d.ts +21 -0
  633. package/package.json +79 -77
  634. package/schemas/WebpackOptions.check.js +1 -1
  635. package/schemas/WebpackOptions.json +1117 -79
  636. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  637. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  638. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  639. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  640. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  641. package/schemas/plugins/HtmlParserOptions.json +3 -0
  642. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  643. package/schemas/plugins/ProgressPlugin.json +38 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  646. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  647. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  648. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  649. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  650. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  652. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  653. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  654. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  655. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  656. package/types.d.ts +8608 -1159
  657. package/lib/CaseSensitiveModulesWarning.js +0 -72
  658. package/lib/GraphHelpers.js +0 -46
  659. package/lib/ModuleParseError.js +0 -125
  660. package/lib/NoModeWarning.js +0 -23
  661. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  662. package/lib/css/walkCssTokens.js +0 -1843
  663. package/lib/util/AppendOnlyStackedSet.js +0 -78
  664. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  665. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  666. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  667. /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
 
@@ -62,8 +68,15 @@ const RETURNS_TRUE = () => true;
62
68
 
63
69
  const CIRCULAR = Symbol("circular target");
64
70
 
71
+ // bit layout of ExportInfo._inlineFlags
72
+ const INLINE_USE_TRUE = 1;
73
+ const INLINE_USE_FALSE = 2;
74
+ const INLINE_USE_MASK = 3;
75
+ const PURE_PROVIDE_FLAG = 4;
76
+
65
77
  class RestoreProvidedData {
66
78
  /**
79
+ * Creates an instance of RestoreProvidedData.
67
80
  * @param {RestoreProvidedDataExports[]} exports exports
68
81
  * @param {ExportInfo["provided"]} otherProvided other provided
69
82
  * @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
@@ -75,28 +88,47 @@ class RestoreProvidedData {
75
88
  otherCanMangleProvide,
76
89
  otherTerminalBinding
77
90
  ) {
91
+ /** @type {RestoreProvidedDataExports[]} */
78
92
  this.exports = exports;
93
+ /** @type {ExportInfoProvided | undefined} */
79
94
  this.otherProvided = otherProvided;
95
+ /** @type {boolean | undefined} */
80
96
  this.otherCanMangleProvide = otherCanMangleProvide;
97
+ /** @type {boolean} */
81
98
  this.otherTerminalBinding = otherTerminalBinding;
82
99
  }
83
100
 
84
101
  /**
102
+ * Serializes this instance into the provided serializer context.
85
103
  * @param {ObjectSerializerContext} context context
86
104
  */
87
- serialize({ write }) {
88
- write(this.exports);
89
- write(this.otherProvided);
90
- write(this.otherCanMangleProvide);
91
- write(this.otherTerminalBinding);
105
+ serialize(context) {
106
+ context
107
+ .write(this.exports)
108
+ .write(this.otherProvided)
109
+ .write(this.otherCanMangleProvide)
110
+ .write(this.otherTerminalBinding);
92
111
  }
93
112
 
94
113
  /**
114
+ * Restores this instance from the provided deserializer context.
95
115
  * @param {ObjectDeserializerContext} context context
96
116
  * @returns {RestoreProvidedData} RestoreProvidedData
97
117
  */
98
- static deserialize({ read }) {
99
- return new RestoreProvidedData(read(), read(), read(), read());
118
+ static deserialize(context) {
119
+ const exports = context.read();
120
+ const c1 = context.rest;
121
+ const otherProvided = c1.read();
122
+ const c2 = c1.rest;
123
+ const otherCanMangleProvide = c2.read();
124
+ const c3 = c2.rest;
125
+ const otherTerminalBinding = c3.read();
126
+ return new RestoreProvidedData(
127
+ exports,
128
+ otherProvided,
129
+ otherCanMangleProvide,
130
+ otherTerminalBinding
131
+ );
100
132
  }
101
133
  }
102
134
 
@@ -110,6 +142,21 @@ class ExportsInfo {
110
142
  constructor() {
111
143
  /** @type {Exports} */
112
144
  this._exports = new Map();
145
+
146
+ // `_otherExportsInfo` is a fallback entry for unlisted exports. Two roles:
147
+ // 1. factory template — `getExportInfo` creates `new ExportInfo(name, this)`,
148
+ // so created export info extends its properties.
149
+ // 2. flags whether the whole exportsInfo can be statically analyzed.
150
+ // Its `used` reachable values:
151
+ // - NoInfo: no use analysis yet (`optimization#usedExports` off), or used without info
152
+ // - Unused: analyzed, no unlisted export needed
153
+ // - Unknown: used in unknown way
154
+ // - Used/OnlyPropertiesUsed: never reached
155
+ // Its `provided` reachable values:
156
+ // - undefined: provision not determined yet
157
+ // - false: determined, no unlisted export is provided
158
+ // - null: only runtime knows (dynamic/unknown exports)
159
+ // - true: never reached
113
160
  /** @type {ExportInfo} */
114
161
  this._otherExportsInfo = new ExportInfo(null);
115
162
  /** @type {ExportInfo} */
@@ -118,9 +165,21 @@ class ExportsInfo {
118
165
  this._exportsAreOrdered = false;
119
166
  /** @type {ExportsInfo=} */
120
167
  this._redirectTo = undefined;
168
+ // fast-path flag for hasInlinedUsedName; set by InlineExportsPlugin
169
+ /** @type {boolean} */
170
+ this._hasInlinedExports = false;
121
171
  }
122
172
 
123
173
  /**
174
+ * Records that an owned export got an inlined used name.
175
+ * @returns {void}
176
+ */
177
+ markInlinedExports() {
178
+ this._hasInlinedExports = true;
179
+ }
180
+
181
+ /**
182
+ * Gets owned exports.
124
183
  * @returns {Iterable<ExportInfo>} all owned exports in any order
125
184
  */
126
185
  get ownedExports() {
@@ -128,6 +187,7 @@ class ExportsInfo {
128
187
  }
129
188
 
130
189
  /**
190
+ * Gets ordered owned exports.
131
191
  * @returns {Iterable<ExportInfo>} all owned exports in order
132
192
  */
133
193
  get orderedOwnedExports() {
@@ -138,6 +198,7 @@ class ExportsInfo {
138
198
  }
139
199
 
140
200
  /**
201
+ * Returns all exports in any order.
141
202
  * @returns {Iterable<ExportInfo>} all exports in any order
142
203
  */
143
204
  get exports() {
@@ -152,6 +213,7 @@ class ExportsInfo {
152
213
  }
153
214
 
154
215
  /**
216
+ * Gets ordered exports.
155
217
  * @returns {Iterable<ExportInfo>} all exports in order
156
218
  */
157
219
  get orderedExports() {
@@ -175,6 +237,7 @@ class ExportsInfo {
175
237
  }
176
238
 
177
239
  /**
240
+ * Gets other exports info.
178
241
  * @returns {ExportInfo} the export info of unlisted exports
179
242
  */
180
243
  get otherExportsInfo() {
@@ -185,6 +248,7 @@ class ExportsInfo {
185
248
  }
186
249
 
187
250
  /**
251
+ * Processes the provided export.
188
252
  * @param {Exports} exports exports
189
253
  * @private
190
254
  */
@@ -217,6 +281,7 @@ class ExportsInfo {
217
281
  }
218
282
 
219
283
  /**
284
+ * Sets redirect named to.
220
285
  * @param {ExportsInfo | undefined} exportsInfo exports info
221
286
  * @returns {boolean} result
222
287
  */
@@ -228,22 +293,12 @@ class ExportsInfo {
228
293
 
229
294
  setHasProvideInfo() {
230
295
  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
- }
296
+ exportInfo.setHasProvideInfo();
237
297
  }
238
298
  if (this._redirectTo !== undefined) {
239
299
  this._redirectTo.setHasProvideInfo();
240
300
  } 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
- }
301
+ this._otherExportsInfo.setHasProvideInfo();
247
302
  }
248
303
  }
249
304
 
@@ -260,6 +315,7 @@ class ExportsInfo {
260
315
  }
261
316
 
262
317
  /**
318
+ * Gets own export info.
263
319
  * @param {ExportInfoName} name export name
264
320
  * @returns {ExportInfo} export info for this name
265
321
  */
@@ -273,6 +329,7 @@ class ExportsInfo {
273
329
  }
274
330
 
275
331
  /**
332
+ * Returns export info for this name.
276
333
  * @param {ExportInfoName} name export name
277
334
  * @returns {ExportInfo} export info for this name
278
335
  */
@@ -289,6 +346,7 @@ class ExportsInfo {
289
346
  }
290
347
 
291
348
  /**
349
+ * Gets read only export info.
292
350
  * @param {ExportInfoName} name export name
293
351
  * @returns {ExportInfo} export info for this name
294
352
  */
@@ -302,30 +360,43 @@ class ExportsInfo {
302
360
  }
303
361
 
304
362
  /**
363
+ * Gets read only export info recursive.
305
364
  * @param {ExportInfoName[]} name export name
306
365
  * @returns {ExportInfo | undefined} export info for this name
307
366
  */
308
367
  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));
368
+ /** @type {ExportsInfo} */
369
+ let exportsInfo = this;
370
+ const last = name.length - 1;
371
+ for (let i = 0; ; i++) {
372
+ const exportInfo = exportsInfo.getReadOnlyExportInfo(name[i]);
373
+ if (i === last) return exportInfo;
374
+ if (!exportInfo.exportsInfo) return;
375
+ exportsInfo = exportInfo.exportsInfo;
376
+ }
313
377
  }
314
378
 
315
379
  /**
380
+ * Gets nested exports info.
316
381
  * @param {ExportInfoName[]=} name the export name
317
382
  * @returns {ExportsInfo | undefined} the nested exports info
318
383
  */
319
384
  getNestedExportsInfo(name) {
320
385
  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));
386
+ /** @type {ExportsInfo} */
387
+ let exportsInfo = this;
388
+ for (let i = 0; i < name.length; i++) {
389
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
390
+ if (!info.exportsInfo) return;
391
+ exportsInfo = info.exportsInfo;
392
+ }
393
+ return exportsInfo;
324
394
  }
325
395
  return this;
326
396
  }
327
397
 
328
398
  /**
399
+ * Sets unknown exports provided.
329
400
  * @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
330
401
  * @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
331
402
  * @param {Dependency=} targetKey use this as key for the target
@@ -404,6 +475,7 @@ class ExportsInfo {
404
475
  }
405
476
 
406
477
  /**
478
+ * Sets used in unknown way.
407
479
  * @param {RuntimeSpec} runtime the runtime
408
480
  * @returns {boolean} true, when something changed
409
481
  */
@@ -418,25 +490,14 @@ class ExportsInfo {
418
490
  if (this._redirectTo.setUsedInUnknownWay(runtime)) {
419
491
  changed = true;
420
492
  }
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
- }
493
+ } else if (this._otherExportsInfo.setUsedInUnknownWay(runtime)) {
494
+ changed = true;
435
495
  }
436
496
  return changed;
437
497
  }
438
498
 
439
499
  /**
500
+ * Sets used without info.
440
501
  * @param {RuntimeSpec} runtime the runtime
441
502
  * @returns {boolean} true, when something changed
442
503
  */
@@ -451,19 +512,14 @@ class ExportsInfo {
451
512
  if (this._redirectTo.setUsedWithoutInfo(runtime)) {
452
513
  changed = true;
453
514
  }
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
- }
515
+ } else if (this._otherExportsInfo.setUsedWithoutInfo(runtime)) {
516
+ changed = true;
462
517
  }
463
518
  return changed;
464
519
  }
465
520
 
466
521
  /**
522
+ * Sets all known exports used.
467
523
  * @param {RuntimeSpec} runtime the runtime
468
524
  * @returns {boolean} true, when something changed
469
525
  */
@@ -479,6 +535,7 @@ class ExportsInfo {
479
535
  }
480
536
 
481
537
  /**
538
+ * Sets used for side effects only.
482
539
  * @param {RuntimeSpec} runtime the runtime
483
540
  * @returns {boolean} true, when something changed
484
541
  */
@@ -491,6 +548,7 @@ class ExportsInfo {
491
548
  }
492
549
 
493
550
  /**
551
+ * Checks whether this exports info is used.
494
552
  * @param {RuntimeSpec} runtime the runtime
495
553
  * @returns {boolean} true, when the module exports are used in any way
496
554
  */
@@ -511,6 +569,7 @@ class ExportsInfo {
511
569
  }
512
570
 
513
571
  /**
572
+ * Checks whether this exports info is module used.
514
573
  * @param {RuntimeSpec} runtime the runtime
515
574
  * @returns {boolean} true, when the module is used in any way
516
575
  */
@@ -523,6 +582,7 @@ class ExportsInfo {
523
582
  }
524
583
 
525
584
  /**
585
+ * Returns set of used exports, or true (when namespace object is used), or false (when unused), or null (when unknown).
526
586
  * @param {RuntimeSpec} runtime the runtime
527
587
  * @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
588
  */
@@ -572,6 +632,7 @@ class ExportsInfo {
572
632
  }
573
633
 
574
634
  /**
635
+ * Gets provided exports.
575
636
  * @returns {null | true | ExportInfoName[]} list of exports when known
576
637
  */
577
638
  getProvidedExports() {
@@ -611,6 +672,7 @@ class ExportsInfo {
611
672
  }
612
673
 
613
674
  /**
675
+ * Gets relevant exports.
614
676
  * @param {RuntimeSpec} runtime the runtime
615
677
  * @returns {ExportInfo[]} exports that are relevant (not unused and potential provided)
616
678
  */
@@ -638,22 +700,30 @@ class ExportsInfo {
638
700
  }
639
701
 
640
702
  /**
703
+ * Checks whether this exports info is export provided.
641
704
  * @param {ExportInfoName | ExportInfoName[]} name the name of the export
642
705
  * @returns {boolean | undefined | null} if the export is provided
643
706
  */
644
707
  isExportProvided(name) {
645
708
  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));
709
+ /** @type {ExportsInfo} */
710
+ let exportsInfo = this;
711
+ const last = name.length - 1;
712
+ for (let i = 0; ; i++) {
713
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
714
+ if (info.exportsInfo && i < last) {
715
+ exportsInfo = info.exportsInfo;
716
+ continue;
717
+ }
718
+ return info.provided ? i === last || undefined : info.provided;
649
719
  }
650
- return info.provided ? name.length === 1 || undefined : info.provided;
651
720
  }
652
721
  const info = this.getReadOnlyExportInfo(name);
653
722
  return info.provided;
654
723
  }
655
724
 
656
725
  /**
726
+ * Returns key representing the usage.
657
727
  * @param {RuntimeSpec} runtime runtime
658
728
  * @returns {string} key representing the usage
659
729
  */
@@ -673,6 +743,7 @@ class ExportsInfo {
673
743
  }
674
744
 
675
745
  /**
746
+ * Checks whether this exports info is equally used.
676
747
  * @param {RuntimeSpec} runtimeA first runtime
677
748
  * @param {RuntimeSpec} runtimeB second runtime
678
749
  * @returns {boolean} true, when equally used
@@ -701,6 +772,7 @@ class ExportsInfo {
701
772
  }
702
773
 
703
774
  /**
775
+ * Returns usage status.
704
776
  * @param {ExportInfoName | ExportInfoName[]} name export name
705
777
  * @param {RuntimeSpec} runtime check usage for this runtime only
706
778
  * @returns {UsageStateType} usage status
@@ -708,53 +780,121 @@ class ExportsInfo {
708
780
  getUsed(name, runtime) {
709
781
  if (Array.isArray(name)) {
710
782
  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);
783
+ // Walk the nested path iteratively to avoid a `slice` per level
784
+ /** @type {ExportsInfo} */
785
+ let exportsInfo = this;
786
+ const last = name.length - 1;
787
+ for (let i = 0; ; i++) {
788
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
789
+ if (i === last || !info.exportsInfo) return info.getUsed(runtime);
790
+ exportsInfo = info.exportsInfo;
714
791
  }
715
- return info.getUsed(runtime);
716
792
  }
717
793
  const info = this.getReadOnlyExportInfo(name);
718
794
  return info.getUsed(runtime);
719
795
  }
720
796
 
721
797
  /**
798
+ * Returns the used name.
722
799
  * @param {ExportInfoName | ExportInfoName[]} name the export name
723
800
  * @param {RuntimeSpec} runtime check usage for this runtime only
724
801
  * @returns {UsedName} the used name
725
802
  */
726
803
  getUsedName(name, runtime) {
727
804
  if (Array.isArray(name)) {
728
- // TODO improve this
729
805
  if (name.length === 0) {
730
806
  if (!this.isUsed(runtime)) return false;
731
807
  return name;
732
808
  }
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;
809
+ // Walk the nested path once, collecting used names into a single array
810
+ // instead of slicing/spreading at every level.
811
+ /** @type {ExportsInfo} */
812
+ let exportsInfo = this;
813
+ /** @type {ExportInfoName[] | undefined} */
814
+ let result;
815
+ const last = name.length - 1;
816
+ for (let i = 0; ; i++) {
817
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
818
+ const x = info.getUsedName(name[i], runtime);
819
+ if (x === false) return false;
820
+ if (x instanceof InlinedUsedName) {
821
+ // The inlined value replaces the prefix; trailing ids become its suffix
822
+ if (i === last) return x;
823
+ return new InlinedUsedName(x.value, [
824
+ ...x.suffix,
825
+ ...name.slice(i + 1)
826
+ ]);
827
+ }
828
+ if (i === last) {
829
+ if (result === undefined) return x === name[i] ? name : [x];
830
+ result.push(x);
831
+ return result;
832
+ }
833
+ if (result === undefined) result = [];
834
+ result.push(x);
835
+ // Descend only while the parent is reached purely via property access
836
+ if (
837
+ info.exportsInfo &&
838
+ info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
839
+ ) {
840
+ exportsInfo = info.exportsInfo;
841
+ continue;
842
+ }
843
+ // Cannot descend further: keep the remaining ids unchanged
844
+ for (let j = i + 1; j <= last; j++) result.push(name[j]);
845
+ return result;
846
+ }
847
+ }
848
+ const info = this.getReadOnlyExportInfo(name);
849
+ return info.getUsedName(name, runtime);
850
+ }
851
+
852
+ /**
853
+ * Checks whether `getUsedName(name, runtime)` would return an `InlinedUsedName`,
854
+ * without allocating intermediate used-name arrays (hot path for connection conditions).
855
+ * @param {ExportInfoName[]} name the export name path
856
+ * @param {RuntimeSpec} runtime check usage for this runtime only
857
+ * @returns {boolean} true when the used name resolves to an inlined value
858
+ */
859
+ hasInlinedUsedName(name, runtime) {
860
+ if (name.length === 0) return false;
861
+ /** @type {ExportsInfo} */
862
+ let exportsInfo = this;
863
+ const last = name.length - 1;
864
+ for (let i = 0; ; i++) {
865
+ // follow redirects for the fast-path flag; InlinedUsedName can only
866
+ // exist on a level whose (redirected) exportsInfo is marked
867
+ let hasInlined = false;
868
+ /** @type {ExportsInfo | undefined} */
869
+ let e = exportsInfo;
870
+ while (e !== undefined) {
871
+ if (e._hasInlinedExports) {
872
+ hasInlined = true;
873
+ break;
874
+ }
875
+ e = e._redirectTo;
876
+ }
877
+ if (!hasInlined && i === last) return false;
878
+ const info = exportsInfo.getReadOnlyExportInfo(name[i]);
879
+ if (hasInlined) {
880
+ const x = info.getUsedName(name[i], runtime);
881
+ if (x === false) return false;
882
+ if (x instanceof InlinedUsedName) return true;
883
+ if (i === last) return false;
741
884
  }
742
885
  if (
743
886
  info.exportsInfo &&
744
887
  info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
745
888
  ) {
746
- const nested = info.exportsInfo.getUsedName(name.slice(1), runtime);
747
- if (!nested) return false;
748
- return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
889
+ exportsInfo = info.exportsInfo;
890
+ continue;
749
891
  }
750
- return [...arr, ...name.slice(1)];
892
+ return false;
751
893
  }
752
- const info = this.getReadOnlyExportInfo(name);
753
- const usedName = info.getUsedName(name, runtime);
754
- return usedName;
755
894
  }
756
895
 
757
896
  /**
897
+ * Updates the hash with the data contributed by this instance.
758
898
  * @param {Hash} hash the hash
759
899
  * @param {RuntimeSpec} runtime the runtime
760
900
  * @returns {void}
@@ -764,27 +904,38 @@ class ExportsInfo {
764
904
  }
765
905
 
766
906
  /**
907
+ * Updates hash using the provided hash.
767
908
  * @param {Hash} hash the hash
768
909
  * @param {RuntimeSpec} runtime the runtime
769
910
  * @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
770
911
  * @returns {void}
771
912
  */
772
913
  _updateHash(hash, runtime, alreadyVisitedExportsInfo) {
773
- const set = new Set(alreadyVisitedExportsInfo);
774
- set.add(this);
914
+ // add/delete keeps path semantics without copying the set per level
915
+ alreadyVisitedExportsInfo.add(this);
775
916
  for (const exportInfo of this.orderedExports) {
776
917
  if (exportInfo.hasInfo(this._otherExportsInfo, runtime)) {
777
- exportInfo._updateHash(hash, runtime, set);
918
+ exportInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
778
919
  }
779
920
  }
780
- this._sideEffectsOnlyInfo._updateHash(hash, runtime, set);
781
- this._otherExportsInfo._updateHash(hash, runtime, set);
921
+ this._sideEffectsOnlyInfo._updateHash(
922
+ hash,
923
+ runtime,
924
+ alreadyVisitedExportsInfo
925
+ );
926
+ this._otherExportsInfo._updateHash(
927
+ hash,
928
+ runtime,
929
+ alreadyVisitedExportsInfo
930
+ );
782
931
  if (this._redirectTo !== undefined) {
783
- this._redirectTo._updateHash(hash, runtime, set);
932
+ this._redirectTo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
784
933
  }
934
+ alreadyVisitedExportsInfo.delete(this);
785
935
  }
786
936
 
787
937
  /**
938
+ * Gets restore provided data.
788
939
  * @returns {RestoreProvidedData} restore provided data
789
940
  */
790
941
  getRestoreProvidedData() {
@@ -794,22 +945,42 @@ class ExportsInfo {
794
945
  /** @type {RestoreProvidedDataExports[]} */
795
946
  const exports = [];
796
947
  for (const exportInfo of this.orderedExports) {
948
+ const canInlineProvide = exportInfo.canInlineProvide;
949
+ const pureProvide = exportInfo.pureProvide;
950
+ // inline-exports data is only stored when present, so builds without the
951
+ // feature don't pay for it in the persistent cache
952
+ const hasInlineInfo =
953
+ canInlineProvide !== undefined || pureProvide !== undefined;
797
954
  if (
798
955
  exportInfo.provided !== otherProvided ||
799
956
  exportInfo.canMangleProvide !== otherCanMangleProvide ||
800
957
  exportInfo.terminalBinding !== otherTerminalBinding ||
958
+ hasInlineInfo ||
801
959
  exportInfo.exportsInfoOwned
802
960
  ) {
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
- });
961
+ const exportsInfo = exportInfo.exportsInfoOwned
962
+ ? /** @type {NonNullable<ExportInfo["exportsInfo"]>} */
963
+ (exportInfo.exportsInfo).getRestoreProvidedData()
964
+ : undefined;
965
+ exports.push(
966
+ hasInlineInfo
967
+ ? {
968
+ name: exportInfo.name,
969
+ provided: exportInfo.provided,
970
+ canMangleProvide: exportInfo.canMangleProvide,
971
+ canInlineProvide,
972
+ terminalBinding: exportInfo.terminalBinding,
973
+ pureProvide,
974
+ exportsInfo
975
+ }
976
+ : {
977
+ name: exportInfo.name,
978
+ provided: exportInfo.provided,
979
+ canMangleProvide: exportInfo.canMangleProvide,
980
+ terminalBinding: exportInfo.terminalBinding,
981
+ exportsInfo
982
+ }
983
+ );
813
984
  }
814
985
  }
815
986
  return new RestoreProvidedData(
@@ -821,6 +992,7 @@ class ExportsInfo {
821
992
  }
822
993
 
823
994
  /**
995
+ * Processes the provided data.
824
996
  * @param {RestoreProvidedData} data data
825
997
  */
826
998
  restoreProvided({
@@ -843,7 +1015,9 @@ class ExportsInfo {
843
1015
  const exportInfo = this.getExportInfo(exp.name);
844
1016
  exportInfo.provided = exp.provided;
845
1017
  exportInfo.canMangleProvide = exp.canMangleProvide;
1018
+ exportInfo.canInlineProvide = exp.canInlineProvide;
846
1019
  exportInfo.terminalBinding = exp.terminalBinding;
1020
+ exportInfo.pureProvide = exp.pureProvide;
847
1021
  if (exp.exportsInfo) {
848
1022
  const exportsInfo = exportInfo.createNestedExportsInfo();
849
1023
  exportsInfo.restoreProvided(exp.exportsInfo);
@@ -855,6 +1029,7 @@ class ExportsInfo {
855
1029
 
856
1030
  class ExportInfo {
857
1031
  /**
1032
+ * Creates an instance of ExportInfo.
858
1033
  * @param {ExportInfoName | null} name the original name of the export
859
1034
  * @param {ExportInfo=} initFrom init values from this ExportInfo
860
1035
  */
@@ -906,6 +1081,14 @@ class ExportInfo {
906
1081
  * @type {boolean | undefined}
907
1082
  */
908
1083
  this.canMangleProvide = initFrom ? initFrom.canMangleProvide : undefined;
1084
+ // only specific export info can be inlined,
1085
+ // so _otherExportsInfo.canInlineProvide is always undefined
1086
+ /**
1087
+ * value slot for `canInlineProvide`
1088
+ * @private
1089
+ * @type {InlinedValue | undefined}
1090
+ */
1091
+ this._inlinedValue = undefined;
909
1092
  /**
910
1093
  * true: it can be mangled
911
1094
  * false: is can not be mangled
@@ -913,6 +1096,12 @@ class ExportInfo {
913
1096
  * @type {boolean | undefined}
914
1097
  */
915
1098
  this.canMangleUse = initFrom ? initFrom.canMangleUse : undefined;
1099
+ /**
1100
+ * bitfield backing `canInlineUse` and `pureProvide`
1101
+ * @private
1102
+ * @type {number}
1103
+ */
1104
+ this._inlineFlags = 0;
916
1105
  /** @type {boolean} */
917
1106
  this.exportsInfoOwned = false;
918
1107
  /** @type {ExportsInfo | undefined} */
@@ -933,6 +1122,57 @@ class ExportInfo {
933
1122
  this._maxTarget = undefined;
934
1123
  }
935
1124
 
1125
+ /**
1126
+ * defined: the export binds to a small primitive constant and may be inlined
1127
+ * undefined: not an inlined constant export
1128
+ * @returns {InlinedValue | undefined} inlined value
1129
+ */
1130
+ get canInlineProvide() {
1131
+ return this._inlinedValue;
1132
+ }
1133
+
1134
+ set canInlineProvide(value) {
1135
+ this._inlinedValue = value;
1136
+ }
1137
+
1138
+ /**
1139
+ * true: at least one consumer accepts inlining, none rejected
1140
+ * false: at least one consumer rejected inlining
1141
+ * undefined: collecting; no consumer has decided yet
1142
+ * @returns {boolean | undefined} can inline use
1143
+ */
1144
+ get canInlineUse() {
1145
+ switch (this._inlineFlags & INLINE_USE_MASK) {
1146
+ case INLINE_USE_TRUE:
1147
+ return true;
1148
+ case INLINE_USE_FALSE:
1149
+ return false;
1150
+ default:
1151
+ return undefined;
1152
+ }
1153
+ }
1154
+
1155
+ set canInlineUse(value) {
1156
+ this._inlineFlags =
1157
+ (this._inlineFlags & ~INLINE_USE_MASK) |
1158
+ (value === undefined ? 0 : value ? INLINE_USE_TRUE : INLINE_USE_FALSE);
1159
+ }
1160
+
1161
+ /**
1162
+ * Only specific export info can be pure, so other_export_info.pure is always undefined.
1163
+ * true: calling the export has no observable side effects
1164
+ * undefined: it was not determined whether the export is pure
1165
+ * @returns {boolean | undefined} pure provide
1166
+ */
1167
+ get pureProvide() {
1168
+ return (this._inlineFlags & PURE_PROVIDE_FLAG) !== 0 ? true : undefined;
1169
+ }
1170
+
1171
+ set pureProvide(value) {
1172
+ if (value) this._inlineFlags |= PURE_PROVIDE_FLAG;
1173
+ else this._inlineFlags &= ~PURE_PROVIDE_FLAG;
1174
+ }
1175
+
936
1176
  get canMangle() {
937
1177
  switch (this.canMangleProvide) {
938
1178
  case undefined:
@@ -955,6 +1195,16 @@ class ExportInfo {
955
1195
  }
956
1196
 
957
1197
  /**
1198
+ * @returns {InlinedValue | undefined} the inlined value when both provide and use sides agree, otherwise undefined
1199
+ */
1200
+ canInline() {
1201
+ return this.canInlineProvide !== undefined && this.canInlineUse === true
1202
+ ? this.canInlineProvide
1203
+ : undefined;
1204
+ }
1205
+
1206
+ /**
1207
+ * Sets used in unknown way.
958
1208
  * @param {RuntimeSpec} runtime only apply to this runtime
959
1209
  * @returns {boolean} true, when something changed
960
1210
  */
@@ -973,10 +1223,15 @@ class ExportInfo {
973
1223
  this.canMangleUse = false;
974
1224
  changed = true;
975
1225
  }
1226
+ if (this.canInlineUse !== false) {
1227
+ this.canInlineUse = false;
1228
+ changed = true;
1229
+ }
976
1230
  return changed;
977
1231
  }
978
1232
 
979
1233
  /**
1234
+ * Sets used without info.
980
1235
  * @param {RuntimeSpec} runtime only apply to this runtime
981
1236
  * @returns {boolean} true, when something changed
982
1237
  */
@@ -989,9 +1244,22 @@ class ExportInfo {
989
1244
  this.canMangleUse = false;
990
1245
  changed = true;
991
1246
  }
1247
+ if (this.canInlineUse !== false) {
1248
+ this.canInlineUse = false;
1249
+ changed = true;
1250
+ }
992
1251
  return changed;
993
1252
  }
994
1253
 
1254
+ setHasProvideInfo() {
1255
+ if (this.provided === undefined) {
1256
+ this.provided = false;
1257
+ }
1258
+ if (this.canMangleProvide === undefined) {
1259
+ this.canMangleProvide = true;
1260
+ }
1261
+ }
1262
+
995
1263
  setHasUseInfo() {
996
1264
  if (!this._hasUseInRuntimeInfo) {
997
1265
  this._hasUseInRuntimeInfo = true;
@@ -1006,6 +1274,7 @@ class ExportInfo {
1006
1274
  }
1007
1275
 
1008
1276
  /**
1277
+ * Sets used conditionally.
1009
1278
  * @param {(condition: UsageStateType) => boolean} condition compare with old value
1010
1279
  * @param {UsageStateType} newValue set when condition is true
1011
1280
  * @param {RuntimeSpec} runtime only apply to this runtime
@@ -1059,6 +1328,7 @@ class ExportInfo {
1059
1328
  }
1060
1329
 
1061
1330
  /**
1331
+ * Updates used using the provided new value.
1062
1332
  * @param {UsageStateType} newValue new value of the used state
1063
1333
  * @param {RuntimeSpec} runtime only apply to this runtime
1064
1334
  * @returns {boolean} true when something has changed
@@ -1107,6 +1377,7 @@ class ExportInfo {
1107
1377
  }
1108
1378
 
1109
1379
  /**
1380
+ * Returns true, if something has changed.
1110
1381
  * @param {Dependency} key the key
1111
1382
  * @returns {boolean} true, if something has changed
1112
1383
  */
@@ -1120,6 +1391,7 @@ class ExportInfo {
1120
1391
  }
1121
1392
 
1122
1393
  /**
1394
+ * Updates target using the provided key.
1123
1395
  * @param {Dependency} key the key
1124
1396
  * @param {ModuleGraphConnection} connection the target module if a single one
1125
1397
  * @param {ExportInfoName[] | null=} exportName the exported name
@@ -1165,6 +1437,7 @@ class ExportInfo {
1165
1437
  }
1166
1438
 
1167
1439
  /**
1440
+ * Returns usage state.
1168
1441
  * @param {RuntimeSpec} runtime for this runtime
1169
1442
  * @returns {UsageStateType} usage state
1170
1443
  */
@@ -1203,10 +1476,10 @@ class ExportInfo {
1203
1476
  }
1204
1477
 
1205
1478
  /**
1206
- * get used name
1479
+ * Returns used name. May return InlinedUsedName when the export is inlined to a primitive.
1207
1480
  * @param {string | undefined} fallbackName fallback name for used exports with no name
1208
1481
  * @param {RuntimeSpec} runtime check usage for this runtime only
1209
- * @returns {string | false} used name
1482
+ * @returns {string | InlinedUsedName | false} used name
1210
1483
  */
1211
1484
  getUsedName(fallbackName, runtime) {
1212
1485
  if (this._hasUseInRuntimeInfo) {
@@ -1218,14 +1491,17 @@ class ExportInfo {
1218
1491
  if (!this._usedInRuntime.has(runtime)) {
1219
1492
  return false;
1220
1493
  }
1221
- } else if (
1222
- runtime !== undefined &&
1223
- [...runtime].every(
1224
- (runtime) =>
1225
- !(/** @type {UsedInRuntime} */ (this._usedInRuntime).has(runtime))
1226
- )
1227
- ) {
1228
- return false;
1494
+ } else if (runtime !== undefined) {
1495
+ // Unused unless at least one runtime in the set is used; loop avoids
1496
+ // allocating an array from the runtime set on this hot path.
1497
+ let anyUsed = false;
1498
+ for (const r of runtime) {
1499
+ if (this._usedInRuntime.has(r)) {
1500
+ anyUsed = true;
1501
+ break;
1502
+ }
1503
+ }
1504
+ if (!anyUsed) return false;
1229
1505
  }
1230
1506
  }
1231
1507
  }
@@ -1234,6 +1510,7 @@ class ExportInfo {
1234
1510
  }
1235
1511
 
1236
1512
  /**
1513
+ * Checks whether this export info has used name.
1237
1514
  * @returns {boolean} true, when a mangled name of this export is set
1238
1515
  */
1239
1516
  hasUsedName() {
@@ -1241,8 +1518,8 @@ class ExportInfo {
1241
1518
  }
1242
1519
 
1243
1520
  /**
1244
- * Sets the mangled name of this export
1245
- * @param {string} name the new name
1521
+ * Updates used name using the provided name.
1522
+ * @param {string | InlinedUsedName} name the new name
1246
1523
  * @returns {void}
1247
1524
  */
1248
1525
  setUsedName(name) {
@@ -1250,6 +1527,7 @@ class ExportInfo {
1250
1527
  }
1251
1528
 
1252
1529
  /**
1530
+ * Gets terminal binding.
1253
1531
  * @param {ModuleGraph} moduleGraph the module graph
1254
1532
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1255
1533
  * @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
@@ -1294,6 +1572,7 @@ class ExportInfo {
1294
1572
  }
1295
1573
 
1296
1574
  /**
1575
+ * Returns the target, undefined when there is no target, false when no target is valid.
1297
1576
  * @param {ModuleGraph} moduleGraph the module graph
1298
1577
  * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1299
1578
  * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
@@ -1303,6 +1582,7 @@ class ExportInfo {
1303
1582
  }
1304
1583
 
1305
1584
  /**
1585
+ * Returns the target, undefined when there is no target, false when no target is valid.
1306
1586
  * @param {ModuleGraph} moduleGraph the module graph
1307
1587
  * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1308
1588
  * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
@@ -1353,6 +1633,7 @@ class ExportInfo {
1353
1633
  }
1354
1634
 
1355
1635
  /**
1636
+ * Returns the target.
1356
1637
  * @param {ModuleGraph} moduleGraph the module graph
1357
1638
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1358
1639
  * @returns {TargetItemWithConnection | undefined} the target
@@ -1364,6 +1645,7 @@ class ExportInfo {
1364
1645
  }
1365
1646
 
1366
1647
  /**
1648
+ * Returns the target.
1367
1649
  * @param {ModuleGraph} moduleGraph the module graph
1368
1650
  * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1369
1651
  * @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
@@ -1371,6 +1653,7 @@ class ExportInfo {
1371
1653
  */
1372
1654
  _getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
1373
1655
  /**
1656
+ * Returns resolved target.
1374
1657
  * @param {TargetItem | undefined | null} inputTarget unresolved target
1375
1658
  * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
1376
1659
  * @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
@@ -1466,7 +1749,7 @@ class ExportInfo {
1466
1749
  * Move the target forward as long resolveTargetFilter is fulfilled
1467
1750
  * @param {ModuleGraph} moduleGraph the module graph
1468
1751
  * @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
1752
+ * @param {((target: TargetItemWithConnection) => ModuleGraphConnection | undefined)=} updateOriginalConnection updates the original connection instead of using the target connection
1470
1753
  * @returns {TargetItemWithConnection | undefined} the resolved target when moved
1471
1754
  */
1472
1755
  moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
@@ -1490,7 +1773,7 @@ class ExportInfo {
1490
1773
  /** @type {Target} */
1491
1774
  (this._target).set(undefined, {
1492
1775
  connection: updateOriginalConnection
1493
- ? updateOriginalConnection(target)
1776
+ ? updateOriginalConnection(target) || target.connection
1494
1777
  : target.connection,
1495
1778
  export: /** @type {NonNullable<TargetItemWithConnection["export"]>} */ (
1496
1779
  target.export
@@ -1501,6 +1784,7 @@ class ExportInfo {
1501
1784
  }
1502
1785
 
1503
1786
  /**
1787
+ * Creates a nested exports info.
1504
1788
  * @returns {ExportsInfo} an exports info
1505
1789
  */
1506
1790
  createNestedExportsInfo() {
@@ -1522,6 +1806,7 @@ class ExportInfo {
1522
1806
  }
1523
1807
 
1524
1808
  /**
1809
+ * Checks whether this export info contains the base info.
1525
1810
  * @param {ExportInfo} baseInfo base info
1526
1811
  * @param {RuntimeSpec} runtime runtime
1527
1812
  * @returns {boolean} true when has info, otherwise false
@@ -1536,6 +1821,7 @@ class ExportInfo {
1536
1821
  }
1537
1822
 
1538
1823
  /**
1824
+ * Updates the hash with the data contributed by this instance.
1539
1825
  * @param {Hash} hash the hash
1540
1826
  * @param {RuntimeSpec} runtime the runtime
1541
1827
  * @returns {void}
@@ -1545,15 +1831,20 @@ class ExportInfo {
1545
1831
  }
1546
1832
 
1547
1833
  /**
1834
+ * Updates hash using the provided hash.
1548
1835
  * @param {Hash} hash the hash
1549
1836
  * @param {RuntimeSpec} runtime the runtime
1550
1837
  * @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
1551
1838
  */
1552
1839
  _updateHash(hash, runtime, alreadyVisitedExportsInfo) {
1840
+ const usedNameHash =
1841
+ this._usedName instanceof InlinedUsedName
1842
+ ? `inlined:${this._usedName.render("")}`
1843
+ : this._usedName || this.name;
1553
1844
  hash.update(
1554
- `${this._usedName || this.name}${this.getUsed(runtime)}${this.provided}${
1845
+ `${usedNameHash}${this.getUsed(runtime)}${this.provided}${
1555
1846
  this.terminalBinding
1556
- }`
1847
+ }${this.pureProvide ? "P" : ""}`
1557
1848
  );
1558
1849
  if (this.exportsInfo && !alreadyVisitedExportsInfo.has(this.exportsInfo)) {
1559
1850
  this.exportsInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);