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
@@ -8,6 +8,10 @@
8
8
  const { pathToFileURL } = require("url");
9
9
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
10
10
  const CommentCompilationWarning = require("../CommentCompilationWarning");
11
+ const {
12
+ JAVASCRIPT_MODULE_TYPE_AUTO,
13
+ JAVASCRIPT_MODULE_TYPE_ESM
14
+ } = require("../ModuleTypeConstants");
11
15
  const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
12
16
  const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin");
13
17
  const { equals } = require("../util/ArrayHelpers");
@@ -21,21 +25,36 @@ const {
21
25
  } = require("./HarmonyImportDependencyParserPlugin");
22
26
  const WorkerDependency = require("./WorkerDependency");
23
27
 
28
+ /** @typedef {import("estree").CallExpression} CallExpression */
24
29
  /** @typedef {import("estree").Expression} Expression */
25
30
  /** @typedef {import("estree").ObjectExpression} ObjectExpression */
26
31
  /** @typedef {import("estree").Pattern} Pattern */
27
32
  /** @typedef {import("estree").Property} Property */
28
33
  /** @typedef {import("estree").SpreadElement} SpreadElement */
34
+ /** @typedef {import("../../declarations/WebpackOptions").ChunkLoading} ChunkLoading */
35
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
36
+ /** @typedef {import("../../declarations/WebpackOptions").OutputModule} OutputModule */
37
+ /** @typedef {import("../../declarations/WebpackOptions").WasmLoading} WasmLoading */
38
+ /** @typedef {import("../../declarations/WebpackOptions").WorkerPublicPath} WorkerPublicPath */
29
39
  /** @typedef {import("../Compiler")} Compiler */
40
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
30
41
  /** @typedef {import("../Entrypoint").EntryOptions} EntryOptions */
42
+ /** @typedef {import("../NormalModule")} NormalModule */
31
43
  /** @typedef {import("../Parser").ParserState} ParserState */
32
44
  /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
33
45
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
46
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
47
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
48
+ /** @typedef {import("../util/createHash").Algorithm} Algorithm */
34
49
  /** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
35
50
 
36
- const getUrl = module => {
37
- return pathToFileURL(module.resource).toString();
38
- };
51
+ /**
52
+ * @param {NormalModule} module module
53
+ * @returns {string} url
54
+ */
55
+ const getUrl = module => pathToFileURL(module.resource).toString();
56
+
57
+ const WorkerSpecifierTag = Symbol("worker specifier tag");
39
58
 
