@depup/webpack 5.109.0-depup.0 → 5.110.1-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (641) hide show
  1. package/README.md +7 -7
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +10 -10
  4. package/lib/APIPlugin.js +123 -17
  5. package/lib/AsyncDependenciesBlock.js +10 -7
  6. package/lib/AutomaticPrefetchPlugin.js +1 -1
  7. package/lib/BannerPlugin.js +10 -6
  8. package/lib/CacheFacade.js +6 -6
  9. package/lib/Chunk.js +14 -11
  10. package/lib/ChunkGraph.js +43 -32
  11. package/lib/ChunkGroup.js +7 -7
  12. package/lib/ChunkTemplate.js +35 -44
  13. package/lib/CircularModulesPlugin.js +205 -28
  14. package/lib/CleanPlugin.js +15 -16
  15. package/lib/CodeGenerationResults.js +11 -8
  16. package/lib/CompatibilityPlugin.js +38 -7
  17. package/lib/Compilation.js +709 -414
  18. package/lib/Compiler.js +69 -42
  19. package/lib/ConcatenationScope.js +117 -8
  20. package/lib/ConditionalInitFragment.js +3 -3
  21. package/lib/ConstPlugin.js +13 -11
  22. package/lib/ContextExclusionPlugin.js +1 -1
  23. package/lib/ContextModule.js +146 -54
  24. package/lib/ContextModuleFactory.js +46 -14
  25. package/lib/ContextReplacementPlugin.js +12 -14
  26. package/lib/DefinePlugin.js +168 -57
  27. package/lib/DependenciesBlock.js +9 -6
  28. package/lib/Dependency.js +36 -16
  29. package/lib/DependencyTemplate.js +11 -12
  30. package/lib/DependencyTemplates.js +3 -3
  31. package/lib/DotenvPlugin.js +50 -13
  32. package/lib/DynamicEntryPlugin.js +8 -4
  33. package/lib/EntryOptionPlugin.js +8 -4
  34. package/lib/EntryPlugin.js +2 -2
  35. package/lib/Entrypoint.js +6 -2
  36. package/lib/EnvironmentPlugin.js +2 -2
  37. package/lib/EvalDevToolModulePlugin.js +8 -4
  38. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  39. package/lib/ExportsInfo.js +123 -19
  40. package/lib/ExportsInfoApiPlugin.js +2 -4
  41. package/lib/ExternalModule.js +242 -84
  42. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  43. package/lib/ExternalsPlugin.js +10 -6
  44. package/lib/FileSystemInfo.js +116 -42
  45. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  46. package/lib/FlagDependencyExportsPlugin.js +76 -19
  47. package/lib/FlagDependencyUsagePlugin.js +63 -57
  48. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  49. package/lib/Generator.js +36 -15
  50. package/lib/HotModuleReplacementPlugin.js +16 -44
  51. package/lib/IgnorePlugin.js +8 -4
  52. package/lib/IgnoreWarningsPlugin.js +2 -2
  53. package/lib/InitFragment.js +28 -36
  54. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  55. package/lib/LazyBarrel.js +3 -4
  56. package/lib/LibraryTemplatePlugin.js +10 -6
  57. package/lib/LoaderOptionsPlugin.js +7 -3
  58. package/lib/LoaderTargetPlugin.js +1 -1
  59. package/lib/MainTemplate.js +49 -42
  60. package/lib/ManifestPlugin.js +12 -11
  61. package/lib/Module.js +62 -33
  62. package/lib/ModuleFactory.js +3 -3
  63. package/lib/ModuleFilenameHelpers.js +22 -6
  64. package/lib/ModuleGraph.js +195 -21
  65. package/lib/ModuleGraphConnection.js +6 -13
  66. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  67. package/lib/ModuleTemplate.js +62 -63
  68. package/lib/MultiCompiler.js +130 -64
  69. package/lib/MultiStats.js +40 -9
  70. package/lib/MultiWatching.js +3 -3
  71. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  72. package/lib/NodeStuffPlugin.js +29 -19
  73. package/lib/NormalModule.js +221 -156
  74. package/lib/NormalModuleFactory.js +563 -112
  75. package/lib/NormalModuleReplacementPlugin.js +5 -8
  76. package/lib/NullFactory.js +6 -2
  77. package/lib/OptionsApply.js +7 -3
  78. package/lib/Parser.js +7 -3
  79. package/lib/PlatformPlugin.js +2 -2
  80. package/lib/PrefetchPlugin.js +1 -1
  81. package/lib/ProgressPlugin.js +16 -13
  82. package/lib/ProvidePlugin.js +3 -5
  83. package/lib/RawModule.js +25 -17
  84. package/lib/RecordIdsPlugin.js +3 -3
  85. package/lib/RequestShortener.js +1 -1
  86. package/lib/ResolverFactory.js +2 -2
  87. package/lib/RuntimeGlobals.js +22 -10
  88. package/lib/RuntimeModule.js +29 -19
  89. package/lib/RuntimePlugin.js +346 -256
  90. package/lib/RuntimeTemplate.js +2792 -352
  91. package/lib/SelfModuleFactory.js +7 -3
  92. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  93. package/lib/SourceMapDevToolPlugin.js +30 -20
  94. package/lib/Stats.js +3 -4
  95. package/lib/Template.js +55 -25
  96. package/lib/TemplatedPathPlugin.js +96 -14
  97. package/lib/UseStrictPlugin.js +4 -6
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  99. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  100. package/lib/WarnNoModeSetPlugin.js +1 -1
  101. package/lib/WatchIgnorePlugin.js +8 -6
  102. package/lib/Watching.js +8 -8
  103. package/lib/WebpackIsIncludedPlugin.js +2 -4
  104. package/lib/WebpackOptionsApply.js +308 -18
  105. package/lib/WebpackOptionsDefaulter.js +6 -2
  106. package/lib/asset/AssetBytesGenerator.js +12 -10
  107. package/lib/asset/AssetBytesParser.js +2 -4
  108. package/lib/asset/AssetGenerator.js +188 -95
  109. package/lib/asset/AssetModule.js +7 -3
  110. package/lib/asset/AssetModulesPlugin.js +110 -38
  111. package/lib/asset/AssetParser.js +9 -7
  112. package/lib/asset/AssetSourceGenerator.js +60 -13
  113. package/lib/asset/AssetSourceParser.js +2 -4
  114. package/lib/asset/RawDataUrlModule.js +24 -16
  115. package/lib/asset/WebManifestGenerator.js +8 -10
  116. package/lib/asset/WebManifestParser.js +24 -10
  117. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  118. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  119. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  120. package/lib/async-modules/isGeneratorLowered.js +4 -4
  121. package/lib/buildChunkGraph.js +36 -27
  122. package/lib/bun/BunTargetPlugin.js +1 -1
  123. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  124. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  125. package/lib/cache/IdleFileCachePlugin.js +2 -2
  126. package/lib/cache/MemoryCachePlugin.js +18 -10
  127. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  128. package/lib/cache/PackFileCacheStrategy.js +289 -28
  129. package/lib/cache/ResolverCachePlugin.js +38 -18
  130. package/lib/cache/getLazyHashedEtag.js +1 -2
  131. package/lib/cache/mergeEtags.js +1 -1
  132. package/lib/cli.js +1 -3
  133. package/lib/config/browserslistTargetHandler.js +41 -5
  134. package/lib/config/defaults.js +282 -81
  135. package/lib/config/defineConfig.js +10 -2
  136. package/lib/config/getClaimedAssetTypes.js +65 -0
  137. package/lib/config/normalization.js +36 -16
  138. package/lib/config/target.js +46 -3
  139. package/lib/container/ContainerEntryDependency.js +1 -1
  140. package/lib/container/ContainerEntryModule.js +24 -15
  141. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  142. package/lib/container/ContainerPlugin.js +9 -10
  143. package/lib/container/ContainerReferencePlugin.js +6 -2
  144. package/lib/container/FallbackDependency.js +1 -1
  145. package/lib/container/FallbackModule.js +24 -17
  146. package/lib/container/FallbackModuleFactory.js +7 -3
  147. package/lib/container/HoistContainerReferencesPlugin.js +53 -66
  148. package/lib/container/ModuleFederationPlugin.js +7 -18
  149. package/lib/container/RemoteModule.js +27 -19
  150. package/lib/container/RemoteRuntimeModule.js +10 -8
  151. package/lib/container/moduleFederationHooks.js +32 -0
  152. package/lib/css/CssGenerator.js +178 -44
  153. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  154. package/lib/css/CssLoadingRuntimeModule.js +82 -36
  155. package/lib/css/CssModule.js +10 -7
  156. package/lib/css/CssModulesPlugin.js +197 -106
  157. package/lib/css/CssParser.js +1248 -618
  158. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  159. package/lib/css/cssMinify.js +168 -0
  160. package/lib/css/data.js +5324 -0
  161. package/lib/css/syntax.js +10396 -952
  162. package/lib/debug/ProfilingPlugin.js +14 -9
  163. package/lib/deno/DenoTargetPlugin.js +1 -1
  164. package/lib/dependencies/AMDDefineDependency.js +112 -87
  165. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  166. package/lib/dependencies/AMDPlugin.js +9 -7
  167. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  168. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  169. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  170. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  171. package/lib/dependencies/AMDRequireDependency.js +8 -7
  172. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  173. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  174. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  175. package/lib/dependencies/CachedConstDependency.js +11 -8
  176. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  177. package/lib/dependencies/CommonJsExportRequireDependency.js +140 -45
  178. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  179. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  180. package/lib/dependencies/CommonJsFullRequireDependency.js +140 -26
  181. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -48
  182. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  183. package/lib/dependencies/CommonJsPlugin.js +35 -6
  184. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  185. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  186. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  187. package/lib/dependencies/ConstDependency.js +8 -9
  188. package/lib/dependencies/ContextDependency.js +12 -8
  189. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  190. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  191. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  192. package/lib/dependencies/ContextElementDependency.js +31 -12
  193. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  194. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  195. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  196. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  197. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  198. package/lib/dependencies/CssImportDependency.js +18 -9
  199. package/lib/dependencies/CssUrlDependency.js +17 -13
  200. package/lib/dependencies/DllEntryDependency.js +1 -1
  201. package/lib/dependencies/DynamicExports.js +2 -2
  202. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  203. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  204. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  205. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  206. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  207. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  208. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  209. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  210. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +15 -11
  211. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  212. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  213. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  214. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +159 -71
  215. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  216. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  217. package/lib/dependencies/HarmonyExports.js +7 -4
  218. package/lib/dependencies/HarmonyImportDependency.js +28 -20
  219. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  220. package/lib/dependencies/HarmonyImportGuard.js +21 -30
  221. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  222. package/lib/dependencies/HarmonyImportSpecifierDependency.js +106 -55
  223. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  224. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  225. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  226. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  227. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  228. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  229. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  230. package/lib/dependencies/ImportContextDependency.js +2 -2
  231. package/lib/dependencies/ImportDependency.js +24 -20
  232. package/lib/dependencies/ImportEagerDependency.js +6 -9
  233. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  234. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  235. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  236. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  237. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  238. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  239. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  241. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  242. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  243. package/lib/dependencies/ImportParserPlugin.js +49 -35
  244. package/lib/dependencies/ImportPhase.js +12 -5
  245. package/lib/dependencies/ImportPlugin.js +7 -3
  246. package/lib/dependencies/ImportWeakDependency.js +6 -9
  247. package/lib/dependencies/JsonExportsDependency.js +11 -7
  248. package/lib/dependencies/LoaderDependency.js +2 -2
  249. package/lib/dependencies/LoaderImportDependency.js +2 -2
  250. package/lib/dependencies/LoaderPlugin.js +11 -7
  251. package/lib/dependencies/LocalModuleDependency.js +5 -5
  252. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  253. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  254. package/lib/dependencies/ModuleDependency.js +9 -6
  255. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  256. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  257. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  258. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  259. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  260. package/lib/dependencies/NullDependency.js +3 -3
  261. package/lib/dependencies/ProvidedDependency.js +14 -10
  262. package/lib/dependencies/PureExpressionDependency.js +9 -10
  263. package/lib/dependencies/RequireContextDependency.js +2 -2
  264. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  265. package/lib/dependencies/RequireContextPlugin.js +8 -4
  266. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  267. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  268. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  269. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  270. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  271. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  272. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  273. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  274. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  275. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  276. package/lib/dependencies/RequireResolveDependency.js +4 -4
  277. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  278. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  279. package/lib/dependencies/StaticExportsDependency.js +2 -2
  280. package/lib/dependencies/SystemPlugin.js +10 -6
  281. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  282. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  283. package/lib/dependencies/URLContextDependency.js +2 -2
  284. package/lib/dependencies/URLDependency.js +110 -64
  285. package/lib/dependencies/URLPlugin.js +7 -3
  286. package/lib/dependencies/UnsupportedDependency.js +4 -4
  287. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  288. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  289. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  290. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  291. package/lib/dependencies/WorkerDependency.js +28 -22
  292. package/lib/dependencies/WorkletDependency.js +15 -14
  293. package/lib/dependencies/getFunctionExpression.js +8 -4
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DuplicateModulesWarning.js +45 -0
  316. package/lib/errors/DynamicExportsWarning.js +30 -0
  317. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  318. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  319. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  320. package/lib/errors/EvalUsageWarning.js +28 -0
  321. package/lib/errors/HookWebpackError.js +5 -5
  322. package/lib/errors/HotspotsWarning.js +57 -0
  323. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  324. package/lib/errors/InlinedAssetsWarning.js +36 -0
  325. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  326. package/lib/errors/LargeModulesWarning.js +45 -0
  327. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  328. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  329. package/lib/errors/MixedExportsWarning.js +41 -0
  330. package/lib/errors/ModuleDependencyError.js +13 -16
  331. package/lib/errors/ModuleDependencyWarning.js +5 -15
  332. package/lib/errors/ModuleHashingError.js +1 -1
  333. package/lib/errors/ModuleNotFoundError.js +2 -2
  334. package/lib/errors/ModuleParseError.js +1 -2
  335. package/lib/errors/ModuleRestoreError.js +1 -1
  336. package/lib/errors/ModuleStoreError.js +1 -1
  337. package/lib/errors/NodeStuffInWebError.js +1 -1
  338. package/lib/errors/OsDependentRuleWarning.js +31 -0
  339. package/lib/errors/PureAnnotationsWarning.js +36 -0
  340. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  341. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  342. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  343. package/lib/errors/TinyChunksWarning.js +40 -0
  344. package/lib/errors/TopLevelThisWarning.js +34 -0
  345. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  346. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  347. package/lib/errors/UnusedAliasesWarning.js +29 -0
  348. package/lib/errors/UnusedDefinesWarning.js +29 -0
  349. package/lib/errors/UnusedExternalsWarning.js +29 -0
  350. package/lib/errors/UnusedReexportsWarning.js +42 -0
  351. package/lib/errors/UnusedRuleWarning.js +29 -0
  352. package/lib/errors/WebpackError.js +9 -5
  353. package/lib/errors/deriveStackFromNestedError.js +90 -0
  354. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  355. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  356. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  357. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +170 -71
  358. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  359. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  360. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  361. package/lib/hmr/lazyCompilationBackend.js +28 -10
  362. package/lib/hmr/parserHooks.js +56 -0
  363. package/lib/html/HtmlGenerator.js +299 -79
  364. package/lib/html/HtmlModule.js +7 -3
  365. package/lib/html/HtmlModulesPlugin.js +312 -174
  366. package/lib/html/HtmlParser.js +31 -86
  367. package/lib/html/data.js +1928 -0
  368. package/lib/html/htmlMinify.js +288 -0
  369. package/lib/html/syntax.js +7819 -3331
  370. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  371. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  372. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  373. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  374. package/lib/ids/IdHelpers.js +31 -18
  375. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  376. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  377. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  378. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  379. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  380. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  381. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  382. package/lib/index.js +10 -0
  383. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  384. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  385. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  386. package/lib/javascript/ChunkHelpers.js +1 -1
  387. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  388. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  389. package/lib/javascript/JavascriptGenerator.js +65 -165
  390. package/lib/javascript/JavascriptModule.js +9 -3
  391. package/lib/javascript/JavascriptModulesPlugin.js +181 -162
  392. package/lib/javascript/JavascriptParser.js +291 -112
  393. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  394. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  395. package/lib/javascript/StartupHelpers.js +55 -9
  396. package/lib/javascript/syntax.js +3403 -300
  397. package/lib/json/JsonData.js +8 -4
  398. package/lib/json/JsonGenerator.js +38 -16
  399. package/lib/json/JsonModule.js +7 -3
  400. package/lib/json/JsonModulesPlugin.js +1 -1
  401. package/lib/json/JsonParser.js +5 -6
  402. package/lib/library/AbstractLibraryPlugin.js +20 -14
  403. package/lib/library/AmdLibraryPlugin.js +11 -7
  404. package/lib/library/AssignLibraryPlugin.js +19 -13
  405. package/lib/library/EnableLibraryPlugin.js +2 -2
  406. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  407. package/lib/library/JsonpLibraryPlugin.js +11 -7
  408. package/lib/library/ModuleLibraryPlugin.js +256 -64
  409. package/lib/library/SystemLibraryPlugin.js +12 -8
  410. package/lib/library/UmdLibraryPlugin.js +62 -25
  411. package/lib/loaders/LoaderRunner.js +14 -1
  412. package/lib/loaders/loadLoader.js +8 -4
  413. package/lib/logging/createConsoleLogger.js +7 -4
  414. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  415. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  416. package/lib/node/NodeSourcePlugin.js +1 -1
  417. package/lib/node/NodeTargetPlugin.js +4 -3
  418. package/lib/node/NodeTemplatePlugin.js +1 -1
  419. package/lib/node/NodeWatchFileSystem.js +70 -9
  420. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  421. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +81 -20
  422. package/lib/node/ReadFileCompileWasmPlugin.js +37 -17
  423. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  424. package/lib/node/nodeConsole.js +7 -3
  425. package/lib/optimize/AggressiveMergingPlugin.js +21 -17
  426. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  427. package/lib/optimize/ConcatenatedModule.js +996 -477
  428. package/lib/optimize/ConstExportsPlugin.js +11 -7
  429. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  430. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  431. package/lib/optimize/InlineExports.js +9 -5
  432. package/lib/optimize/InnerGraph.js +28 -12
  433. package/lib/optimize/InnerGraphPlugin.js +23 -18
  434. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  435. package/lib/optimize/MangleExportsPlugin.js +7 -8
  436. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  437. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  438. package/lib/optimize/ModuleConcatenationPlugin.js +124 -59
  439. package/lib/optimize/RealContentHashPlugin.js +20 -13
  440. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  441. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  442. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  443. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  444. package/lib/optimize/SplitChunksPlugin.js +232 -68
  445. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  446. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  447. package/lib/performance/BroadContextsPlugin.js +142 -0
  448. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  449. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  450. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  451. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  452. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  453. package/lib/performance/DynamicExportsPlugin.js +120 -0
  454. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  455. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  456. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  457. package/lib/performance/EvalUsagePlugin.js +115 -0
  458. package/lib/performance/HotspotsPlugin.js +296 -0
  459. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  460. package/lib/performance/LargeModulesPlugin.js +126 -0
  461. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  462. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  463. package/lib/performance/MixedExportsPlugin.js +136 -0
  464. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  465. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  466. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  467. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  468. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  469. package/lib/performance/SizeLimitsPlugin.js +139 -7
  470. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  471. package/lib/performance/TinyChunksPlugin.js +128 -0
  472. package/lib/performance/TopLevelThisPlugin.js +208 -0
  473. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  474. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  475. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  476. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  477. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  478. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  479. package/lib/performance/getModuleSize.js +22 -0
  480. package/lib/performance/getSourceModules.js +22 -0
  481. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  482. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  483. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  484. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  485. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  487. package/lib/prefetch/ResourceHintPlugin.js +377 -136
  488. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  489. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  490. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  491. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  492. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  493. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  494. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  495. package/lib/rules/RuleSetCompiler.js +146 -12
  496. package/lib/rules/UseEffectRulePlugin.js +18 -11
  497. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  498. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  499. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  500. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  501. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  502. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  503. package/lib/runtime/CompatRuntimeModule.js +5 -3
  504. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  505. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  506. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  507. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  508. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  509. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  510. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  511. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  512. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  513. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  514. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  515. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  516. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  517. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  518. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  519. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  520. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  521. package/lib/runtime/NonceRuntimeModule.js +10 -0
  522. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  523. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  524. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  525. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  526. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  527. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  528. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  529. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  530. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  531. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  532. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  533. package/lib/runtime/baseUri.js +63 -0
  534. package/lib/schemes/DataUriPlugin.js +1 -1
  535. package/lib/schemes/FileUriPlugin.js +1 -1
  536. package/lib/schemes/HttpUriPlugin.js +24 -15
  537. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  538. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  539. package/lib/serialization/BinaryMiddleware.js +274 -942
  540. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  541. package/lib/serialization/FileMiddleware.js +305 -66
  542. package/lib/serialization/ObjectMiddleware.js +139 -114
  543. package/lib/serialization/PlainObjectSerializer.js +19 -16
  544. package/lib/sharing/ConsumeSharedModule.js +30 -21
  545. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  546. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  547. package/lib/sharing/ProvideSharedModule.js +25 -16
  548. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  549. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  550. package/lib/sharing/SharePlugin.js +17 -5
  551. package/lib/sharing/ShareRuntimeModule.js +4 -4
  552. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  553. package/lib/sharing/utils.js +1 -3
  554. package/lib/stats/DefaultStatsFactoryPlugin.js +253 -226
  555. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  556. package/lib/stats/DefaultStatsPrinterPlugin.js +60 -192
  557. package/lib/stats/StatsFactory.js +56 -35
  558. package/lib/stats/StatsPrinter.js +16 -12
  559. package/lib/typescript/TypeScriptPlugin.js +12 -14
  560. package/lib/url/URLParserPlugin.js +26 -13
  561. package/lib/util/AsyncQueue.js +4 -3
  562. package/lib/util/Hash.js +5 -1
  563. package/lib/util/LazySet.js +35 -22
  564. package/lib/util/LocConverter.js +36 -13
  565. package/lib/util/SourceProcessor.js +1050 -24
  566. package/lib/util/StringXor.js +1 -1
  567. package/lib/util/chainedImports.js +9 -5
  568. package/lib/util/cleverMerge.js +1 -1
  569. package/lib/util/comparators.js +45 -14
  570. package/lib/util/concatenate.js +203 -77
  571. package/lib/util/conventions.js +5 -1
  572. package/lib/util/createHash.js +2 -2
  573. package/lib/util/createHooksRegistry.js +8 -10
  574. package/lib/util/dataURL.js +225 -1
  575. package/lib/util/extractSourceMap.js +4 -3
  576. package/lib/util/findCaseMismatch.js +139 -0
  577. package/lib/util/formatLocation.js +1 -2
  578. package/lib/util/fs.js +22 -5
  579. package/lib/util/globUtils.js +298 -24
  580. package/lib/util/hash/BatchedHash.js +5 -1
  581. package/lib/util/hash/BulkUpdateHash.js +5 -1
  582. package/lib/util/hash/DebugHash.js +5 -1
  583. package/lib/util/hash/hash-digest.js +6 -2
  584. package/lib/util/identifier.js +25 -1
  585. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  586. package/lib/util/internalSerializables.js +6 -0
  587. package/lib/util/lazyModule.js +56 -0
  588. package/lib/util/makeSerializable.js +7 -3
  589. package/lib/util/matchAlias.js +25 -0
  590. package/lib/util/mimeTypes.js +11 -5
  591. package/lib/util/nonNumericOnlyHash.js +4 -3
  592. package/lib/util/parseJson.js +5 -3
  593. package/lib/util/preloadModuleType.js +32 -0
  594. package/lib/util/registerExternalSerializer.js +7 -5
  595. package/lib/util/runtime.js +2 -2
  596. package/lib/util/semver.js +1 -1
  597. package/lib/util/serialization.js +28 -28
  598. package/lib/util/source.js +2 -2
  599. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  600. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  601. package/lib/wasm/wasmModuleFilename.js +54 -0
  602. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  603. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  604. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  605. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  606. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  607. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  608. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  609. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  610. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  611. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  612. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  613. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  614. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  615. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  616. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  617. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  618. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  619. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  620. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  621. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  622. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  623. package/lib/web/JsonpTemplatePlugin.js +2 -2
  624. package/lib/webpack.js +22 -11
  625. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  626. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  627. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  628. package/module.d.ts +1 -0
  629. package/package.json +37 -30
  630. package/schemas/WebpackOptions.check.js +1 -1
  631. package/schemas/WebpackOptions.json +780 -91
  632. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  634. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  635. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  636. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  637. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  639. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  640. package/types.d.ts +4013 -738
  641. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -22,110 +22,120 @@ const {
22
22
  WebpackParser,
23
23
  buildLineStarts,
24
24
  hasOctalEscape,
25
+ isIdentifierChar,
25
26
  positionAt
26
27
  } = require("./syntax");
