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
package/lib/DllModule.js CHANGED
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { RawSource } = require("webpack-sources");
9
9
  const Module = require("./Module");
10
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("./ModuleTypeConstants");
10
11
  const RuntimeGlobals = require("./RuntimeGlobals");
11
12
  const makeSerializable = require("./util/makeSerializable");
12
13
 
@@ -14,16 +15,20 @@ const makeSerializable = require("./util/makeSerializable");
14
15
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
15
16
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
16
17
  /** @typedef {import("./Compilation")} Compilation */
18
+ /** @typedef {import("./Dependency")} Dependency */
17
19
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
18
20
  /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
19
21
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
20
22
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
21
23
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
22
24
  /** @typedef {import("./Module").SourceContext} SourceContext */
25
+ /** @typedef {import("./Module").SourceTypes} SourceTypes */
23
26
  /** @typedef {import("./RequestShortener")} RequestShortener */
24
27
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
25
28
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
26
29
  /** @typedef {import("./WebpackError")} WebpackError */
30
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
31
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
27
32
  /** @typedef {import("./util/Hash")} Hash */
28
33
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
29
34
 
@@ -34,16 +39,22 @@ const RUNTIME_REQUIREMENTS = new Set([
34
39
  ]);
35
40
 
36
41
  class DllModule extends Module {
42
+ /**
43
+ * @param {string} context context path
44
+ * @param {Dependency[]} dependencies dependencies
45
+ * @param {string} name name
46
+ */
37
47
  constructor(context, dependencies, name) {
38
- super("javascript/dynamic", context);
48
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, context);
39
49
 
40
50
  // Info from Factory
51
+ /** @type {Dependency[]} */
41
52
  this.dependencies = dependencies;
42
53
  this.name = name;
43
54
  }
44
55
 
45
56
  /**
46
- * @returns {Set<string>} types available (do not mutate)
57
+ * @returns {SourceTypes} types available (do not mutate)
47
58
  */
