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
@@ -6,10 +6,9 @@
6
6
  "use strict";
7
7
 
8
8
  const { HookMap, SyncBailHook } = require("tapable");
9
- const NormalModule = require("../NormalModule");
10
- const Parser = require("../Parser");
11
9
  const WebpackError = require("../WebpackError");
12
- const StackedMap = require("../util/StackedMap");
10
+ const Parser = require("../module/Parser");
11
+ const binarySearchBounds = require("../util/binarySearchBounds");
13
12
  const {
14
13
  CompilerHintNotationRegExp,
15
14
  createMagicCommentContext,
@@ -17,7 +16,8 @@ const {
17
16
  parseCommentOptionsInRange
18
17
  } = require("../util/magicComment");
19
18
  const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
20
- const { nonASCIIwhitespace } = require("./parser");
19
+ const StackedMap = require("./StackedMap");
20
+ const { nonASCIIwhitespace } = require("./syntax-parser");
21
21
  const {
22
22
  BLOCK_DECLARATIONS,
23
23
  HOISTED_DECLARATIONS,
@@ -31,9 +31,10 @@ const {
31
31
  isIdentifierChar,
32
32
  overflowFrom,
33
33
  positionAt
34
- } = require("./syntax");
34
+ } = require("./syntax-parser");
35
35
 
36
- /** @import { EcmaVersion, ParserOptions, ParserPlugin } from "./syntax" */
36
+ /** @import { BuiltJavascriptModule } from "./JavascriptModule" */
37
+ /** @import { EcmaVersion, ParserOptions, ParserPlugin } from "./syntax-parser" */
37
38
  /**
38
39
  * @import {
39
40
  * AssignmentExpression,
@@ -108,38 +109,43 @@ const {
108
109
  * MaybeNamedClassDeclaration
109
110
  * } from "estree"
110
111
  */
111
- /** @import { DependencyLocation } from "../Dependency" */
112
+ /** @import { DependencyLocation } from "../graph/Dependency" */
113
+ /** @import { MagicCommentOptions } from "../util/magicComment" */
112
114
  /** @typedef {import("estree").Comment & { start: number, end: number, loc?: SourceLocation | null }} Comment */
113
115
  /**
114
116
  * Defines the shared type used by this module.
115
117
  * @template T
116
118
  * @typedef {import("tapable").AsArray<T>} AsArray<T>
117
119
  */
118
- /** @import { ParserState, PreparsedAst } from "../Parser" */
120
+ /** @import { ParserState, PreparsedAst } from "../module/Parser" */
119
121
 
120
- /** @import LocalModule from "../dependencies/LocalModule" */
122
+ /** @import LocalModule from "../dependencies/amd/LocalModule" */
121
123
  /**
122
124
  * @import {
123
- * HarmonyStarExportsList
124
- * } from "../dependencies/HarmonyExportImportedSpecifierDependency"
125
+ * ESMStarExportsList
126
+ * } from "../dependencies/esm/ESMExportImportedSpecifierDependency"
125
127
  */
126
128
 
127
129
  /**
128
130
  * Defines the known javascript parser state type used by this module.
131
+ * The `harmony*` properties forward to their `esm*` namesake.
129
132
  * @typedef {object} KnownJavascriptParserState
130
- * @property {Set<string>=} harmonyNamedExports
131
- * @property {InstanceType<HarmonyStarExportsList>=} harmonyStarExports
132
- * @property {number=} lastHarmonyImportOrder
133
+ * @property {Set<string>=} esmNamedExports
134
+ * @property {InstanceType<ESMStarExportsList>=} esmStarExports
135
+ * @property {number=} lastESMImportOrder
133
136
  * @property {LocalModule[]=} localModules
137
+ * @property {Set<string>=} harmonyNamedExports deprecated, use `esmNamedExports`
138
+ * @property {InstanceType<ESMStarExportsList>=} harmonyStarExports deprecated, use `esmStarExports`
139
+ * @property {number=} lastHarmonyImportOrder deprecated, use `lastESMImportOrder`
134
140
  */
135
141
 
136
- /** @typedef {ParserState & KnownJavascriptParserState} JavascriptParserState */
142
+ /** @typedef {ParserState<BuiltJavascriptModule> & KnownJavascriptParserState} JavascriptParserState */
137
143
 
138
144
  /** @import Compilation from "../Compilation" */
139
- /** @import Module from "../Module" */
145
+ /** @import Module from "../module/Module" */
140
146
 
141
147
  /** @typedef {{ name: string | VariableInfo, rootInfo: string | VariableInfo, getMembers: () => Members, getMembersOptionals: () => MembersOptionals, getMemberRanges: () => MemberRanges }} GetInfoResult */
142
- /** @typedef {{ consequent?: EXPECTED_OBJECT, alternate?: EXPECTED_OBJECT }} GuardCollection per-branch guard frames pushed onto the parser state guard stack */
148
+ /** @typedef {{ consequent?: GuardFrame, alternate?: GuardFrame }} GuardCollection per-branch guard frames pushed onto the parser state guard stack */
143
149
  /** @typedef {Statement | ModuleDeclaration | Expression | MaybeNamedFunctionDeclaration | MaybeNamedClassDeclaration} StatementPathItem */
144
150
  /** @typedef {(ident: string) => void} OnIdentString */
145
151
  /** @typedef {(ident: string, identifier: Identifier) => void} OnIdent */
@@ -176,6 +182,7 @@ const EMPTY_MODULE_DECLARATIONS = [];
176
182
  // object pattern, so a tap on that type is not served from the list.
177
183
  const BLOCK_DECLARATION_TYPES = new Set([
178
184
  "VariableDeclaration",
185
+ "FunctionDeclaration",
179
186
  "ClassDeclaration",
180
187
  "ExportNamedDeclaration",
181
188
  "ExportDefaultDeclaration"
@@ -273,7 +280,10 @@ const getImportAttributes = (node) => {
273
280
  result[key] = /** @type {string} */ (attribute.value.value);
274
281
  }
275
282
 
276
- if (/** @type {EXPECTED_ANY} */ (node.attributes)[LEGACY_ASSERT_ATTRIBUTES]) {
283
+ if (
284
+ /** @type {typeof node.attributes & { [LEGACY_ASSERT_ATTRIBUTES]?: boolean }} */
285
+ (node.attributes)[LEGACY_ASSERT_ATTRIBUTES]
286
+ ) {
277
287
  result._isLegacyAssert = true;
278
288
  }
279
289
 
@@ -365,20 +375,22 @@ class VariableInfo {
365
375
 
366
376
  /**
367
377
  * @import {
368
- * HarmonySettings
369
- * } from "../dependencies/HarmonyImportDependencyParserPlugin"
378
+ * ESMSettings
379
+ * } from "../dependencies/esm/ESMImportDependencyParserPlugin"
370
380
  */
371
- /** @import { ImportSettings } from "../dependencies/ImportParserPlugin" */
381
+ /** @import { ImportSettings } from "../dependencies/import/ImportParserPlugin" */
382
+ /** @import { GuardFrame } from "../dependencies/esm/ESMImportGuard" */
372
383
  /**
373
384
  * @import {
374
385
  * CommonJsImportSettings
375
- * } from "../dependencies/CommonJsImportsParserPlugin"
386
+ * } from "../dependencies/commonjs/CommonJsImportsParserPlugin"
376
387
  */
377
- /** @import { CompatibilitySettings } from "../CompatibilityPlugin" */
388
+ /** @import { CompatibilitySettings } from "./CompatibilityPlugin" */
378
389
  /** @import { TopLevelSymbol } from "../optimize/InnerGraph" */
379
390
 
380
- /** @typedef {HarmonySettings | ImportSettings | CommonJsImportSettings | TopLevelSymbol | CompatibilitySettings} KnownTagData */
381
- /** @typedef {KnownTagData | Record<string, EXPECTED_ANY>} TagData */
391
+ /** @typedef {ESMSettings | ImportSettings | CommonJsImportSettings | TopLevelSymbol | CompatibilitySettings} KnownTagData */
392
+ // The open branch is whatever a plugin tags a variable with.
393
+ /** @typedef {KnownTagData | EXPECTED_OBJECT} TagData */
382
394
 
383
395
  /**
384
396
  * Defines the tag info type used by this module.
@@ -554,123 +566,138 @@ const valueAsExpression = (value, expr, sideEffects) => {
554
566
  };
555
567
 
556
568
  // The constant operators, shared so evaluating `a - b` allocates no handler.
569
+ // JavaScript coerces any operand; each cast only lets TypeScript type the operator.
570
+
571
+ /** @typedef {ReturnType<BasicEvaluatedExpression["asCompileTimeValue"]>} CompileTimeValue */
557
572
 
558
573
  /**
559
- * @param {EXPECTED_ANY} l left operand
560
- * @param {EXPECTED_ANY} r right operand
561
- * @returns {EXPECTED_ANY} the result
574
+ * @param {CompileTimeValue} l left operand
575
+ * @param {CompileTimeValue} r right operand
576
+ * @returns {number | bigint} the result
562
577
  */
563
- const SUBTRACT = (l, r) => l - r;
578
+ const SUBTRACT = (l, r) =>
579
+ /** @type {number} */ (l) - /** @type {number} */ (r);
564
580
 
565
581
  /**
566
- * @param {EXPECTED_ANY} l left operand
567
- * @param {EXPECTED_ANY} r right operand
568
- * @returns {EXPECTED_ANY} the result
582
+ * @param {CompileTimeValue} l left operand
583
+ * @param {CompileTimeValue} r right operand
584
+ * @returns {number | bigint} the result
569
585
  */
570
- const MULTIPLY = (l, r) => l * r;
586
+ const MULTIPLY = (l, r) =>
587
+ /** @type {number} */ (l) * /** @type {number} */ (r);
571
588
 
572
589
  /**
573
- * @param {EXPECTED_ANY} l left operand
574
- * @param {EXPECTED_ANY} r right operand
575
- * @returns {EXPECTED_ANY} the result
590
+ * @param {CompileTimeValue} l left operand
591
+ * @param {CompileTimeValue} r right operand
592
+ * @returns {number | bigint} the result
576
593
  */
577
- const DIVIDE = (l, r) => l / r;
594
+ const DIVIDE = (l, r) => /** @type {number} */ (l) / /** @type {number} */ (r);
578
595
 
579
596
  /**
580
- * @param {EXPECTED_ANY} l left operand
581
- * @param {EXPECTED_ANY} r right operand
582
- * @returns {EXPECTED_ANY} the result
597
+ * @param {CompileTimeValue} l left operand
598
+ * @param {CompileTimeValue} r right operand
599
+ * @returns {number | bigint} the result
583
600
  */
584
- const POWER = (l, r) => l ** r;
601
+ const POWER = (l, r) => /** @type {number} */ (l) ** /** @type {number} */ (r);
585
602
 
586
603
  /**
587
- * @param {EXPECTED_ANY} l left operand
588
- * @param {EXPECTED_ANY} r right operand
589
- * @returns {EXPECTED_ANY} the result
604
+ * @param {CompileTimeValue} l left operand
605
+ * @param {CompileTimeValue} r right operand
606
+ * @returns {number | bigint} the result
590
607
  */
591
- const BITWISE_AND = (l, r) => l & r;
608
+ const BITWISE_AND = (l, r) =>
609
+ /** @type {number} */ (l) & /** @type {number} */ (r);
592
610
 
593
611
  /**
594
- * @param {EXPECTED_ANY} l left operand
595
- * @param {EXPECTED_ANY} r right operand
596
- * @returns {EXPECTED_ANY} the result
612
+ * @param {CompileTimeValue} l left operand
613
+ * @param {CompileTimeValue} r right operand
614
+ * @returns {number | bigint} the result
597
615
  */
598
- const BITWISE_OR = (l, r) => l | r;
616
+ const BITWISE_OR = (l, r) =>
617
+ /** @type {number} */ (l) | /** @type {number} */ (r);
599
618
 
600
619
  /**
601
- * @param {EXPECTED_ANY} l left operand
602
- * @param {EXPECTED_ANY} r right operand
603
- * @returns {EXPECTED_ANY} the result
620
+ * @param {CompileTimeValue} l left operand
621
+ * @param {CompileTimeValue} r right operand
622
+ * @returns {number | bigint} the result
604
623
  */
605
- const BITWISE_XOR = (l, r) => l ^ r;
624
+ const BITWISE_XOR = (l, r) =>
625
+ /** @type {number} */ (l) ^ /** @type {number} */ (r);
606
626
 
607
627
  /**
608
- * @param {EXPECTED_ANY} l left operand
609
- * @param {EXPECTED_ANY} r right operand
610
- * @returns {EXPECTED_ANY} the result
628
+ * @param {CompileTimeValue} l left operand
629
+ * @param {CompileTimeValue} r right operand
630
+ * @returns {number} the result
611
631
  */
612
- const UNSIGNED_SHIFT_RIGHT = (l, r) => l >>> r;
632
+ const UNSIGNED_SHIFT_RIGHT = (l, r) =>
633
+ /** @type {number} */ (l) >>> /** @type {number} */ (r);
613
634
 
614
635
  /**
615
- * @param {EXPECTED_ANY} l left operand
616
- * @param {EXPECTED_ANY} r right operand
617
- * @returns {EXPECTED_ANY} the result
636
+ * @param {CompileTimeValue} l left operand
637
+ * @param {CompileTimeValue} r right operand
638
+ * @returns {number | bigint} the result
618
639
  */
619
- const SHIFT_RIGHT = (l, r) => l >> r;
640
+ const SHIFT_RIGHT = (l, r) =>
641
+ /** @type {number} */ (l) >> /** @type {number} */ (r);
620
642
 
621
643
  /**
622
- * @param {EXPECTED_ANY} l left operand
623
- * @param {EXPECTED_ANY} r right operand
624
- * @returns {EXPECTED_ANY} the result
644
+ * @param {CompileTimeValue} l left operand
645
+ * @param {CompileTimeValue} r right operand
646
+ * @returns {number | bigint} the result
625
647
  */
626
- const SHIFT_LEFT = (l, r) => l << r;
648
+ const SHIFT_LEFT = (l, r) =>
649
+ /** @type {number} */ (l) << /** @type {number} */ (r);
627
650
 
628
651
  /**
629
- * @param {EXPECTED_ANY} l left operand
630
- * @param {EXPECTED_ANY} r right operand
631
- * @returns {EXPECTED_ANY} the result
652
+ * @param {CompileTimeValue} l left operand
653
+ * @param {CompileTimeValue} r right operand
654
+ * @returns {boolean} the result
632
655
  */
633
- const LESS_THAN = (l, r) => l < r;
656
+ const LESS_THAN = (l, r) =>
657
+ /** @type {number} */ (l) < /** @type {number} */ (r);
634
658
 
635
659
  /**
636
- * @param {EXPECTED_ANY} l left operand
637
- * @param {EXPECTED_ANY} r right operand
638
- * @returns {EXPECTED_ANY} the result
660
+ * @param {CompileTimeValue} l left operand
661
+ * @param {CompileTimeValue} r right operand
662
+ * @returns {boolean} the result
639
663
  */
640
- const GREATER_THAN = (l, r) => l > r;
664
+ const GREATER_THAN = (l, r) =>
665
+ /** @type {number} */ (l) > /** @type {number} */ (r);
641
666
 
642
667
  /**
643
- * @param {EXPECTED_ANY} l left operand
644
- * @param {EXPECTED_ANY} r right operand
645
- * @returns {EXPECTED_ANY} the result
668
+ * @param {CompileTimeValue} l left operand
669
+ * @param {CompileTimeValue} r right operand
670
+ * @returns {boolean} the result
646
671
  */
647
- const LESS_THAN_OR_EQUAL = (l, r) => l <= r;
672
+ const LESS_THAN_OR_EQUAL = (l, r) =>
673
+ /** @type {number} */ (l) <= /** @type {number} */ (r);
648
674
 
649
675
  /**
650
- * @param {EXPECTED_ANY} l left operand
651
- * @param {EXPECTED_ANY} r right operand
652
- * @returns {EXPECTED_ANY} the result
676
+ * @param {CompileTimeValue} l left operand
677
+ * @param {CompileTimeValue} r right operand
678
+ * @returns {boolean} the result
653
679
  */
654
- const GREATER_THAN_OR_EQUAL = (l, r) => l >= r;
680
+ const GREATER_THAN_OR_EQUAL = (l, r) =>
681
+ /** @type {number} */ (l) >= /** @type {number} */ (r);
655
682
 
656
683
  /**
657
- * @param {EXPECTED_ANY} v operand
658
- * @returns {EXPECTED_ANY} the result
684
+ * @param {CompileTimeValue} v operand
685
+ * @returns {number | bigint} the result
659
686
  */
660
- const BITWISE_NOT = (v) => ~v;
687
+ const BITWISE_NOT = (v) => ~(/** @type {number} */ (v));
661
688
 
662
689
  /**
663
- * @param {EXPECTED_ANY} v operand
664
- * @returns {EXPECTED_ANY} the result
690
+ * @param {CompileTimeValue} v operand
691
+ * @returns {number} the result
665
692
  */
666
693
  // eslint-disable-next-line no-implicit-coercion
667
- const TO_NUMBER = (v) => +v;
694
+ const TO_NUMBER = (v) => +(/** @type {number} */ (v));
668
695
 
669
696
  /**
670
- * @param {EXPECTED_ANY} v operand
671
- * @returns {EXPECTED_ANY} the result
697
+ * @param {CompileTimeValue} v operand
698
+ * @returns {number | bigint} the result
672
699
  */
673
- const NEGATE = (v) => -v;
700
+ const NEGATE = (v) => -(/** @type {number} */ (v));
674
701
 
675
702
  /**
676
703
  * Evaluates a binary expression if and only if it is a const operation (e.g. 1 + 2, "a" + "b", etc.).
@@ -1061,7 +1088,9 @@ const collectHoistedDeclaration = (statement, hoisted) => {
1061
1088
  */
1062
1089
  const moduleDeclarationsOf = (ast, trusted) => {
1063
1090
  if (trusted) {
1064
- const recorded = /** @type {EXPECTED_ANY} */ (ast)[MODULE_DECLARATIONS];
1091
+ const recorded =
1092
+ /** @type {Program & { [MODULE_DECLARATIONS]?: ModuleDeclarations }} */
1093
+ (ast)[MODULE_DECLARATIONS];
1065
1094
  if (recorded !== undefined) return recorded;
1066
1095
  }
1067
1096
  /** @type {ModuleDeclarations} */
@@ -1086,12 +1115,43 @@ const moduleDeclarationsOf = (ast, trusted) => {
1086
1115
  */
1087
1116
  const hoistedDeclarationsOf = (node, trusted) => {
1088
1117
  if (trusted) {
1089
- const recorded = /** @type {EXPECTED_ANY} */ (node)[HOISTED_DECLARATIONS];
1118
+ const recorded =
1119
+ /** @type {(Program | BlockStatement) & { [HOISTED_DECLARATIONS]?: HoistedDeclarations }} */
1120
+ (node)[HOISTED_DECLARATIONS];
1090
1121
  if (recorded !== undefined) return recorded;
1091
1122
  }
1092
1123
  return collectHoistedDeclarations(node.body, EMPTY_HOISTED_DECLARATIONS);
1093
1124
  };
1094
1125
 
1126
+ /**
1127
+ * Whether a statement is one of the list's own, or the declaration of an
1128
+ * `export` that is, rather than nested in one of them. It is found by its start
1129
+ * offset since the list is in source order.
1130
+ * @param {(Statement | ModuleDeclaration)[]} statements the list
1131
+ * @param {Statement | ModuleDeclaration | MaybeNamedFunctionDeclaration} statement the statement to find
1132
+ * @returns {boolean} whether the list holds it directly
1133
+ */
1134
+ const holdsStatement = (statements, statement) => {
1135
+ const start = /** @type {Range} */ (statement.range)[0];
1136
+ let low = 0;
1137
+ let high = statements.length - 1;
1138
+ while (low <= high) {
1139
+ const middle = (low + high) >>> 1;
1140
+ const candidate = statements[middle];
1141
+ if (candidate === statement) return true;
1142
+ if (/** @type {Range} */ (candidate.range)[0] < start) low = middle + 1;
1143
+ else high = middle - 1;
1144
+ }
1145
+ // the last statement starting before it is the one that could hold it
1146
+ const holder = high >= 0 ? statements[high] : undefined;
1147
+ return (
1148
+ holder !== undefined &&
1149
+ (holder.type === "ExportNamedDeclaration" ||
1150
+ holder.type === "ExportDefaultDeclaration") &&
1151
+ holder.declaration === statement
1152
+ );
1153
+ };
1154
+
1095
1155
  /**
1096
1156
  * Which statements of a list declare into its block scope, scanned for an AST
1097
1157
  * some other parser built. The parser's own record is read instead when there
@@ -1112,6 +1172,14 @@ const collectBlockDeclarations = (statements) => {
1112
1172
  return overflow === undefined ? mask : overflow;
1113
1173
  };
1114
1174
 
1175
+ /**
1176
+ * @param {Comment} comment comment to compare
1177
+ * @param {number} position source offset
1178
+ * @returns {number} comparison of the comment end with the offset
1179
+ */
1180
+ const compareCommentEnd = (comment, position) =>
1181
+ /** @type {Range} */ (comment.range)[1] - position;
1182
+
1115
1183
  /**
1116
1184
  * Whether the source between two offsets is whitespace only.
1117
1185
  * @param {string} source the module source
@@ -1157,6 +1225,9 @@ const STRICT_MODE_OUTPUT_REASON =
1157
1225
  const MODULE_GOAL_OUTPUT_REASON =
1158
1226
  'The output is an ES module, where "await" is a reserved word.';
1159
1227
 
1228
+ /**
1229
+ * @extends {Parser<BuiltJavascriptModule>}
1230
+ */
1160
1231
  class JavascriptParser extends Parser {
1161
1232
  /**
1162
1233
  * Creates an instance of JavascriptParser.
@@ -1202,13 +1273,13 @@ class JavascriptParser extends Parser {
1202
1273
  * Every statement the hoisting pass reads, which a tap on this turns
1203
1274
  * back into a walk of them all. Tap `preStatementByType` instead.
1204
1275
  * @type {SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>}
1205
- * @deprecated TODO webpack 6: remove, with the statement walk it turns on
1276
+ * @deprecated TODO in the next major release: remove, with the statement walk it turns on
1206
1277
  */
1207
1278
  preStatement: new SyncBailHook(["statement"]),
1208
1279
  /**
1209
1280
  * Each declaration the parser records: a variable, function or class
1210
1281
  * one. Any other type turns the pass back into a walk of every
1211
- * statement, and goes away with that walk in webpack 6.
1282
+ * statement, and goes away with that walk in the next major release.
1212
1283
  * @type {HookMap<SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>>}
1213
1284
  * @since 5.109.0
1214
1285
  */
@@ -1218,13 +1289,13 @@ class JavascriptParser extends Parser {
1218
1289
  * Every statement the block pass reads, which a tap on this turns back
1219
1290
  * into a walk of them all. Tap `blockPreStatementByType` instead.
1220
1291
  * @type {SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>}
1221
- * @deprecated TODO webpack 6: remove, with the statement walk it turns on
1292
+ * @deprecated TODO in the next major release: remove, with the statement walk it turns on
1222
1293
  */
1223
1294
  blockPreStatement: new SyncBailHook(["declaration"]),
1224
1295
  /**
1225
1296
  * Each statement the parser records for the block pass: a variable, class
1226
1297
  * or export declaration. Any other type turns the pass back into a walk
1227
- * of every statement, and goes away with that walk in webpack 6.
1298
+ * of every statement, and goes away with that walk in the next major release.
1228
1299
  * @type {HookMap<SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>>}
1229
1300
  * @since 5.109.0
1230
1301
  */
@@ -1423,9 +1494,13 @@ class JavascriptParser extends Parser {
1423
1494
  this.options = options;
1424
1495
 
1425
1496
  /** @type {ScopeInfo} */
1426
- this.scope = /** @type {EXPECTED_ANY} */ (undefined);
1497
+ this.scope = /** @type {ScopeInfo} */ (
1498
+ /** @type {ScopeInfo | undefined} */ (undefined)
1499
+ );
1427
1500
  /** @type {JavascriptParserState} */
1428
- this.state = /** @type {EXPECTED_ANY} */ (undefined);
1501
+ this.state = /** @type {JavascriptParserState} */ (
1502
+ /** @type {JavascriptParserState | undefined} */ (undefined)
1503
+ );
1429
1504
  /** @type {Comment[] | undefined} */
1430
1505
  this.comments = undefined;
1431
1506
  // ASI overrides keyed by statement-end offset: true forces an ASI
@@ -1439,6 +1514,9 @@ class JavascriptParser extends Parser {
1439
1514
  this.prevStatement = undefined;
1440
1515
  /** @type {boolean} */
1441
1516
  this._hasParserRecord = false;
1517
+ // the statements of the scope last hoisted into, which its block pass reads next
1518
+ /** @type {(Statement | ModuleDeclaration)[] | undefined} */
1519
+ this._scopeStatements = undefined;
1442
1520
  // BACKWARD-COMPAT START
1443
1521
 
1444
1522
  // WHY: the hoisting pass reaches declarations alone, so a tap that
@@ -2102,7 +2180,7 @@ class JavascriptParser extends Parser {
2102
2180
  const info = this.getVariableInfo(/** @type {Identifier} */ (expr).name);
2103
2181
  if (
2104
2182
  typeof info === "string" ||
2105
- (info instanceof VariableInfo &&
2183
+ (JavascriptParser.isVariableInfo(info) &&
2106
2184
  (info.isFree() ||
2107
2185
  info.isTagged() ||
2108
2186
  // Walk `tagInfo` in `callHooksForInfo` if tagInfo is present.
@@ -2121,7 +2199,8 @@ class JavascriptParser extends Parser {
2121
2199
  const info = this.getVariableInfo("this");
2122
2200
  if (
2123
2201
  typeof info === "string" ||
2124
- (info instanceof VariableInfo && (info.isFree() || info.isTagged()))
2202
+ (JavascriptParser.isVariableInfo(info) &&
2203
+ (info.isFree() || info.isTagged()))
2125
2204
  ) {
2126
2205
  return {
2127
2206
  name: info,
@@ -2683,6 +2762,7 @@ class JavascriptParser extends Parser {
2683
2762
  * @param {Program | BlockStatement} node the node owning the scope
2684
2763
  */
2685
2764
  _preWalkScope(node) {
2765
+ this._scopeStatements = node.body;
2686
2766
  // BACKWARD-COMPAT START
2687
2767
  if (this._needsFullPreWalk || this.hooks.preStatement.taps.length !== 0) {
2688
2768
  if (node.type === "Program") this.preWalkStatements(node.body);
@@ -2710,12 +2790,31 @@ class JavascriptParser extends Parser {
2710
2790
  }
2711
2791
  }
2712
2792
 
2793
+ /**
2794
+ * Whether a function declaration stays in its block rather than hoisting to
2795
+ * the scope last pre-walked, which only sloppy-mode Annex B lets it do.
2796
+ * @param {FunctionDeclaration | MaybeNamedFunctionDeclaration} statement function declaration
2797
+ * @returns {boolean} whether its block, not the scope, binds it
2798
+ */
2799
+ _isBlockScopedFunction(statement) {
2800
+ const statements = this._scopeStatements;
2801
+ // WHY: strictness is read here, not in the parser: `javascript/auto`
2802
+ // reads a script as a strict module first.
2803
+ return (
2804
+ statements !== undefined &&
2805
+ (this.scope.isStrict ||
2806
+ statement.generator === true ||
2807
+ statement.async === true) &&
2808
+ !holdsStatement(statements, statement)
2809
+ );
2810
+ }
2811
+
2713
2812
  // BACKWARD-COMPAT START
2714
2813
  /**
2715
2814
  * Walk every statement of a scope to declare what hoists to it. Only a tap
2716
2815
  * on the deprecated `preStatement` hook asks for this.
2717
2816
  * @param {(Statement | ModuleDeclaration)[]} statements statements
2718
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2817
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2719
2818
  */
2720
2819
  preWalkStatements(statements) {
2721
2820
  for (let index = 0, len = statements.length; index < len; index++) {
@@ -2726,7 +2825,7 @@ class JavascriptParser extends Parser {
2726
2825
  /**
2727
2826
  * Pre walk block statement.
2728
2827
  * @param {BlockStatement} statement block statement
2729
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2828
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2730
2829
  */
2731
2830
  preWalkBlockStatement(statement) {
2732
2831
  this.preWalkStatements(statement.body);
@@ -2735,7 +2834,7 @@ class JavascriptParser extends Parser {
2735
2834
  /**
2736
2835
  * Pre walk if statement.
2737
2836
  * @param {IfStatement} statement if statement
2738
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2837
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2739
2838
  */
2740
2839
  preWalkIfStatement(statement) {
2741
2840
  this.preWalkStatement(statement.consequent);
@@ -2747,7 +2846,7 @@ class JavascriptParser extends Parser {
2747
2846
  /**
2748
2847
  * Pre walk labeled statement.
2749
2848
  * @param {LabeledStatement} statement labeled statement
2750
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2849
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2751
2850
  */
2752
2851
  preWalkLabeledStatement(statement) {
2753
2852
  this.preWalkStatement(statement.body);
@@ -2756,7 +2855,7 @@ class JavascriptParser extends Parser {
2756
2855
  /**
2757
2856
  * Pre walk with statement.
2758
2857
  * @param {WithStatement} statement with statement
2759
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2858
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2760
2859
  */
2761
2860
  preWalkWithStatement(statement) {
2762
2861
  this.preWalkStatement(statement.body);
@@ -2765,7 +2864,7 @@ class JavascriptParser extends Parser {
2765
2864
  /**
2766
2865
  * Pre walk switch statement.
2767
2866
  * @param {SwitchStatement} statement switch statement
2768
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2867
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2769
2868
  */
2770
2869
  preWalkSwitchStatement(statement) {
2771
2870
  this.preWalkSwitchCases(statement.cases);
@@ -2774,7 +2873,7 @@ class JavascriptParser extends Parser {
2774
2873
  /**
2775
2874
  * Pre walk switch cases.
2776
2875
  * @param {SwitchCase[]} switchCases switch cases
2777
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2876
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2778
2877
  */
2779
2878
  preWalkSwitchCases(switchCases) {
2780
2879
  for (let index = 0, len = switchCases.length; index < len; index++) {
@@ -2785,7 +2884,7 @@ class JavascriptParser extends Parser {
2785
2884
  /**
2786
2885
  * Pre walk try statement.
2787
2886
  * @param {TryStatement} statement try statement
2788
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2887
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2789
2888
  */
2790
2889
  preWalkTryStatement(statement) {
2791
2890
  this.preWalkStatement(statement.block);
@@ -2796,7 +2895,7 @@ class JavascriptParser extends Parser {
2796
2895
  /**
2797
2896
  * Pre walk catch clause.
2798
2897
  * @param {CatchClause} catchClause catch clause
2799
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2898
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2800
2899
  */
2801
2900
  preWalkCatchClause(catchClause) {
2802
2901
  this.preWalkStatement(catchClause.body);
@@ -2805,7 +2904,7 @@ class JavascriptParser extends Parser {
2805
2904
  /**
2806
2905
  * Pre walk while statement.
2807
2906
  * @param {WhileStatement} statement while statement
2808
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2907
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2809
2908
  */
2810
2909
  preWalkWhileStatement(statement) {
2811
2910
  this.preWalkStatement(statement.body);
@@ -2814,7 +2913,7 @@ class JavascriptParser extends Parser {
2814
2913
  /**
2815
2914
  * Pre walk do while statement.
2816
2915
  * @param {DoWhileStatement} statement do while statement
2817
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2916
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2818
2917
  */
2819
2918
  preWalkDoWhileStatement(statement) {
2820
2919
  this.preWalkStatement(statement.body);
@@ -2823,7 +2922,7 @@ class JavascriptParser extends Parser {
2823
2922
  /**
2824
2923
  * Pre walk for statement.
2825
2924
  * @param {ForStatement} statement for statement
2826
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2925
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2827
2926
  */
2828
2927
  preWalkForStatement(statement) {
2829
2928
  if (statement.init && statement.init.type === "VariableDeclaration") {
@@ -2835,7 +2934,7 @@ class JavascriptParser extends Parser {
2835
2934
  /**
2836
2935
  * Pre walk for in statement.
2837
2936
  * @param {ForInStatement} statement for in statement
2838
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2937
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2839
2938
  */
2840
2939
  preWalkForInStatement(statement) {
2841
2940
  if (statement.left.type === "VariableDeclaration") {
@@ -2847,7 +2946,7 @@ class JavascriptParser extends Parser {
2847
2946
  /**
2848
2947
  * Pre walk for of statement. `for await` is reported by the walk, not here.
2849
2948
  * @param {ForOfStatement} statement for of statement
2850
- * @deprecated TODO webpack 6: remove, with the `preStatement` hook
2949
+ * @deprecated TODO in the next major release: remove, with the `preStatement` hook
2851
2950
  */
2852
2951
  preWalkForOfStatement(statement) {
2853
2952
  if (statement.left.type === "VariableDeclaration") {
@@ -2859,7 +2958,7 @@ class JavascriptParser extends Parser {
2859
2958
  /**
2860
2959
  * Scan every top-level statement for the program's module declarations.
2861
2960
  * The parser records them now, so nothing inside webpack scans for them.
2862
- * @deprecated TODO webpack 6: remove
2961
+ * @deprecated TODO in the next major release: remove
2863
2962
  * @param {(Statement | ModuleDeclaration)[]} statements statements
2864
2963
  */
2865
2964
  modulePreWalkStatements(statements) {
@@ -2883,7 +2982,7 @@ class JavascriptParser extends Parser {
2883
2982
  * Walk every statement of a list to declare what it binds. Only a tap on the
2884
2983
  * deprecated `blockPreStatement` hook asks for this.
2885
2984
  * @param {(Statement | ModuleDeclaration)[]} statements statements
2886
- * @deprecated TODO webpack 6: remove, with the `blockPreStatement` hook
2985
+ * @deprecated TODO in the next major release: remove, with the `blockPreStatement` hook
2887
2986
  */
2888
2987
  blockPreWalkStatements(statements) {
2889
2988
  for (let index = 0, len = statements.length; index < len; index++) {
@@ -2912,7 +3011,9 @@ class JavascriptParser extends Parser {
2912
3011
  /** @type {BlockDeclarations | undefined} */
2913
3012
  let recorded;
2914
3013
  if (this._hasParserRecord) {
2915
- recorded = /** @type {EXPECTED_ANY} */ (node)[BLOCK_DECLARATIONS];
3014
+ recorded =
3015
+ /** @type {typeof node & { [BLOCK_DECLARATIONS]?: BlockDeclarations }} */
3016
+ (node)[BLOCK_DECLARATIONS];
2916
3017
  // 72.8% of the lists a build reads declare nothing, and saying so is
2917
3018
  // the whole pass for them
2918
3019
  if (recorded === 0) return;
@@ -2993,8 +3094,18 @@ class JavascriptParser extends Parser {
2993
3094
  let bail =
2994
3095
  preStatement.taps.length !== 0 ? preStatement.call(statement) : undefined;
2995
3096
  if (!bail) {
2996
- const typed = preStatementByType.get(statement.type);
2997
- if (typed !== undefined) bail = typed.call(statement);
3097
+ // WHY: a block-scoped function is the block pass's; the full pre-walk
3098
+ // still shows it to `preStatement`, but not to the typed hooks, which
3099
+ // would declare it in the scope (`InnerGraphPlugin` tags it top-level).
3100
+ if (
3101
+ statement.type === "FunctionDeclaration" &&
3102
+ this._isBlockScopedFunction(statement)
3103
+ ) {
3104
+ bail = true;
3105
+ } else {
3106
+ const typed = preStatementByType.get(statement.type);
3107
+ if (typed !== undefined) bail = typed.call(statement);
3108
+ }
2998
3109
  }
2999
3110
  if (bail) {
3000
3111
  this.prevStatement =
@@ -3084,6 +3195,9 @@ class JavascriptParser extends Parser {
3084
3195
  case "ClassDeclaration":
3085
3196
  this.blockPreWalkClassDeclaration(statement);
3086
3197
  break;
3198
+ case "FunctionDeclaration":
3199
+ this.blockPreWalkFunctionDeclaration(statement);
3200
+ break;
3087
3201
  case "ExportNamedDeclaration":
3088
3202
  this.blockPreWalkExportNamedDeclaration(statement);
3089
3203
  break;
@@ -3217,7 +3331,7 @@ class JavascriptParser extends Parser {
3217
3331
  /**
3218
3332
  * Walks a conditional branch with its guard frame (if any) pushed onto the
3219
3333
  * parser-state guard stack for the duration of the branch body.
3220
- * @param {EXPECTED_OBJECT | undefined | null} frame guard frame, or falsy when the branch is unguarded
3334
+ * @param {GuardFrame | undefined | null} frame guard frame, or falsy when the branch is unguarded
3221
3335
  * @param {() => void} walk branch walk
3222
3336
  * @returns {void}
3223
3337
  */
@@ -3530,6 +3644,17 @@ class JavascriptParser extends Parser {
3530
3644
  }
3531
3645
  }
3532
3646
 
3647
+ /**
3648
+ * Bind a function declaration in the block holding it, when it does not
3649
+ * hoist to the enclosing scope.
3650
+ * @param {FunctionDeclaration | MaybeNamedFunctionDeclaration} statement function declaration
3651
+ */
3652
+ blockPreWalkFunctionDeclaration(statement) {
3653
+ if (statement.id && this._isBlockScopedFunction(statement)) {
3654
+ this.defineVariable(statement.id.name);
3655
+ }
3656
+ }
3657
+
3533
3658
  /**
3534
3659
  * Walk function declaration.
3535
3660
  * @param {FunctionDeclaration | MaybeNamedFunctionDeclaration} statement function declaration
@@ -4370,7 +4495,7 @@ class JavascriptParser extends Parser {
4370
4495
  * @param {Literal} expression literal
4371
4496
  */
4372
4497
  _checkStrictModeLiteral(expression) {
4373
- const raw = /** @type {string | undefined} */ (expression.raw);
4498
+ const raw = expression.raw;
4374
4499
  if (raw === undefined) return;
4375
4500
  if (typeof expression.value === "number") {
4376
4501
  // Legacy octal (`0777`) or non-octal decimal (`08`) integer literal.
@@ -4627,7 +4752,7 @@ class JavascriptParser extends Parser {
4627
4752
  this._walkPatternWriteMembers(
4628
4753
  property.type === "RestElement"
4629
4754
  ? property.argument
4630
- : /** @type {Pattern} */ (property.value),
4755
+ : property.value,
4631
4756
  node
4632
4757
  );
4633
4758
  }
@@ -5600,7 +5725,7 @@ class JavascriptParser extends Parser {
5600
5725
  if (typeof info === "string") {
5601
5726
  name = info;
5602
5727
  } else {
5603
- if (!(info instanceof VariableInfo)) {
5728
+ if (!JavascriptParser.isVariableInfo(info)) {
5604
5729
  if (defined !== undefined) {
5605
5730
  return defined();
5606
5731
  }
@@ -5646,7 +5771,7 @@ class JavascriptParser extends Parser {
5646
5771
  */
5647
5772
  _hasHooksForInfo(hookMap, info) {
5648
5773
  if (typeof info === "string") return hookMap.get(info) !== undefined;
5649
- if (!(info instanceof VariableInfo)) return false;
5774
+ if (!JavascriptParser.isVariableInfo(info)) return false;
5650
5775
  let tagInfo = info.tagInfo;
5651
5776
  while (tagInfo !== undefined) {
5652
5777
  if (hookMap.get(tagInfo.tag) !== undefined) return true;
@@ -5710,7 +5835,7 @@ class JavascriptParser extends Parser {
5710
5835
  if (typeof info === "string") {
5711
5836
  name = info;
5712
5837
  } else {
5713
- if (!(info instanceof VariableInfo)) {
5838
+ if (!JavascriptParser.isVariableInfo(info)) {
5714
5839
  return;
5715
5840
  }
5716
5841
  let tagInfo = info.tagInfo;
@@ -5887,6 +6012,37 @@ class JavascriptParser extends Parser {
5887
6012
  return oldScope;
5888
6013
  }
5889
6014
 
6015
+ /**
6016
+ * The directive a statement spells, or `undefined` when it is not one. An
6017
+ * AST webpack did not parse may leave the metadata off a directive, so the
6018
+ * spelling is recovered from the literal itself there.
6019
+ * @param {Directive | Statement | ModuleDeclaration} statement statement
6020
+ * @returns {string | undefined} the spelling between the quotes
6021
+ */
6022
+ getDirective(statement) {
6023
+ if (statement.type !== "ExpressionStatement") return undefined;
6024
+ const directive = /** @type {Directive} */ (statement).directive;
6025
+ if (directive !== undefined || this._hasParserRecord) return directive;
6026
+ const expression = statement.expression;
6027
+ if (expression.type !== "Literal" || typeof expression.value !== "string") {
6028
+ return undefined;
6029
+ }
6030
+ // a parenthesized string is an expression rather than a directive, and
6031
+ // only the statement says so — the literal starts inside the parentheses
6032
+ if (
6033
+ statement.range !== undefined &&
6034
+ expression.range !== undefined &&
6035
+ statement.range[0] !== expression.range[0]
6036
+ ) {
6037
+ return undefined;
6038
+ }
6039
+ // the raw text keeps an escape unexpanded, which is what separates a
6040
+ // directive from a string that merely reads like one
6041
+ return expression.raw === undefined
6042
+ ? expression.value
6043
+ : expression.raw.slice(1, -1);
6044
+ }
6045
+
5890
6046
  /**
5891
6047
  * Processes the provided statement.
5892
6048
  * @param {(Directive | Statement | ModuleDeclaration)[]} statements statements
@@ -5901,11 +6057,17 @@ class JavascriptParser extends Parser {
5901
6057
  return;
5902
6058
  }
5903
6059
  const value = /** @type {Literal} */ (statement.expression).value;
5904
- if (value === "use strict") {
5905
- this.scope.isStrict = true;
5906
- } else if (value === "use asm") {
6060
+ if (value === "use asm") {
5907
6061
  this.scope.isAsmJs = true;
5908
6062
  }
6063
+ for (const directiveStatement of statements) {
6064
+ const directive = this.getDirective(directiveStatement);
6065
+ if (directive === undefined) break;
6066
+ if (directive === "use strict") {
6067
+ this.scope.isStrict = true;
6068
+ break;
6069
+ }
6070
+ }
5909
6071
  }
5910
6072
 
5911
6073
  /**
@@ -6240,7 +6402,7 @@ class JavascriptParser extends Parser {
6240
6402
  terminated: undefined,
6241
6403
  definitions: new StackedMap()
6242
6404
  };
6243
- this.state = state;
6405
+ this.state = /** @type {JavascriptParserState} */ (state);
6244
6406
  this.comments = comments;
6245
6407
  this.semicolons = undefined;
6246
6408
  // evaluating a defined, untagged identifier can only fall through when
@@ -6627,7 +6789,9 @@ class JavascriptParser extends Parser {
6627
6789
  }
6628
6790
  const loc = node.loc;
6629
6791
  if (!loc) {
6630
- return /** @type {DependencyLocation} */ (/** @type {unknown} */ (loc));
6792
+ return /** @type {DependencyLocation} */ (
6793
+ /** @type {DependencyLocation | null | undefined} */ (loc)
6794
+ );
6631
6795
  }
6632
6796
  // a plain copy: a foreign parser's location class must not reach the cache
6633
6797
  return {
@@ -6672,7 +6836,11 @@ class JavascriptParser extends Parser {
6672
6836
  const comments = this.comments;
6673
6837
  if (comments === undefined) return position;
6674
6838
  const source = this._source;
6675
- for (let index = comments.length - 1; index >= 0; index--) {
6839
+ for (
6840
+ let index = binarySearchBounds.le(comments, position, compareCommentEnd);
6841
+ index >= 0;
6842
+ index--
6843
+ ) {
6676
6844
  const range = /** @type {Range} */ (comments[index].range);
6677
6845
  if (range[1] > position) continue;
6678
6846
  // with no source to read, nothing can be ruled out, so the run is
@@ -6870,7 +7038,7 @@ class JavascriptParser extends Parser {
6870
7038
  */
6871
7039
  getTagData(name, tag) {
6872
7040
  const info = this.scope.definitions.get(name);
6873
- if (info instanceof VariableInfo) {
7041
+ if (JavascriptParser.isVariableInfo(info)) {
6874
7042
  let tagInfo = info.tagInfo;
6875
7043
  while (tagInfo !== undefined) {
6876
7044
  if (tagInfo.tag === tag) return tagInfo.data;
@@ -6896,7 +7064,7 @@ class JavascriptParser extends Parser {
6896
7064
  data,
6897
7065
  next: undefined
6898
7066
  });
6899
- } else if (oldInfo instanceof VariableInfo) {
7067
+ } else if (JavascriptParser.isVariableInfo(oldInfo)) {
6900
7068
  newInfo = new VariableInfo(
6901
7069
  oldInfo.declaredScope,
6902
7070
  oldInfo.name,
@@ -6926,7 +7094,7 @@ class JavascriptParser extends Parser {
6926
7094
  const oldInfo = this.scope.definitions.get(name);
6927
7095
  // Don't redefine variable in same scope to keep existing tags
6928
7096
  if (
6929
- oldInfo instanceof VariableInfo &&
7097
+ JavascriptParser.isVariableInfo(oldInfo) &&
6930
7098
  oldInfo.declaredScope === this.scope
6931
7099
  ) {
6932
7100
  return;
@@ -6952,7 +7120,7 @@ class JavascriptParser extends Parser {
6952
7120
  isVariableDefined(name) {
6953
7121
  const info = this.scope.definitions.get(name);
6954
7122
  if (info === undefined) return false;
6955
- if (info instanceof VariableInfo) {
7123
+ if (JavascriptParser.isVariableInfo(info)) {
6956
7124
  return !info.isFree();
6957
7125
  }
6958
7126
  return true;
@@ -6968,7 +7136,7 @@ class JavascriptParser extends Parser {
6968
7136
  _isDefinedPlainVariable(name) {
6969
7137
  const info = this.scope.definitions.get(name);
6970
7138
  if (info === undefined) return false;
6971
- if (info instanceof VariableInfo) {
7139
+ if (JavascriptParser.isVariableInfo(info)) {
6972
7140
  return !(info.isFree() || info.isTagged() || info.tagInfo !== undefined);
6973
7141
  }
6974
7142
  return true;
@@ -7031,7 +7199,7 @@ class JavascriptParser extends Parser {
7031
7199
  /**
7032
7200
  * Parses comment options.
7033
7201
  * @param {Range} range range of the comment
7034
- * @returns {{ options: Record<string, EXPECTED_ANY> | null, errors: (Error & { comment: Comment })[] | null }} result
7202
+ * @returns {{ options: MagicCommentOptions | null, errors: (Error & { comment: Comment })[] | null }} result
7035
7203
  */
7036
7204
  parseCommentOptions(range) {
7037
7205
  return parseCommentOptionsInRange(
@@ -7131,7 +7299,7 @@ class JavascriptParser extends Parser {
7131
7299
  const info = this.getVariableInfo(varName);
7132
7300
  /** @type {string} */
7133
7301
  let name;
7134
- if (info instanceof VariableInfo && info.name) {
7302
+ if (JavascriptParser.isVariableInfo(info) && info.name) {
7135
7303
  if (!info.isFree()) return;
7136
7304
  name = info.name;
7137
7305
  } else if (typeof info !== "string") {
@@ -7151,7 +7319,7 @@ class JavascriptParser extends Parser {
7151
7319
  const info = this.getVariableInfo(varName);
7152
7320
  /** @type {string} */
7153
7321
  let name;
7154
- if (info instanceof VariableInfo && info.name) {
7322
+ if (JavascriptParser.isVariableInfo(info) && info.name) {
7155
7323
  if (!info.isFree() && !info.isTagged()) return;
7156
7324
  name = info.name;
7157
7325
  } else if (typeof info !== "string") {
@@ -7262,7 +7430,7 @@ class JavascriptParser extends Parser {
7262
7430
  */
7263
7431
  _resolveMemberRoot(rootName) {
7264
7432
  const info = this.getVariableInfo(rootName);
7265
- if (info instanceof VariableInfo && info.name) {
7433
+ if (JavascriptParser.isVariableInfo(info) && info.name) {
7266
7434
  if (!info.isFree() && !info.isTagged()) return;
7267
7435
  this._memberRootInfo = info;
7268
7436
  return info.name;
@@ -7393,6 +7561,15 @@ class JavascriptParser extends Parser {
7393
7561
  );
7394
7562
  }
7395
7563
 
7564
+ /**
7565
+ * Whether a definition is a variable rather than a free name or a scope.
7566
+ * @param {ExportedVariableInfo | undefined} value a scope definition
7567
+ * @returns {value is VariableInfo} true when the value is a variable
7568
+ */
7569
+ static isVariableInfo(value) {
7570
+ return value instanceof VariableInfo;
7571
+ }
7572
+
7396
7573
  /**
7397
7574
  * Get module parse function.
7398
7575
  * @param {Compilation} compilation compilation
@@ -7401,10 +7578,7 @@ class JavascriptParser extends Parser {
7401
7578
  */
7402
7579
  static _getModuleParseFunction(compilation, module) {
7403
7580
  // Get from module if available
7404
- if (
7405
- module instanceof NormalModule &&
7406
- module.parser instanceof JavascriptParser
7407
- ) {
7581
+ if (module.is("normal") && module.parser instanceof JavascriptParser) {
7408
7582
  return module.parser.options.parse;
7409
7583
  }
7410
7584