@depup/webpack 5.106.1-depup.0 → 5.109.2-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 (669) hide show
  1. package/README.md +9 -11
  2. package/bin/webpack.js +12 -0
  3. package/changes.json +16 -24
  4. package/hot/dev-server.js +2 -0
  5. package/lib/APIPlugin.js +60 -35
  6. package/lib/AsyncDependenciesBlock.js +3 -0
  7. package/lib/AutomaticPrefetchPlugin.js +6 -1
  8. package/lib/BannerPlugin.js +13 -5
  9. package/lib/Cache.js +27 -5
  10. package/lib/CacheFacade.js +41 -0
  11. package/lib/Chunk.js +71 -25
  12. package/lib/ChunkGraph.js +153 -19
  13. package/lib/ChunkGroup.js +115 -28
  14. package/lib/ChunkTemplate.js +9 -0
  15. package/lib/CircularModulesPlugin.js +190 -0
  16. package/lib/CleanPlugin.js +27 -28
  17. package/lib/CodeGenerationResults.js +19 -0
  18. package/lib/CompatibilityPlugin.js +85 -37
  19. package/lib/Compilation.js +656 -112
  20. package/lib/Compiler.js +109 -35
  21. package/lib/ConcatenationScope.js +34 -4
  22. package/lib/ConditionalInitFragment.js +6 -0
  23. package/lib/ConstPlugin.js +15 -12
  24. package/lib/ContextExclusionPlugin.js +3 -1
  25. package/lib/ContextModule.js +345 -55
  26. package/lib/ContextModuleFactory.js +193 -51
  27. package/lib/ContextReplacementPlugin.js +8 -1
  28. package/lib/DefinePlugin.js +537 -139
  29. package/lib/DependenciesBlock.js +6 -1
  30. package/lib/Dependency.js +159 -11
  31. package/lib/DependencyTemplate.js +7 -1
  32. package/lib/DependencyTemplates.js +4 -0
  33. package/lib/DotenvPlugin.js +3 -0
  34. package/lib/DynamicEntryPlugin.js +3 -1
  35. package/lib/EntryOptionPlugin.js +42 -2
  36. package/lib/EntryPlugin.js +4 -1
  37. package/lib/Entrypoint.js +5 -1
  38. package/lib/EnvironmentPlugin.js +3 -2
  39. package/lib/ErrorHelpers.js +7 -0
  40. package/lib/EvalDevToolModulePlugin.js +3 -1
  41. package/lib/EvalSourceMapDevToolPlugin.js +11 -11
  42. package/lib/ExportsInfo.js +421 -113
  43. package/lib/ExportsInfoApiPlugin.js +4 -3
  44. package/lib/ExternalModule.js +381 -80
  45. package/lib/ExternalModuleFactoryPlugin.js +75 -3
  46. package/lib/ExternalsPlugin.js +3 -1
  47. package/lib/FileSystemInfo.js +701 -175
  48. package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
  49. package/lib/FlagDependencyExportsPlugin.js +82 -9
  50. package/lib/FlagDependencyUsagePlugin.js +115 -8
  51. package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
  52. package/lib/Generator.js +24 -3
  53. package/lib/HotModuleReplacementPlugin.js +110 -44
  54. package/lib/IgnorePlugin.js +5 -2
  55. package/lib/IgnoreWarningsPlugin.js +2 -1
  56. package/lib/InitFragment.js +33 -30
  57. package/lib/JavascriptMetaInfoPlugin.js +9 -6
  58. package/lib/LazyBarrel.js +389 -0
  59. package/lib/LibraryTemplatePlugin.js +2 -1
  60. package/lib/LoaderOptionsPlugin.js +3 -1
  61. package/lib/LoaderTargetPlugin.js +3 -1
  62. package/lib/MainTemplate.js +15 -0
  63. package/lib/ManifestPlugin.js +9 -2
  64. package/lib/Module.js +121 -57
  65. package/lib/ModuleFactory.js +6 -1
  66. package/lib/ModuleFilenameHelpers.js +18 -4
  67. package/lib/ModuleGraph.js +69 -2
  68. package/lib/ModuleGraphConnection.js +9 -0
  69. package/lib/ModuleInfoHeaderPlugin.js +5 -0
  70. package/lib/ModuleNotFoundError.js +3 -83
  71. package/lib/ModuleProfile.js +27 -1
  72. package/lib/ModuleSourceTypeConstants.js +52 -19
  73. package/lib/ModuleTemplate.js +10 -0
  74. package/lib/ModuleTypeConstants.js +20 -4
  75. package/lib/MultiCompiler.js +59 -4
  76. package/lib/MultiStats.js +9 -0
  77. package/lib/MultiWatching.js +6 -0
  78. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  79. package/lib/NodeStuffPlugin.js +78 -46
  80. package/lib/NormalModule.js +519 -206
  81. package/lib/NormalModuleFactory.js +156 -31
  82. package/lib/NormalModuleReplacementPlugin.js +3 -1
  83. package/lib/NullFactory.js +1 -0
  84. package/lib/OptionsApply.js +1 -0
  85. package/lib/Parser.js +3 -1
  86. package/lib/PlatformPlugin.js +2 -1
  87. package/lib/PrefetchPlugin.js +4 -1
  88. package/lib/ProgressPlugin.js +351 -161
  89. package/lib/ProvidePlugin.js +6 -3
  90. package/lib/RawModule.js +32 -16
  91. package/lib/RecordIdsPlugin.js +9 -0
  92. package/lib/RequestShortener.js +8 -0
  93. package/lib/ResolverFactory.js +5 -0
  94. package/lib/RuntimeGlobals.js +58 -5
  95. package/lib/RuntimeModule.js +22 -7
  96. package/lib/RuntimePlugin.js +123 -118
  97. package/lib/RuntimeTemplate.js +616 -37
  98. package/lib/SelfModuleFactory.js +3 -0
  99. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
  100. package/lib/SourceMapDevToolPlugin.js +341 -63
  101. package/lib/Stats.js +6 -0
  102. package/lib/Template.js +52 -6
  103. package/lib/TemplatedPathPlugin.js +505 -138
  104. package/lib/UseStrictPlugin.js +3 -2
  105. package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
  106. package/lib/WarnDeprecatedOptionPlugin.js +6 -2
  107. package/lib/WarnNoModeSetPlugin.js +18 -2
  108. package/lib/WatchIgnorePlugin.js +5 -1
  109. package/lib/Watching.js +25 -3
  110. package/lib/WebpackError.js +3 -74
  111. package/lib/WebpackIsIncludedPlugin.js +4 -2
  112. package/lib/WebpackOptionsApply.js +88 -25
  113. package/lib/WebpackOptionsDefaulter.js +1 -0
  114. package/lib/asset/AssetBytesGenerator.js +28 -10
  115. package/lib/asset/AssetBytesParser.js +1 -0
  116. package/lib/asset/AssetGenerator.js +199 -60
  117. package/lib/asset/AssetModule.js +47 -0
  118. package/lib/asset/AssetModulesPlugin.js +115 -24
  119. package/lib/asset/AssetParser.js +4 -2
  120. package/lib/asset/AssetSourceGenerator.js +26 -8
  121. package/lib/asset/AssetSourceParser.js +1 -0
  122. package/lib/asset/RawDataUrlModule.js +23 -13
  123. package/lib/asset/WebManifestGenerator.js +164 -0
  124. package/lib/asset/WebManifestParser.js +130 -0
  125. package/lib/async-modules/AsyncModuleHelpers.js +1 -0
  126. package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
  127. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  128. package/lib/async-modules/isGeneratorLowered.js +26 -0
  129. package/lib/buildChunkGraph.js +107 -15
  130. package/lib/bun/BunTargetPlugin.js +42 -0
  131. package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
  132. package/lib/cache/AddManagedPathsPlugin.js +5 -1
  133. package/lib/cache/IdleFileCachePlugin.js +6 -1
  134. package/lib/cache/MemoryCachePlugin.js +1 -1
  135. package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
  136. package/lib/cache/PackFileCacheStrategy.js +302 -12
  137. package/lib/cache/ResolverCachePlugin.js +12 -1
  138. package/lib/cache/getLazyHashedEtag.js +13 -2
  139. package/lib/cache/mergeEtags.js +4 -0
  140. package/lib/cli.js +142 -20
  141. package/lib/config/browserslistTargetHandler.js +141 -0
  142. package/lib/config/defaults.js +612 -43
  143. package/lib/config/defineConfig.js +31 -0
  144. package/lib/config/normalization.js +46 -1
  145. package/lib/config/target.js +200 -2
  146. package/lib/container/ContainerEntryDependency.js +2 -0
  147. package/lib/container/ContainerEntryModule.js +27 -14
  148. package/lib/container/ContainerEntryModuleFactory.js +1 -0
  149. package/lib/container/ContainerExposedDependency.js +6 -2
  150. package/lib/container/ContainerPlugin.js +2 -1
  151. package/lib/container/ContainerReferencePlugin.js +3 -2
  152. package/lib/container/FallbackDependency.js +9 -7
  153. package/lib/container/FallbackItemDependency.js +1 -0
  154. package/lib/container/FallbackModule.js +22 -9
  155. package/lib/container/FallbackModuleFactory.js +1 -0
  156. package/lib/container/HoistContainerReferencesPlugin.js +47 -55
  157. package/lib/container/ModuleFederationPlugin.js +21 -29
  158. package/lib/container/RemoteModule.js +33 -10
  159. package/lib/container/RemoteRuntimeModule.js +15 -12
  160. package/lib/container/RemoteToExternalDependency.js +1 -0
  161. package/lib/container/options.js +7 -0
  162. package/lib/css/CssGenerator.js +540 -272
  163. package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
  164. package/lib/css/CssLoadingRuntimeModule.js +173 -81
  165. package/lib/{CssModule.js → css/CssModule.js} +72 -37
  166. package/lib/css/CssModulesPlugin.js +371 -208
  167. package/lib/css/CssParser.js +3538 -1963
  168. package/lib/css/syntax.js +4155 -0
  169. package/lib/debug/ProfilingPlugin.js +33 -2
  170. package/lib/deno/DenoTargetPlugin.js +41 -0
  171. package/lib/dependencies/AMDDefineDependency.js +29 -17
  172. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
  173. package/lib/dependencies/AMDPlugin.js +6 -3
  174. package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
  175. package/lib/dependencies/AMDRequireContextDependency.js +10 -11
  176. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
  177. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
  178. package/lib/dependencies/AMDRequireDependency.js +28 -20
  179. package/lib/dependencies/AMDRequireItemDependency.js +1 -0
  180. package/lib/dependencies/AMDRuntimeModules.js +3 -0
  181. package/lib/dependencies/CachedConstDependency.js +9 -1
  182. package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
  183. package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
  184. package/lib/dependencies/CommonJsExportsDependency.js +74 -20
  185. package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
  186. package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
  187. package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
  188. package/lib/dependencies/CommonJsPlugin.js +7 -4
  189. package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
  190. package/lib/dependencies/CommonJsRequireDependency.js +135 -13
  191. package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
  192. package/lib/dependencies/ConstDependency.js +22 -12
  193. package/lib/dependencies/ContextDependency.js +13 -2
  194. package/lib/dependencies/ContextDependencyHelpers.js +7 -4
  195. package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
  196. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  197. package/lib/dependencies/ContextElementDependency.js +27 -14
  198. package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
  199. package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
  200. package/lib/dependencies/CriticalDependencyWarning.js +3 -1
  201. package/lib/dependencies/CssIcssExportDependency.js +681 -367
  202. package/lib/dependencies/CssIcssImportDependency.js +62 -17
  203. package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
  204. package/lib/dependencies/CssImportDependency.js +37 -1
  205. package/lib/dependencies/CssUrlDependency.js +87 -14
  206. package/lib/dependencies/DelegatedSourceDependency.js +1 -0
  207. package/lib/dependencies/DllEntryDependency.js +12 -13
  208. package/lib/dependencies/DynamicExports.js +5 -0
  209. package/lib/dependencies/EntryDependency.js +1 -0
  210. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  211. package/lib/dependencies/ExportsInfoDependency.js +18 -12
  212. package/lib/dependencies/ExternalModuleDependency.js +13 -5
  213. package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
  214. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
  215. package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
  216. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
  217. package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
  218. package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
  219. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
  220. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
  221. package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
  222. package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
  224. package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
  226. package/lib/dependencies/HarmonyExports.js +6 -1
  227. package/lib/dependencies/HarmonyImportDependency.js +60 -4
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
  229. package/lib/dependencies/HarmonyImportGuard.js +427 -0
  230. package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
  231. package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
  232. package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
  233. package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
  234. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
  235. package/lib/dependencies/HtmlEntryDependency.js +1295 -0
  236. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  237. package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
  238. package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
  239. package/lib/dependencies/HtmlSourceDependency.js +172 -0
  240. package/lib/dependencies/ImportContextDependency.js +9 -9
  241. package/lib/dependencies/ImportDependency.js +92 -3
  242. package/lib/dependencies/ImportEagerDependency.js +2 -0
  243. package/lib/dependencies/ImportMetaContextDependency.js +1 -0
  244. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
  245. package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
  246. package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
  247. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
  248. package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
  249. package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
  250. package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
  251. package/lib/dependencies/ImportMetaPlugin.js +595 -209
  252. package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
  253. package/lib/dependencies/ImportParserPlugin.js +114 -27
  254. package/lib/dependencies/ImportPhase.js +17 -11
  255. package/lib/dependencies/ImportPlugin.js +2 -1
  256. package/lib/dependencies/ImportWeakDependency.js +3 -0
  257. package/lib/dependencies/JsonExportsDependency.js +15 -10
  258. package/lib/dependencies/LoaderDependency.js +2 -0
  259. package/lib/dependencies/LoaderImportDependency.js +3 -0
  260. package/lib/dependencies/LoaderPlugin.js +9 -2
  261. package/lib/dependencies/LocalModule.js +15 -12
  262. package/lib/dependencies/LocalModuleDependency.js +15 -13
  263. package/lib/dependencies/LocalModulesHelpers.js +3 -0
  264. package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
  265. package/lib/dependencies/ModuleDependency.js +14 -0
  266. package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
  267. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  268. package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
  269. package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
  270. package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
  271. package/lib/dependencies/NullDependency.js +2 -0
  272. package/lib/dependencies/PrefetchDependency.js +1 -0
  273. package/lib/dependencies/ProvidedDependency.js +36 -27
  274. package/lib/dependencies/PureExpressionDependency.js +14 -10
  275. package/lib/dependencies/RequireContextDependency.js +1 -0
  276. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
  277. package/lib/dependencies/RequireContextPlugin.js +2 -1
  278. package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
  279. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
  280. package/lib/dependencies/RequireEnsureDependency.js +16 -13
  281. package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
  282. package/lib/dependencies/RequireEnsurePlugin.js +2 -1
  283. package/lib/dependencies/RequireHeaderDependency.js +7 -4
  284. package/lib/dependencies/RequireIncludeDependency.js +2 -0
  285. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
  286. package/lib/dependencies/RequireIncludePlugin.js +2 -1
  287. package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
  288. package/lib/dependencies/RequireResolveContextDependency.js +10 -11
  289. package/lib/dependencies/RequireResolveDependency.js +2 -0
  290. package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
  291. package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
  292. package/lib/dependencies/StaticExportsDependency.js +13 -10
  293. package/lib/dependencies/SystemPlugin.js +9 -6
  294. package/lib/dependencies/SystemRuntimeModule.js +1 -0
  295. package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
  296. package/lib/dependencies/URLContextDependency.js +8 -7
  297. package/lib/dependencies/URLDependency.js +157 -33
  298. package/lib/dependencies/URLPlugin.js +2 -0
  299. package/lib/dependencies/UnsupportedDependency.js +12 -13
  300. package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
  301. package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
  302. package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
  303. package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
  304. package/lib/dependencies/WorkerDependency.js +111 -27
  305. package/lib/dependencies/WorkletDependency.js +278 -0
  306. package/lib/dependencies/getFunctionExpression.js +1 -0
  307. package/lib/dependencies/processExportInfo.js +14 -11
  308. package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
  309. package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
  310. package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
  311. package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
  312. package/lib/{DllModule.js → dll/DllModule.js} +36 -24
  313. package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
  314. package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
  315. package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
  316. package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
  317. package/lib/electron/ElectronTargetPlugin.js +24 -5
  318. package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
  319. package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
  320. package/lib/errors/BuildCycleError.js +1 -1
  321. package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
  322. package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
  323. package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
  324. package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
  325. package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
  326. package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
  327. package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
  328. package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
  329. package/lib/errors/JSONParseError.js +115 -0
  330. package/lib/errors/LoaderLoadingError.js +20 -0
  331. package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
  332. package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
  333. package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
  334. package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
  335. package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
  336. package/lib/errors/ModuleNotFoundError.js +94 -0
  337. package/lib/errors/ModuleParseError.js +141 -0
  338. package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
  339. package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
  340. package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
  341. package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
  342. package/lib/errors/NonErrorEmittedError.js +30 -0
  343. package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
  344. package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
  345. package/lib/errors/WebpackError.js +84 -0
  346. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  347. package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
  348. package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
  349. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
  350. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  351. package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
  352. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  353. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
  354. package/lib/hmr/LazyCompilationPlugin.js +154 -7
  355. package/lib/hmr/lazyCompilationBackend.js +53 -12
  356. package/lib/html/HtmlGenerator.js +1490 -0
  357. package/lib/html/HtmlModule.js +41 -0
  358. package/lib/html/HtmlModulesPlugin.js +1129 -0
  359. package/lib/html/HtmlParser.js +1970 -0
  360. package/lib/html/favicon.svg +1 -0
  361. package/lib/html/syntax.js +9106 -0
  362. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
  363. package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
  364. package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
  365. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  366. package/lib/ids/IdHelpers.js +49 -12
  367. package/lib/ids/NamedChunkIdsPlugin.js +3 -1
  368. package/lib/ids/NamedModuleIdsPlugin.js +3 -1
  369. package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
  370. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  371. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
  372. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
  373. package/lib/ids/SyncModuleIdsPlugin.js +3 -1
  374. package/lib/index.js +66 -15
  375. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
  376. package/lib/javascript/BasicEvaluatedExpression.js +370 -49
  377. package/lib/javascript/ChunkFormatHelpers.js +2 -1
  378. package/lib/javascript/ChunkHelpers.js +1 -0
  379. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  380. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
  381. package/lib/javascript/JavascriptGenerator.js +213 -51
  382. package/lib/javascript/JavascriptModule.js +54 -0
  383. package/lib/javascript/JavascriptModulesPlugin.js +628 -198
  384. package/lib/javascript/JavascriptParser.js +1334 -471
  385. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  386. package/lib/javascript/StartupHelpers.js +5 -0
  387. package/lib/javascript/syntax.js +5037 -0
  388. package/lib/json/JsonData.js +5 -0
  389. package/lib/json/JsonGenerator.js +21 -0
  390. package/lib/json/JsonModule.js +40 -0
  391. package/lib/json/JsonModulesPlugin.js +8 -1
  392. package/lib/json/JsonParser.js +18 -27
  393. package/lib/library/AbstractLibraryPlugin.js +17 -2
  394. package/lib/library/AmdLibraryPlugin.js +8 -0
  395. package/lib/library/AssignLibraryPlugin.js +21 -3
  396. package/lib/library/EnableLibraryPlugin.js +8 -2
  397. package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
  398. package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
  399. package/lib/library/JsonpLibraryPlugin.js +8 -0
  400. package/lib/library/ModuleLibraryPlugin.js +154 -7
  401. package/lib/library/SystemLibraryPlugin.js +11 -3
  402. package/lib/library/UmdLibraryPlugin.js +16 -0
  403. package/lib/loaders/LoaderRunner.js +714 -0
  404. package/lib/loaders/loadLoader.js +100 -0
  405. package/lib/logging/Logger.js +17 -0
  406. package/lib/logging/createConsoleLogger.js +7 -0
  407. package/lib/logging/runtime.js +2 -0
  408. package/lib/logging/truncateArgs.js +2 -0
  409. package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
  410. package/lib/node/NodeEnvironmentPlugin.js +7 -3
  411. package/lib/node/NodeSourcePlugin.js +1 -1
  412. package/lib/node/NodeTargetPlugin.js +4 -63
  413. package/lib/node/NodeTemplatePlugin.js +3 -1
  414. package/lib/node/NodeWatchFileSystem.js +40 -22
  415. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
  416. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
  417. package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
  418. package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
  419. package/lib/node/nodeBuiltins.js +80 -0
  420. package/lib/node/nodeConsole.js +116 -64
  421. package/lib/optimize/AggressiveMergingPlugin.js +22 -16
  422. package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
  423. package/lib/optimize/ConcatenatedModule.js +603 -130
  424. package/lib/optimize/ConstExportsPlugin.js +211 -0
  425. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
  426. package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
  427. package/lib/optimize/InlineExports.js +178 -0
  428. package/lib/optimize/InnerGraph.js +374 -262
  429. package/lib/optimize/InnerGraphPlugin.js +246 -117
  430. package/lib/optimize/LimitChunkCountPlugin.js +9 -0
  431. package/lib/optimize/MangleExportsPlugin.js +5 -1
  432. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
  433. package/lib/optimize/MinChunkSizePlugin.js +2 -1
  434. package/lib/optimize/MinMaxSizeWarning.js +5 -4
  435. package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
  436. package/lib/optimize/RealContentHashPlugin.js +130 -52
  437. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  438. package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
  439. package/lib/optimize/RuntimeChunkPlugin.js +2 -1
  440. package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
  441. package/lib/optimize/SplitChunksPlugin.js +200 -50
  442. package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
  443. package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
  444. package/lib/performance/NoAsyncChunksWarning.js +5 -3
  445. package/lib/performance/SizeLimitsPlugin.js +8 -2
  446. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
  447. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
  448. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
  449. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
  450. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
  451. package/lib/prefetch/ResourceHintPlugin.js +687 -0
  452. package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
  453. package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
  454. package/lib/prefetch/parseResourceHintOptions.js +103 -0
  455. package/lib/rules/BasicEffectRulePlugin.js +3 -0
  456. package/lib/rules/BasicMatcherRulePlugin.js +3 -0
  457. package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
  458. package/lib/rules/RuleSetCompiler.js +132 -0
  459. package/lib/rules/UseEffectRulePlugin.js +10 -3
  460. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
  461. package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
  462. package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
  463. package/lib/runtime/BaseUriRuntimeModule.js +1 -0
  464. package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
  465. package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
  466. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
  467. package/lib/runtime/CompatRuntimeModule.js +2 -0
  468. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  469. package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
  470. package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
  471. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
  472. package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
  473. package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
  474. package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
  475. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
  476. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  477. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
  478. package/lib/runtime/GlobalRuntimeModule.js +1 -0
  479. package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
  480. package/lib/runtime/HelperRuntimeModule.js +5 -0
  481. package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
  482. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
  483. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
  484. package/lib/runtime/NonceRuntimeModule.js +1 -0
  485. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
  486. package/lib/runtime/PublicPathRuntimeModule.js +1 -0
  487. package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
  488. package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
  489. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
  490. package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
  491. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
  492. package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
  493. package/lib/runtime/SystemContextRuntimeModule.js +1 -0
  494. package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
  495. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  496. package/lib/schemes/DataUriPlugin.js +14 -2
  497. package/lib/schemes/FileUriPlugin.js +1 -1
  498. package/lib/schemes/HttpUriPlugin.js +86 -4
  499. package/lib/schemes/VirtualUrlPlugin.js +8 -4
  500. package/lib/serialization/AggregateErrorSerializer.js +9 -6
  501. package/lib/serialization/ArraySerializer.js +6 -8
  502. package/lib/serialization/BinaryMiddleware.js +427 -1006
  503. package/lib/serialization/DateObjectSerializer.js +4 -2
  504. package/lib/serialization/ErrorObjectSerializer.js +10 -6
  505. package/lib/serialization/FileMiddleware.js +345 -59
  506. package/lib/serialization/MapObjectSerializer.js +7 -9
  507. package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
  508. package/lib/serialization/ObjectMiddleware.js +73 -13
  509. package/lib/serialization/PlainObjectSerializer.js +16 -8
  510. package/lib/serialization/RegExpObjectSerializer.js +4 -2
  511. package/lib/serialization/Serializer.js +6 -0
  512. package/lib/serialization/SerializerMiddleware.js +14 -2
  513. package/lib/serialization/SetObjectSerializer.js +6 -8
  514. package/lib/serialization/SingleItemMiddleware.js +3 -0
  515. package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
  516. package/lib/sharing/ConsumeSharedModule.js +21 -7
  517. package/lib/sharing/ConsumeSharedPlugin.js +11 -11
  518. package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
  519. package/lib/sharing/ProvideForSharedDependency.js +1 -0
  520. package/lib/sharing/ProvideSharedDependency.js +34 -15
  521. package/lib/sharing/ProvideSharedModule.js +42 -12
  522. package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
  523. package/lib/sharing/ProvideSharedPlugin.js +13 -8
  524. package/lib/sharing/SharePlugin.js +5 -1
  525. package/lib/sharing/ShareRuntimeModule.js +19 -16
  526. package/lib/sharing/resolveMatchedConfigs.js +6 -2
  527. package/lib/sharing/utils.js +9 -1
  528. package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
  529. package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
  530. package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
  531. package/lib/stats/StatsFactory.js +70 -27
  532. package/lib/stats/StatsPrinter.js +16 -2
  533. package/lib/typescript/TypeScriptPlugin.js +210 -0
  534. package/lib/url/URLParserPlugin.js +111 -23
  535. package/lib/util/ArrayHelpers.js +1 -0
  536. package/lib/util/ArrayQueue.js +10 -5
  537. package/lib/util/AsyncQueue.js +154 -74
  538. package/lib/util/Hash.js +2 -2
  539. package/lib/util/IterableHelpers.js +3 -0
  540. package/lib/util/LazyBucketSortedSet.js +26 -0
  541. package/lib/util/LazySet.js +45 -4
  542. package/lib/util/LocConverter.js +64 -0
  543. package/lib/util/ParallelismFactorCalculator.js +1 -0
  544. package/lib/util/Queue.js +6 -3
  545. package/lib/util/Semaphore.js +15 -1
  546. package/lib/util/SetHelpers.js +4 -1
  547. package/lib/util/SortableSet.js +7 -1
  548. package/lib/util/SourceProcessor.js +119 -0
  549. package/lib/util/StackedCacheMap.js +20 -3
  550. package/lib/util/StackedMap.js +162 -43
  551. package/lib/util/StringXor.js +1 -1
  552. package/lib/util/TupleQueue.js +7 -3
  553. package/lib/util/TupleSet.js +14 -0
  554. package/lib/util/URLAbsoluteSpecifier.js +1 -0
  555. package/lib/util/WeakTupleMap.js +60 -1
  556. package/lib/util/binarySearchBounds.js +3 -2
  557. package/lib/util/chainedImports.js +3 -3
  558. package/lib/util/cleverMerge.js +19 -2
  559. package/lib/util/comparators.js +35 -4
  560. package/lib/util/compileBooleanMatcher.js +9 -0
  561. package/lib/util/concatenate.js +80 -24
  562. package/lib/util/conventions.js +46 -1
  563. package/lib/util/createHash.js +0 -1
  564. package/lib/util/createHooksRegistry.js +43 -0
  565. package/lib/util/createMappings.js +118 -0
  566. package/lib/util/dataURL.js +3 -2
  567. package/lib/util/deprecation.js +19 -0
  568. package/lib/util/deterministicGrouping.js +46 -17
  569. package/lib/util/extractSourceMap.js +2 -1
  570. package/lib/util/extractUrlAndGlobal.js +1 -0
  571. package/lib/util/findGraphRoots.js +7 -0
  572. package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
  573. package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
  574. package/lib/util/fs.js +87 -14
  575. package/lib/util/generateDebugId.js +1 -0
  576. package/lib/util/globUtils.js +710 -0
  577. package/lib/util/hash/BatchedHash.js +1 -0
  578. package/lib/util/hash/BulkUpdateHash.js +1 -0
  579. package/lib/util/hash/DebugHash.js +1 -0
  580. package/lib/util/hash/hash-digest.js +32 -15
  581. package/lib/util/hash/md4.js +1 -1
  582. package/lib/util/hash/wasm-hash.js +5 -0
  583. package/lib/util/hash/xxhash64.js +1 -1
  584. package/lib/util/identifier.js +118 -7
  585. package/lib/util/implicitTypeLoaderFallback.js +62 -0
  586. package/lib/util/internalSerializables.js +102 -60
  587. package/lib/util/magicComment.js +149 -7
  588. package/lib/util/makeSerializable.js +7 -0
  589. package/lib/util/memoize.js +2 -0
  590. package/lib/util/mimeTypes.js +176 -0
  591. package/lib/util/nonNumericOnlyHash.js +31 -1
  592. package/lib/util/numberHash.js +2 -2
  593. package/lib/util/parseJson.js +41 -0
  594. package/lib/util/processAsyncTree.js +8 -0
  595. package/lib/util/property.js +9 -2
  596. package/lib/util/publicPathPlaceholder.js +64 -0
  597. package/lib/util/registerExternalSerializer.js +24 -4
  598. package/lib/util/removeBOM.js +1 -0
  599. package/lib/util/runtime.js +32 -0
  600. package/lib/util/semver.js +15 -0
  601. package/lib/util/serialization.js +2 -0
  602. package/lib/util/smartGrouping.js +8 -0
  603. package/lib/util/source.js +23 -0
  604. package/lib/util/topologicalSort.js +69 -0
  605. package/lib/validateSchema.js +1 -0
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
  607. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
  608. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
  609. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  610. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
  611. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
  612. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
  613. package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
  614. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
  615. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  616. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
  623. package/lib/wasm-sync/WebAssemblyParser.js +9 -3
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
  626. package/lib/web/FetchCompileWasmPlugin.js +27 -1
  627. package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
  629. package/lib/web/JsonpTemplatePlugin.js +2 -1
  630. package/lib/webpack.js +78 -1
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +21 -0
  635. package/package.json +79 -77
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +1173 -80
  638. package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
  639. package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
  640. package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
  641. package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
  642. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  643. package/schemas/plugins/HtmlParserOptions.json +3 -0
  644. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  645. package/schemas/plugins/ProgressPlugin.json +38 -0
  646. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  647. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  648. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  649. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  650. package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
  651. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
  652. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
  653. package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
  654. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  655. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  656. package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
  657. package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
  658. package/types.d.ts +11053 -3019
  659. package/lib/CaseSensitiveModulesWarning.js +0 -72
  660. package/lib/GraphHelpers.js +0 -46
  661. package/lib/ModuleParseError.js +0 -125
  662. package/lib/NoModeWarning.js +0 -23
  663. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
  664. package/lib/css/walkCssTokens.js +0 -1843
  665. package/lib/util/AppendOnlyStackedSet.js +0 -78
  666. /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
  667. /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
  668. /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
  669. /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
