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,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
11
+ } = require("../ModuleTypeConstants");
8
12
  const RuntimeGlobals = require("../RuntimeGlobals");
9
13
  const WebpackError = require("../WebpackError");
10
14
  const {
@@ -16,7 +20,13 @@ const makeSerializable = require("../util/makeSerializable");
16
20
  const ConstDependency = require("./ConstDependency");
17
21
  const SystemRuntimeModule = require("./SystemRuntimeModule");
18
22
 
23
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
19
24
  /** @typedef {import("../Compiler")} Compiler */
25
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
26
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
27
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
28
+
29
+ const PLUGIN_NAME = "SystemPlugin";
20
30
 
21
31
  class SystemPlugin {
22
32
  /**
@@ -26,36 +36,44 @@ class SystemPlugin {
26
36
  */
27
37
  apply(compiler) {
28
38
  compiler.hooks.compilation.tap(
29
- "SystemPlugin",
39
+ PLUGIN_NAME,
30
40
  (compilation, { normalModuleFactory }) => {
31
41
  compilation.hooks.runtimeRequirementInModule
32
42
  .for(RuntimeGlobals.system)
33
- .tap("SystemPlugin", (module, set) => {
43
+ .tap(PLUGIN_NAME, (module, set) => {
34
44
  set.add(RuntimeGlobals.requireScope);
35
45
  });
36
46
 
37
47
  compilation.hooks.runtimeRequirementInTree
38
48
  .for(RuntimeGlobals.system)
39
- .tap("SystemPlugin", (chunk, set) => {
49
+ .tap(PLUGIN_NAME, (chunk, set) => {
40
50
  compilation.addRuntimeModule(chunk, new SystemRuntimeModule());
41
51
  });
42
52
 
53
+ /**
54
+ * @param {Parser} parser parser parser
55
+ * @param {JavascriptParserOptions} parserOptions parserOptions
56
+ * @returns {void}
57
+ */
43
58
  const handler = (parser, parserOptions) => {
44
59
  if (parserOptions.system === undefined || !parserOptions.system) {
45
60
  return;
46
61
  }
47
62
 
63
+ /**
64
+ * @param {string} name name
65
+ */
48
66
  const setNotSupported = name => {
49
67
  parser.hooks.evaluateTypeof
50
68
  .for(name)
51
- .tap("SystemPlugin", evaluateToString("undefined"));
69
+ .tap(PLUGIN_NAME, evaluateToString("undefined"));
52
70
  parser.hooks.expression
53
71
  .for(name)
54
72
  .tap(
55
- "SystemPlugin",
73
+ PLUGIN_NAME,
56
74
  expressionIsUnsupported(
57
75
  parser,
58
- name + " is not supported by webpack."
76
+ `${name} is not supported by webpack.`
59
77
  )
60
78
  );
61
79
  };
@@ -63,43 +81,49 @@ class SystemPlugin {
63
81
  parser.hooks.typeof
64
82
  .for("System.import")
65
83
  .tap(
66
- "SystemPlugin",
84
+ PLUGIN_NAME,
67
85
  toConstantDependency(parser, JSON.stringify("function"))
68
86
  );
69
87
  parser.hooks.evaluateTypeof
70
88
  .for("System.import")
71
- .tap("SystemPlugin", evaluateToString("function"));
89
+ .tap(PLUGIN_NAME, evaluateToString("function"));
72
90
  parser.hooks.typeof
73
91
  .for("System")
74
92
  .tap(
75
- "SystemPlugin",
93
+ PLUGIN_NAME,
76
94
  toConstantDependency(parser, JSON.stringify("object"))
77
95
  );
78
96
  parser.hooks.evaluateTypeof
79
97
  .for("System")
80
- .tap("SystemPlugin", evaluateToString("object"));
98
+ .tap(PLUGIN_NAME, evaluateToString("object"));
81
99
 
82
100
  setNotSupported("System.set");
83
101
  setNotSupported("System.get");
84
102
  setNotSupported("System.register");
85
103
 
86
- parser.hooks.expression.for("System").tap("SystemPlugin", expr => {
87
- const dep = new ConstDependency(RuntimeGlobals.system, expr.range, [
88
- RuntimeGlobals.system
89
- ]);
90
- dep.loc = expr.loc;
104
+ parser.hooks.expression.for("System").tap(PLUGIN_NAME, expr => {
105
+ const dep = new ConstDependency(
106
+ RuntimeGlobals.system,
107
+ /** @type {Range} */ (expr.range),
108
+ [RuntimeGlobals.system]
109
+ );
110
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
91
111
  parser.state.module.addPresentationalDependency(dep);
92
112
  return true;
93
113
  });
94
114
 
95
- parser.hooks.call.for("System.import").tap("SystemPlugin", expr => {
115
+ parser.hooks.call.for("System.import").tap(PLUGIN_NAME, expr => {
96
116
  parser.state.module.addWarning(
97
- new SystemImportDeprecationWarning(expr.loc)
117
+ new SystemImportDeprecationWarning(
118
+ /** @type {DependencyLocation} */ (expr.loc)
119
+ )
98
120
  );
99
121
 
100
122
  return parser.hooks.importCall.call({
101
123
  type: "ImportExpression",
102
- source: expr.arguments[0],
124
+ source:
125
+ /** @type {import("estree").Literal} */
126
+ (expr.arguments[0]),
103
127
  loc: expr.loc,
104
128
  range: expr.range
105
129
  });
@@ -107,17 +131,20 @@ class SystemPlugin {
107
131
  };
108
132
 
109
133
  normalModuleFactory.hooks.parser
110
- .for("javascript/auto")
111
- .tap("SystemPlugin", handler);
134
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
135
+ .tap(PLUGIN_NAME, handler);
112
136
  normalModuleFactory.hooks.parser
113
- .for("javascript/dynamic")
114
- .tap("SystemPlugin", handler);
137
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
138
+ .tap(PLUGIN_NAME, handler);
115
139
  }
116
140
  );
117
141
  }
118
142
  }
119
143
 
120
144
  class SystemImportDeprecationWarning extends WebpackError {
145
+ /**
146
+ * @param {DependencyLocation} loc location
147
+ */
121
148
  constructor(loc) {
122
149
  super(
123
150
  "System.import() is deprecated and will be removed soon. Use import() instead.\n" +
@@ -15,7 +15,7 @@ class SystemRuntimeModule extends RuntimeModule {
15
15
  }
16
16
 
17
17
  /**
18
- * @returns {string} runtime code
18
+ * @returns {string | null} runtime code
19
19
  */
20
20
  generate() {
21
21
  return Template.asString([
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
+ const RawDataUrlModule = require("../asset/RawDataUrlModule");
9
10
  const {
10
11
  getDependencyUsedByExportsCondition
11
12
  } = require("../optimize/InnerGraph");
@@ -16,22 +17,28 @@ const ModuleDependency = require("./ModuleDependency");
16
17
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
17
18
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
19
  /** @typedef {import("../Dependency")} Dependency */
20
+ /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
19
21
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
20
22
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
21
23
  /** @typedef {import("../Module")} Module */
22
24
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
23
25
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
24
26
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
27
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
28
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
29
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
25
30
  /** @typedef {import("../util/Hash")} Hash */
26
31
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
27
32
 
28
- const getRawModule = memoize(() => require("../RawModule"));
33
+ const getIgnoredRawDataUrlModule = memoize(
34
+ () => new RawDataUrlModule("data:,", "ignored-asset", "(ignored asset)")
35
+ );
29
36
 
30
37
  class URLDependency extends ModuleDependency {
31
38
  /**
32
39
  * @param {string} request request
33
- * @param {[number, number]} range range of the arguments of new URL( |> ... <| )
34
- * @param {[number, number]} outerRange range of the full |> new URL(...) <|
40
+ * @param {Range} range range of the arguments of new URL( |> ... <| )
41
+ * @param {Range} outerRange range of the full |> new URL(...) <|
35
42
  * @param {boolean=} relative use relative urls instead of absolute with base uri
36
43
  */
37
44
  constructor(request, range, outerRange, relative) {
@@ -39,7 +46,7 @@ class URLDependency extends ModuleDependency {
39
46
  this.range = range;
40
47
  this.outerRange = outerRange;
41
48
  this.relative = relative || false;
42
- /** @type {Set<string> | boolean} */
49
+ /** @type {Set<string> | boolean | undefined} */
43
50
  this.usedByExports = undefined;
44
51
  }
45
52
 
@@ -53,7 +60,7 @@ class URLDependency extends ModuleDependency {
53
60
 
54
61
  /**
55
62
  * @param {ModuleGraph} moduleGraph module graph
56
- * @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active
63
+ * @returns {null | false | GetConditionFn} function to determine if the connection is active
57
64
  */
58
65
  getCondition(moduleGraph) {
59
66
  return getDependencyUsedByExportsCondition(
@@ -65,18 +72,15 @@ class URLDependency extends ModuleDependency {
65
72
 
66
73
  /**
67
74
  * @param {string} context context directory
68
- * @returns {Module} a module
75
+ * @returns {Module | null} a module
69
76
  */
70
77
  createIgnoredModule(context) {
71
- const RawModule = getRawModule();
72
- return new RawModule(
73
- 'module.exports = "data:,";',
74
- `ignored-asset`,
75
- `(ignored asset)`,
76
- new Set([RuntimeGlobals.module])
77
- );
78
+ return getIgnoredRawDataUrlModule();
78
79
  }
79
80
 
81
+ /**
82
+ * @param {ObjectSerializerContext} context context
83
+ */
80
84
  serialize(context) {
81
85
  const { write } = context;
82
86
  write(this.outerRange);
@@ -85,6 +89,9 @@ class URLDependency extends ModuleDependency {
85
89
  super.serialize(context);
86
90
  }
87
91
 
92
+ /**
93
+ * @param {ObjectDeserializerContext} context context
94
+ */
88
95
  deserialize(context) {
89
96
  const { read } = context;
90
97
  this.outerRange = read();
@@ -5,13 +5,30 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { pathToFileURL } = require("url");
9
+ const CommentCompilationWarning = require("../CommentCompilationWarning");
10
+ const {
11
+ JAVASCRIPT_MODULE_TYPE_AUTO,
12
+ JAVASCRIPT_MODULE_TYPE_ESM
13
+ } = require("../ModuleTypeConstants");
14
+ const RuntimeGlobals = require("../RuntimeGlobals");
15
+ const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
16
+ const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
8
17
  const { approve } = require("../javascript/JavascriptParserHelpers");
9
18
  const InnerGraph = require("../optimize/InnerGraph");
19
+ const ConstDependency = require("./ConstDependency");
10
20
  const URLDependency = require("./URLDependency");
11
21
 
12
22
  /** @typedef {import("estree").NewExpression} NewExpressionNode */
23
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
13
24
  /** @typedef {import("../Compiler")} Compiler */
25
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
26
+ /** @typedef {import("../NormalModule")} NormalModule */
14
27
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
28
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
29
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
30
+
31
+ const PLUGIN_NAME = "URLPlugin";
15
32
 
16
33
  class URLPlugin {
17
34
  /**
@@ -19,7 +36,7 @@ class URLPlugin {
19
36
  */
20
37
  apply(compiler) {
21
38
  compiler.hooks.compilation.tap(
22
- "URLPlugin",
39
+ PLUGIN_NAME,
23
40
  (compilation, { normalModuleFactory }) => {
24
41
  compilation.dependencyFactories.set(URLDependency, normalModuleFactory);
25
42
  compilation.dependencyTemplates.set(
@@ -28,8 +45,30 @@ class URLPlugin {
28
45
  );
29
46
 
30
47
  /**
31
- * @param {JavascriptParser} parser parser
32
- * @param {object} parserOptions options
48
+ * @param {NormalModule} module module
49
+ * @returns {URL} file url
50
+ */
51
+ const getUrl = module => pathToFileURL(module.resource);
52
+
53
+ const isMetaUrl = (parser, arg) => {
54
+ const chain = parser.extractMemberExpressionChain(arg);
55
+
56
+ if (
57
+ chain.members.length !== 1 ||
58
+ chain.object.type !== "MetaProperty" ||
59
+ chain.object.meta.name !== "import" ||
60
+ chain.object.property.name !== "meta" ||
61
+ chain.members[0] !== "url"
62
+ )
63
+ return false;
64
+
65
+ return true;
66
+ };
67
+
68
+ /**
69
+ * @param {Parser} parser parser parser
70
+ * @param {JavascriptParserOptions} parserOptions parserOptions
71
+ * @returns {void}
33
72
  */
34
73
  const parserCallback = (parser, parserOptions) => {
35
74
  if (parserOptions.url === false) return;
@@ -50,25 +89,71 @@ class URLPlugin {
50
89
  )
51
90
  return;
52
91
 
53
- const chain = parser.extractMemberExpressionChain(arg2);
54
-
55
- if (
56
- chain.members.length !== 1 ||
57
- chain.object.type !== "MetaProperty" ||
58
- chain.object.meta.name !== "import" ||
59
- chain.object.property.name !== "meta" ||
60
- chain.members[0] !== "url"
61
- )
62
- return;
63
-
64
- const request = parser.evaluateExpression(arg1).asString();
92
+ if (!isMetaUrl(parser, arg2)) return;
65
93
 
66
- return request;
94
+ return parser.evaluateExpression(arg1).asString();
67
95
  };
68
96
 
69
- parser.hooks.canRename.for("URL").tap("URLPlugin", approve);
70
- parser.hooks.new.for("URL").tap("URLPlugin", _expr => {
97
+ parser.hooks.canRename.for("URL").tap(PLUGIN_NAME, approve);
98
+ parser.hooks.evaluateNewExpression
99
+ .for("URL")
100
+ .tap(PLUGIN_NAME, expr => {
101
+ const request = getUrlRequest(expr);
102
+ if (!request) return;
103
+ const url = new URL(request, getUrl(parser.state.module));
104
+
105
+ return new BasicEvaluatedExpression()
106
+ .setString(url.toString())
107
+ .setRange(/** @type {Range} */ (expr.range));
108
+ });
109
+ parser.hooks.new.for("URL").tap(PLUGIN_NAME, _expr => {
71
110
  const expr = /** @type {NewExpressionNode} */ (_expr);
111
+ const { options: importOptions, errors: commentErrors } =
112
+ parser.parseCommentOptions(/** @type {Range} */ (expr.range));
113
+
114
+ if (commentErrors) {
115
+ for (const e of commentErrors) {
116
+ const { comment } = e;
117
+ parser.state.module.addWarning(
118
+ new CommentCompilationWarning(
119
+ `Compilation error while processing magic comment(-s): /*${comment.value}*/: ${e.message}`,
120
+ comment.loc
121
+ )
122
+ );
123
+ }
124
+ }
125
+
126
+ if (importOptions && importOptions.webpackIgnore !== undefined) {
127
+ if (typeof importOptions.webpackIgnore !== "boolean") {
128
+ parser.state.module.addWarning(
129
+ new UnsupportedFeatureWarning(
130
+ `\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
131
+ /** @type {DependencyLocation} */ (expr.loc)
132
+ )
133
+ );
134
+ return;
135
+ } else if (importOptions.webpackIgnore) {
136
+ if (expr.arguments.length !== 2) return;
137
+
138
+ const [, arg2] = expr.arguments;
139
+
140
+ if (
141
+ arg2.type !== "MemberExpression" ||
142
+ !isMetaUrl(parser, arg2)
143
+ )
144
+ return;
145
+
146
+ const dep = new ConstDependency(
147
+ RuntimeGlobals.baseURI,
148
+ /** @type {Range} */ (arg2.range),
149
+ [RuntimeGlobals.baseURI]
150
+ );
151
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
152
+ parser.state.module.addPresentationalDependency(dep);
153
+
154
+ return true;
155
+ }
156
+ }
72
157
 
73
158
  const request = getUrlRequest(expr);
74
159
 
@@ -77,16 +162,19 @@ class URLPlugin {
77
162
  const [arg1, arg2] = expr.arguments;
78
163
  const dep = new URLDependency(
79
164
  request,
80
- [arg1.range[0], arg2.range[1]],
81
- expr.range,
165
+ [
166
+ /** @type {Range} */ (arg1.range)[0],
167
+ /** @type {Range} */ (arg2.range)[1]
168
+ ],
169
+ /** @type {Range} */ (expr.range),
82
170
  relative
83
171
  );
84
- dep.loc = expr.loc;
85
- parser.state.module.addDependency(dep);
172
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
173
+ parser.state.current.addDependency(dep);
86
174
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
87
175
  return true;
88
176
  });
89
- parser.hooks.isPure.for("NewExpression").tap("URLPlugin", _expr => {
177
+ parser.hooks.isPure.for("NewExpression").tap(PLUGIN_NAME, _expr => {
90
178
  const expr = /** @type {NewExpressionNode} */ (_expr);
91
179
  const { callee } = expr;
92
180
  if (callee.type !== "Identifier") return;
@@ -100,12 +188,12 @@ class URLPlugin {
100
188
  };
101
189
 
102
190
  normalModuleFactory.hooks.parser
103
- .for("javascript/auto")
104
- .tap("URLPlugin", parserCallback);
191
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
192
+ .tap(PLUGIN_NAME, parserCallback);
105
193
 
106
194
  normalModuleFactory.hooks.parser
107
- .for("javascript/esm")
108
- .tap("URLPlugin", parserCallback);
195
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
196
+ .tap(PLUGIN_NAME, parserCallback);
109
197
  }
110
198
  );
111
199
  }
@@ -11,8 +11,15 @@ const NullDependency = require("./NullDependency");
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
17
 
15
18
  class UnsupportedDependency extends NullDependency {
19
+ /**
20
+ * @param {string} request the request string
21
+ * @param {Range} range location in source code
22
+ */
16
23
  constructor(request, range) {
17
24
  super();
18
25
 
@@ -20,6 +27,9 @@ class UnsupportedDependency extends NullDependency {
20
27
  this.range = range;
21
28
  }
22
29
 
30
+ /**
31
+ * @param {ObjectSerializerContext} context context
32
+ */
23
33
  serialize(context) {
24
34
  const { write } = context;
25
35
 
@@ -29,6 +39,9 @@ class UnsupportedDependency extends NullDependency {
29
39
  super.serialize(context);
30
40
  }
31
41
 
42
+ /**
43
+ * @param {ObjectDeserializerContext} context context
44
+ */
32
45
  deserialize(context) {
33
46
  const { read } = context;
34
47
 
@@ -12,9 +12,17 @@ const ModuleDependency = require("./ModuleDependency");
12
12
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
13
13
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
17
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
16
18
 
17
19
  class WebAssemblyExportImportedDependency extends ModuleDependency {
20
+ /**
21
+ * @param {string} exportName export name
22
+ * @param {string} request request
23
+ * @param {string} name name
24
+ * @param {TODO} valueType value type
25
+ */
18
26
  constructor(exportName, request, name, valueType) {
19
27
  super(request);
20
28
  /** @type {string} */
@@ -50,6 +58,9 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
50
58
  return "wasm";
51
59
  }
52
60
 
61
+ /**
62
+ * @param {ObjectSerializerContext} context context
63
+ */
53
64
  serialize(context) {
54
65
  const { write } = context;
55
66
 
@@ -60,6 +71,9 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
60
71
  super.serialize(context);
61
72
  }
62
73
 
74
+ /**
75
+ * @param {ObjectDeserializerContext} context context
76
+ */
63
77
  deserialize(context) {
64
78
  const { read } = context;
65
79
 
@@ -13,6 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
13
13
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
15
  /** @typedef {import("../WebpackError")} WebpackError */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
18
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
17
19
 
18
20
  class WebAssemblyImportDependency extends ModuleDependency {
@@ -53,7 +55,7 @@ class WebAssemblyImportDependency extends ModuleDependency {
53
55
  /**
54
56
  * Returns errors
55
57
  * @param {ModuleGraph} moduleGraph module graph
56
- * @returns {WebpackError[]} errors
58
+ * @returns {WebpackError[] | null | undefined} errors
57
59
  */
58
60
  getErrors(moduleGraph) {
59
61
  const module = moduleGraph.getModule(this);
@@ -71,6 +73,9 @@ class WebAssemblyImportDependency extends ModuleDependency {
71
73
  }
72
74
  }
73
75
 
76
+ /**
77
+ * @param {ObjectSerializerContext} context context
78
+ */
74
79
  serialize(context) {
75
80
  const { write } = context;
76
81
 
@@ -81,6 +86,9 @@ class WebAssemblyImportDependency extends ModuleDependency {
81
86
  super.serialize(context);
82
87
  }
83
88
 
89
+ /**
90
+ * @param {ObjectDeserializerContext} context context
91
+ */
84
92
  deserialize(context) {
85
93
  const { read } = context;
86
94
 
@@ -15,9 +15,14 @@ const ModuleDependency = require("./ModuleDependency");
15
15
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
16
16
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
17
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
18
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
19
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
20
 
20
21
  class WebpackIsIncludedDependency extends ModuleDependency {
22
+ /**
23
+ * @param {string} request the request string
24
+ * @param {Range} range location in source code
25
+ */
21
26
  constructor(request, range) {
22
27
  super(request);
23
28
 
@@ -66,7 +71,7 @@ WebpackIsIncludedDependency.Template = class WebpackIsIncludedDependencyTemplate
66
71
  `__webpack_is_included__ ${runtimeTemplate.requestShortener.shorten(
67
72
  dep.request
68
73
  )}`
69
- )
74
+ )
70
75
  : "";
71
76
 
72
77
  source.replace(
@@ -18,17 +18,26 @@ const ModuleDependency = require("./ModuleDependency");
18
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
19
  /** @typedef {import("../Entrypoint")} Entrypoint */
20
20
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
21
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
24
  /** @typedef {import("../util/Hash")} Hash */
22
25
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
23
26
 
24
27
  class WorkerDependency extends ModuleDependency {
25
28
  /**
26
29
  * @param {string} request request
27
- * @param {[number, number]} range range
30
+ * @param {Range} range range
31
+ * @param {object} workerDependencyOptions options
32
+ * @param {string=} workerDependencyOptions.publicPath public path for the worker
28
33
  */
29
- constructor(request, range) {
34
+ constructor(request, range, workerDependencyOptions) {
30
35
  super(request);
31
36
  this.range = range;
37
+ // If options are updated, don't forget to update the hash and serialization functions
38
+ this.options = workerDependencyOptions;
39
+ /** Cache the hash */
40
+ this._hashUpdate = undefined;
32
41
  }
33
42
 
34
43
  /**
@@ -48,6 +57,37 @@ class WorkerDependency extends ModuleDependency {
48
57
  get category() {
49
58
  return "worker";
50
59
  }
60
+
61
+ /**
62
+ * Update the hash
63
+ * @param {Hash} hash hash to be updated
64
+ * @param {UpdateHashContext} context context
65
+ * @returns {void}
66
+ */
67
+ updateHash(hash, context) {
68
+ if (this._hashUpdate === undefined) {
69
+ this._hashUpdate = JSON.stringify(this.options);
70
+ }
71
+ hash.update(this._hashUpdate);
72
+ }
73
+
74
+ /**
75
+ * @param {ObjectSerializerContext} context context
76
+ */
77
+ serialize(context) {
78
+ const { write } = context;
79
+ write(this.options);
80
+ super.serialize(context);
81
+ }
82
+
83
+ /**
84
+ * @param {ObjectDeserializerContext} context context
85
+ */
86
+ deserialize(context) {
87
+ const { read } = context;
88
+ this.options = read();
89
+ super.deserialize(context);
90
+ }
51
91
  }
52
92
 
53
93
  WorkerDependency.Template = class WorkerDependencyTemplate extends (
@@ -69,6 +109,10 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
69
109
  chunkGraph.getBlockChunkGroup(block)
70
110
  );
71
111
  const chunk = entrypoint.getEntrypointChunk();
112
+ // We use the workerPublicPath option if provided, else we fallback to the RuntimeGlobal publicPath
113
+ const workerImportBaseUrl = dep.options.publicPath
114
+ ? `"${dep.options.publicPath}"`
115
+ : RuntimeGlobals.publicPath;
72
116
 
73
117
  runtimeRequirements.add(RuntimeGlobals.publicPath);
74
118
  runtimeRequirements.add(RuntimeGlobals.baseURI);
@@ -77,7 +121,7 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
77
121
  source.replace(
78
122
  dep.range[0],
79
123
  dep.range[1] - 1,
80
- `/* worker import */ ${RuntimeGlobals.publicPath} + ${
124
+ `/* worker import */ ${workerImportBaseUrl} + ${
81
125
  RuntimeGlobals.getChunkScriptFilename
82
126
  }(${JSON.stringify(chunk.id)}), ${RuntimeGlobals.baseURI}`
83
127
  );