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