40
59
  const DEFAULT_SYNTAX = [
41
60
  "Worker",
@@ -47,12 +66,22 @@ const DEFAULT_SYNTAX = [
47
66
  /** @type {WeakMap<ParserState, number>} */
48
67
  const workerIndexMap = new WeakMap();
49
68
 
69
+ const PLUGIN_NAME = "WorkerPlugin";
70
+
50
71
  class WorkerPlugin {
51
- constructor(chunkLoading, wasmLoading, module) {
72
+ /**
73
+ * @param {ChunkLoading=} chunkLoading chunk loading
74
+ * @param {WasmLoading=} wasmLoading wasm loading
75
+ * @param {OutputModule=} module output module
76
+ * @param {WorkerPublicPath=} workerPublicPath worker public path
77
+ */
78
+ constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
52
79
  this._chunkLoading = chunkLoading;
53
80
  this._wasmLoading = wasmLoading;
54
81
  this._module = module;
82
+ this._workerPublicPath = workerPublicPath;
55
83
  }
84
+
56
85
  /**
57
86
  * Apply the plugin
58
87
  * @param {Compiler} compiler the compiler instance
@@ -70,7 +99,7 @@ class WorkerPlugin {
70
99
  compiler.root
71
100
  );
72
101
  compiler.hooks.thisCompilation.tap(
73
- "WorkerPlugin",
102
+ PLUGIN_NAME,
74
103
  (compilation, { normalModuleFactory }) => {
75
104
  compilation.dependencyFactories.set(
76
105
  WorkerDependency,
@@ -88,7 +117,7 @@ class WorkerPlugin {
88
117
  /**
89
118
  * @param {JavascriptParser} parser the parser
90
119
  * @param {Expression} expr expression
91
- * @returns {[BasicEvaluatedExpression, [number, number]]} parsed
120
+ * @returns {[BasicEvaluatedExpression, [number, number]] | void} parsed
92
121
  */
93
122
  const parseModuleUrl = (parser, expr) => {
94
123
  if (
@@ -105,13 +134,19 @@ class WorkerPlugin {
105
134
  const arg2Value = parser.evaluateExpression(arg2);
106
135
  if (
107
136
  !arg2Value.isString() ||
108
- !arg2Value.string.startsWith("file://") ||
137
+ !(/** @type {string} */ (arg2Value.string).startsWith("file://")) ||
109
138
  arg2Value.string !== getUrl(parser.state.module)
110
139
  ) {
111
140
  return;
112
141
  }
113
142
  const arg1Value = parser.evaluateExpression(arg1);
114
- return [arg1Value, [arg1.range[0], arg2.range[1]]];
143
+ return [
144
+ arg1Value,
145
+ [
146
+ /** @type {Range} */ (arg1.range)[0],
147
+ /** @type {Range} */ (arg2.range)[1]
148
+ ]
149
+ ];
115
150
  };
116
151
 
117
152
  /**
@@ -149,8 +184,9 @@ class WorkerPlugin {
149
184
  }
150
185
  }
151
186
  const insertType = expr.properties.length > 0 ? "comma" : "single";
152
- const insertLocation =
153
- expr.properties[expr.properties.length - 1].range[1];
187
+ const insertLocation = /** @type {Range} */ (
188
+ expr.properties[expr.properties.length - 1].range
189
+ )[1];
154
190
  return {
155
191
  expressions,
156
192
  otherElements,
@@ -162,14 +198,19 @@ class WorkerPlugin {
162
198
  };
163
199
 
164
200
  /**
165
- * @param {JavascriptParser} parser the parser
166
- * @param {object} parserOptions options
201
+ * @param {Parser} parser parser parser
202
+ * @param {JavascriptParserOptions} parserOptions parserOptions
203
+ * @returns {void}
167
204
  */
168
205
  const parserPlugin = (parser, parserOptions) => {
169
206
  if (parserOptions.worker === false) return;
170
207
  const options = !Array.isArray(parserOptions.worker)
171
208
  ? ["..."]
172
209
  : parserOptions.worker;
210
+ /**
211
+ * @param {CallExpression} expr expression
212
+ * @returns {boolean | void} true when handled
213
+ */
173
214
  const handleNewWorker = expr => {
174
215
  if (expr.arguments.length === 0 || expr.arguments.length > 2)
175
216
  return;
@@ -190,15 +231,19 @@ class WorkerPlugin {
190
231
  } = arg2 && arg2.type === "ObjectExpression"
191
232
  ? parseObjectExpression(parser, arg2)
192
233
  : {
234
+ /** @type {Record<string, Expression | Pattern>} */
193
235
  expressions: {},
194
236
  otherElements: [],
237
+ /** @type {Record<string, any>} */
195
238
  values: {},
196
239
  spread: false,
197
240
  insertType: arg2 ? "spread" : "argument",
198
- insertLocation: arg2 ? arg2.range : arg1.range[1]
199
- };
241
+ insertLocation: arg2
242
+ ? /** @type {Range} */ (arg2.range)
243
+ : /** @type {Range} */ (arg1.range)[1]
244
+ };
200
245
  const { options: importOptions, errors: commentErrors } =
201
- parser.parseCommentOptions(expr.range);
246
+ parser.parseCommentOptions(/** @type {Range} */ (expr.range));
202
247
 
203
248
  if (commentErrors) {
204
249
  for (const e of commentErrors) {
@@ -213,7 +258,7 @@ class WorkerPlugin {
213
258
  }
214
259
 
215
260
  /** @type {EntryOptions} */
216
- let entryOptions = {};
261
+ const entryOptions = {};
217
262
 
218
263
  if (importOptions) {
219
264
  if (importOptions.webpackIgnore !== undefined) {
@@ -221,13 +266,11 @@ class WorkerPlugin {
221
266
  parser.state.module.addWarning(
222
267
  new UnsupportedFeatureWarning(
223
268
  `\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
224
- expr.loc
269
+ /** @type {DependencyLocation} */ (expr.loc)
225
270
  )
226
271
  );
227
- } else {
228
- if (importOptions.webpackIgnore) {
229
- return false;
230
- }
272
+ } else if (importOptions.webpackIgnore) {
273
+ return false;
231
274
  }
232
275
  }
233
276
  if (importOptions.webpackEntryOptions !== undefined) {
@@ -238,7 +281,7 @@ class WorkerPlugin {
238
281
  parser.state.module.addWarning(
239
282
  new UnsupportedFeatureWarning(
240
283
  `\`webpackEntryOptions\` expected a object, but received: ${importOptions.webpackEntryOptions}.`,
241
- expr.loc
284
+ /** @type {DependencyLocation} */ (expr.loc)
242
285
  )
243
286
  );
244
287
  } else {
@@ -253,7 +296,7 @@ class WorkerPlugin {
253
296
  parser.state.module.addWarning(
254
297
  new UnsupportedFeatureWarning(
255
298
  `\`webpackChunkName\` expected a string, but received: ${importOptions.webpackChunkName}.`,
256
- expr.loc
299
+ /** @type {DependencyLocation} */ (expr.loc)
257
300
  )
258
301
  );
259
302
  } else {
@@ -271,16 +314,19 @@ class WorkerPlugin {
271
314
  }
272
315
 
273
316
  if (entryOptions.runtime === undefined) {
274
- let i = workerIndexMap.get(parser.state) || 0;
317
+ const i = workerIndexMap.get(parser.state) || 0;
275
318
  workerIndexMap.set(parser.state, i + 1);
276
- let name = `${cachedContextify(
319
+ const name = `${cachedContextify(
277
320
  parser.state.module.identifier()
278
321
  )}|${i}`;
279
- const hash = createHash(compilation.outputOptions.hashFunction);
280
- hash.update(name);
281
- const digest = /** @type {string} */ (
282
- hash.digest(compilation.outputOptions.hashDigest)
322
+ const hash = createHash(
323
+ /** @type {Algorithm} */
324
+ (compilation.outputOptions.hashFunction)
283
325
  );
326
+ hash.update(name);
327
+ const digest =
328
+ /** @type {string} */
329
+ (hash.digest(compilation.outputOptions.hashDigest));
284
330
  entryOptions.runtime = digest.slice(
285
331
  0,
286
332
  compilation.outputOptions.hashDigestLength
@@ -296,16 +342,22 @@ class WorkerPlugin {
296
342
  }
297
343
  });
298
344
  block.loc = expr.loc;
299
- const dep = new WorkerDependency(url.string, range);
300
- dep.loc = expr.loc;
345
+ const dep = new WorkerDependency(
346
+ /** @type {string} */ (url.string),
347
+ range,
348
+ {
349
+ publicPath: this._workerPublicPath
350
+ }
351
+ );
352
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
301
353
  block.addDependency(dep);
302
354
  parser.state.module.addBlock(block);
303
355
 
304
356
  if (compilation.outputOptions.trustedTypes) {
305
357
  const dep = new CreateScriptUrlDependency(
306
- expr.arguments[0].range
358
+ /** @type {Range} */ (expr.arguments[0].range)
307
359
  );
308
- dep.loc = expr.loc;
360
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
309
361
  parser.state.module.addDependency(dep);
310
362
  }
311
363
 
@@ -314,11 +366,12 @@ class WorkerPlugin {
314
366
  if (options.type !== false) {
315
367
  const dep = new ConstDependency(
316
368
  this._module ? '"module"' : "undefined",
317
- expr.range
369
+ /** @type {Range} */ (expr.range)
318
370
  );
319
- dep.loc = expr.loc;
371
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
320
372
  parser.state.module.addPresentationalDependency(dep);
321
- expressions.type = undefined;
373
+ /** @type {TODO} */
374
+ (expressions).type = undefined;
322
375
  }
323
376
  } else if (insertType === "comma") {
324
377
  if (this._module || hasSpreadInOptions) {
@@ -326,31 +379,29 @@ class WorkerPlugin {
326
379
  `, type: ${this._module ? '"module"' : "undefined"}`,
327
380
  insertLocation
328
381
  );
329
- dep.loc = expr.loc;
382
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
330
383
  parser.state.module.addPresentationalDependency(dep);
331
384
  }
332
385
  } else if (insertType === "spread") {
333
386
  const dep1 = new ConstDependency(
334
387
  "Object.assign({}, ",
335
- insertLocation[0]
388
+ /** @type {Range} */ (insertLocation)[0]
336
389
  );
337
390
  const dep2 = new ConstDependency(
338
391
  `, { type: ${this._module ? '"module"' : "undefined"} })`,
339
- insertLocation[1]
392
+ /** @type {Range} */ (insertLocation)[1]
340
393
  );
341
- dep1.loc = expr.loc;
342
- dep2.loc = expr.loc;
394
+ dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
395
+ dep2.loc = /** @type {DependencyLocation} */ (expr.loc);
343
396
  parser.state.module.addPresentationalDependency(dep1);
344
397
  parser.state.module.addPresentationalDependency(dep2);
345
- } else if (insertType === "argument") {
346
- if (this._module) {
347
- const dep = new ConstDependency(
348
- ', { type: "module" }',
349
- insertLocation
350
- );
351
- dep.loc = expr.loc;
352
- parser.state.module.addPresentationalDependency(dep);
353
- }
398
+ } else if (insertType === "argument" && this._module) {
399
+ const dep = new ConstDependency(
400
+ ', { type: "module" }',
401
+ insertLocation
402
+ );
403
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
404
+ parser.state.module.addPresentationalDependency(dep);
354
405
  }
355
406
 
356
407
  parser.walkExpression(expr.callee);
@@ -366,11 +417,42 @@ class WorkerPlugin {
366
417
 
367
418
  return true;
368
419
  };
420
+ /**
421
+ * @param {string} item item
422
+ */
369
423
  const processItem = item => {
370
- if (item.endsWith("()")) {
424
+ if (
425
+ item.startsWith("*") &&
426
+ item.includes(".") &&
427
+ item.endsWith("()")
428
+ ) {
429
+ const firstDot = item.indexOf(".");
430
+ const pattern = item.slice(1, firstDot);
431
+ const itemMembers = item.slice(firstDot + 1, -2);
432
+
433
+ parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
434
+ if (decl.id.type === "Identifier" && decl.id.name === pattern) {
435
+ parser.tagVariable(decl.id.name, WorkerSpecifierTag);
436
+ return true;
437
+ }
438
+ });
439
+ parser.hooks.pattern.for(pattern).tap(PLUGIN_NAME, pattern => {
440
+ parser.tagVariable(pattern.name, WorkerSpecifierTag);
441
+ return true;
442
+ });
443
+ parser.hooks.callMemberChain
444
+ .for(WorkerSpecifierTag)
445
+ .tap(PLUGIN_NAME, (expression, members) => {
446
+ if (itemMembers !== members.join(".")) {
447
+ return;
448
+ }
449
+
450
+ return handleNewWorker(expression);
451
+ });
452
+ } else if (item.endsWith("()")) {
371
453
  parser.hooks.call
372
454
  .for(item.slice(0, -2))
373
- .tap("WorkerPlugin", handleNewWorker);
455
+ .tap(PLUGIN_NAME, handleNewWorker);
374
456
  } else {
375
457
  const match = /^(.+?)(\(\))?\s+from\s+(.+)$/.exec(item);
376
458
  if (match) {
@@ -379,7 +461,7 @@ class WorkerPlugin {
379
461
  const source = match[3];
380
462
  (call ? parser.hooks.call : parser.hooks.new)
381
463
  .for(harmonySpecifierTag)
382
- .tap("WorkerPlugin", expr => {
464
+ .tap(PLUGIN_NAME, expr => {
383
465
  const settings = /** @type {HarmonySettings} */ (
384
466
  parser.currentTagData
385
467
  );
@@ -393,22 +475,24 @@ class WorkerPlugin {
393
475
  return handleNewWorker(expr);
394
476
  });
395
477
  } else {
396
- parser.hooks.new.for(item).tap("WorkerPlugin", handleNewWorker);
478
+ parser.hooks.new.for(item).tap(PLUGIN_NAME, handleNewWorker);
397
479
  }
398
480
  }
399
481
  };
400
482
  for (const item of options) {
401
483
  if (item === "...") {
402
- DEFAULT_SYNTAX.forEach(processItem);
484
+ for (const itemFromDefault of DEFAULT_SYNTAX) {
485
+ processItem(itemFromDefault);
486
+ }
403
487
  } else processItem(item);
404
488
  }
405
489
  };
406
490
  normalModuleFactory.hooks.parser
407
- .for("javascript/auto")
408
- .tap("WorkerPlugin", parserPlugin);
491
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
492
+ .tap(PLUGIN_NAME, parserPlugin);
409
493
  normalModuleFactory.hooks.parser
410
- .for("javascript/esm")
411
- .tap("WorkerPlugin", parserPlugin);
494
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
495
+ .tap(PLUGIN_NAME, parserPlugin);
412
496
  }
413
497
  );
414
498
  }
@@ -5,6 +5,15 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("estree").ArrowFunctionExpression} ArrowFunctionExpression */
9
+ /** @typedef {import("estree").Expression} Expression */
10
+ /** @typedef {import("estree").FunctionExpression} FunctionExpression */
11
+ /** @typedef {import("estree").SpreadElement} SpreadElement */
12
+
13
+ /**
14
+ * @param {Expression | SpreadElement} expr expressions
15
+ * @returns {{fn: FunctionExpression | ArrowFunctionExpression, expressions: (Expression | SpreadElement)[], needThis: boolean | undefined } | undefined} function expression with additional information
16
+ */
8
17
  module.exports = expr => {
9
18
  // <FunctionExpression>
10
19
  if (
@@ -10,9 +10,11 @@ const { UsageState } = require("../ExportsInfo");
10
10
  /** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
11
11
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
12
12
 
13
+ /** @typedef {string[][]} ReferencedExports */
14
+
13
15
  /**
14
16
  * @param {RuntimeSpec} runtime the runtime
15
- * @param {string[][]} referencedExports list of referenced exports, will be added to
17
+ * @param {ReferencedExports} referencedExports list of referenced exports, will be added to
16
18
  * @param {string[]} prefix export prefix
17
19
  * @param {ExportInfo=} exportInfo the export info
18
20
  * @param {boolean} defaultPointsToSelf when true, using default will reference itself
@@ -16,6 +16,7 @@ class ElectronTargetPlugin {
16
16
  constructor(context) {
17
17
  this._context = context;
18
18
  }
19
+
19
20
  /**
20
21
  * Apply the plugin
21
22
  * @param {Compiler} compiler the compiler instance
@@ -4,6 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ const RuntimeGlobals = require("../RuntimeGlobals");
7
8
  const RuntimeModule = require("../RuntimeModule");
8
9
 
9
10
  class ExportWebpackRequireRuntimeModule extends RuntimeModule {
@@ -19,10 +20,10 @@ class ExportWebpackRequireRuntimeModule extends RuntimeModule {
19
20
  }
20
21
 
21
22
  /**
22
- * @returns {string} runtime code
23
+ * @returns {string | null} runtime code
23
24
  */
24
25
  generate() {
25
- return "export default __webpack_require__;";
26
+ return `export default ${RuntimeGlobals.require};`;
26
27
  }
27
28
  }
28
29
 
@@ -5,20 +5,22 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { ConcatSource, RawSource } = require("webpack-sources");
8
+ const { ConcatSource } = require("webpack-sources");
9
9
  const { RuntimeGlobals } = require("..");
10
10
  const HotUpdateChunk = require("../HotUpdateChunk");
11
11
  const Template = require("../Template");
12
+ const { getAllChunks } = require("../javascript/ChunkHelpers");
12
13
  const {
14
+ chunkHasJs,
13
15
  getCompilationHooks,
14
16
  getChunkFilenameTemplate
15
17
  } = require("../javascript/JavascriptModulesPlugin");
16
- const {
17
- generateEntryStartup,
18
- updateHashForEntryStartup
19
- } = require("../javascript/StartupHelpers");
18
+ const { updateHashForEntryStartup } = require("../javascript/StartupHelpers");
19
+ const { getUndoPath } = require("../util/identifier");
20
20
 
21
+ /** @typedef {import("../Chunk")} Chunk */
21
22
  /** @typedef {import("../Compiler")} Compiler */
23
+ /** @typedef {import("../Entrypoint")} Entrypoint */
22
24
 
23
25
  class ModuleChunkFormatPlugin {
24
26
  /**
@@ -56,9 +58,9 @@ class ModuleChunkFormatPlugin {
56
58
  } else {
57
59
  source.add(`export const id = ${JSON.stringify(chunk.id)};\n`);
58
60
  source.add(`export const ids = ${JSON.stringify(chunk.ids)};\n`);
59
- source.add(`export const modules = `);
61
+ source.add("export const modules = ");
60
62
  source.add(modules);
61
- source.add(`;\n`);
63
+ source.add(";\n");
62
64
  const runtimeModules =
63
65
  chunkGraph.getChunkRuntimeModulesInOrder(chunk);
64
66
  if (runtimeModules.length > 0) {
@@ -74,7 +76,9 @@ class ModuleChunkFormatPlugin {
74
76
  chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)
75
77
  );
76
78
  if (entries.length > 0) {
77
- const runtimeChunk = entries[0][1].getRuntimeChunk();
79
+ const runtimeChunk =
80
+ /** @type {Entrypoint[][]} */
81
+ (entries)[0][1].getRuntimeChunk();
78
82
  const currentOutputName = compilation
79
83
  .getPath(
80
84
  getChunkFilenameTemplate(chunk, compilation.outputOptions),
@@ -83,64 +87,97 @@ class ModuleChunkFormatPlugin {
83
87
  contentHashType: "javascript"
84
88
  }
85
89
  )
86
- .split("/");
87
- const runtimeOutputName = compilation
88
- .getPath(
89
- getChunkFilenameTemplate(
90
- runtimeChunk,
91
- compilation.outputOptions
92
- ),
93
- {
94
- chunk: runtimeChunk,
95
- contentHashType: "javascript"
96
- }
97
- )
90
+ .replace(/^\/+/g, "")
98
91
  .split("/");
99
92
 
100
- // remove filename, we only need the directory
101
- const outputFilename = currentOutputName.pop();
93
+ /**
94
+ * @param {Chunk} chunk the chunk
95
+ * @returns {string} the relative path
96
+ */
97
+ const getRelativePath = chunk => {
98
+ const baseOutputName = currentOutputName.slice();
99
+ const chunkOutputName = compilation
100
+ .getPath(
101
+ getChunkFilenameTemplate(
102
+ chunk,
103
+ compilation.outputOptions
104
+ ),
105
+ {
106
+ chunk,
107
+ contentHashType: "javascript"
108
+ }
109
+ )
110
+ .replace(/^\/+/g, "")
111
+ .split("/");
102
112
 
103
- // remove common parts
104
- while (
105
- currentOutputName.length > 0 &&
106
- runtimeOutputName.length > 0 &&
107
- currentOutputName[0] === runtimeOutputName[0]
108
- ) {
109
- currentOutputName.shift();
110
- runtimeOutputName.shift();
111
- }
112
-
113
- // create final path
114
- const runtimePath =
115
- (currentOutputName.length > 0
116
- ? "../".repeat(currentOutputName.length)
117
- : "./") + runtimeOutputName.join("/");
113
+ // remove common parts except filename
114
+ while (
115
+ baseOutputName.length > 1 &&
116
+ chunkOutputName.length > 1 &&
117
+ baseOutputName[0] === chunkOutputName[0]
118
+ ) {
119
+ baseOutputName.shift();
120
+ chunkOutputName.shift();
121
+ }
122
+ const last = chunkOutputName.join("/");
123
+ // create final path
124
+ return (
125
+ getUndoPath(baseOutputName.join("/"), last, true) + last
126
+ );
127
+ };
118
128
 
119
129
  const entrySource = new ConcatSource();
120
130
  entrySource.add(source);
121
131
  entrySource.add(";\n\n// load runtime\n");
122
132
  entrySource.add(
123
- `import __webpack_require__ from ${JSON.stringify(
124
- runtimePath
133
+ `import ${RuntimeGlobals.require} from ${JSON.stringify(
134
+ getRelativePath(/** @type {Chunk} */ (runtimeChunk))
125
135
  )};\n`
126
136
  );
127
- entrySource.add(
128
- `import * as __webpack_self_exports__ from ${JSON.stringify(
129
- "./" + outputFilename
130
- )};\n`
131
- );
132
- entrySource.add(
133
- `${RuntimeGlobals.externalInstallChunk}(__webpack_self_exports__);\n`
134
- );
135
- const startupSource = new RawSource(
136
- generateEntryStartup(
137
- chunkGraph,
138
- runtimeTemplate,
139
- entries,
140
- chunk,
141
- false
142
- )
137
+
138
+ const startupSource = new ConcatSource();
139
+ startupSource.add(
140
+ `var __webpack_exec__ = ${runtimeTemplate.returningFunction(
141
+ `${RuntimeGlobals.require}(${RuntimeGlobals.entryModuleId} = moduleId)`,
142
+ "moduleId"
143
+ )}\n`
143
144
  );
145
+
146
+ const loadedChunks = new Set();
147
+ let index = 0;
148
+ for (let i = 0; i < entries.length; i++) {
149
+ const [module, entrypoint] = entries[i];
150
+ const final = i + 1 === entries.length;
151
+ const moduleId = chunkGraph.getModuleId(module);
152
+ const chunks = getAllChunks(
153
+ /** @type {Entrypoint} */ (entrypoint),
154
+ /** @type {Chunk} */ (runtimeChunk),
155
+ undefined
156
+ );
157
+ for (const chunk of chunks) {
158
+ if (
159
+ loadedChunks.has(chunk) ||
160
+ !chunkHasJs(chunk, chunkGraph)
161
+ )
162
+ continue;
163
+ loadedChunks.add(chunk);
164
+ startupSource.add(
165
+ `import * as __webpack_chunk_${index}__ from ${JSON.stringify(
166
+ getRelativePath(chunk)
167
+ )};\n`
168
+ );
169
+ startupSource.add(
170
+ `${RuntimeGlobals.externalInstallChunk}(__webpack_chunk_${index}__);\n`
171
+ );
172
+ index++;
173
+ }
174
+ startupSource.add(
175
+ `${
176
+ final ? `var ${RuntimeGlobals.exports} = ` : ""
177
+ }__webpack_exec__(${JSON.stringify(moduleId)});\n`
178
+ );
179
+ }
180
+
144
181
  entrySource.add(
145
182
  hooks.renderStartup.call(
146
183
  startupSource,