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
@@ -5,15 +5,18 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const util = require("util");
8
9
  const Watchpack = require("watchpack");
9
10
 
10
11
  /** @typedef {import("../../declarations/WebpackOptions").WatchOptions} WatchOptions */
11
12
  /** @typedef {import("../FileSystemInfo").FileSystemInfoEntry} FileSystemInfoEntry */
12
- /** @typedef {import("../util/fs").WatchFileSystem} WatchFileSystem */
13
+ /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
13
14
  /** @typedef {import("../util/fs").WatchMethod} WatchMethod */
14
- /** @typedef {import("../util/fs").Watcher} Watcher */
15
15
 
16
16
  class NodeWatchFileSystem {
17
+ /**
18
+ * @param {InputFileSystem} inputFileSystem input filesystem
19
+ */
17
20
  constructor(inputFileSystem) {
18
21
  this.inputFileSystem = inputFileSystem;
19
22
  this.watcherOptions = {
@@ -22,16 +25,7 @@ class NodeWatchFileSystem {
22
25
  this.watcher = new Watchpack(this.watcherOptions);
23
26
  }
24
27
 
25
- /**
26
- * @param {Iterable<string>} files watched files
27
- * @param {Iterable<string>} directories watched directories
28
- * @param {Iterable<string>} missing watched exitance entries
29
- * @param {number} startTime timestamp of start time
30
- * @param {WatchOptions} options options object
31
- * @param {function(Error=, Map<string, FileSystemInfoEntry>, Map<string, FileSystemInfoEntry>, Set<string>, Set<string>): void} callback aggregated callback
32
- * @param {function(string, number): void} callbackUndelayed callback when the first change was detected
33
- * @returns {Watcher} a watcher
34
- */
28
+ /** @type {WatchMethod} */
35
29
  watch(
36
30
  files,
37
31
  directories,
@@ -68,19 +62,47 @@ class NodeWatchFileSystem {
68
62
  if (callbackUndelayed) {
69
63
  this.watcher.once("change", callbackUndelayed);
70
64
  }
71
- this.watcher.once("aggregated", (changes, removals) => {
72
- if (this.inputFileSystem && this.inputFileSystem.purge) {
65
+
66
+ const fetchTimeInfo = () => {
67
+ const fileTimeInfoEntries = new Map();
68
+ const contextTimeInfoEntries = new Map();
69
+ if (this.watcher) {
70
+ this.watcher.collectTimeInfoEntries(
71
+ fileTimeInfoEntries,
72
+ contextTimeInfoEntries
73
+ );
74
+ }
75
+ return { fileTimeInfoEntries, contextTimeInfoEntries };
76
+ };
77
+ this.watcher.once(
78
+ "aggregated",
79
+ /**
80
+ * @param {Set<string>} changes changes
81
+ * @param {Set<string>} removals removals
82
+ */
83
+ (changes, removals) => {
84
+ // pause emitting events (avoids clearing aggregated changes and removals on timeout)
85
+ this.watcher.pause();
86
+
73
87
  const fs = this.inputFileSystem;
74
- for (const item of changes) {
75
- fs.purge(item);
76
- }
77
- for (const item of removals) {
78
- fs.purge(item);
88
+ if (fs && fs.purge) {
89
+ for (const item of changes) {
90
+ fs.purge(item);
91
+ }
92
+ for (const item of removals) {
93
+ fs.purge(item);
94
+ }
79
95
  }
96
+ const { fileTimeInfoEntries, contextTimeInfoEntries } = fetchTimeInfo();
97
+ callback(
98
+ null,
99
+ fileTimeInfoEntries,
100
+ contextTimeInfoEntries,
101
+ changes,
102
+ removals
103
+ );
80
104
  }
81
- const times = this.watcher.getTimeInfoEntries();
82
- callback(null, times, times, changes, removals);
83
- });
105
+ );
84
106
 
85
107
  this.watcher.watch({ files, directories, missing, startTime });
86
108
 
@@ -99,39 +121,67 @@ class NodeWatchFileSystem {
99
121
  this.watcher.pause();
100
122
  }
101
123
  },
102
- getAggregatedRemovals: () => {
103
- const items = this.watcher && this.watcher.aggregatedRemovals;
104
- if (items && this.inputFileSystem && this.inputFileSystem.purge) {
124
+ getAggregatedRemovals: util.deprecate(
125
+ () => {
126
+ const items = this.watcher && this.watcher.aggregatedRemovals;
105
127
  const fs = this.inputFileSystem;
106
- for (const item of items) {
107
- fs.purge(item);
128
+ if (items && fs && fs.purge) {
129
+ for (const item of items) {
130
+ fs.purge(item);
131
+ }
108
132
  }
109
- }
110
- return items;
111
- },
112
- getAggregatedChanges: () => {
113
- const items = this.watcher && this.watcher.aggregatedChanges;
114
- if (items && this.inputFileSystem && this.inputFileSystem.purge) {
133
+ return items;
134
+ },
135
+ "Watcher.getAggregatedRemovals is deprecated in favor of Watcher.getInfo since that's more performant.",
136
+ "DEP_WEBPACK_WATCHER_GET_AGGREGATED_REMOVALS"
137
+ ),
138
+ getAggregatedChanges: util.deprecate(
139
+ () => {
140
+ const items = this.watcher && this.watcher.aggregatedChanges;
115
141
  const fs = this.inputFileSystem;
116
- for (const item of items) {
117
- fs.purge(item);
142
+ if (items && fs && fs.purge) {
143
+ for (const item of items) {
144
+ fs.purge(item);
145
+ }
146
+ }
147
+ return items;
148
+ },
149
+ "Watcher.getAggregatedChanges is deprecated in favor of Watcher.getInfo since that's more performant.",
150
+ "DEP_WEBPACK_WATCHER_GET_AGGREGATED_CHANGES"
151
+ ),
152
+ getFileTimeInfoEntries: util.deprecate(
153
+ () => fetchTimeInfo().fileTimeInfoEntries,
154
+ "Watcher.getFileTimeInfoEntries is deprecated in favor of Watcher.getInfo since that's more performant.",
155
+ "DEP_WEBPACK_WATCHER_FILE_TIME_INFO_ENTRIES"
156
+ ),
157
+ getContextTimeInfoEntries: util.deprecate(
158
+ () => fetchTimeInfo().contextTimeInfoEntries,
159
+ "Watcher.getContextTimeInfoEntries is deprecated in favor of Watcher.getInfo since that's more performant.",
160
+ "DEP_WEBPACK_WATCHER_CONTEXT_TIME_INFO_ENTRIES"
161
+ ),
162
+ getInfo: () => {
163
+ const removals = this.watcher && this.watcher.aggregatedRemovals;
164
+ const changes = this.watcher && this.watcher.aggregatedChanges;
165
+ const fs = this.inputFileSystem;
166
+ if (fs && fs.purge) {
167
+ if (removals) {
168
+ for (const item of removals) {
169
+ fs.purge(item);
170
+ }
171
+ }
172
+ if (changes) {
173
+ for (const item of changes) {
174
+ fs.purge(item);
175
+ }
118
176
  }
119
177
  }
120
- return items;
121
- },
122
- getFileTimeInfoEntries: () => {
123
- if (this.watcher) {
124
- return this.watcher.getTimeInfoEntries();
125
- } else {
126
- return new Map();
127
- }
128
- },
129
- getContextTimeInfoEntries: () => {
130
- if (this.watcher) {
131
- return this.watcher.getTimeInfoEntries();
132
- } else {
133
- return new Map();
134
- }
178
+ const { fileTimeInfoEntries, contextTimeInfoEntries } = fetchTimeInfo();
179
+ return {
180
+ changes,
181
+ removals,
182
+ fileTimeInfoEntries,
183
+ contextTimeInfoEntries
184
+ };
135
185
  }
136
186
  };
137
187
  }
@@ -15,18 +15,47 @@ const { getInitialChunkIds } = require("../javascript/StartupHelpers");
15
15
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
16
16
  const { getUndoPath } = require("../util/identifier");
17
17
 
18
+ /** @typedef {import("../Chunk")} Chunk */
19
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
+ /** @typedef {import("../Compilation")} Compilation */
21
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
22
+
18
23
  class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
24
+ /**
25
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
26
+ */
19
27
  constructor(runtimeRequirements) {
20
28
  super("readFile chunk loading", RuntimeModule.STAGE_ATTACH);
21
29
  this.runtimeRequirements = runtimeRequirements;
22
30
  }
23
31
 
24
32
  /**
25
- * @returns {string} runtime code
33
+ * @private
34
+ * @param {Chunk} chunk chunk
35
+ * @param {string} rootOutputDir root output directory
36
+ * @returns {string} generated code
37
+ */
38
+ _generateBaseUri(chunk, rootOutputDir) {
39
+ const options = chunk.getEntryOptions();
40
+ if (options && options.baseUri) {
41
+ return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
42
+ }
43
+
44
+ return `${RuntimeGlobals.baseURI} = require("url").pathToFileURL(${
45
+ rootOutputDir
46
+ ? `__dirname + ${JSON.stringify(`/${rootOutputDir}`)}`
47
+ : "__filename"
48
+ });`;
49
+ }
50
+
51
+ /**
52
+ * @returns {string | null} runtime code
26
53
  */
27
54
  generate() {
28
- const { chunkGraph, chunk } = this;
29
- const { runtimeTemplate } = this.compilation;
55
+ const compilation = /** @type {Compilation} */ (this.compilation);
56
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
57
+ const chunk = /** @type {Chunk} */ (this.chunk);
58
+ const { runtimeTemplate } = compilation;
30
59
  const fn = RuntimeGlobals.ensureChunkHandlers;
31
60
  const withBaseURI = this.runtimeRequirements.has(RuntimeGlobals.baseURI);
32
61
  const withExternalInstallChunk = this.runtimeRequirements.has(
@@ -46,10 +75,10 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
46
75
  );
47
76
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
48
77
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
49
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
78
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
50
79
 
51
- const outputName = this.compilation.getPath(
52
- getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
80
+ const outputName = compilation.getPath(
81
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
53
82
  {
54
83
  chunk,
55
84
  contentHashType: "javascript"
@@ -57,7 +86,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
57
86
  );
58
87
  const rootOutputDir = getUndoPath(
59
88
  outputName,
60
- this.compilation.outputOptions.path,
89
+ /** @type {string} */ (compilation.outputOptions.path),
61
90
  false
62
91
  );
63
92
 
@@ -67,13 +96,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
67
96
 
68
97
  return Template.asString([
69
98
  withBaseURI
70
- ? Template.asString([
71
- `${RuntimeGlobals.baseURI} = require("url").pathToFileURL(${
72
- rootOutputDir
73
- ? `__dirname + ${JSON.stringify("/" + rootOutputDir)}`
74
- : "__filename"
75
- });`
76
- ])
99
+ ? this._generateBaseUri(chunk, rootOutputDir)
77
100
  : "// no baseURI",
78
101
  "",
79
102
  "// object to store loaded chunks",
@@ -91,10 +114,10 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
91
114
  withOnChunkLoad
92
115
  ? `${
93
116
  RuntimeGlobals.onChunksLoaded
94
- }.readFileVm = ${runtimeTemplate.returningFunction(
117
+ }.readFileVm = ${runtimeTemplate.returningFunction(
95
118
  "installedChunks[chunkId] === 0",
96
119
  "chunkId"
97
- )};`
120
+ )};`
98
121
  : "// no on chunks loaded",
99
122
  "",
100
123
  withLoading || withExternalInstallChunk
@@ -109,7 +132,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
109
132
  "}"
110
133
  ]),
111
134
  "}",
112
- `if(runtime) runtime(__webpack_require__);`,
135
+ `if(runtime) runtime(${RuntimeGlobals.require});`,
113
136
  "for(var i = 0; i < chunkIds.length; i++) {",
114
137
  Template.indent([
115
138
  "if(installedChunks[chunkIds[i]]) {",
@@ -119,7 +142,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
119
142
  ]),
120
143
  "}",
121
144
  withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : ""
122
- ])};`
145
+ ])};`
123
146
  : "// no chunk install function needed",
124
147
  "",
125
148
  withLoading
@@ -163,22 +186,24 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
163
186
  "});",
164
187
  "promises.push(installedChunkData[2] = promise);"
165
188
  ]),
166
- "} else installedChunks[chunkId] = 0;"
189
+ hasJsMatcher === true
190
+ ? "}"
191
+ : "} else installedChunks[chunkId] = 0;"
167
192
  ]),
168
193
  "}"
169
194
  ]),
170
195
  "}"
171
- ])
196
+ ])
172
197
  : Template.indent(["installedChunks[chunkId] = 0;"]),
173
198
  "};"
174
- ])
199
+ ])
175
200
  : "// no chunk loading",
176
201
  "",
177
202
  withExternalInstallChunk
178
203
  ? Template.asString([
179
- "module.exports = __webpack_require__;",
204
+ `module.exports = ${RuntimeGlobals.require};`,
180
205
  `${RuntimeGlobals.externalInstallChunk} = installChunk;`
181
- ])
206
+ ])
182
207
  : "// no external install chunk",
183
208
  "",
184
209
  withHmr
@@ -202,7 +227,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
202
227
  Template.indent([
203
228
  `if(${RuntimeGlobals.hasOwnProperty}(updatedModules, moduleId)) {`,
204
229
  Template.indent([
205
- `currentUpdate[moduleId] = updatedModules[moduleId];`,
230
+ "currentUpdate[moduleId] = updatedModules[moduleId];",
206
231
  "if(updatedModulesList) updatedModulesList.push(moduleId);"
207
232
  ]),
208
233
  "}"
@@ -239,7 +264,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
239
264
  /\$hmrInvalidateModuleHandlers\$/g,
240
265
  RuntimeGlobals.hmrInvalidateModuleHandlers
241
266
  )
242
- ])
267
+ ])
243
268
  : "// no HMR",
244
269
  "",
245
270
  withHmrManifest
@@ -267,7 +292,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
267
292
  "});"
268
293
  ]),
269
294
  "}"
270
- ])
295
+ ])
271
296
  : "// no HMR manifest"
272
297
  ]);
273
298
  }
@@ -5,10 +5,12 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const Template = require("../Template");
10
11
  const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
11
12
 
13
+ /** @typedef {import("../Chunk")} Chunk */
12
14
  /** @typedef {import("../Compiler")} Compiler */
13
15
 
14
16
  class ReadFileCompileAsyncWasmPlugin {
@@ -16,6 +18,7 @@ class ReadFileCompileAsyncWasmPlugin {
16
18
  this._type = type;
17
19
  this._import = useImport;
18
20
  }
21
+
19
22
  /**
20
23
  * Apply the plugin
21
24
  * @param {Compiler} compiler the compiler instance
@@ -26,6 +29,10 @@ class ReadFileCompileAsyncWasmPlugin {
26
29
  "ReadFileCompileAsyncWasmPlugin",
27
30
  compilation => {
28
31
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
32
+ /**
33
+ * @param {Chunk} chunk chunk
34
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
35
+ */
29
36
  const isEnabledForChunk = chunk => {
30
37
  const options = chunk.getEntryOptions();
31
38
  const wasmLoading =
@@ -34,12 +41,16 @@ class ReadFileCompileAsyncWasmPlugin {
34
41
  : globalWasmLoading;
35
42
  return wasmLoading === this._type;
36
43
  };
44
+ const { importMetaName } = compilation.outputOptions;
45
+ /**
46
+ * @type {(path: string) => string}
47
+ */
37
48
  const generateLoadBinaryCode = this._import
38
49
  ? path =>
39
50
  Template.asString([
40
51
  "Promise.all([import('fs'), import('url')]).then(([{ readFile }, { URL }]) => new Promise((resolve, reject) => {",
41
52
  Template.indent([
42
- `readFile(new URL(${path}, import.meta.url), (err, buffer) => {`,
53
+ `readFile(new URL(${path}, ${importMetaName}.url), (err, buffer) => {`,
43
54
  Template.indent([
44
55
  "if (err) return reject(err);",
45
56
  "",
@@ -85,7 +96,7 @@ class ReadFileCompileAsyncWasmPlugin {
85
96
  if (
86
97
  !chunkGraph.hasModuleInGraph(
87
98
  chunk,
88
- m => m.type === "webassembly/async"
99
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
89
100
  )
90
101
  ) {
91
102
  return;
@@ -5,17 +5,27 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const Template = require("../Template");
10
11
  const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
11
12
 
13
+ /** @typedef {import("../Chunk")} Chunk */
12
14
  /** @typedef {import("../Compiler")} Compiler */
13
15
 
16
+ /**
17
+ * @typedef {object} ReadFileCompileWasmPluginOptions
18
+ * @property {boolean} [mangleImports] mangle imports
19
+ */
20
+
14
21
  // TODO webpack 6 remove
15
22
 
16
23
  class ReadFileCompileWasmPlugin {
17
- constructor(options) {
18
- this.options = options || {};
24
+ /**
25
+ * @param {ReadFileCompileWasmPluginOptions} [options] options object
26
+ */
27
+ constructor(options = {}) {
28
+ this.options = options;
19
29
  }
20
30
 
21
31
  /**
@@ -28,6 +38,10 @@ class ReadFileCompileWasmPlugin {
28
38
  "ReadFileCompileWasmPlugin",
29
39
  compilation => {
30
40
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
41
+ /**
42
+ * @param {Chunk} chunk chunk
43
+ * @returns {boolean} true, when wasm loading is enabled for the chunk
44
+ */
31
45
  const isEnabledForChunk = chunk => {
32
46
  const options = chunk.getEntryOptions();
33
47
  const wasmLoading =
@@ -36,6 +50,10 @@ class ReadFileCompileWasmPlugin {
36
50
  : globalWasmLoading;
37
51
  return wasmLoading === "async-node";
38
52
  };
53
+ /**
54
+ * @param {string} path path to wasm file
55
+ * @returns {string} generated code to load the wasm file
56
+ */
39
57
  const generateLoadBinaryCode = path =>
40
58
  Template.asString([
41
59
  "new Promise(function (resolve, reject) {",
@@ -69,7 +87,7 @@ class ReadFileCompileWasmPlugin {
69
87
  if (
70
88
  !chunkGraph.hasModuleInGraph(
71
89
  chunk,
72
- m => m.type === "webassembly/sync"
90
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_SYNC
73
91
  )
74
92
  ) {
75
93
  return;
@@ -15,18 +15,47 @@ const { getInitialChunkIds } = require("../javascript/StartupHelpers");
15
15
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
16
16
  const { getUndoPath } = require("../util/identifier");
17
17
 
18
+ /** @typedef {import("../Chunk")} Chunk */
19
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
+ /** @typedef {import("../Compilation")} Compilation */
21
+ /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
22
+
18
23
  class RequireChunkLoadingRuntimeModule extends RuntimeModule {
24
+ /**
25
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
26
+ */
19
27
  constructor(runtimeRequirements) {
20
28
  super("require chunk loading", RuntimeModule.STAGE_ATTACH);
21
29
  this.runtimeRequirements = runtimeRequirements;
22
30
  }
23
31
 
24
32
  /**
25
- * @returns {string} runtime code
33
+ * @private
34
+ * @param {Chunk} chunk chunk
35
+ * @param {string} rootOutputDir root output directory
36
+ * @returns {string} generated code
37
+ */
38
+ _generateBaseUri(chunk, rootOutputDir) {
39
+ const options = chunk.getEntryOptions();
40
+ if (options && options.baseUri) {
41
+ return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
42
+ }
43
+
44
+ return `${RuntimeGlobals.baseURI} = require("url").pathToFileURL(${
45
+ rootOutputDir !== "./"
46
+ ? `__dirname + ${JSON.stringify(`/${rootOutputDir}`)}`
47
+ : "__filename"
48
+ });`;
49
+ }
50
+
51
+ /**
52
+ * @returns {string | null} runtime code
26
53
  */
27
54
  generate() {
28
- const { chunkGraph, chunk } = this;
29
- const { runtimeTemplate } = this.compilation;
55
+ const compilation = /** @type {Compilation} */ (this.compilation);
56
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
57
+ const chunk = /** @type {Chunk} */ (this.chunk);
58
+ const { runtimeTemplate } = compilation;
30
59
  const fn = RuntimeGlobals.ensureChunkHandlers;
31
60
  const withBaseURI = this.runtimeRequirements.has(RuntimeGlobals.baseURI);
32
61
  const withExternalInstallChunk = this.runtimeRequirements.has(
@@ -46,10 +75,10 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
46
75
  );
47
76
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
48
77
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
49
- const initialChunkIds = getInitialChunkIds(chunk, chunkGraph);
78
+ const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
50
79
 
51
- const outputName = this.compilation.getPath(
52
- getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
80
+ const outputName = compilation.getPath(
81
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
53
82
  {
54
83
  chunk,
55
84
  contentHashType: "javascript"
@@ -57,7 +86,7 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
57
86
  );
58
87
  const rootOutputDir = getUndoPath(
59
88
  outputName,
60
- this.compilation.outputOptions.path,
89
+ /** @type {string} */ (compilation.outputOptions.path),
61
90
  true
62
91
  );
63
92
 
@@ -67,13 +96,7 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
67
96
 
68
97
  return Template.asString([
69
98
  withBaseURI
70
- ? Template.asString([
71
- `${RuntimeGlobals.baseURI} = require("url").pathToFileURL(${
72
- rootOutputDir !== "./"
73
- ? `__dirname + ${JSON.stringify("/" + rootOutputDir)}`
74
- : "__filename"
75
- });`
76
- ])
99
+ ? this._generateBaseUri(chunk, rootOutputDir)
77
100
  : "// no baseURI",
78
101
  "",
79
102
  "// object to store loaded chunks",
@@ -91,10 +114,10 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
91
114
  withOnChunkLoad
92
115
  ? `${
93
116
  RuntimeGlobals.onChunksLoaded
94
- }.require = ${runtimeTemplate.returningFunction(
117
+ }.require = ${runtimeTemplate.returningFunction(
95
118
  "installedChunks[chunkId]",
96
119
  "chunkId"
97
- )};`
120
+ )};`
98
121
  : "// no on chunks loaded",
99
122
  "",
100
123
  withLoading || withExternalInstallChunk
@@ -109,11 +132,11 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
109
132
  "}"
110
133
  ]),
111
134
  "}",
112
- `if(runtime) runtime(__webpack_require__);`,
135
+ `if(runtime) runtime(${RuntimeGlobals.require});`,
113
136
  "for(var i = 0; i < chunkIds.length; i++)",
114
137
  Template.indent("installedChunks[chunkIds[i]] = 1;"),
115
138
  withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : ""
116
- ])};`
139
+ ])};`
117
140
  : "// no chunk install function needed",
118
141
  "",
119
142
  withLoading
@@ -140,17 +163,17 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
140
163
  ""
141
164
  ]),
142
165
  "}"
143
- ]
166
+ ]
144
167
  : "installedChunks[chunkId] = 1;"
145
168
  )};`
146
- ])
169
+ ])
147
170
  : "// no chunk loading",
148
171
  "",
149
172
  withExternalInstallChunk
150
173
  ? Template.asString([
151
- "module.exports = __webpack_require__;",
174
+ `module.exports = ${RuntimeGlobals.require};`,
152
175
  `${RuntimeGlobals.externalInstallChunk} = installChunk;`
153
- ])
176
+ ])
154
177
  : "// no external install chunk",
155
178
  "",
156
179
  withHmr
@@ -166,7 +189,7 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
166
189
  Template.indent([
167
190
  `if(${RuntimeGlobals.hasOwnProperty}(updatedModules, moduleId)) {`,
168
191
  Template.indent([
169
- `currentUpdate[moduleId] = updatedModules[moduleId];`,
192
+ "currentUpdate[moduleId] = updatedModules[moduleId];",
170
193
  "if(updatedModulesList) updatedModulesList.push(moduleId);"
171
194
  ]),
172
195
  "}"
@@ -198,7 +221,7 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
198
221
  /\$hmrInvalidateModuleHandlers\$/g,
199
222
  RuntimeGlobals.hmrInvalidateModuleHandlers
200
223
  )
201
- ])
224
+ ])
202
225
  : "// no HMR",
203
226
  "",
204
227
  withHmrManifest
@@ -211,10 +234,10 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
211
234
  RuntimeGlobals.getUpdateManifestFilename
212
235
  }());`
213
236
  ]),
214
- '}).catch(function(err) { if(err.code !== "MODULE_NOT_FOUND") throw err; });'
237
+ "})['catch'](function(err) { if(err.code !== 'MODULE_NOT_FOUND') throw err; });"
215
238
  ]),
216
239
  "}"
217
- ])
240
+ ])
218
241
  : "// no HMR manifest"
219
242
  ]);
220
243
  }