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
@@ -0,0 +1,264 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Haijie Xie @hai-x
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { pathToFileURL } = require("url");
9
+ const CommentCompilationWarning = require("../CommentCompilationWarning");
10
+ const RuntimeGlobals = require("../RuntimeGlobals");
11
+ const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
12
+ const ConstDependency = require("../dependencies/ConstDependency");
13
+ const ContextDependencyHelpers = require("../dependencies/ContextDependencyHelpers");
14
+ const URLContextDependency = require("../dependencies/URLContextDependency");
15
+ const URLDependency = require("../dependencies/URLDependency");
16
+ const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
17
+ const { approve } = require("../javascript/JavascriptParserHelpers");
18
+ const InnerGraph = require("../optimize/InnerGraph");
19
+
20
+ /** @typedef {import("estree").MemberExpression} MemberExpression */
21
+ /** @typedef {import("estree").NewExpression} NewExpressionNode */
22
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
23
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
24
+ /** @typedef {import("../NormalModule")} NormalModule */
25
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
26
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
27
+
28
+ const PLUGIN_NAME = "URLParserPlugin";
29
+
30
+ /**
31
+ * @param {NormalModule} module module
32
+ * @returns {URL} file url
33
+ */
34
+ const getUrl = (module) => pathToFileURL(module.resource);
35
+
36
+ /**
37
+ * @param {JavascriptParser} parser parser parser
38
+ * @param {MemberExpression} arg arg
39
+ * @returns {boolean} true when it is `meta.url`, otherwise false
40
+ */
41
+ const isMetaUrl = (parser, arg) => {
42
+ const chain = parser.extractMemberExpressionChain(arg);
43
+
44
+ if (
45
+ chain.members.length !== 1 ||
46
+ chain.object.type !== "MetaProperty" ||
47
+ chain.object.meta.name !== "import" ||
48
+ chain.object.property.name !== "meta" ||
49
+ chain.members[0] !== "url"
50
+ ) {
51
+ return false;
52
+ }
53
+
54
+ return true;
55
+ };
56
+
57
+ /**
58
+ * @type {WeakMap<NewExpressionNode, BasicEvaluatedExpression | undefined>}
59
+ */
60
+ const getEvaluatedExprCache = new WeakMap();
61
+
62
+ /**
63
+ * @param {NewExpressionNode} expr expression
64
+ * @param {JavascriptParser} parser parser parser
65
+ * @returns {BasicEvaluatedExpression | undefined} basic evaluated expression
66
+ */
67
+ const getEvaluatedExpr = (expr, parser) => {
68
+ let result = getEvaluatedExprCache.get(expr);
69
+ if (result !== undefined) return result;
70
+
71
+ /**
72
+ * @returns {BasicEvaluatedExpression | undefined} basic evaluated expression
73
+ */
74
+ const evaluate = () => {
75
+ if (expr.arguments.length !== 2) return;
76
+
77
+ const [arg1, arg2] = expr.arguments;
78
+
79
+ if (arg2.type !== "MemberExpression" || arg1.type === "SpreadElement") {
80
+ return;
81
+ }
82
+ if (!isMetaUrl(parser, arg2)) return;
83
+
84
+ return parser.evaluateExpression(arg1);
85
+ };
86
+
87
+ result = evaluate();
88
+ getEvaluatedExprCache.set(expr, result);
89
+
90
+ return result;
91
+ };
92
+
93
+ class URLParserPlugin {
94
+ /**
95
+ * @param {JavascriptParserOptions} options options
96
+ */
97
+ constructor(options) {
98
+ this.options = options;
99
+ }
100
+
101
+ /**
102
+ * @param {JavascriptParser} parser the parser
103
+ * @returns {void}
104
+ */
105
+ apply(parser) {
106
+ const relative = this.options.url === "relative";
107
+
108
+ parser.hooks.canRename.for("URL").tap(PLUGIN_NAME, approve);
109
+ parser.hooks.evaluateNewExpression.for("URL").tap(PLUGIN_NAME, (expr) => {
110
+ const evaluatedExpr = getEvaluatedExpr(expr, parser);
111
+ const request = evaluatedExpr && evaluatedExpr.asString();
112
+
113
+ if (!request) return;
114
+ const url = new URL(request, getUrl(parser.state.module));
115
+
116
+ return new BasicEvaluatedExpression()
117
+ .setString(url.toString())
118
+ .setRange(/** @type {Range} */ (expr.range));
119
+ });
120
+ parser.hooks.new.for("URL").tap(PLUGIN_NAME, (_expr) => {
121
+ const expr = /** @type {NewExpressionNode} */ (_expr);
122
+ const { options: importOptions, errors: commentErrors } =
123
+ parser.parseCommentOptions(/** @type {Range} */ (expr.range));
124
+
125
+ if (commentErrors) {
126
+ for (const e of commentErrors) {
127
+ const { comment } = e;
128
+ parser.state.module.addWarning(
129
+ new CommentCompilationWarning(
130
+ `Compilation error while processing magic comment(-s): /*${comment.value}*/: ${e.message}`,
131
+ /** @type {DependencyLocation} */ (comment.loc)
132
+ )
133
+ );
134
+ }
135
+ }
136
+
137
+ if (importOptions && importOptions.webpackIgnore !== undefined) {
138
+ if (typeof importOptions.webpackIgnore !== "boolean") {
139
+ parser.state.module.addWarning(
140
+ new UnsupportedFeatureWarning(
141
+ `\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
142
+ /** @type {DependencyLocation} */ (expr.loc)
143
+ )
144
+ );
145
+ return;
146
+ } else if (importOptions.webpackIgnore) {
147
+ if (expr.arguments.length !== 2) return;
148
+
149
+ const [, arg2] = expr.arguments;
150
+
151
+ if (arg2.type !== "MemberExpression" || !isMetaUrl(parser, arg2)) {
152
+ return;
153
+ }
154
+
155
+ const dep = new ConstDependency(
156
+ RuntimeGlobals.baseURI,
157
+ /** @type {Range} */ (arg2.range),
158
+ [RuntimeGlobals.baseURI]
159
+ );
160
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
161
+ parser.state.module.addPresentationalDependency(dep);
162
+
163
+ return true;
164
+ }
165
+ }
166
+
167
+ const evaluatedExpr = getEvaluatedExpr(expr, parser);
168
+ if (!evaluatedExpr) return;
169
+
170
+ let request;
171
+
172
+ // static URL
173
+ if ((request = evaluatedExpr.asString())) {
174
+ const [arg1, arg2] = expr.arguments;
175
+ const dep = new URLDependency(
176
+ request,
177
+ [
178
+ /** @type {Range} */ (arg1.range)[0],
179
+ /** @type {Range} */ (arg2.range)[1]
180
+ ],
181
+ /** @type {Range} */ (expr.range),
182
+ relative
183
+ );
184
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
185
+ parser.state.current.addDependency(dep);
186
+ InnerGraph.onUsage(parser.state, (e) => (dep.usedByExports = e));
187
+ return true;
188
+ }
189
+
190
+ if (this.options.dynamicUrl === false) return;
191
+
192
+ // context URL
193
+ let include;
194
+ let exclude;
195
+
196
+ if (importOptions) {
197
+ if (importOptions.webpackInclude !== undefined) {
198
+ if (
199
+ !importOptions.webpackInclude ||
200
+ !(importOptions.webpackInclude instanceof RegExp)
201
+ ) {
202
+ parser.state.module.addWarning(
203
+ new UnsupportedFeatureWarning(
204
+ `\`webpackInclude\` expected a regular expression, but received: ${importOptions.webpackInclude}.`,
205
+ /** @type {DependencyLocation} */ (expr.loc)
206
+ )
207
+ );
208
+ } else {
209
+ include = importOptions.webpackInclude;
210
+ }
211
+ }
212
+ if (importOptions.webpackExclude !== undefined) {
213
+ if (
214
+ !importOptions.webpackExclude ||
215
+ !(importOptions.webpackExclude instanceof RegExp)
216
+ ) {
217
+ parser.state.module.addWarning(
218
+ new UnsupportedFeatureWarning(
219
+ `\`webpackExclude\` expected a regular expression, but received: ${importOptions.webpackExclude}.`,
220
+ /** @type {DependencyLocation} */ (expr.loc)
221
+ )
222
+ );
223
+ } else {
224
+ exclude = importOptions.webpackExclude;
225
+ }
226
+ }
227
+ }
228
+ const dep = ContextDependencyHelpers.create(
229
+ URLContextDependency,
230
+ /** @type {Range} */ (expr.range),
231
+ evaluatedExpr,
232
+ expr,
233
+ this.options,
234
+ {
235
+ include,
236
+ exclude,
237
+ mode: "sync",
238
+ typePrefix: "new URL with import.meta.url",
239
+ category: "url"
240
+ },
241
+ parser
242
+ );
243
+ if (!dep) return;
244
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
245
+ dep.optional = Boolean(parser.scope.inTry);
246
+ parser.state.current.addDependency(dep);
247
+ return true;
248
+ });
249
+ parser.hooks.isPure.for("NewExpression").tap(PLUGIN_NAME, (_expr) => {
250
+ const expr = /** @type {NewExpressionNode} */ (_expr);
251
+ const { callee } = expr;
252
+ if (callee.type !== "Identifier") return;
253
+ const calleeInfo = parser.getFreeInfoFromVariable(callee.name);
254
+ if (!calleeInfo || calleeInfo.name !== "URL") return;
255
+
256
+ const evaluatedExpr = getEvaluatedExpr(expr, parser);
257
+ const request = evaluatedExpr && evaluatedExpr.asString();
258
+
259
+ if (request) return true;
260
+ });
261
+ }
262
+ }
263
+
264
+ module.exports = URLParserPlugin;
@@ -7,12 +7,11 @@
7
7
 
