webpack 5.97.1 → 5.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -7,34 +7,32 @@
7
7
 
8
8
  const {
9
9
  JAVASCRIPT_MODULE_TYPE_AUTO,
10
- JAVASCRIPT_MODULE_TYPE_DYNAMIC
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
11
12
  } = require("./ModuleTypeConstants");
12
13
  const NodeStuffInWebError = require("./NodeStuffInWebError");
13
14
  const RuntimeGlobals = require("./RuntimeGlobals");
14
15
  const CachedConstDependency = require("./dependencies/CachedConstDependency");
15
16
  const ConstDependency = require("./dependencies/ConstDependency");
16
17
  const ExternalModuleDependency = require("./dependencies/ExternalModuleDependency");
17
- const {
18
- evaluateToString,
19
- expressionIsUnsupported
20
- } = require("./javascript/JavascriptParserHelpers");
18
+ const ExternalModuleInitFragmentDependency = require("./dependencies/ExternalModuleInitFragmentDependency");
19
+ const ImportMetaPlugin = require("./dependencies/ImportMetaPlugin");
20
+ const { evaluateToString } = require("./javascript/JavascriptParserHelpers");
21
21
  const { relative } = require("./util/fs");
22
22
  const { parseResource } = require("./util/identifier");
23
23
 
24
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
25
24
  /** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
26
25
  /** @typedef {import("../declarations/WebpackOptions").NodeOptions} NodeOptions */
27
26
  /** @typedef {import("./Compiler")} Compiler */
28
- /** @typedef {import("./Dependency")} Dependency */
29
27
  /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
30
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
31
28
  /** @typedef {import("./NormalModule")} NormalModule */
32
- /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
33
29
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
30
+ /** @typedef {import("./javascript/JavascriptParser").Expression} Expression */
34
31
  /** @typedef {import("./javascript/JavascriptParser").Range} Range */
35
32
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
36
33
 
37
34
  const PLUGIN_NAME = "NodeStuffPlugin";
35
+ const URL_MODULE_CONSTANT_FUNCTION_NAME = "__webpack_fileURLToPath__";
38
36
 
