webpack 5.76.1 → 5.88.2

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 (442) 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 +6 -1
  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 +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  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/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
@@ -74,9 +74,9 @@ class ModuleGraphConnection {
74
74
  this.weak = weak;
75
75
  this.conditional = !!condition;
76
76
  this._active = condition !== false;
77
- /** @type {function(ModuleGraphConnection, RuntimeSpec): ConnectionState} */
77
+ /** @type {(function(ModuleGraphConnection, RuntimeSpec): ConnectionState) | undefined} */
78
78
  this.condition = condition || undefined;
79
- /** @type {Set<string>} */
79
+ /** @type {Set<string> | undefined} */
80
80
  this.explanations = undefined;
81
81
  if (explanation) {
82
82
  this.explanations = new Set();
@@ -107,7 +107,9 @@ class ModuleGraphConnection {
107
107
  */
108
108
  addCondition(condition) {
109
109
  if (this.conditional) {
110
- const old = this.condition;
110
+ const old =
111
+ /** @type {(function(ModuleGraphConnection, RuntimeSpec): ConnectionState)} */
112
+ (this.condition);
111
113
  this.condition = (c, r) =>
112
114
  intersectConnectionStates(old(c, r), condition(c, r));
113
115
  } else if (this._active) {
@@ -143,7 +145,12 @@ class ModuleGraphConnection {
143
145
  */
144
146
  isActive(runtime) {
145
147
  if (!this.conditional) return this._active;
146
- return this.condition(this, runtime) !== false;
148
+
149
+ return (
150
+ /** @type {(function(ModuleGraphConnection, RuntimeSpec): ConnectionState)} */ (
151
+ this.condition
152
+ )(this, runtime) !== false
153
+ );
147
154
  }
148
155
 
149
156
  /**
@@ -152,7 +159,11 @@ class ModuleGraphConnection {
152
159
  */
153
160
  isTargetActive(runtime) {
154
161
  if (!this.conditional) return this._active;
155
- return this.condition(this, runtime) === true;
162
+ return (
163
+ /** @type {(function(ModuleGraphConnection, RuntimeSpec): ConnectionState)} */ (
164
+ this.condition
165
+ )(this, runtime) === true
166
+ );
156
167
  }
157
168
 
158
169
  /**
@@ -161,7 +172,9 @@ class ModuleGraphConnection {
161
172
  */
162
173
  getActiveState(runtime) {
163
174
  if (!this.conditional) return this._active;
164
- return this.condition(this, runtime);
175
+ return /** @type {(function(ModuleGraphConnection, RuntimeSpec): ConnectionState)} */ (
176
+ this.condition
177
+ )(this, runtime);
165
178
  }
166
179
 
167
180
  /**
@@ -15,10 +15,16 @@ const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
15
15
  /** @typedef {import("./ExportsInfo")} ExportsInfo */
16
16
  /** @typedef {import("./ExportsInfo").ExportInfo} ExportInfo */
17
17
  /** @typedef {import("./Module")} Module */
18
+ /** @typedef {import("./Module").BuildMeta} BuildMeta */
18
19
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
19
20
  /** @typedef {import("./ModuleTemplate")} ModuleTemplate */
20
21
  /** @typedef {import("./RequestShortener")} RequestShortener */
21
22
 
23
+ /**
24
+ * @template T
25
+ * @param {Iterable<T>} iterable iterable
26
+ * @returns {string} joined with comma
27
+ */
22
28
  const joinIterableWithComma = iterable => {
23
29
  // This is more performant than Array.from().join(", ")
24
30
  // as it doesn't create an array
@@ -139,7 +145,7 @@ const printExportsInfoToSource = (
139
145
  }
140
146
  };
141
147
 
142
- /** @type {WeakMap<RequestShortener, WeakMap<Module, { header: RawSource, full: WeakMap<Source, CachedSource> }>>} */
148
+ /** @type {WeakMap<RequestShortener, WeakMap<Module, { header: RawSource | undefined, full: WeakMap<Source, CachedSource> }>>} */
143
149
  const caches = new WeakMap();
144
150
 
145
151
  class ModuleInfoHeaderPlugin {
@@ -197,7 +203,8 @@ class ModuleInfoHeaderPlugin {
197
203
  }
198
204
  source.add(header);
199
205
  if (verbose) {
200
- const exportsType = module.buildMeta.exportsType;
206
+ const exportsType = /** @type {BuildMeta} */ (module.buildMeta)
207
+ .exportsType;
201
208
  source.add(
202
209
  Template.toComment(
203
210
  exportsType
@@ -43,7 +43,7 @@ const previouslyPolyfilledBuiltinModules = {
43
43
 
44
44
  class ModuleNotFoundError extends WebpackError {
45
45
  /**
46
- * @param {Module} module module tied to dependency
46
+ * @param {Module | null} module module tied to dependency
47
47
  * @param {Error&any} err error thrown
48
48
  * @param {DependencyLocation} loc location of dependency
49
49
  */
@@ -54,7 +54,10 @@ class ModuleNotFoundError extends WebpackError {
54
54
  const match = err.message.match(/Can't resolve '([^']+)'/);
55
55
  if (match) {
56
56
  const request = match[1];
57
- const alias = previouslyPolyfilledBuiltinModules[request];
57
+ const alias =
58
+ previouslyPolyfilledBuiltinModules[
59
+ /** @type {keyof previouslyPolyfilledBuiltinModules} */ (request)
60
+ ];
58
61
  if (alias) {
59
62
  const pathIndex = alias.indexOf("/");
60
63
  const dependency = pathIndex > 0 ? alias.slice(0, pathIndex) : alias;
@@ -8,6 +8,9 @@
8
8
  const WebpackError = require("./WebpackError");
9
9
  const makeSerializable = require("./util/makeSerializable");
10
10
 
11
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+
11
14
  const WASM_HEADER = Buffer.from([0x00, 0x61, 0x73, 0x6d]);
12
15
 
13
16
  class ModuleParseError extends WebpackError {
@@ -87,6 +90,9 @@ class ModuleParseError extends WebpackError {
87
90
  this.error = err;
88
91
  }
89
92
 
93
+ /**
94
+ * @param {ObjectSerializerContext} context context
95
+ */
90
96
  serialize(context) {
91
97
  const { write } = context;
92
98
 
@@ -95,6 +101,9 @@ class ModuleParseError extends WebpackError {
95
101
  super.serialize(context);
96
102
  }
97
103
 
104
+ /**
105
+ * @param {ObjectDeserializerContext} context context
106
+ */
98
107
  deserialize(context) {
99
108
  const { read } = context;
100
109
 
@@ -34,6 +34,7 @@ class ModuleProfile {
34
34
  this.storing = 0;
35
35
  this.storingParallelismFactor = 0;
36
36
 
37
+ /** @type {{ start: number, end: number }[] | undefined } */
37
38
  this.additionalFactoryTimes = undefined;
38
39
  this.additionalFactories = 0;
39
40
  this.additionalFactoriesParallelismFactor = 0;
@@ -16,6 +16,7 @@ class ModuleRestoreError extends WebpackError {
16
16
  */
17
17
  constructor(module, err) {
18
18
  let message = "Module restore failed: ";
19
+ /** @type {string | undefined} */
19
20
  let details = undefined;
20
21
  if (err !== null && typeof err === "object") {
21
22
  if (typeof err.stack === "string" && err.stack) {
@@ -33,6 +34,7 @@ class ModuleRestoreError extends WebpackError {
33
34
  super(message);
34
35
 
35
36
  this.name = "ModuleRestoreError";
37
+ /** @type {string | undefined} */
36
38
  this.details = details;
37
39
  this.module = module;
38
40
  this.error = err;
@@ -16,6 +16,7 @@ class ModuleStoreError extends WebpackError {
16
16
  */
17
17
  constructor(module, err) {
18
18
  let message = "Module storing failed: ";
19
+ /** @type {string | undefined} */
19
20
  let details = undefined;
20
21
  if (err !== null && typeof err === "object") {
21
22
  if (typeof err.stack === "string" && err.stack) {
@@ -33,7 +34,7 @@ class ModuleStoreError extends WebpackError {
33
34
  super(message);
34
35
 
35
36
  this.name = "ModuleStoreError";
36
- this.details = details;
37
+ this.details = /** @type {string | undefined} */ (details);
37
38
  this.module = module;
38
39
  this.error = err;
39
40
  }
@@ -0,0 +1,169 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Sean Larkin @TheLarkInn
4
+ */
5
+
6
+ "use strict";
7
+
8
+ /**
9
+ * @type {Readonly<"javascript/auto">}
10
+ */
11
+ const JAVASCRIPT_MODULE_TYPE_AUTO = "javascript/auto";
12
+
13
+ /**
14
+ * @type {Readonly<"javascript/dynamic">}
15
+ */
16
+ const JAVASCRIPT_MODULE_TYPE_DYNAMIC = "javascript/dynamic";
17
+
18
+ /**
19
+ * @type {Readonly<"javascript/esm">}
20
+ * This is the module type used for _strict_ ES Module syntax. This means that all legacy formats
21
+ * that webpack supports (CommonJS, AMD, SystemJS) are not supported.
22
+ */
23
+ const JAVASCRIPT_MODULE_TYPE_ESM = "javascript/esm";
24
+
25
+ /**
26
+ * @type {Readonly<"json">}
27
+ * This is the module type used for JSON files. JSON files are always parsed as ES Module.
28
+ */
29
+ const JSON_MODULE_TYPE = "json";
30
+
31
+ /**
32
+ * @type {Readonly<"webassembly/async">}
33
+ * This is the module type used for WebAssembly modules. In webpack 5 they are always treated as async modules.
34
+ *
35
+ */
36
+ const WEBASSEMBLY_MODULE_TYPE_ASYNC = "webassembly/async";
37
+
38
+ /**
39
+ * @type {Readonly<"webassembly/sync">}
40
+ * This is the module type used for WebAssembly modules. In webpack 4 they are always treated as sync modules.
41
+ * There is a legacy option to support this usage in webpack 5 and up.
42
+ */
43
+ const WEBASSEMBLY_MODULE_TYPE_SYNC = "webassembly/sync";
44
+
45
+ /**
46
+ * @type {Readonly<"css">}
47
+ * This is the module type used for CSS files.
48
+ */
49
+ const CSS_MODULE_TYPE = "css";
50
+
51
+ /**
52
+ * @type {Readonly<"css/global">}
53
+ * This is the module type used for CSS modules files where you need to use `:local` in selector list to hash classes.
54
+ */
55
+ const CSS_MODULE_TYPE_GLOBAL = "css/global";
56
+
57
+ /**
58
+ * @type {Readonly<"css/module">}
59
+ * This is the module type used for CSS modules files, by default all classes are hashed.
60
+ */
61
+ const CSS_MODULE_TYPE_MODULE = "css/module";
62
+
63
+ /**
64
+ * @type {Readonly<"css/auto">}
65
+ * This is the module type used for CSS files, the module will be parsed as CSS modules if it's filename contains `.module.` or `.modules.`.
66
+ */
67
+ const CSS_MODULE_TYPE_AUTO = "css/auto";
68
+
69
+ /**
70
+ * @type {Readonly<"asset">}
71
+ * This is the module type used for automatically choosing between `asset/inline`, `asset/resource` based on asset size limit (8096).
72
+ */
73
+ const ASSET_MODULE_TYPE = "asset";
74
+
75
+ /**
76
+ * @type {Readonly<"asset/inline">}
77
+ * This is the module type used for assets that are inlined as a data URI. This is the equivalent of `url-loader`.
78
+ */
79
+ const ASSET_MODULE_TYPE_INLINE = "asset/inline";
80
+
81
+ /**
82
+ * @type {Readonly<"asset/resource">}
83
+ * This is the module type used for assets that are copied to the output directory. This is the equivalent of `file-loader`.
84
+ */
85
+ const ASSET_MODULE_TYPE_RESOURCE = "asset/resource";
86
+
87
+ /**
88
+ * @type {Readonly<"asset/source">}
89
+ * This is the module type used for assets that are imported as source code. This is the equivalent of `raw-loader`.
90
+ */
91
+ const ASSET_MODULE_TYPE_SOURCE = "asset/source";
92
+
93
+ /**
94
+ * @type {Readonly<"asset/raw-data-url">}
95
+ * TODO: Document what this asset type is for. See css-loader tests for its usage.
96
+ */
97
+ const ASSET_MODULE_TYPE_RAW_DATA_URL = "asset/raw-data-url";
98
+
99
+ /**
100
+ * @type {Readonly<"runtime">}
101
+ * This is the module type used for the webpack runtime abstractions.
102
+ */
103
+ const WEBPACK_MODULE_TYPE_RUNTIME = "runtime";
104
+
105
+ /**
106
+ * @type {Readonly<"fallback-module">}
107
+ * This is the module type used for the ModuleFederation feature's FallbackModule class.
108
+ * TODO: Document this better.
109
+ */
110
+ const WEBPACK_MODULE_TYPE_FALLBACK = "fallback-module";
111
+
112
+ /**
113
+ * @type {Readonly<"remote-module">}
114
+ * This is the module type used for the ModuleFederation feature's RemoteModule class.
115
+ * TODO: Document this better.
116
+ */
117
+ const WEBPACK_MODULE_TYPE_REMOTE = "remote-module";
118
+
119
+ /**
120
+ * @type {Readonly<"provide-module">}
121
+ * This is the module type used for the ModuleFederation feature's ProvideModule class.
122
+ * TODO: Document this better.
123
+ */
124
+ const WEBPACK_MODULE_TYPE_PROVIDE = "provide-module";
125
+
126
+ /**
127
+ * @type {Readonly<"consume-shared-module">}
128
+ * This is the module type used for the ModuleFederation feature's ConsumeSharedModule class.
129
+ */
130
+ const WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE = "consume-shared-module";
131
+
132
+ /**
133
+ * @type {Readonly<"lazy-compilation-proxy">}
134
+ * Module type used for `experiments.lazyCompilation` feature. See `LazyCompilationPlugin` for more information.
135
+ */
136
+ const WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY = "lazy-compilation-proxy";
137
+
138
+ /** @typedef {"javascript/auto" | "javascript/dynamic" | "javascript/esm"} JavaScriptModuleTypes */
139
+ /** @typedef {"json"} JSONModuleType */
140
+ /** @typedef {"webassembly/async" | "webassembly/sync"} WebAssemblyModuleTypes */
141
+ /** @typedef {"css" | "css/global" | "css/module"} CSSModuleTypes */
142
+ /** @typedef {"asset" | "asset/inline" | "asset/resource" | "asset/source" | "asset/raw-data-url"} AssetModuleTypes */
143
+ /** @typedef {"runtime" | "fallback-module" | "remote-module" | "provide-module" | "consume-shared-module" | "lazy-compilation-proxy"} WebpackModuleTypes */
144
+ /** @typedef {string} UnknownModuleTypes */
145
+ /** @typedef {JavaScriptModuleTypes | JSONModuleType | WebAssemblyModuleTypes | CSSModuleTypes | AssetModuleTypes | WebpackModuleTypes | UnknownModuleTypes} ModuleTypes */
146
+
147
+ exports.ASSET_MODULE_TYPE = ASSET_MODULE_TYPE;
148
+ exports.ASSET_MODULE_TYPE_RAW_DATA_URL = ASSET_MODULE_TYPE_RAW_DATA_URL;
149
+ exports.ASSET_MODULE_TYPE_SOURCE = ASSET_MODULE_TYPE_SOURCE;
150
+ exports.ASSET_MODULE_TYPE_RESOURCE = ASSET_MODULE_TYPE_RESOURCE;
151
+ exports.ASSET_MODULE_TYPE_INLINE = ASSET_MODULE_TYPE_INLINE;
152
+ exports.JAVASCRIPT_MODULE_TYPE_AUTO = JAVASCRIPT_MODULE_TYPE_AUTO;
153
+ exports.JAVASCRIPT_MODULE_TYPE_DYNAMIC = JAVASCRIPT_MODULE_TYPE_DYNAMIC;
154
+ exports.JAVASCRIPT_MODULE_TYPE_ESM = JAVASCRIPT_MODULE_TYPE_ESM;
155
+ exports.JSON_MODULE_TYPE = JSON_MODULE_TYPE;
156
+ exports.WEBASSEMBLY_MODULE_TYPE_ASYNC = WEBASSEMBLY_MODULE_TYPE_ASYNC;
157
+ exports.WEBASSEMBLY_MODULE_TYPE_SYNC = WEBASSEMBLY_MODULE_TYPE_SYNC;
158
+ exports.CSS_MODULE_TYPE = CSS_MODULE_TYPE;
159
+ exports.CSS_MODULE_TYPE_GLOBAL = CSS_MODULE_TYPE_GLOBAL;
160
+ exports.CSS_MODULE_TYPE_MODULE = CSS_MODULE_TYPE_MODULE;
161
+ exports.CSS_MODULE_TYPE_AUTO = CSS_MODULE_TYPE_AUTO;
162
+ exports.WEBPACK_MODULE_TYPE_RUNTIME = WEBPACK_MODULE_TYPE_RUNTIME;
163
+ exports.WEBPACK_MODULE_TYPE_FALLBACK = WEBPACK_MODULE_TYPE_FALLBACK;
164
+ exports.WEBPACK_MODULE_TYPE_REMOTE = WEBPACK_MODULE_TYPE_REMOTE;
165
+ exports.WEBPACK_MODULE_TYPE_PROVIDE = WEBPACK_MODULE_TYPE_PROVIDE;
166
+ exports.WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE =
167
+ WEBPACK_MODULE_TYPE_CONSUME_SHARED_MODULE;
168
+ exports.WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY =
169
+ WEBPACK_MODULE_TYPE_LAZY_COMPILATION_PROXY;
@@ -9,6 +9,9 @@ const { cleanUp } = require("./ErrorHelpers");
9
9
  const WebpackError = require("./WebpackError");
10
10
  const makeSerializable = require("./util/makeSerializable");
11
11
 
12
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
13
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+
12
15
  class ModuleWarning extends WebpackError {
13
16
  /**
14
17
  * @param {Error} warning error thrown
@@ -39,6 +42,9 @@ class ModuleWarning extends WebpackError {
39
42
  : undefined;
40
43
  }
41
44
 
45
+ /**
46
+ * @param {ObjectSerializerContext} context context
47
+ */
42
48
  serialize(context) {
43
49
  const { write } = context;
44
50
 
@@ -47,6 +53,9 @@ class ModuleWarning extends WebpackError {
47
53
  super.serialize(context);
48
54
  }
49
55
 
56
+ /**
57
+ * @param {ObjectDeserializerContext} context context
58
+ */
50
59
  deserialize(context) {
51
60
  const { read } = context;
52
61
 
@@ -27,6 +27,10 @@ class MultiWatching {
27
27
  this.compiler = compiler;
28
28
  }
29
29
 
30
+ /**
31
+ * @param {Callback<void>=} callback signals when the build has completed again
32
+ * @returns {void}
33
+ */
30
34
  invalidate(callback) {
31
35
  if (callback) {
32
36
  asyncLib.each(
@@ -5,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC
11
+ } = require("./ModuleTypeConstants");
8
12
  const NodeStuffInWebError = require("./NodeStuffInWebError");
9
13
  const RuntimeGlobals = require("./RuntimeGlobals");
10
14
  const CachedConstDependency = require("./dependencies/CachedConstDependency");
@@ -17,12 +21,23 @@ const { relative } = require("./util/fs");
17
21
  const { parseResource } = require("./util/identifier");
18
22
 
19
23
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
24
+ /** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
25
+ /** @typedef {import("../declarations/WebpackOptions").NodeOptions} NodeOptions */
20
26
  /** @typedef {import("./Compiler")} Compiler */
21
27
  /** @typedef {import("./Dependency")} Dependency */
28
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
22
29
  /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
30
+ /** @typedef {import("./NormalModule")} NormalModule */
23
31
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
32
+ /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
33
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
34
+
35
+ const PLUGIN_NAME = "NodeStuffPlugin";
24
36
 
25
37
  class NodeStuffPlugin {
38
+ /**
39
+ * @param {NodeOptions} options options
40
+ */
26
41
  constructor(options) {
27
42
  this.options = options;
28
43
  }
@@ -35,8 +50,13 @@ class NodeStuffPlugin {
35
50
  apply(compiler) {
36
51
  const options = this.options;
37
52
  compiler.hooks.compilation.tap(
38
- "NodeStuffPlugin",
53
+ PLUGIN_NAME,
39
54
  (compilation, { normalModuleFactory }) => {
55
+ /**
56
+ * @param {JavascriptParser} parser the parser
57
+ * @param {JavascriptParserOptions} parserOptions options
58
+ * @returns {void}
59
+ */
40
60
  const handler = (parser, parserOptions) => {
41
61
  if (parserOptions.node === false) return;
42
62
 
@@ -47,50 +67,54 @@ class NodeStuffPlugin {
47
67
 
48
68
  if (localOptions.global !== false) {
49
69
  const withWarning = localOptions.global === "warn";
50
- parser.hooks.expression
51
- .for("global")
52
- .tap("NodeStuffPlugin", expr => {
53
- const dep = new ConstDependency(
54
- RuntimeGlobals.global,
55
- expr.range,
56
- [RuntimeGlobals.global]
57
- );
58
- dep.loc = expr.loc;
59
- parser.state.module.addPresentationalDependency(dep);
70
+ parser.hooks.expression.for("global").tap(PLUGIN_NAME, expr => {
71
+ const dep = new ConstDependency(
72
+ RuntimeGlobals.global,
73
+ /** @type {Range} */ (expr.range),
74
+ [RuntimeGlobals.global]
75
+ );
76
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
77
+ parser.state.module.addPresentationalDependency(dep);
60
78
 
61
- // TODO webpack 6 remove
62
- if (withWarning) {
63
- parser.state.module.addWarning(
64
- new NodeStuffInWebError(
65
- dep.loc,
66
- "global",
67
- "The global namespace object is a Node.js feature and isn't available in browsers."
68
- )
69
- );
70
- }
71
- });
72
- parser.hooks.rename.for("global").tap("NodeStuffPlugin", expr => {
79
+ // TODO webpack 6 remove
80
+ if (withWarning) {
81
+ parser.state.module.addWarning(
82
+ new NodeStuffInWebError(
83
+ dep.loc,
84
+ "global",
85
+ "The global namespace object is a Node.js feature and isn't available in browsers."
86
+ )
87
+ );
88
+ }
89
+ });
90
+ parser.hooks.rename.for("global").tap(PLUGIN_NAME, expr => {
73
91
  const dep = new ConstDependency(
74
92
  RuntimeGlobals.global,
75
- expr.range,
93
+ /** @type {Range} */ (expr.range),
76
94
  [RuntimeGlobals.global]
77
95
  );
78
- dep.loc = expr.loc;
96
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
79
97
  parser.state.module.addPresentationalDependency(dep);
80
98
  return false;
81
99
  });
82
100
  }
83
101
 
102
+ /**
103
+ * @param {string} expressionName expression name
104
+ * @param {(module: NormalModule) => string} fn function
105
+ * @param {string=} warning warning
106
+ * @returns {void}
107
+ */
84
108
  const setModuleConstant = (expressionName, fn, warning) => {
85
109
  parser.hooks.expression
86
110
  .for(expressionName)
87
- .tap("NodeStuffPlugin", expr => {
111
+ .tap(PLUGIN_NAME, expr => {
88
112
  const dep = new CachedConstDependency(
89
113
  JSON.stringify(fn(parser.state.module)),
90
- expr.range,
114
+ /** @type {Range} */ (expr.range),
91
115
  expressionName
92
116
  );
93
- dep.loc = expr.loc;
117
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
94
118
  parser.state.module.addPresentationalDependency(dep);
95
119
 
96
120
  // TODO webpack 6 remove
@@ -104,6 +128,12 @@ class NodeStuffPlugin {
104
128
  });
105
129
  };
106
130
 
131
+ /**
132
+ * @param {string} expressionName expression name
133
+ * @param {string} value value
134
+ * @param {string=} warning warning
135
+ * @returns {void}
136
+ */
107
137
  const setConstant = (expressionName, value, warning) =>
108
138
  setModuleConstant(expressionName, () => value, warning);
109
139
 
@@ -129,7 +159,7 @@ class NodeStuffPlugin {
129
159
 
130
160
  parser.hooks.evaluateIdentifier
131
161
  .for("__filename")
132
- .tap("NodeStuffPlugin", expr => {
162
+ .tap(PLUGIN_NAME, expr => {
133
163
  if (!parser.state.module) return;
134
164
  const resource = parseResource(parser.state.module.resource);
135
165
  return evaluateToString(resource.path)(expr);
@@ -156,7 +186,7 @@ class NodeStuffPlugin {
156
186
 
157
187
  parser.hooks.evaluateIdentifier
158
188
  .for("__dirname")
159
- .tap("NodeStuffPlugin", expr => {
189
+ .tap(PLUGIN_NAME, expr => {
160
190
  if (!parser.state.module) return;
161
191
  return evaluateToString(parser.state.module.context)(expr);
162
192
  });
@@ -164,7 +194,7 @@ class NodeStuffPlugin {
164
194
  parser.hooks.expression
165
195
  .for("require.extensions")
166
196
  .tap(
167
- "NodeStuffPlugin",
197
+ PLUGIN_NAME,
168
198
  expressionIsUnsupported(
169
199
  parser,
170
200
  "require.extensions is not supported by webpack. Use a loader instead."
@@ -173,11 +203,11 @@ class NodeStuffPlugin {
173
203
  };
174
204
 
175
205
  normalModuleFactory.hooks.parser
176
- .for("javascript/auto")
177
- .tap("NodeStuffPlugin", handler);
206
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
207
+ .tap(PLUGIN_NAME, handler);
178
208
  normalModuleFactory.hooks.parser
179
- .for("javascript/dynamic")
180
- .tap("NodeStuffPlugin", handler);
209
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
210
+ .tap(PLUGIN_NAME, handler);
181
211
  }
182
212
  );
183
213
  }
@@ -22,6 +22,7 @@ const ModuleBuildError = require("./ModuleBuildError");
22
22
  const ModuleError = require("./ModuleError");
23
23
  const ModuleGraphConnection = require("./ModuleGraphConnection");
24
24
  const ModuleParseError = require("./ModuleParseError");
25
+ const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
25
26
  const ModuleWarning = require("./ModuleWarning");
26
27
  const RuntimeGlobals = require("./RuntimeGlobals");
27
28
  const UnhandledSchemeError = require("./UnhandledSchemeError");
@@ -64,12 +65,15 @@ const memoize = require("./util/memoize");
64
65
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
65
66
  /** @typedef {import("./ModuleGraph")} ModuleGraph */
66
67
  /** @typedef {import("./ModuleGraphConnection").ConnectionState} ConnectionState */
68
+ /** @typedef {import("./ModuleTypeConstants").JavaScriptModuleTypes} JavaScriptModuleTypes */
67
69
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
68
70
  /** @typedef {import("./Parser")} Parser */
69
71
  /** @typedef {import("./RequestShortener")} RequestShortener */
70
72
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
71
73
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
72
74
  /** @typedef {import("./logging/Logger").Logger} WebpackLogger */
75
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
76
+ /** @typedef {import("./serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
73
77
  /** @typedef {import("./util/Hash")} Hash */
74
78
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
75
79
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
@@ -198,7 +202,7 @@ makeSerializable(
198
202
  /**
199
203
  * @typedef {Object} NormalModuleCreateData
200
204
  * @property {string=} layer an optional layer in which the module is
201
- * @property {string} type module type
205
+ * @property {JavaScriptModuleTypes | ""} type module type. When deserializing, this is set to an empty string "".
202
206
  * @property {string} request request string
203
207
  * @property {string} userRequest request intended by user (without loaders from config)
204
208
  * @property {string} rawRequest request without resolving
@@ -339,7 +343,7 @@ class NormalModule extends Module {
339
343
  */
340
344
  identifier() {
341
345
  if (this.layer === null) {
342
- if (this.type === "javascript/auto") {
346
+ if (this.type === JAVASCRIPT_MODULE_TYPE_AUTO) {
343
347
  return this.request;
344
348
  } else {
345
349
  return `${this.type}|${this.request}`;
@@ -1364,6 +1368,9 @@ class NormalModule extends Module {
1364
1368
  super.updateHash(hash, context);
1365
1369
  }
1366
1370
 
1371
+ /**
1372
+ * @param {ObjectSerializerContext} context context
1373
+ */
1367
1374
  serialize(context) {
1368
1375
  const { write } = context;
1369
1376
  // deserialize
@@ -1398,6 +1405,9 @@ class NormalModule extends Module {
1398
1405
  return obj;
1399
1406
  }
1400
1407
 
1408
+ /**
1409
+ * @param {ObjectDeserializerContext} context context
1410
+ */
1401
1411
  deserialize(context) {
1402
1412
  const { read } = context;
1403
1413
  this._source = read();