webpack 5.111.1 → 5.112.1

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 (793) hide show
  1. package/README.md +1 -1
  2. package/bin/webpack.js +13 -7
  3. package/lib/Chunk.js +3 -966
  4. package/lib/Compilation.js +373 -163
  5. package/lib/Compiler.js +31 -44
  6. package/lib/Dependency.js +3 -551
  7. package/lib/DependencyTemplate.js +3 -70
  8. package/lib/EntryPlugin.js +3 -68
  9. package/lib/Entrypoint.js +3 -121
  10. package/lib/ExternalsPlugin.js +3 -92
  11. package/lib/FileSystemInfo.js +3 -4629
  12. package/lib/InitFragment.js +3 -204
  13. package/lib/LibraryTemplatePlugin.js +3 -46
  14. package/lib/ModuleFilenameHelpers.js +3 -400
  15. package/lib/ModuleNotFoundError.js +2 -2
  16. package/lib/MultiCompiler.js +37 -8
  17. package/lib/NormalModule.js +3 -2242
  18. package/lib/NullFactory.js +3 -22
  19. package/lib/ProgressPlugin.js +3 -908
  20. package/lib/RawModule.js +3 -197
  21. package/lib/RequestShortener.js +3 -37
  22. package/lib/SingleEntryPlugin.js +1 -1
  23. package/lib/WebpackError.js +2 -2
  24. package/lib/asset/AssetBytesGenerator.js +21 -13
  25. package/lib/asset/AssetBytesParser.js +12 -10
  26. package/lib/asset/AssetGenerator.js +71 -69
  27. package/lib/asset/AssetModule.js +13 -2
  28. package/lib/asset/AssetModulesPlugin.js +10 -12
  29. package/lib/asset/AssetParser.js +10 -10
  30. package/lib/asset/AssetSourceGenerator.js +23 -15
  31. package/lib/asset/AssetSourceParser.js +12 -10
  32. package/lib/asset/RawDataUrlModule.js +17 -10
  33. package/lib/asset/WebManifestGenerator.js +17 -12
  34. package/lib/asset/WebManifestParser.js +8 -8
  35. package/lib/async-modules/AsyncModuleHelpers.js +12 -5
  36. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
  37. package/lib/async-modules/InferAsyncModulesPlugin.js +9 -3
  38. package/lib/async-modules/isGeneratorLowered.js +3 -3
  39. package/lib/bun/BunTargetPlugin.js +1 -1
  40. package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
  41. package/lib/{Cache.js → cache/Cache.js} +1 -1
  42. package/lib/{CacheFacade.js → cache/CacheFacade.js} +6 -6
  43. package/lib/cache/IdleFileCachePlugin.js +2 -2
  44. package/lib/cache/MemoryCachePlugin.js +2 -2
  45. package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
  46. package/lib/cache/PackFileCacheStrategy.js +13 -19
  47. package/lib/cache/ResolverCachePlugin.js +65 -11
  48. package/lib/cache/mergeEtags.js +1 -1
  49. package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
  50. package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
  51. package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +209 -212
  52. package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
  53. package/lib/config/browserslistTargetHandler.js +1 -1
  54. package/lib/{cli.js → config/cli.js} +14 -164
  55. package/lib/config/defaults.js +166 -59
  56. package/lib/config/getClaimedAssetTypes.js +22 -14
  57. package/lib/config/normalization.js +18 -7
  58. package/lib/config/target.js +11 -1
  59. package/lib/container/ContainerEntryDependency.js +1 -1
  60. package/lib/container/ContainerEntryModule.js +13 -11
  61. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  62. package/lib/container/ContainerExposedDependency.js +1 -1
  63. package/lib/container/ContainerPlugin.js +178 -5
  64. package/lib/container/ContainerReferencePlugin.js +75 -14
  65. package/lib/container/FallbackDependency.js +1 -1
  66. package/lib/container/FallbackItemDependency.js +1 -1
  67. package/lib/container/FallbackModule.js +12 -10
  68. package/lib/container/FallbackModuleFactory.js +2 -2
  69. package/lib/container/HoistContainerReferencesPlugin.js +10 -11
  70. package/lib/container/ModuleFederationPlugin.js +306 -7
  71. package/lib/container/RemoteModule.js +14 -10
  72. package/lib/container/RemoteRuntimeModule.js +5 -5
  73. package/lib/container/RemoteToExternalDependency.js +1 -1
  74. package/lib/container/moduleFederationHooks.js +1 -1
  75. package/lib/context/ContextModule.js +37 -26
  76. package/lib/context/ContextModuleFactory.js +14 -11
  77. package/lib/context/ContextReplacementPlugin.js +6 -12
  78. package/lib/css/CssGenerator.js +78 -68
  79. package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
  80. package/lib/css/CssLoadingRuntimeModule.js +77 -44
  81. package/lib/css/CssModule.js +37 -29
  82. package/lib/css/CssModulesPlugin.js +129 -45
  83. package/lib/css/CssParser.js +714 -322
  84. package/lib/css/CssServerStylesRuntimeModule.js +3 -3
  85. package/lib/{util → css}/conventions.js +1 -1
  86. package/lib/css/cssMinify.js +110 -37
  87. package/lib/css/data.js +6990 -5125
  88. package/lib/css/syntax-parser.js +20734 -0
  89. package/lib/css/syntax-printer.js +6092 -0
  90. package/lib/css/syntax.js +37 -18686
  91. package/lib/debug/ProfilingPlugin.js +106 -51
  92. package/lib/{DefinePlugin.js → define/DefinePlugin.js} +416 -55
  93. package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +19 -15
  94. package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +6 -4
  95. package/lib/deno/DenoTargetPlugin.js +1 -1
  96. package/lib/dependencies/ConstDependency.js +3 -120
  97. package/lib/dependencies/ContextElementDependency.js +5 -172
  98. package/lib/dependencies/NullDependency.js +3 -37
  99. package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
  100. package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -11
  101. package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
  102. package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
  103. package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
  104. package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
  105. package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +14 -11
  106. package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
  107. package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
  108. package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
  109. package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
  110. package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
  111. package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
  112. package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
  113. package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
  114. package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
  115. package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -36
  116. package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
  117. package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +154 -92
  118. package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
  119. package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +36 -33
  120. package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +17 -16
  121. package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +48 -39
  122. package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
  123. package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
  124. package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
  125. package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
  126. package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
  127. package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +9 -6
  128. package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
  129. package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
  130. package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
  131. package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
  132. package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
  133. package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
  134. package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
  135. package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
  136. package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
  137. package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
  138. package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
  139. package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
  140. package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
  141. package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
  142. package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
  143. package/lib/dependencies/context/ContextElementDependency.js +198 -0
  144. package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
  145. package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +10 -11
  146. package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
  147. package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
  148. package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +7 -10
  149. package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +17 -19
  150. package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
  151. package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
  152. package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
  153. package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +21 -17
  154. package/lib/dependencies/core/ConstDependency.js +131 -0
  155. package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
  156. package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
  157. package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
  158. package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
  159. package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
  160. package/lib/dependencies/core/NullDependency.js +44 -0
  161. package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
  162. package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
  163. package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +375 -99
  164. package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +24 -19
  165. package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
  166. package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
  167. package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +25 -22
  168. package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
  169. package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
  170. package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
  171. package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
  172. package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +20 -20
  173. package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
  174. package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
  175. package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
  176. package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
  177. package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
  178. package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +146 -133
  179. package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
  180. package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +78 -37
  181. package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -12
  182. package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
  183. package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +86 -68
  184. package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +104 -100
  185. package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +36 -51
  186. package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
  187. package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +98 -60
  188. package/lib/dependencies/esm/ESMLiveExportDependency.js +311 -0
  189. package/lib/dependencies/esm/ESMLiveExportParserPlugin.js +862 -0
  190. package/lib/dependencies/esm/ESMModulesPlugin.js +205 -0
  191. package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
  192. package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -18
  193. package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +5 -7
  194. package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
  195. package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
  196. package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
  197. package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
  198. package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
  199. package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
  200. package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
  201. package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +52 -151
  202. package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -15
  203. package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -23
  204. package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -18
  205. package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
  206. package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
  207. package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
  208. package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
  209. package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +22 -25
  210. package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
  211. package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
  212. package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
  213. package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
  214. package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
  215. package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +122 -103
  216. package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
  217. package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
  218. package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
  219. package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
  220. package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
  221. package/lib/{url → dependencies/url}/URLParserPlugin.js +17 -19
  222. package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
  223. package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
  224. package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
  225. package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
  226. package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +82 -53
  227. package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
  228. package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
  229. package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
  230. package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
  231. package/lib/devtool/ModuleFilenameHelpers.js +413 -0
  232. package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
  233. package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +155 -27
  234. package/lib/{util → devtool}/generateDebugId.js +1 -1
  235. package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
  236. package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
  237. package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
  238. package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
  239. package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
  240. package/lib/dll/DelegatedModule.js +23 -21
  241. package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
  242. package/lib/dll/DelegatedPlugin.js +1 -1
  243. package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
  244. package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
  245. package/lib/dll/DllEntryPlugin.js +3 -3
  246. package/lib/dll/DllModule.js +14 -10
  247. package/lib/dll/DllModuleFactory.js +3 -3
  248. package/lib/dll/DllPlugin.js +18 -6
  249. package/lib/dll/DllReferencePlugin.js +103 -30
  250. package/lib/dll/LibManifestPlugin.js +9 -7
  251. package/lib/electron/ElectronTargetPlugin.js +2 -2
  252. package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
  253. package/lib/{dependencies → entry}/EntryDependency.js +11 -2
  254. package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
  255. package/lib/entry/EntryPlugin.js +75 -0
  256. package/lib/errors/AbstractMethodError.js +1 -1
  257. package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
  258. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  259. package/lib/errors/BuildCycleError.js +1 -1
  260. package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
  261. package/lib/errors/ChunkRenderError.js +1 -1
  262. package/lib/errors/CodeGenerationError.js +1 -1
  263. package/lib/errors/CommentCompilationWarning.js +1 -1
  264. package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
  265. package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
  266. package/lib/errors/DeprecatedOptionWarning.js +30 -0
  267. package/lib/errors/DllManifestError.js +26 -0
  268. package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
  269. package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
  270. package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
  271. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  272. package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +9 -6
  273. package/lib/errors/ExternalStarReexportError.js +2 -2
  274. package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
  275. package/lib/errors/HookWebpackError.js +6 -5
  276. package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
  277. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  278. package/lib/errors/JSONParseError.js +4 -4
  279. package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
  280. package/lib/errors/ModuleBuildError.js +1 -1
  281. package/lib/errors/ModuleDependencyError.js +2 -2
  282. package/lib/errors/ModuleDependencyWarning.js +2 -2
  283. package/lib/errors/ModuleError.js +1 -1
  284. package/lib/errors/ModuleHashingError.js +1 -1
  285. package/lib/errors/ModuleNotFoundError.js +3 -3
  286. package/lib/errors/ModuleParseError.js +1 -1
  287. package/lib/errors/ModuleRestoreError.js +1 -1
  288. package/lib/errors/ModuleStoreError.js +1 -1
  289. package/lib/errors/ModuleWarning.js +1 -1
  290. package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
  291. package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
  292. package/lib/errors/NodeStuffInWebError.js +7 -2
  293. package/lib/errors/PathVariableError.js +31 -0
  294. package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
  295. package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
  296. package/lib/errors/RuntimeModuleGenerationError.js +51 -0
  297. package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
  298. package/lib/errors/SystemImportDeprecationWarning.js +43 -0
  299. package/lib/errors/UnmergeableEntryExportsError.js +34 -0
  300. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  301. package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
  302. package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
  303. package/lib/errors/WebpackError.js +13 -3
  304. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
  305. package/lib/esm/ModuleChunkFormatPlugin.js +55 -20
  306. package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
  307. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
  308. package/lib/{ExternalModule.js → externals/ExternalModule.js} +90 -63
  309. package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +42 -41
  310. package/lib/externals/ExternalsPlugin.js +99 -0
  311. package/lib/fs/FileSystemInfo.js +4642 -0
  312. package/lib/{util → fs}/fs.js +22 -9
  313. package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
  314. package/lib/graph/Chunk.js +985 -0
  315. package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +192 -80
  316. package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
  317. package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
  318. package/lib/graph/Dependency.js +634 -0
  319. package/lib/graph/Entrypoint.js +136 -0
  320. package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +131 -83
  321. package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
  322. package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +44 -33
  323. package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
  324. package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +169 -76
  325. package/lib/{util → graph}/findGraphRoots.js +15 -9
  326. package/lib/graph/isDependencyKind.js +23 -0
  327. package/lib/hmr/HotModuleReplacement.runtime.js +12 -11
  328. package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +51 -57
  329. package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
  330. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +25 -26
  331. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
  332. package/lib/hmr/LazyCompilationPlugin.js +32 -28
  333. package/lib/html/HtmlGenerator.js +132 -60
  334. package/lib/html/HtmlModule.js +16 -2
  335. package/lib/html/HtmlModulesPlugin.js +184 -87
  336. package/lib/html/HtmlParser.js +511 -160
  337. package/lib/html/builtinEmbeddedRenderer.js +70 -25
  338. package/lib/html/data.js +44 -22
  339. package/lib/html/htmlMinify.js +114 -41
  340. package/lib/html/syntax-parser.js +15795 -0
  341. package/lib/html/syntax-printer.js +1033 -0
  342. package/lib/html/syntax.js +37 -13952
  343. package/lib/html/xmlMinify.js +70 -0
  344. package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
  345. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  346. package/lib/ids/HashedModuleIdsPlugin.js +32 -5
  347. package/lib/ids/IdHelpers.js +4 -4
  348. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  349. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
  350. package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
  351. package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
  352. package/lib/ids/SyncModuleIdsPlugin.js +3 -3
  353. package/lib/{util → ids}/numberHash.js +1 -1
  354. package/lib/index.js +312 -105
  355. package/lib/{APIPlugin.js → javascript/APIPlugin.js} +31 -37
  356. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
  357. package/lib/javascript/BasicEvaluatedExpression.js +9 -9
  358. package/lib/javascript/ChunkHelpers.js +64 -4
  359. package/lib/javascript/CommonJsChunkFormatPlugin.js +5 -13
  360. package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
  361. package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +75 -8
  362. package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
  363. package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
  364. package/lib/javascript/JavascriptGenerator.js +32 -27
  365. package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +8 -20
  366. package/lib/javascript/JavascriptModule.js +14 -3
  367. package/lib/javascript/JavascriptModulesPlugin.js +441 -214
  368. package/lib/javascript/JavascriptParser.js +318 -144
  369. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  370. package/lib/javascript/MergedEntryExports.js +196 -0
  371. package/lib/javascript/ScopeAnalyzer.js +3924 -13
  372. package/lib/javascript/StartupHelpers.js +6 -6
  373. package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +13 -19
  374. package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
  375. package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
  376. package/lib/javascript/data.js +533 -122
  377. package/lib/javascript/jsMinify.js +272 -0
  378. package/lib/javascript/regexp.js +67 -32
  379. package/lib/javascript/syntax-parser.js +19169 -0
  380. package/lib/javascript/syntax-printer-data.js +1099 -0
  381. package/lib/javascript/syntax-printer.js +53878 -0
  382. package/lib/javascript/syntax.js +20 -11274
  383. package/lib/json/JsonData.js +1 -1
  384. package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
  385. package/lib/json/JsonGenerator.js +24 -16
  386. package/lib/json/JsonModule.js +13 -2
  387. package/lib/json/JsonModulesPlugin.js +1 -1
  388. package/lib/json/JsonParser.js +11 -10
  389. package/lib/json/jsonMinify.js +69 -0
  390. package/lib/library/AbstractLibraryPlugin.js +28 -15
  391. package/lib/library/AmdLibraryPlugin.js +4 -4
  392. package/lib/library/AssignLibraryPlugin.js +28 -12
  393. package/lib/library/EnableLibraryPlugin.js +1 -1
  394. package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
  395. package/lib/library/JsonpLibraryPlugin.js +2 -2
  396. package/lib/library/LibraryTemplatePlugin.js +53 -0
  397. package/lib/library/ModuleLibraryPlugin.js +557 -187
  398. package/lib/library/SystemLibraryPlugin.js +6 -8
  399. package/lib/library/UmdLibraryPlugin.js +3 -4
  400. package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
  401. package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
  402. package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
  403. package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
  404. package/lib/loaders/LoaderRunner.js +94 -46
  405. package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
  406. package/lib/loaders/loadLoader.js +16 -10
  407. package/lib/logging/Logger.js +7 -9
  408. package/lib/logging/ProgressPlugin.js +957 -0
  409. package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
  410. package/lib/{Generator.js → module/Generator.js} +33 -23
  411. package/lib/{Module.js → module/Module.js} +121 -53
  412. package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
  413. package/lib/module/NormalModule.js +2350 -0
  414. package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +64 -71
  415. package/lib/module/NullFactory.js +29 -0
  416. package/lib/{Parser.js → module/Parser.js} +12 -5
  417. package/lib/module/RawModule.js +208 -0
  418. package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
  419. package/lib/{util → module}/extractSourceMap.js +71 -20
  420. package/lib/{util → module}/findCaseMismatch.js +4 -4
  421. package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
  422. package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
  423. package/lib/{dependencies → node}/ExternalModuleInitFragment.js +7 -6
  424. package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
  425. package/lib/node/NodeEnvironmentPlugin.js +11 -1
  426. package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
  427. package/lib/node/NodeTargetPlugin.js +1 -1
  428. package/lib/node/NodeWatchFileSystem.js +58 -6
  429. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
  430. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -19
  431. package/lib/node/ReadFileCompileWasmPlugin.js +9 -11
  432. package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
  433. package/lib/node/nodeConsole.js +6 -7
  434. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  435. package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
  436. package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +14 -14
  437. package/lib/optimize/ConcatenatedModule.js +231 -220
  438. package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
  439. package/lib/optimize/ConstExportsPlugin.js +7 -7
  440. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  441. package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
  442. package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +23 -28
  443. package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +44 -19
  444. package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
  445. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
  446. package/lib/optimize/InlineExports.js +12 -7
  447. package/lib/optimize/InnerGraph.js +5 -13
  448. package/lib/optimize/InnerGraphPlugin.js +10 -10
  449. package/lib/optimize/LazyBarrels.js +620 -0
  450. package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
  451. package/lib/optimize/LimitChunkCountPlugin.js +16 -7
  452. package/lib/optimize/MangleExportsPlugin.js +5 -5
  453. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
  454. package/lib/optimize/MinChunkSizePlugin.js +9 -6
  455. package/lib/optimize/ModuleConcatenationPlugin.js +28 -22
  456. package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
  457. package/lib/optimize/RealContentHashPlugin.js +18 -13
  458. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  459. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  460. package/lib/optimize/SideEffectsFlagPlugin.js +24 -38
  461. package/lib/optimize/SplitChunksPlugin.js +719 -174
  462. package/lib/{util → optimize}/TupleQueue.js +9 -9
  463. package/lib/optimize/chunkSetIntersections.js +437 -0
  464. package/lib/{util → optimize}/deterministicGrouping.js +17 -17
  465. package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
  466. package/lib/{CleanPlugin.js → output/CleanPlugin.js} +69 -25
  467. package/lib/{CopyPlugin.js → output/CopyPlugin.js} +144 -70
  468. package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
  469. package/lib/output/SSRManifestPlugin.js +349 -0
  470. package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
  471. package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
  472. package/lib/performance/BroadContextsPlugin.js +4 -4
  473. package/lib/performance/CacheEffectivenessPlugin.js +2 -3
  474. package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
  475. package/lib/performance/DuplicateModulesPlugin.js +3 -4
  476. package/lib/performance/DuplicatePackagesPlugin.js +3 -3
  477. package/lib/performance/DynamicExportsPlugin.js +2 -2
  478. package/lib/performance/EvalUsagePlugin.js +4 -6
  479. package/lib/performance/HotspotsPlugin.js +39 -14
  480. package/lib/performance/LargeModulesPlugin.js +2 -3
  481. package/lib/performance/LegacyJavascriptPlugin.js +1 -2
  482. package/lib/performance/MissingSideEffectsPlugin.js +2 -3
  483. package/lib/performance/MissingSourceMapsPlugin.js +5 -6
  484. package/lib/performance/PureAnnotationsPlugin.js +19 -13
  485. package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
  486. package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
  487. package/lib/performance/SizeLimitsPlugin.js +11 -12
  488. package/lib/performance/TopLevelThisPlugin.js +22 -13
  489. package/lib/performance/UnsplitVendorsPlugin.js +1 -2
  490. package/lib/performance/UnusedAliasesPlugin.js +6 -7
  491. package/lib/performance/UnusedAssetsPlugin.js +5 -5
  492. package/lib/performance/UnusedDefinesPlugin.js +2 -2
  493. package/lib/performance/UnusedExternalsPlugin.js +3 -4
  494. package/lib/performance/UnusedFederationPlugin.js +2 -4
  495. package/lib/performance/UnusedModulesPlugin.js +5 -4
  496. package/lib/performance/getModuleSize.js +1 -1
  497. package/lib/performance/hasOnlyUnusedExports.js +4 -4
  498. package/lib/performance/isOnlyReexported.js +7 -6
  499. package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
  500. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
  501. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
  502. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
  503. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
  504. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
  505. package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
  506. package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
  507. package/lib/prefetch/ResourceHintPlugin.js +66 -45
  508. package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
  509. package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
  510. package/lib/prefetch/parseResourceHintOptions.js +4 -3
  511. package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
  512. package/lib/{dependencies → provide}/ProvidedDependency.js +50 -17
  513. package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
  514. package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
  515. package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
  516. package/lib/resolve/getResolveOptionsKey.js +59 -0
  517. package/lib/rules/BasicEffectRulePlugin.js +1 -1
  518. package/lib/rules/RuleSetCompiler.js +42 -51
  519. package/lib/rules/UseEffectRulePlugin.js +1 -3
  520. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
  521. package/lib/runtime/AsyncModuleRuntimeModule.js +14 -5
  522. package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
  523. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  524. package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
  525. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
  526. package/lib/runtime/CompatRuntimeModule.js +4 -4
  527. package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
  528. package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
  529. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  530. package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
  531. package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
  532. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
  533. package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
  534. package/lib/runtime/GetChunkFilenameRuntimeModule.js +7 -11
  535. package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
  536. package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
  537. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
  538. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
  539. package/lib/runtime/GlobalRuntimeModule.js +3 -3
  540. package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
  541. package/lib/runtime/HelperRuntimeModule.js +16 -1
  542. package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
  543. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
  544. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
  545. package/lib/runtime/NonceRuntimeModule.js +2 -2
  546. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  547. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  548. package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
  549. package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +24 -1
  550. package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
  551. package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
  552. package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +50 -50
  553. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
  554. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
  555. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  556. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
  557. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
  558. package/lib/runtime/SystemContextRuntimeModule.js +2 -2
  559. package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
  560. package/lib/runtime/WorkerRuntimeModule.js +1 -1
  561. package/lib/runtime/baseUri.js +1 -1
  562. package/lib/schemes/DataUriPlugin.js +1 -1
  563. package/lib/schemes/HttpUriPlugin.js +68 -13
  564. package/lib/schemes/VirtualUrlPlugin.js +52 -16
  565. package/lib/serialization/AggregateErrorSerializer.js +4 -4
  566. package/lib/serialization/BinaryMiddleware.js +4 -1
  567. package/lib/serialization/ErrorObjectSerializer.js +2 -5
  568. package/lib/serialization/FileMiddleware.js +3 -3
  569. package/lib/serialization/ObjectMiddleware.js +62 -29
  570. package/lib/serialization/PlainObjectSerializer.js +3 -7
  571. package/lib/serialization/Serializer.js +21 -11
  572. package/lib/serialization/SerializerMiddleware.js +10 -8
  573. package/lib/serialization/SingleItemMiddleware.js +4 -2
  574. package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
  575. package/lib/sharing/ConsumeSharedModule.js +18 -14
  576. package/lib/sharing/ConsumeSharedPlugin.js +148 -42
  577. package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
  578. package/lib/sharing/ProvideForSharedDependency.js +9 -1
  579. package/lib/sharing/ProvideSharedDependency.js +1 -1
  580. package/lib/sharing/ProvideSharedModule.js +11 -9
  581. package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
  582. package/lib/sharing/ProvideSharedPlugin.js +111 -20
  583. package/lib/sharing/SharePlugin.js +102 -9
  584. package/lib/sharing/ShareRuntimeModule.js +6 -6
  585. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  586. package/lib/{util → sharing}/semver.js +14 -16
  587. package/lib/sharing/utils.js +59 -2
  588. package/lib/stats/DefaultStatsFactoryPlugin.js +57 -54
  589. package/lib/stats/DefaultStatsPresetPlugin.js +3 -7
  590. package/lib/stats/DefaultStatsPrinterPlugin.js +15 -14
  591. package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
  592. package/lib/{Stats.js → stats/Stats.js} +4 -4
  593. package/lib/stats/StatsFactory.js +208 -37
  594. package/lib/stats/StatsPrinter.js +126 -13
  595. package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
  596. package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
  597. package/lib/template/DependencyTemplate.js +77 -0
  598. package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
  599. package/lib/template/InitFragment.js +223 -0
  600. package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
  601. package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
  602. package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
  603. package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +158 -95
  604. package/lib/{Template.js → template/Template.js} +14 -12
  605. package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
  606. package/lib/typescript/TypeScriptPlugin.js +3 -3
  607. package/lib/util/RequestShortener.js +44 -0
  608. package/lib/util/SortableSet.js +87 -22
  609. package/lib/util/SourceProcessor.js +439 -51
  610. package/lib/util/TupleSet.js +27 -27
  611. package/lib/util/WeakTupleMap.js +20 -16
  612. package/lib/util/buildDiagnostics.js +2 -2
  613. package/lib/util/cleverMerge.js +61 -33
  614. package/lib/util/comparators.js +19 -15
  615. package/lib/util/concatenate.js +28 -147
  616. package/lib/util/createMappings.js +111 -0
  617. package/lib/util/dataURL.js +96 -15
  618. package/lib/util/deprecation.js +5 -4
  619. package/lib/util/extractComments.js +118 -0
  620. package/lib/util/formatLocation.js +1 -1
  621. package/lib/util/globUtils.js +198 -20
  622. package/lib/util/haltVisitors.js +51 -0
  623. package/lib/util/handlerKeys.js +2 -2
  624. package/lib/util/identifier.js +117 -1
  625. package/lib/util/implicitTypeLoaderFallback.js +6 -4
  626. package/lib/util/internalSerializables.js +296 -102
  627. package/lib/util/magicComment.js +12 -7
  628. package/lib/util/makeSerializable.js +28 -7
  629. package/lib/util/memoize.js +1 -1
  630. package/lib/util/parseJson.js +2 -2
  631. package/lib/util/preloadModuleType.js +5 -2
  632. package/lib/util/registerExternalSerializer.js +2 -2
  633. package/lib/util/removeBOM.js +1 -1
  634. package/lib/util/runtime.js +1 -1
  635. package/lib/util/serialization.js +35 -28
  636. package/lib/util/source.js +2 -2
  637. package/lib/util/terminalColors.js +161 -0
  638. package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
  639. package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
  640. package/lib/{wasm-async → wasm}/AsyncWasmModule.js +19 -5
  641. package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +17 -9
  642. package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +24 -15
  643. package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
  644. package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +14 -12
  645. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  646. package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +11 -13
  647. package/lib/wasm/wasmModuleFilename.js +2 -2
  648. package/lib/wasm-sync/SyncWasmModule.js +18 -3
  649. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
  650. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
  651. package/lib/wasm-sync/WebAssemblyGenerator.js +22 -16
  652. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +28 -21
  653. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
  654. package/lib/wasm-sync/WebAssemblyParser.js +15 -17
  655. package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
  656. package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
  657. package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
  658. package/lib/{Watching.js → watch/Watching.js} +8 -8
  659. package/lib/web/FetchCompileAsyncWasmPlugin.js +12 -18
  660. package/lib/web/FetchCompileWasmPlugin.js +8 -10
  661. package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
  662. package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
  663. package/lib/web/JsonpTemplatePlugin.js +1 -1
  664. package/lib/webpack.js +27 -17
  665. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
  666. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
  667. package/package.json +57 -36
  668. package/schemas/WebpackOptions.check.js +4 -3
  669. package/schemas/WebpackOptions.d.json.ts +2 -0
  670. package/schemas/WebpackOptions.json +295 -75
  671. package/schemas/plugins/BannerPlugin.check.js +4 -3
  672. package/schemas/plugins/BannerPlugin.json +29 -2
  673. package/schemas/plugins/HtmlGeneratorOptions.check.js +4 -3
  674. package/schemas/plugins/HtmlParserOptions.check.js +4 -3
  675. package/schemas/plugins/IgnorePlugin.check.js +4 -3
  676. package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
  677. package/schemas/plugins/IgnorePlugin.json +1 -1
  678. package/schemas/plugins/LoaderOptionsPlugin.check.js +4 -3
  679. package/schemas/plugins/ManifestPlugin.check.js +4 -3
  680. package/schemas/plugins/ManifestPlugin.json +3 -3
  681. package/schemas/plugins/ProgressPlugin.check.js +4 -3
  682. package/schemas/plugins/ProgressPlugin.json +2 -7
  683. package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
  684. package/schemas/plugins/SSRManifestPlugin.json +20 -0
  685. package/schemas/plugins/SourceMapDevToolPlugin.check.js +4 -3
  686. package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
  687. package/schemas/plugins/WatchIgnorePlugin.check.js +4 -3
  688. package/schemas/plugins/WatchIgnorePlugin.json +12 -3
  689. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +4 -3
  690. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +4 -3
  691. package/schemas/plugins/asset/AssetParserOptions.check.js +4 -3
  692. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +4 -3
  693. package/schemas/plugins/container/ContainerPlugin.check.js +4 -3
  694. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  695. package/schemas/plugins/container/ContainerReferencePlugin.check.js +4 -3
  696. package/schemas/plugins/container/ExternalsType.check.js +4 -3
  697. package/schemas/plugins/container/ModuleFederationPlugin.check.js +4 -3
  698. package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
  699. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +4 -3
  700. package/schemas/plugins/css/CssGeneratorOptions.check.js +4 -3
  701. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +4 -3
  702. package/schemas/plugins/css/CssModuleParserOptions.check.js +4 -3
  703. package/schemas/plugins/css/CssParserOptions.check.js +4 -3
  704. package/schemas/plugins/debug/ProfilingPlugin.check.js +4 -3
  705. package/schemas/plugins/define/DotenvPluginOptions.check.js +7 -0
  706. package/schemas/plugins/define/DotenvPluginOptions.json +3 -0
  707. package/schemas/plugins/dll/DllPlugin.check.js +4 -3
  708. package/schemas/plugins/dll/DllReferencePlugin.check.js +4 -3
  709. package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
  710. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +4 -3
  711. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +4 -3
  712. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +4 -3
  713. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +4 -3
  714. package/schemas/plugins/json/JsonModulesPluginParser.check.js +4 -3
  715. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +4 -3
  716. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +4 -3
  717. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +4 -3
  718. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +4 -3
  719. package/schemas/plugins/output/CleanOptions.check.js +7 -0
  720. package/schemas/plugins/output/CleanOptions.json +3 -0
  721. package/schemas/plugins/schemes/HttpUriPlugin.check.js +4 -3
  722. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +4 -3
  723. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +4 -3
  724. package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
  725. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +4 -3
  726. package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
  727. package/schemas/plugins/sharing/SharePlugin.check.js +4 -3
  728. package/schemas/plugins/sharing/SharePlugin.json +32 -0
  729. package/types.d.ts +20780 -14174
  730. package/lib/LazyBarrel.js +0 -388
  731. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
  732. package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
  733. package/lib/javascript/ChunkFormatHelpers.js +0 -72
  734. package/lib/javascript/grammar.js +0 -5546
  735. package/lib/javascript/parser.js +0 -1500
  736. package/lib/javascript/regexpData.js +0 -51
  737. package/lib/performance/getSourceModules.js +0 -22
  738. package/lib/util/Semaphore.js +0 -65
  739. package/lib/util/objectToMap.js +0 -15
  740. package/schemas/WebpackOptions.check.d.ts +0 -7
  741. package/schemas/_container.json +0 -155
  742. package/schemas/_sharing.json +0 -118
  743. package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
  744. package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
  745. package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
  746. package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
  747. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
  748. package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
  749. package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
  750. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
  751. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
  752. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
  753. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
  754. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
  755. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
  756. package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
  757. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
  758. package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
  759. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
  760. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
  761. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
  762. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
  763. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
  764. package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
  765. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
  766. package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
  767. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
  768. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
  769. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
  770. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
  771. package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
  772. package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
  773. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
  774. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
  775. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
  776. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
  777. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
  778. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
  779. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
  780. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
  781. package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
  782. /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
  783. /package/lib/{util → css}/topologicalSort.js +0 -0
  784. /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
  785. /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
  786. /package/lib/{util → fs}/StackedCacheMap.js +0 -0
  787. /package/lib/{util → javascript}/StackedMap.js +0 -0
  788. /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
  789. /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
  790. /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
  791. /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
  792. /package/lib/{util → optimize}/Queue.js +0 -0
  793. /package/lib/{util → stats}/smartGrouping.js +0 -0
