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,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const Generator = require("../Generator");
9
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
9
10
  const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
10
11
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
11
12
  const { compareModulesByIdentifier } = require("../util/comparators");
@@ -13,6 +14,7 @@ const memoize = require("../util/memoize");
13
14
  const WebAssemblyInInitialChunkError = require("./WebAssemblyInInitialChunkError");
14
15
 
15
16
  /** @typedef {import("webpack-sources").Source} Source */
17
+ /** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
16
18
  /** @typedef {import("../Compiler")} Compiler */
17
19
  /** @typedef {import("../Module")} Module */
18
20
  /** @typedef {import("../ModuleTemplate")} ModuleTemplate */
@@ -26,7 +28,17 @@ const getWebAssemblyJavascriptGenerator = memoize(() =>
26
28
  );
27
29
  const getWebAssemblyParser = memoize(() => require("./WebAssemblyParser"));
28
30
 
31
+ const PLUGIN_NAME = "WebAssemblyModulesPlugin";
32
+
33
+ /**
34
+ * @typedef {Object} WebAssemblyModulesPluginOptions
35
+ * @property {boolean} [mangleImports] mangle imports
36
+ */
37
+
29
38
  class WebAssemblyModulesPlugin {
39
+ /**
40
+ * @param {WebAssemblyModulesPluginOptions} options options
41
+ */
30
42
  constructor(options) {
31
43
  this.options = options;
32
44
  }
@@ -38,7 +50,7 @@ class WebAssemblyModulesPlugin {
38
50
  */
39
51
  apply(compiler) {
40
52
  compiler.hooks.compilation.tap(
41
- "WebAssemblyModulesPlugin",
53
+ PLUGIN_NAME,
42
54
  (compilation, { normalModuleFactory }) => {
43
55
  compilation.dependencyFactories.set(
44
56
  WebAssemblyImportDependency,
@@ -51,16 +63,16 @@ class WebAssemblyModulesPlugin {
51
63
  );
52
64
 
53
65
  normalModuleFactory.hooks.createParser
54
- .for("webassembly/sync")
55
- .tap("WebAssemblyModulesPlugin", () => {
66
+ .for(WEBASSEMBLY_MODULE_TYPE_SYNC)
67
+ .tap(PLUGIN_NAME, () => {
56
68
  const WebAssemblyParser = getWebAssemblyParser();
57
69
 
58
70
  return new WebAssemblyParser();
59
71
  });
60
72
 
61
73
  normalModuleFactory.hooks.createGenerator
62
- .for("webassembly/sync")
63
- .tap("WebAssemblyModulesPlugin", () => {
74
+ .for(WEBASSEMBLY_MODULE_TYPE_SYNC)
75
+ .tap(PLUGIN_NAME, () => {
64
76
  const WebAssemblyJavascriptGenerator =
65
77
  getWebAssemblyJavascriptGenerator();
66
78
  const WebAssemblyGenerator = getWebAssemblyGenerator();
@@ -71,53 +83,51 @@ class WebAssemblyModulesPlugin {
71
83
  });
72
84
  });
73
85
 
74
- compilation.hooks.renderManifest.tap(
75
- "WebAssemblyModulesPlugin",
76
- (result, options) => {
77
- const { chunkGraph } = compilation;
78
- const { chunk, outputOptions, codeGenerationResults } = options;
79
-
80
- for (const module of chunkGraph.getOrderedChunkModulesIterable(
81
- chunk,
82
- compareModulesByIdentifier
83
- )) {
84
- if (module.type === "webassembly/sync") {
85
- const filenameTemplate =
86
- outputOptions.webassemblyModuleFilename;
87
-
88
- result.push({
89
- render: () =>
90
- codeGenerationResults.getSource(
91
- module,
92
- chunk.runtime,
93
- "webassembly"
94
- ),
95
- filenameTemplate,
96
- pathOptions: {
86
+ compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
87
+ const { chunkGraph } = compilation;
88
+ const { chunk, outputOptions, codeGenerationResults } = options;
89
+
90
+ for (const module of chunkGraph.getOrderedChunkModulesIterable(
91
+ chunk,
92
+ compareModulesByIdentifier
93
+ )) {
94
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
95
+ const filenameTemplate =
96
+ /** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
97
+ (outputOptions.webassemblyModuleFilename);
98
+
99
+ result.push({
100
+ render: () =>
101
+ codeGenerationResults.getSource(
97
102
  module,
98
- runtime: chunk.runtime,
99
- chunkGraph
100
- },
101
- auxiliary: true,
102
- identifier: `webassemblyModule${chunkGraph.getModuleId(
103
- module
104
- )}`,
105
- hash: chunkGraph.getModuleHash(module, chunk.runtime)
106
- });
107
- }
103
+ chunk.runtime,
104
+ "webassembly"
105
+ ),
106
+ filenameTemplate,
107
+ pathOptions: {
108
+ module,
109
+ runtime: chunk.runtime,
110
+ chunkGraph
111
+ },
112
+ auxiliary: true,
113
+ identifier: `webassemblyModule${chunkGraph.getModuleId(
114
+ module
115
+ )}`,
116
+ hash: chunkGraph.getModuleHash(module, chunk.runtime)
117
+ });
108
118
  }
109
-
110
- return result;
111
119
  }
112
- );
113
120
 
114
- compilation.hooks.afterChunks.tap("WebAssemblyModulesPlugin", () => {
121
+ return result;
122
+ });
123
+
124
+ compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
115
125
  const chunkGraph = compilation.chunkGraph;
116
126
  const initialWasmModules = new Set();
117
127
  for (const chunk of compilation.chunks) {
118
128
  if (chunk.canBeInitial()) {
119
129
  for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
120
- if (module.type === "webassembly/sync") {
130
+ if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
121
131
  initialWasmModules.add(module);
122
132
  }
123
133
  }
@@ -14,6 +14,8 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
14
14
  const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
15
15
 
16
16
  /** @typedef {import("../Module")} Module */
17
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
18
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
17
19
  /** @typedef {import("../Parser").ParserState} ParserState */
18
20
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
19
21
 
@@ -61,6 +63,9 @@ const decoderOpts = {
61
63
  };
62
64
 
63
65
  class WebAssemblyParser extends Parser {
66
+ /**
67
+ * @param {{}=} options parser options
68
+ */
64
69
  constructor(options) {
65
70
  super();
66
71
  this.hooks = Object.freeze({});
@@ -78,8 +83,10 @@ class WebAssemblyParser extends Parser {
78
83
  }
79
84
 
80
85
  // flag it as ESM
81
- state.module.buildInfo.strict = true;
82
- state.module.buildMeta.exportsType = "namespace";
86
+ /** @type {BuildInfo} */
87
+ (state.module.buildInfo).strict = true;
88
+ /** @type {BuildMeta} */
89
+ (state.module.buildMeta).exportsType = "namespace";
83
90
 
84
91
  // parse it
85
92
  const program = decode(source, decoderOpts);
@@ -88,10 +95,12 @@ class WebAssemblyParser extends Parser {
88
95
  const moduleContext = moduleContextFromModuleAST(module);
89
96
 
90
97
  // extract imports and exports
98
+ /** @type {string[]} */
91
99
  const exports = [];
92
100
  let jsIncompatibleExports = (state.module.buildMeta.jsIncompatibleExports =
93
101
  undefined);
94
102
 
103
+ /** @type {TODO[]} */
95
104
  const importedGlobals = [];
96
105
  t.traverse(module, {
97
106
  ModuleExport({ node }) {
@@ -157,12 +166,14 @@ class WebAssemblyParser extends Parser {
157
166
  } else if (t.isTable(node.descr) === true) {
158
167
  onlyDirectImport = "Table";
159
168
  } else if (t.isFuncImportDescr(node.descr) === true) {
160
- const incompatibleType = getJsIncompatibleType(node.descr.signature);
169
+ const incompatibleType = getJsIncompatibleType(
170
+ /** @type {t.Signature} */ (node.descr.signature)
171
+ );
161
172
  if (incompatibleType) {
162
173
  onlyDirectImport = `Non-JS-compatible Func Signature (${incompatibleType})`;
163
174
  }
164
175
  } else if (t.isGlobalType(node.descr) === true) {
165
- const type = node.descr.valtype;
176
+ const type = /** @type {string} */ (node.descr.valtype);
166
177
  if (!JS_COMPAT_TYPES.has(type)) {
167
178
  onlyDirectImport = `Non-JS-compatible Global Type (${type})`;
168
179
  }
@@ -22,7 +22,7 @@ const MANGLED_MODULE = "a";
22
22
  /**
23
23
  * @param {ModuleGraph} moduleGraph the module graph
24
24
  * @param {Module} module the module
25
- * @param {boolean} mangle mangle module and export names
25
+ * @param {boolean | undefined} mangle mangle module and export names
26
26
  * @returns {UsedWasmDependency[]} used dependencies and (mangled) name
27
27
  */
28
28
  const getUsedDependencies = (moduleGraph, module, mangle) => {
@@ -5,9 +5,11 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
10
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
11
13
  /** @typedef {import("../Compiler")} Compiler */
12
14
 
13
15
  class FetchCompileAsyncWasmPlugin {
@@ -21,6 +23,10 @@ class FetchCompileAsyncWasmPlugin {
21
23
  "FetchCompileAsyncWasmPlugin",
22
24
  compilation => {
23
25
  const globalWasmLoading = compilation.outputOptions.wasmLoading;
26
+ /**
27
+ * @param {Chunk} chunk chunk
28
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
29
+ */
24
30
  const isEnabledForChunk = chunk => {
25
31
  const options = chunk.getEntryOptions();
26
32
  const wasmLoading =
@@ -29,6 +35,10 @@ class FetchCompileAsyncWasmPlugin {
29
35
  : globalWasmLoading;
30
36
  return wasmLoading === "fetch";
31
37
  };
38
+ /**
39
+ * @param {string} path path to the wasm file
40
+ * @returns {string} code to load the wasm file
41
+ */
32
42
  const generateLoadBinaryCode = path =>
33
43
  `fetch(${RuntimeGlobals.publicPath} + ${path})`;
34
44
 
@@ -40,7 +50,7 @@ class FetchCompileAsyncWasmPlugin {
40
50
  if (
41
51
  !chunkGraph.hasModuleInGraph(
42
52
  chunk,
43
- m => m.type === "webassembly/async"
53
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
44
54
  )
45
55
  ) {
46
56
  return;
@@ -5,16 +5,28 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
8
9
  const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
10
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
11
13
  /** @typedef {import("../Compiler")} Compiler */
12
14
 
13
15
  // TODO webpack 6 remove
14
16
 
17
+ const PLUGIN_NAME = "FetchCompileWasmPlugin";
18
+
19
+ /**
20
+ * @typedef {Object} FetchCompileWasmPluginOptions
21
+ * @property {boolean} [mangleImports] mangle imports
22
+ */
23
+
15
24
  class FetchCompileWasmPlugin {
16
- constructor(options) {
17
- this.options = options || {};
25
+ /**
26
+ * @param {FetchCompileWasmPluginOptions} [options] options
27
+ */
28
+ constructor(options = {}) {
29
+ this.options = options;
18
30
  }
19
31
 
20
32
  /**
@@ -23,48 +35,53 @@ class FetchCompileWasmPlugin {
23
35
  * @returns {void}
24
36
  */
25
37
  apply(compiler) {
26
- compiler.hooks.thisCompilation.tap(
27
- "FetchCompileWasmPlugin",
28
- compilation => {
29
- const globalWasmLoading = compilation.outputOptions.wasmLoading;
30
- const isEnabledForChunk = chunk => {
31
- const options = chunk.getEntryOptions();
32
- const wasmLoading =
33
- options && options.wasmLoading !== undefined
34
- ? options.wasmLoading
35
- : globalWasmLoading;
36
- return wasmLoading === "fetch";
37
- };
38
- const generateLoadBinaryCode = path =>
39
- `fetch(${RuntimeGlobals.publicPath} + ${path})`;
38
+ compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
39
+ const globalWasmLoading = compilation.outputOptions.wasmLoading;
40
+ /**
41
+ * @param {Chunk} chunk chunk
42
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
43
+ */
44
+ const isEnabledForChunk = chunk => {
45
+ const options = chunk.getEntryOptions();
46
+ const wasmLoading =
47
+ options && options.wasmLoading !== undefined
48
+ ? options.wasmLoading
49
+ : globalWasmLoading;
50
+ return wasmLoading === "fetch";
51
+ };
52
+ /**
53
+ * @param {string} path path to the wasm file
54
+ * @returns {string} code to load the wasm file
55
+ */
56
+ const generateLoadBinaryCode = path =>
57
+ `fetch(${RuntimeGlobals.publicPath} + ${path})`;
40
58
 
41
- compilation.hooks.runtimeRequirementInTree
42
- .for(RuntimeGlobals.ensureChunkHandlers)
43
- .tap("FetchCompileWasmPlugin", (chunk, set) => {
44
- if (!isEnabledForChunk(chunk)) return;
45
- const chunkGraph = compilation.chunkGraph;
46
- if (
47
- !chunkGraph.hasModuleInGraph(
48
- chunk,
49
- m => m.type === "webassembly/sync"
50
- )
51
- ) {
52
- return;
53
- }
54
- set.add(RuntimeGlobals.moduleCache);
55
- set.add(RuntimeGlobals.publicPath);
56
- compilation.addRuntimeModule(
59
+ compilation.hooks.runtimeRequirementInTree
60
+ .for(RuntimeGlobals.ensureChunkHandlers)
61
+ .tap(PLUGIN_NAME, (chunk, set) => {
62
+ if (!isEnabledForChunk(chunk)) return;
63
+ const chunkGraph = compilation.chunkGraph;
64
+ if (
65
+ !chunkGraph.hasModuleInGraph(
57
66
  chunk,
58
- new WasmChunkLoadingRuntimeModule({
59
- generateLoadBinaryCode,
60
- supportsStreaming: true,
61
- mangleImports: this.options.mangleImports,
62
- runtimeRequirements: set
63
- })
64
- );
65
- });
66
- }
67
- );
67
+ m => m.type === WEBASSEMBLY_MODULE_TYPE_SYNC
68
+ )
69
+ ) {
70
+ return;
71
+ }
72
+ set.add(RuntimeGlobals.moduleCache);
73
+ set.add(RuntimeGlobals.publicPath);
74
+ compilation.addRuntimeModule(
75
+ chunk,
76
+ new WasmChunkLoadingRuntimeModule({
77
+ generateLoadBinaryCode,
78
+ supportsStreaming: true,
79
+ mangleImports: this.options.mangleImports,
80
+ runtimeRequirements: set
81
+ })
82
+ );
83
+ });
84
+ });
68
85
  }
69
86
  }
70
87
 
@@ -8,6 +8,7 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Chunk")} Chunk */
11
12
  /** @typedef {import("../Compiler")} Compiler */
12
13
 
13
14
  class JsonpChunkLoadingPlugin {
@@ -21,6 +22,10 @@ class JsonpChunkLoadingPlugin {
21
22
  "JsonpChunkLoadingPlugin",
22
23
  compilation => {
23
24
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
25
+ /**
26
+ * @param {Chunk} chunk chunk
27
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
28
+ */
24
29
  const isEnabledForChunk = chunk => {
25
30
  const options = chunk.getEntryOptions();
26
31
  const chunkLoading =
@@ -30,6 +35,10 @@ class JsonpChunkLoadingPlugin {
30
35
  return chunkLoading === "jsonp";
31
36
  };
32
37
  const onceForChunkSet = new WeakSet();
38
+ /**
39
+ * @param {Chunk} chunk chunk
40
+ * @param {Set<string>} set runtime requirements
41
+ */
33
42
  const handler = (chunk, set) => {
34
43
  if (onceForChunkSet.has(chunk)) return;
35
44
  onceForChunkSet.add(chunk);
@@ -14,6 +14,7 @@ const { getInitialChunkIds } = require("../javascript/StartupHelpers");
14
14
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
15
15
 
16
16
  /** @typedef {import("../Chunk")} Chunk */
17
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
17
18
 
18
19
  /**
19
20
  * @typedef {Object} JsonpCompilationPluginHooks
@@ -46,6 +47,9 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
46
47
  return hooks;
47
48
  }
48
49
 
50
+ /**
51
+ * @param {Set<string>} runtimeRequirements runtime requirements
52
+ */
49
53
  constructor(runtimeRequirements) {
50
54
  super("jsonp chunk loading", RuntimeModule.STAGE_ATTACH);
51
55
  this._runtimeRequirements = runtimeRequirements;
@@ -66,10 +70,10 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
66
70
  }
67
71
 
68
72
  /**
69
- * @returns {string} runtime code
73
+ * @returns {string | null} runtime code
70
74
  */
71
75
  generate() {
72
- const { chunkGraph, compilation, chunk } = this;
76
+ const compilation = /** @type {Compilation} */ (this.compilation);
73
77
  const {
74
78
  runtimeTemplate,
75
79
  outputOptions: {
@@ -105,9 +109,14 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
105
109
  const withPreload = this._runtimeRequirements.has(
106
110
  RuntimeGlobals.preloadChunkHandlers
107
111
  );
112
+ const withFetchPriority = this._runtimeRequirements.has(
113
+ RuntimeGlobals.hasFetchPriority
114
+ );
108
115
  const chunkLoadingGlobalExpr = `${globalObject}[${JSON.stringify(
109
116
  chunkLoadingGlobal
110
117
  )}]`;
118
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
119
+ const chunk = /** @type {Chunk} */ (this.chunk);
111
120
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
112
121
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
113
122
  const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
@@ -135,7 +144,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
135
144
  withLoading
136
145
  ? Template.asString([
137
146
  `${fn}.j = ${runtimeTemplate.basicFunction(
138
- "chunkId, promises",
147
+ `chunkId, promises${withFetchPriority ? ", fetchPriority" : ""}`,
139
148
  hasJsMatcher !== false
140
149
  ? Template.indent([
141
150
  "// JSONP chunk loading for javascript",
@@ -187,9 +196,15 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
187
196
  "}"
188
197
  ]
189
198
  )};`,
190
- `${RuntimeGlobals.loadScript}(url, loadingEnded, "chunk-" + chunkId, chunkId);`
199
+ `${
200
+ RuntimeGlobals.loadScript
201
+ }(url, loadingEnded, "chunk-" + chunkId, chunkId${
202
+ withFetchPriority ? ", fetchPriority" : ""
203
+ });`
191
204
  ]),
192
- "} else installedChunks[chunkId] = 0;"
205
+ hasJsMatcher === true
206
+ ? "}"
207
+ : "} else installedChunks[chunkId] = 0;"
193
208
  ]),
194
209
  "}"
195
210
  ]),
@@ -250,7 +265,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
250
265
  linkPreload.call(
251
266
  Template.asString([
252
267
  "var link = document.createElement('link');",
253
- scriptType
268
+ scriptType && scriptType !== "module"
254
269
  ? `link.type = ${JSON.stringify(scriptType)};`
255
270
  : "",
256
271
  "link.charset = 'utf-8';",
@@ -259,8 +274,10 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
259
274
  `link.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
260
275
  ),
261
276
  "}",
262
- 'link.rel = "preload";',
263
- 'link.as = "script";',
277
+ scriptType === "module"
278
+ ? 'link.rel = "modulepreload";'
279
+ : 'link.rel = "preload";',
280
+ scriptType === "module" ? "" : 'link.as = "script";',
264
281
  `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
265
282
  crossOriginLoading
266
283
  ? crossOriginLoading === "use-credentials"
@@ -422,7 +439,7 @@ class JsonpChunkLoadingRuntimeModule extends RuntimeModule {
422
439
  "}"
423
440
  ]),
424
441
  "}",
425
- "if(runtime) var result = runtime(__webpack_require__);"
442
+ `if(runtime) var result = runtime(${RuntimeGlobals.require});`
426
443
  ]),
427
444
  "}",
428
445
  "if(parentChunkLoadingFunction) parentChunkLoadingFunction(data);",
package/lib/webpack.js CHANGED
@@ -61,7 +61,10 @@ const createMultiCompiler = (childOptions, options) => {
61
61
  const createCompiler = rawOptions => {
62
62
  const options = getNormalizedWebpackOptions(rawOptions);
63
63
  applyWebpackOptionsBaseDefaults(options);
64
- const compiler = new Compiler(options.context, options);
64
+ const compiler = new Compiler(
65
+ /** @type {string} */ (options.context),
66
+ options
67
+ );
65
68
  new NodeEnvironmentPlugin({
66
69
  infrastructureLogging: options.infrastructureLogging
67
70
  }).apply(compiler);
@@ -69,7 +72,7 @@ const createCompiler = rawOptions => {
69
72
  for (const plugin of options.plugins) {
70
73
  if (typeof plugin === "function") {
71
74
  plugin.call(compiler, compiler);
72
- } else {
75
+ } else if (plugin) {
73
76
  plugin.apply(compiler);
74
77
  }
75
78
  }
@@ -96,6 +99,11 @@ const createCompiler = rawOptions => {
96
99
  * @returns {MultiCompiler} the multi compiler object
97
100
  */
98
101
 
102
+ /**
103
+ * @template T
104
+ * @param {Array<T> | T} options options
105
+ * @returns {Array<T>} array of options
106
+ */
99
107
  const asArray = options =>
100
108
  Array.isArray(options) ? Array.from(options) : [options];
101
109
 
@@ -103,7 +111,7 @@ const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
103
111
  /**
104
112
  * @param {WebpackOptions | (ReadonlyArray<WebpackOptions> & MultiCompilerOptions)} options options
105
113
  * @param {Callback<Stats> & Callback<MultiStats>=} callback callback
106
- * @returns {Compiler | MultiCompiler}
114
+ * @returns {Compiler | MultiCompiler} Compiler or MultiCompiler
107
115
  */
108
116
  (options, callback) => {
109
117
  const create = () => {
@@ -117,6 +125,7 @@ const webpack = /** @type {WebpackFunctionSingle & WebpackFunctionMulti} */ (
117
125
  }
118
126
  /** @type {MultiCompiler|Compiler} */
119
127
  let compiler;
128
+ /** @type {boolean | undefined} */
120
129
  let watch = false;
121
130
  /** @type {WatchOptions|WatchOptions[]} */
122
131
  let watchOptions;
@@ -9,6 +9,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const StartupChunkDependenciesPlugin = require("../runtime/StartupChunkDependenciesPlugin");
10
10
  const ImportScriptsChunkLoadingRuntimeModule = require("./ImportScriptsChunkLoadingRuntimeModule");
11
11
 
12
+ /** @typedef {import("../Chunk")} Chunk */
12
13
  /** @typedef {import("../Compiler")} Compiler */
13
14
 
14
15
  class ImportScriptsChunkLoadingPlugin {
@@ -26,6 +27,10 @@ class ImportScriptsChunkLoadingPlugin {
26
27
  "ImportScriptsChunkLoadingPlugin",
27
28
  compilation => {
28
29
  const globalChunkLoading = compilation.outputOptions.chunkLoading;
30
+ /**
31
+ * @param {Chunk} chunk chunk
32
+ * @returns {boolean} true, if wasm loading is enabled for the chunk
33
+ */
29
34
  const isEnabledForChunk = chunk => {
30
35
  const options = chunk.getEntryOptions();
31
36
  const chunkLoading =
@@ -35,6 +40,10 @@ class ImportScriptsChunkLoadingPlugin {
35
40
  return chunkLoading === "import-scripts";
36
41
  };
37
42
  const onceForChunkSet = new WeakSet();
43
+ /**
44
+ * @param {Chunk} chunk chunk
45
+ * @param {Set<string>} set runtime requirements
46
+ */
38
47
  const handler = (chunk, set) => {
39
48
  if (onceForChunkSet.has(chunk)) return;
40
49
  onceForChunkSet.add(chunk);