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
@@ -0,0 +1,146 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { WebpackError } = require("..");
9
+ const { getUsedModuleIdsAndModules } = require("./IdHelpers");
10
+
11
+ /** @typedef {import("../Compiler")} Compiler */
12
+ /** @typedef {import("../Module")} Module */
13
+ /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
14
+
15
+ const plugin = "SyncModuleIdsPlugin";
16
+
17
+ class SyncModuleIdsPlugin {
18
+ /**
19
+ * @param {object} options options
20
+ * @param {string} options.path path to file
21
+ * @param {string=} options.context context for module names
22
+ * @param {function(Module): boolean} options.test selector for modules
23
+ * @param {"read" | "create" | "merge" | "update"=} options.mode operation mode (defaults to merge)
24
+ */
25
+ constructor({ path, context, test, mode }) {
26
+ this._path = path;
27
+ this._context = context;
28
+ this._test = test || (() => true);
29
+ const readAndWrite = !mode || mode === "merge" || mode === "update";
30
+ this._read = readAndWrite || mode === "read";
31
+ this._write = readAndWrite || mode === "create";
32
+ this._prune = mode === "update";
33
+ }
34
+
35
+ /**
36
+ * Apply the plugin
37
+ * @param {Compiler} compiler the compiler instance
38
+ * @returns {void}
39
+ */
40
+ apply(compiler) {
41
+ /** @type {Map<string, string | number>} */
42
+ let data;
43
+ let dataChanged = false;
44
+ if (this._read) {
45
+ compiler.hooks.readRecords.tapAsync(plugin, callback => {
46
+ const fs =
47
+ /** @type {IntermediateFileSystem} */
48
+ (compiler.intermediateFileSystem);
49
+ fs.readFile(this._path, (err, buffer) => {
50
+ if (err) {
51
+ if (err.code !== "ENOENT") {
52
+ return callback(err);
53
+ }
54
+ return callback();
55
+ }
56
+ const json = JSON.parse(/** @type {Buffer} */ (buffer).toString());
57
+ data = new Map();
58
+ for (const key of Object.keys(json)) {
59
+ data.set(key, json[key]);
60
+ }
61
+ dataChanged = false;
62
+ return callback();
63
+ });
64
+ });
65
+ }
66
+ if (this._write) {
67
+ compiler.hooks.emitRecords.tapAsync(plugin, callback => {
68
+ if (!data || !dataChanged) return callback();
69
+ /** @type {{[key: string]: string | number}} */
70
+ const json = {};
71
+ const sorted = Array.from(data).sort(([a], [b]) => (a < b ? -1 : 1));
72
+ for (const [key, value] of sorted) {
73
+ json[key] = value;
74
+ }
75
+ const fs =
76
+ /** @type {IntermediateFileSystem} */
77
+ (compiler.intermediateFileSystem);
78
+ fs.writeFile(this._path, JSON.stringify(json), callback);
79
+ });
80
+ }
81
+ compiler.hooks.thisCompilation.tap(plugin, compilation => {
82
+ const associatedObjectForCache = compiler.root;
83
+ const context = this._context || compiler.context;
84
+ if (this._read) {
85
+ compilation.hooks.reviveModules.tap(plugin, (_1, _2) => {
86
+ if (!data) return;
87
+ const { chunkGraph } = compilation;
88
+ const [usedIds, modules] = getUsedModuleIdsAndModules(
89
+ compilation,
90
+ this._test
91
+ );
92
+ for (const module of modules) {
93
+ const name = module.libIdent({
94
+ context,
95
+ associatedObjectForCache
96
+ });
97
+ if (!name) continue;
98
+ const id = data.get(name);
99
+ const idAsString = `${id}`;
100
+ if (usedIds.has(idAsString)) {
101
+ const err = new WebpackError(
102
+ `SyncModuleIdsPlugin: Unable to restore id '${id}' from '${this._path}' as it's already used.`
103
+ );
104
+ err.module = module;
105
+ compilation.errors.push(err);
106
+ }
107
+ chunkGraph.setModuleId(module, /** @type {string | number} */ (id));
108
+ usedIds.add(idAsString);
109
+ }
110
+ });
111
+ }
112
+ if (this._write) {
113
+ compilation.hooks.recordModules.tap(plugin, modules => {
114
+ const { chunkGraph } = compilation;
115
+ let oldData = data;
116
+ if (!oldData) {
117
+ oldData = data = new Map();
118
+ } else if (this._prune) {
119
+ data = new Map();
120
+ }
121
+ for (const module of modules) {
122
+ if (this._test(module)) {
123
+ const name = module.libIdent({
124
+ context,
125
+ associatedObjectForCache
126
+ });
127
+ if (!name) continue;
128
+ const id = chunkGraph.getModuleId(module);
129
+ if (id === null) continue;
130
+ const oldId = oldData.get(name);
131
+ if (oldId !== id) {
132
+ dataChanged = true;
133
+ } else if (data === oldData) {
134
+ continue;
135
+ }
136
+ data.set(name, id);
137
+ }
138
+ }
139
+ if (data.size !== oldData.size) dataChanged = true;
140
+ });
141
+ }
142
+ });
143
+ }
144
+ }
145
+
146
+ module.exports = SyncModuleIdsPlugin;
package/lib/index.js CHANGED
@@ -11,7 +11,14 @@ const memoize = require("./util/memoize");
11
11
  /** @typedef {import("../declarations/WebpackOptions").Entry} Entry */