27
28
 
28
29
  /** @typedef {typeof import("acorn").Parser} AcornParser */
29
- /** @typedef {import("acorn").Options} AcornOptions */
30
- /** @typedef {import("acorn").ecmaVersion} EcmaVersion */
31
- /** @typedef {import("estree").AssignmentExpression} AssignmentExpression */
32
- /** @typedef {import("estree").BinaryExpression} BinaryExpression */
33
- /** @typedef {import("estree").BlockStatement} BlockStatement */
34
- /** @typedef {import("estree").SequenceExpression} SequenceExpression */
35
- /** @typedef {import("estree").CallExpression} CallExpression */
36
- /** @typedef {import("estree").StaticBlock} StaticBlock */
37
- /** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
38
- /** @typedef {import("estree").ForStatement} ForStatement */
39
- /** @typedef {import("estree").SwitchStatement} SwitchStatement */
40
- /** @typedef {import("estree").ClassExpression} ClassExpression */
41
- /** @typedef {import("estree").SourceLocation} SourceLocation */
42
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
43
- /** @typedef {import("../Dependency").SourcePosition} SourcePosition */
30
+ /**
31
+ * @import {
32
+ * Options as AcornOptions,
33
+ * ecmaVersion as EcmaVersion
34
+ * } from "acorn"
35
+ */
36
+ /**
37
+ * @import {
38
+ * AssignmentExpression,
39
+ * BinaryExpression,
40
+ * BlockStatement,
41
+ * SequenceExpression,
42
+ * CallExpression,
43
+ * StaticBlock,
44
+ * ClassDeclaration,
45
+ * ForStatement,
46
+ * SwitchStatement,
47
+ * ClassExpression,
48
+ * SourceLocation,
49
+ * ConditionalExpression,
50
+ * Declaration,
51
+ * PrivateIdentifier,
52
+ * PropertyDefinition,
53
+ * Expression,
54
+ * ImportDeclaration,
55
+ * Identifier,
56
+ * VariableDeclaration,
57
+ * IfStatement,
58
+ * LabeledStatement,
59
+ * Literal,
60
+ * LogicalExpression,
61
+ * ChainExpression,
62
+ * MemberExpression,
63
+ * YieldExpression,
64
+ * MetaProperty,
65
+ * Property,
66
+ * AssignmentPattern,
67
+ * Pattern,
68
+ * UpdateExpression,
69
+ * ObjectExpression,
70
+ * UnaryExpression,
71
+ * ArrayExpression,
72
+ * ArrayPattern,
73
+ * AwaitExpression,
74
+ * ThisExpression,
75
+ * RestElement,
76
+ * ObjectPattern,
77
+ * SwitchCase,
78
+ * CatchClause,
79
+ * VariableDeclarator,
80
+ * ForInStatement,
81
+ * ForOfStatement,
82
+ * ReturnStatement,
83
+ * WithStatement,
84
+ * ThrowStatement,
85
+ * MethodDefinition,
86
+ * NewExpression,
87
+ * SpreadElement,
88
+ * FunctionExpression,
89
+ * WhileStatement,
90
+ * ArrowFunctionExpression,
91
+ * ExpressionStatement,
92
+ * ExportAllDeclaration,
93
+ * ExportNamedDeclaration,
94
+ * FunctionDeclaration,
95
+ * DoWhileStatement,
96
+ * TryStatement,
97
+ * Node,
98
+ * Program,
99
+ * Directive,
100
+ * Statement,
101
+ * ExportDefaultDeclaration,
102
+ * Super,
103
+ * TaggedTemplateExpression,
104
+ * TemplateLiteral,
105
+ * ModuleDeclaration,
106
+ * MaybeNamedFunctionDeclaration,
107
+ * MaybeNamedClassDeclaration
108
+ * } from "estree"
109
+ */
110
+ /** @import { DependencyLocation } from "../Dependency" */
44
111
  /** @typedef {import("estree").Comment & { start: number, end: number, loc?: SourceLocation | null }} Comment */