39
37
  class NodeStuffPlugin {
40
38
  /**
@@ -50,7 +48,8 @@ class NodeStuffPlugin {
50
48
  * @returns {void}
51
49
  */
52
50
  apply(compiler) {
53
- const options = this.options;
51
+ const { options } = this;
52
+
54
53
  compiler.hooks.compilation.tap(
55
54
  PLUGIN_NAME,
56
55
  (compilation, { normalModuleFactory }) => {
@@ -58,215 +57,528 @@ class NodeStuffPlugin {
58
57
  ExternalModuleDependency,
59
58
  new ExternalModuleDependency.Template()
60
59
  );
60
+ compilation.dependencyTemplates.set(
61
+ ExternalModuleInitFragmentDependency,
62
+ new ExternalModuleInitFragmentDependency.Template()
63
+ );
61
64
 
62
65
  /**
63
66
  * @param {JavascriptParser} parser the parser
64
- * @param {JavascriptParserOptions} parserOptions options
67
+ * @param {NodeOptions} nodeOptions options
65
68
  * @returns {void}
66
69
  */
67
- const handler = (parser, parserOptions) => {
68
- if (parserOptions.node === false) return;
70
+ const globalHandler = (parser, nodeOptions) => {
71
+ /**
72
+ * @param {Expression} expr expression
73
+ * @returns {ConstDependency} const dependency
74
+ */
75
+ const getGlobalDep = (expr) => {
76
+ if (compilation.outputOptions.environment.globalThis) {
77
+ return new ConstDependency(
78
+ "globalThis",
79
+ /** @type {Range} */ (expr.range)
80
+ );
81
+ }
69
82
 
70
- let localOptions = options;
71
- if (parserOptions.node) {
72
- localOptions = { ...localOptions, ...parserOptions.node };
73
- }
83
+ return new ConstDependency(
84
+ RuntimeGlobals.global,
85
+ /** @type {Range} */ (expr.range),
86
+ [RuntimeGlobals.global]
87
+ );
88
+ };
74
89
 
75
- if (localOptions.global !== false) {
76
- const withWarning = localOptions.global === "warn";
77
- parser.hooks.expression.for("global").tap(PLUGIN_NAME, expr => {
90
+ const withWarning = nodeOptions.global === "warn";
91
+
92
+ parser.hooks.expression.for("global").tap(PLUGIN_NAME, (expr) => {
93
+ const dep = getGlobalDep(expr);
94
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
95
+ parser.state.module.addPresentationalDependency(dep);
96
+
97
+ if (withWarning) {
98
+ parser.state.module.addWarning(
99
+ new NodeStuffInWebError(
100
+ dep.loc,
101
+ "global",
102
+ "The global namespace object is a Node.js feature and isn't available in browsers."
103
+ )
104
+ );
105
+ }
106
+ });
107
+
108
+ parser.hooks.rename.for("global").tap(PLUGIN_NAME, (expr) => {
109
+ const dep = getGlobalDep(expr);
110
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
111
+ parser.state.module.addPresentationalDependency(dep);
112
+ return false;
113
+ });
114
+ };
115
+
116
+ const hooks = ImportMetaPlugin.getCompilationHooks(compilation);
117
+
118
+ /**
119
+ * @param {JavascriptParser} parser the parser
120
+ * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
121
+ * @param {(module: NormalModule) => string} fn function
122
+ * @param {"filename" | "dirname"} property a property
123
+ * @returns {void}
124
+ */
125
+ const setModuleConstant = (parser, expressionName, fn, property) => {
126
+ parser.hooks.expression
127
+ .for(expressionName)
128
+ .tap(PLUGIN_NAME, (expr) => {
78
129
  const dep = new ConstDependency(
79
- RuntimeGlobals.global,
80
- /** @type {Range} */ (expr.range),
81
- [RuntimeGlobals.global]
130
+ fn(parser.state.module),
131
+ /** @type {Range} */
132
+ (expr.range)
82
133
  );
83
134
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
84
135
  parser.state.module.addPresentationalDependency(dep);
136
+ return true;
137
+ });
85
138
 
86
- // TODO webpack 6 remove
87
- if (withWarning) {
88
- parser.state.module.addWarning(
89
- new NodeStuffInWebError(
90
- dep.loc,
91
- "global",
92
- "The global namespace object is a Node.js feature and isn't available in browsers."
93
- )
94
- );
139
+ if (
140
+ expressionName === "import.meta.filename" ||
141
+ expressionName === "import.meta.dirname"
142
+ ) {
143
+ hooks.propertyInDestructuring.tap(PLUGIN_NAME, (usingProperty) => {
144
+ if (usingProperty.id === property) {
145
+ return `${property}: ${fn(parser.state.module)},`;
95
146
  }
96
147
  });
97
- parser.hooks.rename.for("global").tap(PLUGIN_NAME, expr => {
98
- const dep = new ConstDependency(
99
- RuntimeGlobals.global,
100
- /** @type {Range} */ (expr.range),
101
- [RuntimeGlobals.global]
148
+ }
149
+ };
150
+
151
+ /**
152
+ * @param {JavascriptParser} parser the parser
153
+ * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
154
+ * @param {(module: NormalModule) => string} fn function
155
+ * @param {"filename" | "dirname"} property a property
156
+ * @param {string=} warning warning
157
+ * @returns {void}
158
+ */
159
+ const setCachedModuleConstant = (
160
+ parser,
161
+ expressionName,
162
+ fn,
163
+ property,
164
+ warning
165
+ ) => {
166
+ parser.hooks.expression
167
+ .for(expressionName)
168
+ .tap(PLUGIN_NAME, (expr) => {
169
+ const dep = new CachedConstDependency(
170
+ JSON.stringify(fn(parser.state.module)),
171
+ /** @type {Range} */
172
+ (expr.range),
173
+ `__webpack_${property}__`
102
174
  );
103
175
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
104
176
  parser.state.module.addPresentationalDependency(dep);
105
- return false;
177
+
178
+ if (warning) {
179
+ parser.state.module.addWarning(
180
+ new NodeStuffInWebError(dep.loc, expressionName, warning)
181
+ );
182
+ }
183
+
184
+ return true;
185
+ });
186
+
187
+ if (
188
+ expressionName === "import.meta.filename" ||
189
+ expressionName === "import.meta.dirname"
190
+ ) {
191
+ hooks.propertyInDestructuring.tap(PLUGIN_NAME, (usingProperty) => {
192
+ if (property === usingProperty.id) {
193
+ if (warning) {
194
+ parser.state.module.addWarning(
195
+ new NodeStuffInWebError(
196
+ usingProperty.loc,
197
+ expressionName,
198
+ warning
199
+ )
200
+ );
201
+ }
202
+
203
+ return `${property}: ${JSON.stringify(fn(parser.state.module))},`;
204
+ }
106
205
  });
107
206
  }
207
+ };
108
208
 
109
- /**
110
- * @param {string} expressionName expression name
111
- * @param {(module: NormalModule) => string} fn function
112
- * @param {string=} warning warning
113
- * @returns {void}
114
- */
115
- const setModuleConstant = (expressionName, fn, warning) => {
116
- parser.hooks.expression
117
- .for(expressionName)
118
- .tap(PLUGIN_NAME, expr => {
209
+ /**
210
+ * @param {JavascriptParser} parser the parser
211
+ * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
212
+ * @param {string} value value
213
+ * @param {"filename" | "dirname"} property a property
214
+ * @param {string=} warning warning
215
+ * @returns {void}
216
+ */
217
+ const setConstant = (
218
+ parser,
219
+ expressionName,
220
+ value,
221
+ property,
222
+ warning
223
+ ) =>
224
+ setCachedModuleConstant(
225
+ parser,
226
+ expressionName,
227
+ () => value,
228
+ property,
229
+ warning
230
+ );
231
+
232
+ /**
233
+ * @param {JavascriptParser} parser the parser
234
+ * @param {"__filename" | "__dirname" | "import.meta.filename" | "import.meta.dirname"} expressionName expression name
235
+ * @param {"dirname" | "filename"} property property
236
+ * @param {() => string} value function to get value
237
+ * @returns {void}
238
+ */
239
+ const setUrlModuleConstant = (
240
+ parser,
241
+ expressionName,
242
+ property,
243
+ value
244
+ ) => {
245
+ parser.hooks.expression
246
+ .for(expressionName)
247
+ .tap(PLUGIN_NAME, (expr) => {
248
+ // We use `CachedConstDependency` because of `eval` devtool, there is no `import.meta` inside `eval()`
249
+ const { importMetaName, environment, module } =
250
+ compilation.outputOptions;
251
+
252
+ // Generate `import.meta.dirname` and `import.meta.filename` when:
253
+ // - they are supported by the environment
254
+ // - it is a universal target, because we can't use `import mod from "node:url"; ` at the top file
255
+ if (
256
+ environment.importMetaDirnameAndFilename ||
257
+ (compiler.platform.web === null &&
258
+ compiler.platform.node === null &&
259
+ module)
260
+ ) {
119
261
  const dep = new CachedConstDependency(
120
- JSON.stringify(fn(parser.state.module)),
121
- /** @type {Range} */ (expr.range),
122
- expressionName
262
+ `${importMetaName}.${property}`,
263
+ /** @type {Range} */
264
+ (expr.range),
265
+ `__webpack_${property}__`,
266
+ CachedConstDependency.PLACE_CHUNK
123
267
  );
268
+
124
269
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
125
270
  parser.state.module.addPresentationalDependency(dep);
271
+ return;
272
+ }
126
273
 
127
- // TODO webpack 6 remove
128
- if (warning) {
129
- parser.state.module.addWarning(
130
- new NodeStuffInWebError(dep.loc, expressionName, warning)
274
+ const dep = new ExternalModuleDependency(
275
+ "url",
276
+ [
277
+ {
278
+ name: "fileURLToPath",
279
+ value: URL_MODULE_CONSTANT_FUNCTION_NAME
280
+ }
281
+ ],
282
+ undefined,
283
+ `${URL_MODULE_CONSTANT_FUNCTION_NAME}(${value()})`,
284
+ /** @type {Range} */ (expr.range),
285
+ `__webpack_${property}__`,
286
+ ExternalModuleDependency.PLACE_CHUNK
287
+ );
288
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
289
+ parser.state.module.addPresentationalDependency(dep);
290
+
291
+ return true;
292
+ });
293
+
294
+ if (
295
+ expressionName === "import.meta.filename" ||
296
+ expressionName === "import.meta.dirname"
297
+ ) {
298
+ hooks.propertyInDestructuring.tap(PLUGIN_NAME, (usingProperty) => {
299
+ if (property === usingProperty.id) {
300
+ const { importMetaName, environment, module } =
301
+ compilation.outputOptions;
302
+
303
+ if (
304
+ environment.importMetaDirnameAndFilename ||
305
+ (compiler.platform.web === null &&
306
+ compiler.platform.node === null &&
307
+ module)
308
+ ) {
309
+ const dep = new CachedConstDependency(
310
+ `${importMetaName}.${property}`,
311
+ null,
312
+ `__webpack_${property}__`,
313
+ CachedConstDependency.PLACE_CHUNK
314
+ );
315
+ dep.loc = /** @type {DependencyLocation} */ (
316
+ usingProperty.loc
131
317
  );
318
+ parser.state.module.addPresentationalDependency(dep);
319
+ return `${property}: __webpack_${property}__,`;
132
320
  }
133
321
 
134
- return true;
135
- });
136
- };
137
-
138
- /**
139
- * @param {string} expressionName expression name
140
- * @param {(value: string) => string} fn function
141
- * @returns {void}
142
- */
143
- const setUrlModuleConstant = (expressionName, fn) => {
144
- parser.hooks.expression
145
- .for(expressionName)
146
- .tap(PLUGIN_NAME, expr => {
147
322
  const dep = new ExternalModuleDependency(
148
323
  "url",
149
324
  [
150
325
  {
151
326
  name: "fileURLToPath",
152
- value: "__webpack_fileURLToPath__"
327
+ value: URL_MODULE_CONSTANT_FUNCTION_NAME
153
328
  }
154
329
  ],
155
330
  undefined,
156
- fn("__webpack_fileURLToPath__"),
157
- /** @type {Range} */ (expr.range),
158
- expressionName
331
+ `${URL_MODULE_CONSTANT_FUNCTION_NAME}(${value()})`,
332
+ null,
333
+ `__webpack_${property}__`,
334
+ ExternalModuleDependency.PLACE_CHUNK
159
335
  );
160
- dep.loc = /** @type {DependencyLocation} */ (expr.loc);
336
+
337
+ dep.loc = /** @type {DependencyLocation} */ (usingProperty.loc);
161
338
  parser.state.module.addPresentationalDependency(dep);
162
339
 
163
- return true;
164
- });
165
- };
340
+ return `${property}: __webpack_${property}__,`;
341
+ }
342
+ });
343
+ }
344
+ };
166
345
 
167
- /**
168
- * @param {string} expressionName expression name
169
- * @param {string} value value
170
- * @param {string=} warning warning
171
- * @returns {void}
172
- */
173
- const setConstant = (expressionName, value, warning) =>
174
- setModuleConstant(expressionName, () => value, warning);
346
+ /**
347
+ * @param {JavascriptParser} parser the parser
348
+ * @param {NodeOptions} nodeOptions options
349
+ * @param {{ dirname: "__dirname" | "import.meta.dirname", filename: "__filename" | "import.meta.filename" }} identifiers options
350
+ * @returns {void}
351
+ */
352
+ const dirnameAndFilenameHandler = (
353
+ parser,
354
+ nodeOptions,
355
+ { dirname, filename }
356
+ ) => {
357
+ // Keep `import.meta.filename` in code
358
+ if (
359
+ nodeOptions.__filename === false &&
360
+ filename === "import.meta.filename"
361
+ ) {
362
+ setModuleConstant(parser, filename, () => filename, "filename");
363
+ }
175
364
 
176
- const context = compiler.context;
177
- if (localOptions.__filename) {
178
- switch (localOptions.__filename) {
365
+ if (nodeOptions.__filename) {
366
+ switch (nodeOptions.__filename) {
179
367
  case "mock":
180
- setConstant("__filename", "/index.js");
368
+ setConstant(parser, filename, "/index.js", "filename");
181
369
  break;
182
370
  case "warn-mock":
183
371
  setConstant(
184
- "__filename",
372
+ parser,
373
+ filename,
185
374
  "/index.js",
375
+ "filename",
186
376
  "__filename is a Node.js feature and isn't available in browsers."
187
377
  );
188
378
  break;
189
- case "node-module":
379
+ case "node-module": {
380
+ const importMetaName = compilation.outputOptions.importMetaName;
381
+
190
382
  setUrlModuleConstant(
191
- "__filename",
192
- functionName => `${functionName}(import.meta.url)`
383
+ parser,
384
+ filename,
385
+ "filename",
386
+ () => `${importMetaName}.url`
193
387
  );
194
388
  break;
389
+ }
390
+ case "eval-only":
391
+ // Keep `import.meta.filename` in the source code for the ES module output, or create a fallback using `import.meta.url` if possible
392
+ if (compilation.outputOptions.module) {
393
+ const { importMetaName } = compilation.outputOptions;
394
+
395
+ setUrlModuleConstant(
396
+ parser,
397
+ filename,
398
+ "filename",
399
+ () => `${importMetaName}.url`
400
+ );
401
+ }
402
+ // Replace `import.meta.filename` with `__filename` for the non-ES module output
403
+ else if (filename === "import.meta.filename") {
404
+ setModuleConstant(
405
+ parser,
406
+ filename,
407
+ () => "__filename",
408
+ "filename"
409
+ );
410
+ }
411
+ break;
195
412
  case true:
196
- setModuleConstant("__filename", module =>
197
- relative(
198
- /** @type {InputFileSystem} */ (compiler.inputFileSystem),
199
- context,
200
- module.resource
201
- )
413
+ setCachedModuleConstant(
414
+ parser,
415
+ filename,
416
+ (module) =>
417
+ relative(
418
+ /** @type {InputFileSystem} */ (compiler.inputFileSystem),
419
+ compiler.context,
420
+ module.resource
421
+ ),
422
+ "filename"
202
423
  );
203
424
  break;
204
425
  }
205
426
 
206
427
  parser.hooks.evaluateIdentifier
207
428
  .for("__filename")
208
- .tap(PLUGIN_NAME, expr => {
429
+ .tap(PLUGIN_NAME, (expr) => {
209
430
  if (!parser.state.module) return;
210
431
  const resource = parseResource(parser.state.module.resource);
211
432
  return evaluateToString(resource.path)(expr);
212
433
  });
213
434
  }
214
- if (localOptions.__dirname) {
215
- switch (localOptions.__dirname) {
435
+
436
+ // Keep `import.meta.dirname` in code
437
+ if (
438
+ nodeOptions.__dirname === false &&
439
+ dirname === "import.meta.dirname"
440
+ ) {
441
+ setModuleConstant(parser, dirname, () => dirname, "dirname");
442
+ }
443
+
444
+ if (nodeOptions.__dirname) {
445
+ switch (nodeOptions.__dirname) {
216
446
  case "mock":
217
- setConstant("__dirname", "/");
447
+ setConstant(parser, dirname, "/", "dirname");
218
448
  break;
219
449
  case "warn-mock":
220
450
  setConstant(
221
- "__dirname",
451
+ parser,
452
+ dirname,
222
453
  "/",
454
+ "dirname",
223
455
  "__dirname is a Node.js feature and isn't available in browsers."
224
456
  );
225
457
  break;
226
- case "node-module":
458
+ case "node-module": {
459
+ const importMetaName = compilation.outputOptions.importMetaName;
460
+
227
461
  setUrlModuleConstant(
228
- "__dirname",
229
- functionName =>
230
- `${functionName}(import.meta.url + "/..").slice(0, -1)`
462
+ parser,
463
+ dirname,
464
+ "dirname",
465
+ () => `${importMetaName}.url.replace(/\\/(?:[^\\/]*)$/, "")`
231
466
  );
232
467
  break;
468
+ }
469
+ case "eval-only":
470
+ // Keep `import.meta.dirname` in the source code for the ES module output and replace `__dirname` on `import.meta.dirname`
471
+ if (compilation.outputOptions.module) {
472
+ const { importMetaName } = compilation.outputOptions;
473
+
474
+ setUrlModuleConstant(
475
+ parser,
476
+ dirname,
477
+ "dirname",
478
+ () => `${importMetaName}.url.replace(/\\/(?:[^\\/]*)$/, "")`
479
+ );
480
+ }
481
+ // Replace `import.meta.dirname` with `__dirname` for the non-ES module output
482
+ else if (dirname === "import.meta.dirname") {
483
+ setModuleConstant(
484
+ parser,
485
+ dirname,
486
+ () => "__dirname",
487
+ "dirname"
488
+ );
489
+ }
490
+ break;
233
491
  case true:
234
- setModuleConstant("__dirname", module =>
235
- relative(
236
- /** @type {InputFileSystem} */ (compiler.inputFileSystem),
237
- context,
238
- /** @type {string} */ (module.context)
239
- )
492
+ setCachedModuleConstant(
493
+ parser,
494
+ dirname,
495
+ (module) =>
496
+ relative(
497
+ /** @type {InputFileSystem} */ (compiler.inputFileSystem),
498
+ compiler.context,
499
+ /** @type {string} */ (module.context)
500
+ ),
501
+ "dirname"
240
502
  );
241
503
  break;
242
504
  }
243
505
 
244
506
  parser.hooks.evaluateIdentifier
245
- .for("__dirname")
246
- .tap(PLUGIN_NAME, expr => {
507
+ .for(dirname)
508
+ .tap(PLUGIN_NAME, (expr) => {
247
509
  if (!parser.state.module) return;
248
510
  return evaluateToString(
249
- /** @type {string} */ (parser.state.module.context)
511
+ /** @type {string} */
512
+ (parser.state.module.context)
250
513
  )(expr);
251
514
  });
252
515
  }
253
- parser.hooks.expression
254
- .for("require.extensions")
255
- .tap(
256
- PLUGIN_NAME,
257
- expressionIsUnsupported(
258
- parser,
259
- "require.extensions is not supported by webpack. Use a loader instead."
260
- )
516
+ };
517
+
518
+ /**
519
+ * @param {JavascriptParser} parser the parser
520
+ * @param {JavascriptParserOptions} parserOptions the javascript parser options
521
+ * @param {boolean} a true when we need to handle `__filename` and `__dirname`, otherwise false
522
+ * @param {boolean} b true when we need to handle `import.meta.filename` and `import.meta.dirname`, otherwise false
523
+ */
524
+ const handler = (parser, parserOptions, a, b) => {
525
+ if (b && parserOptions.node === false) {
526
+ // Keep `import.meta.dirname` and `import.meta.filename` in code
527
+ setModuleConstant(
528
+ parser,
529
+ "import.meta.dirname",
530
+ () => "import.meta.dirname",
531
+ "dirname"
261
532
  );
533
+ setModuleConstant(
534
+ parser,
535
+ "import.meta.filename",
536
+ () => "import.meta.filename",
537
+ "filename"
538
+ );
539
+ return;
540
+ }
541
+
542
+ let localOptions = options;
543
+
544
+ if (parserOptions.node) {
545
+ localOptions = { ...localOptions, ...parserOptions.node };
546
+ }
547
+
548
+ if (localOptions.global !== false) {
549
+ globalHandler(parser, localOptions);
550
+ }
551
+
552
+ if (a) {
553
+ dirnameAndFilenameHandler(parser, localOptions, {
554
+ dirname: "__dirname",
555
+ filename: "__filename"
556
+ });
557
+ }
558
+
559
+ if (b && parserOptions.importMeta !== false) {
560
+ dirnameAndFilenameHandler(parser, localOptions, {
561
+ dirname: "import.meta.dirname",
562
+ filename: "import.meta.filename"
563
+ });
564
+ }
262
565
  };
263
566
 
264
567
  normalModuleFactory.hooks.parser
265
568
  .for(JAVASCRIPT_MODULE_TYPE_AUTO)
266
- .tap(PLUGIN_NAME, handler);
569
+ .tap(PLUGIN_NAME, (parser, parserOptions) => {
570
+ handler(parser, parserOptions, true, true);
571
+ });
267
572
  normalModuleFactory.hooks.parser
268
573
  .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
269
- .tap(PLUGIN_NAME, handler);
574
+ .tap(PLUGIN_NAME, (parser, parserOptions) => {
575
+ handler(parser, parserOptions, true, false);
576
+ });
577
+ normalModuleFactory.hooks.parser
578
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
579
+ .tap(PLUGIN_NAME, (parser, parserOptions) => {
580
+ handler(parser, parserOptions, false, true);
581
+ });
270
582
  }
271
583
  );
272
584
  }