12
12
  /** @typedef {import("../declarations/WebpackOptions").EntryNormalized} EntryNormalized */
13
13
  /** @typedef {import("../declarations/WebpackOptions").EntryObject} EntryObject */
14
+ /** @typedef {import("../declarations/WebpackOptions").ExternalItemFunctionData} ExternalItemFunctionData */
15
+ /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectKnown} ExternalItemObjectKnown */
16
+ /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectUnknown} ExternalItemObjectUnknown */
17
+ /** @typedef {import("../declarations/WebpackOptions").ExternalItemValue} ExternalItemValue */
18
+ /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
19
+ /** @typedef {import("../declarations/WebpackOptions").FileCacheOptions} FileCacheOptions */
14
20
  /** @typedef {import("../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
21
+ /** @typedef {import("../declarations/WebpackOptions").MemoryCacheOptions} MemoryCacheOptions */
15
22
  /** @typedef {import("../declarations/WebpackOptions").ModuleOptions} ModuleOptions */
16
23
  /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
17
24
  /** @typedef {import("../declarations/WebpackOptions").RuleSetCondition} RuleSetCondition */
@@ -19,15 +26,26 @@ const memoize = require("./util/memoize");
19
26
  /** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
20
27
  /** @typedef {import("../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
21
28
  /** @typedef {import("../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
29
+ /** @typedef {import("../declarations/WebpackOptions").StatsOptions} StatsOptions */
22
30
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptions} Configuration */
23
31
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptionsNormalized */
24
32
  /** @typedef {import("../declarations/WebpackOptions").WebpackPluginFunction} WebpackPluginFunction */
25
33
  /** @typedef {import("../declarations/WebpackOptions").WebpackPluginInstance} WebpackPluginInstance */
34
+ /** @typedef {import("./ChunkGroup")} ChunkGroup */
26
35
  /** @typedef {import("./Compilation").Asset} Asset */
27
36
  /** @typedef {import("./Compilation").AssetInfo} AssetInfo */
37
+ /** @typedef {import("./Compilation").EntryOptions} EntryOptions */
38
+ /** @typedef {import("./Compilation").PathData} PathData */
39
+ /** @typedef {import("./Compiler").AssetEmittedInfo} AssetEmittedInfo */
40
+ /** @typedef {import("./MultiCompiler").MultiCompilerOptions} MultiCompilerOptions */
28
41
  /** @typedef {import("./MultiStats")} MultiStats */
42
+ /** @typedef {import("./NormalModuleFactory").ResolveData} ResolveData */
29
43
  /** @typedef {import("./Parser").ParserState} ParserState */
44
+ /** @typedef {import("./ResolverFactory").ResolvePluginInstance} ResolvePluginInstance */
45
+ /** @typedef {import("./ResolverFactory").Resolver} Resolver */
30
46
  /** @typedef {import("./Watching")} Watching */