@@ -0,0 +1,862 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const CompatibilityPlugin = require("../../javascript/CompatibilityPlugin");
9
+ const { harmonySpecifierTag } = require("./ESMImportDependencyParserPlugin");
10
+ const ESMLiveExportDependency = require("./ESMLiveExportDependency");
11
+
12
+ /**
13
+ * @import {
14
+ * AssignmentExpression,
15
+ * ClassDeclaration,
16
+ * Expression,
17
+ * ForInStatement,
18
+ * ForOfStatement,
19
+ * FunctionDeclaration,
20
+ * Identifier,
21
+ * MaybeNamedClassDeclaration,
22
+ * MaybeNamedFunctionDeclaration,
23
+ * Node,
24
+ * Pattern,
25
+ * Property,
26
+ * Program,
27
+ * VariableDeclaration,
28
+ * VariableDeclarator
29
+ * } from "estree"
30
+ */
31
+ /** @import JavascriptParser, { Range, WriteStatement } from "../../javascript/JavascriptParser" */
32
+ /** @import NormalModule from "../../module/NormalModule" */
33
+
34
+ /**
35
+ * A module-level declaration an export may name: a `let` or `var` statement, or a
36
+ * function or class, whose binding stays declared where it is.
37
+ * @typedef {VariableDeclaration | FunctionDeclaration | ClassDeclaration | MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration} LiveDeclaration
38
+ */
39
+
40
+ /**
41
+ * The occurrences of the names one claimed declaration binds, gathered while the
42
+ * module is walked.
43
+ * @typedef {object} LiveExportGroup
44
+ * @property {LiveDeclaration} declaration the claimed declaration
45
+ * @property {LiveExportReferences[]} names one entry per name it binds
46
+ * @property {number[]} occurrences flat triples of the occurrences renaming takes, of all its names
47
+ * @property {Set<number>} starts where each of those starts
48
+ * @property {number[]} mirrors flat triples of where the module mirrors a write instead, of all its names
49
+ * @property {Set<string>} mirrorKeys where each of those starts, with its name and kind
50
+ * @property {boolean} written whether anything but its declaration assigns a name, the only way its copy can go stale
51
+ * @property {boolean} declared whether the walk saw each `let` or `const` declarator, which a mirroring module needs
52
+ * @property {number} lexicalStart where a `let` or class declaration starts, before which a use throws; -1 for others
53
+ * @property {boolean} earlyUse whether the module uses a `let` or class above its declaration, where it must throw
54
+ */
55
+
56
+ /**
57
+ * The occurrences of one name of a claimed declaration.
58
+ * @typedef {object} LiveExportReferences
59
+ * @property {string} name the declared name
60
+ * @property {number} kindBase {@link ESMLiveExportDependency.KINDS_PER_NAME} times the name's index in its group
61
+ * @property {LiveExportGroup} group the group it belongs to
62
+ * @property {number} varDeclarators the `var` declarators of the name the walk saw
63
+ */
64
+
65
+ /**
66
+ * Whether a value takes its name from the binding it is assigned to.
67
+ * @param {Node | null | undefined} node the assigned value
68
+ * @returns {boolean} true for an anonymous function or class
69
+ */
70
+ const isAnonymousFunctionDefinition = (node) => {
71
+ if (!node) return false;
72
+ switch (node.type) {
73
+ case "ArrowFunctionExpression":
74
+ return true;
75
+ case "FunctionExpression":
76
+ case "ClassExpression":
77
+ return !node.id;
78
+ default:
79
+ return false;
80
+ }
81
+ };
82
+
83
+ /**
84
+ * Calls back with each identifier a binding pattern declares or assigns.
85
+ * @param {Pattern | null} pattern the pattern
86
+ * @param {(identifier: Identifier, shorthand: boolean, value: Expression | undefined) => void} callback with the identifier, whether a shorthand property holds it, and its default
87
+ * @returns {void}
88
+ */
89
+ const forEachPatternIdentifier = (pattern, callback) => {
90
+ if (!pattern) return;
91
+ switch (pattern.type) {
92
+ case "Identifier":
93
+ callback(pattern, false, undefined);
94
+ return;
95
+ case "AssignmentPattern":
96
+ if (pattern.left.type === "Identifier") {
97
+ callback(pattern.left, false, pattern.right);
98
+ } else {
99
+ forEachPatternIdentifier(pattern.left, callback);
100
+ }
101
+ return;
102
+ case "ObjectPattern":
103
+ for (const property of pattern.properties) {
104
+ if (property.type === "RestElement") {
105
+ forEachPatternIdentifier(property.argument, callback);
106
+ } else if (property.shorthand && property.value.type === "Identifier") {
107
+ callback(property.value, true, undefined);
108
+ } else if (
109
+ property.shorthand &&
110
+ property.value.type === "AssignmentPattern" &&
111
+ property.value.left.type === "Identifier"
112
+ ) {
113
+ callback(property.value.left, true, property.value.right);
114
+ } else {
115
+ forEachPatternIdentifier(property.value, callback);
116
+ }
117
+ }
118
+ return;
119
+ case "ArrayPattern":
120
+ for (const element of pattern.elements) {
121
+ forEachPatternIdentifier(element, callback);
122
+ }
123
+ return;
124
+ case "RestElement":
125
+ forEachPatternIdentifier(pattern.argument, callback);
126
+ }
127
+ };
128
+
129
+ /**
130
+ * The names the declarators of a declaration bind.
131
+ * @param {VariableDeclarator[]} declarators the declarators
132
+ * @returns {string[]} their names
133
+ */
134
+ const declaredNames = (declarators) => {
135
+ /** @type {string[]} */
136
+ const names = [];
137
+ for (const declarator of declarators) {
138
+ forEachPatternIdentifier(declarator.id, (identifier) => {
139
+ names.push(identifier.name);
140
+ });
141
+ }
142
+ return names;
143
+ };
144
+
145
+ /**
146
+ * Finds the default a destructuring target gives an identifier, if any.
147
+ * @param {Pattern | Property | null} pattern the destructuring target
148
+ * @param {Identifier} identifier the identifier in it
149
+ * @returns {Expression | undefined} the default value
150
+ */
151
+ const findPatternDefault = (pattern, identifier) => {
152
+ if (!pattern) return;
153
+ switch (pattern.type) {
154
+ case "AssignmentPattern":
155
+ return pattern.left === identifier
156
+ ? pattern.right
157
+ : findPatternDefault(pattern.left, identifier);
158
+ case "ObjectPattern":
159
+ for (const property of pattern.properties) {
160
+ const found = findPatternDefault(
161
+ property.type === "RestElement" ? property.argument : property.value,
162
+ identifier
163
+ );
164
+ if (found) return found;
165
+ }
166
+ return;
167
+ case "ArrayPattern":
168
+ for (const element of pattern.elements) {
169
+ const found = findPatternDefault(element, identifier);
170
+ if (found) return found;
171
+ }
172
+ return;
173
+ case "RestElement":
174
+ return findPatternDefault(pattern.argument, identifier);
175
+ }
176
+ };
177
+
178
+ const liveExportTag = Symbol("live export");
179
+
180
+ const PLUGIN_NAME = "ESMLiveExportParserPlugin";
181
+
182
+ /**
183
+ * Records, for each module-level binding an ESM module exports, every occurrence
184
+ * renaming it takes, so a module library can move the binding to the chunk's scope,
185
+ * and every write, where a module keeping its declaration mirrors it there instead.
186
+ */
187
+ class ESMLiveExportParserPlugin {
188
+ /**
189
+ * Applies the plugin by registering its hooks on the parser.
190
+ * @param {JavascriptParser} parser the parser
191
+ * @returns {void}
192
+ */
193
+ apply(parser) {
194
+ /** @type {Program | undefined} */
195
+ let program;
196
+ /** @type {Map<string, LiveDeclaration> | undefined} */
197
+ let claimable;
198
+ // the module-level `var` declarators of each name, counted while pre-walked
199
+ /** @type {Map<string, number> | undefined} */
200
+ let varDeclarators;
201
+ // module-level `var` names linked through a statement declaring them together
202
+ /** @type {Map<string, string> | undefined} */
203
+ let varLinks;
204
+ /** @type {LiveExportGroup[] | undefined} */
205
+ let groups;
206
+ // the last pattern identifier, which an `assign` or `write` call may follow
207
+ /** @type {Identifier | undefined} */
208
+ let pendingPattern;
209
+ let pendingShorthand = false;
210
+ // whether claimed declarations still wait for their tags
211
+ let untagged = false;
212
+ // a direct `eval` may read a binding by the name renaming takes away
213
+ let usesEval = false;
214
+ // flat pairs of where each direct `eval` call starts and ends, as it may write
215
+ /** @type {number[]} */
216
+ let evalCalls = [];
217
+ // A hot update replaces the module where the chunk's scope is not, so the
218
+ // module keeps its declarations and mirrors them, `const` included.
219
+ let hot = false;
220
+
221
+ /**
222
+ * The name standing for every `var` name linked to this one.
223
+ * @param {string} name a `var` name
224
+ * @returns {string} the representative
225
+ */
226
+ const findVarLink = (name) => {
227
+ const links = /** @type {Map<string, string>} */ (varLinks);
228
+ let current = name;
229
+ let next = links.get(current);
230
+ while (next !== undefined && next !== current) {
231
+ current = next;
232
+ next = links.get(current);
233
+ }
234
+ return current;
235
+ };
236
+
237
+ /**
238
+ * Indexes the module-level declarations an export may claim, by each name.
239
+ * @returns {Map<string, LiveDeclaration>} the declarations
240
+ */
241
+ const getClaimable = () => {
242
+ if (claimable !== undefined) return claimable;
243
+ claimable = new Map();
244
+ for (const statement of /** @type {Program} */ (program).body) {
245
+ const declaration =
246
+ statement.type === "ExportNamedDeclaration" ||
247
+ statement.type === "ExportDefaultDeclaration"
248
+ ? statement.declaration
249
+ : statement;
250
+ if (!declaration) continue;
251
+ if (
252
+ (declaration.type === "FunctionDeclaration" ||
253
+ declaration.type === "ClassDeclaration") &&
254
+ declaration.id
255
+ ) {
256
+ claimable.set(
257
+ declaration.id.name,
258
+ /** @type {LiveDeclaration} */ (declaration)
259
+ );
260
+ } else if (
261
+ declaration.type === "VariableDeclaration" &&
262
+ (declaration.kind === "let" ||
263
+ declaration.kind === "var" ||
264
+ (hot && declaration.kind === "const"))
265
+ ) {
266
+ for (const name of declaredNames(declaration.declarations)) {
267
+ if (!claimable.has(name)) claimable.set(name, declaration);
268
+ }
269
+ }
270
+ }
271
+ return claimable;
272
+ };
273
+
274
+ /**
275
+ * Records an occurrence once, however many hooks report it.
276
+ * @param {LiveExportReferences} references the name
277
+ * @param {number} start where it starts
278
+ * @param {number} end where it ends
279
+ * @param {number} kind an occurrence kind of {@link ESMLiveExportDependency}
280
+ * @returns {boolean} true when it was not recorded before
281
+ */
282
+ const recordOccurrence = (references, start, end, kind) => {
283
+ const { group } = references;
284
+ const code = references.kindBase + kind;
285
+ if (kind >= ESMLiveExportDependency.SYNC) {
286
+ // one write may mirror several names at the same place
287
+ const key = `${start}:${code}`;
288
+ if (group.mirrorKeys.has(key)) return false;
289
+ group.mirrorKeys.add(key);
290
+ group.mirrors.push(start, end, code);
291
+ return true;
292
+ }
293
+ if (group.starts.has(start)) return false;
294
+ group.starts.add(start);
295
+ group.occurrences.push(start, end, code);
296
+ return true;
297
+ };
298
+
299
+ /**
300
+ * Records a reference, and the anonymous function or class it names.
301
+ * @param {LiveExportReferences} references the name
302
+ * @param {Identifier} identifier the reference
303
+ * @param {boolean} shorthand whether a shorthand property holds it
304
+ * @param {Node | null | undefined} value what it is assigned, if anything
305
+ */
306
+ const record = (references, identifier, shorthand, value) => {
307
+ const range = /** @type {Range} */ (identifier.range);
308
+ if (range[0] < references.group.lexicalStart) {
309
+ references.group.earlyUse = true;
310
+ }
311
+ if (
312
+ recordOccurrence(
313
+ references,
314
+ range[0],
315
+ range[1],
316
+ shorthand
317
+ ? ESMLiveExportDependency.SHORTHAND
318
+ : ESMLiveExportDependency.REFERENCE
319
+ ) &&
320
+ isAnonymousFunctionDefinition(value)
321
+ ) {
322
+ const valueRange = /** @type {Range} */ (
323
+ /** @type {Node} */ (value).range
324
+ );
325
+ recordOccurrence(
326
+ references,
327
+ valueRange[0],
328
+ valueRange[1],
329
+ ESMLiveExportDependency.NAMED
330
+ );
331
+ }
332
+ };
333
+
334
+ /**
335
+ * Records the names, keyword and parentheses of a variable declaration, when
336
+ * every name it declares belongs to one group.
337
+ * @param {VariableDeclaration} declaration the declaration
338
+ * @param {(name: string) => LiveExportReferences | undefined} lookup the group's entry for a name
339
+ * @returns {LiveExportReferences[] | undefined} the entries of its names, in order
340
+ */
341
+ const recordDeclaration = (declaration, lookup) => {
342
+ /** @type {LiveExportReferences[]} */
343
+ const entries = [];
344
+ /** @type {LiveExportGroup | undefined} */
345
+ let group;
346
+ for (const name of declaredNames(declaration.declarations)) {
347
+ const references = lookup(name);
348
+ if (
349
+ references === undefined ||
350
+ (group !== undefined && references.group !== group)
351
+ ) {
352
+ return;
353
+ }
354
+ group = references.group;
355
+ entries.push(references);
356
+ }
357
+ if (entries.length === 0) return;
358
+ recordOccurrence(
359
+ entries[0],
360
+ /** @type {Range} */ (declaration.range)[0],
361
+ /** @type {Range} */ (declaration.declarations[0].range)[0],
362
+ ESMLiveExportDependency.KEYWORD
363
+ );
364
+ for (const declarator of declaration.declarations) {
365
+ forEachPatternIdentifier(
366
+ declarator.id,
367
+ (identifier, shorthand, value) => {
368
+ record(
369
+ /** @type {LiveExportReferences} */ (lookup(identifier.name)),
370
+ identifier,
371
+ shorthand,
372
+ declarator.id.type === "Identifier" ? declarator.init : value
373
+ );
374
+ }
375
+ );
376
+ // Without its keyword a statement opening with `{` reads as a block; a loop
377
+ // head has no initializer and takes the pattern bare.
378
+ if (declarator.id.type !== "Identifier" && declarator.init) {
379
+ const range = /** @type {Range} */ (declarator.range);
380
+ recordOccurrence(
381
+ entries[0],
382
+ range[0],
383
+ range[1],
384
+ ESMLiveExportDependency.PARENTHESIZED
385
+ );
386
+ }
387
+ }
388
+ return entries;
389
+ };
390
+
391
+ /**
392
+ * Records where a module mirrors a name once a loop assigned its next value.
393
+ * @param {LiveExportReferences} references the name
394
+ * @param {ForInStatement | ForOfStatement} loop the loop
395
+ */
396
+ const recordLoopBody = (references, loop) => {
397
+ const range = /** @type {Range} */ (loop.body.range);
398
+ if (loop.body.type === "BlockStatement") {
399
+ recordOccurrence(
400
+ references,
401
+ range[0] + 1,
402
+ range[0] + 1,
403
+ ESMLiveExportDependency.STATEMENT
404
+ );
405
+ } else {
406
+ recordOccurrence(
407
+ references,
408
+ range[0],
409
+ range[1],
410
+ ESMLiveExportDependency.BODY
411
+ );
412
+ }
413
+ };
414
+
415
+ /**
416
+ * Records where a module mirrors the names one declarator declares.
417
+ * @param {VariableDeclaration} declaration the declaration
418
+ * @param {VariableDeclarator} declarator one of its declarators
419
+ */
420
+ const recordMirroredDeclarator = (declaration, declarator) => {
421
+ const path = /** @type {Node[]} */ (parser.statementPath);
422
+ const parent = path[path.length - 1];
423
+ const loop =
424
+ (parent.type === "ForInStatement" ||
425
+ parent.type === "ForOfStatement") &&
426
+ parent.left === declaration
427
+ ? parent
428
+ : undefined;
429
+ const grandparent = path[path.length - 2];
430
+ const inForInit =
431
+ grandparent !== undefined &&
432
+ grandparent.type === "ForStatement" &&
433
+ grandparent.init === declaration;
434
+ forEachPatternIdentifier(declarator.id, (identifier) => {
435
+ const references =
436
+ /** @type {LiveExportReferences | undefined} */
437
+ (parser.getTagData(identifier.name, liveExportTag));
438
+ if (references === undefined) return;
439
+ const { group } = references;
440
+ group.declared = true;
441
+ // renaming counts the declarators of the statements it owns itself
442
+ if (hot) references.varDeclarators++;
443
+ if (declaration !== group.declaration) group.written = true;
444
+ if (loop !== undefined) {
445
+ recordLoopBody(references, loop);
446
+ } else if (declarator.id.type !== "Identifier") {
447
+ // a statement after it mirrors what the pattern took, a declarator in a loop's head
448
+ const at = /** @type {Range} */ (declaration.range)[1];
449
+ recordOccurrence(
450
+ references,
451
+ at,
452
+ at,
453
+ inForInit
454
+ ? ESMLiveExportDependency.DECLARATOR
455
+ : ESMLiveExportDependency.STATEMENT
456
+ );
457
+ } else if (declarator.init) {
458
+ const range = /** @type {Range} */ (declarator.init.range);
459
+ recordOccurrence(
460
+ references,
461
+ range[0],
462
+ range[1],
463
+ isAnonymousFunctionDefinition(declarator.init)
464
+ ? ESMLiveExportDependency.NAMED_VALUE
465
+ : ESMLiveExportDependency.VALUE
466
+ );
467
+ } else if (declaration.kind !== "var") {
468
+ const at = /** @type {Range} */ (identifier.range)[1];
469
+ recordOccurrence(
470
+ references,
471
+ at,
472
+ at,
473
+ ESMLiveExportDependency.UNDEFINED
474
+ );
475
+ } else if (declaration === group.declaration) {
476
+ // a fresh instance starts its `var` undefined, before any write runs
477
+ recordOccurrence(references, 0, 0, ESMLiveExportDependency.STATEMENT);
478
+ }
479
+ });
480
+ };
481
+
482
+ /**
483
+ * Records where a module mirrors a name a write just wrote.
484
+ * @param {LiveExportReferences} references the name
485
+ * @param {WriteStatement} node the writing construct
486
+ */
487
+ const recordMirroredWrite = (references, node) => {
488
+ references.group.written = true;
489
+ if (node.type === "ForInStatement" || node.type === "ForOfStatement") {
490
+ recordLoopBody(references, node);
491
+ return;
492
+ }
493
+ const range = /** @type {Range} */ (node.range);
494
+ recordOccurrence(
495
+ references,
496
+ range[0],
497
+ range[1],
498
+ ESMLiveExportDependency.SYNC
499
+ );
500
+ };
501
+
502
+ /**
503
+ * Records the identifier a destructuring write just reported as a pattern.
504
+ * @param {Pattern} target the destructuring target containing it
505
+ * @returns {boolean} true when it belonged to the tagged name
506
+ */
507
+ const recordPendingPattern = (target) => {
508
+ const references = /** @type {LiveExportReferences} */ (
509
+ parser.currentTagData
510
+ );
511
+ const identifier = pendingPattern;
512
+ pendingPattern = undefined;
513
+ if (identifier === undefined || identifier.name !== references.name) {
514
+ return false;
515
+ }
516
+ record(
517
+ references,
518
+ identifier,
519
+ pendingShorthand,
520
+ findPatternDefault(target, identifier)
521
+ );
522
+ return true;
523
+ };
524
+
525
+ parser.hooks.program.tap(PLUGIN_NAME, (ast) => {
526
+ program = ast;
527
+ claimable = undefined;
528
+ varDeclarators = undefined;
529
+ varLinks = undefined;
530
+ groups = undefined;
531
+ pendingPattern = undefined;
532
+ untagged = false;
533
+ usesEval = false;
534
+ evalCalls = [];
535
+ hot = Boolean(
536
+ parser.state.module &&
537
+ /** @type {NormalModule} */ (parser.state.module).hot
538
+ );
539
+ });
540
+
541
+ parser.hooks.call.for("eval").tap(PLUGIN_NAME, (expression) => {
542
+ usesEval = true;
543
+ const range = /** @type {Range} */ (expression.range);
544
+ evalCalls.push(range[0], range[1]);
545
+ });
546
+
547
+ // Counted before anything is claimed: a `var` the walk does not report as a
548
+ // declarator, such as `var x = y` renaming `y`, keeps its name in the module.
549
+ parser.hooks.preDeclarator.tap(
550
+ { name: PLUGIN_NAME, stage: -100 },
551
+ (declarator, statement) => {
552
+ if (statement.kind !== "var" || parser.scope.topLevelScope !== true) {
553
+ return;
554
+ }
555
+ if (varDeclarators === undefined) {
556
+ varDeclarators = new Map();
557
+ varLinks = new Map();
558
+ }
559
+ const counts = varDeclarators;
560
+ const links = /** @type {Map<string, string>} */ (varLinks);
561
+ const names = declaredNames([declarator]);
562
+ const first = declaredNames([statement.declarations[0]])[0];
563
+ if (first === undefined) return;
564
+ if (!links.has(first)) links.set(first, first);
565
+ const anchor = findVarLink(first);
566
+ for (const name of names) {
567
+ counts.set(name, (counts.get(name) || 0) + 1);
568
+ if (!links.has(name)) links.set(name, name);
569
+ const linked = findVarLink(name);
570
+ if (linked !== anchor) links.set(linked, anchor);
571
+ }
572
+ }
573
+ );
574
+
575
+ // Runs before the export plugin, whose tap ends the hook.
576
+ parser.hooks.exportSpecifier.tap(
577
+ { name: PLUGIN_NAME, stage: -10 },
578
+ (statement, id) => {
579
+ if (
580
+ parser.getTagData(id, harmonySpecifierTag) ||
581
+ parser.getTagData(id, CompatibilityPlugin.nestedWebpackIdentifierTag)
582
+ ) {
583
+ return;
584
+ }
585
+ const declarations = getClaimable();
586
+ const declaration = declarations.get(id);
587
+ if (declaration === undefined) return;
588
+ /** @type {string[]} */
589
+ let names;
590
+ if (declaration.type !== "VariableDeclaration") {
591
+ names = [id];
592
+ } else if (declaration.kind !== "var") {
593
+ names = declaredNames(declaration.declarations);
594
+ } else {
595
+ // every `var` declared beside one moves with it
596
+ const anchor = findVarLink(id);
597
+ names = [];
598
+ for (const name of /** @type {Map<string, number>} */ (
599
+ varDeclarators
600
+ ).keys()) {
601
+ if (findVarLink(name) === anchor) names.push(name);
602
+ }
603
+ if (
604
+ names.some((name) => {
605
+ const other = declarations.get(name);
606
+ return (
607
+ other === undefined || other.type !== "VariableDeclaration"
608
+ );
609
+ })
610
+ ) {
611
+ return;
612
+ }
613
+ }
614
+ for (const name of names) declarations.delete(name);
615
+ /** @type {LiveExportGroup} */
616
+ const group = {
617
+ declaration,
618
+ names: [],
619
+ occurrences: [],
620
+ starts: new Set(),
621
+ mirrors: [],
622
+ mirrorKeys: new Set(),
623
+ written: false,
624
+ declared: false,
625
+ lexicalStart:
626
+ declaration.type === "ClassDeclaration" ||
627
+ (declaration.type === "VariableDeclaration" &&
628
+ declaration.kind === "let")
629
+ ? /** @type {Range} */ (declaration.range)[0]
630
+ : -1,
631
+ earlyUse: false
632
+ };
633
+ for (const name of names) {
634
+ group.names.push({
635
+ name,
636
+ kindBase:
637
+ group.names.length * ESMLiveExportDependency.KINDS_PER_NAME,
638
+ group,
639
+ varDeclarators: 0
640
+ });
641
+ }
642
+ if (declaration.type !== "VariableDeclaration") {
643
+ // A function is hoisted, so its binding is set before the module runs;
644
+ // a class only once its declaration ran.
645
+ const at =
646
+ declaration.type === "FunctionDeclaration"
647
+ ? 0
648
+ : /** @type {Range} */ (declaration.range)[1];
649
+ recordOccurrence(
650
+ group.names[0],
651
+ at,
652
+ at,
653
+ ESMLiveExportDependency.STATEMENT
654
+ );
655
+ if (!hot) {
656
+ recordOccurrence(
657
+ group.names[0],
658
+ at,
659
+ at,
660
+ ESMLiveExportDependency.INITIALIZE
661
+ );
662
+ }
663
+ } else if (declaration.kind === "let" && !hot) {
664
+ recordDeclaration(declaration, (name) =>
665
+ group.names.find((references) => references.name === name)
666
+ );
667
+ }
668
+ if (groups === undefined) groups = [];
669
+ groups.push(group);
670
+ untagged = true;
671
+ }
672
+ );
673
+
674
+ // Tagged once the walk starts: the pre-walks may still redefine the name,
675
+ // as the inner graph does for a declaration without an initializer.
676
+ parser.hooks.statement.tap(PLUGIN_NAME, () => {
677
+ if (!untagged) return;
678
+ untagged = false;
679
+ for (const group of /** @type {LiveExportGroup[]} */ (groups)) {
680
+ for (const references of group.names) {
681
+ parser.tagVariable(references.name, liveExportTag, references);
682
+ }
683
+ }
684
+ });
685
+
686
+ // Each `var` declaring hoisted names loses its keyword; one the group does not
687
+ // wholly own leaves its names uncounted, so they stay where they are.
688
+ parser.hooks.declarator.tap(
689
+ { name: PLUGIN_NAME, stage: -100 },
690
+ (declarator, statement) => {
691
+ if (statement.type === "VariableDeclaration") {
692
+ recordMirroredDeclarator(statement, declarator);
693
+ }
694
+ if (hot) return;
695
+ if (
696
+ statement.type !== "VariableDeclaration" ||
697
+ statement.kind !== "var" ||
698
+ declarator !== statement.declarations[0]
699
+ ) {
700
+ return;
701
+ }
702
+ const entries = recordDeclaration(
703
+ statement,
704
+ (name) =>
705
+ /** @type {LiveExportReferences | undefined} */ (
706
+ parser.getTagData(name, liveExportTag)
707
+ )
708
+ );
709
+ if (entries === undefined) return;
710
+ for (const references of entries) references.varDeclarators++;
711
+ // declared again, the binding is assigned again too
712
+ if (statement !== entries[0].group.declaration) {
713
+ entries[0].group.written = true;
714
+ }
715
+ }
716
+ );
717
+
718
+ parser.hooks.expression
719
+ .for(liveExportTag)
720
+ .tap(PLUGIN_NAME, (expression) => {
721
+ if (hot || expression.type !== "Identifier") return;
722
+ record(
723
+ /** @type {LiveExportReferences} */ (parser.currentTagData),
724
+ expression,
725
+ parser.scope.inShorthand === expression.name,
726
+ undefined
727
+ );
728
+ });
729
+
730
+ parser.hooks.pattern.for(liveExportTag).tap(PLUGIN_NAME, (pattern) => {
731
+ pendingPattern = pattern;
732
+ pendingShorthand = parser.scope.inShorthand === pattern.name;
733
+ });
734
+
735
+ parser.hooks.assign.for(liveExportTag).tap(
736
+ PLUGIN_NAME,
737
+ /**
738
+ * Records an assigned name; a destructuring target is claimed here, so the
739
+ * parser keeps it bound to the module-level declaration afterwards.
740
+ * @param {AssignmentExpression} expression the assignment
741
+ * @returns {true | void} true for a destructuring target
742
+ */
743
+ (expression) => {
744
+ const references = /** @type {LiveExportReferences} */ (
745
+ parser.currentTagData
746
+ );
747
+ recordMirroredWrite(references, expression);
748
+ if (hot) {
749
+ pendingPattern = undefined;
750
+ return expression.left.type === "Identifier" ? undefined : true;
751
+ }
752
+ if (expression.left.type === "Identifier") {
753
+ // a compound assignment such as `+=` names nothing
754
+ record(
755
+ references,
756
+ expression.left,
757
+ false,
758
+ expression.operator === "=" ||
759
+ expression.operator === "||=" ||
760
+ expression.operator === "&&=" ||
761
+ expression.operator === "??="
762
+ ? expression.right
763
+ : undefined
764
+ );
765
+ return;
766
+ }
767
+ if (recordPendingPattern(expression.left)) return true;
768
+ }
769
+ );
770
+
771
+ parser.hooks.write.for(liveExportTag).tap(
772
+ PLUGIN_NAME,
773
+ /**
774
+ * Records a name an update or a loop binding writes.
775
+ * @param {WriteStatement} node the writing construct
776
+ */
777
+ (node) => {
778
+ const references = /** @type {LiveExportReferences} */ (
779
+ parser.currentTagData
780
+ );
781
+ recordMirroredWrite(references, node);
782
+ if (hot) {
783
+ pendingPattern = undefined;
784
+ return;
785
+ }
786
+ const target =
787
+ node.type === "UpdateExpression" ? node.argument : node.left;
788
+ if (target.type === "Identifier") {
789
+ record(references, target, false, undefined);
790
+ } else {
791
+ recordPendingPattern(/** @type {Pattern} */ (target));
792
+ }
793
+ }
794
+ );
795
+
796
+ parser.hooks.finish.tap(PLUGIN_NAME, () => {
797
+ const claimed = groups;
798
+ const counted = varDeclarators;
799
+ // The parser outlives the module, so its tree is let go here.
800
+ program = undefined;
801
+ claimable = undefined;
802
+ varDeclarators = undefined;
803
+ varLinks = undefined;
804
+ groups = undefined;
805
+ pendingPattern = undefined;
806
+ if (claimed === undefined) return;
807
+ for (const group of claimed) {
808
+ // a hot update or an eval() call may write a binding the module leaves alone
809
+ if (!group.written && !hot && !usesEval) continue;
810
+ if (
811
+ group.declaration.type === "VariableDeclaration" &&
812
+ group.declaration.kind !== "var" &&
813
+ !group.declared
814
+ ) {
815
+ continue;
816
+ }
817
+ // A name redefined while the module was walked, or a `var` of it the walk
818
+ // did not see, left occurrences unrecorded.
819
+ const isVar =
820
+ group.declaration.type === "VariableDeclaration" &&
821
+ group.declaration.kind === "var";
822
+ if (
823
+ group.names.some(
824
+ (references) =>
825
+ parser.getTagData(references.name, liveExportTag) !==
826
+ references ||
827
+ (isVar &&
828
+ references.varDeclarators !==
829
+ /** @type {Map<string, number>} */ (counted).get(
830
+ references.name
831
+ ))
832
+ )
833
+ ) {
834
+ continue;
835
+ }
836
+ for (const references of group.names) {
837
+ for (let i = 0; i < evalCalls.length; i += 2) {
838
+ recordOccurrence(
839
+ references,
840
+ evalCalls[i],
841
+ evalCalls[i + 1],
842
+ ESMLiveExportDependency.SYNC
843
+ );
844
+ }
845
+ }
846
+ parser.state.current.addDependency(
847
+ new ESMLiveExportDependency(
848
+ group.names.map((references) => references.name),
849
+ // a copy holds no spare capacity from the pushes
850
+ [...group.occurrences],
851
+ [...group.mirrors],
852
+ usesEval,
853
+ hot,
854
+ group.earlyUse
855
+ )
856
+ );
857
+ }
858
+ });
859
+ }
860
+ }
861
+
862
+ module.exports = ESMLiveExportParserPlugin;