@depup/webpack 5.105.4-depup.37

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 (709) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +38 -0
  3. package/bin/webpack.js +196 -0
  4. package/hot/dev-server.js +90 -0
  5. package/hot/emitter-event-target.js +7 -0
  6. package/hot/emitter.js +2 -0
  7. package/hot/lazy-compilation-node.js +66 -0
  8. package/hot/lazy-compilation-universal.js +18 -0
  9. package/hot/lazy-compilation-web.js +93 -0
  10. package/hot/load-http.js +7 -0
  11. package/hot/log-apply-result.js +49 -0
  12. package/hot/log.js +78 -0
  13. package/hot/only-dev-server.js +118 -0
  14. package/hot/poll.js +41 -0
  15. package/hot/signal.js +66 -0
  16. package/lib/APIPlugin.js +392 -0
  17. package/lib/AbstractMethodError.js +56 -0
  18. package/lib/AsyncDependenciesBlock.js +128 -0
  19. package/lib/AsyncDependencyToInitialChunkError.js +34 -0
  20. package/lib/AutomaticPrefetchPlugin.js +66 -0
  21. package/lib/BannerPlugin.js +138 -0
  22. package/lib/Cache.js +168 -0
  23. package/lib/CacheFacade.js +349 -0
  24. package/lib/CaseSensitiveModulesWarning.js +72 -0
  25. package/lib/Chunk.js +899 -0
  26. package/lib/ChunkGraph.js +1968 -0
  27. package/lib/ChunkGroup.js +615 -0
  28. package/lib/ChunkRenderError.js +38 -0
  29. package/lib/ChunkTemplate.js +181 -0
  30. package/lib/CleanPlugin.js +495 -0
  31. package/lib/CodeGenerationError.js +35 -0
  32. package/lib/CodeGenerationResults.js +167 -0
  33. package/lib/CommentCompilationWarning.js +33 -0
  34. package/lib/CompatibilityPlugin.js +240 -0
  35. package/lib/Compilation.js +5876 -0
  36. package/lib/Compiler.js +1413 -0
  37. package/lib/ConcatenationScope.js +181 -0
  38. package/lib/ConcurrentCompilationError.js +18 -0
  39. package/lib/ConditionalInitFragment.js +120 -0
  40. package/lib/ConstPlugin.js +567 -0
  41. package/lib/ContextExclusionPlugin.js +33 -0
  42. package/lib/ContextModule.js +1411 -0
  43. package/lib/ContextModuleFactory.js +514 -0
  44. package/lib/ContextReplacementPlugin.js +227 -0
  45. package/lib/CssModule.js +179 -0
  46. package/lib/DefinePlugin.js +878 -0
  47. package/lib/DelegatedModule.js +279 -0
  48. package/lib/DelegatedModuleFactoryPlugin.js +116 -0
  49. package/lib/DelegatedPlugin.js +49 -0
  50. package/lib/DependenciesBlock.js +120 -0
  51. package/lib/Dependency.js +390 -0
  52. package/lib/DependencyTemplate.js +71 -0
  53. package/lib/DependencyTemplates.js +67 -0
  54. package/lib/DllEntryPlugin.js +76 -0
  55. package/lib/DllModule.js +175 -0
  56. package/lib/DllModuleFactory.js +38 -0
  57. package/lib/DllPlugin.js +73 -0
  58. package/lib/DllReferencePlugin.js +189 -0
  59. package/lib/DotenvPlugin.js +468 -0
  60. package/lib/DynamicEntryPlugin.js +93 -0
  61. package/lib/EntryOptionPlugin.js +98 -0
  62. package/lib/EntryPlugin.js +72 -0
  63. package/lib/Entrypoint.js +120 -0
  64. package/lib/EnvironmentNotSupportAsyncWarning.js +51 -0
  65. package/lib/EnvironmentPlugin.js +74 -0
  66. package/lib/ErrorHelpers.js +100 -0
  67. package/lib/EvalDevToolModulePlugin.js +135 -0
  68. package/lib/EvalSourceMapDevToolPlugin.js +252 -0
  69. package/lib/ExportsInfo.js +1663 -0
  70. package/lib/ExportsInfoApiPlugin.js +87 -0
  71. package/lib/ExternalModule.js +1169 -0
  72. package/lib/ExternalModuleFactoryPlugin.js +370 -0
  73. package/lib/ExternalsPlugin.js +93 -0
  74. package/lib/FalseIIFEUmdWarning.js +20 -0
  75. package/lib/FileSystemInfo.js +4131 -0
  76. package/lib/FlagAllModulesAsUsedPlugin.js +55 -0
  77. package/lib/FlagDependencyExportsPlugin.js +437 -0
  78. package/lib/FlagDependencyUsagePlugin.js +348 -0
  79. package/lib/FlagEntryExportAsUsedPlugin.js +56 -0
  80. package/lib/Generator.js +188 -0
  81. package/lib/GraphHelpers.js +46 -0
  82. package/lib/HarmonyLinkingError.js +17 -0
  83. package/lib/HookWebpackError.js +121 -0
  84. package/lib/HotModuleReplacementPlugin.js +930 -0
  85. package/lib/HotUpdateChunk.js +16 -0
  86. package/lib/IgnoreErrorModuleFactory.js +39 -0
  87. package/lib/IgnorePlugin.js +105 -0
  88. package/lib/IgnoreWarningsPlugin.js +41 -0
  89. package/lib/InitFragment.js +204 -0
  90. package/lib/InvalidDependenciesModuleWarning.js +44 -0
  91. package/lib/JavascriptMetaInfoPlugin.js +78 -0
  92. package/lib/LibManifestPlugin.js +144 -0
  93. package/lib/LibraryTemplatePlugin.js +48 -0
  94. package/lib/LoaderOptionsPlugin.js +81 -0
  95. package/lib/LoaderTargetPlugin.js +39 -0
  96. package/lib/MainTemplate.js +371 -0
  97. package/lib/ManifestPlugin.js +242 -0
  98. package/lib/Module.js +1319 -0
  99. package/lib/ModuleBuildError.js +83 -0
  100. package/lib/ModuleDependencyError.js +44 -0
  101. package/lib/ModuleDependencyWarning.js +49 -0
  102. package/lib/ModuleError.js +69 -0
  103. package/lib/ModuleFactory.js +57 -0
  104. package/lib/ModuleFilenameHelpers.js +388 -0
  105. package/lib/ModuleGraph.js +1024 -0
  106. package/lib/ModuleGraphConnection.js +199 -0
  107. package/lib/ModuleHashingError.js +31 -0
  108. package/lib/ModuleInfoHeaderPlugin.js +318 -0
  109. package/lib/ModuleNotFoundError.js +90 -0
  110. package/lib/ModuleParseError.js +125 -0
  111. package/lib/ModuleProfile.js +108 -0
  112. package/lib/ModuleRestoreError.js +46 -0
  113. package/lib/ModuleSourceTypeConstants.js +179 -0
  114. package/lib/ModuleStoreError.js +45 -0
  115. package/lib/ModuleTemplate.js +173 -0
  116. package/lib/ModuleTypeConstants.js +190 -0
  117. package/lib/ModuleWarning.js +68 -0
  118. package/lib/MultiCompiler.js +678 -0
  119. package/lib/MultiStats.js +213 -0
  120. package/lib/MultiWatching.js +77 -0
  121. package/lib/NoEmitOnErrorsPlugin.js +30 -0
  122. package/lib/NoModeWarning.js +23 -0
  123. package/lib/NodeStuffInWebError.js +35 -0
  124. package/lib/NodeStuffPlugin.js +587 -0
  125. package/lib/NormalModule.js +1798 -0
  126. package/lib/NormalModuleFactory.js +1455 -0
  127. package/lib/NormalModuleReplacementPlugin.js +75 -0
  128. package/lib/NullFactory.js +24 -0
  129. package/lib/OptimizationStages.js +10 -0
  130. package/lib/OptionsApply.js +24 -0
  131. package/lib/Parser.js +40 -0
  132. package/lib/PlatformPlugin.js +41 -0
  133. package/lib/PrefetchPlugin.js +56 -0
  134. package/lib/ProgressPlugin.js +712 -0
  135. package/lib/ProvidePlugin.js +121 -0
  136. package/lib/RawModule.js +180 -0
  137. package/lib/RecordIdsPlugin.js +216 -0
  138. package/lib/RequestShortener.js +36 -0
  139. package/lib/RequireJsStuffPlugin.js +84 -0
  140. package/lib/ResolverFactory.js +156 -0
  141. package/lib/RuntimeGlobals.js +450 -0
  142. package/lib/RuntimeModule.js +242 -0
  143. package/lib/RuntimePlugin.js +547 -0
  144. package/lib/RuntimeTemplate.js +1288 -0
  145. package/lib/SelfModuleFactory.js +33 -0
  146. package/lib/SingleEntryPlugin.js +8 -0
  147. package/lib/SizeFormatHelpers.js +25 -0
  148. package/lib/SourceMapDevToolModuleOptionsPlugin.js +52 -0
  149. package/lib/SourceMapDevToolPlugin.js +646 -0
  150. package/lib/Stats.js +89 -0
  151. package/lib/Template.js +427 -0
  152. package/lib/TemplatedPathPlugin.js +400 -0
  153. package/lib/UnhandledSchemeError.js +34 -0
  154. package/lib/UnsupportedFeatureWarning.js +35 -0
  155. package/lib/UseStrictPlugin.js +81 -0
  156. package/lib/WarnCaseSensitiveModulesPlugin.js +64 -0
  157. package/lib/WarnDeprecatedOptionPlugin.js +60 -0
  158. package/lib/WarnNoModeSetPlugin.js +27 -0
  159. package/lib/WatchIgnorePlugin.js +155 -0
  160. package/lib/Watching.js +531 -0
  161. package/lib/WebpackError.js +81 -0
  162. package/lib/WebpackIsIncludedPlugin.js +93 -0
  163. package/lib/WebpackOptionsApply.js +941 -0
  164. package/lib/WebpackOptionsDefaulter.js +26 -0
  165. package/lib/asset/AssetBytesGenerator.js +172 -0
  166. package/lib/asset/AssetBytesParser.js +37 -0
  167. package/lib/asset/AssetGenerator.js +816 -0
  168. package/lib/asset/AssetModulesPlugin.js +358 -0
  169. package/lib/asset/AssetParser.js +73 -0
  170. package/lib/asset/AssetSourceGenerator.js +171 -0
  171. package/lib/asset/AssetSourceParser.js +37 -0
  172. package/lib/asset/RawDataUrlModule.js +179 -0
  173. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  174. package/lib/async-modules/AwaitDependenciesInitFragment.js +90 -0
  175. package/lib/async-modules/InferAsyncModulesPlugin.js +54 -0
  176. package/lib/buildChunkGraph.js +1392 -0
  177. package/lib/cache/AddBuildDependenciesPlugin.js +32 -0
  178. package/lib/cache/AddManagedPathsPlugin.js +40 -0
  179. package/lib/cache/IdleFileCachePlugin.js +242 -0
  180. package/lib/cache/MemoryCachePlugin.js +57 -0
  181. package/lib/cache/MemoryWithGcCachePlugin.js +142 -0
  182. package/lib/cache/PackFileCacheStrategy.js +1600 -0
  183. package/lib/cache/ResolverCachePlugin.js +450 -0
  184. package/lib/cache/getLazyHashedEtag.js +91 -0
  185. package/lib/cache/mergeEtags.js +71 -0
  186. package/lib/cli.js +859 -0
  187. package/lib/config/browserslistTargetHandler.js +388 -0
  188. package/lib/config/defaults.js +2086 -0
  189. package/lib/config/normalization.js +681 -0
  190. package/lib/config/target.js +389 -0
  191. package/lib/container/ContainerEntryDependency.js +50 -0
  192. package/lib/container/ContainerEntryModule.js +303 -0
  193. package/lib/container/ContainerEntryModuleFactory.js +27 -0
  194. package/lib/container/ContainerExposedDependency.js +62 -0
  195. package/lib/container/ContainerPlugin.js +118 -0
  196. package/lib/container/ContainerReferencePlugin.js +139 -0
  197. package/lib/container/FallbackDependency.js +66 -0
  198. package/lib/container/FallbackItemDependency.js +34 -0
  199. package/lib/container/FallbackModule.js +193 -0
  200. package/lib/container/FallbackModuleFactory.js +27 -0
  201. package/lib/container/HoistContainerReferencesPlugin.js +256 -0
  202. package/lib/container/ModuleFederationPlugin.js +131 -0
  203. package/lib/container/RemoteModule.js +225 -0
  204. package/lib/container/RemoteRuntimeModule.js +144 -0
  205. package/lib/container/RemoteToExternalDependency.js +33 -0
  206. package/lib/container/options.js +105 -0
  207. package/lib/css/CssGenerator.js +587 -0
  208. package/lib/css/CssLoadingRuntimeModule.js +513 -0
  209. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  210. package/lib/css/CssModulesPlugin.js +939 -0
  211. package/lib/css/CssParser.js +2621 -0
  212. package/lib/css/walkCssTokens.js +1740 -0
  213. package/lib/debug/ProfilingPlugin.js +589 -0
  214. package/lib/dependencies/AMDDefineDependency.js +267 -0
  215. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +504 -0
  216. package/lib/dependencies/AMDPlugin.js +243 -0
  217. package/lib/dependencies/AMDRequireArrayDependency.js +124 -0
  218. package/lib/dependencies/AMDRequireContextDependency.js +69 -0
  219. package/lib/dependencies/AMDRequireDependenciesBlock.js +28 -0
  220. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +425 -0
  221. package/lib/dependencies/AMDRequireDependency.js +189 -0
  222. package/lib/dependencies/AMDRequireItemDependency.js +41 -0
  223. package/lib/dependencies/AMDRuntimeModules.js +50 -0
  224. package/lib/dependencies/CachedConstDependency.js +135 -0
  225. package/lib/dependencies/CommonJsDependencyHelpers.js +65 -0
  226. package/lib/dependencies/CommonJsExportRequireDependency.js +416 -0
  227. package/lib/dependencies/CommonJsExportsDependency.js +184 -0
  228. package/lib/dependencies/CommonJsExportsParserPlugin.js +425 -0
  229. package/lib/dependencies/CommonJsFullRequireDependency.js +162 -0
  230. package/lib/dependencies/CommonJsImportsParserPlugin.js +611 -0
  231. package/lib/dependencies/CommonJsPlugin.js +316 -0
  232. package/lib/dependencies/CommonJsRequireContextDependency.js +73 -0
  233. package/lib/dependencies/CommonJsRequireDependency.js +42 -0
  234. package/lib/dependencies/CommonJsSelfReferenceDependency.js +156 -0
  235. package/lib/dependencies/ConstDependency.js +118 -0
  236. package/lib/dependencies/ContextDependency.js +183 -0
  237. package/lib/dependencies/ContextDependencyHelpers.js +277 -0
  238. package/lib/dependencies/ContextDependencyTemplateAsId.js +63 -0
  239. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +62 -0
  240. package/lib/dependencies/ContextElementDependency.js +147 -0
  241. package/lib/dependencies/CreateRequireParserPlugin.js +356 -0
  242. package/lib/dependencies/CreateScriptUrlDependency.js +75 -0
  243. package/lib/dependencies/CriticalDependencyWarning.js +29 -0
  244. package/lib/dependencies/CssIcssExportDependency.js +539 -0
  245. package/lib/dependencies/CssIcssImportDependency.js +183 -0
  246. package/lib/dependencies/CssIcssSymbolDependency.js +131 -0
  247. package/lib/dependencies/CssImportDependency.js +120 -0
  248. package/lib/dependencies/CssUrlDependency.js +189 -0
  249. package/lib/dependencies/DelegatedSourceDependency.js +33 -0
  250. package/lib/dependencies/DllEntryDependency.js +61 -0
  251. package/lib/dependencies/DynamicExports.js +73 -0
  252. package/lib/dependencies/EntryDependency.js +30 -0
  253. package/lib/dependencies/ExportsInfoDependency.js +161 -0
  254. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  255. package/lib/dependencies/ExternalModuleInitFragment.js +137 -0
  256. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +87 -0
  257. package/lib/dependencies/HarmonyAcceptDependency.js +237 -0
  258. package/lib/dependencies/HarmonyAcceptImportDependency.js +37 -0
  259. package/lib/dependencies/HarmonyCompatibilityDependency.js +91 -0
  260. package/lib/dependencies/HarmonyDetectionParserPlugin.js +103 -0
  261. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +165 -0
  262. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +254 -0
  263. package/lib/dependencies/HarmonyExportExpressionDependency.js +211 -0
  264. package/lib/dependencies/HarmonyExportHeaderDependency.js +78 -0
  265. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +1494 -0
  266. package/lib/dependencies/HarmonyExportInitFragment.js +191 -0
  267. package/lib/dependencies/HarmonyExportSpecifierDependency.js +127 -0
  268. package/lib/dependencies/HarmonyExports.js +46 -0
  269. package/lib/dependencies/HarmonyImportDependency.js +459 -0
  270. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +576 -0
  271. package/lib/dependencies/HarmonyImportSideEffectDependency.js +91 -0
  272. package/lib/dependencies/HarmonyImportSpecifierDependency.js +514 -0
  273. package/lib/dependencies/HarmonyModulesPlugin.js +158 -0
  274. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +39 -0
  275. package/lib/dependencies/ImportContextDependency.js +81 -0
  276. package/lib/dependencies/ImportDependency.js +158 -0
  277. package/lib/dependencies/ImportEagerDependency.js +76 -0
  278. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  279. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +312 -0
  280. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  281. package/lib/dependencies/ImportMetaHotAcceptDependency.js +41 -0
  282. package/lib/dependencies/ImportMetaHotDeclineDependency.js +42 -0
  283. package/lib/dependencies/ImportMetaPlugin.js +447 -0
  284. package/lib/dependencies/ImportParserPlugin.js +602 -0
  285. package/lib/dependencies/ImportPhase.js +125 -0
  286. package/lib/dependencies/ImportPlugin.js +98 -0
  287. package/lib/dependencies/ImportWeakDependency.js +74 -0
  288. package/lib/dependencies/JsonExportsDependency.js +137 -0
  289. package/lib/dependencies/LoaderDependency.js +38 -0
  290. package/lib/dependencies/LoaderImportDependency.js +39 -0
  291. package/lib/dependencies/LoaderPlugin.js +294 -0
  292. package/lib/dependencies/LocalModule.js +60 -0
  293. package/lib/dependencies/LocalModuleDependency.js +84 -0
  294. package/lib/dependencies/LocalModulesHelpers.js +68 -0
  295. package/lib/dependencies/ModuleDecoratorDependency.js +136 -0
  296. package/lib/dependencies/ModuleDependency.js +100 -0
  297. package/lib/dependencies/ModuleDependencyTemplateAsId.js +35 -0
  298. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +39 -0
  299. package/lib/dependencies/ModuleHotAcceptDependency.js +41 -0
  300. package/lib/dependencies/ModuleHotDeclineDependency.js +42 -0
  301. package/lib/dependencies/ModuleInitFragmentDependency.js +87 -0
  302. package/lib/dependencies/NullDependency.js +42 -0
  303. package/lib/dependencies/PrefetchDependency.js +27 -0
  304. package/lib/dependencies/ProvidedDependency.js +156 -0
  305. package/lib/dependencies/PureExpressionDependency.js +161 -0
  306. package/lib/dependencies/RequireContextDependency.js +38 -0
  307. package/lib/dependencies/RequireContextDependencyParserPlugin.js +69 -0
  308. package/lib/dependencies/RequireContextPlugin.js +167 -0
  309. package/lib/dependencies/RequireEnsureDependenciesBlock.js +29 -0
  310. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +145 -0
  311. package/lib/dependencies/RequireEnsureDependency.js +115 -0
  312. package/lib/dependencies/RequireEnsureItemDependency.js +36 -0
  313. package/lib/dependencies/RequireEnsurePlugin.js +86 -0
  314. package/lib/dependencies/RequireHeaderDependency.js +70 -0
  315. package/lib/dependencies/RequireIncludeDependency.js +79 -0
  316. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +100 -0
  317. package/lib/dependencies/RequireIncludePlugin.js +63 -0
  318. package/lib/dependencies/RequireResolveContextDependency.js +67 -0
  319. package/lib/dependencies/RequireResolveDependency.js +58 -0
  320. package/lib/dependencies/RequireResolveHeaderDependency.js +81 -0
  321. package/lib/dependencies/RuntimeRequirementsDependency.js +85 -0
  322. package/lib/dependencies/StaticExportsDependency.js +72 -0
  323. package/lib/dependencies/SystemPlugin.js +168 -0
  324. package/lib/dependencies/SystemRuntimeModule.js +35 -0
  325. package/lib/dependencies/URLContextDependency.js +65 -0
  326. package/lib/dependencies/URLDependency.js +165 -0
  327. package/lib/dependencies/URLPlugin.js +67 -0
  328. package/lib/dependencies/UnsupportedDependency.js +82 -0
  329. package/lib/dependencies/WebAssemblyExportImportedDependency.js +93 -0
  330. package/lib/dependencies/WebAssemblyImportDependency.js +108 -0
  331. package/lib/dependencies/WebpackIsIncludedDependency.js +84 -0
  332. package/lib/dependencies/WorkerDependency.js +141 -0
  333. package/lib/dependencies/WorkerPlugin.js +565 -0
  334. package/lib/dependencies/getFunctionExpression.js +66 -0
  335. package/lib/dependencies/processExportInfo.js +67 -0
  336. package/lib/electron/ElectronTargetPlugin.js +71 -0
  337. package/lib/errors/BuildCycleError.js +30 -0
  338. package/lib/esm/ExportWebpackRequireRuntimeModule.js +30 -0
  339. package/lib/esm/ModuleChunkFormatPlugin.js +273 -0
  340. package/lib/esm/ModuleChunkLoadingPlugin.js +143 -0
  341. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +426 -0
  342. package/lib/formatLocation.js +67 -0
  343. package/lib/hmr/HotModuleReplacement.runtime.js +419 -0
  344. package/lib/hmr/HotModuleReplacementRuntimeModule.js +42 -0
  345. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +471 -0
  346. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  347. package/lib/hmr/LazyCompilationPlugin.js +473 -0
  348. package/lib/hmr/lazyCompilationBackend.js +167 -0
  349. package/lib/ids/ChunkModuleIdRangePlugin.js +94 -0
  350. package/lib/ids/DeterministicChunkIdsPlugin.js +73 -0
  351. package/lib/ids/DeterministicModuleIdsPlugin.js +98 -0
  352. package/lib/ids/HashedModuleIdsPlugin.js +85 -0
  353. package/lib/ids/IdHelpers.js +492 -0
  354. package/lib/ids/NamedChunkIdsPlugin.js +92 -0
  355. package/lib/ids/NamedModuleIdsPlugin.js +68 -0
  356. package/lib/ids/NaturalChunkIdsPlugin.js +35 -0
  357. package/lib/ids/NaturalModuleIdsPlugin.js +40 -0
  358. package/lib/ids/OccurrenceChunkIdsPlugin.js +86 -0
  359. package/lib/ids/OccurrenceModuleIdsPlugin.js +168 -0
  360. package/lib/ids/SyncModuleIdsPlugin.js +161 -0
  361. package/lib/index.js +681 -0
  362. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +153 -0
  363. package/lib/javascript/BasicEvaluatedExpression.js +603 -0
  364. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  365. package/lib/javascript/ChunkHelpers.js +45 -0
  366. package/lib/javascript/CommonJsChunkFormatPlugin.js +148 -0
  367. package/lib/javascript/EnableChunkLoadingPlugin.js +127 -0
  368. package/lib/javascript/JavascriptGenerator.js +277 -0
  369. package/lib/javascript/JavascriptModulesPlugin.js +1905 -0
  370. package/lib/javascript/JavascriptParser.js +5476 -0
  371. package/lib/javascript/JavascriptParserHelpers.js +129 -0
  372. package/lib/javascript/StartupHelpers.js +178 -0
  373. package/lib/json/JsonData.js +74 -0
  374. package/lib/json/JsonGenerator.js +234 -0
  375. package/lib/json/JsonModulesPlugin.js +66 -0
  376. package/lib/json/JsonParser.js +93 -0
  377. package/lib/library/AbstractLibraryPlugin.js +339 -0
  378. package/lib/library/AmdLibraryPlugin.js +181 -0
  379. package/lib/library/AssignLibraryPlugin.js +445 -0
  380. package/lib/library/EnableLibraryPlugin.js +306 -0
  381. package/lib/library/ExportPropertyLibraryPlugin.js +116 -0
  382. package/lib/library/JsonpLibraryPlugin.js +92 -0
  383. package/lib/library/ModuleLibraryPlugin.js +438 -0
  384. package/lib/library/SystemLibraryPlugin.js +256 -0
  385. package/lib/library/UmdLibraryPlugin.js +355 -0
  386. package/lib/logging/Logger.js +223 -0
  387. package/lib/logging/createConsoleLogger.js +217 -0
  388. package/lib/logging/runtime.js +45 -0
  389. package/lib/logging/truncateArgs.js +83 -0
  390. package/lib/node/CommonJsChunkLoadingPlugin.js +120 -0
  391. package/lib/node/NodeEnvironmentPlugin.js +73 -0
  392. package/lib/node/NodeSourcePlugin.js +19 -0
  393. package/lib/node/NodeTargetPlugin.js +102 -0
  394. package/lib/node/NodeTemplatePlugin.js +42 -0
  395. package/lib/node/NodeWatchFileSystem.js +198 -0
  396. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +286 -0
  397. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +123 -0
  398. package/lib/node/ReadFileCompileWasmPlugin.js +127 -0
  399. package/lib/node/RequireChunkLoadingRuntimeModule.js +239 -0
  400. package/lib/node/nodeConsole.js +185 -0
  401. package/lib/optimize/AggressiveMergingPlugin.js +98 -0
  402. package/lib/optimize/AggressiveSplittingPlugin.js +352 -0
  403. package/lib/optimize/ConcatenatedModule.js +2290 -0
  404. package/lib/optimize/EnsureChunkConditionsPlugin.js +88 -0
  405. package/lib/optimize/FlagIncludedChunksPlugin.js +137 -0
  406. package/lib/optimize/InnerGraph.js +368 -0
  407. package/lib/optimize/InnerGraphPlugin.js +455 -0
  408. package/lib/optimize/LimitChunkCountPlugin.js +302 -0
  409. package/lib/optimize/MangleExportsPlugin.js +194 -0
  410. package/lib/optimize/MergeDuplicateChunksPlugin.js +138 -0
  411. package/lib/optimize/MinChunkSizePlugin.js +121 -0
  412. package/lib/optimize/MinMaxSizeWarning.js +35 -0
  413. package/lib/optimize/ModuleConcatenationPlugin.js +971 -0
  414. package/lib/optimize/RealContentHashPlugin.js +488 -0
  415. package/lib/optimize/RemoveEmptyChunksPlugin.js +60 -0
  416. package/lib/optimize/RemoveParentModulesPlugin.js +216 -0
  417. package/lib/optimize/RuntimeChunkPlugin.js +52 -0
  418. package/lib/optimize/SideEffectsFlagPlugin.js +417 -0
  419. package/lib/optimize/SplitChunksPlugin.js +1836 -0
  420. package/lib/performance/AssetsOverSizeLimitWarning.js +37 -0
  421. package/lib/performance/EntrypointsOverSizeLimitWarning.js +40 -0
  422. package/lib/performance/NoAsyncChunksWarning.js +21 -0
  423. package/lib/performance/SizeLimitsPlugin.js +183 -0
  424. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +46 -0
  425. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +95 -0
  426. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +56 -0
  427. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +52 -0
  428. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +46 -0
  429. package/lib/rules/BasicEffectRulePlugin.js +56 -0
  430. package/lib/rules/BasicMatcherRulePlugin.js +68 -0
  431. package/lib/rules/ObjectMatcherRulePlugin.js +79 -0
  432. package/lib/rules/RuleSetCompiler.js +447 -0
  433. package/lib/rules/UseEffectRulePlugin.js +236 -0
  434. package/lib/runtime/AsyncModuleRuntimeModule.js +199 -0
  435. package/lib/runtime/AutoPublicPathRuntimeModule.js +90 -0
  436. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  437. package/lib/runtime/ChunkNameRuntimeModule.js +28 -0
  438. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +40 -0
  439. package/lib/runtime/CompatRuntimeModule.js +83 -0
  440. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +69 -0
  441. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  442. package/lib/runtime/CreateScriptUrlRuntimeModule.js +38 -0
  443. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +42 -0
  444. package/lib/runtime/EnsureChunkRuntimeModule.js +69 -0
  445. package/lib/runtime/GetChunkFilenameRuntimeModule.js +299 -0
  446. package/lib/runtime/GetFullHashRuntimeModule.js +31 -0
  447. package/lib/runtime/GetMainFilenameRuntimeModule.js +49 -0
  448. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +99 -0
  449. package/lib/runtime/GlobalRuntimeModule.js +47 -0
  450. package/lib/runtime/HasOwnPropertyRuntimeModule.js +35 -0
  451. package/lib/runtime/HelperRuntimeModule.js +18 -0
  452. package/lib/runtime/LoadScriptRuntimeModule.js +174 -0
  453. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +232 -0
  454. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +39 -0
  455. package/lib/runtime/NonceRuntimeModule.js +24 -0
  456. package/lib/runtime/OnChunksLoadedRuntimeModule.js +78 -0
  457. package/lib/runtime/PublicPathRuntimeModule.js +38 -0
  458. package/lib/runtime/RelativeUrlRuntimeModule.js +44 -0
  459. package/lib/runtime/RuntimeIdRuntimeModule.js +33 -0
  460. package/lib/runtime/StartupChunkDependenciesPlugin.js +88 -0
  461. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +77 -0
  462. package/lib/runtime/StartupEntrypointRuntimeModule.js +54 -0
  463. package/lib/runtime/SystemContextRuntimeModule.js +23 -0
  464. package/lib/runtime/ToBinaryRuntimeModule.js +72 -0
  465. package/lib/schemes/DataUriPlugin.js +47 -0
  466. package/lib/schemes/FileUriPlugin.js +54 -0
  467. package/lib/schemes/HttpUriPlugin.js +1410 -0
  468. package/lib/schemes/VirtualUrlPlugin.js +248 -0
  469. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  470. package/lib/serialization/ArraySerializer.js +38 -0
  471. package/lib/serialization/BinaryMiddleware.js +1164 -0
  472. package/lib/serialization/DateObjectSerializer.js +28 -0
  473. package/lib/serialization/ErrorObjectSerializer.js +49 -0
  474. package/lib/serialization/FileMiddleware.js +766 -0
  475. package/lib/serialization/MapObjectSerializer.js +48 -0
  476. package/lib/serialization/NullPrototypeObjectSerializer.js +53 -0
  477. package/lib/serialization/ObjectMiddleware.js +877 -0
  478. package/lib/serialization/PlainObjectSerializer.js +119 -0
  479. package/lib/serialization/RegExpObjectSerializer.js +29 -0
  480. package/lib/serialization/Serializer.js +82 -0
  481. package/lib/serialization/SerializerMiddleware.js +226 -0
  482. package/lib/serialization/SetObjectSerializer.js +40 -0
  483. package/lib/serialization/SingleItemMiddleware.js +36 -0
  484. package/lib/serialization/types.js +13 -0
  485. package/lib/sharing/ConsumeSharedFallbackDependency.js +33 -0
  486. package/lib/sharing/ConsumeSharedModule.js +344 -0
  487. package/lib/sharing/ConsumeSharedPlugin.js +380 -0
  488. package/lib/sharing/ConsumeSharedRuntimeModule.js +358 -0
  489. package/lib/sharing/ProvideForSharedDependency.js +33 -0
  490. package/lib/sharing/ProvideSharedDependency.js +80 -0
  491. package/lib/sharing/ProvideSharedModule.js +196 -0
  492. package/lib/sharing/ProvideSharedModuleFactory.js +37 -0
  493. package/lib/sharing/ProvideSharedPlugin.js +248 -0
  494. package/lib/sharing/SharePlugin.js +91 -0
  495. package/lib/sharing/ShareRuntimeModule.js +152 -0
  496. package/lib/sharing/resolveMatchedConfigs.js +106 -0
  497. package/lib/sharing/utils.js +421 -0
  498. package/lib/stats/DefaultStatsFactoryPlugin.js +2791 -0
  499. package/lib/stats/DefaultStatsPresetPlugin.js +417 -0
  500. package/lib/stats/DefaultStatsPrinterPlugin.js +1860 -0
  501. package/lib/stats/StatsFactory.js +406 -0
  502. package/lib/stats/StatsPrinter.js +300 -0
  503. package/lib/url/URLParserPlugin.js +266 -0
  504. package/lib/util/AppendOnlyStackedSet.js +78 -0
  505. package/lib/util/ArrayHelpers.js +46 -0
  506. package/lib/util/ArrayQueue.js +104 -0
  507. package/lib/util/AsyncQueue.js +411 -0
  508. package/lib/util/Hash.js +68 -0
  509. package/lib/util/IterableHelpers.js +46 -0
  510. package/lib/util/LazyBucketSortedSet.js +272 -0
  511. package/lib/util/LazySet.js +236 -0
  512. package/lib/util/MapHelpers.js +34 -0
  513. package/lib/util/ParallelismFactorCalculator.js +70 -0
  514. package/lib/util/Queue.js +52 -0
  515. package/lib/util/Semaphore.js +51 -0
  516. package/lib/util/SetHelpers.js +94 -0
  517. package/lib/util/SortableSet.js +176 -0
  518. package/lib/util/StackedCacheMap.js +140 -0
  519. package/lib/util/StackedMap.js +164 -0
  520. package/lib/util/StringXor.js +103 -0
  521. package/lib/util/TupleQueue.js +70 -0
  522. package/lib/util/TupleSet.js +185 -0
  523. package/lib/util/URLAbsoluteSpecifier.js +86 -0
  524. package/lib/util/WeakTupleMap.js +227 -0
  525. package/lib/util/binarySearchBounds.js +136 -0
  526. package/lib/util/chainedImports.js +99 -0
  527. package/lib/util/cleverMerge.js +676 -0
  528. package/lib/util/comparators.js +645 -0
  529. package/lib/util/compileBooleanMatcher.js +313 -0
  530. package/lib/util/concatenate.js +232 -0
  531. package/lib/util/conventions.js +126 -0
  532. package/lib/util/create-schema-validation.js +41 -0
  533. package/lib/util/createHash.js +91 -0
  534. package/lib/util/dataURL.js +39 -0
  535. package/lib/util/deprecation.js +350 -0
  536. package/lib/util/deterministicGrouping.js +561 -0
  537. package/lib/util/extractSourceMap.js +318 -0
  538. package/lib/util/extractUrlAndGlobal.js +18 -0
  539. package/lib/util/findGraphRoots.js +211 -0
  540. package/lib/util/fs.js +675 -0
  541. package/lib/util/generateDebugId.js +33 -0
  542. package/lib/util/hash/BatchedHash.js +115 -0
  543. package/lib/util/hash/BulkUpdateHash.js +145 -0
  544. package/lib/util/hash/DebugHash.js +75 -0
  545. package/lib/util/hash/hash-digest.js +217 -0
  546. package/lib/util/hash/md4.js +20 -0
  547. package/lib/util/hash/wasm-hash.js +232 -0
  548. package/lib/util/hash/xxhash64.js +20 -0
  549. package/lib/util/identifier.js +471 -0
  550. package/lib/util/internalSerializables.js +222 -0
  551. package/lib/util/magicComment.js +25 -0
  552. package/lib/util/makeSerializable.js +60 -0
  553. package/lib/util/memoize.js +36 -0
  554. package/lib/util/nonNumericOnlyHash.js +22 -0
  555. package/lib/util/numberHash.js +95 -0
  556. package/lib/util/objectToMap.js +15 -0
  557. package/lib/util/processAsyncTree.js +68 -0
  558. package/lib/util/propertyAccess.js +30 -0
  559. package/lib/util/propertyName.js +76 -0
  560. package/lib/util/registerExternalSerializer.js +334 -0
  561. package/lib/util/removeBOM.js +25 -0
  562. package/lib/util/runtime.js +717 -0
  563. package/lib/util/semver.js +604 -0
  564. package/lib/util/serialization.js +153 -0
  565. package/lib/util/smartGrouping.js +221 -0
  566. package/lib/util/source.js +62 -0
  567. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  568. package/lib/validateSchema.js +177 -0
  569. package/lib/wasm/EnableWasmLoadingPlugin.js +146 -0
  570. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +154 -0
  571. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +74 -0
  572. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +212 -0
  573. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +209 -0
  574. package/lib/wasm-async/AsyncWebAssemblyParser.js +80 -0
  575. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +107 -0
  576. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +20 -0
  577. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +422 -0
  578. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +91 -0
  579. package/lib/wasm-sync/WebAssemblyGenerator.js +535 -0
  580. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +111 -0
  581. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +236 -0
  582. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +151 -0
  583. package/lib/wasm-sync/WebAssemblyParser.js +201 -0
  584. package/lib/wasm-sync/WebAssemblyUtils.js +66 -0
  585. package/lib/web/FetchCompileAsyncWasmPlugin.js +70 -0
  586. package/lib/web/FetchCompileWasmPlugin.js +86 -0
  587. package/lib/web/JsonpChunkLoadingPlugin.js +101 -0
  588. package/lib/web/JsonpChunkLoadingRuntimeModule.js +455 -0
  589. package/lib/web/JsonpTemplatePlugin.js +37 -0
  590. package/lib/webpack.js +227 -0
  591. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +110 -0
  592. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +231 -0
  593. package/lib/webworker/WebWorkerTemplatePlugin.js +26 -0
  594. package/module.d.ts +238 -0
  595. package/package.json +258 -0
  596. package/schemas/WebpackOptions.check.d.ts +7 -0
  597. package/schemas/WebpackOptions.check.js +6 -0
  598. package/schemas/WebpackOptions.json +6179 -0
  599. package/schemas/_container.json +155 -0
  600. package/schemas/_sharing.json +118 -0
  601. package/schemas/plugins/BannerPlugin.check.d.ts +7 -0
  602. package/schemas/plugins/BannerPlugin.check.js +6 -0
  603. package/schemas/plugins/BannerPlugin.json +115 -0
  604. package/schemas/plugins/DllPlugin.check.d.ts +7 -0
  605. package/schemas/plugins/DllPlugin.check.js +6 -0
  606. package/schemas/plugins/DllPlugin.json +36 -0
  607. package/schemas/plugins/DllReferencePlugin.check.d.ts +7 -0
  608. package/schemas/plugins/DllReferencePlugin.check.js +6 -0
  609. package/schemas/plugins/DllReferencePlugin.json +206 -0
  610. package/schemas/plugins/IgnorePlugin.check.d.ts +7 -0
  611. package/schemas/plugins/IgnorePlugin.check.js +6 -0
  612. package/schemas/plugins/IgnorePlugin.json +34 -0
  613. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +7 -0
  614. package/schemas/plugins/LoaderOptionsPlugin.check.js +6 -0
  615. package/schemas/plugins/LoaderOptionsPlugin.json +27 -0
  616. package/schemas/plugins/ManifestPlugin.check.d.ts +7 -0
  617. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  618. package/schemas/plugins/ManifestPlugin.json +98 -0
  619. package/schemas/plugins/ProgressPlugin.check.d.ts +7 -0
  620. package/schemas/plugins/ProgressPlugin.check.js +6 -0
  621. package/schemas/plugins/ProgressPlugin.json +65 -0
  622. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +7 -0
  623. package/schemas/plugins/SourceMapDevToolPlugin.check.js +6 -0
  624. package/schemas/plugins/SourceMapDevToolPlugin.json +168 -0
  625. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +7 -0
  626. package/schemas/plugins/WatchIgnorePlugin.check.js +6 -0
  627. package/schemas/plugins/WatchIgnorePlugin.json +25 -0
  628. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +7 -0
  629. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +6 -0
  630. package/schemas/plugins/asset/AssetGeneratorOptions.json +3 -0
  631. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +7 -0
  632. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +6 -0
  633. package/schemas/plugins/asset/AssetInlineGeneratorOptions.json +3 -0
  634. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +7 -0
  635. package/schemas/plugins/asset/AssetParserOptions.check.js +6 -0
  636. package/schemas/plugins/asset/AssetParserOptions.json +3 -0
  637. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +7 -0
  638. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +6 -0
  639. package/schemas/plugins/asset/AssetResourceGeneratorOptions.json +3 -0
  640. package/schemas/plugins/container/ContainerPlugin.check.d.ts +7 -0
  641. package/schemas/plugins/container/ContainerPlugin.check.js +6 -0
  642. package/schemas/plugins/container/ContainerPlugin.json +294 -0
  643. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +7 -0
  644. package/schemas/plugins/container/ContainerReferencePlugin.check.js +6 -0
  645. package/schemas/plugins/container/ContainerReferencePlugin.json +132 -0
  646. package/schemas/plugins/container/ExternalsType.check.d.ts +7 -0
  647. package/schemas/plugins/container/ExternalsType.check.js +6 -0
  648. package/schemas/plugins/container/ExternalsType.json +3 -0
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +7 -0
  650. package/schemas/plugins/container/ModuleFederationPlugin.check.js +6 -0
  651. package/schemas/plugins/container/ModuleFederationPlugin.json +525 -0
  652. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  653. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  654. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  655. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  656. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  657. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  658. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  659. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  660. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  661. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  662. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  663. package/schemas/plugins/css/CssParserOptions.json +3 -0
  664. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +7 -0
  665. package/schemas/plugins/debug/ProfilingPlugin.check.js +6 -0
  666. package/schemas/plugins/debug/ProfilingPlugin.json +12 -0
  667. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  668. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  669. package/schemas/plugins/ids/HashedModuleIdsPlugin.json +57 -0
  670. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +7 -0
  671. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +6 -0
  672. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.json +11 -0
  673. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +7 -0
  674. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +6 -0
  675. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.json +11 -0
  676. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +7 -0
  677. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  678. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  679. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +7 -0
  680. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  681. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  682. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +7 -0
  683. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +6 -0
  684. package/schemas/plugins/optimize/AggressiveSplittingPlugin.json +23 -0
  685. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +7 -0
  686. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +6 -0
  687. package/schemas/plugins/optimize/LimitChunkCountPlugin.json +21 -0
  688. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +7 -0
  689. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +6 -0
  690. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.json +11 -0
  691. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +7 -0
  692. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +6 -0
  693. package/schemas/plugins/optimize/MinChunkSizePlugin.json +20 -0
  694. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +7 -0
  695. package/schemas/plugins/schemes/HttpUriPlugin.check.js +6 -0
  696. package/schemas/plugins/schemes/HttpUriPlugin.json +74 -0
  697. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  698. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  699. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  700. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +7 -0
  701. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +6 -0
  702. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +120 -0
  703. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +7 -0
  704. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +6 -0
  705. package/schemas/plugins/sharing/ProvideSharedPlugin.json +94 -0
  706. package/schemas/plugins/sharing/SharePlugin.check.d.ts +7 -0
  707. package/schemas/plugins/sharing/SharePlugin.check.js +6 -0
  708. package/schemas/plugins/sharing/SharePlugin.json +133 -0
  709. package/types.d.ts +20217 -0
