webpack 5.76.1 → 5.88.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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -6,15 +6,25 @@
6
6
  "use strict";
7
7
 
8
8
  const { pathToFileURL } = require("url");
9
+ const {
10
+ JAVASCRIPT_MODULE_TYPE_AUTO,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("../ModuleTypeConstants");
9
13
  const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
10
14
  const { approve } = require("../javascript/JavascriptParserHelpers");
11
15
  const InnerGraph = require("../optimize/InnerGraph");
12
16
  const URLDependency = require("./URLDependency");
13
17
 
14
18
  /** @typedef {import("estree").NewExpression} NewExpressionNode */
19
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
15
20
  /** @typedef {import("../Compiler")} Compiler */
21
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
16
22
  /** @typedef {import("../NormalModule")} NormalModule */
17
23
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
24
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
25
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
26
+
27
+ const PLUGIN_NAME = "URLPlugin";
18
28
 
19
29
  class URLPlugin {
20
30
  /**
@@ -22,7 +32,7 @@ class URLPlugin {
22
32
  */
23
33
  apply(compiler) {
24
34
  compiler.hooks.compilation.tap(
25
- "URLPlugin",
35
+ PLUGIN_NAME,
26
36
  (compilation, { normalModuleFactory }) => {
27
37
  compilation.dependencyFactories.set(URLDependency, normalModuleFactory);
28
38
  compilation.dependencyTemplates.set(
@@ -37,9 +47,11 @@ class URLPlugin {
37
47
  const getUrl = module => {
38
48
  return pathToFileURL(module.resource);
39
49
  };
50
+
40
51
  /**
41
- * @param {JavascriptParser} parser parser
42
- * @param {object} parserOptions options
52
+ * @param {Parser} parser parser parser
53
+ * @param {JavascriptParserOptions} parserOptions parserOptions
54
+ * @returns {void}
43
55
  */
44
56
  const parserCallback = (parser, parserOptions) => {
45
57
  if (parserOptions.url === false) return;
@@ -71,24 +83,22 @@ class URLPlugin {
71
83
  )
72
84
  return;
73
85
 
74
- const request = parser.evaluateExpression(arg1).asString();
75
-
76
- return request;
86
+ return parser.evaluateExpression(arg1).asString();
77
87
  };
78
88
 
79
- parser.hooks.canRename.for("URL").tap("URLPlugin", approve);
89
+ parser.hooks.canRename.for("URL").tap(PLUGIN_NAME, approve);
80
90
  parser.hooks.evaluateNewExpression
81
91
  .for("URL")
82
- .tap("URLPlugin", expr => {
92
+ .tap(PLUGIN_NAME, expr => {
83
93
  const request = getUrlRequest(expr);
84
94
  if (!request) return;
85
95
  const url = new URL(request, getUrl(parser.state.module));
86
96
 
87
97
  return new BasicEvaluatedExpression()
88
98
  .setString(url.toString())
89
- .setRange(expr.range);
99
+ .setRange(/** @type {Range} */ (expr.range));
90
100
  });
91
- parser.hooks.new.for("URL").tap("URLPlugin", _expr => {
101
+ parser.hooks.new.for("URL").tap(PLUGIN_NAME, _expr => {
92
102
  const expr = /** @type {NewExpressionNode} */ (_expr);
93
103
 
94
104
  const request = getUrlRequest(expr);
@@ -98,16 +108,19 @@ class URLPlugin {
98
108
  const [arg1, arg2] = expr.arguments;
99
109
  const dep = new URLDependency(
100
110
  request,
101
- [arg1.range[0], arg2.range[1]],
102
- expr.range,
111
+ [
112
+ /** @type {Range} */ (arg1.range)[0],
113
+ /** @type {Range} */ (arg2.range)[1]
114
+ ],
115
+ /** @type {Range} */ (expr.range),
103
116
  relative
104
117
  );
105
- dep.loc = expr.loc;
118
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
106
119
  parser.state.current.addDependency(dep);
107
120
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
108
121
  return true;
109
122
  });
110
- parser.hooks.isPure.for("NewExpression").tap("URLPlugin", _expr => {
123
+ parser.hooks.isPure.for("NewExpression").tap(PLUGIN_NAME, _expr => {
111
124
  const expr = /** @type {NewExpressionNode} */ (_expr);
112
125
  const { callee } = expr;
113
126
  if (callee.type !== "Identifier") return;
@@ -121,12 +134,12 @@ class URLPlugin {
121
134
  };
122
135
 
123
136
  normalModuleFactory.hooks.parser
124
- .for("javascript/auto")
125
- .tap("URLPlugin", parserCallback);
137
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
138
+ .tap(PLUGIN_NAME, parserCallback);
126
139
 
127
140
  normalModuleFactory.hooks.parser
128
- .for("javascript/esm")
129
- .tap("URLPlugin", parserCallback);
141
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
142
+ .tap(PLUGIN_NAME, parserCallback);
130
143
  }
131
144
  );
132
145
  }
@@ -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
 
@@ -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
  );
@@ -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,22 +25,38 @@ 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 */
34
48
  /** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
35
49
 
50
+ /**
51
+ * @param {NormalModule} module module
52
+ * @returns {string} url
53
+ */
36
54
  const getUrl = module => {
37
55
  return pathToFileURL(module.resource).toString();
38
56
  };
39
57
 
58
+ const WorkerSpecifierTag = Symbol("worker specifier tag");
59
+
40
60
  const DEFAULT_SYNTAX = [
41
61
  "Worker",
42
62
  "SharedWorker",
@@ -47,11 +67,20 @@ const DEFAULT_SYNTAX = [
47
67
  /** @type {WeakMap<ParserState, number>} */
48
68
  const workerIndexMap = new WeakMap();
49
69
 
70
+ const PLUGIN_NAME = "WorkerPlugin";
71
+
50
72
  class WorkerPlugin {
51
- constructor(chunkLoading, wasmLoading, module) {
73
+ /**
74
+ * @param {ChunkLoading} chunkLoading chunk loading
75
+ * @param {WasmLoading} wasmLoading wasm loading
76
+ * @param {OutputModule} module output module
77
+ * @param {WorkerPublicPath} workerPublicPath worker public path
78
+ */
79
+ constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
52
80
  this._chunkLoading = chunkLoading;
53
81
  this._wasmLoading = wasmLoading;
54
82
  this._module = module;
83
+ this._workerPublicPath = workerPublicPath;
55
84
  }
56
85
  /**
57
86
  * Apply the plugin
@@ -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
  /**
@@ -162,14 +197,19 @@ class WorkerPlugin {
162
197
  };
163
198
 
164
199
  /**
165
- * @param {JavascriptParser} parser the parser
166
- * @param {object} parserOptions options
200
+ * @param {Parser} parser parser parser
201
+ * @param {JavascriptParserOptions} parserOptions parserOptions
202
+ * @returns {void}
167
203
  */
168
204
  const parserPlugin = (parser, parserOptions) => {
169
205
  if (parserOptions.worker === false) return;
170
206
  const options = !Array.isArray(parserOptions.worker)
171
207
  ? ["..."]
172
208
  : parserOptions.worker;
209
+ /**
210
+ * @param {CallExpression} expr expression
211
+ * @returns {boolean | void} true when handled
212
+ */
173
213
  const handleNewWorker = expr => {
174
214
  if (expr.arguments.length === 0 || expr.arguments.length > 2)
175
215
  return;
@@ -197,10 +237,12 @@ class WorkerPlugin {
197
237
  values: {},
198
238
  spread: false,
199
239
  insertType: arg2 ? "spread" : "argument",
200
- insertLocation: arg2 ? arg2.range : arg1.range[1]
240
+ insertLocation: arg2
241
+ ? /** @type {Range} */ (arg2.range)
242
+ : /** @type {Range} */ (arg1.range)[1]
201
243
  };
202
244
  const { options: importOptions, errors: commentErrors } =
203
- parser.parseCommentOptions(expr.range);
245
+ parser.parseCommentOptions(/** @type {Range} */ (expr.range));
204
246
 
205
247
  if (commentErrors) {
206
248
  for (const e of commentErrors) {
@@ -223,7 +265,7 @@ class WorkerPlugin {
223
265
  parser.state.module.addWarning(
224
266
  new UnsupportedFeatureWarning(
225
267
  `\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
226
- expr.loc
268
+ /** @type {DependencyLocation} */ (expr.loc)
227
269
  )
228
270
  );
229
271
  } else {
@@ -240,7 +282,7 @@ class WorkerPlugin {
240
282
  parser.state.module.addWarning(
241
283
  new UnsupportedFeatureWarning(
242
284
  `\`webpackEntryOptions\` expected a object, but received: ${importOptions.webpackEntryOptions}.`,
243
- expr.loc
285
+ /** @type {DependencyLocation} */ (expr.loc)
244
286
  )
245
287
  );
246
288
  } else {
@@ -255,7 +297,7 @@ class WorkerPlugin {
255
297
  parser.state.module.addWarning(
256
298
  new UnsupportedFeatureWarning(
257
299
  `\`webpackChunkName\` expected a string, but received: ${importOptions.webpackChunkName}.`,
258
- expr.loc
300
+ /** @type {DependencyLocation} */ (expr.loc)
259
301
  )
260
302
  );
261
303
  } else {
@@ -298,16 +340,22 @@ class WorkerPlugin {
298
340
  }
299
341
  });
300
342
  block.loc = expr.loc;
301
- const dep = new WorkerDependency(url.string, range);
302
- dep.loc = expr.loc;
343
+ const dep = new WorkerDependency(
344
+ /** @type {string} */ (url.string),
345
+ range,
346
+ {
347
+ publicPath: this._workerPublicPath
348
+ }
349
+ );
350
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
303
351
  block.addDependency(dep);
304
352
  parser.state.module.addBlock(block);
305
353
 
306
354
  if (compilation.outputOptions.trustedTypes) {
307
355
  const dep = new CreateScriptUrlDependency(
308
- expr.arguments[0].range
356
+ /** @type {Range} */ (expr.arguments[0].range)
309
357
  );
310
- dep.loc = expr.loc;
358
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
311
359
  parser.state.module.addDependency(dep);
312
360
  }
313
361
 
@@ -316,9 +364,9 @@ class WorkerPlugin {
316
364
  if (options.type !== false) {
317
365
  const dep = new ConstDependency(
318
366
  this._module ? '"module"' : "undefined",
319
- expr.range
367
+ /** @type {Range} */ (expr.range)
320
368
  );
321
- dep.loc = expr.loc;
369
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
322
370
  parser.state.module.addPresentationalDependency(dep);
323
371
  expressions.type = undefined;
324
372
  }
@@ -328,20 +376,20 @@ class WorkerPlugin {
328
376
  `, type: ${this._module ? '"module"' : "undefined"}`,
329
377
  insertLocation
330
378
  );
331
- dep.loc = expr.loc;
379
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
332
380
  parser.state.module.addPresentationalDependency(dep);
333
381
  }
334
382
  } else if (insertType === "spread") {
335
383
  const dep1 = new ConstDependency(
336
384
  "Object.assign({}, ",
337
- insertLocation[0]
385
+ /** @type {Range} */ (insertLocation)[0]
338
386
  );
339
387
  const dep2 = new ConstDependency(
340
388
  `, { type: ${this._module ? '"module"' : "undefined"} })`,
341
- insertLocation[1]
389
+ /** @type {Range} */ (insertLocation)[1]
342
390
  );
343
- dep1.loc = expr.loc;
344
- dep2.loc = expr.loc;
391
+ dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
392
+ dep2.loc = /** @type {DependencyLocation} */ (expr.loc);
345
393
  parser.state.module.addPresentationalDependency(dep1);
346
394
  parser.state.module.addPresentationalDependency(dep2);
347
395
  } else if (insertType === "argument") {
@@ -350,7 +398,7 @@ class WorkerPlugin {
350
398
  ', { type: "module" }',
351
399
  insertLocation
352
400
  );
353
- dep.loc = expr.loc;
401
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
354
402
  parser.state.module.addPresentationalDependency(dep);
355
403
  }
356
404
  }
@@ -368,11 +416,36 @@ class WorkerPlugin {
368
416
 
369
417
  return true;
370
418
  };
419
+ /**
420
+ * @param {string} item item
421
+ */
371
422
  const processItem = item => {
372
- if (item.endsWith("()")) {
423
+ if (
424
+ item.startsWith("*") &&
425
+ item.includes(".") &&
426
+ item.endsWith("()")
427
+ ) {
428
+ const firstDot = item.indexOf(".");
429
+ const pattern = item.slice(1, firstDot);
430
+ const itemMembers = item.slice(firstDot + 1, -2);
431
+
432
+ parser.hooks.pattern.for(pattern).tap(PLUGIN_NAME, pattern => {
433
+ parser.tagVariable(pattern.name, WorkerSpecifierTag);
434
+ return true;
435
+ });
436
+ parser.hooks.callMemberChain
437
+ .for(WorkerSpecifierTag)
438
+ .tap(PLUGIN_NAME, (expression, members) => {
439
+ if (itemMembers !== members.join(".")) {
440
+ return;
441
+ }
442
+
443
+ return handleNewWorker(expression);
444
+ });
445
+ } else if (item.endsWith("()")) {
373
446
  parser.hooks.call
374
447
  .for(item.slice(0, -2))
375
- .tap("WorkerPlugin", handleNewWorker);
448
+ .tap(PLUGIN_NAME, handleNewWorker);
376
449
  } else {
377
450
  const match = /^(.+?)(\(\))?\s+from\s+(.+)$/.exec(item);
378
451
  if (match) {
@@ -381,7 +454,7 @@ class WorkerPlugin {
381
454
  const source = match[3];
382
455
  (call ? parser.hooks.call : parser.hooks.new)
383
456
  .for(harmonySpecifierTag)
384
- .tap("WorkerPlugin", expr => {
457
+ .tap(PLUGIN_NAME, expr => {
385
458
  const settings = /** @type {HarmonySettings} */ (
386
459
  parser.currentTagData
387
460
  );
@@ -395,7 +468,7 @@ class WorkerPlugin {
395
468
  return handleNewWorker(expr);
396
469
  });
397
470
  } else {
398
- parser.hooks.new.for(item).tap("WorkerPlugin", handleNewWorker);
471
+ parser.hooks.new.for(item).tap(PLUGIN_NAME, handleNewWorker);
399
472
  }
400
473
  }
401
474
  };
@@ -406,11 +479,11 @@ class WorkerPlugin {
406
479
  }
407
480
  };
408
481
  normalModuleFactory.hooks.parser
409
- .for("javascript/auto")
410
- .tap("WorkerPlugin", parserPlugin);
482
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
483
+ .tap(PLUGIN_NAME, parserPlugin);
411
484
  normalModuleFactory.hooks.parser
412
- .for("javascript/esm")
413
- .tap("WorkerPlugin", parserPlugin);
485
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
486
+ .tap(PLUGIN_NAME, parserPlugin);
414
487
  }
415
488
  );
416
489
  }
@@ -5,6 +5,13 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("estree").Expression} Expression */
9
+ /** @typedef {import("estree").SpreadElement} SpreadElement */
10
+
11
+ /**
12
+ * @param {Expression} expr expressions
13
+ * @returns {{fn: TODO, expressions: (Expression | SpreadElement)[], needThis: boolean | undefined }} function expression with additional information
14
+ */
8
15
  module.exports = expr => {
9
16
  // <FunctionExpression>
10
17
  if (
@@ -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