webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -11,10 +11,14 @@ const SEGMENTS_SPLIT_REGEXP = /([|!])/;
11
11
  const WINDOWS_PATH_SEPARATOR_REGEXP = /\\/g;
12
12
 
13
13
  /**
14
- * @typedef {Object} MakeRelativePathsCache
14
+ * @typedef {object} MakeRelativePathsCache
15
15
  * @property {Map<string, Map<string, string>>=} relativePaths
16
16
  */
17
17
 
18
+ /**
19
+ * @param {string} relativePath relative path
20
+ * @returns {string} request
21
+ */
18
22
  const relativePathToRequest = relativePath => {
19
23
  if (relativePath === "") return "./.";
20
24
  if (relativePath === "..") return "../.";
@@ -81,16 +85,92 @@ const requestToAbsolute = (context, relativePath) => {
81
85
  return relativePath;
82
86
  };
83
87
 
84
- const makeCacheable = fn => {
85
- /** @type {WeakMap<object, Map<string, Map<string, string>>>} */
88
+ /**
89
+ * @template T
90
+ * @typedef {function(string, object=): T} MakeCacheableResult
91
+ */
92
+
93
+ /**
94
+ * @template T
95
+ * @typedef {function(string): T} BindCacheResultFn
96
+ */
97
+
98
+ /**
99
+ * @template T
100
+ * @typedef {function(object): BindCacheResultFn<T>} BindCache
101
+ */
102
+
103
+ /**
104
+ * @template T
105
+ * @param {(function(string): T)} realFn real function
106
+ * @returns {MakeCacheableResult<T> & { bindCache: BindCache<T> }} cacheable function
107
+ */
108
+ const makeCacheable = realFn => {
109
+ /**
110
+ * @template T
111
+ * @typedef {Map<string, T>} CacheItem
112
+ */
113
+ /** @type {WeakMap<object, CacheItem<T>>} */
86
114
  const cache = new WeakMap();
87
115
 
88
116
  /**
89
- * @param {string} context context used to create relative path
90
- * @param {string} identifier identifier used to create relative path
91
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
92
- * @returns {string} the returned relative path
117
+ * @param {object} associatedObjectForCache an object to which the cache will be attached
118
+ * @returns {CacheItem<T>} cache item
93
119
  */
120
+ const getCache = associatedObjectForCache => {
121
+ const entry = cache.get(associatedObjectForCache);
122
+ if (entry !== undefined) return entry;
123
+ /** @type {Map<string, T>} */
124
+ const map = new Map();
125
+ cache.set(associatedObjectForCache, map);
126
+ return map;
127
+ };
128
+
129
+ /** @type {MakeCacheableResult<T> & { bindCache: BindCache<T> }} */
130
+ const fn = (str, associatedObjectForCache) => {
131
+ if (!associatedObjectForCache) return realFn(str);
132
+ const cache = getCache(associatedObjectForCache);
133
+ const entry = cache.get(str);
134
+ if (entry !== undefined) return entry;
135
+ const result = realFn(str);
136
+ cache.set(str, result);
137
+ return result;
138
+ };
139
+
140
+ /** @type {BindCache<T>} */
141
+ fn.bindCache = associatedObjectForCache => {
142
+ const cache = getCache(associatedObjectForCache);
143
+ /**
144
+ * @param {string} str string
145
+ * @returns {T} value
146
+ */
147
+ return str => {
148
+ const entry = cache.get(str);
149
+ if (entry !== undefined) return entry;
150
+ const result = realFn(str);
151
+ cache.set(str, result);
152
+ return result;
153
+ };
154
+ };
155
+
156
+ return fn;
157
+ };
158
+
159
+ /** @typedef {function(string, string, object=): string} MakeCacheableWithContextResult */
160
+ /** @typedef {function(string, string): string} BindCacheForContextResultFn */
161
+ /** @typedef {function(string): string} BindContextCacheForContextResultFn */
162
+ /** @typedef {function(object=): BindCacheForContextResultFn} BindCacheForContext */
163
+ /** @typedef {function(string, object=): BindContextCacheForContextResultFn} BindContextCacheForContext */
164
+
165
+ /**
166
+ * @param {function(string, string): string} fn function
167
+ * @returns {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} cacheable function with context
168
+ */
169
+ const makeCacheableWithContext = fn => {
170
+ /** @type {WeakMap<object, Map<string, Map<string, string>>>} */
171
+ const cache = new WeakMap();
172
+
173
+ /** @type {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} */
94
174
  const cachedFn = (context, identifier, associatedObjectForCache) => {
95
175
  if (!associatedObjectForCache) return fn(context, identifier);
96
176
 
@@ -110,17 +190,13 @@ const makeCacheable = fn => {
110
190
 
111
191
  if (cachedResult !== undefined) {
112
192
  return cachedResult;
113
- } else {
114
- const result = fn(context, identifier);
115
- innerSubCache.set(identifier, result);
116
- return result;
117
193
  }
194
+ const result = fn(context, identifier);
195
+ innerSubCache.set(identifier, result);
196
+ return result;
118
197
  };
119
198
 
120
- /**
121
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
122
- * @returns {function(string, string): string} cached function
123
- */
199
+ /** @type {BindCacheForContext} */
124
200
  cachedFn.bindCache = associatedObjectForCache => {
125
201
  let innerCache;
126
202
  if (associatedObjectForCache) {
@@ -149,21 +225,16 @@ const makeCacheable = fn => {
149
225
 
150
226
  if (cachedResult !== undefined) {
151
227
  return cachedResult;
152
- } else {
153
- const result = fn(context, identifier);
154
- innerSubCache.set(identifier, result);
155
- return result;
156
228
  }
229
+ const result = fn(context, identifier);
230
+ innerSubCache.set(identifier, result);
231
+ return result;
157
232
  };
158
233
 
159
234
  return boundFn;
160
235
  };
161
236
 
162
- /**
163
- * @param {string} context context used to create relative path
164
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
165
- * @returns {function(string): string} cached function
166
- */
237
+ /** @type {BindContextCacheForContext} */
167
238
  cachedFn.bindContextCache = (context, associatedObjectForCache) => {
168
239
  let innerSubCache;
169
240
  if (associatedObjectForCache) {
@@ -189,11 +260,10 @@ const makeCacheable = fn => {
189
260
  const cachedResult = innerSubCache.get(identifier);
190
261
  if (cachedResult !== undefined) {
191
262
  return cachedResult;
192
- } else {
193
- const result = fn(context, identifier);
194
- innerSubCache.set(identifier, result);
195
- return result;
196
263
  }
264
+ const result = fn(context, identifier);
265
+ innerSubCache.set(identifier, result);
266
+ return result;
197
267
  };
198
268
 
199
269
  return boundFn;
@@ -203,76 +273,74 @@ const makeCacheable = fn => {
203
273
  };
204
274
 
205
275
  /**
206
- *
207
276
  * @param {string} context context for relative path
208
277
  * @param {string} identifier identifier for path
209
278
  * @returns {string} a converted relative path
210
279
  */
211
- const _makePathsRelative = (context, identifier) => {
212
- return identifier
280
+ const _makePathsRelative = (context, identifier) =>
281
+ identifier
213
282
  .split(SEGMENTS_SPLIT_REGEXP)
214
283
  .map(str => absoluteToRequest(context, str))
215
284
  .join("");
216
- };
217
285
 
218
- exports.makePathsRelative = makeCacheable(_makePathsRelative);
286
+ module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
219
287
 
220
288
  /**
221
- *
222
289
  * @param {string} context context for relative path
223
290
  * @param {string} identifier identifier for path
224
291
  * @returns {string} a converted relative path
225
292
  */
226
- const _makePathsAbsolute = (context, identifier) => {
227
- return identifier
293
+ const _makePathsAbsolute = (context, identifier) =>
294
+ identifier
228
295
  .split(SEGMENTS_SPLIT_REGEXP)
229
296
  .map(str => requestToAbsolute(context, str))
230
297
  .join("");
231
- };
232
298
 
233
- exports.makePathsAbsolute = makeCacheable(_makePathsAbsolute);
299
+ module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
234
300
 
235
301
  /**
236
302
  * @param {string} context absolute context path
237
303
  * @param {string} request any request string may containing absolute paths, query string, etc.
238
304
  * @returns {string} a new request string avoiding absolute paths when possible
239
305
  */
240
- const _contextify = (context, request) => {
241
- return request
306
+ const _contextify = (context, request) =>
307
+ request
242
308
  .split("!")
243
309
  .map(r => absoluteToRequest(context, r))
244
310
  .join("!");
245
- };
246
311
 
247
- const contextify = makeCacheable(_contextify);
248
- exports.contextify = contextify;
312
+ const contextify = makeCacheableWithContext(_contextify);
313
+ module.exports.contextify = contextify;
249
314
 
250
315
  /**
251
316
  * @param {string} context absolute context path
252
317
  * @param {string} request any request string
253
318
  * @returns {string} a new request string using absolute paths when possible
254
319
  */
255
- const _absolutify = (context, request) => {
256
- return request
320
+ const _absolutify = (context, request) =>
321
+ request
257
322
  .split("!")
258
323
  .map(r => requestToAbsolute(context, r))
259
324
  .join("!");
260
- };
261
325
 
262
- const absolutify = makeCacheable(_absolutify);
263
- exports.absolutify = absolutify;
326
+ const absolutify = makeCacheableWithContext(_absolutify);
327
+ module.exports.absolutify = absolutify;
264
328
 
265
329
  const PATH_QUERY_FRAGMENT_REGEXP =
266
330
  /^((?:\0.|[^?#\0])*)(\?(?:\0.|[^#\0])*)?(#.*)?$/;
331
+ const PATH_QUERY_REGEXP = /^((?:\0.|[^?\0])*)(\?.*)?$/;
267
332
 
268
333
  /** @typedef {{ resource: string, path: string, query: string, fragment: string }} ParsedResource */
334
+ /** @typedef {{ resource: string, path: string, query: string }} ParsedResourceWithoutFragment */
269
335
 
270
336
  /**
271
337
  * @param {string} str the path with query and fragment
272
338
  * @returns {ParsedResource} parsed parts
273
339
  */
274
340
  const _parseResource = str => {
275
- const match = PATH_QUERY_FRAGMENT_REGEXP.exec(str);
341
+ const match =
342
+ /** @type {[string, string, string | undefined, string | undefined]} */
343
+ (/** @type {unknown} */ (PATH_QUERY_FRAGMENT_REGEXP.exec(str)));
276
344
  return {
277
345
  resource: str,
278
346
  path: match[1].replace(/\0(.)/g, "$1"),
@@ -280,47 +348,26 @@ const _parseResource = str => {
280
348
  fragment: match[3] || ""
281
349
  };
282
350
  };
283
- exports.parseResource = (realFn => {
284
- /** @type {WeakMap<object, Map<string, ParsedResource>>} */
285
- const cache = new WeakMap();
286
-
287
- const getCache = associatedObjectForCache => {
288
- const entry = cache.get(associatedObjectForCache);
289
- if (entry !== undefined) return entry;
290
- /** @type {Map<string, ParsedResource>} */
291
- const map = new Map();
292
- cache.set(associatedObjectForCache, map);
293
- return map;
294
- };
295
-
296
- /**
297
- * @param {string} str the path with query and fragment
298
- * @param {Object=} associatedObjectForCache an object to which the cache will be attached
299
- * @returns {ParsedResource} parsed parts
300
- */
301
- const fn = (str, associatedObjectForCache) => {
302
- if (!associatedObjectForCache) return realFn(str);
303
- const cache = getCache(associatedObjectForCache);
304
- const entry = cache.get(str);
305
- if (entry !== undefined) return entry;
306
- const result = realFn(str);
307
- cache.set(str, result);
308
- return result;
309
- };
351
+ module.exports.parseResource = makeCacheable(_parseResource);
310
352
 
311
- fn.bindCache = associatedObjectForCache => {
312
- const cache = getCache(associatedObjectForCache);
313
- return str => {
314
- const entry = cache.get(str);
315
- if (entry !== undefined) return entry;
316
- const result = realFn(str);
317
- cache.set(str, result);
318
- return result;
319
- };
353
+ /**
354
+ * Parse resource, skips fragment part
355
+ * @param {string} str the path with query and fragment
356
+ * @returns {ParsedResourceWithoutFragment} parsed parts
357
+ */
358
+ const _parseResourceWithoutFragment = str => {
359
+ const match =
360
+ /** @type {[string, string, string | undefined]} */
361
+ (/** @type {unknown} */ (PATH_QUERY_REGEXP.exec(str)));
362
+ return {
363
+ resource: str,
364
+ path: match[1].replace(/\0(.)/g, "$1"),
365
+ query: match[2] ? match[2].replace(/\0(.)/g, "$1") : ""
320
366
  };
321
-
322
- return fn;
323
- })(_parseResource);
367
+ };
368
+ module.exports.parseResourceWithoutFragment = makeCacheable(
369
+ _parseResourceWithoutFragment
370
+ );
324
371
 
325
372
  /**
326
373
  * @param {string} filename the filename which should be undone
@@ -328,7 +375,7 @@ exports.parseResource = (realFn => {
328
375
  * @param {boolean} enforceRelative true returns ./ for empty paths
329
376
  * @returns {string} repeated ../ to leave the directory of the provided filename to be back on output dir
330
377
  */
331
- exports.getUndoPath = (filename, outputPath, enforceRelative) => {
378
+ module.exports.getUndoPath = (filename, outputPath, enforceRelative) => {
332
379
  let depth = -1;
333
380
  let append = "";
334
381
  outputPath = outputPath.replace(/[\\/]$/, "");
@@ -340,8 +387,8 @@ exports.getUndoPath = (filename, outputPath, enforceRelative) => {
340
387
  const i = outputPath.lastIndexOf("/");
341
388
  const j = outputPath.lastIndexOf("\\");
342
389
  const pos = i < 0 ? j : j < 0 ? i : Math.max(i, j);
343
- if (pos < 0) return outputPath + "/";
344
- append = outputPath.slice(pos + 1) + "/" + append;
390
+ if (pos < 0) return `${outputPath}/`;
391
+ append = `${outputPath.slice(pos + 1)}/${append}`;
345
392
  outputPath = outputPath.slice(0, pos);
346
393
  }
347
394
  } else if (part !== ".") {
@@ -351,6 +398,6 @@ exports.getUndoPath = (filename, outputPath, enforceRelative) => {
351
398
  return depth > 0
352
399
  ? `${"../".repeat(depth)}${append}`
353
400
  : enforceRelative
354
- ? `./${append}`
355
- : append;
401
+ ? `./${append}`
402
+ : append;
356
403
  };
@@ -45,6 +45,10 @@ module.exports = {
45
45
  require("../dependencies/AMDRequireItemDependency"),
46
46
  "dependencies/CachedConstDependency": () =>
47
47
  require("../dependencies/CachedConstDependency"),
48
+ "dependencies/ExternalModuleDependency": () =>
49
+ require("../dependencies/ExternalModuleDependency"),
50
+ "dependencies/ExternalModuleInitFragment": () =>
51
+ require("../dependencies/ExternalModuleInitFragment"),
48
52
  "dependencies/CreateScriptUrlDependency": () =>
49
53
  require("../dependencies/CreateScriptUrlDependency"),
50
54
  "dependencies/CommonJsRequireContextDependency": () =>
@@ -67,6 +71,16 @@ module.exports = {
67
71
  require("../dependencies/ContextElementDependency"),
68
72
  "dependencies/CriticalDependencyWarning": () =>
69
73
  require("../dependencies/CriticalDependencyWarning"),
74
+ "dependencies/CssImportDependency": () =>
75
+ require("../dependencies/CssImportDependency"),
76
+ "dependencies/CssLocalIdentifierDependency": () =>
77
+ require("../dependencies/CssLocalIdentifierDependency"),
78
+ "dependencies/CssSelfLocalIdentifierDependency": () =>
79
+ require("../dependencies/CssSelfLocalIdentifierDependency"),
80
+ "dependencies/CssExportDependency": () =>
81
+ require("../dependencies/CssExportDependency"),
82
+ "dependencies/CssUrlDependency": () =>
83
+ require("../dependencies/CssUrlDependency"),
70
84
  "dependencies/DelegatedSourceDependency": () =>
71
85
  require("../dependencies/DelegatedSourceDependency"),
72
86
  "dependencies/DllEntryDependency": () =>
@@ -93,6 +107,8 @@ module.exports = {
93
107
  require("../dependencies/HarmonyImportSideEffectDependency"),
94
108
  "dependencies/HarmonyImportSpecifierDependency": () =>
95
109
  require("../dependencies/HarmonyImportSpecifierDependency"),
110
+ "dependencies/HarmonyEvaluatedImportSpecifierDependency": () =>
111
+ require("../dependencies/HarmonyEvaluatedImportSpecifierDependency"),
96
112
  "dependencies/ImportContextDependency": () =>
97
113
  require("../dependencies/ImportContextDependency"),
98
114
  "dependencies/ImportDependency": () =>
@@ -116,6 +132,8 @@ module.exports = {
116
132
  require("../dependencies/ImportMetaHotAcceptDependency"),
117
133
  "dependencies/ImportMetaHotDeclineDependency": () =>
118
134
  require("../dependencies/ImportMetaHotDeclineDependency"),
135
+ "dependencies/ImportMetaContextDependency": () =>
136
+ require("../dependencies/ImportMetaContextDependency"),
119
137
  "dependencies/ProvidedDependency": () =>
120
138
  require("../dependencies/ProvidedDependency"),
121
139
  "dependencies/PureExpressionDependency": () =>
@@ -175,6 +193,8 @@ module.exports = {
175
193
  ModuleParseError: () => require("../ModuleParseError"),
176
194
  ModuleWarning: () => require("../ModuleWarning"),
177
195
  NormalModule: () => require("../NormalModule"),
196
+ CssModule: () => require("../CssModule"),
197
+ RawDataUrlModule: () => require("../asset/RawDataUrlModule"),
178
198
  RawModule: () => require("../RawModule"),
179
199
  "sharing/ConsumeSharedModule": () =>
180
200
  require("../sharing/ConsumeSharedModule"),
@@ -190,6 +210,8 @@ module.exports = {
190
210
  "util/LazySet": () => require("../util/LazySet"),
191
211
  UnhandledSchemeError: () => require("../UnhandledSchemeError"),
192
212
  NodeStuffInWebError: () => require("../NodeStuffInWebError"),
213
+ EnvironmentNotSupportAsyncWarning: () =>
214
+ require("../EnvironmentNotSupportAsyncWarning"),
193
215
  WebpackError: () => require("../WebpackError"),
194
216
 
195
217
  "util/registerExternalSerializer": () => {
@@ -6,6 +6,8 @@
6
6
 
7
7
  const { register } = require("./serialization");
8
8
 
9
+ /** @typedef {import("../serialization/ObjectMiddleware").Constructor} Constructor */
10
+
9
11
  class ClassSerializer {
10
12
  constructor(Constructor) {
11
13
  this.Constructor = Constructor;
@@ -25,6 +27,11 @@ class ClassSerializer {
25
27
  }
26
28
  }
27
29
 
30
+ /**
31
+ * @param {Constructor} Constructor the constructor
32
+ * @param {string} request the request which will be required when deserializing
33
+ * @param {string | null} [name] the name to make multiple serializer unique when sharing a request
34
+ */
28
35
  module.exports = (Constructor, request, name = null) => {
29
36
  register(Constructor, request, name, new ClassSerializer(Constructor));
30
37
  };
@@ -13,19 +13,19 @@
13
13
  */
14
14
  const memoize = fn => {
15
15
  let cache = false;
16
- /** @type {T} */
17
- let result = undefined;
16
+ /** @type {T | undefined} */
17
+ let result;
18
18
  return () => {
19
19
  if (cache) {
20
- return result;
21
- } else {
22
- result = fn();
23
- cache = true;
24
- // Allow to clean up memory for fn
25
- // and all dependent resources
26
- fn = undefined;
27
- return result;
20
+ return /** @type {T} */ (result);
28
21
  }
22
+
23
+ result = fn();
24
+ cache = true;
25
+ // Allow to clean up memory for fn
26
+ // and all dependent resources
27
+ fn = undefined;
28
+ return /** @type {T} */ (result);
29
29
  };
30
30
  };
31
31
 
@@ -0,0 +1,76 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /** @typedef {import("eslint-scope").Reference} Reference */
9
+ /** @typedef {import("eslint-scope").Variable} Variable */
10
+ /** @typedef {import("../javascript/JavascriptParser").AnyNode} AnyNode */
11
+ /** @typedef {import("../javascript/JavascriptParser").Program} Program */
12
+
13
+ /**
14
+ * @param {Variable} variable variable
15
+ * @returns {Reference[]} references
16
+ */
17
+ const getAllReferences = variable => {
18
+ let set = variable.references;
19
+ // Look for inner scope variables too (like in class Foo { t() { Foo } })
20
+ const identifiers = new Set(variable.identifiers);
21
+ for (const scope of variable.scope.childScopes) {
22
+ for (const innerVar of scope.variables) {
23
+ if (innerVar.identifiers.some(id => identifiers.has(id))) {
24
+ set = set.concat(innerVar.references);
25
+ break;
26
+ }
27
+ }
28
+ }
29
+ return set;
30
+ };
31
+
32
+ /**
33
+ * @param {Program | Program[]} ast ast
34
+ * @param {AnyNode} node node
35
+ * @returns {undefined | AnyNode[]} result
36
+ */
37
+ const getPathInAst = (ast, node) => {
38
+ if (ast === node) {
39
+ return [];
40
+ }
41
+
42
+ const nr = node.range;
43
+
44
+ const enterNode = n => {
45
+ if (!n) return;
46
+ const r = n.range;
47
+ if (r && r[0] <= nr[0] && r[1] >= nr[1]) {
48
+ const path = getPathInAst(n, node);
49
+ if (path) {
50
+ path.push(n);
51
+ return path;
52
+ }
53
+ }
54
+ };
55
+
56
+ if (Array.isArray(ast)) {
57
+ for (let i = 0; i < ast.length; i++) {
58
+ const enterResult = enterNode(ast[i]);
59
+ if (enterResult !== undefined) return enterResult;
60
+ }
61
+ } else if (ast && typeof ast === "object") {
62
+ const keys = Object.keys(ast);
63
+ for (let i = 0; i < keys.length; i++) {
64
+ const value = ast[keys[i]];
65
+ if (Array.isArray(value)) {
66
+ const pathResult = getPathInAst(value, node);
67
+ if (pathResult !== undefined) return pathResult;
68
+ } else if (value && typeof value === "object") {
69
+ const enterResult = enterNode(value);
70
+ if (enterResult !== undefined) return enterResult;
71
+ }
72
+ }
73
+ }
74
+ };
75
+
76
+ module.exports = { getAllReferences, getPathInAst };
@@ -0,0 +1,22 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Ivan Kopeykin @vankop
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const A_CODE = "a".charCodeAt(0);
9
+
10
+ /**
11
+ * @param {string} hash hash
12
+ * @param {number} hashLength hash length
13
+ * @returns {string} returns hash that has at least one non numeric char
14
+ */
15
+ module.exports = (hash, hashLength) => {
16
+ if (hashLength < 1) return "";
17
+ const slice = hash.slice(0, hashLength);
18
+ if (/[^\d]/.test(slice)) return slice;
19
+ return `${String.fromCharCode(
20
+ A_CODE + (Number.parseInt(hash[0], 10) % 6)
21
+ )}${slice.slice(1)}`;
22
+ };