45
- /** @typedef {import("estree").ConditionalExpression} ConditionalExpression */
46
- /** @typedef {import("estree").Declaration} Declaration */
47
- /** @typedef {import("estree").PrivateIdentifier} PrivateIdentifier */
48
- /** @typedef {import("estree").PropertyDefinition} PropertyDefinition */
49
- /** @typedef {import("estree").Expression} Expression */
50
- /** @typedef {import("estree").ImportAttribute} ImportAttribute */
51
- /** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
52
- /** @typedef {import("estree").Identifier} Identifier */
53
- /** @typedef {import("estree").VariableDeclaration} VariableDeclaration */
54
- /** @typedef {import("estree").IfStatement} IfStatement */
55
- /** @typedef {import("estree").LabeledStatement} LabeledStatement */
56
- /** @typedef {import("estree").Literal} Literal */
57
- /** @typedef {import("estree").LogicalExpression} LogicalExpression */
58
- /** @typedef {import("estree").ChainExpression} ChainExpression */
59
- /** @typedef {import("estree").MemberExpression} MemberExpression */
60
- /** @typedef {import("estree").YieldExpression} YieldExpression */
61
- /** @typedef {import("estree").MetaProperty} MetaProperty */
62
- /** @typedef {import("estree").Property} Property */
63
- /** @typedef {import("estree").AssignmentPattern} AssignmentPattern */
64
- /** @typedef {import("estree").Pattern} Pattern */
65
- /** @typedef {import("estree").UpdateExpression} UpdateExpression */
66
- /** @typedef {import("estree").ObjectExpression} ObjectExpression */
67
- /** @typedef {import("estree").UnaryExpression} UnaryExpression */
68
- /** @typedef {import("estree").ArrayExpression} ArrayExpression */
69
- /** @typedef {import("estree").ArrayPattern} ArrayPattern */
70
- /** @typedef {import("estree").AwaitExpression} AwaitExpression */
71
- /** @typedef {import("estree").ThisExpression} ThisExpression */
72
- /** @typedef {import("estree").RestElement} RestElement */
73
- /** @typedef {import("estree").ObjectPattern} ObjectPattern */
74
- /** @typedef {import("estree").SwitchCase} SwitchCase */
75
- /** @typedef {import("estree").CatchClause} CatchClause */
76
- /** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
77
- /** @typedef {import("estree").ForInStatement} ForInStatement */
78
- /** @typedef {import("estree").ForOfStatement} ForOfStatement */
79
- /** @typedef {import("estree").ReturnStatement} ReturnStatement */
80
- /** @typedef {import("estree").WithStatement} WithStatement */
81
- /** @typedef {import("estree").ThrowStatement} ThrowStatement */
82
- /** @typedef {import("estree").MethodDefinition} MethodDefinition */
83
- /** @typedef {import("estree").NewExpression} NewExpression */
84
- /** @typedef {import("estree").SpreadElement} SpreadElement */
85
- /** @typedef {import("estree").FunctionExpression} FunctionExpression */
86
- /** @typedef {import("estree").WhileStatement} WhileStatement */
87
- /** @typedef {import("estree").ArrowFunctionExpression} ArrowFunctionExpression */
88
- /** @typedef {import("estree").ExpressionStatement} ExpressionStatement */
89
- /** @typedef {import("estree").ExportAllDeclaration} ExportAllDeclaration */
90
- /** @typedef {import("estree").ExportNamedDeclaration} ExportNamedDeclaration */
91
- /** @typedef {import("estree").FunctionDeclaration} FunctionDeclaration */
92
- /** @typedef {import("estree").DoWhileStatement} DoWhileStatement */
93
- /** @typedef {import("estree").TryStatement} TryStatement */
94
- /** @typedef {import("estree").Node} Node */
95
- /** @typedef {import("estree").Program} Program */
96
- /** @typedef {import("estree").Directive} Directive */
97
- /** @typedef {import("estree").Statement} Statement */
98
- /** @typedef {import("estree").ExportDefaultDeclaration} ExportDefaultDeclaration */
99
- /** @typedef {import("estree").Super} Super */
100
- /** @typedef {import("estree").TaggedTemplateExpression} TaggedTemplateExpression */
101
- /** @typedef {import("estree").TemplateLiteral} TemplateLiteral */
102
- /** @typedef {import("estree").ModuleDeclaration} ModuleDeclaration */
103
- /** @typedef {import("estree").MaybeNamedFunctionDeclaration} MaybeNamedFunctionDeclaration */
104
- /** @typedef {import("estree").MaybeNamedClassDeclaration} MaybeNamedClassDeclaration */
105
112
  /**
106
113
  * Defines the shared type used by this module.
107
114
  * @template T
108
115
  * @typedef {import("tapable").AsArray<T>} AsArray<T>
109
116
  */