@@ -0,0 +1,1663 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { ImportPhaseUtils } = require("./dependencies/ImportPhase");
9
+ const { equals } = require("./util/ArrayHelpers");
10
+ const SortableSet = require("./util/SortableSet");
11
+ const makeSerializable = require("./util/makeSerializable");
12
+ const { forEachRuntime } = require("./util/runtime");
13
+
14
+ /** @typedef {import("./Dependency")} Dependency */
15
+ /** @typedef {import("./Dependency").RuntimeSpec} RuntimeSpec */
16
+ /** @typedef {import("./Dependency").ExportInfoName} ExportInfoName */
17
+ /** @typedef {import("./Dependency").ExportsSpecExcludeExports} ExportsSpecExcludeExports */
18
+ /** @typedef {import("./dependencies/HarmonyImportDependency")} HarmonyImportDependency */
19
+ /** @typedef {import("./Module")} Module */
20
+ /** @typedef {import("./ModuleGraph")} ModuleGraph */
21
+ /** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
22
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
23
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
24
+ /** @typedef {import("./util/Hash")} Hash */
25
+
26
+ /** @typedef {typeof UsageState.OnlyPropertiesUsed | typeof UsageState.NoInfo | typeof UsageState.Unknown | typeof UsageState.Used} RuntimeUsageStateType */
27
+ /** @typedef {typeof UsageState.Unused | RuntimeUsageStateType} UsageStateType */
28
+
29
+ /** @typedef {Map<string, RuntimeUsageStateType>} UsedInRuntime */
30
+ /** @typedef {{ module: Module, export: ExportInfoName[], deferred: boolean }} TargetItemWithoutConnection */
31
+ /** @typedef {{ module: Module, connection: ModuleGraphConnection, export: ExportInfoName[] | undefined }} TargetItemWithConnection */
32
+ /** @typedef {(target: TargetItemWithConnection) => boolean} ResolveTargetFilter */
33
+ /** @typedef {(module: Module) => boolean} ValidTargetModuleFilter */
34
+ /** @typedef {{ connection: ModuleGraphConnection, export: ExportInfoName[], priority: number }} TargetItem */
35
+ /** @typedef {Map<Dependency | undefined, TargetItem>} Target */
36
+
37
+ /** @typedef {string | null} ExportInfoUsedName */
38
+ /** @typedef {boolean | null} ExportInfoProvided */
39
+
40
+ /** @typedef {Map<ExportInfoName, ExportInfo>} Exports */
41
+ /** @typedef {string | string[] | false} UsedName */
42
+ /** @typedef {Set<ExportInfo>} AlreadyVisitedExportInfo */
43
+
44
+ /**
45
+ * @typedef {object} RestoreProvidedDataExports
46
+ * @property {ExportInfoName} name
47
+ * @property {ExportInfo["provided"]} provided
48
+ * @property {ExportInfo["canMangleProvide"]} canMangleProvide
49
+ * @property {ExportInfo["terminalBinding"]} terminalBinding
50
+ * @property {RestoreProvidedData | undefined} exportsInfo
51
+ */
52
+
53
+ const UsageState = Object.freeze({
54
+ Unused: /** @type {0} */ (0),
55
+ OnlyPropertiesUsed: /** @type {1} */ (1),
56
+ NoInfo: /** @type {2} */ (2),
57
+ Unknown: /** @type {3} */ (3),
58
+ Used: /** @type {4} */ (4)
59
+ });
60
+
61
+ const RETURNS_TRUE = () => true;
62
+
63
+ const CIRCULAR = Symbol("circular target");
64
+
65
+ class RestoreProvidedData {
66
+ /**
67
+ * @param {RestoreProvidedDataExports[]} exports exports
68
+ * @param {ExportInfo["provided"]} otherProvided other provided
69
+ * @param {ExportInfo["canMangleProvide"]} otherCanMangleProvide other can mangle provide
70
+ * @param {ExportInfo["terminalBinding"]} otherTerminalBinding other terminal binding
71
+ */
72
+ constructor(
73
+ exports,
74
+ otherProvided,
75
+ otherCanMangleProvide,
76
+ otherTerminalBinding
77
+ ) {
78
+ this.exports = exports;
79
+ this.otherProvided = otherProvided;
80
+ this.otherCanMangleProvide = otherCanMangleProvide;
81
+ this.otherTerminalBinding = otherTerminalBinding;
82
+ }
83
+
84
+ /**
85
+ * @param {ObjectSerializerContext} context context
86
+ */
87
+ serialize({ write }) {
88
+ write(this.exports);
89
+ write(this.otherProvided);
90
+ write(this.otherCanMangleProvide);
91
+ write(this.otherTerminalBinding);
92
+ }
93
+
94
+ /**
95
+ * @param {ObjectDeserializerContext} context context
96
+ * @returns {RestoreProvidedData} RestoreProvidedData
97
+ */
98
+ static deserialize({ read }) {
99
+ return new RestoreProvidedData(read(), read(), read(), read());
100
+ }
101
+ }
102
+
103
+ makeSerializable(
104
+ RestoreProvidedData,
105
+ "webpack/lib/ModuleGraph",
106
+ "RestoreProvidedData"
107
+ );
108
+
109
+ class ExportsInfo {
110
+ constructor() {
111
+ /** @type {Exports} */
112
+ this._exports = new Map();
113
+ /** @type {ExportInfo} */
114
+ this._otherExportsInfo = new ExportInfo(null);
115
+ /** @type {ExportInfo} */
116
+ this._sideEffectsOnlyInfo = new ExportInfo("*side effects only*");
117
+ /** @type {boolean} */
118
+ this._exportsAreOrdered = false;
119
+ /** @type {ExportsInfo=} */
120
+ this._redirectTo = undefined;
121
+ }
122
+
123
+ /**
124
+ * @returns {Iterable<ExportInfo>} all owned exports in any order
125
+ */
126
+ get ownedExports() {
127
+ return this._exports.values();
128
+ }
129
+
130
+ /**
131
+ * @returns {Iterable<ExportInfo>} all owned exports in order
132
+ */
133
+ get orderedOwnedExports() {
134
+ if (!this._exportsAreOrdered) {
135
+ this._sortExports();
136
+ }
137
+ return this._exports.values();
138
+ }
139
+
140
+ /**
141
+ * @returns {Iterable<ExportInfo>} all exports in any order
142
+ */
143
+ get exports() {
144
+ if (this._redirectTo !== undefined) {
145
+ const map = new Map(this._redirectTo._exports);
146
+ for (const [key, value] of this._exports) {
147
+ map.set(key, value);
148
+ }
149
+ return map.values();
150
+ }
151
+ return this._exports.values();
152
+ }
153
+
154
+ /**
155
+ * @returns {Iterable<ExportInfo>} all exports in order
156
+ */
157
+ get orderedExports() {
158
+ if (!this._exportsAreOrdered) {
159
+ this._sortExports();
160
+ }
161
+ if (this._redirectTo !== undefined) {
162
+ /** @type {Exports} */
163
+ const map = new Map(
164
+ Array.from(this._redirectTo.orderedExports, (item) => [item.name, item])
165
+ );
166
+ for (const [key, value] of this._exports) {
167
+ map.set(key, value);
168
+ }
169
+ // sorting should be pretty fast as map contains
170
+ // a lot of presorted items
171
+ this._sortExportsMap(map);
172
+ return map.values();
173
+ }
174
+ return this._exports.values();
175
+ }
176
+
177
+ /**
178
+ * @returns {ExportInfo} the export info of unlisted exports
179
+ */
180
+ get otherExportsInfo() {
181
+ if (this._redirectTo !== undefined) {
182
+ return this._redirectTo.otherExportsInfo;
183
+ }
184
+ return this._otherExportsInfo;
185
+ }
186
+
187
+ /**
188
+ * @param {Exports} exports exports
189
+ * @private
190
+ */
191
+ _sortExportsMap(exports) {
192
+ if (exports.size > 1) {
193
+ /** @type {ExportInfoName[]} */
194
+ const namesInOrder = [];
195
+ for (const entry of exports.values()) {
196
+ namesInOrder.push(entry.name);
197
+ }
198
+ namesInOrder.sort();
199
+ let i = 0;
200
+ for (const entry of exports.values()) {
201
+ const name = namesInOrder[i];
202
+ if (entry.name !== name) break;
203
+ i++;
204
+ }
205
+ for (; i < namesInOrder.length; i++) {
206
+ const name = namesInOrder[i];
207
+ const correctEntry = /** @type {ExportInfo} */ (exports.get(name));
208
+ exports.delete(name);
209
+ exports.set(name, correctEntry);
210
+ }
211
+ }
212
+ }
213
+
214
+ _sortExports() {
215
+ this._sortExportsMap(this._exports);
216
+ this._exportsAreOrdered = true;
217
+ }
218
+
219
+ /**
220
+ * @param {ExportsInfo | undefined} exportsInfo exports info
221
+ * @returns {boolean} result
222
+ */
223
+ setRedirectNamedTo(exportsInfo) {
224
+ if (this._redirectTo === exportsInfo) return false;
225
+ this._redirectTo = exportsInfo;
226
+ return true;
227
+ }
228
+
229
+ setHasProvideInfo() {
230
+ 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
+ }
237
+ }
238
+ if (this._redirectTo !== undefined) {
239
+ this._redirectTo.setHasProvideInfo();
240
+ } 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
+ }
247
+ }
248
+ }
249
+
250
+ setHasUseInfo() {
251
+ for (const exportInfo of this._exports.values()) {
252
+ exportInfo.setHasUseInfo();
253
+ }
254
+ this._sideEffectsOnlyInfo.setHasUseInfo();
255
+ if (this._redirectTo !== undefined) {
256
+ this._redirectTo.setHasUseInfo();
257
+ } else {
258
+ this._otherExportsInfo.setHasUseInfo();
259
+ }
260
+ }
261
+
262
+ /**
263
+ * @param {ExportInfoName} name export name
264
+ * @returns {ExportInfo} export info for this name
265
+ */
266
+ getOwnExportInfo(name) {
267
+ const info = this._exports.get(name);
268
+ if (info !== undefined) return info;
269
+ const newInfo = new ExportInfo(name, this._otherExportsInfo);
270
+ this._exports.set(name, newInfo);
271
+ this._exportsAreOrdered = false;
272
+ return newInfo;
273
+ }
274
+
275
+ /**
276
+ * @param {ExportInfoName} name export name
277
+ * @returns {ExportInfo} export info for this name
278
+ */
279
+ getExportInfo(name) {
280
+ const info = this._exports.get(name);
281
+ if (info !== undefined) return info;
282
+ if (this._redirectTo !== undefined) {
283
+ return this._redirectTo.getExportInfo(name);
284
+ }
285
+ const newInfo = new ExportInfo(name, this._otherExportsInfo);
286
+ this._exports.set(name, newInfo);
287
+ this._exportsAreOrdered = false;
288
+ return newInfo;
289
+ }
290
+
291
+ /**
292
+ * @param {ExportInfoName} name export name
293
+ * @returns {ExportInfo} export info for this name
294
+ */
295
+ getReadOnlyExportInfo(name) {
296
+ const info = this._exports.get(name);
297
+ if (info !== undefined) return info;
298
+ if (this._redirectTo !== undefined) {
299
+ return this._redirectTo.getReadOnlyExportInfo(name);
300
+ }
301
+ return this._otherExportsInfo;
302
+ }
303
+
304
+ /**
305
+ * @param {ExportInfoName[]} name export name
306
+ * @returns {ExportInfo | undefined} export info for this name
307
+ */
308
+ 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));
313
+ }
314
+
315
+ /**
316
+ * @param {ExportInfoName[]=} name the export name
317
+ * @returns {ExportsInfo | undefined} the nested exports info
318
+ */
319
+ getNestedExportsInfo(name) {
320
+ 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));
324
+ }
325
+ return this;
326
+ }
327
+
328
+ /**
329
+ * @param {boolean=} canMangle true, if exports can still be mangled (defaults to false)
330
+ * @param {ExportsSpecExcludeExports=} excludeExports list of unaffected exports
331
+ * @param {Dependency=} targetKey use this as key for the target
332
+ * @param {ModuleGraphConnection=} targetModule set this module as target
333
+ * @param {number=} priority priority
334
+ * @returns {boolean} true, if this call changed something
335
+ */
336
+ setUnknownExportsProvided(
337
+ canMangle,
338
+ excludeExports,
339
+ targetKey,
340
+ targetModule,
341
+ priority
342
+ ) {
343
+ let changed = false;
344
+ if (excludeExports) {
345
+ for (const name of excludeExports) {
346
+ // Make sure these entries exist, so they can get different info
347
+ this.getExportInfo(name);
348
+ }
349
+ }
350
+ for (const exportInfo of this._exports.values()) {
351
+ if (!canMangle && exportInfo.canMangleProvide !== false) {
352
+ exportInfo.canMangleProvide = false;
353
+ changed = true;
354
+ }
355
+ if (excludeExports && excludeExports.has(exportInfo.name)) continue;
356
+ if (exportInfo.provided !== true && exportInfo.provided !== null) {
357
+ exportInfo.provided = null;
358
+ changed = true;
359
+ }
360
+ if (targetKey) {
361
+ exportInfo.setTarget(
362
+ targetKey,
363
+ /** @type {ModuleGraphConnection} */
364
+ (targetModule),
365
+ [exportInfo.name],
366
+ -1
367
+ );
368
+ }
369
+ }
370
+ if (this._redirectTo !== undefined) {
371
+ if (
372
+ this._redirectTo.setUnknownExportsProvided(
373
+ canMangle,
374
+ excludeExports,
375
+ targetKey,
376
+ targetModule,
377
+ priority
378
+ )
379
+ ) {
380
+ changed = true;
381
+ }
382
+ } else {
383
+ if (
384
+ this._otherExportsInfo.provided !== true &&
385
+ this._otherExportsInfo.provided !== null
386
+ ) {
387
+ this._otherExportsInfo.provided = null;
388
+ changed = true;
389
+ }
390
+ if (!canMangle && this._otherExportsInfo.canMangleProvide !== false) {
391
+ this._otherExportsInfo.canMangleProvide = false;
392
+ changed = true;
393
+ }
394
+ if (targetKey) {
395
+ this._otherExportsInfo.setTarget(
396
+ targetKey,
397
+ /** @type {ModuleGraphConnection} */ (targetModule),
398
+ undefined,
399
+ priority
400
+ );
401
+ }
402
+ }
403
+ return changed;
404
+ }
405
+
406
+ /**
407
+ * @param {RuntimeSpec} runtime the runtime
408
+ * @returns {boolean} true, when something changed
409
+ */
410
+ setUsedInUnknownWay(runtime) {
411
+ let changed = false;
412
+ for (const exportInfo of this._exports.values()) {
413
+ if (exportInfo.setUsedInUnknownWay(runtime)) {
414
+ changed = true;
415
+ }
416
+ }
417
+ if (this._redirectTo !== undefined) {
418
+ if (this._redirectTo.setUsedInUnknownWay(runtime)) {
419
+ changed = true;
420
+ }
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
+ }
435
+ }
436
+ return changed;
437
+ }
438
+
439
+ /**
440
+ * @param {RuntimeSpec} runtime the runtime
441
+ * @returns {boolean} true, when something changed
442
+ */
443
+ setUsedWithoutInfo(runtime) {
444
+ let changed = false;
445
+ for (const exportInfo of this._exports.values()) {
446
+ if (exportInfo.setUsedWithoutInfo(runtime)) {
447
+ changed = true;
448
+ }
449
+ }
450
+ if (this._redirectTo !== undefined) {
451
+ if (this._redirectTo.setUsedWithoutInfo(runtime)) {
452
+ changed = true;
453
+ }
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
+ }
462
+ }
463
+ return changed;
464
+ }
465
+
466
+ /**
467
+ * @param {RuntimeSpec} runtime the runtime
468
+ * @returns {boolean} true, when something changed
469
+ */
470
+ setAllKnownExportsUsed(runtime) {
471
+ let changed = false;
472
+ for (const exportInfo of this._exports.values()) {
473
+ if (!exportInfo.provided) continue;
474
+ if (exportInfo.setUsed(UsageState.Used, runtime)) {
475
+ changed = true;
476
+ }
477
+ }
478
+ return changed;
479
+ }
480
+
481
+ /**
482
+ * @param {RuntimeSpec} runtime the runtime
483
+ * @returns {boolean} true, when something changed
484
+ */
485
+ setUsedForSideEffectsOnly(runtime) {
486
+ return this._sideEffectsOnlyInfo.setUsedConditionally(
487
+ (used) => used === UsageState.Unused,
488
+ UsageState.Used,
489
+ runtime
490
+ );
491
+ }
492
+
493
+ /**
494
+ * @param {RuntimeSpec} runtime the runtime
495
+ * @returns {boolean} true, when the module exports are used in any way
496
+ */
497
+ isUsed(runtime) {
498
+ if (this._redirectTo !== undefined) {
499
+ if (this._redirectTo.isUsed(runtime)) {
500
+ return true;
501
+ }
502
+ } else if (this._otherExportsInfo.getUsed(runtime) !== UsageState.Unused) {
503
+ return true;
504
+ }
505
+ for (const exportInfo of this._exports.values()) {
506
+ if (exportInfo.getUsed(runtime) !== UsageState.Unused) {
507
+ return true;
508
+ }
509
+ }
510
+ return false;
511
+ }
512
+
513
+ /**
514
+ * @param {RuntimeSpec} runtime the runtime
515
+ * @returns {boolean} true, when the module is used in any way
516
+ */
517
+ isModuleUsed(runtime) {
518
+ if (this.isUsed(runtime)) return true;
519
+ if (this._sideEffectsOnlyInfo.getUsed(runtime) !== UsageState.Unused) {
520
+ return true;
521
+ }
522
+ return false;
523
+ }
524
+
525
+ /**
526
+ * @param {RuntimeSpec} runtime the runtime
527
+ * @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
+ */
529
+ getUsedExports(runtime) {
530
+ switch (this._otherExportsInfo.getUsed(runtime)) {
531
+ case UsageState.NoInfo:
532
+ return null;
533
+ case UsageState.Unknown:
534
+ case UsageState.OnlyPropertiesUsed:
535
+ case UsageState.Used:
536
+ return true;
537
+ }
538
+
539
+ /** @type {ExportInfoName[]} */
540
+ const array = [];
541
+ if (!this._exportsAreOrdered) this._sortExports();
542
+ for (const exportInfo of this._exports.values()) {
543
+ switch (exportInfo.getUsed(runtime)) {
544
+ case UsageState.NoInfo:
545
+ return null;
546
+ case UsageState.Unknown:
547
+ return true;
548
+ case UsageState.OnlyPropertiesUsed:
549
+ case UsageState.Used:
550
+ array.push(exportInfo.name);
551
+ }
552
+ }
553
+ if (this._redirectTo !== undefined) {
554
+ const inner = this._redirectTo.getUsedExports(runtime);
555
+ if (inner === null) return null;
556
+ if (inner === true) return true;
557
+ if (inner !== false) {
558
+ for (const item of inner) {
559
+ array.push(item);
560
+ }
561
+ }
562
+ }
563
+ if (array.length === 0) {
564
+ switch (this._sideEffectsOnlyInfo.getUsed(runtime)) {
565
+ case UsageState.NoInfo:
566
+ return null;
567
+ case UsageState.Unused:
568
+ return false;
569
+ }
570
+ }
571
+ return /** @type {SortableSet<ExportInfoName>} */ (new SortableSet(array));
572
+ }
573
+
574
+ /**
575
+ * @returns {null | true | ExportInfoName[]} list of exports when known
576
+ */
577
+ getProvidedExports() {
578
+ switch (this._otherExportsInfo.provided) {
579
+ case undefined:
580
+ return null;
581
+ case null:
582
+ return true;
583
+ case true:
584
+ return true;
585
+ }
586
+
587
+ /** @type {ExportInfoName[]} */
588
+ const array = [];
589
+ if (!this._exportsAreOrdered) this._sortExports();
590
+ for (const exportInfo of this._exports.values()) {
591
+ switch (exportInfo.provided) {
592
+ case undefined:
593
+ return null;
594
+ case null:
595
+ return true;
596
+ case true:
597
+ array.push(exportInfo.name);
598
+ }
599
+ }
600
+ if (this._redirectTo !== undefined) {
601
+ const inner = this._redirectTo.getProvidedExports();
602
+ if (inner === null) return null;
603
+ if (inner === true) return true;
604
+ for (const item of inner) {
605
+ if (!array.includes(item)) {
606
+ array.push(item);
607
+ }
608
+ }
609
+ }
610
+ return array;
611
+ }
612
+
613
+ /**
614
+ * @param {RuntimeSpec} runtime the runtime
615
+ * @returns {ExportInfo[]} exports that are relevant (not unused and potential provided)
616
+ */
617
+ getRelevantExports(runtime) {
618
+ /** @type {ExportInfo[]} */
619
+ const list = [];
620
+ for (const exportInfo of this._exports.values()) {
621
+ const used = exportInfo.getUsed(runtime);
622
+ if (used === UsageState.Unused) continue;
623
+ if (exportInfo.provided === false) continue;
624
+ list.push(exportInfo);
625
+ }
626
+ if (this._redirectTo !== undefined) {
627
+ for (const exportInfo of this._redirectTo.getRelevantExports(runtime)) {
628
+ if (!this._exports.has(exportInfo.name)) list.push(exportInfo);
629
+ }
630
+ }
631
+ if (
632
+ this._otherExportsInfo.provided !== false &&
633
+ this._otherExportsInfo.getUsed(runtime) !== UsageState.Unused
634
+ ) {
635
+ list.push(this._otherExportsInfo);
636
+ }
637
+ return list;
638
+ }
639
+
640
+ /**
641
+ * @param {ExportInfoName | ExportInfoName[]} name the name of the export
642
+ * @returns {boolean | undefined | null} if the export is provided
643
+ */
644
+ isExportProvided(name) {
645
+ 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));
649
+ }
650
+ return info.provided ? name.length === 1 || undefined : info.provided;
651
+ }
652
+ const info = this.getReadOnlyExportInfo(name);
653
+ return info.provided;
654
+ }
655
+
656
+ /**
657
+ * @param {RuntimeSpec} runtime runtime
658
+ * @returns {string} key representing the usage
659
+ */
660
+ getUsageKey(runtime) {
661
+ /** @type {(string | number)[]} */
662
+ const key = [];
663
+ if (this._redirectTo !== undefined) {
664
+ key.push(this._redirectTo.getUsageKey(runtime));
665
+ } else {
666
+ key.push(this._otherExportsInfo.getUsed(runtime));
667
+ }
668
+ key.push(this._sideEffectsOnlyInfo.getUsed(runtime));
669
+ for (const exportInfo of this.orderedOwnedExports) {
670
+ key.push(exportInfo.getUsed(runtime));
671
+ }
672
+ return key.join("|");
673
+ }
674
+
675
+ /**
676
+ * @param {RuntimeSpec} runtimeA first runtime
677
+ * @param {RuntimeSpec} runtimeB second runtime
678
+ * @returns {boolean} true, when equally used
679
+ */
680
+ isEquallyUsed(runtimeA, runtimeB) {
681
+ if (this._redirectTo !== undefined) {
682
+ if (!this._redirectTo.isEquallyUsed(runtimeA, runtimeB)) return false;
683
+ } else if (
684
+ this._otherExportsInfo.getUsed(runtimeA) !==
685
+ this._otherExportsInfo.getUsed(runtimeB)
686
+ ) {
687
+ return false;
688
+ }
689
+ if (
690
+ this._sideEffectsOnlyInfo.getUsed(runtimeA) !==
691
+ this._sideEffectsOnlyInfo.getUsed(runtimeB)
692
+ ) {
693
+ return false;
694
+ }
695
+ for (const exportInfo of this.ownedExports) {
696
+ if (exportInfo.getUsed(runtimeA) !== exportInfo.getUsed(runtimeB)) {
697
+ return false;
698
+ }
699
+ }
700
+ return true;
701
+ }
702
+
703
+ /**
704
+ * @param {ExportInfoName | ExportInfoName[]} name export name
705
+ * @param {RuntimeSpec} runtime check usage for this runtime only
706
+ * @returns {UsageStateType} usage status
707
+ */
708
+ getUsed(name, runtime) {
709
+ if (Array.isArray(name)) {
710
+ 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);
714
+ }
715
+ return info.getUsed(runtime);
716
+ }
717
+ const info = this.getReadOnlyExportInfo(name);
718
+ return info.getUsed(runtime);
719
+ }
720
+
721
+ /**
722
+ * @param {ExportInfoName | ExportInfoName[]} name the export name
723
+ * @param {RuntimeSpec} runtime check usage for this runtime only
724
+ * @returns {UsedName} the used name
725
+ */
726
+ getUsedName(name, runtime) {
727
+ if (Array.isArray(name)) {
728
+ // TODO improve this
729
+ if (name.length === 0) {
730
+ if (!this.isUsed(runtime)) return false;
731
+ return name;
732
+ }
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;
741
+ }
742
+ if (
743
+ info.exportsInfo &&
744
+ info.getUsed(runtime) === UsageState.OnlyPropertiesUsed
745
+ ) {
746
+ const nested = info.exportsInfo.getUsedName(name.slice(1), runtime);
747
+ if (!nested) return false;
748
+ return [...arr, ...(Array.isArray(nested) ? nested : [nested])];
749
+ }
750
+ return [...arr, ...name.slice(1)];
751
+ }
752
+ const info = this.getReadOnlyExportInfo(name);
753
+ const usedName = info.getUsedName(name, runtime);
754
+ return usedName;
755
+ }
756
+
757
+ /**
758
+ * @param {Hash} hash the hash
759
+ * @param {RuntimeSpec} runtime the runtime
760
+ * @returns {void}
761
+ */
762
+ updateHash(hash, runtime) {
763
+ this._updateHash(hash, runtime, new Set());
764
+ }
765
+
766
+ /**
767
+ * @param {Hash} hash the hash
768
+ * @param {RuntimeSpec} runtime the runtime
769
+ * @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
770
+ * @returns {void}
771
+ */
772
+ _updateHash(hash, runtime, alreadyVisitedExportsInfo) {
773
+ const set = new Set(alreadyVisitedExportsInfo);
774
+ set.add(this);
775
+ for (const exportInfo of this.orderedExports) {
776
+ if (exportInfo.hasInfo(this._otherExportsInfo, runtime)) {
777
+ exportInfo._updateHash(hash, runtime, set);
778
+ }
779
+ }
780
+ this._sideEffectsOnlyInfo._updateHash(hash, runtime, set);
781
+ this._otherExportsInfo._updateHash(hash, runtime, set);
782
+ if (this._redirectTo !== undefined) {
783
+ this._redirectTo._updateHash(hash, runtime, set);
784
+ }
785
+ }
786
+
787
+ /**
788
+ * @returns {RestoreProvidedData} restore provided data
789
+ */
790
+ getRestoreProvidedData() {
791
+ const otherProvided = this._otherExportsInfo.provided;
792
+ const otherCanMangleProvide = this._otherExportsInfo.canMangleProvide;
793
+ const otherTerminalBinding = this._otherExportsInfo.terminalBinding;
794
+ /** @type {RestoreProvidedDataExports[]} */
795
+ const exports = [];
796
+ for (const exportInfo of this.orderedExports) {
797
+ if (
798
+ exportInfo.provided !== otherProvided ||
799
+ exportInfo.canMangleProvide !== otherCanMangleProvide ||
800
+ exportInfo.terminalBinding !== otherTerminalBinding ||
801
+ exportInfo.exportsInfoOwned
802
+ ) {
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
+ });
813
+ }
814
+ }
815
+ return new RestoreProvidedData(
816
+ exports,
817
+ otherProvided,
818
+ otherCanMangleProvide,
819
+ otherTerminalBinding
820
+ );
821
+ }
822
+
823
+ /**
824
+ * @param {RestoreProvidedData} data data
825
+ */
826
+ restoreProvided({
827
+ otherProvided,
828
+ otherCanMangleProvide,
829
+ otherTerminalBinding,
830
+ exports
831
+ }) {
832
+ let wasEmpty = true;
833
+ for (const exportInfo of this._exports.values()) {
834
+ wasEmpty = false;
835
+ exportInfo.provided = otherProvided;
836
+ exportInfo.canMangleProvide = otherCanMangleProvide;
837
+ exportInfo.terminalBinding = otherTerminalBinding;
838
+ }
839
+ this._otherExportsInfo.provided = otherProvided;
840
+ this._otherExportsInfo.canMangleProvide = otherCanMangleProvide;
841
+ this._otherExportsInfo.terminalBinding = otherTerminalBinding;
842
+ for (const exp of exports) {
843
+ const exportInfo = this.getExportInfo(exp.name);
844
+ exportInfo.provided = exp.provided;
845
+ exportInfo.canMangleProvide = exp.canMangleProvide;
846
+ exportInfo.terminalBinding = exp.terminalBinding;
847
+ if (exp.exportsInfo) {
848
+ const exportsInfo = exportInfo.createNestedExportsInfo();
849
+ exportsInfo.restoreProvided(exp.exportsInfo);
850
+ }
851
+ }
852
+ if (wasEmpty) this._exportsAreOrdered = true;
853
+ }
854
+ }
855
+
856
+ class ExportInfo {
857
+ /**
858
+ * @param {ExportInfoName | null} name the original name of the export
859
+ * @param {ExportInfo=} initFrom init values from this ExportInfo
860
+ */
861
+ constructor(name, initFrom) {
862
+ /** @type {ExportInfoName} */
863
+ this.name = /** @type {ExportInfoName} */ (name);
864
+ /**
865
+ * @private
866
+ * @type {ExportInfoUsedName}
867
+ */
868
+ this._usedName = initFrom ? initFrom._usedName : null;
869
+ /**
870
+ * @private
871
+ * @type {UsageStateType | undefined}
872
+ */
873
+ this._globalUsed = initFrom ? initFrom._globalUsed : undefined;
874
+ /**
875
+ * @private
876
+ * @type {UsedInRuntime | undefined}
877
+ */
878
+ this._usedInRuntime =
879
+ initFrom && initFrom._usedInRuntime
880
+ ? new Map(initFrom._usedInRuntime)
881
+ : undefined;
882
+ /**
883
+ * @private
884
+ * @type {boolean}
885
+ */
886
+ this._hasUseInRuntimeInfo = initFrom
887
+ ? initFrom._hasUseInRuntimeInfo
888
+ : false;
889
+ /**
890
+ * true: it is provided
891
+ * false: it is not provided
892
+ * null: only the runtime knows if it is provided
893
+ * undefined: it was not determined if it is provided
894
+ * @type {ExportInfoProvided | undefined}
895
+ */
896
+ this.provided = initFrom ? initFrom.provided : undefined;
897
+ /**
898
+ * is the export a terminal binding that should be checked for export star conflicts
899
+ * @type {boolean}
900
+ */
901
+ this.terminalBinding = initFrom ? initFrom.terminalBinding : false;
902
+ /**
903
+ * true: it can be mangled
904
+ * false: is can not be mangled
905
+ * undefined: it was not determined if it can be mangled
906
+ * @type {boolean | undefined}
907
+ */
908
+ this.canMangleProvide = initFrom ? initFrom.canMangleProvide : undefined;
909
+ /**
910
+ * true: it can be mangled
911
+ * false: is can not be mangled
912
+ * undefined: it was not determined if it can be mangled
913
+ * @type {boolean | undefined}
914
+ */
915
+ this.canMangleUse = initFrom ? initFrom.canMangleUse : undefined;
916
+ /** @type {boolean} */
917
+ this.exportsInfoOwned = false;
918
+ /** @type {ExportsInfo | undefined} */
919
+ this.exportsInfo = undefined;
920
+ /** @type {Target | undefined} */
921
+ this._target = undefined;
922
+ if (initFrom && initFrom._target) {
923
+ this._target = /** @type {Target} */ (new Map());
924
+ for (const [key, value] of initFrom._target) {
925
+ this._target.set(key, {
926
+ connection: value.connection,
927
+ export: value.export || [name],
928
+ priority: value.priority
929
+ });
930
+ }
931
+ }
932
+ /** @type {Target | undefined} */
933
+ this._maxTarget = undefined;
934
+ }
935
+
936
+ get canMangle() {
937
+ switch (this.canMangleProvide) {
938
+ case undefined:
939
+ return this.canMangleUse === false ? false : undefined;
940
+ case false:
941
+ return false;
942
+ case true:
943
+ switch (this.canMangleUse) {
944
+ case undefined:
945
+ return undefined;
946
+ case false:
947
+ return false;
948
+ case true:
949
+ return true;
950
+ }
951
+ }
952
+ throw new Error(
953
+ `Unexpected flags for canMangle ${this.canMangleProvide} ${this.canMangleUse}`
954
+ );
955
+ }
956
+
957
+ /**
958
+ * @param {RuntimeSpec} runtime only apply to this runtime
959
+ * @returns {boolean} true, when something changed
960
+ */
961
+ setUsedInUnknownWay(runtime) {
962
+ let changed = false;
963
+ if (
964
+ this.setUsedConditionally(
965
+ (used) => used < UsageState.Unknown,
966
+ UsageState.Unknown,
967
+ runtime
968
+ )
969
+ ) {
970
+ changed = true;
971
+ }
972
+ if (this.canMangleUse !== false) {
973
+ this.canMangleUse = false;
974
+ changed = true;
975
+ }
976
+ return changed;
977
+ }
978
+
979
+ /**
980
+ * @param {RuntimeSpec} runtime only apply to this runtime
981
+ * @returns {boolean} true, when something changed
982
+ */
983
+ setUsedWithoutInfo(runtime) {
984
+ let changed = false;
985
+ if (this.setUsed(UsageState.NoInfo, runtime)) {
986
+ changed = true;
987
+ }
988
+ if (this.canMangleUse !== false) {
989
+ this.canMangleUse = false;
990
+ changed = true;
991
+ }
992
+ return changed;
993
+ }
994
+
995
+ setHasUseInfo() {
996
+ if (!this._hasUseInRuntimeInfo) {
997
+ this._hasUseInRuntimeInfo = true;
998
+ }
999
+ if (this.canMangleUse === undefined) {
1000
+ this.canMangleUse = true;
1001
+ }
1002
+ if (this.exportsInfoOwned) {
1003
+ /** @type {ExportsInfo} */
1004
+ (this.exportsInfo).setHasUseInfo();
1005
+ }
1006
+ }
1007
+
1008
+ /**
1009
+ * @param {(condition: UsageStateType) => boolean} condition compare with old value
1010
+ * @param {UsageStateType} newValue set when condition is true
1011
+ * @param {RuntimeSpec} runtime only apply to this runtime
1012
+ * @returns {boolean} true when something has changed
1013
+ */
1014
+ setUsedConditionally(condition, newValue, runtime) {
1015
+ if (runtime === undefined) {
1016
+ if (this._globalUsed === undefined) {
1017
+ this._globalUsed = newValue;
1018
+ return true;
1019
+ }
1020
+ if (this._globalUsed !== newValue && condition(this._globalUsed)) {
1021
+ this._globalUsed = newValue;
1022
+ return true;
1023
+ }
1024
+ } else if (this._usedInRuntime === undefined) {
1025
+ if (newValue !== UsageState.Unused && condition(UsageState.Unused)) {
1026
+ this._usedInRuntime = new Map();
1027
+ forEachRuntime(runtime, (runtime) =>
1028
+ /** @type {UsedInRuntime} */
1029
+ (this._usedInRuntime).set(/** @type {string} */ (runtime), newValue)
1030
+ );
1031
+ return true;
1032
+ }
1033
+ } else {
1034
+ let changed = false;
1035
+ forEachRuntime(runtime, (runtime_) => {
1036
+ const runtime = /** @type {string} */ (runtime_);
1037
+ const usedInRuntime =
1038
+ /** @type {UsedInRuntime} */
1039
+ (this._usedInRuntime);
1040
+ let oldValue =
1041
+ /** @type {UsageStateType} */
1042
+ (usedInRuntime.get(runtime));
1043
+ if (oldValue === undefined) oldValue = UsageState.Unused;
1044
+ if (newValue !== oldValue && condition(oldValue)) {
1045
+ if (newValue === UsageState.Unused) {
1046
+ usedInRuntime.delete(runtime);
1047
+ } else {
1048
+ usedInRuntime.set(runtime, newValue);
1049
+ }
1050
+ changed = true;
1051
+ }
1052
+ });
1053
+ if (changed) {
1054
+ if (this._usedInRuntime.size === 0) this._usedInRuntime = undefined;
1055
+ return true;
1056
+ }
1057
+ }
1058
+ return false;
1059
+ }
1060
+
1061
+ /**
1062
+ * @param {UsageStateType} newValue new value of the used state
1063
+ * @param {RuntimeSpec} runtime only apply to this runtime
1064
+ * @returns {boolean} true when something has changed
1065
+ */
1066
+ setUsed(newValue, runtime) {
1067
+ if (runtime === undefined) {
1068
+ if (this._globalUsed !== newValue) {
1069
+ this._globalUsed = newValue;
1070
+ return true;
1071
+ }
1072
+ } else if (this._usedInRuntime === undefined) {
1073
+ if (newValue !== UsageState.Unused) {
1074
+ this._usedInRuntime = new Map();
1075
+ forEachRuntime(runtime, (runtime) =>
1076
+ /** @type {UsedInRuntime} */
1077
+ (this._usedInRuntime).set(/** @type {string} */ (runtime), newValue)
1078
+ );
1079
+ return true;
1080
+ }
1081
+ } else {
1082
+ let changed = false;
1083
+ forEachRuntime(runtime, (_runtime) => {
1084
+ const runtime = /** @type {string} */ (_runtime);
1085
+ const usedInRuntime =
1086
+ /** @type {UsedInRuntime} */
1087
+ (this._usedInRuntime);
1088
+ let oldValue =
1089
+ /** @type {UsageStateType} */
1090
+ (usedInRuntime.get(runtime));
1091
+ if (oldValue === undefined) oldValue = UsageState.Unused;
1092
+ if (newValue !== oldValue) {
1093
+ if (newValue === UsageState.Unused) {
1094
+ usedInRuntime.delete(runtime);
1095
+ } else {
1096
+ usedInRuntime.set(runtime, newValue);
1097
+ }
1098
+ changed = true;
1099
+ }
1100
+ });
1101
+ if (changed) {
1102
+ if (this._usedInRuntime.size === 0) this._usedInRuntime = undefined;
1103
+ return true;
1104
+ }
1105
+ }
1106
+ return false;
1107
+ }
1108
+
1109
+ /**
1110
+ * @param {Dependency} key the key
1111
+ * @returns {boolean} true, if something has changed
1112
+ */
1113
+ unsetTarget(key) {
1114
+ if (!this._target) return false;
1115
+ if (this._target.delete(key)) {
1116
+ this._maxTarget = undefined;
1117
+ return true;
1118
+ }
1119
+ return false;
1120
+ }
1121
+
1122
+ /**
1123
+ * @param {Dependency} key the key
1124
+ * @param {ModuleGraphConnection} connection the target module if a single one
1125
+ * @param {ExportInfoName[] | null=} exportName the exported name
1126
+ * @param {number=} priority priority
1127
+ * @returns {boolean} true, if something has changed
1128
+ */
1129
+ setTarget(key, connection, exportName, priority = 0) {
1130
+ if (exportName) exportName = [...exportName];
1131
+ if (!this._target) {
1132
+ this._target = /** @type {Target} */ (new Map());
1133
+ this._target.set(key, {
1134
+ connection,
1135
+ export: /** @type {ExportInfoName[]} */ (exportName),
1136
+ priority
1137
+ });
1138
+ return true;
1139
+ }
1140
+ const oldTarget = this._target.get(key);
1141
+ if (!oldTarget) {
1142
+ if (oldTarget === null && !connection) return false;
1143
+ this._target.set(key, {
1144
+ connection,
1145
+ export: /** @type {ExportInfoName[]} */ (exportName),
1146
+ priority
1147
+ });
1148
+ this._maxTarget = undefined;
1149
+ return true;
1150
+ }
1151
+ if (
1152
+ oldTarget.connection !== connection ||
1153
+ oldTarget.priority !== priority ||
1154
+ (exportName
1155
+ ? !oldTarget.export || !equals(oldTarget.export, exportName)
1156
+ : oldTarget.export)
1157
+ ) {
1158
+ oldTarget.connection = connection;
1159
+ oldTarget.export = /** @type {ExportInfoName[]} */ (exportName);
1160
+ oldTarget.priority = priority;
1161
+ this._maxTarget = undefined;
1162
+ return true;
1163
+ }
1164
+ return false;
1165
+ }
1166
+
1167
+ /**
1168
+ * @param {RuntimeSpec} runtime for this runtime
1169
+ * @returns {UsageStateType} usage state
1170
+ */
1171
+ getUsed(runtime) {
1172
+ if (!this._hasUseInRuntimeInfo) return UsageState.NoInfo;
1173
+ if (this._globalUsed !== undefined) return this._globalUsed;
1174
+ if (this._usedInRuntime === undefined) {
1175
+ return UsageState.Unused;
1176
+ } else if (typeof runtime === "string") {
1177
+ const value = this._usedInRuntime.get(runtime);
1178
+ return value === undefined ? UsageState.Unused : value;
1179
+ } else if (runtime === undefined) {
1180
+ /** @type {UsageStateType} */
1181
+ let max = UsageState.Unused;
1182
+ for (const value of this._usedInRuntime.values()) {
1183
+ if (value === UsageState.Used) {
1184
+ return UsageState.Used;
1185
+ }
1186
+ if (max < value) max = value;
1187
+ }
1188
+ return max;
1189
+ }
1190
+
1191
+ /** @type {UsageStateType} */
1192
+ let max = UsageState.Unused;
1193
+ for (const item of runtime) {
1194
+ const value = this._usedInRuntime.get(item);
1195
+ if (value !== undefined) {
1196
+ if (value === UsageState.Used) {
1197
+ return UsageState.Used;
1198
+ }
1199
+ if (max < value) max = value;
1200
+ }
1201
+ }
1202
+ return max;
1203
+ }
1204
+
1205
+ /**
1206
+ * get used name
1207
+ * @param {string | undefined} fallbackName fallback name for used exports with no name
1208
+ * @param {RuntimeSpec} runtime check usage for this runtime only
1209
+ * @returns {string | false} used name
1210
+ */
1211
+ getUsedName(fallbackName, runtime) {
1212
+ if (this._hasUseInRuntimeInfo) {
1213
+ if (this._globalUsed !== undefined) {
1214
+ if (this._globalUsed === UsageState.Unused) return false;
1215
+ } else {
1216
+ if (this._usedInRuntime === undefined) return false;
1217
+ if (typeof runtime === "string") {
1218
+ if (!this._usedInRuntime.has(runtime)) {
1219
+ return false;
1220
+ }
1221
+ } else if (
1222
+ runtime !== undefined &&
1223
+ [...runtime].every(
1224
+ (runtime) =>
1225
+ !(/** @type {UsedInRuntime} */ (this._usedInRuntime).has(runtime))
1226
+ )
1227
+ ) {
1228
+ return false;
1229
+ }
1230
+ }
1231
+ }
1232
+ if (this._usedName !== null) return this._usedName;
1233
+ return /** @type {string | false} */ (this.name || fallbackName);
1234
+ }
1235
+
1236
+ /**
1237
+ * @returns {boolean} true, when a mangled name of this export is set
1238
+ */
1239
+ hasUsedName() {
1240
+ return this._usedName !== null;
1241
+ }
1242
+
1243
+ /**
1244
+ * Sets the mangled name of this export
1245
+ * @param {string} name the new name
1246
+ * @returns {void}
1247
+ */
1248
+ setUsedName(name) {
1249
+ this._usedName = name;
1250
+ }
1251
+
1252
+ /**
1253
+ * @param {ModuleGraph} moduleGraph the module graph
1254
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1255
+ * @returns {ExportInfo | ExportsInfo | undefined} the terminal binding export(s) info if known
1256
+ */
1257
+ getTerminalBinding(moduleGraph, resolveTargetFilter = RETURNS_TRUE) {
1258
+ if (this.terminalBinding) return this;
1259
+ const target = this.getTarget(moduleGraph, resolveTargetFilter);
1260
+ if (!target) return;
1261
+ const exportsInfo = moduleGraph.getExportsInfo(target.module);
1262
+ if (!target.export) return exportsInfo;
1263
+ return exportsInfo.getReadOnlyExportInfoRecursive(target.export);
1264
+ }
1265
+
1266
+ isReexport() {
1267
+ return !this.terminalBinding && this._target && this._target.size > 0;
1268
+ }
1269
+
1270
+ _getMaxTarget() {
1271
+ if (this._maxTarget !== undefined) return this._maxTarget;
1272
+ if (/** @type {Target} */ (this._target).size <= 1) {
1273
+ return (this._maxTarget = this._target);
1274
+ }
1275
+ let maxPriority = -Infinity;
1276
+ let minPriority = Infinity;
1277
+ for (const { priority } of /** @type {Target} */ (this._target).values()) {
1278
+ if (maxPriority < priority) maxPriority = priority;
1279
+ if (minPriority > priority) minPriority = priority;
1280
+ }
1281
+ // This should be very common
1282
+ if (maxPriority === minPriority) return (this._maxTarget = this._target);
1283
+
1284
+ // This is an edge case
1285
+ /** @type {Target} */
1286
+ const map = new Map();
1287
+ for (const [key, value] of /** @type {Target} */ (this._target)) {
1288
+ if (maxPriority === value.priority) {
1289
+ map.set(key, value);
1290
+ }
1291
+ }
1292
+ this._maxTarget = map;
1293
+ return map;
1294
+ }
1295
+
1296
+ /**
1297
+ * @param {ModuleGraph} moduleGraph the module graph
1298
+ * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1299
+ * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
1300
+ */
1301
+ findTarget(moduleGraph, validTargetModuleFilter) {
1302
+ return this._findTarget(moduleGraph, validTargetModuleFilter, new Set());
1303
+ }
1304
+
1305
+ /**
1306
+ * @param {ModuleGraph} moduleGraph the module graph
1307
+ * @param {ValidTargetModuleFilter} validTargetModuleFilter a valid target module
1308
+ * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
1309
+ * @returns {TargetItemWithoutConnection | null | undefined | false} the target, undefined when there is no target, false when no target is valid
1310
+ */
1311
+ _findTarget(moduleGraph, validTargetModuleFilter, alreadyVisited) {
1312
+ if (!this._target || this._target.size === 0) return;
1313
+ const rawTarget =
1314
+ /** @type {Target} */
1315
+ (this._getMaxTarget()).values().next().value;
1316
+ if (!rawTarget) return;
1317
+ /** @type {TargetItemWithoutConnection} */
1318
+ let target = {
1319
+ module: rawTarget.connection.module,
1320
+ export: rawTarget.export,
1321
+ deferred: Boolean(
1322
+ rawTarget.connection.dependency &&
1323
+ ImportPhaseUtils.isDefer(
1324
+ /** @type {HarmonyImportDependency} */ (
1325
+ rawTarget.connection.dependency
1326
+ ).phase
1327
+ )
1328
+ )
1329
+ };
1330
+ for (;;) {
1331
+ if (validTargetModuleFilter(target.module)) return target;
1332
+ const exportsInfo = moduleGraph.getExportsInfo(target.module);
1333
+ const exportInfo = exportsInfo.getExportInfo(target.export[0]);
1334
+ if (alreadyVisited.has(exportInfo)) return null;
1335
+ const newTarget = exportInfo._findTarget(
1336
+ moduleGraph,
1337
+ validTargetModuleFilter,
1338
+ alreadyVisited
1339
+ );
1340
+ if (!newTarget) return false;
1341
+ if (target.export.length === 1) {
1342
+ target = newTarget;
1343
+ } else {
1344
+ target = {
1345
+ module: newTarget.module,
1346
+ export: newTarget.export
1347
+ ? [...newTarget.export, ...target.export.slice(1)]
1348
+ : target.export.slice(1),
1349
+ deferred: newTarget.deferred
1350
+ };
1351
+ }
1352
+ }
1353
+ }
1354
+
1355
+ /**
1356
+ * @param {ModuleGraph} moduleGraph the module graph
1357
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1358
+ * @returns {TargetItemWithConnection | undefined} the target
1359
+ */
1360
+ getTarget(moduleGraph, resolveTargetFilter = RETURNS_TRUE) {
1361
+ const result = this._getTarget(moduleGraph, resolveTargetFilter, undefined);
1362
+ if (result === CIRCULAR) return;
1363
+ return result;
1364
+ }
1365
+
1366
+ /**
1367
+ * @param {ModuleGraph} moduleGraph the module graph
1368
+ * @param {ResolveTargetFilter} resolveTargetFilter filter function to further resolve target
1369
+ * @param {AlreadyVisitedExportInfo | undefined} alreadyVisited set of already visited export info to avoid circular references
1370
+ * @returns {TargetItemWithConnection | CIRCULAR | undefined} the target
1371
+ */
1372
+ _getTarget(moduleGraph, resolveTargetFilter, alreadyVisited) {
1373
+ /**
1374
+ * @param {TargetItem | undefined | null} inputTarget unresolved target
1375
+ * @param {AlreadyVisitedExportInfo} alreadyVisited set of already visited export info to avoid circular references
1376
+ * @returns {TargetItemWithConnection | CIRCULAR | null} resolved target
1377
+ */
1378
+ const resolveTarget = (inputTarget, alreadyVisited) => {
1379
+ if (!inputTarget) return null;
1380
+ if (!inputTarget.export) {
1381
+ return {
1382
+ module: inputTarget.connection.module,
1383
+ connection: inputTarget.connection,
1384
+ export: undefined
1385
+ };
1386
+ }
1387
+ /** @type {TargetItemWithConnection} */
1388
+ let target = {
1389
+ module: inputTarget.connection.module,
1390
+ connection: inputTarget.connection,
1391
+ export: inputTarget.export
1392
+ };
1393
+ if (!resolveTargetFilter(target)) return target;
1394
+ let alreadyVisitedOwned = false;
1395
+ for (;;) {
1396
+ const exportsInfo = moduleGraph.getExportsInfo(target.module);
1397
+ const exportInfo = exportsInfo.getExportInfo(
1398
+ /** @type {NonNullable<TargetItemWithConnection["export"]>} */
1399
+ (target.export)[0]
1400
+ );
1401
+ if (!exportInfo) return target;
1402
+ if (alreadyVisited.has(exportInfo)) return CIRCULAR;
1403
+ const newTarget = exportInfo._getTarget(
1404
+ moduleGraph,
1405
+ resolveTargetFilter,
1406
+ alreadyVisited
1407
+ );
1408
+ if (newTarget === CIRCULAR) return CIRCULAR;
1409
+ if (!newTarget) return target;
1410
+ if (
1411
+ /** @type {NonNullable<TargetItemWithConnection["export"]>} */
1412
+ (target.export).length === 1
1413
+ ) {
1414
+ target = newTarget;
1415
+ if (!target.export) return target;
1416
+ } else {
1417
+ target = {
1418
+ module: newTarget.module,
1419
+ connection: newTarget.connection,
1420
+ export: newTarget.export
1421
+ ? [
1422
+ ...newTarget.export,
1423
+ .../** @type {NonNullable<TargetItemWithConnection["export"]>} */
1424
+ (target.export).slice(1)
1425
+ ]
1426
+ : /** @type {NonNullable<TargetItemWithConnection["export"]>} */
1427
+ (target.export).slice(1)
1428
+ };
1429
+ }
1430
+ if (!resolveTargetFilter(target)) return target;
1431
+ if (!alreadyVisitedOwned) {
1432
+ alreadyVisited = new Set(alreadyVisited);
1433
+ alreadyVisitedOwned = true;
1434
+ }
1435
+ alreadyVisited.add(exportInfo);
1436
+ }
1437
+ };
1438
+
1439
+ if (!this._target || this._target.size === 0) return;
1440
+ if (alreadyVisited && alreadyVisited.has(this)) return CIRCULAR;
1441
+ const newAlreadyVisited = new Set(alreadyVisited);
1442
+ newAlreadyVisited.add(this);
1443
+ const values = /** @type {Target} */ (this._getMaxTarget()).values();
1444
+ const target = resolveTarget(values.next().value, newAlreadyVisited);
1445
+ if (target === CIRCULAR) return CIRCULAR;
1446
+ if (target === null) return;
1447
+ let result = values.next();
1448
+ while (!result.done) {
1449
+ const t = resolveTarget(result.value, newAlreadyVisited);
1450
+ if (t === CIRCULAR) return CIRCULAR;
1451
+ if (t === null) return;
1452
+ if (t.module !== target.module) return;
1453
+ if (!t.export !== !target.export) return;
1454
+ if (
1455
+ target.export &&
1456
+ !equals(/** @type {ArrayLike<string>} */ (t.export), target.export)
1457
+ ) {
1458
+ return;
1459
+ }
1460
+ result = values.next();
1461
+ }
1462
+ return target;
1463
+ }
1464
+
1465
+ /**
1466
+ * Move the target forward as long resolveTargetFilter is fulfilled
1467
+ * @param {ModuleGraph} moduleGraph the module graph
1468
+ * @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
1470
+ * @returns {TargetItemWithConnection | undefined} the resolved target when moved
1471
+ */
1472
+ moveTarget(moduleGraph, resolveTargetFilter, updateOriginalConnection) {
1473
+ const target = this._getTarget(moduleGraph, resolveTargetFilter, undefined);
1474
+ if (target === CIRCULAR) return;
1475
+ if (!target) return;
1476
+ const originalTarget =
1477
+ /** @type {TargetItem} */
1478
+ (
1479
+ /** @type {Target} */
1480
+ (this._getMaxTarget()).values().next().value
1481
+ );
1482
+ if (
1483
+ originalTarget.connection === target.connection &&
1484
+ originalTarget.export === target.export
1485
+ ) {
1486
+ return;
1487
+ }
1488
+ /** @type {Target} */
1489
+ (this._target).clear();
1490
+ /** @type {Target} */
1491
+ (this._target).set(undefined, {
1492
+ connection: updateOriginalConnection
1493
+ ? updateOriginalConnection(target)
1494
+ : target.connection,
1495
+ export: /** @type {NonNullable<TargetItemWithConnection["export"]>} */ (
1496
+ target.export
1497
+ ),
1498
+ priority: 0
1499
+ });
1500
+ return target;
1501
+ }
1502
+
1503
+ /**
1504
+ * @returns {ExportsInfo} an exports info
1505
+ */
1506
+ createNestedExportsInfo() {
1507
+ if (this.exportsInfoOwned) {
1508
+ return /** @type {ExportsInfo} */ (this.exportsInfo);
1509
+ }
1510
+ this.exportsInfoOwned = true;
1511
+ const oldExportsInfo = this.exportsInfo;
1512
+ this.exportsInfo = new ExportsInfo();
1513
+ this.exportsInfo.setHasProvideInfo();
1514
+ if (oldExportsInfo) {
1515
+ this.exportsInfo.setRedirectNamedTo(oldExportsInfo);
1516
+ }
1517
+ return this.exportsInfo;
1518
+ }
1519
+
1520
+ getNestedExportsInfo() {
1521
+ return this.exportsInfo;
1522
+ }
1523
+
1524
+ /**
1525
+ * @param {ExportInfo} baseInfo base info
1526
+ * @param {RuntimeSpec} runtime runtime
1527
+ * @returns {boolean} true when has info, otherwise false
1528
+ */
1529
+ hasInfo(baseInfo, runtime) {
1530
+ return (
1531
+ (this._usedName && this._usedName !== this.name) ||
1532
+ this.provided ||
1533
+ this.terminalBinding ||
1534
+ this.getUsed(runtime) !== baseInfo.getUsed(runtime)
1535
+ );
1536
+ }
1537
+
1538
+ /**
1539
+ * @param {Hash} hash the hash
1540
+ * @param {RuntimeSpec} runtime the runtime
1541
+ * @returns {void}
1542
+ */
1543
+ updateHash(hash, runtime) {
1544
+ this._updateHash(hash, runtime, new Set());
1545
+ }
1546
+
1547
+ /**
1548
+ * @param {Hash} hash the hash
1549
+ * @param {RuntimeSpec} runtime the runtime
1550
+ * @param {Set<ExportsInfo>} alreadyVisitedExportsInfo for circular references
1551
+ */
1552
+ _updateHash(hash, runtime, alreadyVisitedExportsInfo) {
1553
+ hash.update(
1554
+ `${this._usedName || this.name}${this.getUsed(runtime)}${this.provided}${
1555
+ this.terminalBinding
1556
+ }`
1557
+ );
1558
+ if (this.exportsInfo && !alreadyVisitedExportsInfo.has(this.exportsInfo)) {
1559
+ this.exportsInfo._updateHash(hash, runtime, alreadyVisitedExportsInfo);
1560
+ }
1561
+ }
1562
+
1563
+ getUsedInfo() {
1564
+ if (this._globalUsed !== undefined) {
1565
+ switch (this._globalUsed) {
1566
+ case UsageState.Unused:
1567
+ return "unused";
1568
+ case UsageState.NoInfo:
1569
+ return "no usage info";
1570
+ case UsageState.Unknown:
1571
+ return "maybe used (runtime-defined)";
1572
+ case UsageState.Used:
1573
+ return "used";
1574
+ case UsageState.OnlyPropertiesUsed:
1575
+ return "only properties used";
1576
+ }
1577
+ } else if (this._usedInRuntime !== undefined) {
1578
+ /** @type {Map<RuntimeUsageStateType, string[]>} */
1579
+ const map = new Map();
1580
+ for (const [runtime, used] of this._usedInRuntime) {
1581
+ const list = map.get(used);
1582
+ if (list !== undefined) list.push(runtime);
1583
+ else map.set(used, [runtime]);
1584
+ }
1585
+ // eslint-disable-next-line array-callback-return
1586
+ const specificInfo = Array.from(map, ([used, runtimes]) => {
1587
+ switch (used) {
1588
+ case UsageState.NoInfo:
1589
+ return `no usage info in ${runtimes.join(", ")}`;
1590
+ case UsageState.Unknown:
1591
+ return `maybe used in ${runtimes.join(", ")} (runtime-defined)`;
1592
+ case UsageState.Used:
1593
+ return `used in ${runtimes.join(", ")}`;
1594
+ case UsageState.OnlyPropertiesUsed:
1595
+ return `only properties used in ${runtimes.join(", ")}`;
1596
+ }
1597
+ });
1598
+ if (specificInfo.length > 0) {
1599
+ return specificInfo.join("; ");
1600
+ }
1601
+ }
1602
+ return this._hasUseInRuntimeInfo ? "unused" : "no usage info";
1603
+ }
1604
+
1605
+ getProvidedInfo() {
1606
+ switch (this.provided) {
1607
+ case undefined:
1608
+ return "no provided info";
1609
+ case null:
1610
+ return "maybe provided (runtime-defined)";
1611
+ case true:
1612
+ return "provided";
1613
+ case false:
1614
+ return "not provided";
1615
+ }
1616
+ }
1617
+
1618
+ getRenameInfo() {
1619
+ if (this._usedName !== null && this._usedName !== this.name) {
1620
+ return `renamed to ${JSON.stringify(this._usedName).slice(1, -1)}`;
1621
+ }
1622
+ switch (this.canMangleProvide) {
1623
+ case undefined:
1624
+ switch (this.canMangleUse) {
1625
+ case undefined:
1626
+ return "missing provision and use info prevents renaming";
1627
+ case false:
1628
+ return "usage prevents renaming (no provision info)";
1629
+ case true:
1630
+ return "missing provision info prevents renaming";
1631
+ }
1632
+ break;
1633
+ case true:
1634
+ switch (this.canMangleUse) {
1635
+ case undefined:
1636
+ return "missing usage info prevents renaming";
1637
+ case false:
1638
+ return "usage prevents renaming";
1639
+ case true:
1640
+ return "could be renamed";
1641
+ }
1642
+ break;
1643
+ case false:
1644
+ switch (this.canMangleUse) {
1645
+ case undefined:
1646
+ return "provision prevents renaming (no use info)";
1647
+ case false:
1648
+ return "usage and provision prevents renaming";
1649
+ case true:
1650
+ return "provision prevents renaming";
1651
+ }
1652
+ break;
1653
+ }
1654
+ throw new Error(
1655
+ `Unexpected flags for getRenameInfo ${this.canMangleProvide} ${this.canMangleUse}`
1656
+ );
1657
+ }
1658
+ }
1659
+
1660
+ module.exports = ExportsInfo;
1661
+ module.exports.ExportInfo = ExportInfo;
1662
+ module.exports.RestoreProvidedData = RestoreProvidedData;
1663
+ module.exports.UsageState = UsageState;