@@ -12,8 +12,8 @@ const {
12
12
  JAVASCRIPT_MODULE_TYPE_ESM
13
13
  } = require("./ModuleTypeConstants");
14
14
  const RuntimeGlobals = require("./RuntimeGlobals");
15
- const WebpackError = require("./WebpackError");
16
15
  const ConstDependency = require("./dependencies/ConstDependency");
16
+ const WebpackError = require("./errors/WebpackError");
17
17
  const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
18
18
  const { VariableInfo } = require("./javascript/JavascriptParser");
19
19
  const {
@@ -21,6 +21,7 @@ const {
21
21
  toConstantDependency
22
22
  } = require("./javascript/JavascriptParserHelpers");
23
23
  const createHash = require("./util/createHash");
24
+ const createHooksRegistry = require("./util/createHooksRegistry");
24
25
 
25
26
  /** @typedef {import("estree").Expression} Expression */
26
27
  /** @typedef {import("./Compiler")} Compiler */
@@ -31,14 +32,17 @@ const createHash = require("./util/createHash");
31
32
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
32
33
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
33
34
  /** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
35
+ /** @typedef {import("./javascript/JavascriptParser").Members} Members */
34
36
  /** @typedef {import("./javascript/JavascriptParser").Range} Range */
35
37
  /** @typedef {import("./logging/Logger").Logger} Logger */
36
38
  /** @typedef {import("./Compilation")} Compilation */
39
+ /** @typedef {import("./NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
37
40
 
38
41
  /** @typedef {null | undefined | RegExp | EXPECTED_FUNCTION | string | number | boolean | bigint | undefined} CodeValuePrimitive */
39
42
  /** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive | RuntimeValue>} CodeValue */
40
43
 
41
44
  /**
45
+ * Defines the runtime value options type used by this module.
42
46
  * @typedef {object} RuntimeValueOptions
43
47
  * @property {string[]=} fileDependencies
44
48
  * @property {string[]=} contextDependencies
@@ -51,6 +55,7 @@ const createHash = require("./util/createHash");
51
55
 
52
56
  class RuntimeValue {
53
57
  /**
58
+ * Creates an instance of RuntimeValue.
54
59
  * @param {GeneratorFn} fn generator function
55
60
  * @param {true | string[] | RuntimeValueOptions=} options options
56
61
  */
@@ -71,6 +76,7 @@ class RuntimeValue {
71
76
  }
72
77
 
73
78
  /**
79
+ * Returns code.
74
80
  * @param {JavascriptParser} parser the parser
75
81
  * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
76
82
  * @param {string} key the defined key
@@ -80,6 +86,10 @@ class RuntimeValue {
80
86
  const buildInfo = /** @type {BuildInfo} */ (parser.state.module.buildInfo);
81
87
  if (this.options === true) {
82
88
  buildInfo.cacheable = false;
89
+ const reasons =
90
+ buildInfo.notCacheableReasons || (buildInfo.notCacheableReasons = []);
91
+ const reason = `DefinePlugin runtime value ${key}`;
92
+ if (!reasons.includes(reason)) reasons.push(reason);
83
93
  } else {
84
94
  if (this.options.fileDependencies) {
85
95
  for (const dep of this.options.fileDependencies) {
@@ -128,6 +138,7 @@ class RuntimeValue {
128
138
  }
129
139
 
130
140
  /**
141
+ * Returns used keys.
131
142
  * @param {DestructuringAssignmentProperties | undefined} properties properties
132
143
  * @returns {Set<string> | undefined} used keys
133
144
  */
@@ -136,10 +147,22 @@ function getObjKeys(properties) {
136
147
  return new Set([...properties].map((p) => p.id));
137
148
  }
138
149
 
150
+ /**
151
+ * Whether a value is a nested definition (plain object/array) to recurse into.
152
+ * @param {CodeValue} code code value
153
+ * @returns {code is Definitions} true for a plain object or array
154
+ */
155
+ const isObjectDefinition = (code) =>
156
+ Boolean(code) &&
157
+ typeof code === "object" &&
158
+ !(code instanceof RuntimeValue) &&
159
+ !(code instanceof RegExp);
160
+
139
161
  /** @typedef {Set<string> | null} ObjKeys */
140
162
  /** @typedef {boolean | undefined | null} AsiSafe */
141
163
 
142
164
  /**
165
+ * Returns code converted to string that evaluates.
143
166
  * @param {EXPECTED_ANY[] | { [k: string]: EXPECTED_ANY }} obj obj
144
167
  * @param {JavascriptParser} parser Parser
145
168
  * @param {ValueCacheVersions} valueCacheVersions valueCacheVersions
@@ -185,7 +208,7 @@ const stringifyObj = (
185
208
  code = `{${keys
186
209
  .map((key) => {
187
210
  const code = obj[key];
188
- return `${key === "__proto__" ? '["__proto__"]' : JSON.stringify(key)}:${toCode(
211
+ return `${toPropertyKey(key)}:${toCode(
189
212
  code,
190
213
  parser,
191
214
  valueCacheVersions,
@@ -287,6 +310,7 @@ const toCode = (
287
310
  };
288
311
 
289
312
  /**
313
+ * Returns result.
290
314
  * @param {CodeValue} code code
291
315
  * @returns {string | undefined} result
292
316
  */
@@ -313,7 +337,7 @@ const toCacheVersion = (code) => {
313
337
  const items = Object.keys(code).map((key) => ({
314
338
  key,
315
339
  value: toCacheVersion(
316
- /** @type {Record<string, EXPECTED_ANY>} */
340
+ /** @type {Record<string, CodeValue>} */
317
341
  (code)[key]
318
342
  )
319
343
  }));
@@ -330,37 +354,315 @@ const PLUGIN_NAME = "DefinePlugin";
330
354
  const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
331
355
  const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
332
356
  const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
333
- const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
334
- `${RuntimeGlobals.require}\\s*(!?\\.)`
335
- );
336
- const WEBPACK_REQUIRE_IDENTIFIER_REGEXP = new RegExp(RuntimeGlobals.require);
357
+ const EMPTY_OBJECT = {};
358
+
359
+ /** @typedef {Map<string, MergedDefinitionNode>} MergedDefinitionMap */
360
+ /** @typedef {CodeValue | MergedDefinitionMap} MergedDefinitionNode */
337
361
 
338
362
  /**
339
- * @typedef {object} DefinePluginHooks
340
- * @property {SyncWaterfallHook<[Record<string, CodeValue>]>} definitions
363
+ * Merged view of the definitions of every DefinePlugin instance.
364
+ * @typedef {object} MergedDefinitions
365
+ * @property {Compilation} compilation the compilation
366
+ * @property {Definitions} definitions flat definitions
367
+ * @property {MergedDefinitionMap} root nested view (dotted keys expanded)
368
+ * @property {Map<string, Set<string>>} finalByNestedKey final key segments by nested object key
369
+ * @property {Map<string, Set<string>>} nestedByFinalKey nested object keys by final key segment
370
+ * @property {Map<string, string[]>} keysByPrefix definition keys below each dotted-key prefix
371
+ * @property {boolean} hasRuntimeValue renders are module-dependent (RuntimeValue present)
372
+ * @property {WeakMap<MergedDefinitionMap, string>} codeCache rendered code per node (static trees only)
373
+ * @property {Logger} logger the logger
341
374
  */
342
375
 
343
- /** @typedef {Record<string, CodeValue>} Definitions */
376
+ /** @type {WeakMap<Compilation, MergedDefinitions>} */
377
+ const mergedDefinitionsMap = new WeakMap();
344
378
 
345
- /** @type {WeakMap<Compilation, DefinePluginHooks>} */
346
- const compilationHooksMap = new WeakMap();
379
+ /**
380
+ * Whether a definition value is a plain object to expand into the nested view.
381
+ * @param {CodeValue} code definition value
382
+ * @returns {code is Definitions} true for a plain object
383
+ */
384
+ const isPlainObjectDefinition = (code) => {
385
+ if (!code || typeof code !== "object" || Array.isArray(code)) return false;
386
+ const proto = Object.getPrototypeOf(code);
387
+ return proto === Object.prototype || proto === null;
388
+ };
347
389
 
348
- class DefinePlugin {
390
+ /**
391
+ * Object literal key code; `__proto__` must be computed to stay an own property.
392
+ * @param {string} key property key
393
+ * @returns {string} property key code
394
+ */
395
+ const toPropertyKey = (key) =>
396
+ key === "__proto__" ? '["__proto__"]' : JSON.stringify(key);
397
+
398
+ /**
399
+ * Whether a definition value contains a RuntimeValue (module-dependent code).
400
+ * @param {CodeValue} value definition value
401
+ * @returns {boolean} true when a RuntimeValue is contained
402
+ */
403
+ const containsRuntimeValue = (value) => {
404
+ if (value instanceof RuntimeValue) return true;
405
+ if (isObjectDefinition(value)) {
406
+ for (const key of Object.keys(value)) {
407
+ if (containsRuntimeValue(value[key])) return true;
408
+ }
409
+ }
410
+ return false;
411
+ };
412
+
413
+ /**
414
+ * Sets a definition value on a node of the nested view, merging plain objects.
415
+ * @param {MergedDefinitionMap} node node
416
+ * @param {string} key key
417
+ * @param {CodeValue} value definition value
418
+ */
419
+ const setMergedValue = (node, key, value) => {
420
+ const existing = node.get(key);
421
+ if (isPlainObjectDefinition(value)) {
422
+ const map =
423
+ existing instanceof Map
424
+ ? existing
425
+ : /** @type {MergedDefinitionMap} */ (new Map());
426
+ if (map !== existing) node.set(key, map);
427
+ for (const k of Object.keys(value)) setMergedValue(map, k, value[k]);
428
+ } else {
429
+ node.set(key, value);
430
+ }
431
+ };
432
+
433
+ /**
434
+ * Inserts a definition key path into the nested view.
435
+ * @param {MergedDefinitionMap} root root node
436
+ * @param {string[]} path dot-separated key path
437
+ * @param {CodeValue} value definition value
438
+ */
439
+ const insertMergedDefinition = (root, path, value) => {
440
+ let node = root;
441
+ for (let i = 0; i < path.length - 1; i++) {
442
+ let next = node.get(path[i]);
443
+ if (next === undefined && !node.has(path[i])) {
444
+ next = /** @type {MergedDefinitionMap} */ (new Map());
445
+ node.set(path[i], next);
446
+ } else if (!(next instanceof Map)) {
447
+ // deeper keys cannot merge into a non-object value
448
+ return;
449
+ }
450
+ node = next;
451
+ }
452
+ setMergedValue(node, path[path.length - 1], value);
453
+ };
454
+
455
+ /**
456
+ * Returns the merged view of all definitions (built once per compilation).
457
+ * @param {Compilation} compilation the compilation
458
+ * @returns {MergedDefinitions} merged definitions
459
+ */
460
+ const getMergedDefinitions = (compilation) => {
461
+ const cached = mergedDefinitionsMap.get(compilation);
462
+ if (cached) return cached;
463
+
464
+ const definitions = DefinePlugin.getCompilationHooks(
465
+ compilation
466
+ ).definitions.call({});
467
+ /** @type {MergedDefinitionMap} */
468
+ const root = new Map();
469
+ /** @type {Map<string, Set<string>>} */
470
+ const finalByNestedKey = new Map();
471
+ /** @type {Map<string, Set<string>>} */
472
+ const nestedByFinalKey = new Map();
349
473
  /**
350
- * @param {Compilation} compilation the compilation
351
- * @returns {DefinePluginHooks} the attached hooks
474
+ * @param {Map<string, Set<string>>} map map
475
+ * @param {string} key key
476
+ * @param {string} value value
352
477
  */
353
- static getCompilationHooks(compilation) {
354
- let hooks = compilationHooksMap.get(compilation);
355
- if (hooks === undefined) {
356
- hooks = {
357
- definitions: new SyncWaterfallHook(["definitions"])
358
- };
359
- compilationHooksMap.set(compilation, hooks);
478
+ const addToMap = (map, key, value) => {
479
+ const set = map.get(key);
480
+ if (set) {
481
+ set.add(value);
482
+ } else {
483
+ map.set(key, new Set([value]));
360
484
  }
361
- return hooks;
485
+ };
486
+ let hasRuntimeValue = false;
487
+ /** @type {Map<string, string[]>} */
488
+ const keysByPrefix = new Map();
489
+ for (const key of Object.keys(definitions)) {
490
+ if (TYPEOF_OPERATOR_REGEXP.test(key)) continue;
491
+ const code = definitions[key];
492
+ insertMergedDefinition(root, key.split("."), code);
493
+ if (!hasRuntimeValue && containsRuntimeValue(code)) hasRuntimeValue = true;
494
+ // group this key under every ancestor prefix (value deps of object reads)
495
+ for (
496
+ let idx = key.indexOf(".");
497
+ idx !== -1;
498
+ idx = key.indexOf(".", idx + 1)
499
+ ) {
500
+ const prefix = key.slice(0, idx);
501
+ const keys = keysByPrefix.get(prefix);
502
+ if (keys) {
503
+ keys.push(key);
504
+ } else {
505
+ keysByPrefix.set(prefix, [key]);
506
+ }
507
+ }
508
+ if (!code || typeof code === "object") continue;
509
+ const idx = key.lastIndexOf(".");
510
+ if (idx <= 0 || idx >= key.length - 1) continue;
511
+ const nested = key.slice(0, idx);
512
+ const final = key.slice(idx + 1);
513
+ addToMap(finalByNestedKey, nested, final);
514
+ addToMap(nestedByFinalKey, final, nested);
515
+ }
516
+ const result = {
517
+ compilation,
518
+ definitions,
519
+ root,
520
+ finalByNestedKey,
521
+ nestedByFinalKey,
522
+ keysByPrefix,
523
+ hasRuntimeValue,
524
+ codeCache: new WeakMap(),
525
+ logger: compilation.getLogger("webpack.DefinePlugin")
526
+ };
527
+ mergedDefinitionsMap.set(compilation, result);
528
+ return result;
529
+ };
530
+
531
+ /**
532
+ * Returns the merged definition node for a definition key.
533
+ * @param {Compilation} compilation the compilation
534
+ * @param {string} key definition key
535
+ * @returns {MergedDefinitionNode | undefined} merged node
536
+ */
537
+ const getMergedDefinitionNode = (compilation, key) => {
538
+ /** @type {MergedDefinitionNode | undefined} */
539
+ let node = getMergedDefinitions(compilation).root;
540
+ for (const part of key.split(".")) {
541
+ if (!(node instanceof Map)) return;
542
+ node = node.get(part);
362
543
  }
544
+ return node;
545
+ };
546
+
547
+ /**
548
+ * Returns a merged map node converted to an object literal code string
549
+ * (no ASI wrapping). Static renders (no key filter, no RuntimeValue) are
550
+ * cached per compilation.
551
+ * @param {MergedDefinitions} merged merged definitions
552
+ * @param {MergedDefinitionMap} node merged map node
553
+ * @param {JavascriptParser} parser Parser
554
+ * @param {string} key the defined key
555
+ * @param {ObjKeys=} objKeys used keys
556
+ * @returns {string} code
557
+ */
558
+ const stringifyMergedNode = (merged, node, parser, key, objKeys) => {
559
+ const cacheable = objKeys === undefined && !merged.hasRuntimeValue;
560
+ if (cacheable) {
561
+ const cached = merged.codeCache.get(node);
562
+ if (cached !== undefined) return cached;
563
+ }
564
+ let keys = [...node.keys()];
565
+ if (objKeys) {
566
+ keys = objKeys.size === 0 ? [] : keys.filter((k) => objKeys.has(k));
567
+ }
568
+ const code = `{${keys
569
+ .map((k) => {
570
+ const value = /** @type {MergedDefinitionNode} */ (node.get(k));
571
+ return `${toPropertyKey(k)}:${
572
+ value instanceof Map
573
+ ? stringifyMergedNode(merged, value, parser, k)
574
+ : toCode(
575
+ value,
576
+ parser,
577
+ merged.compilation.valueCacheVersions,
578
+ k,
579
+ merged.compilation.runtimeTemplate,
580
+ merged.logger,
581
+ null
582
+ )
583
+ }`;
584
+ })
585
+ .join(",")}}`;
586
+ if (cacheable) merged.codeCache.set(node, code);
587
+ return code;
588
+ };
589
+
590
+ /**
591
+ * Renders a merged definition node to raw code (object literal for map nodes).
592
+ * @param {Compilation} compilation the compilation
593
+ * @param {JavascriptParser} parser Parser
594
+ * @param {MergedDefinitionNode} node merged node
595
+ * @param {string} key the defined key
596
+ * @param {ObjKeys=} objKeys used keys
597
+ * @returns {string} code
598
+ */
599
+ const stringifyMergedDefinition = (compilation, parser, node, key, objKeys) => {
600
+ const merged = getMergedDefinitions(compilation);
601
+ return node instanceof Map
602
+ ? stringifyMergedNode(merged, node, parser, key, objKeys)
603
+ : toCode(
604
+ node,
605
+ parser,
606
+ compilation.valueCacheVersions,
607
+ key,
608
+ compilation.runtimeTemplate,
609
+ merged.logger,
610
+ null
611
+ );
612
+ };
363
613
 
614
+ const WEBPACK_REQUIRE_FUNCTION_REGEXP = new RegExp(
615
+ `${RuntimeGlobals.require}\\s*(!?\\.)`
616
+ );
617
+
618
+ /**
619
+ * Runtime requirements of replacement code referencing the require function.
620
+ * @param {string} code replacement code
621
+ * @returns {string[] | undefined} runtime requirements
622
+ */
623
+ const getRuntimeRequirements = (code) => {
624
+ // fast path: most replacement code never references the require function
625
+ if (!code.includes(RuntimeGlobals.require)) return;
626
+ return WEBPACK_REQUIRE_FUNCTION_REGEXP.test(code)
627
+ ? [RuntimeGlobals.require]
628
+ : [RuntimeGlobals.requireScope];
629
+ };
630
+
631
+ const createCompilationHooks = () => ({
632
+ /**
633
+ * @type {SyncWaterfallHook<[Record<string, CodeValue>]>}
634
+ * @since 5.104.0
635
+ */
636
+ definitions: new SyncWaterfallHook(["definitions"])
637
+ });
638
+
639
+ /**
640
+ * Prefixes an evaluation error with the offending define key so a bare
641
+ * "Unexpected token" becomes actionable. The original error is mutated and
642
+ * returned (not re-wrapped) so its `loc`/`stack` survive for ModuleParseError's
643
+ * code frame instead of being dumped into the message.
644
+ * @param {string} key the defined key
645
+ * @param {CodeValue} code the defined value
646
+ * @param {unknown} error the original evaluation error
647
+ * @returns {Error} the annotated error
648
+ */
649
+ const annotateEvaluationError = (key, code, error) => {
650
+ const value = typeof code === "string" ? code : JSON.stringify(code);
651
+ const prefix = `DefinePlugin: failed to evaluate value for "${key}" (\`${value}\`)`;
652
+ if (error instanceof Error) {
653
+ error.message = `${prefix}: ${error.message}`;
654
+ return error;
655
+ }
656
+ return new WebpackError(`${prefix}: ${error}`);
657
+ };
658
+
659
+ /**
660
+ * @typedef {ReturnType<typeof createCompilationHooks>} DefinePluginHooks
661
+ */
662
+
663
+ /** @typedef {Record<string, CodeValue>} Definitions */
664
+
665
+ class DefinePlugin {
364
666
  /**
365
667
  * Create a new define plugin
366
668
  * @param {Definitions} definitions A map of global object definitions
@@ -371,6 +673,7 @@ class DefinePlugin {
371
673
  }
372
674
 
373
675
  /**
676
+ * Returns runtime value.
374
677
  * @param {GeneratorFn} fn generator function
375
678
  * @param {true | string[] | RuntimeValueOptions=} options options
376
679
  * @returns {RuntimeValue} runtime value
@@ -380,7 +683,7 @@ class DefinePlugin {
380
683
  }
381
684
 
382
685
  /**
383
- * Apply the plugin
686
+ * Applies the plugin by registering its hooks on the compiler.
384
687
  * @param {Compiler} compiler the compiler instance
385
688
  * @returns {void}
386
689
  */
@@ -396,15 +699,6 @@ class DefinePlugin {
396
699
  ...definitions
397
700
  }));
398
701
 
399
- /**
400
- * @type {Map<string, Set<string>>}
401
- */
402
- const finalByNestedKey = new Map();
403
- /**
404
- * @type {Map<string, Set<string>>}
405
- */
406
- const nestedByFinalKey = new Map();
407
-
408
702
  const logger = compilation.getLogger("webpack.DefinePlugin");
409
703
  compilation.dependencyTemplates.set(
410
704
  ConstDependency,
@@ -419,18 +713,21 @@ class DefinePlugin {
419
713
  );
420
714
 
421
715
  /**
422
- * Handler
716
+ * Handles the hook callback for this code path.
423
717
  * @param {JavascriptParser} parser Parser
424
718
  * @returns {void}
425
719
  */
426
720
  const handler = (parser) => {
721
+ // built lazily here: every definitions hook is tapped by the time
722
+ // parsers are created, and the result is cached per compilation
723
+ const mergedDefinitions = getMergedDefinitions(compilation);
427
724
  /** @type {Set<string>} */
428
725
  const hooked = new Set();
429
726
  const mainValue =
430
727
  /** @type {ValueCacheVersion} */
431
728
  (compilation.valueCacheVersions.get(VALUE_DEP_MAIN));
432
729
  parser.hooks.program.tap(PLUGIN_NAME, () => {
433
- const buildInfo = /** @type {BuildInfo} */ (
730
+ const buildInfo = /** @type {NormalModuleBuildInfo} */ (
434
731
  parser.state.module.buildInfo
435
732
  );
436
733
  if (!buildInfo.valueDependencies) {
@@ -440,13 +737,14 @@ class DefinePlugin {
440
737
  });
441
738
 
442
739
  /**
740
+ * Adds value dependency.
443
741
  * @param {string} key key
444
742
  */
445
743
  const addValueDependency = (key) => {
446
744
  const buildInfo =
447
- /** @type {BuildInfo} */
745
+ /** @type {NormalModuleBuildInfo} */
448
746
  (parser.state.module.buildInfo);
449
- /** @type {NonNullable<BuildInfo["valueDependencies"]>} */
747
+ /** @type {NonNullable<NormalModuleBuildInfo["valueDependencies"]>} */
450
748
  (buildInfo.valueDependencies).set(
451
749
  VALUE_DEP_PREFIX + key,
452
750
  /** @type {ValueCacheVersion} */
@@ -455,6 +753,7 @@ class DefinePlugin {
455
753
  };
456
754
 
457
755
  /**
756
+ * With value dependency.
458
757
  * @template T
459
758
  * @param {string} key key
460
759
  * @param {(expression: Expression) => T} fn fn
@@ -468,7 +767,7 @@ class DefinePlugin {
468
767
  };
469
768
 
470
769
  /**
471
- * Walk definitions
770
+ * Processes the provided definition.
472
771
  * @param {Definitions} definitions Definitions map
473
772
  * @param {string} prefix Prefix string
474
773
  * @returns {void}
@@ -476,12 +775,7 @@ class DefinePlugin {
476
775
  const walkDefinitions = (definitions, prefix) => {
477
776
  for (const key of Object.keys(definitions)) {
478
777
  const code = definitions[key];
479
- if (
480
- code &&
481
- typeof code === "object" &&
482
- !(code instanceof RuntimeValue) &&
483
- !(code instanceof RegExp)
484
- ) {
778
+ if (isObjectDefinition(code)) {
485
779
  walkDefinitions(
486
780
  /** @type {Definitions} */ (code),
487
781
  `${prefix + key}.`
@@ -495,7 +789,7 @@ class DefinePlugin {
495
789
  };
496
790
 
497
791
  /**
498
- * Apply define key
792
+ * Processes the provided prefix.
499
793
  * @param {string} prefix Prefix
500
794
  * @param {string} key Key
501
795
  * @returns {void}
@@ -505,6 +799,10 @@ class DefinePlugin {
505
799
  const firstKey = splittedKey[0];
506
800
  for (const [i, _] of splittedKey.slice(1).entries()) {
507
801
  const fullKey = prefix + splittedKey.slice(0, i + 1).join(".");
802
+ // `import.meta` is a MetaProperty, not an identifier that can be
803
+ // aliased: an alias declaration would keep the raw MetaProperty
804
+ // in the output, so never enable renaming for its prefixes
805
+ if (fullKey === "import" || fullKey === "import.meta") continue;
508
806
  parser.hooks.canRename.for(fullKey).tap(PLUGIN_NAME, () => {
509
807
  addValueDependency(key);
510
808
  if (
@@ -517,7 +815,9 @@ class DefinePlugin {
517
815
  }
518
816
  if (prefix === "") {
519
817
  const final = splittedKey[splittedKey.length - 1];
520
- const nestedSet = nestedByFinalKey.get(final);
818
+ // aggregated over all instances so keys split across
819
+ // several DefinePlugins can still be destructured together
820
+ const nestedSet = mergedDefinitions.nestedByFinalKey.get(final);
521
821
  if (!nestedSet || nestedSet.size <= 0) return;
522
822
  for (const nested of /** @type {Set<string>} */ (nestedSet)) {
523
823
  if (nested && !hooked.has(nested)) {
@@ -544,17 +844,19 @@ class DefinePlugin {
544
844
  }
545
845
  /** @type {Definitions} */
546
846
  const obj = Object.create(null);
547
- const finalSet = finalByNestedKey.get(nested);
847
+ const finalSet =
848
+ mergedDefinitions.finalByNestedKey.get(nested);
548
849
  for (const { id } of destructed) {
549
850
  const fullKey = `${nested}.${id}`;
550
851
  if (
551
852
  !finalSet ||
552
853
  !finalSet.has(id) ||
553
- !definitions[fullKey]
854
+ !mergedDefinitions.definitions[fullKey]
554
855
  ) {
555
856
  return;
556
857
  }
557
- obj[id] = definitions[fullKey];
858
+ addValueDependency(fullKey);
859
+ obj[id] = mergedDefinitions.definitions[fullKey];
558
860
  }
559
861
  let strCode = stringifyObj(
560
862
  obj,
@@ -580,7 +882,7 @@ class DefinePlugin {
580
882
  };
581
883
 
582
884
  /**
583
- * Apply Code
885
+ * Processes the provided key.
584
886
  * @param {string} key Key
585
887
  * @param {CodeValue} code Code
586
888
  * @returns {void}
@@ -642,16 +944,11 @@ class DefinePlugin {
642
944
  strCode = `${parser.scope.inShorthand}:${strCode}`;
643
945
  }
644
946
 
645
- if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
646
- return toConstantDependency(parser, strCode, [
647
- RuntimeGlobals.require
648
- ])(expr);
649
- } else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
650
- return toConstantDependency(parser, strCode, [
651
- RuntimeGlobals.requireScope
652
- ])(expr);
653
- }
654
- return toConstantDependency(parser, strCode)(expr);
947
+ return toConstantDependency(
948
+ parser,
949
+ strCode,
950
+ getRuntimeRequirements(strCode)
951
+ )(expr);
655
952
  });
656
953
  }
657
954
  parser.hooks.evaluateTypeof.for(key).tap(PLUGIN_NAME, (expr) => {
@@ -683,17 +980,23 @@ class DefinePlugin {
683
980
  });
684
981
  parser.hooks.typeof.for(key).tap(PLUGIN_NAME, (expr) => {
685
982
  addValueDependency(originalKey);
686
- const codeCode = toCode(
687
- code,
688
- parser,
689
- compilation.valueCacheVersions,
690
- originalKey,
691
- runtimeTemplate,
692
- logger,
693
- null
694
- );
695
- const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
696
- const res = parser.evaluate(typeofCode);
983
+ /** @type {BasicEvaluatedExpression} */
984
+ let res;
985
+ try {
986
+ const codeCode = toCode(
987
+ code,
988
+ parser,
989
+ compilation.valueCacheVersions,
990
+ originalKey,
991
+ runtimeTemplate,
992
+ logger,
993
+ null
994
+ );
995
+ const typeofCode = isTypeof ? codeCode : `typeof (${codeCode})`;
996
+ res = parser.evaluate(typeofCode);
997
+ } catch (err) {
998
+ throw annotateEvaluationError(originalKey, code, err);
999
+ }
697
1000
  if (!res.isString()) return;
698
1001
  return toConstantDependency(
699
1002
  parser,
@@ -703,12 +1006,33 @@ class DefinePlugin {
703
1006
  };
704
1007
 
705
1008
  /**
706
- * Apply Object
1009
+ * Processes the provided key.
707
1010
  * @param {string} key Key
708
1011
  * @param {object} obj Object
709
1012
  * @returns {void}
710
1013
  */
711
1014
  const applyObjectDefine = (key, obj) => {
1015
+ const mergedNode = getMergedDefinitionNode(compilation, key);
1016
+ /** @type {MergedDefinitionNode} */
1017
+ const definition =
1018
+ mergedNode === undefined
1019
+ ? /** @type {CodeValue} */ (obj)
1020
+ : mergedNode;
1021
+ // value dependencies of a whole-object read: the key itself and
1022
+ // every dotted definition key below it (from any instance)
1023
+ /** @type {[string, ValueCacheVersion][]} */
1024
+ const objectValueDependencies = [];
1025
+ for (const defKey of [
1026
+ key,
1027
+ ...(mergedDefinitions.keysByPrefix.get(key) || [])
1028
+ ]) {
1029
+ const name = VALUE_DEP_PREFIX + defKey;
1030
+ objectValueDependencies.push([
1031
+ name,
1032
+ /** @type {ValueCacheVersion} */
1033
+ (compilation.valueCacheVersions.get(name))
1034
+ ]);
1035
+ }
712
1036
  parser.hooks.canRename.for(key).tap(PLUGIN_NAME, () => {
713
1037
  addValueDependency(key);
714
1038
  return true;
@@ -736,33 +1060,144 @@ class DefinePlugin {
736
1060
  }
737
1061
  );
738
1062
  parser.hooks.expression.for(key).tap(PLUGIN_NAME, (expr) => {
739
- addValueDependency(key);
740
- let strCode = stringifyObj(
741
- obj,
742
- parser,
743
- compilation.valueCacheVersions,
744
- key,
745
- runtimeTemplate,
746
- logger,
747
- !parser.isAsiPosition(/** @type {Range} */ (expr.range)[0]),
748
- getObjKeys(parser.destructuringAssignmentPropertiesFor(expr))
1063
+ const valueDependencies =
1064
+ /** @type {NonNullable<NormalModuleBuildInfo["valueDependencies"]>} */
1065
+ (
1066
+ /** @type {NormalModuleBuildInfo} */
1067
+ (parser.state.module.buildInfo).valueDependencies
1068
+ );
1069
+ for (const [name, version] of objectValueDependencies) {
1070
+ valueDependencies.set(name, version);
1071
+ }
1072
+ // render the merged view so dotted keys (of any instance)
1073
+ // are part of whole-object and destructured reads
1074
+ const objKeys = getObjKeys(
1075
+ parser.destructuringAssignmentPropertiesFor(expr)
1076
+ );
1077
+ const asiSafe = !parser.isAsiPosition(
1078
+ /** @type {Range} */ (expr.range)[0]
749
1079
  );
1080
+ let strCode;
1081
+ if (definition instanceof Map) {
1082
+ const code = stringifyMergedNode(
1083
+ mergedDefinitions,
1084
+ definition,
1085
+ parser,
1086
+ key,
1087
+ objKeys
1088
+ );
1089
+ strCode = asiSafe ? `(${code})` : `;(${code})`;
1090
+ } else {
1091
+ strCode = toCode(
1092
+ definition,
1093
+ parser,
1094
+ compilation.valueCacheVersions,
1095
+ key,
1096
+ runtimeTemplate,
1097
+ logger,
1098
+ asiSafe,
1099
+ objKeys
1100
+ );
1101
+ }
750
1102
 
751
1103
  if (parser.scope.inShorthand) {
752
1104
  strCode = `${parser.scope.inShorthand}:${strCode}`;
753
1105
  }
754
1106
 
755
- if (WEBPACK_REQUIRE_FUNCTION_REGEXP.test(strCode)) {
756
- return toConstantDependency(parser, strCode, [
757
- RuntimeGlobals.require
758
- ])(expr);
759
- } else if (WEBPACK_REQUIRE_IDENTIFIER_REGEXP.test(strCode)) {
760
- return toConstantDependency(parser, strCode, [
761
- RuntimeGlobals.requireScope
762
- ])(expr);
763
- }
764
- return toConstantDependency(parser, strCode)(expr);
1107
+ return toConstantDependency(
1108
+ parser,
1109
+ strCode,
1110
+ getRuntimeRequirements(strCode)
1111
+ )(expr);
765
1112
  });
1113
+ // A property access not defined on the object resolves to `undefined`
1114
+ // and the whole object is never inlined (issue #15559). Keyed by the
1115
+ // chain root so dotted object keys (e.g. `a.b`) are also covered.
1116
+ const chainParts = key.split(".");
1117
+ // `import.meta` is one chain root (a MetaProperty), not two members.
1118
+ const isMeta =
1119
+ chainParts[0] === "import" && chainParts[1] === "meta";
1120
+ const chainRoot = isMeta ? "import.meta" : chainParts[0];
1121
+ const chainPrefix = chainParts.slice(isMeta ? 2 : 1);
1122
+ /**
1123
+ * Whether a member chain reads a property that is not defined.
1124
+ * Walks the merged view so dotted keys of every instance count.
1125
+ * Collects every define key consulted so the caller can record a
1126
+ * value dependency on each (a sibling key like `OBJECT.SUB2` affects
1127
+ * the result even though `OBJECT` registered the handler).
1128
+ * Inherited members (e.g. `toString`) stay defined.
1129
+ * @param {Members} members chain members (after the root)
1130
+ * @param {string[]} deps consulted define keys (mutated)
1131
+ * @returns {boolean} true when the access resolves to `undefined`
1132
+ */
1133
+ const isUndefinedMemberAccess = (members, deps) => {
1134
+ if (members.length <= chainPrefix.length) return false;
1135
+ for (let i = 0; i < chainPrefix.length; i++) {
1136
+ if (members[i] !== chainPrefix[i]) return false;
1137
+ }
1138
+ /** @type {MergedDefinitionNode | undefined} */
1139
+ let value = definition;
1140
+ let path = key;
1141
+ for (let i = chainPrefix.length; i < members.length; i++) {
1142
+ const member = members[i];
1143
+ const nextPath = `${path}.${member}`;
1144
+ if (value instanceof Map) {
1145
+ if (value.has(member)) {
1146
+ deps.push(nextPath);
1147
+ value = value.get(member);
1148
+ } else if (member in EMPTY_OBJECT) {
1149
+ return false;
1150
+ } else {
1151
+ return true;
1152
+ }
1153
+ } else if (isObjectDefinition(value)) {
1154
+ // non-expandable object leaf (e.g. an array)
1155
+ if (member in value) {
1156
+ value = /** @type {Definitions} */ (value)[member];
1157
+ } else if (
1158
+ Object.prototype.hasOwnProperty.call(
1159
+ mergedDefinitions.definitions,
1160
+ nextPath
1161
+ )
1162
+ ) {
1163
+ // defined via a dotted sibling key, e.g. `OBJECT.SUB2`
1164
+ deps.push(nextPath);
1165
+ value = mergedDefinitions.definitions[nextPath];
1166
+ } else {
1167
+ return true;
1168
+ }
1169
+ } else {
1170
+ // a leaf with members left is a real property access on a value
1171
+ return false;
1172
+ }
1173
+ path = nextPath;
1174
+ }
1175
+ return false;
1176
+ };
1177
+ parser.hooks.expressionMemberChain
1178
+ .for(chainRoot)
1179
+ .tap(PLUGIN_NAME, (expr, members) => {
1180
+ const deps = [key];
1181
+ if (!isUndefinedMemberAccess(members, deps)) return;
1182
+ for (const dep of deps) addValueDependency(dep);
1183
+ return toConstantDependency(parser, "undefined")(expr);
1184
+ });
1185
+ // In a call, replace only the callee so the call itself is kept:
1186
+ // `x.MISSING()` stays a (throwing) call and `x.MISSING?.()`
1187
+ // short-circuits, with the object never inlined.
1188
+ parser.hooks.callMemberChain
1189
+ .for(chainRoot)
1190
+ .tap(PLUGIN_NAME, (expr, members) => {
1191
+ const deps = [key];
1192
+ if (!isUndefinedMemberAccess(members, deps)) return;
1193
+ for (const dep of deps) addValueDependency(dep);
1194
+ toConstantDependency(
1195
+ parser,
1196
+ "undefined"
1197
+ )(/** @type {Expression} */ (expr.callee));
1198
+ parser.walkExpressions(expr.arguments);
1199
+ return true;
1200
+ });
766
1201
  parser.hooks.typeof
767
1202
  .for(key)
768
1203
  .tap(
@@ -788,7 +1223,7 @@ class DefinePlugin {
788
1223
  .tap(PLUGIN_NAME, handler);
789
1224
 
790
1225
  /**
791
- * Walk definitions
1226
+ * Processes the provided definition.
792
1227
  * @param {Definitions} definitions Definitions map
793
1228
  * @param {string} prefix Prefix string
794
1229
  * @returns {void}
@@ -810,12 +1245,7 @@ class DefinePlugin {
810
1245
  warning.hideStack = true;
811
1246
  compilation.warnings.push(warning);
812
1247
  }
813
- if (
814
- code &&
815
- typeof code === "object" &&
816
- !(code instanceof RuntimeValue) &&
817
- !(code instanceof RegExp)
818
- ) {
1248
+ if (isObjectDefinition(code)) {
819
1249
  walkDefinitionsForValues(
820
1250
  /** @type {Definitions} */ (code),
821
1251
  `${prefix + key}.`
@@ -824,46 +1254,6 @@ class DefinePlugin {
824
1254
  }
825
1255
  };
826
1256
 
827
- /**
828
- * @param {Definitions} definitions Definitions map
829
- * @returns {void}
830
- */
831
- const walkDefinitionsForKeys = (definitions) => {
832
- /**
833
- * @param {Map<string, Set<string>>} map Map
834
- * @param {string} key key
835
- * @param {string} value v
836
- * @returns {void}
837
- */
838
- const addToMap = (map, key, value) => {
839
- if (map.has(key)) {
840
- /** @type {Set<string>} */
841
- (map.get(key)).add(value);
842
- } else {
843
- map.set(key, new Set([value]));
844
- }
845
- };
846
- for (const key of Object.keys(definitions)) {
847
- const code = definitions[key];
848
- if (
849
- !code ||
850
- typeof code === "object" ||
851
- TYPEOF_OPERATOR_REGEXP.test(key)
852
- ) {
853
- continue;
854
- }
855
- const idx = key.lastIndexOf(".");
856
- if (idx <= 0 || idx >= key.length - 1) {
857
- continue;
858
- }
859
- const nested = key.slice(0, idx);
860
- const final = key.slice(idx + 1);
861
- addToMap(finalByNestedKey, nested, final);
862
- addToMap(nestedByFinalKey, final, nested);
863
- }
864
- };
865
-
866
- walkDefinitionsForKeys(definitions);
867
1257
  walkDefinitionsForValues(definitions, "");
868
1258
 
869
1259
  compilation.valueCacheVersions.set(
@@ -875,4 +1265,12 @@ class DefinePlugin {
875
1265
  }
876
1266
  }
877
1267
 
1268
+ DefinePlugin.getCompilationHooks = createHooksRegistry(createCompilationHooks);
1269
+
878
1270
  module.exports = DefinePlugin;
1271
+ module.exports.VALUE_DEP_MAIN = VALUE_DEP_MAIN;
1272
+ module.exports.VALUE_DEP_PREFIX = VALUE_DEP_PREFIX;
1273
+ module.exports.getMergedDefinitionNode = getMergedDefinitionNode;
1274
+ module.exports.getRuntimeRequirements = getRuntimeRequirements;
1275
+ module.exports.stringifyMergedDefinition = stringifyMergedDefinition;
1276
+ module.exports.toPropertyKey = toPropertyKey;