110
- /** @typedef {import("../Parser").ParserState} ParserState */
111
- /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
117
+ /** @import { ParserState, PreparsedAst } from "../Parser" */
112
118
 
113
- /** @typedef {import("../dependencies/LocalModule")} LocalModule */
114
- /** @typedef {import("../dependencies/HarmonyExportImportedSpecifierDependency").HarmonyStarExportsList} HarmonyStarExportsList */
119
+ /** @import LocalModule from "../dependencies/LocalModule" */
120
+ /**
121
+ * @import {
122
+ * HarmonyStarExportsList
123
+ * } from "../dependencies/HarmonyExportImportedSpecifierDependency"
124
+ */
115
125
 
116
126
  /**
117
127
  * Defines the known javascript parser state type used by this module.
118
128
  * @typedef {object} KnownJavascriptParserState
119
129
  * @property {Set<string>=} harmonyNamedExports
120
- * @property {HarmonyStarExportsList=} harmonyStarExports
130
+ * @property {InstanceType<HarmonyStarExportsList>=} harmonyStarExports
121
131
  * @property {number=} lastHarmonyImportOrder
122
132
  * @property {LocalModule[]=} localModules
123
133
  */
124
134
 
125
135
  /** @typedef {ParserState & KnownJavascriptParserState} JavascriptParserState */