8
8
  /**
9
9
  * Compare two arrays or strings by performing strict equality check for each value.
10
- * @template T [T=any]
10
+ * @template T
11
11
  * @param {ArrayLike<T>} a Array of values to be compared
12
12
  * @param {ArrayLike<T>} b Array of values to be compared
13
13
  * @returns {boolean} returns true if all the elements of passed arrays are strictly equal.
14
14
  */
15
-
16
15
  module.exports.equals = (a, b) => {
17
16
  if (a.length !== b.length) return false;
18
17
  for (let i = 0; i < a.length; i++) {
@@ -23,12 +22,11 @@ module.exports.equals = (a, b) => {
23
22
 
24
23
  /**
25
24
  * Partition an array by calling a predicate function on each value.
26
- * @template T [T=any]
27
- * @param {Array<T>} arr Array of values to be partitioned
25
+ * @template T
26
+ * @param {T[]} arr Array of values to be partitioned
28
27
  * @param {(value: T) => boolean} fn Partition function which partitions based on truthiness of result.
29
- * @returns {[Array<T>, Array<T>]} returns the values of `arr` partitioned into two new arrays based on fn predicate.
28
+ * @returns {[T[], T[]]} returns the values of `arr` partitioned into two new arrays based on fn predicate.
30
29
  */
31
-
32
30
  module.exports.groupBy = (
33
31
  // eslint-disable-next-line default-param-last
34
32
  arr = [],
@@ -36,9 +34,9 @@ module.exports.groupBy = (
36
34
  ) =>
37
35
  arr.reduce(
38
36
  /**
39
- * @param {[Array<T>, Array<T>]} groups An accumulator storing already partitioned values returned from previous call.
37
+ * @param {[T[], T[]]} groups An accumulator storing already partitioned values returned from previous call.
40
38
  * @param {T} value The value of the current element
41
- * @returns {[Array<T>, Array<T>]} returns an array of partitioned groups accumulator resulting from calling a predicate on the current value.
39
+ * @returns {[T[], T[]]} returns an array of partitioned groups accumulator resulting from calling a predicate on the current value.
42
40
  */
43
41
  (groups, value) => {
44
42
  groups[fn(value) ? 0 : 1].push(value);
@@ -17,7 +17,7 @@ class ArrayQueue {
17
17
  * @private
18
18
  * @type {T[]}
19
19
  */
20
- this._list = items ? Array.from(items) : [];
20
+ this._list = items ? [...items] : [];
21
21
  /**
22
22
  * @private
23
23
  * @type {T[]}
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { SyncHook, AsyncSeriesHook } = require("tapable");
8
+ const { AsyncSeriesHook, SyncHook } = require("tapable");
9
9
  const { makeWebpackError } = require("../HookWebpackError");
10
10
  const WebpackError = require("../WebpackError");
11
11
  const ArrayQueue = require("./ArrayQueue");
@@ -21,6 +21,7 @@ let inHandleResult = 0;
21
21
  * @callback Callback
22
22
  * @param {(WebpackError | null)=} err
23
23
  * @param {(T | null)=} result
24
+ * @returns {void}
24
25
  */
25
26
 
26
27
  /**
@@ -50,12 +51,12 @@ class AsyncQueueEntry {
50
51
 
51
52
  /**
52
53
  * @template T, K
53
- * @typedef {function(T): K} getKey
54
+ * @typedef {(item: T) => K} getKey
54
55
  */
55
56
 
56
57
  /**
57
58
  * @template T, R
58
- * @typedef {function(T, Callback<R>): void} Processor
59
+ * @typedef {(item: T, callback: Callback<R>) => void} Processor
59
60
  */
60
61
 
61
62
  /**
@@ -69,7 +70,7 @@ class AsyncQueue {
69
70
  * @param {string=} options.name name of the queue
70
71
  * @param {number=} options.parallelism how many items should be processed at once
71
72
  * @param {string=} options.context context of execution
72
- * @param {AsyncQueue<any, any, any>=} options.parent parent queue, which will have priority over this queue and with shared parallelism
73
+ * @param {AsyncQueue<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>=} options.parent parent queue, which will have priority over this queue and with shared parallelism
73
74
  * @param {getKey<T, K>=} options.getKey extract key from item
74
75
  * @param {Processor<T, R>} options.processor async function to process items
75
76
  */
@@ -80,18 +81,18 @@ class AsyncQueue {
80
81
  this._processor = processor;
81
82
  this._getKey =
82
83
  getKey ||
83
- /** @type {getKey<T, K>} */ (item => /** @type {T & K} */ (item));
84
+ /** @type {getKey<T, K>} */ ((item) => /** @type {T & K} */ (item));
84
85
  /** @type {Map<K, AsyncQueueEntry<T, K, R>>} */
85
86
  this._entries = new Map();
86
87
  /** @type {ArrayQueue<AsyncQueueEntry<T, K, R>>} */
87
88
  this._queued = new ArrayQueue();
88
- /** @type {AsyncQueue<any, any, any>[] | undefined} */
89
+ /** @type {AsyncQueue<T, K, R>[] | undefined} */
89
90
  this._children = undefined;
90
91
  this._activeTasks = 0;
91
92
  this._willEnsureProcessing = false;
92
93
  this._needProcessing = false;
93
94
  this._stopped = false;
94
- /** @type {AsyncQueue<any, any, any>} */
95
+ /** @type {AsyncQueue<T, K, R>} */
95
96
  this._root = parent ? parent._root : this;
96
97
  if (parent) {
97
98
  if (this._root._children === undefined) {
@@ -138,7 +139,7 @@ class AsyncQueue {
138
139
  */
139
140
  add(item, callback) {
140
141
  if (this._stopped) return callback(new WebpackError("Queue was stopped"));
141
- this.hooks.beforeAdd.callAsync(item, err => {
142
+ this.hooks.beforeAdd.callAsync(item, (err) => {
142
143
  if (err) {
143
144
  callback(
144
145
  makeWebpackError(err, `AsyncQueue(${this._name}).hooks.beforeAdd`)
@@ -327,7 +328,7 @@ class AsyncQueue {
327
328
  * @returns {void}
328
329
  */
329
330
  _startProcessing(entry) {
330
- this.hooks.beforeStart.callAsync(entry.item, err => {
331
+ this.hooks.beforeStart.callAsync(entry.item, (err) => {
331
332
  if (err) {
332
333
  this._handleResult(
333
334
  entry,
@@ -356,7 +357,7 @@ class AsyncQueue {
356
357
  * @returns {void}
357
358
  */
358
359
  _handleResult(entry, err, result) {
359
- this.hooks.result.callAsync(entry.item, err, result, hookError => {
360
+ this.hooks.result.callAsync(entry.item, err, result, (hookError) => {
360
361
  const error = hookError
361
362
  ? makeWebpackError(hookError, `AsyncQueue(${this._name}).hooks.result`)
362
363
  : err;
package/lib/util/Hash.js CHANGED
@@ -5,17 +5,35 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../../declarations/WebpackOptions").HashDigest} Encoding */
9
+
8
10
  class Hash {
9
11
  /* istanbul ignore next */
10
12
  /**
11
13
  * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
12
14
  * @abstract
13
- * @param {string|Buffer} data data
14
- * @param {string=} inputEncoding data encoding
15
- * @returns {this} updated hash
15
+ * @overload
16
+ * @param {string | Buffer} data data
17
+ * @returns {Hash} updated hash
18
+ */
19
+ /**
20
+ * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
21
+ * @abstract
22
+ * @overload
23
+ * @param {string} data data
24
+ * @param {Encoding} inputEncoding data encoding
25
+ * @returns {Hash} updated hash
26
+ */
27
+ /**
28
+ * Update hash {@link https://nodejs.org/api/crypto.html#crypto_hash_update_data_inputencoding}
29
+ * @abstract
30
+ * @param {string | Buffer} data data
31
+ * @param {Encoding=} inputEncoding data encoding
32
+ * @returns {Hash} updated hash
16
33
  */
17
34
  update(data, inputEncoding) {
18
35
  const AbstractMethodError = require("../AbstractMethodError");
36
+
19
37
  throw new AbstractMethodError();
20
38
  }
21
39
 
@@ -23,11 +41,25 @@ class Hash {
23
41
  /**
24
42
  * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
25
43
  * @abstract
26
- * @param {string=} encoding encoding of the return value
27
- * @returns {string|Buffer} digest
44
+ * @overload
45
+ * @returns {Buffer} digest
46
+ */
47
+ /**
48
+ * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
49
+ * @abstract
50
+ * @overload
51
+ * @param {Encoding} encoding encoding of the return value
52
+ * @returns {string} digest
53
+ */
54
+ /**
55
+ * Calculates the digest {@link https://nodejs.org/api/crypto.html#crypto_hash_digest_encoding}
56
+ * @abstract
57
+ * @param {Encoding=} encoding encoding of the return value
58
+ * @returns {string | Buffer} digest
28
59
  */
29
60
  digest(encoding) {
30
61
  const AbstractMethodError = require("../AbstractMethodError");
62
+
31
63
  throw new AbstractMethodError();
32
64
  }
33
65
  }
@@ -10,7 +10,7 @@
10
10
  * @param {Iterable<T>} set a set
11
11
  * @returns {T | undefined} last item
12
12
  */
13
- const last = set => {
13
+ const last = (set) => {
14
14
  let last;
15
15
  for (const item of set) last = item;
16
16
  return last;
@@ -19,7 +19,7 @@ const last = set => {
19
19
  /**
20
20
  * @template T
21
21
  * @param {Iterable<T>} iterable iterable
22
- * @param {function(T): boolean | null | undefined} filter predicate
22
+ * @param {(value: T) => boolean | null | undefined} filter predicate
23
23
  * @returns {boolean} true, if some items match the filter predicate
24
24
  */
25
25
  const someInIterable = (iterable, filter) => {
@@ -34,12 +34,12 @@ const someInIterable = (iterable, filter) => {
34
34
  * @param {Iterable<T>} iterable an iterable
35
35
  * @returns {number} count of items
36
36
  */
37
- const countIterable = iterable => {
37
+ const countIterable = (iterable) => {
38
38
  let i = 0;
39
39
  for (const _ of iterable) i++;
40
40
  return i;
41
41
  };
42
42
 
43
+ module.exports.countIterable = countIterable;
43
44
  module.exports.last = last;
44
45
  module.exports.someInIterable = someInIterable;
45
- module.exports.countIterable = countIterable;
@@ -10,12 +10,25 @@ const SortableSet = require("./SortableSet");
10
10
 
11
11
  /**
12
12
  * @template T
13
- * @typedef {LazyBucketSortedSet<T, any> | SortableSet<T>} Entry
13
+ * @template K
14
+ * @typedef {(item: T) => K} GetKey
14
15
  */
15
16
 
16
17
  /**
17
18
  * @template T
18
- * @typedef {(function(T): any) | (function(any, any): number)} Arg
19
+ * @typedef {(a: T, n: T) => number} Comparator
20
+ */
21
+
22
+ /**
23
+ * @template T
24
+ * @template K
25
+ * @typedef {LazyBucketSortedSet<T, K> | SortableSet<T>} Entry
26
+ */
27
+
28
+ /**
29
+ * @template T
30
+ * @template K
31
+ * @typedef {GetKey<T, K> | Comparator<K> | Comparator<T>} Arg
19
32
  */
20
33
 
21
34
  /**
@@ -32,17 +45,16 @@ const SortableSet = require("./SortableSet");
32
45
  */
33
46
  class LazyBucketSortedSet {
34
47
  /**
35
- * @param {function(T): K} getKey function to get key from item
36
- * @param {function(K, K): number} comparator comparator to sort keys
37
- * @param {...Arg<T>} args more pairs of getKey and comparator plus optional final comparator for the last layer
48
+ * @param {GetKey<T, K>} getKey function to get key from item
49
+ * @param {Comparator<K>=} comparator comparator to sort keys
50
+ * @param {...Arg<T, K>} args more pairs of getKey and comparator plus optional final comparator for the last layer
38
51
  */
39
52
  constructor(getKey, comparator, ...args) {
40
53
  this._getKey = getKey;
41
- /** @type {Arg<T>[]} */
42
54
  this._innerArgs = args;
43
55
  this._leaf = args.length <= 1;
44
56
  this._keys = new SortableSet(undefined, comparator);
45
- /** @type {Map<K, Entry<T>>} */
57
+ /** @type {Map<K, Entry<T, K>>} */
46
58
  this._map = new Map();
47
59
  this._unsortedItems = new Set();
48
60
  this.size = 0;
@@ -65,18 +77,20 @@ class LazyBucketSortedSet {
65
77
  _addInternal(key, item) {
66
78
  let entry = this._map.get(key);
67
79
  if (entry === undefined) {
68
- entry =
69
- /** @type {Entry<T>} */
70
- (
71
- this._leaf
72
- ? new SortableSet(undefined, this._innerArgs[0])
73
- : new /** @type {TODO} */ (LazyBucketSortedSet)(...this._innerArgs)
74
- );
80
+ entry = this._leaf
81
+ ? new SortableSet(
82
+ undefined,
83
+ /** @type {Comparator<T>} */
84
+ (this._innerArgs[0])
85
+ )
86
+ : new LazyBucketSortedSet(
87
+ .../** @type {[GetKey<T, K>, Comparator<K>]} */
88
+ (this._innerArgs)
89
+ );
75
90
  this._keys.add(key);
76
91
  this._map.set(key, entry);
77
92
  }
78
- /** @type {Entry<T>} */
79
- (entry).add(item);
93
+ entry.add(item);
80
94
  }
81
95
 
82
96
  /**
@@ -90,7 +104,7 @@ class LazyBucketSortedSet {
90
104
  return;
91
105
  }
92
106
  const key = this._getKey(item);
93
- const entry = /** @type {Entry<T>} */ (this._map.get(key));
107
+ const entry = /** @type {Entry<T, K>} */ (this._map.get(key));
94
108
  entry.delete(item);
95
109
  if (entry.size === 0) {
96
110
  this._deleteKey(key);
@@ -132,7 +146,9 @@ class LazyBucketSortedSet {
132
146
  }
133
147
  return item;
134
148
  }
135
- const nodeEntry = /** @type {LazyBucketSortedSet<T, any>} */ (entry);
149
+ const nodeEntry =
150
+ /** @type {LazyBucketSortedSet<T, K>} */
151
+ (entry);
136
152
  const item = nodeEntry.popFirst();
137
153
  if (nodeEntry.size === 0) {
138
154
  this._deleteKey(key);
@@ -142,11 +158,11 @@ class LazyBucketSortedSet {
142
158
 
143
159
  /**
144
160
  * @param {T} item to be updated item
145
- * @returns {function(true=): void} finish update
161
+ * @returns {(remove?: true) => void} finish update
146
162
  */
147
163
  startUpdate(item) {
148
164
  if (this._unsortedItems.has(item)) {
149
- return remove => {
165
+ return (remove) => {
150
166
  if (remove) {
151
167
  this._unsortedItems.delete(item);
152
168
  this.size--;
@@ -156,7 +172,7 @@ class LazyBucketSortedSet {
156
172
  const key = this._getKey(item);
157
173
  if (this._leaf) {
158
174
  const oldEntry = /** @type {SortableSet<T>} */ (this._map.get(key));
159
- return remove => {
175
+ return (remove) => {
160
176
  if (remove) {
161
177
  this.size--;
162
178
  oldEntry.delete(item);
@@ -178,11 +194,11 @@ class LazyBucketSortedSet {
178
194
  }
179
195
  };
180
196
  }
181
- const oldEntry = /** @type {LazyBucketSortedSet<T, any>} */ (
182
- this._map.get(key)
183
- );
197
+ const oldEntry =
198
+ /** @type {LazyBucketSortedSet<T, K>} */
199
+ (this._map.get(key));
184
200
  const finishUpdate = oldEntry.startUpdate(item);
185
- return remove => {
201
+ return (remove) => {
186
202
  if (remove) {
187
203
  this.size--;
188
204
  finishUpdate(true);
@@ -209,8 +225,9 @@ class LazyBucketSortedSet {
209
225
  * @returns {void}
210
226
  */
211
227
  _appendIterators(iterators) {
212
- if (this._unsortedItems.size > 0)
228
+ if (this._unsortedItems.size > 0) {
213
229
  iterators.push(this._unsortedItems[Symbol.iterator]());
230
+ }
214
231
  for (const key of this._keys) {
215
232
  const entry = this._map.get(key);
216
233
  if (this._leaf) {
@@ -218,7 +235,9 @@ class LazyBucketSortedSet {
218
235
  const iterator = leafEntry[Symbol.iterator]();
219
236
  iterators.push(iterator);
220
237
  } else {
221
- const nodeEntry = /** @type {LazyBucketSortedSet<T, any>} */ (entry);
238
+ const nodeEntry =
239
+ /** @type {LazyBucketSortedSet<T, K>} */
240
+ (entry);
222
241
  nodeEntry._appendIterators(iterators);
223
242
  }
224
243
  }