@depup/webpack 5.109.2-depup.0 → 5.110.3-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 (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -23,20 +23,26 @@ const {
23
23
  const createHash = require("./util/createHash");
24
24
  const createHooksRegistry = require("./util/createHooksRegistry");
25
25
 
26
- /** @typedef {import("estree").Expression} Expression */
27
- /** @typedef {import("./Compiler")} Compiler */
28
- /** @typedef {import("./Module").BuildInfo} BuildInfo */
29
- /** @typedef {import("./Module").ValueCacheVersion} ValueCacheVersion */
30
- /** @typedef {import("./Module").ValueCacheVersions} ValueCacheVersions */
31
- /** @typedef {import("./NormalModule")} NormalModule */
32
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
33
- /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
34
- /** @typedef {import("./javascript/JavascriptParser").DestructuringAssignmentProperties} DestructuringAssignmentProperties */
35
- /** @typedef {import("./javascript/JavascriptParser").Members} Members */
36
- /** @typedef {import("./javascript/JavascriptParser").Range} Range */
37
- /** @typedef {import("./logging/Logger").Logger} Logger */
38
- /** @typedef {import("./Compilation")} Compilation */
39
- /** @typedef {import("./NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
26
+ /** @import { Expression, MemberExpression } from "estree" */
27
+ /** @import Compiler from "./Compiler" */
28
+ /**
29
+ * @import {
30
+ * BuildInfo,
31
+ * ValueCacheVersion,
32
+ * ValueCacheVersions
33
+ * } from "./Module"
34
+ */
35
+ /** @import NormalModule, { NormalModuleBuildInfo } from "./NormalModule" */
36
+ /** @import RuntimeTemplate from "./RuntimeTemplate" */
37
+ /**
38
+ * @import JavascriptParser, {
39
+ * DestructuringAssignmentProperties,
40
+ * Members,
41
+ * Range
42
+ * } from "./javascript/JavascriptParser"
43
+ */
44
+ /** @import { Logger } from "./logging/Logger" */
45
+ /** @import Compilation from "./Compilation" */
40
46
 
41
47
  /** @typedef {null | undefined | RegExp | EXPECTED_FUNCTION | string | number | boolean | bigint | undefined} CodeValuePrimitive */
42
48
  /** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive | RuntimeValue>} CodeValue */
@@ -158,6 +164,21 @@ const isObjectDefinition = (code) =>
158
164
  !(code instanceof RuntimeValue) &&
159
165
  !(code instanceof RegExp);
160
166
 
167
+ /**
168
+ * Walks a member chain up, dropping its last `count` members.
169
+ * @param {Expression} node member expression
170
+ * @param {number} count members to drop
171
+ * @returns {Expression} the chain without them
172
+ */
173
+ const dropTrailingMembers = (node, count) => {
174
+ while (count--) {
175
+ node = /** @type {Expression} */ (
176
+ /** @type {MemberExpression} */ (node).object
177
+ );
178
+ }
179
+ return node;
180
+ };
181
+
161
182
  /** @typedef {Set<string> | null} ObjKeys */
162
183
  /** @typedef {boolean | undefined | null} AsiSafe */
163
184
 
@@ -353,6 +374,13 @@ const toCacheVersion = (code) => {
353
374
  const PLUGIN_NAME = "DefinePlugin";
354
375
  const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
355
376
  const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
377
+
378
+ // Keys webpack injects itself are not the user's to remove, so `performance.unusedDefines`
379
+ // never sees them.
380
+ /** @type {WeakSet<DefinePlugin>} */
381
+ const INTERNAL_PLUGINS = new WeakSet();
382
+ /** @type {WeakMap<Compilation, Set<string>>} */
383
+ const DECLARED_KEYS = new WeakMap();
356
384
  const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
357
385
  const EMPTY_OBJECT = {};
358
386
 
@@ -692,6 +720,22 @@ class DefinePlugin {
692
720
  PLUGIN_NAME,
693
721
  (compilation, { normalModuleFactory }) => {
694
722
  const definitions = this.definitions;
723
+ const { performance } = compilation.options;
724
+ // Only `performance.unusedDefines` reads these, so a build without it
725
+ // collects nothing.
726
+ const collectDeclared =
727
+ performance !== false &&
728
+ performance.unusedDefines === true &&
729
+ !INTERNAL_PLUGINS.has(this);
730
+ /** @type {Set<string> | undefined} */
731
+ let declaredKeys;
732
+ if (collectDeclared) {
733
+ declaredKeys = DECLARED_KEYS.get(compilation);
734
+ if (declaredKeys === undefined) {
735
+ declaredKeys = new Set();
736
+ DECLARED_KEYS.set(compilation, declaredKeys);
737
+ }
738
+ }
695
739
  const hooks = DefinePlugin.getCompilationHooks(compilation);
696
740
 
697
741
  hooks.definitions.tap(PLUGIN_NAME, (previousDefinitions) => ({
@@ -1120,7 +1164,7 @@ class DefinePlugin {
1120
1164
  const chainRoot = isMeta ? "import.meta" : chainParts[0];
1121
1165
  const chainPrefix = chainParts.slice(isMeta ? 2 : 1);
1122
1166
  /**
1123
- * Whether a member chain reads a property that is not defined.
1167
+ * Finds the member of a chain that reads a property that is not defined.
1124
1168
  * Walks the merged view so dotted keys of every instance count.
1125
1169
  * Collects every define key consulted so the caller can record a
1126
1170
  * value dependency on each (a sibling key like `OBJECT.SUB2` affects
@@ -1128,12 +1172,12 @@ class DefinePlugin {
1128
1172
  * Inherited members (e.g. `toString`) stay defined.
1129
1173
  * @param {Members} members chain members (after the root)
1130
1174
  * @param {string[]} deps consulted define keys (mutated)
1131
- * @returns {boolean} true when the access resolves to `undefined`
1175
+ * @returns {number} index of the member resolving to `undefined`, or -1
1132
1176
  */
1133
- const isUndefinedMemberAccess = (members, deps) => {
1134
- if (members.length <= chainPrefix.length) return false;
1177
+ const findUndefinedMemberAccess = (members, deps) => {
1178
+ if (members.length <= chainPrefix.length) return -1;
1135
1179
  for (let i = 0; i < chainPrefix.length; i++) {
1136
- if (members[i] !== chainPrefix[i]) return false;
1180
+ if (members[i] !== chainPrefix[i]) return -1;
1137
1181
  }
1138
1182
  /** @type {MergedDefinitionNode | undefined} */
1139
1183
  let value = definition;
@@ -1146,9 +1190,9 @@ class DefinePlugin {
1146
1190
  deps.push(nextPath);
1147
1191
  value = value.get(member);
1148
1192
  } else if (member in EMPTY_OBJECT) {
1149
- return false;
1193
+ return -1;
1150
1194
  } else {
1151
- return true;
1195
+ return i;
1152
1196
  }
1153
1197
  } else if (isObjectDefinition(value)) {
1154
1198
  // non-expandable object leaf (e.g. an array)
@@ -1164,37 +1208,45 @@ class DefinePlugin {
1164
1208
  deps.push(nextPath);
1165
1209
  value = mergedDefinitions.definitions[nextPath];
1166
1210
  } else {
1167
- return true;
1211
+ return i;
1168
1212
  }
1169
1213
  } else {
1170
1214
  // a leaf with members left is a real property access on a value
1171
- return false;
1215
+ return -1;
1172
1216
  }
1173
1217
  path = nextPath;
1174
1218
  }
1175
- return false;
1219
+ return -1;
1176
1220
  };
1177
1221
  parser.hooks.expressionMemberChain
1178
1222
  .for(chainRoot)
1179
1223
  .tap(PLUGIN_NAME, (expr, members) => {
1180
1224
  const deps = [key];
1181
- if (!isUndefinedMemberAccess(members, deps)) return;
1225
+ if (findUndefinedMemberAccess(members, deps) === -1) return;
1182
1226
  for (const dep of deps) addValueDependency(dep);
1183
1227
  return toConstantDependency(parser, "undefined")(expr);
1184
1228
  });
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.
1229
+ // Cut the chain at the undefined member, so what follows still
1230
+ // throws; an optional link there takes the call, arguments unevaluated.
1188
1231
  parser.hooks.callMemberChain
1189
1232
  .for(chainRoot)
1190
- .tap(PLUGIN_NAME, (expr, members) => {
1233
+ .tap(PLUGIN_NAME, (expr, members, membersOptionals) => {
1191
1234
  const deps = [key];
1192
- if (!isUndefinedMemberAccess(members, deps)) return;
1235
+ const undefinedIndex = findUndefinedMemberAccess(members, deps);
1236
+ if (undefinedIndex === -1) return;
1193
1237
  for (const dep of deps) addValueDependency(dep);
1238
+ if (membersOptionals[undefinedIndex + 1]) {
1239
+ return toConstantDependency(parser, "undefined")(expr);
1240
+ }
1194
1241
  toConstantDependency(
1195
1242
  parser,
1196
1243
  "undefined"
1197
- )(/** @type {Expression} */ (expr.callee));
1244
+ )(
1245
+ dropTrailingMembers(
1246
+ /** @type {Expression} */ (expr.callee),
1247
+ members.length - 1 - undefinedIndex
1248
+ )
1249
+ );
1198
1250
  parser.walkExpressions(expr.arguments);
1199
1251
  return true;
1200
1252
  });
@@ -1245,6 +1297,17 @@ class DefinePlugin {
1245
1297
  warning.hideStack = true;
1246
1298
  compilation.warnings.push(warning);
1247
1299
  }
1300
+ // Leaves only: an object key counts as used whenever any of its
1301
+ // members is, which would report the parent as unused. An object
1302
+ // with no members has none, and still substitutes.
1303
+ const isLeaf =
1304
+ !isObjectDefinition(code) ||
1305
+ Object.keys(/** @type {Definitions} */ (code)).length === 0;
1306
+
1307
+ if (declaredKeys !== undefined && isLeaf) {
1308
+ declaredKeys.add(prefix + key);
1309
+ }
1310
+
1248
1311
  if (isObjectDefinition(code)) {
1249
1312
  walkDefinitionsForValues(
1250
1313
  /** @type {Definitions} */ (code),
@@ -1267,10 +1330,31 @@ class DefinePlugin {
1267
1330
 
1268
1331
  DefinePlugin.getCompilationHooks = createHooksRegistry(createCompilationHooks);
1269
1332
 
1333
+ /**
1334
+ * Marks an instance as webpack's own, so `performance.unusedDefines` never
1335
+ * reports the keys it declares against the user.
1336
+ * @param {DefinePlugin} plugin the instance webpack constructed itself
1337
+ * @returns {DefinePlugin} the same instance
1338
+ */
1339
+ const markInternal = (plugin) => {
1340
+ INTERNAL_PLUGINS.add(plugin);
1341
+ return plugin;
1342
+ };
1343
+
1344
+ /**
1345
+ * The keys the configuration declared, webpack's own excluded.
1346
+ * @param {Compilation} compilation the compilation
1347
+ * @returns {Set<string> | undefined} the keys, or undefined when none were collected
1348
+ */
1349
+ const getDeclaredKeys = (compilation) => DECLARED_KEYS.get(compilation);
1350
+
1351
+ DefinePlugin.VALUE_DEP_MAIN = VALUE_DEP_MAIN;
1352
+ DefinePlugin.VALUE_DEP_PREFIX = VALUE_DEP_PREFIX;
1353
+ DefinePlugin.getDeclaredKeys = getDeclaredKeys;
1354
+ DefinePlugin.getMergedDefinitionNode = getMergedDefinitionNode;
1355
+ DefinePlugin.getRuntimeRequirements = getRuntimeRequirements;
1356
+ DefinePlugin.markInternal = markInternal;
1357
+ DefinePlugin.stringifyMergedDefinition = stringifyMergedDefinition;
1358
+ DefinePlugin.toPropertyKey = toPropertyKey;
1359
+
1270
1360
  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;
@@ -7,12 +7,15 @@
7
7
 
8
8
  const makeSerializable = require("./util/makeSerializable");
9
9
 
10
- /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */
11
- /** @typedef {import("./Dependency")} Dependency */
12
- /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
13
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
14
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
- /** @typedef {import("./util/Hash")} Hash */
10
+ /** @import AsyncDependenciesBlock from "./AsyncDependenciesBlock" */
11
+ /** @import Dependency, { UpdateHashContext } from "./Dependency" */
12
+ /**
13
+ * @import {
14
+ * ObjectDeserializerContext,
15
+ * ObjectSerializerContext
16
+ * } from "./serialization/ObjectMiddleware"
17
+ */
18
+ /** @import Hash from "./util/Hash" */
16
19
 
17
20
  /** @typedef {(d: Dependency) => boolean} DependencyFilterFunction */
18
21
 
package/lib/Dependency.js CHANGED
@@ -5,21 +5,29 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { JAVASCRIPT_TYPE } = require("./ModuleSourceTypeConstants");
8
9
  const memoize = require("./util/memoize");
9
10
 
10
- /** @typedef {import("./ChunkGraph")} ChunkGraph */
11
- /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
12
- /** @typedef {import("./Module")} Module */
13
- /** @typedef {import("./ModuleGraph")} ModuleGraph */
14
- /** @typedef {import("./ModuleGraphConnection")} ModuleGraphConnection */
15
- /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
16
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
17
- /** @typedef {import("./errors/WebpackError")} WebpackError */
18
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
- /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
- /** @typedef {import("./util/Hash")} Hash */
21
- /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
22
- /** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
11
+ /** @import ChunkGraph from "./ChunkGraph" */
12
+ /** @import DependenciesBlock from "./DependenciesBlock" */
13
+ /** @import Module, { SourceType } from "./Module" */
14
+ /** @import ModuleGraph from "./ModuleGraph" */
15
+ /**
16
+ * @import ModuleGraphConnection, {
17
+ * ConnectionState
18
+ * } from "./ModuleGraphConnection"
19
+ */
20
+ /** @import RuntimeTemplate from "./RuntimeTemplate" */
21
+ /** @import WebpackError from "./errors/WebpackError" */
22
+ /**
23
+ * @import {
24
+ * ObjectDeserializerContext,
25
+ * ObjectSerializerContext
26
+ * } from "./serialization/ObjectMiddleware"
27
+ */
28
+ /** @import Hash from "./util/Hash" */
29
+ /** @import { RuntimeSpec } from "./util/runtime" */
30
+ /** @import ModuleDependency from "./dependencies/ModuleDependency" */
23
31
  /**
24
32
  * Defines the update hash context type used by this module.
25
33
  * @typedef {object} UpdateHashContext
@@ -165,6 +173,16 @@ class Dependency {
165
173
  return "unknown";
166
174
  }
167
175
 
176
+ /**
177
+ * Returns the source type this dependency reads from the module it references:
178
+ * `javascript` for anything going through the module wrapper, `asset-url` for a
179
+ * bare url embedded into non-javascript output (css, html, a manifest).
180
+ * @returns {SourceType} the source type read from the referenced module
181
+ */
182
+ get referencedSourceType() {
183
+ return JAVASCRIPT_TYPE;
184
+ }
185
+
168
186
  /**
169
187
  * Returns location.
170
188
  * @returns {DependencyLocation} location
@@ -424,9 +442,10 @@ class Dependency {
424
442
 
425
443
  /**
426
444
  * Returns true if this dependency can be concatenated
445
+ * @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
427
446
  * @returns {boolean} true if this dependency can be concatenated
428
447
  */
429
- canConcatenate() {
448
+ canConcatenate(concatenateCommonJsModules) {
430
449
  return false;
431
450
  }
432
451
 
@@ -506,11 +525,12 @@ Dependency.isLowPriorityDependency = (dependency) =>
506
525
  /**
507
526
  * Returns true if the dependency can be concatenated (scope hoisting).
508
527
  * @param {Dependency} dependency dep
528
+ * @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
509
529
  * @returns {boolean} true if this dependency supports concatenation
510
530
  */
511
- Dependency.canConcatenate = (dependency) => {
531
+ Dependency.canConcatenate = (dependency, concatenateCommonJsModules) => {
512
532
  if (typeof dependency.canConcatenate === "function") {
513
- return dependency.canConcatenate();
533
+ return dependency.canConcatenate(concatenateCommonJsModules);
514
534
  }
515
535
  return false;
516
536
  };
@@ -5,18 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
9
- /** @typedef {import("./ChunkGraph")} ChunkGraph */
10
- /** @typedef {import("./CodeGenerationResults")} CodeGenerationResults */
11
- /** @typedef {import("./ConcatenationScope")} ConcatenationScope */
12
- /** @typedef {import("./Dependency")} Dependency */
13
- /** @typedef {import("./Dependency").RuntimeSpec} RuntimeSpec */
14
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
15
- /** @typedef {import("./Generator").GenerateContext} GenerateContext */
16
- /** @typedef {import("./Module")} Module */
17
- /** @typedef {import("./Module").RuntimeRequirements} RuntimeRequirements */
18
- /** @typedef {import("./ModuleGraph")} ModuleGraph */
19
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
8
+ /** @import { ReplaceSource } from "webpack-sources" */
9
+ /** @import ChunkGraph from "./ChunkGraph" */
10
+ /** @import CodeGenerationResults from "./CodeGenerationResults" */
11
+ /** @import ConcatenationScope from "./ConcatenationScope" */
12
+ /** @import Dependency from "./Dependency" */
13
+ /** @import DependencyTemplates from "./DependencyTemplates" */
14
+ /** @import { GenerateContext } from "./Generator" */
15
+ /** @import Module, { RuntimeRequirements } from "./Module" */
16
+ /** @import ModuleGraph from "./ModuleGraph" */
17
+ /** @import RuntimeTemplate from "./RuntimeTemplate" */
18
+ /** @import { RuntimeSpec } from "./util/runtime" */
20
19
 
21
20
  /**
22
21
  * Defines the init fragment type used by this module.
@@ -8,9 +8,9 @@
8
8
  const { DEFAULTS } = require("./config/defaults");
9
9
  const createHash = require("./util/createHash");
10
10
 
11
- /** @typedef {import("./Compilation").DependencyConstructor} DependencyConstructor */
12
- /** @typedef {import("./DependencyTemplate")} DependencyTemplate */
13
- /** @typedef {import("./util/Hash").HashFunction} HashFunction */
11
+ /** @import { DependencyConstructor } from "./Compilation" */
12
+ /** @import DependencyTemplate from "./DependencyTemplate" */
13
+ /** @import { HashFunction } from "./util/Hash" */
14
14
 
15
15
  class DependencyTemplates {
16
16
  /**
@@ -6,13 +6,14 @@
6
6
  "use strict";
7
7
 
8
8
  const FileSystemInfo = require("./FileSystemInfo");
9
+ const DotenvFileError = require("./errors/DotenvFileError");
9
10
  const { join } = require("./util/fs");
10
11
 
11
- /** @typedef {import("../declarations/WebpackOptions").DotenvPluginOptions} DotenvPluginOptions */
12
- /** @typedef {import("./Compiler")} Compiler */
13
- /** @typedef {import("./CacheFacade").ItemCacheFacade} ItemCacheFacade */
14
- /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
15
- /** @typedef {import("./FileSystemInfo").Snapshot} Snapshot */
12
+ /** @import { DotenvPluginOptions } from "../declarations/WebpackOptions" */
13
+ /** @import Compiler from "./Compiler" */
14
+ /** @import { ItemCacheFacade } from "./CacheFacade" */
15
+ /** @import { InputFileSystem } from "./util/fs" */
16
+ /** @import { Snapshot } from "./FileSystemInfo" */
16
17
 
17
18
  /** @typedef {Exclude<DotenvPluginOptions["prefix"], string | undefined>} Prefix */
18
19
  /** @typedef {Record<string, string>} Env */
@@ -24,8 +25,45 @@ const DEFAULT_TEMPLATE = [
24
25
  ".env.[mode].local"
25
26
  ];
26
27
 
28
+ // cspell:ignore Motte, motdotla
29
+
30
+ /*
31
+ * `LINE`, `parse`, `_resolveEscapeSequences`, `expandValue` and `expand`
32
+ * below are ported from dotenv v17.4.2 and dotenv-expand v13.0.0, both
33
+ * BSD-2-Clause. Links stay version-pinned: later dotenv-expand releases
34
+ * ship different license text.
35
+ *
36
+ * https://github.com/motdotla/dotenv/blob/v17.4.2/lib/main.js
37
+ * https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js
38
+ *
39
+ * Copyright (c) 2015, Scott Motte
40
+ * Copyright (c) 2016, Scott Motte
41
+ * All rights reserved.
42
+ *
43
+ * Redistribution and use in source and binary forms, with or without
44
+ * modification, are permitted provided that the following conditions are met:
45
+ *
46
+ * * Redistributions of source code must retain the above copyright notice, this
47
+ * list of conditions and the following disclaimer.
48
+ *
49
+ * * Redistributions in binary form must reproduce the above copyright notice,
50
+ * this list of conditions and the following disclaimer in the documentation
51
+ * and/or other materials provided with the distribution.
52
+ *
53
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
54
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
55
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
56
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
57
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
58
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
59
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
60
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
61
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
62
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
63
+ */
64
+
27
65
  // Regex for parsing .env files
28
- // ported from https://github.com/motdotla/dotenv/blob/master/lib/main.js#L49
66
+ // ported from https://github.com/motdotla/dotenv/blob/v17.4.2/lib/main.js#L38
29
67
  const LINE =
30
68
  /^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;
31
69
 
@@ -33,7 +71,7 @@ const PLUGIN_NAME = "DotenvPlugin";
33
71
 
34
72
  /**
35
73
  * Parse .env file content
36
- * ported from https://github.com/motdotla/dotenv/blob/master/lib/main.js#L49
74
+ * ported from https://github.com/motdotla/dotenv/blob/v17.4.2/lib/main.js#L41
37
75
  * @param {string | Buffer} src the source content to parse
38
76
  * @returns {Env} parsed environment variables object
39
77
  */
@@ -79,7 +117,7 @@ function parse(src) {
79
117
 
80
118
  /**
81
119
  * Resolve escape sequences
82
- * ported from https://github.com/motdotla/dotenv-expand
120
+ * ported from https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js#L3
83
121
  * @param {string} value value to resolve
84
122
  * @returns {string} resolved value
85
123
  */
@@ -89,7 +127,7 @@ function _resolveEscapeSequences(value) {
89
127
 
90
128
  /**
91
129
  * Expand environment variable value
92
- * ported from https://github.com/motdotla/dotenv-expand
130
+ * ported from https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js#L7
93
131
  * @param {string} value value to expand
94
132
  * @param {Record<string, string | undefined>} processEnv process.env object
95
133
  * @param {Env} runningParsed running parsed object
@@ -118,8 +156,8 @@ function expandValue(value, processEnv, runningParsed) {
118
156
  const opMatch = expression.match(opRegex);
119
157
  const splitter = opMatch ? opMatch[0] : null;
120
158
 
121
- const r = expression.split(/** @type {string} */ (splitter));
122
- // const r = splitter ? expression.split(splitter) : [expression];
159
+ // `split(null)` splits on the string "null", cutting up names containing it
160
+ const r = splitter ? expression.split(splitter) : [expression];
123
161
 
124
162
  /** @type {string} */
125
163
  let defaultValue;
@@ -158,7 +196,7 @@ function expandValue(value, processEnv, runningParsed) {
158
196
 
159
197
  /**
160
198
  * Expand environment variables in parsed object
161
- * ported from https://github.com/motdotla/dotenv-expand
199
+ * ported from https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js#L65
162
200
  * @param {{ parsed: Env, processEnv: Record<string, string | undefined> }} options expand options
163
201
  * @returns {{ parsed: Env }} expanded options
164
202
  */
@@ -198,16 +236,21 @@ function expand(options) {
198
236
  /**
199
237
  * Format environment variables as DefinePlugin definitions
200
238
  * @param {Env} env environment variables
201
- * @returns {Record<string, string>} formatted definitions
239
+ * @returns {Record<string, string | Env>} formatted definitions
202
240
  */
203
241
  const envToDefinitions = (env) => {
204
- const definitions = /** @type {Record<string, string>} */ ({});
242
+ const definitions = /** @type {Record<string, string | Env>} */ ({});
243
+ // one nested definition rather than a `import.meta.env.<key>` per key: a
244
+ // dotted key would otherwise read back as a nested object, not as the key
245
+ const importMetaEnv = /** @type {Env} */ (Object.create(null));
205
246
 
206
247
  for (const [key, value] of Object.entries(env)) {
207
248
  const defValue = JSON.stringify(value);
249
+ // `process.env` stays flat — it must not shadow the real one at runtime
208
250
  definitions[`process.env.${key}`] = defValue;
209
- definitions[`import.meta.env.${key}`] = defValue;
251
+ importMetaEnv[key] = defValue;
210
252
  }
253
+ definitions["import.meta.env"] = importMetaEnv;
211
254
 
212
255
  return definitions;
213
256
  };
@@ -257,8 +300,10 @@ class DotenvPlugin {
257
300
  ? compiler.context
258
301
  : this.options.dir;
259
302
 
260
- /** @type {undefined | Snapshot} */
303
+ /** @type {undefined | InstanceType<Snapshot>} */
261
304
  let snapshot;
305
+ /** @type {undefined | DotenvFileError} */
306
+ let loadError;
262
307
 
263
308
  const cache = compiler.getCache(PLUGIN_NAME);
264
309
  const identifier = JSON.stringify(
@@ -267,16 +312,31 @@ class DotenvPlugin {
267
312
  const itemCache = cache.getItemCache(identifier, null);
268
313
 
269
314
  compiler.hooks.beforeCompile.tapPromise(PLUGIN_NAME, async () => {
270
- const { parsed, snapshot: newSnapshot } = dir
271
- ? await this._loadEnv(compiler, itemCache, dir)
272
- : { parsed: {} };
273
- const env = this._getEnv(prefixes, parsed);
274
-
275
- definePlugin.definitions = envToDefinitions(env || {});
276
- snapshot = newSnapshot;
315
+ loadError = undefined;
316
+ try {
317
+ const { parsed, snapshot: newSnapshot } = dir
318
+ ? await this._loadEnv(compiler, itemCache, dir)
319
+ : { parsed: {} };
320
+ const env = this._getEnv(prefixes, parsed);
321
+
322
+ definePlugin.definitions = envToDefinitions(env || {});
323
+ snapshot = newSnapshot;
324
+ } catch (err) {
325
+ // reported on the compilation so watch mode recovers when it is fixed
326
+ if (!(err instanceof DotenvFileError)) throw err;
327
+ loadError = err;
328
+ definePlugin.definitions = envToDefinitions({});
329
+ snapshot = undefined;
330
+ }
277
331
  });
278
332
 
279
333
  compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
334
+ if (loadError) {
335
+ compilation.errors.push(loadError);
336
+ compilation.fileDependencies.add(
337
+ /** @type {string} */ (loadError.file)
338
+ );
339
+ }
280
340
  if (snapshot) {
281
341
  compilation.fileDependencies.addAll(snapshot.getFileIterable());
282
342
  compilation.missingDependencies.addAll(snapshot.getMissingIterable());
@@ -332,7 +392,12 @@ class DotenvPlugin {
332
392
  fileDependencies.push(filePath);
333
393
  return content;
334
394
  },
335
- () => {
395
+ (err) => {
396
+ const code = /** @type {NodeJS.ErrnoException} */ (err).code;
397
+ // only an absent file is normal; anything else is a real fault
398
+ if (code !== "ENOENT" && code !== "ENOTDIR") {
399
+ throw new DotenvFileError(filePath, err);
400
+ }
336
401
  // File doesn't exist, add to missingDependencies (this is normal)
337
402
  missingDependencies.push(filePath);
338
403
  return "";
@@ -360,9 +425,9 @@ class DotenvPlugin {
360
425
  * Loads the provided compiler.
361
426
  * @private
362
427
  * @param {Compiler} compiler compiler
363
- * @param {ItemCacheFacade} itemCache item cache facade
428
+ * @param {InstanceType<ItemCacheFacade>} itemCache item cache facade
364
429
  * @param {string} dir directory to read
365
- * @returns {Promise<{ parsed: Env, snapshot: Snapshot }>} parsed result and snapshot
430
+ * @returns {Promise<{ parsed: Env, snapshot: InstanceType<Snapshot> }>} parsed result and snapshot
366
431
  */
367
432
  async _loadEnv(compiler, itemCache, dir) {
368
433
  const fs = /** @type {InputFileSystem} */ (compiler.inputFileSystem);
@@ -9,10 +9,14 @@ const EntryOptionPlugin = require("./EntryOptionPlugin");
9
9
  const EntryPlugin = require("./EntryPlugin");
10
10
  const EntryDependency = require("./dependencies/EntryDependency");
11
11
 
12
- /** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescriptionNormalized */
13
- /** @typedef {import("../declarations/WebpackOptions").EntryStatic} EntryStatic */
14
- /** @typedef {import("../declarations/WebpackOptions").EntryStaticNormalized} EntryStaticNormalized */
15
- /** @typedef {import("./Compiler")} Compiler */
12
+ /**
13
+ * @import {
14
+ * EntryDescriptionNormalized,
15
+ * EntryStatic,
16
+ * EntryStaticNormalized
17
+ * } from "../declarations/WebpackOptions"
18
+ */
19
+ /** @import Compiler from "./Compiler" */
16
20
 
17
21
  const PLUGIN_NAME = "DynamicEntryPlugin";
18
22
 
@@ -7,10 +7,14 @@
7
7
 
8
8
  const { SyncBailHook } = require("tapable");
9
9
 
10
- /** @typedef {import("../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescription */
11
- /** @typedef {import("../declarations/WebpackOptions").EntryNormalized} Entry */
12
- /** @typedef {import("./Compiler")} Compiler */
13
- /** @typedef {import("./Entrypoint").EntryOptions} EntryOptions */
10
+ /**
11
+ * @import {
12
+ * EntryDescriptionNormalized as EntryDescription,
13
+ * EntryNormalized as Entry
14
+ * } from "../declarations/WebpackOptions"
15
+ */
16
+ /** @import Compiler from "./Compiler" */
17
+ /** @import { EntryOptions } from "./Entrypoint" */
14
18
 
15
19
  /**
16
20
  * @typedef {object} EntryOptionPluginHooks