126
136
 
127
- /** @typedef {import("../Compilation")} Compilation */
128
- /** @typedef {import("../Module")} Module */
137
+ /** @import Compilation from "../Compilation" */
138
+ /** @import Module from "../Module" */
129
139
 
130
140
  /** @typedef {{ name: string | VariableInfo, rootInfo: string | VariableInfo, getMembers: () => Members, getMembersOptionals: () => MembersOptionals, getMemberRanges: () => MemberRanges }} GetInfoResult */
131
141
  /** @typedef {{ consequent?: EXPECTED_OBJECT, alternate?: EXPECTED_OBJECT }} GuardCollection per-branch guard frames pushed onto the parser state guard stack */
@@ -337,11 +347,19 @@ class VariableInfo {
337
347
 
338
348
  /** @typedef {symbol} Tag */
339
349
 
340
- /** @typedef {import("../dependencies/HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
341
- /** @typedef {import("../dependencies/ImportParserPlugin").ImportSettings} ImportSettings */
342
- /** @typedef {import("../dependencies/CommonJsImportsParserPlugin").CommonJsImportSettings} CommonJsImportSettings */
343
- /** @typedef {import("../CompatibilityPlugin").CompatibilitySettings} CompatibilitySettings */
344
- /** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
350
+ /**
351
+ * @import {
352
+ * HarmonySettings
353
+ * } from "../dependencies/HarmonyImportDependencyParserPlugin"
354
+ */
355
+ /** @import { ImportSettings } from "../dependencies/ImportParserPlugin" */
356
+ /**
357
+ * @import {
358
+ * CommonJsImportSettings
359
+ * } from "../dependencies/CommonJsImportsParserPlugin"
360
+ */
361
+ /** @import { CompatibilitySettings } from "../CompatibilityPlugin" */
362
+ /** @import { TopLevelSymbol } from "../optimize/InnerGraph" */
345
363
 
346
364
  /** @typedef {HarmonySettings | ImportSettings | CommonJsImportSettings | TopLevelSymbol | CompatibilitySettings} KnownTagData */
347
365
  /** @typedef {KnownTagData | Record<string, EXPECTED_ANY>} TagData */
@@ -495,6 +513,25 @@ const EVALUATE_AST_CACHE_LIMIT = 4096;
495
513
 
496
514
  const CLASS_NAME = "JavascriptParser";
497
515
 
516
+ // Reserved words in strict mode, so unusable as binding names there (12.7.2).
517
+ const STRICT_MODE_RESERVED_WORDS = new Set([
518
+ "implements",
519
+ "interface",
520
+ "let",
521
+ "package",
522
+ "private",
523
+ "protected",
524
+ "public",
525
+ "static",
526
+ "yield"
527
+ ]);
528
+
529
+ const STRICT_MODE_OUTPUT_REASON =
530
+ "The output is an ES module, which runs in strict mode.";
531
+ // `await` is reserved by the module goal rather than by strict mode itself.
532
+ const MODULE_GOAL_OUTPUT_REASON =
533
+ 'The output is an ES module, where "await" is a reserved word.';
534
+
498
535
  class JavascriptParser extends Parser {
499
536
  /**
500
537
  * Creates an instance of JavascriptParser.
@@ -514,11 +551,17 @@ class JavascriptParser extends Parser {
514
551
  evaluateDefinedIdentifier: new HookMap(
515
552
  () => new SyncBailHook(["expression"])
516
553
  ),
517
- /** @type {HookMap<SyncBailHook<[NewExpression], BasicEvaluatedExpression | null | undefined>>} */
554
+ /**
555
+ * @type {HookMap<SyncBailHook<[NewExpression], BasicEvaluatedExpression | null | undefined>>}
556
+ * @since 5.73.0
557
+ */
518
558
  evaluateNewExpression: new HookMap(
519
559
  () => new SyncBailHook(["expression"])
520
560
  ),
521
- /** @type {HookMap<SyncBailHook<[CallExpression], BasicEvaluatedExpression | null | undefined>>} */
561
+ /**
562
+ * @type {HookMap<SyncBailHook<[CallExpression], BasicEvaluatedExpression | null | undefined>>}
563
+ * @since 5.73.0
564
+ */
522
565
  evaluateCallExpression: new HookMap(
523
566
  () => new SyncBailHook(["expression"])
524
567
  ),
@@ -532,12 +575,18 @@ class JavascriptParser extends Parser {
532
575
  ),
533
576
  /** @type {SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>} */
534
577
  preStatement: new SyncBailHook(["statement"]),
535
- /** @type {HookMap<SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>>} */
578
+ /**
579
+ * @type {HookMap<SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>>}
580
+ * @since 5.109.0
581
+ */
536
582
  preStatementByType: new HookMap(() => new SyncBailHook(["statement"])),
537
583
 
538
584
  /** @type {SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>} */
539
585
  blockPreStatement: new SyncBailHook(["declaration"]),
540
- /** @type {HookMap<SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>>} */
586
+ /**
587
+ * @type {HookMap<SyncBailHook<[Statement | ModuleDeclaration | MaybeNamedClassDeclaration | MaybeNamedFunctionDeclaration], boolean | void>>}
588
+ * @since 5.109.0
589
+ */
541
590
  blockPreStatementByType: new HookMap(
542
591
  () => new SyncBailHook(["declaration"])
543
592
  ),
@@ -545,7 +594,10 @@ class JavascriptParser extends Parser {
545
594
  statement: new SyncBailHook(["statement"]),
546
595
  /** @type {SyncBailHook<[IfStatement], boolean | void>} */
547
596
  statementIf: new SyncBailHook(["statement"]),
548
- /** @type {SyncBailHook<[Expression], GuardCollection | void>} */
597
+ /**
598
+ * @type {SyncBailHook<[Expression], GuardCollection | void>}
599
+ * @since 5.105.0
600
+ */
549
601
  collectGuards: new SyncBailHook(["expression"]),
550
602
  /** @type {SyncBailHook<[Expression, ClassExpression | ClassDeclaration | MaybeNamedClassDeclaration], boolean | void>} */
551
603
  classExtendsExpression: new SyncBailHook([
@@ -554,7 +606,10 @@ class JavascriptParser extends Parser {
554
606
  ]),
555
607
  /** @type {SyncBailHook<[MethodDefinition | PropertyDefinition | StaticBlock, ClassExpression | ClassDeclaration | MaybeNamedClassDeclaration], boolean | void>} */
556
608
  classBodyElement: new SyncBailHook(["element", "classDefinition"]),
557
- /** @type {SyncBailHook<[Expression, MethodDefinition | PropertyDefinition, ClassExpression | ClassDeclaration | MaybeNamedClassDeclaration], boolean | void>} */
609
+ /**
610
+ * @type {SyncBailHook<[Expression, MethodDefinition | PropertyDefinition, ClassExpression | ClassDeclaration | MaybeNamedClassDeclaration], boolean | void>}
611
+ * @since 5.36.0
612
+ */
558
613
  classBodyValue: new SyncBailHook([
559
614
  "expression",
560
615
  "element",
@@ -604,13 +659,19 @@ class JavascriptParser extends Parser {
604
659
  varDeclarationLet: new HookMap(() => new SyncBailHook(["declaration"])),
605
660
  /** @type {HookMap<SyncBailHook<[Identifier], boolean | void>>} */
606
661
  varDeclarationConst: new HookMap(() => new SyncBailHook(["declaration"])),
607
- /** @type {HookMap<SyncBailHook<[Identifier], boolean | void>>} */
662
+ /**
663
+ * @type {HookMap<SyncBailHook<[Identifier], boolean | void>>}
664
+ * @since 5.100.0
665
+ */
608
666
  varDeclarationUsing: new HookMap(() => new SyncBailHook(["declaration"])),
609
667
  /** @type {HookMap<SyncBailHook<[Identifier], boolean | void>>} */
610
668
  varDeclarationVar: new HookMap(() => new SyncBailHook(["declaration"])),
611
669
  /** @type {HookMap<SyncBailHook<[Identifier], boolean | void>>} */
612
670
  pattern: new HookMap(() => new SyncBailHook(["pattern"])),
613
- /** @type {SyncBailHook<[Expression], boolean | void>} */
671
+ /**
672
+ * @type {SyncBailHook<[Expression], boolean | void>}
673
+ * @since 5.101.3
674
+ */
614
675
  collectDestructuringAssignmentProperties: new SyncBailHook([
615
676
  "expression"
616
677
  ]),
@@ -628,7 +689,7 @@ class JavascriptParser extends Parser {
628
689
  typeof: new HookMap(() => new SyncBailHook(["expression"])),
629
690
  /** @type {SyncBailHook<[ImportExpression, CallExpression?], boolean | void>} */
630
691
  importCall: new SyncBailHook(["expression", "importThen"]),
631
- /** @type {SyncBailHook<[Expression | ForOfStatement], boolean | void>} */
692
+ /** @type {SyncBailHook<[Expression | ForOfStatement | VariableDeclaration], boolean | void>} */
632
693
  topLevelAwait: new SyncBailHook(["expression"]),
633
694
  /** @type {HookMap<SyncBailHook<[CallExpression], boolean | void>>} */
634
695
  call: new HookMap(() => new SyncBailHook(["expression"])),
@@ -671,7 +732,10 @@ class JavascriptParser extends Parser {
671
732
  optionalChaining: new SyncBailHook(["optionalChaining"]),
672
733
  /** @type {HookMap<SyncBailHook<[NewExpression], boolean | void>>} */
673
734
  new: new HookMap(() => new SyncBailHook(["expression"])),
674
- /** @type {SyncBailHook<[BinaryExpression], boolean | void>} */
735
+ /**
736
+ * @type {SyncBailHook<[BinaryExpression], boolean | void>}
737
+ * @since 5.71.0
738
+ */
675
739
  binaryExpression: new SyncBailHook(["binaryExpression"]),
676
740
  /** @type {HookMap<SyncBailHook<[Expression], boolean | void>>} */
677
741
  expression: new HookMap(() => new SyncBailHook(["expression"])),
@@ -695,11 +759,17 @@ class JavascriptParser extends Parser {
695
759
  expressionLogicalOperator: new SyncBailHook(["expression"]),
696
760
  /** @type {SyncBailHook<[Program, Comment[]], boolean | void>} */
697
761
  program: new SyncBailHook(["ast", "comments"]),
698
- /** @type {SyncBailHook<[ThrowStatement | ReturnStatement], boolean | void>} */
762
+ /**
763
+ * @type {SyncBailHook<[ThrowStatement | ReturnStatement], boolean | void>}
764
+ * @since 5.99.0
765
+ */
699
766
  terminate: new SyncBailHook(["statement"]),
700
767
  /** @type {SyncBailHook<[Program, Comment[]], boolean | void>} */
701
768
  finish: new SyncBailHook(["ast", "comments"]),
702
- /** @type {SyncBailHook<[Statement], boolean | void>} */
769
+ /**
770
+ * @type {SyncBailHook<[Statement], boolean | void>}
771
+ * @since 5.99.9
772
+ */
703
773
  unusedStatement: new SyncBailHook(["statement"])
704
774
  });
705
775
  this.sourceType = sourceType;
@@ -2838,6 +2908,9 @@ class JavascriptParser extends Parser {
2838
2908
  */
2839
2909
  preWalkFunctionDeclaration(statement) {
2840
2910
  if (statement.id) {
2911
+ if (this._strictInModuleOutput) {
2912
+ this._checkStrictModeBinding(statement.id.name, statement.id);
2913
+ }
2841
2914
  this.defineVariable(statement.id.name);
2842
2915
  }
2843
2916
  }
@@ -3208,6 +3281,10 @@ class JavascriptParser extends Parser {
3208
3281
  blockPreWalkVariableDeclaration(statement) {
3209
3282
  if (statement.kind === "var") return;
3210
3283
 
3284
+ if (statement.kind === "await using" && this.scope.topLevelScope === true) {
3285
+ this.hooks.topLevelAwait.call(statement);
3286
+ }
3287
+
3211
3288
  const hookMap =
3212
3289
  statement.kind === "const"
3213
3290
  ? this.hooks.varDeclarationConst
@@ -3225,12 +3302,14 @@ class JavascriptParser extends Parser {
3225
3302
  _preWalkVariableDeclaration(statement, hookMap) {
3226
3303
  /** @type {OnIdent | undefined} */
3227
3304
  let onIdent;
3305
+ const checkStrictBindings = this._strictInModuleOutput;
3228
3306
  for (const declarator of statement.declarations) {
3229
3307
  if (declarator.type !== "VariableDeclarator") continue;
3230
3308
  this.preWalkVariableDeclarator(declarator);
3231
3309
  if (this.hooks.preDeclarator.call(declarator, statement)) continue;
3232
3310
  const id = declarator.id;
3233
3311
  if (id.type === "Identifier") {
3312
+ if (checkStrictBindings) this._checkStrictModeBinding(id.name, id);
3234
3313
  // fast path: plain `const x =` skips the enterPattern dispatch and
3235
3314
  // the per-declaration onIdent closure (only patterns need it)
3236
3315
  if (!this.callHooksForName(this.hooks.pattern, id.name, id)) {
@@ -3238,8 +3317,10 @@ class JavascriptParser extends Parser {
3238
3317
  }
3239
3318
  } else {
3240
3319
  if (onIdent === undefined) {
3241
- onIdent = (name, ident) =>
3320
+ onIdent = (name, ident) => {
3321
+ if (checkStrictBindings) this._checkStrictModeBinding(name, ident);
3242
3322
  this._defineVariableForDeclaration(name, ident, hookMap);
3323
+ };
3243
3324
  }
3244
3325
  this.enterPattern(id, onIdent);
3245
3326
  }
@@ -3409,6 +3490,11 @@ class JavascriptParser extends Parser {
3409
3490
  */
3410
3491
  blockPreWalkClassDeclaration(statement) {
3411
3492
  if (statement.id) {
3493
+ // only `await` reaches here: acorn rejects the other names itself,
3494
+ // since a class body is always strict even in a loose script
3495
+ if (this._strictInModuleOutput) {
3496
+ this._checkStrictModeBinding(statement.id.name, statement.id);
3497
+ }
3412
3498
  this.defineVariable(statement.id.name);
3413
3499
  }
3414
3500
  }
@@ -3489,7 +3575,10 @@ class JavascriptParser extends Parser {
3489
3575
  this.inBlockScope(() => {
3490
3576
  // Error binding is optional in catch clause since ECMAScript 2019
3491
3577
  if (catchClause.param !== null) {
3492
- this.enterPattern(catchClause.param, (ident) => {
3578
+ this.enterPattern(catchClause.param, (ident, identifier) => {
3579
+ if (this._strictInModuleOutput) {
3580
+ this._checkStrictModeBinding(ident, identifier);
3581
+ }
3493
3582
  this.defineVariable(ident);
3494
3583
  });
3495
3584
  this.walkPattern(catchClause.param);
@@ -3792,6 +3881,9 @@ class JavascriptParser extends Parser {
3792
3881
 
3793
3882
  if (this._strictInModuleOutput) {
3794
3883
  this._checkStrictModeParams(expression.params);
3884
+ if (expression.id) {
3885
+ this._checkStrictModeBinding(expression.id.name, expression.id);
3886
+ }
3795
3887
  }
3796
3888
  this.inFunctionScope(true, scopeParams, () => {
3797
3889
  for (const param of expression.params) {
@@ -3929,6 +4021,32 @@ class JavascriptParser extends Parser {
3929
4021
  }
3930
4022
  }
3931
4023
 
4024
+ /**
4025
+ * Reports a binding name a loose script allows but strict-mode ESM output
4026
+ * rejects — the whole bundle fails to parse, so this is never merely latent.
4027
+ * @param {string} name binding name
4028
+ * @param {Statement | Expression | Identifier} node node to report the violation at
4029
+ */
4030
+ _checkStrictModeBinding(name, node) {
4031
+ if (name === "eval" || name === "arguments") {
4032
+ this._reportStrictModeViolation(
4033
+ `"${name}" is not allowed as a binding name`,
4034
+ node
4035
+ );
4036
+ } else if (STRICT_MODE_RESERVED_WORDS.has(name)) {
4037
+ this._reportStrictModeViolation(
4038
+ `"${name}" is a reserved word in strict mode and is not allowed as a binding name`,
4039
+ node
4040
+ );
4041
+ } else if (name === "await") {
4042
+ this._reportStrictModeViolation(
4043
+ '"await" is not allowed as a binding name',
4044
+ node,
4045
+ MODULE_GOAL_OUTPUT_REASON
4046
+ );
4047
+ }
4048
+ }
4049
+
3932
4050
  /**
3933
4051
  * Reports strict-mode-only errors in a function's parameter list: a duplicate
3934
4052
  * simple parameter, or a parameter named `eval` / `arguments`.
@@ -3945,6 +4063,17 @@ class JavascriptParser extends Parser {
3945
4063
  `"${name}" is not allowed as a parameter name`,
3946
4064
  param
3947
4065
  );
4066
+ } else if (STRICT_MODE_RESERVED_WORDS.has(name)) {
4067
+ this._reportStrictModeViolation(
4068
+ `"${name}" is a reserved word in strict mode and is not allowed as a parameter name`,
4069
+ param
4070
+ );
4071
+ } else if (name === "await") {
4072
+ this._reportStrictModeViolation(
4073
+ '"await" is not allowed as a parameter name',
4074
+ param,
4075
+ MODULE_GOAL_OUTPUT_REASON
4076
+ );
3948
4077
  }
3949
4078
  if (seen === undefined) seen = new Set();
3950
4079
  if (seen.has(name)) {
@@ -3998,10 +4127,11 @@ class JavascriptParser extends Parser {
3998
4127
  * The location is computed here, on the rare violation path only.
3999
4128
  * @param {string} reason what is not allowed
4000
4129
  * @param {Statement | Expression | Identifier} node node to report the violation at
4130
+ * @param {string=} outputReason why the output rejects it, defaults to strict mode
4001
4131
  */
4002
- _reportStrictModeViolation(reason, node) {
4132
+ _reportStrictModeViolation(reason, node, outputReason) {
4003
4133
  const diagnostic = new WebpackError(
4004
- `${reason}. The output is an ES module, which runs in strict mode.`
4134
+ `${reason}. ${outputReason === undefined ? STRICT_MODE_OUTPUT_REASON : outputReason}`
4005
4135
  );
4006
4136
  diagnostic.loc = this.getLocation(node);
4007
4137
  if (this.options.strictModeViolations === "error") {
@@ -4205,6 +4335,10 @@ class JavascriptParser extends Parser {
4205
4335
  * @param {ClassExpression} expression the class expression
4206
4336
  */
4207
4337
  walkClassExpression(expression) {
4338
+ // only `await` reaches here, as for class declarations
4339
+ if (this._strictInModuleOutput && expression.id) {
4340
+ this._checkStrictModeBinding(expression.id.name, expression.id);
4341
+ }
4208
4342
  this.walkClass(expression);
4209
4343
  }
4210
4344
 
@@ -4262,6 +4396,16 @@ class JavascriptParser extends Parser {
4262
4396
  };
4263
4397
  const { params, type } = functionExpression;
4264
4398
  const arrow = type === "ArrowFunctionExpression";
4399
+ // the walk skips walkFunctionExpression for a called function expression
4400
+ if (this._strictInModuleOutput) {
4401
+ this._checkStrictModeParams(params);
4402
+ if (type === "FunctionExpression" && functionExpression.id) {
4403
+ this._checkStrictModeBinding(
4404
+ functionExpression.id.name,
4405
+ functionExpression.id
4406
+ );
4407
+ }
4408
+ }
4265
4409
  const renameThis = currentThis ? getVarInfo(currentThis) : null;
4266
4410
  const varInfoForArgs = options.map(getVarInfo);
4267
4411
  const wasTopLevel = this.scope.topLevelScope;
@@ -5625,8 +5769,41 @@ class JavascriptParser extends Parser {
5625
5769
  }
5626
5770
 
5627
5771
  /**
5628
- * First significant char code at or after `pos`, skipping whitespace and
5629
- * comments, or -1 at end of source.
5772
+ * Reports whether `identifier` may occur as a word in the source text of
5773
+ * `range`. A conservative pre-filter for expensive AST scans: `false` means
5774
+ * it certainly does not occur, while a match inside a comment or a string
5775
+ * yields `true`. Also `true` when no source text is available (preparsed
5776
+ * AST), so callers must stay correct without the filter.
5777
+ * @param {Range} range range to search
5778
+ * @param {string} identifier identifier to look for
5779
+ * @returns {boolean} false when the identifier certainly does not occur
5780
+ */
5781
+ sourceMayContainIdentifier(range, identifier) {
5782
+ const source = this._source;
5783
+ if (source === undefined) return true;
5784
+ const end = range[1];
5785
+ const length = identifier.length;
5786
+ for (
5787
+ let index = source.indexOf(identifier, range[0]);
5788
+ index !== -1 && index + length <= end;
5789
+ index = source.indexOf(identifier, index + length)
5790
+ ) {
5791
+ if (
5792
+ (index === 0 || !isIdentifierChar(source.charCodeAt(index - 1))) &&
5793
+ (index + length === source.length ||
5794
+ !isIdentifierChar(source.charCodeAt(index + length)))
5795
+ ) {
5796
+ return true;
5797
+ }
5798
+ }
5799
+ return false;
5800
+ }
5801
+
5802
+ /**
5803
+ * First significant char code at or after `pos`, skipping whitespace,
5804
+ * comments and grouping `)` (a parenthesized node's range excludes its
5805
+ * wrapping parens, so a `,`/`;` separator can sit behind them), or -1 at
5806
+ * end of source.
5630
5807
  * @param {string} source source text
5631
5808
  * @param {number} pos start offset
5632
5809
  * @returns {number} char code of the next token, or -1
@@ -5643,6 +5820,7 @@ class JavascriptParser extends Parser {
5643
5820
  c === 13 ||
5644
5821
  c === 11 ||
5645
5822
  c === 12 ||
5823
+ c === 41 /* ) */ ||
5646
5824
  c === 0xa0 ||
5647
5825
  c === 0xfeff ||
5648
5826
  c === 0x2028 ||
@@ -6294,12 +6472,13 @@ class JavascriptParser extends Parser {
6294
6472
  }
6295
6473
  }
6296
6474
 
6297
- module.exports = JavascriptParser;
6298
- module.exports.ALLOWED_MEMBER_TYPES_ALL = ALLOWED_MEMBER_TYPES_ALL;
6299
- module.exports.ALLOWED_MEMBER_TYPES_CALL_EXPRESSION =
6475
+ JavascriptParser.ALLOWED_MEMBER_TYPES_ALL = ALLOWED_MEMBER_TYPES_ALL;
6476
+ JavascriptParser.ALLOWED_MEMBER_TYPES_CALL_EXPRESSION =
6300
6477
  ALLOWED_MEMBER_TYPES_CALL_EXPRESSION;
6301
- module.exports.ALLOWED_MEMBER_TYPES_EXPRESSION =
6478
+ JavascriptParser.ALLOWED_MEMBER_TYPES_EXPRESSION =
6302
6479
  ALLOWED_MEMBER_TYPES_EXPRESSION;
6303
- module.exports.VariableInfo = VariableInfo;
6304
- module.exports.VariableInfoFlags = VariableInfoFlags;
6305
- module.exports.getImportAttributes = getImportAttributes;
6480
+ JavascriptParser.VariableInfo = VariableInfo;
6481
+ JavascriptParser.VariableInfoFlags = VariableInfoFlags;
6482
+ JavascriptParser.getImportAttributes = getImportAttributes;
6483
+
6484
+ module.exports = JavascriptParser;
@@ -6,14 +6,17 @@
6
6
  "use strict";
7
7
 
8
8
  const ConstDependency = require("../dependencies/ConstDependency");
9
- const UnsupportedFeatureWarning = require("../errors/UnsupportedFeatureWarning");
9
+ const memoize = require("../util/memoize");
10
+
10
11
  const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
11
12
 
12
- /** @typedef {import("estree").Expression} Expression */
13
- /** @typedef {import("estree").SourceLocation} SourceLocation */
14
- /** @typedef {import("./JavascriptParser")} JavascriptParser */
15
- /** @typedef {import("./JavascriptParser").Range} Range */
16
- /** @typedef {import("./BasicEvaluatedExpression").GetMembers} GetMembers */
13
+ const getUnsupportedFeatureWarning = memoize(() =>
14
+ require("../errors/UnsupportedFeatureWarning")
15
+ );
16
+
17
+ /** @import { Expression } from "estree" */
18
+ /** @import JavascriptParser, { Range } from "./JavascriptParser" */
19
+ /** @import { GetMembers } from "./BasicEvaluatedExpression" */
17
20
 
18
21
  module.exports.approve = () => true;
19
22
 
@@ -104,7 +107,7 @@ module.exports.expressionIsUnsupported = (parser, message) =>
104
107
  parser.state.module.addPresentationalDependency(dep);
105
108
  if (!parser.state.module) return;
106
109
  parser.state.module.addWarning(
107
- new UnsupportedFeatureWarning(message, parser.getLocation(expr))
110
+ new (getUnsupportedFeatureWarning())(message, parser.getLocation(expr))
108
111
  );
109
112
  return true;
110
113
  };