48
59
  getSourceTypes() {
49
60
  return TYPES;
@@ -86,7 +97,7 @@ class DllModule extends Module {
86
97
  const sources = new Map();
87
98
  sources.set(
88
99
  "javascript",
89
- new RawSource("module.exports = __webpack_require__;")
100
+ new RawSource(`module.exports = ${RuntimeGlobals.require};`)
90
101
  );
91
102
  return {
92
103
  sources,
@@ -96,7 +107,7 @@ class DllModule extends Module {
96
107
 
97
108
  /**
98
109
  * @param {NeedBuildContext} context context info
99
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
110
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
100
111
  * @returns {void}
101
112
  */
102
113
  needBuild(context, callback) {
@@ -121,11 +132,17 @@ class DllModule extends Module {
121
132
  super.updateHash(hash, context);
122
133
  }
123
134
 
135
+ /**
136
+ * @param {ObjectSerializerContext} context context
137
+ */
124
138
  serialize(context) {
125
139
  context.write(this.name);
126
140
  super.serialize(context);
127
141
  }
128
142
 
143
+ /**
144
+ * @param {ObjectDeserializerContext} context context
145
+ */
129
146
  deserialize(context) {
130
147
  this.name = context.read();
131
148
  super.deserialize(context);
@@ -17,9 +17,10 @@ class DllModuleFactory extends ModuleFactory {
17
17
  super();
18
18
  this.hooks = Object.freeze({});
19
19
  }
20
+
20
21
  /**
21
22
  * @param {ModuleFactoryCreateData} data data object
22
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
23
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
23
24
  * @returns {void}
24
25
  */
25
26
  create(data, callback) {
package/lib/DllPlugin.js CHANGED
@@ -12,6 +12,8 @@ const createSchemaValidation = require("./util/create-schema-validation");
12
12
 
13
13
  /** @typedef {import("../declarations/plugins/DllPlugin").DllPluginOptions} DllPluginOptions */
14
14
  /** @typedef {import("./Compiler")} Compiler */
15
+ /** @typedef {import("./DllEntryPlugin").Entries} Entries */
16
+ /** @typedef {import("./DllEntryPlugin").Options} Options */
15
17
 
16
18
  const validate = createSchemaValidation(
17
19
  require("../schemas/plugins/DllPlugin.check.js"),
@@ -43,13 +45,13 @@ class DllPlugin {
43
45
  compiler.hooks.entryOption.tap("DllPlugin", (context, entry) => {
44
46
  if (typeof entry !== "function") {
45
47
  for (const name of Object.keys(entry)) {
46
- const options = {
47
- name,
48
- filename: entry.filename
49
- };
50
- new DllEntryPlugin(context, entry[name].import, options).apply(
51
- compiler
52
- );
48
+ /** @type {Options} */
49
+ const options = { name, filename: entry.filename };
50
+ new DllEntryPlugin(
51
+ context,
52
+ /** @type {Entries} */ (entry[name].import),
53
+ options
54
+ ).apply(compiler);
53
55
  }
54
56
  } else {
55
57
  throw new Error(
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const parseJson = require("json-parse-better-errors");
8
+ const parseJson = require("json-parse-even-better-errors");
9
9
  const DelegatedModuleFactoryPlugin = require("./DelegatedModuleFactoryPlugin");
10
10
  const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
11
11
  const WebpackError = require("./WebpackError");
@@ -15,7 +15,10 @@ const makePathsRelative = require("./util/identifier").makePathsRelative;
15
15
 
16
16
  /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
17
17
  /** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptions} DllReferencePluginOptions */
18
+ /** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptionsContent} DllReferencePluginOptionsContent */
18
19
  /** @typedef {import("../declarations/plugins/DllReferencePlugin").DllReferencePluginOptionsManifest} DllReferencePluginOptionsManifest */
20
+ /** @typedef {import("./Compiler")} Compiler */
21
+ /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
19
22
 
20
23
  const validate = createSchemaValidation(
21
24
  require("../schemas/plugins/DllReferencePlugin.check.js"),
@@ -26,6 +29,8 @@ const validate = createSchemaValidation(
26
29
  }
27
30
  );
28
31
 
32
+ /** @typedef {{ path: string, data: DllReferencePluginOptionsManifest | undefined, error: Error | undefined }} CompilationDataItem */
33
+
29
34
  class DllReferencePlugin {
30
35
  /**
31
36
  * @param {DllReferencePluginOptions} options options object
@@ -33,10 +38,15 @@ class DllReferencePlugin {
33
38
  constructor(options) {
34
39
  validate(options);
35
40
  this.options = options;
36
- /** @type {WeakMap<Object, {path: string, data: DllReferencePluginOptionsManifest?, error: Error?}>} */
41
+ /** @type {WeakMap<object, CompilationDataItem>} */
37
42
  this._compilationData = new WeakMap();
38
43
  }
39
44
 
45
+ /**
46
+ * Apply the plugin
47
+ * @param {Compiler} compiler the compiler instance
48
+ * @returns {void}
49
+ */
40
50
  apply(compiler) {
41
51
  compiler.hooks.compilation.tap(
42
52
  "DllReferencePlugin",
@@ -54,8 +64,10 @@ class DllReferencePlugin {
54
64
  if ("manifest" in this.options) {
55
65
  const manifest = this.options.manifest;
56
66
  if (typeof manifest === "string") {
57
- compiler.inputFileSystem.readFile(manifest, (err, result) => {
67
+ /** @type {InputFileSystem} */
68
+ (compiler.inputFileSystem).readFile(manifest, (err, result) => {
58
69
  if (err) return callback(err);
70
+ /** @type {CompilationDataItem} */
59
71
  const data = {
60
72
  path: manifest,
61
73
  data: undefined,
@@ -64,16 +76,21 @@ class DllReferencePlugin {
64
76
  // Catch errors parsing the manifest so that blank
65
77
  // or malformed manifest files don't kill the process.
66
78
  try {
67
- data.data = parseJson(result.toString("utf-8"));
68
- } catch (e) {
79
+ data.data = parseJson(
80
+ /** @type {Buffer} */ (result).toString("utf-8")
81
+ );
82
+ } catch (parseErr) {
69
83
  // Store the error in the params so that it can
70
84
  // be added as a compilation error later on.
71
85
  const manifestPath = makePathsRelative(
72
- compiler.options.context,
86
+ /** @type {string} */ (compiler.options.context),
73
87
  manifest,
74
88
  compiler.root
75
89
  );
76
- data.error = new DllManifestError(manifestPath, e.message);
90
+ data.error = new DllManifestError(
91
+ manifestPath,
92
+ /** @type {Error} */ (parseErr).message
93
+ );
77
94
  }
78
95
  this._compilationData.set(params, data);
79
96
  return callback();
@@ -88,13 +105,15 @@ class DllReferencePlugin {
88
105
  compiler.hooks.compile.tap("DllReferencePlugin", params => {
89
106
  let name = this.options.name;
90
107
  let sourceType = this.options.sourceType;
91
- let content =
108
+ let resolvedContent =
92
109
  "content" in this.options ? this.options.content : undefined;
93
110
  if ("manifest" in this.options) {
94
- let manifestParameter = this.options.manifest;
111
+ const manifestParameter = this.options.manifest;
95
112
  let manifest;
96
113
  if (typeof manifestParameter === "string") {
97
- const data = this._compilationData.get(params);
114
+ const data =
115
+ /** @type {CompilationDataItem} */
116
+ (this._compilationData.get(params));
98
117
  // If there was an error parsing the manifest
99
118
  // file, exit now because the error will be added
100
119
  // as a compilation error in the "compilation" hook.
@@ -108,23 +127,27 @@ class DllReferencePlugin {
108
127
  if (manifest) {
109
128
  if (!name) name = manifest.name;
110
129
  if (!sourceType) sourceType = manifest.type;
111
- if (!content) content = manifest.content;
130
+ if (!resolvedContent) resolvedContent = manifest.content;
112
131
  }
113
132
  }
114
133
  /** @type {Externals} */
115
134
  const externals = {};
116
- const source = "dll-reference " + name;
117
- externals[source] = name;
135
+ const source = `dll-reference ${name}`;
136
+ externals[source] = /** @type {string} */ (name);
118
137
  const normalModuleFactory = params.normalModuleFactory;
119
138
  new ExternalModuleFactoryPlugin(sourceType || "var", externals).apply(
120
139
  normalModuleFactory
121
140
  );
122
141
  new DelegatedModuleFactoryPlugin({
123
- source: source,
142
+ source,
124
143
  type: this.options.type,
125
144
  scope: this.options.scope,
126
- context: this.options.context || compiler.options.context,
127
- content,
145
+ context:
146
+ /** @type {string} */
147
+ (this.options.context || compiler.options.context),
148
+ content:
149
+ /** @type {DllReferencePluginOptionsContent} */
150
+ (resolvedContent),
128
151
  extensions: this.options.extensions,
129
152
  associatedObjectForCache: compiler.root
130
153
  }).apply(normalModuleFactory);
@@ -134,13 +157,17 @@ class DllReferencePlugin {
134
157
  "DllReferencePlugin",
135
158
  (compilation, params) => {
136
159
  if ("manifest" in this.options) {
137
- let manifest = this.options.manifest;
160
+ const manifest = this.options.manifest;
138
161
  if (typeof manifest === "string") {
139
- const data = this._compilationData.get(params);
162
+ const data = /** @type {CompilationDataItem} */ (
163
+ this._compilationData.get(params)
164
+ );
140
165
  // If there was an error parsing the manifest file, add the
141
166
  // error as a compilation error to make the compilation fail.
142
167
  if (data.error) {
143
- compilation.errors.push(data.error);
168
+ compilation.errors.push(
169
+ /** @type {DllManifestError} */ (data.error)
170
+ );
144
171
  }
145
172
  compilation.fileDependencies.add(manifest);
146
173
  }
@@ -151,6 +178,10 @@ class DllReferencePlugin {
151
178
  }
152
179
 
153
180
  class DllManifestError extends WebpackError {
181
+ /**
182
+ * @param {string} filename filename of the manifest
183
+ * @param {string} message error message
184
+ */
154
185
  constructor(filename, message) {
155
186
  super();
156
187
 
@@ -41,7 +41,10 @@ class EntryOptionPlugin {
41
41
  name,
42
42
  desc
43
43
  );
44
- for (const entry of desc.import) {
44
+ const descImport =
45
+ /** @type {Exclude<EntryDescription["import"], undefined>} */
46
+ (desc.import);
47
+ for (const entry of descImport) {
45
48
  new EntryPlugin(context, entry, options).apply(compiler);
46
49
  }
47
50
  }
@@ -62,8 +65,10 @@ class EntryOptionPlugin {
62
65
  runtime: desc.runtime,
63
66
  layer: desc.layer,
64
67
  dependOn: desc.dependOn,
68
+ baseUri: desc.baseUri,
65
69
  publicPath: desc.publicPath,
66
70
  chunkLoading: desc.chunkLoading,
71
+ asyncChunks: desc.asyncChunks,
67
72
  wasmLoading: desc.wasmLoading,
68
73
  library: desc.library
69
74
  };
@@ -12,9 +12,7 @@ const EntryDependency = require("./dependencies/EntryDependency");
12
12
 
13
13
  class EntryPlugin {
14
14
  /**
15
- * An entry plugin which will handle
16
- * creation of the EntryDependency
17
- *
15
+ * An entry plugin which will handle creation of the EntryDependency
18
16
  * @param {string} context context path
19
17
  * @param {string} entry entry path
20
18
  * @param {EntryOptions | string=} options entry options (passing a string is deprecated)
@@ -59,7 +57,12 @@ class EntryPlugin {
59
57
  static createDependency(entry, options) {
60
58
  const dep = new EntryDependency(entry);
61
59
  // TODO webpack 6 remove string option
62
- dep.loc = { name: typeof options === "object" ? options.name : options };
60
+ dep.loc = {
61
+ name:
62
+ typeof options === "object"
63
+ ? /** @type {string} */ (options.name)
64
+ : options
65
+ };
63
66
  return dep;
64
67
  }
65
68
  }
package/lib/Entrypoint.js CHANGED
@@ -83,13 +83,13 @@ class Entrypoint extends ChunkGroup {
83
83
  * @returns {Chunk} chunk
84
84
  */
85
85
  getEntrypointChunk() {
86
- return this._entrypointChunk;
86
+ return /** @type {Chunk} */ (this._entrypointChunk);
87
87
  }
88
88
 
89
89
  /**
90
90
  * @param {Chunk} oldChunk chunk to be replaced
91
91
  * @param {Chunk} newChunk New chunk that will be replaced with
92
- * @returns {boolean} returns true if the replacement was successful
92
+ * @returns {boolean | undefined} returns true if the replacement was successful
93
93
  */
94
94
  replaceChunk(oldChunk, newChunk) {
95
95
  if (this._runtimeChunk === oldChunk) this._runtimeChunk = newChunk;
@@ -0,0 +1,52 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Gengkun He @ahabhgk
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const WebpackError = require("./WebpackError");
9
+ const makeSerializable = require("./util/makeSerializable");
10
+
11
+ /** @typedef {import("./Module")} Module */
12
+ /** @typedef {import("./Compilation")} Compilation */
13
+ /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
14
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
+ /** @typedef {"asyncWebAssembly" | "topLevelAwait" | "external promise" | "external script" | "external import" | "external module"} Feature */
17
+
18
+ class EnvironmentNotSupportAsyncWarning extends WebpackError {
19
+ /**
20
+ * Creates an instance of EnvironmentNotSupportAsyncWarning.
21
+ * @param {Module} module module
22
+ * @param {Feature} feature feature
23
+ */
24
+ constructor(module, feature) {
25
+ const message = `The generated code contains 'async/await' because this module is using "${feature}".
26
+ However, your target environment does not appear to support 'async/await'.
27
+ As a result, the code may not run as expected or may cause runtime errors.`;
28
+ super(message);
29
+
30
+ this.name = "EnvironmentNotSupportAsyncWarning";
31
+ this.module = module;
32
+ }
33
+
34
+ /**
35
+ * Creates an instance of EnvironmentNotSupportAsyncWarning.
36
+ * @param {Module} module module
37
+ * @param {RuntimeTemplate} runtimeTemplate compilation
38
+ * @param {Feature} feature feature
39
+ */
40
+ static check(module, runtimeTemplate, feature) {
41
+ if (!runtimeTemplate.supportsAsyncFunction()) {
42
+ module.addWarning(new EnvironmentNotSupportAsyncWarning(module, feature));
43
+ }
44
+ }
45
+ }
46
+
47
+ makeSerializable(
48
+ EnvironmentNotSupportAsyncWarning,
49
+ "webpack/lib/EnvironmentNotSupportAsyncWarning"
50
+ );
51
+
52
+ module.exports = EnvironmentNotSupportAsyncWarning;
@@ -12,15 +12,18 @@ const WebpackError = require("./WebpackError");
12
12
  /** @typedef {import("./DefinePlugin").CodeValue} CodeValue */
13
13
 
14
14
  class EnvironmentPlugin {
15
+ /**
16
+ * @param {(string | string[] | Record<string, string>)[]} keys keys
17
+ */
15
18
  constructor(...keys) {
16
19
  if (keys.length === 1 && Array.isArray(keys[0])) {
17
20
  this.keys = keys[0];
18
21
  this.defaultValues = {};
19
22
  } else if (keys.length === 1 && keys[0] && typeof keys[0] === "object") {
20
23
  this.keys = Object.keys(keys[0]);
21
- this.defaultValues = keys[0];
24
+ this.defaultValues = /** @type {Record<string, string>} */ (keys[0]);
22
25
  } else {
23
- this.keys = keys;
26
+ this.keys = /** @type {string[]} */ (keys);
24
27
  this.defaultValues = {};
25
28
  }
26
29
  }
@@ -9,53 +9,92 @@ const loaderFlag = "LOADER_EXECUTION";
9
9
 
10
10
  const webpackOptionsFlag = "WEBPACK_OPTIONS";
11
11
 
12
- exports.cutOffByFlag = (stack, flag) => {
13
- stack = stack.split("\n");
14
- for (let i = 0; i < stack.length; i++) {
15
- if (stack[i].includes(flag)) {
16
- stack.length = i;
12
+ /**
13
+ * @param {string} stack stack trace
14
+ * @param {string} flag flag to cut off
15
+ * @returns {string} stack trace without the specified flag included
16
+ */
17
+ const cutOffByFlag = (stack, flag) => {
18
+ const errorStack = stack.split("\n");
19
+ for (let i = 0; i < errorStack.length; i++) {
20
+ if (errorStack[i].includes(flag)) {
21
+ errorStack.length = i;
17
22
  }
18
23
  }
19
- return stack.join("\n");
24
+ return errorStack.join("\n");
20
25
  };
21
26
 
22
- exports.cutOffLoaderExecution = stack =>
23
- exports.cutOffByFlag(stack, loaderFlag);
27
+ /**
28
+ * @param {string} stack stack trace
29
+ * @returns {string} stack trace without the loader execution flag included
30
+ */
31
+ const cutOffLoaderExecution = stack => cutOffByFlag(stack, loaderFlag);
24
32
 
25
- exports.cutOffWebpackOptions = stack =>
26
- exports.cutOffByFlag(stack, webpackOptionsFlag);
33
+ /**
34
+ * @param {string} stack stack trace
35
+ * @returns {string} stack trace without the webpack options flag included
36
+ */
37
+ const cutOffWebpackOptions = stack => cutOffByFlag(stack, webpackOptionsFlag);
27
38
 
28
- exports.cutOffMultilineMessage = (stack, message) => {
29
- stack = stack.split("\n");
30
- message = message.split("\n");
39
+ /**
40
+ * @param {string} stack stack trace
41
+ * @param {string} message error message
42
+ * @returns {string} stack trace without the message included
43
+ */
44
+ const cutOffMultilineMessage = (stack, message) => {
45
+ const stackSplitByLines = stack.split("\n");
46
+ const messageSplitByLines = message.split("\n");
31
47
 
48
+ /** @type {string[]} */
32
49
  const result = [];
33
50
 
34
- stack.forEach((line, idx) => {
35
- if (!line.includes(message[idx])) result.push(line);
36
- });
51
+ for (const [idx, line] of stackSplitByLines.entries()) {
52
+ if (!line.includes(messageSplitByLines[idx])) result.push(line);
53
+ }
37
54
 
38
55
  return result.join("\n");
39
56
  };
40
57
 
41
- exports.cutOffMessage = (stack, message) => {
58
+ /**
59
+ * @param {string} stack stack trace
60
+ * @param {string} message error message
61
+ * @returns {string} stack trace without the message included
62
+ */
63
+ const cutOffMessage = (stack, message) => {
42
64
  const nextLine = stack.indexOf("\n");
43
65
  if (nextLine === -1) {
44
66
  return stack === message ? "" : stack;
45
- } else {
46
- const firstLine = stack.substr(0, nextLine);
47
- return firstLine === message ? stack.substr(nextLine + 1) : stack;
48
67
  }
68
+ const firstLine = stack.slice(0, nextLine);
69
+ return firstLine === message ? stack.slice(nextLine + 1) : stack;
49
70
  };
50
71
 
51
- exports.cleanUp = (stack, message) => {
52
- stack = exports.cutOffLoaderExecution(stack);
53
- stack = exports.cutOffMessage(stack, message);
72
+ /**
73
+ * @param {string} stack stack trace
74
+ * @param {string} message error message
75
+ * @returns {string} stack trace without the loader execution flag and message included
76
+ */
77
+ const cleanUp = (stack, message) => {
78
+ stack = cutOffLoaderExecution(stack);
79
+ stack = cutOffMessage(stack, message);
54
80
  return stack;
55
81
  };
56
82
 
57
- exports.cleanUpWebpackOptions = (stack, message) => {
58
- stack = exports.cutOffWebpackOptions(stack);
59
- stack = exports.cutOffMultilineMessage(stack, message);
83
+ /**
84
+ * @param {string} stack stack trace
85
+ * @param {string} message error message
86
+ * @returns {string} stack trace without the webpack options flag and message included
87
+ */
88
+ const cleanUpWebpackOptions = (stack, message) => {
89
+ stack = cutOffWebpackOptions(stack);
90
+ stack = cutOffMultilineMessage(stack, message);
60
91
  return stack;
61
92
  };
93
+
94
+ module.exports.cutOffByFlag = cutOffByFlag;
95
+ module.exports.cutOffLoaderExecution = cutOffLoaderExecution;
96
+ module.exports.cutOffWebpackOptions = cutOffWebpackOptions;
97
+ module.exports.cutOffMultilineMessage = cutOffMultilineMessage;
98
+ module.exports.cutOffMessage = cutOffMessage;
99
+ module.exports.cleanUp = cleanUp;
100
+ module.exports.cleanUpWebpackOptions = cleanUpWebpackOptions;
@@ -8,9 +8,11 @@
8
8
  const { ConcatSource, RawSource } = require("webpack-sources");
9
9
  const ExternalModule = require("./ExternalModule");
10
10
  const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
11
+ const RuntimeGlobals = require("./RuntimeGlobals");
11
12
  const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
12
13
 
13
14
  /** @typedef {import("webpack-sources").Source} Source */
15
+ /** @typedef {import("../declarations/WebpackOptions").OutputNormalized} OutputOptions */
14
16
  /** @typedef {import("./Compiler")} Compiler */
15
17
 
16
18
  /** @type {WeakMap<Source, Source>} */
@@ -26,8 +28,18 @@ const devtoolWarning = new RawSource(`/*
26
28
  */
27
29
  `);
28
30
 
31
+ /**
32
+ * @typedef {object} EvalDevToolModulePluginOptions
33
+ * @property {OutputOptions["devtoolNamespace"]=} namespace namespace
34
+ * @property {string=} sourceUrlComment source url comment
35
+ * @property {OutputOptions["devtoolModuleFilenameTemplate"]=} moduleFilenameTemplate module filename template
36
+ */
37
+
29
38
  class EvalDevToolModulePlugin {
30
- constructor(options) {
39
+ /**
40
+ * @param {EvalDevToolModulePluginOptions=} options options
41
+ */
42
+ constructor(options = {}) {
31
43
  this.namespace = options.namespace || "";
32
44
  this.sourceUrlComment = options.sourceUrlComment || "\n//# sourceURL=[url]";
33
45
  this.moduleFilenameTemplate =
@@ -65,19 +77,23 @@ class EvalDevToolModulePlugin {
65
77
  hashFunction: compilation.outputOptions.hashFunction
66
78
  }
67
79
  );
68
- const footer =
69
- "\n" +
70
- this.sourceUrlComment.replace(
71
- /\[url\]/g,
72
- encodeURI(str)
73
- .replace(/%2F/g, "/")
74
- .replace(/%20/g, "_")
75
- .replace(/%5E/g, "^")
76
- .replace(/%5C/g, "\\")
77
- .replace(/^\//, "")
78
- );
80
+ const footer = `\n${this.sourceUrlComment.replace(
81
+ /\[url\]/g,
82
+ encodeURI(str)
83
+ .replace(/%2F/g, "/")
84
+ .replace(/%20/g, "_")
85
+ .replace(/%5E/g, "^")
86
+ .replace(/%5C/g, "\\")
87
+ .replace(/^\//, "")
88
+ )}`;
79
89
  const result = new RawSource(
80
- `eval(${JSON.stringify(content + footer)});`
90
+ `eval(${
91
+ compilation.outputOptions.trustedTypes
92
+ ? `${RuntimeGlobals.createScript}(${JSON.stringify(
93
+ content + footer
94
+ )})`
95
+ : JSON.stringify(content + footer)
96
+ });`
81
97
  );
82
98
  cache.set(source, result);
83
99
  return result;
@@ -95,6 +111,14 @@ class EvalDevToolModulePlugin {
95
111
  hash.update("EvalDevToolModulePlugin");
96
112
  hash.update("2");
97
113
  });
114
+ if (compilation.outputOptions.trustedTypes) {
115
+ compilation.hooks.additionalModuleRuntimeRequirements.tap(
116
+ "EvalDevToolModulePlugin",
117
+ (module, set, context) => {
118
+ set.add(RuntimeGlobals.createScript);
119
+ }
120
+ );
121
+ }
98
122
  });
99
123
  }
100
124
  }