47
+ /** @typedef {import("./cli").Argument} Argument */
48
+ /** @typedef {import("./cli").Problem} Problem */
31
49
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsAsset} StatsAsset */
32
50
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunk} StatsChunk */
33
51
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsChunkGroup} StatsChunkGroup */
@@ -42,6 +60,8 @@ const memoize = require("./util/memoize");
42
60
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceDependency} StatsModuleTraceDependency */
43
61
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsModuleTraceItem} StatsModuleTraceItem */
44
62
  /** @typedef {import("./stats/DefaultStatsFactoryPlugin").StatsProfile} StatsProfile */
63
+ /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
64
+ /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
45
65
 
46
66
  /**
47
67
  * @template {Function} T
@@ -50,11 +70,7 @@ const memoize = require("./util/memoize");
50
70
  */
51
71
  const lazyFunction = factory => {
52
72
  const fac = memoize(factory);
53
- const f = /** @type {any} */ (
54
- (...args) => {
55
- return fac()(...args);
56
- }
57
- );
73
+ const f = /** @type {any} */ ((...args) => fac()(...args));
58
74
  return /** @type {T} */ (f);
59
75
  };
60
76
 
@@ -203,6 +219,9 @@ module.exports = mergeExports(fn, {
203
219
  get HotModuleReplacementPlugin() {
204
220
  return require("./HotModuleReplacementPlugin");
205
221
  },
222
+ get InitFragment() {
223
+ return require("./InitFragment");
224
+ },
206
225
  get IgnorePlugin() {
207
226
  return require("./IgnorePlugin");
208
227
  },
@@ -253,9 +272,15 @@ module.exports = mergeExports(fn, {
253
272
  get MultiCompiler() {
254
273
  return require("./MultiCompiler");
255
274
  },
275
+ get OptimizationStages() {
276
+ return require("./OptimizationStages");
277
+ },
256
278
  get Parser() {
257
279
  return require("./Parser");
258
280
  },
281
+ get PlatformPlugin() {
282
+ return require("./PlatformPlugin");
283
+ },
259
284
  get PrefetchPlugin() {
260
285
  return require("./PrefetchPlugin");
261
286
  },
@@ -333,6 +358,9 @@ module.exports = mergeExports(fn, {
333
358
  get ModuleDependency() {
334
359
  return require("./dependencies/ModuleDependency");
335
360
  },
361
+ get HarmonyImportDependency() {
362
+ return require("./dependencies/HarmonyImportDependency");
363
+ },
336
364
  get ConstDependency() {
337
365
  return require("./dependencies/ConstDependency");
338
366
  },
@@ -483,6 +511,9 @@ module.exports = mergeExports(fn, {
483
511
  wasm: {
484
512
  get AsyncWebAssemblyModulesPlugin() {
485
513
  return require("./wasm-async/AsyncWebAssemblyModulesPlugin");
514
+ },
515
+ get EnableWasmLoadingPlugin() {
516
+ return require("./wasm/EnableWasmLoadingPlugin");
486
517
  }
487
518
  },
488
519
 
@@ -549,6 +580,9 @@ module.exports = mergeExports(fn, {
549
580
  },
550
581
  get LazySet() {
551
582
  return require("./util/LazySet");
583
+ },
584
+ get compileBooleanMatcher() {
585
+ return require("./util/compileBooleanMatcher");
552
586
  }
553
587
  },
554
588
 
@@ -561,6 +595,11 @@ module.exports = mergeExports(fn, {
561
595
  get HttpUriPlugin() {
562
596
  return require("./schemes/HttpUriPlugin");
563
597
  }
598
+ },
599
+ ids: {
600
+ get SyncModuleIdsPlugin() {
601
+ return require("./ids/SyncModuleIdsPlugin");
602
+ }
564
603
  }
565
604
  }
566
605
  });
@@ -33,6 +33,7 @@ class ArrayPushCallbackChunkFormatPlugin {
33
33
  if (chunk.hasRuntime()) return;
34
34
  if (chunkGraph.getNumberOfEntryModules(chunk) > 0) {
35
35
  set.add(RuntimeGlobals.onChunksLoaded);
36
+ set.add(RuntimeGlobals.exports);
36
37
  set.add(RuntimeGlobals.require);
37
38
  }
38
39
  set.add(RuntimeGlobals.chunkCallback);
@@ -45,7 +46,7 @@ class ArrayPushCallbackChunkFormatPlugin {
45
46
  const { chunk, chunkGraph, runtimeTemplate } = renderContext;
46
47
  const hotUpdateChunk =
47
48
  chunk instanceof HotUpdateChunk ? chunk : null;
48
- const globalObject = runtimeTemplate.outputOptions.globalObject;
49
+ const globalObject = runtimeTemplate.globalObject;
49
50
  const source = new ConcatSource();
50
51
  const runtimeModules =
51
52
  chunkGraph.getChunkRuntimeModulesInOrder(chunk);
@@ -83,10 +84,11 @@ class ArrayPushCallbackChunkFormatPlugin {
83
84
  );
84
85
  if (runtimeModules.length > 0 || entries.length > 0) {
85
86
  const runtime = new ConcatSource(
86
- (runtimeTemplate.supportsArrowFunction()
87
- ? "__webpack_require__ =>"
88
- : "function(__webpack_require__)") +
89
- " { // webpackRuntimeModules\n"
87
+ `${
88
+ runtimeTemplate.supportsArrowFunction()
89
+ ? `${RuntimeGlobals.require} =>`
90
+ : `function(${RuntimeGlobals.require})`
91
+ } { // webpackRuntimeModules\n`
90
92
  );
91
93
  if (runtimeModules.length > 0) {
92
94
  runtime.add(
@@ -121,7 +123,7 @@ class ArrayPushCallbackChunkFormatPlugin {
121
123
  .getChunkRuntimeRequirements(chunk)
122
124
  .has(RuntimeGlobals.returnExportsFromRuntime)
123
125
  ) {
124
- runtime.add("return __webpack_exports__;\n");
126
+ runtime.add(`return ${RuntimeGlobals.exports};\n`);
125
127
  }
126
128
  }
127
129
  runtime.add("}\n");
@@ -138,7 +140,7 @@ class ArrayPushCallbackChunkFormatPlugin {
138
140
  (chunk, hash, { chunkGraph, runtimeTemplate }) => {
139
141
  if (chunk.hasRuntime()) return;
140
142
  hash.update(
141
- `ArrayPushCallbackChunkFormatPlugin1${runtimeTemplate.outputOptions.chunkLoadingGlobal}${runtimeTemplate.outputOptions.hotUpdateGlobal}${runtimeTemplate.outputOptions.globalObject}`
143
+ `ArrayPushCallbackChunkFormatPlugin1${runtimeTemplate.outputOptions.chunkLoadingGlobal}${runtimeTemplate.outputOptions.hotUpdateGlobal}${runtimeTemplate.globalObject}`
142
144
  );
143
145
  const entries = Array.from(
144
146
  chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
@@ -5,7 +5,8 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("estree").Node} EsTreeNode */
8
+ /** @typedef {import("estree").Node} Node */
9
+ /** @typedef {import("./JavascriptParser").Range} Range */
9
10
  /** @typedef {import("./JavascriptParser").VariableInfoInterface} VariableInfoInterface */
10
11
 
11
12
  const TypeUnknown = 0;
@@ -26,7 +27,7 @@ const TypeBigInt = 13;
26
27
  class BasicEvaluatedExpression {
27
28
  constructor() {
28
29
  this.type = TypeUnknown;
29
- /** @type {[number, number]} */
30
+ /** @type {Range | undefined} */
30
31
  this.range = undefined;
31
32
  /** @type {boolean} */
32
33
  this.falsy = false;
@@ -56,18 +57,23 @@ class BasicEvaluatedExpression {
56
57
  this.items = undefined;
57
58
  /** @type {BasicEvaluatedExpression[] | undefined} */
58
59
  this.options = undefined;
59
- /** @type {BasicEvaluatedExpression | undefined} */
60
+ /** @type {BasicEvaluatedExpression | undefined | null} */
60
61
  this.prefix = undefined;
61
- /** @type {BasicEvaluatedExpression | undefined} */
62
+ /** @type {BasicEvaluatedExpression | undefined | null} */
62
63
  this.postfix = undefined;
64
+ /** @type {BasicEvaluatedExpression[] | undefined} */
63
65
  this.wrappedInnerExpressions = undefined;
64
- /** @type {string | undefined} */
66
+ /** @type {string | VariableInfoInterface | undefined} */
65
67
  this.identifier = undefined;
66
- /** @type {VariableInfoInterface} */
68
+ /** @type {string | VariableInfoInterface | undefined} */
67
69
  this.rootInfo = undefined;
68
- /** @type {() => string[]} */
70
+ /** @type {(() => string[]) | undefined} */
69
71
  this.getMembers = undefined;
70
- /** @type {EsTreeNode} */
72
+ /** @type {(() => boolean[]) | undefined} */
73
+ this.getMembersOptionals = undefined;
74
+ /** @type {(() => Range[]) | undefined} */
75
+ this.getMemberRanges = undefined;
76
+ /** @type {Node | undefined} */
71
77
  this.expression = undefined;
72
78
  }
73
79
 
@@ -178,7 +184,7 @@ class BasicEvaluatedExpression {
178
184
  asCompileTimeValue() {
179
185
  switch (this.type) {
180
186
  case TypeUndefined:
181
- return undefined;
187
+ return;
182
188
  case TypeNull:
183
189
  return null;
184
190
  case TypeString:
@@ -220,6 +226,10 @@ class BasicEvaluatedExpression {
220
226
  return this.sideEffects;
221
227
  }
222
228
 
229
+ /**
230
+ * Creates a boolean representation of this evaluated expression.
231
+ * @returns {boolean | undefined} true: truthy, false: falsy, undefined: unknown
232
+ */
223
233
  asBool() {
224
234
  if (this.truthy) return true;
225
235
  if (this.falsy || this.nullish) return false;
@@ -242,9 +252,12 @@ class BasicEvaluatedExpression {
242
252
  const str = this.asString();
243
253
  if (typeof str === "string") return str !== "";
244
254
  }
245
- return undefined;
246
255
  }
247
256
 
257
+ /**
258
+ * Creates a nullish coalescing representation of this evaluated expression.
259
+ * @returns {boolean | undefined} true: nullish, false: not nullish, undefined: unknown
260
+ */
248
261
  asNullish() {
249
262
  const nullish = this.isNullish();
250
263
 
@@ -261,10 +274,12 @@ class BasicEvaluatedExpression {
261
274
  if (this.isConstArray()) return false;
262
275
  if (this.isTemplateString()) return false;
263
276
  if (this.isRegExp()) return false;
264
-
265
- return undefined;
266
277
  }
267
278
 
279
+ /**
280
+ * Creates a string representation of this evaluated expression.
281
+ * @returns {string | undefined} the string representation or undefined if not possible
282
+ */
268
283
  asString() {
269
284
  if (this.isBoolean()) return `${this.bool}`;
270
285
  if (this.isNull()) return "null";
@@ -274,10 +289,12 @@ class BasicEvaluatedExpression {
274
289
  if (this.isBigInt()) return `${this.bigint}`;
275
290
  if (this.isRegExp()) return `${this.regExp}`;
276
291
  if (this.isArray()) {
277
- let array = [];
278
- for (const item of this.items) {
292
+ const array = [];
293
+ for (const item of /** @type {BasicEvaluatedExpression[]} */ (
294
+ this.items
295
+ )) {
279
296
  const itemStr = item.asString();
280
- if (itemStr === undefined) return undefined;
297
+ if (itemStr === undefined) return;
281
298
  array.push(itemStr);
282
299
  }
283
300
  return `${array}`;
@@ -285,16 +302,21 @@ class BasicEvaluatedExpression {
285
302
  if (this.isConstArray()) return `${this.array}`;
286
303
  if (this.isTemplateString()) {
287
304
  let str = "";
288
- for (const part of this.parts) {
305
+ for (const part of /** @type {BasicEvaluatedExpression[]} */ (
306
+ this.parts
307
+ )) {
289
308
  const partStr = part.asString();
290
- if (partStr === undefined) return undefined;
309
+ if (partStr === undefined) return;
291
310
  str += partStr;
292
311
  }
293
312
  return str;
294
313
  }
295
- return undefined;
296
314
  }
297
315
 
316
+ /**
317
+ * @param {string} string value
318
+ * @returns {BasicEvaluatedExpression} basic evaluated expression
319
+ */
298
320
  setString(string) {
299
321
  this.type = TypeString;
300
322
  this.string = string;
@@ -314,6 +336,11 @@ class BasicEvaluatedExpression {
314
336
  return this;
315
337
  }
316
338
 
339
+ /**
340
+ * Set's the value of this expression to a number
341
+ * @param {number} number number to set
342
+ * @returns {this} this
343
+ */
317
344
  setNumber(number) {
318
345
  this.type = TypeNumber;
319
346
  this.number = number;
@@ -321,6 +348,11 @@ class BasicEvaluatedExpression {
321
348
  return this;
322
349
  }
323
350
 
351
+ /**
352
+ * Set's the value of this expression to a BigInt
353
+ * @param {bigint} bigint bigint to set
354
+ * @returns {this} this
355
+ */
324
356
  setBigInt(bigint) {
325
357
  this.type = TypeBigInt;
326
358
  this.bigint = bigint;
@@ -328,6 +360,11 @@ class BasicEvaluatedExpression {
328
360
  return this;
329
361
  }
330
362
 
363
+ /**
364
+ * Set's the value of this expression to a boolean
365
+ * @param {boolean} bool boolean to set
366
+ * @returns {this} this
367
+ */
331
368
  setBoolean(bool) {
332
369
  this.type = TypeBoolean;
333
370
  this.bool = bool;
@@ -335,6 +372,11 @@ class BasicEvaluatedExpression {
335
372
  return this;
336
373
  }
337
374
 
375
+ /**
376
+ * Set's the value of this expression to a regular expression
377
+ * @param {RegExp} regExp regular expression to set
378
+ * @returns {this} this
379
+ */
338
380
  setRegExp(regExp) {
339
381
  this.type = TypeRegExp;
340
382
  this.regExp = regExp;
@@ -342,15 +384,39 @@ class BasicEvaluatedExpression {
342
384
  return this;
343
385
  }
344
386
 
345
- setIdentifier(identifier, rootInfo, getMembers) {
387
+ /**
388
+ * Set's the value of this expression to a particular identifier and its members.
389
+ * @param {string | VariableInfoInterface} identifier identifier to set
390
+ * @param {string | VariableInfoInterface} rootInfo root info
391
+ * @param {() => string[]} getMembers members
392
+ * @param {() => boolean[]=} getMembersOptionals optional members
393
+ * @param {() => Range[]=} getMemberRanges ranges of progressively increasing sub-expressions
394
+ * @returns {this} this
395
+ */
396
+ setIdentifier(
397
+ identifier,
398
+ rootInfo,
399
+ getMembers,
400
+ getMembersOptionals,
401
+ getMemberRanges
402
+ ) {
346
403
  this.type = TypeIdentifier;
347
404
  this.identifier = identifier;
348
405
  this.rootInfo = rootInfo;
349
406
  this.getMembers = getMembers;
407
+ this.getMembersOptionals = getMembersOptionals;
408
+ this.getMemberRanges = getMemberRanges;
350
409
  this.sideEffects = true;
351
410
  return this;
352
411
  }
353
412
 
413
+ /**
414
+ * Wraps an array of expressions with a prefix and postfix expression.
415
+ * @param {BasicEvaluatedExpression | null | undefined} prefix Expression to be added before the innerExpressions
416
+ * @param {BasicEvaluatedExpression | null | undefined} postfix Expression to be added after the innerExpressions
417
+ * @param {BasicEvaluatedExpression[] | undefined} innerExpressions Expressions to be wrapped
418
+ * @returns {this} this
419
+ */
354
420
  setWrapped(prefix, postfix, innerExpressions) {
355
421
  this.type = TypeWrapped;
356
422
  this.prefix = prefix;
@@ -360,6 +426,11 @@ class BasicEvaluatedExpression {
360
426
  return this;
361
427
  }
362
428
 
429
+ /**
430
+ * Stores the options of a conditional expression.
431
+ * @param {BasicEvaluatedExpression[]} options optional (consequent/alternate) expressions to be set
432
+ * @returns {this} this
433
+ */
363
434
  setOptions(options) {
364
435
  this.type = TypeConditional;
365
436
  this.options = options;
@@ -367,6 +438,11 @@ class BasicEvaluatedExpression {
367
438
  return this;
368
439
  }
369
440
 
441
+ /**
442
+ * Adds options to a conditional expression.
443
+ * @param {BasicEvaluatedExpression[]} options optional (consequent/alternate) expressions to be added
444
+ * @returns {this} this
445
+ */
370
446
  addOptions(options) {
371
447
  if (!this.options) {
372
448
  this.type = TypeConditional;
@@ -379,6 +455,11 @@ class BasicEvaluatedExpression {
379
455
  return this;
380
456
  }
381
457
 
458
+ /**
459
+ * Set's the value of this expression to an array of expressions.
460
+ * @param {BasicEvaluatedExpression[]} items expressions to set
461
+ * @returns {this} this
462
+ */
382
463
  setItems(items) {
383
464
  this.type = TypeArray;
384
465
  this.items = items;
@@ -386,6 +467,11 @@ class BasicEvaluatedExpression {
386
467
  return this;
387
468
  }
388
469
 
470
+ /**
471
+ * Set's the value of this expression to an array of strings.
472
+ * @param {string[]} array array to set
473
+ * @returns {this} this
474
+ */
389
475
  setArray(array) {
390
476
  this.type = TypeConstArray;
391
477
  this.array = array;
@@ -393,6 +479,14 @@ class BasicEvaluatedExpression {
393
479
  return this;
394
480
  }
395
481
 
482
+ /**
483
+ * Set's the value of this expression to a processed/unprocessed template string. Used
484
+ * for evaluating TemplateLiteral expressions in the JavaScript Parser.
485
+ * @param {BasicEvaluatedExpression[]} quasis template string quasis
486
+ * @param {BasicEvaluatedExpression[]} parts template string parts
487
+ * @param {"cooked" | "raw"} kind template string kind
488
+ * @returns {this} this
489
+ */
396
490
  setTemplateString(quasis, parts, kind) {
397
491
  this.type = TypeTemplateString;
398
492
  this.quasis = quasis;
@@ -415,6 +509,11 @@ class BasicEvaluatedExpression {
415
509
  return this;
416
510
  }
417
511
 
512
+ /**
513
+ * Set's the value of the expression to nullish.
514
+ * @param {boolean} value true, if the expression is nullish
515
+ * @returns {this} this
516
+ */
418
517
  setNullish(value) {
419
518
  this.nullish = value;
420
519
 
@@ -423,16 +522,31 @@ class BasicEvaluatedExpression {
423
522
  return this;
424
523
  }
425
524
 
525
+ /**
526
+ * Set's the range for the expression.
527
+ * @param {[number, number]} range range to set
528
+ * @returns {this} this
529
+ */
426
530
  setRange(range) {
427
531
  this.range = range;
428
532
  return this;
429
533
  }
430
534
 
535
+ /**
536
+ * Set whether or not the expression has side effects.
537
+ * @param {boolean} sideEffects true, if the expression has side effects
538
+ * @returns {this} this
539
+ */
431
540
  setSideEffects(sideEffects = true) {
432
541
  this.sideEffects = sideEffects;
433
542
  return this;
434
543
  }
435
544
 
545
+ /**
546
+ * Set the expression node for the expression.
547
+ * @param {Node | undefined} expression expression
548
+ * @returns {this} this
549
+ */
436
550
  setExpression(expression) {
437
551
  this.expression = expression;
438
552
  return this;
@@ -0,0 +1,33 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Tobias Koppers @sokra
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const Entrypoint = require("../Entrypoint");
9
+
10
+ /** @typedef {import("../Chunk")} Chunk */
11
+
12
+ /**
13
+ * @param {Entrypoint} entrypoint a chunk group
14
+ * @param {(Chunk | null)=} excludedChunk1 current chunk which is excluded
15
+ * @param {(Chunk | null)=} excludedChunk2 runtime chunk which is excluded
16
+ * @returns {Set<Chunk>} chunks
17
+ */
18
+ const getAllChunks = (entrypoint, excludedChunk1, excludedChunk2) => {
19
+ const queue = new Set([entrypoint]);
20
+ const chunks = new Set();
21
+ for (const entrypoint of queue) {
22
+ for (const chunk of entrypoint.chunks) {
23
+ if (chunk === excludedChunk1) continue;
24
+ if (chunk === excludedChunk2) continue;
25
+ chunks.add(chunk);
26
+ }
27
+ for (const parent of entrypoint.parentsIterable) {
28
+ if (parent instanceof Entrypoint) queue.add(parent);
29
+ }
30
+ }
31
+ return chunks;
32
+ };
33
+ module.exports.getAllChunks = getAllChunks;