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
@@ -14,12 +14,15 @@ const CssLocalIdentifierDependency = require("./CssLocalIdentifierDependency");
14
14
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
15
15
  /** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
16
16
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
+ /** @typedef {import("../css/CssParser").Range} Range */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
17
20
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
18
21
 
19
22
  class CssSelfLocalIdentifierDependency extends CssLocalIdentifierDependency {
20
23
  /**
21
24
  * @param {string} name name
22
- * @param {[number, number]} range range
25
+ * @param {Range} range range
23
26
  * @param {string=} prefix prefix
24
27
  * @param {Set<string>=} declaredSet set of declared names (will only be active when in declared set)
25
28
  */
@@ -64,12 +67,18 @@ class CssSelfLocalIdentifierDependency extends CssLocalIdentifierDependency {
64
67
  return [[this.name]];
65
68
  }
66
69
 
70
+ /**
71
+ * @param {ObjectSerializerContext} context context
72
+ */
67
73
  serialize(context) {
68
74
  const { write } = context;
69
75
  write(this.declaredSet);
70
76
  super.serialize(context);
71
77
  }
72
78
 
79
+ /**
80
+ * @param {ObjectDeserializerContext} context context
81
+ */
73
82
  deserialize(context) {
74
83
  const { read } = context;
75
84
  this.declaredSet = read();
@@ -18,6 +18,9 @@ const ModuleDependency = require("./ModuleDependency");
18
18
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
19
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
20
20
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
21
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
24
  /** @typedef {import("../util/Hash")} Hash */
22
25
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
23
26
 
@@ -26,13 +29,13 @@ const getRawDataUrlModule = memoize(() => require("../asset/RawDataUrlModule"));
26
29
  class CssUrlDependency extends ModuleDependency {
27
30
  /**
28
31
  * @param {string} request request
29
- * @param {[number, number]} range range of the argument
30
- * @param {string} cssFunctionKind kind of css function, e. g. url(), image()
32
+ * @param {Range} range range of the argument
33
+ * @param {"string" | "url"} urlType dependency type e.g. url() or string
31
34
  */
32
- constructor(request, range, cssFunctionKind) {
35
+ constructor(request, range, urlType) {
33
36
  super(request);
34
37
  this.range = range;
35
- this.cssFunctionKind = cssFunctionKind;
38
+ this.urlType = urlType;
36
39
  }
37
40
 
38
41
  get type() {
@@ -45,26 +48,36 @@ class CssUrlDependency extends ModuleDependency {
45
48
 
46
49
  /**
47
50
  * @param {string} context context directory
48
- * @returns {Module} a module
51
+ * @returns {Module | null} a module
49
52
  */
50
53
  createIgnoredModule(context) {
51
54
  const RawDataUrlModule = getRawDataUrlModule();
52
55
  return new RawDataUrlModule("data:,", `ignored-asset`, `(ignored asset)`);
53
56
  }
54
57
 
58
+ /**
59
+ * @param {ObjectSerializerContext} context context
60
+ */
55
61
  serialize(context) {
56
62
  const { write } = context;
57
- write(this.cssFunctionKind);
63
+ write(this.urlType);
58
64
  super.serialize(context);
59
65
  }
60
66
 
67
+ /**
68
+ * @param {ObjectDeserializerContext} context context
69
+ */
61
70
  deserialize(context) {
62
71
  const { read } = context;
63
- this.cssFunctionKind = read();
72
+ this.urlType = read();
64
73
  super.deserialize(context);
65
74
  }
66
75
  }
67
76
 
77
+ /**
78
+ * @param {string} str string
79
+ * @returns {string} string in quotes if needed
80
+ */
68
81
  const cssEscapeString = str => {
69
82
  let countWhiteOrBracket = 0;
70
83
  let countQuotation = 0;
@@ -108,21 +121,38 @@ CssUrlDependency.Template = class CssUrlDependencyTemplate extends (
108
121
  apply(
109
122
  dependency,
110
123
  source,
111
- { runtime, moduleGraph, runtimeTemplate, codeGenerationResults }
124
+ { moduleGraph, runtimeTemplate, codeGenerationResults }
112
125
  ) {
113
126
  const dep = /** @type {CssUrlDependency} */ (dependency);
114
127
 
128
+ /** @type {string | undefined} */
129
+ let newValue;
130
+
131
+ switch (dep.urlType) {
132
+ case "string":
133
+ newValue = cssEscapeString(
134
+ runtimeTemplate.assetUrl({
135
+ publicPath: "",
136
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
137
+ codeGenerationResults
138
+ })
139
+ );
140
+ break;
141
+ case "url":
142
+ newValue = `url(${cssEscapeString(
143
+ runtimeTemplate.assetUrl({
144
+ publicPath: "",
145
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
146
+ codeGenerationResults
147
+ })
148
+ )})`;
149
+ break;
150
+ }
151
+
115
152
  source.replace(
116
153
  dep.range[0],
117
154
  dep.range[1] - 1,
118
- `${dep.cssFunctionKind}(${cssEscapeString(
119
- runtimeTemplate.assetUrl({
120
- publicPath: "",
121
- runtime,
122
- module: moduleGraph.getModule(dep),
123
- codeGenerationResults
124
- })
125
- )})`
155
+ /** @type {string} */ (newValue)
126
156
  );
127
157
  }
128
158
  };
@@ -9,6 +9,9 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const ModuleDependency = require("./ModuleDependency");
10
10
 
11
11
  class DelegatedSourceDependency extends ModuleDependency {
12
+ /**
13
+ * @param {string} request the request string
14
+ */
12
15
  constructor(request) {
13
16
  super(request);
14
17
  }
@@ -8,7 +8,15 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+ /** @typedef {import("./EntryDependency")} EntryDependency */
14
+
11
15
  class DllEntryDependency extends Dependency {
16
+ /**
17
+ * @param {EntryDependency[]} dependencies dependencies
18
+ * @param {string} name name
19
+ */
12
20
  constructor(dependencies, name) {
13
21
  super();
14
22
 
@@ -20,6 +28,9 @@ class DllEntryDependency extends Dependency {
20
28
  return "dll entry";
21
29
  }
22
30
 
31
+ /**
32
+ * @param {ObjectSerializerContext} context context
33
+ */
23
34
  serialize(context) {
24
35
  const { write } = context;
25
36
 
@@ -29,6 +40,9 @@ class DllEntryDependency extends Dependency {
29
40
  super.serialize(context);
30
41
  }
31
42
 
43
+ /**
44
+ * @param {ObjectDeserializerContext} context context
45
+ */
32
46
  deserialize(context) {
33
47
  const { read } = context;
34
48
 
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
8
9
  /** @typedef {import("../Parser").ParserState} ParserState */
9
10
 
10
11
  /** @type {WeakMap<ParserState, boolean>} */
@@ -18,8 +19,9 @@ exports.bailout = parserState => {
18
19
  const value = parserStateExportsState.get(parserState);
19
20
  parserStateExportsState.set(parserState, false);
20
21
  if (value === true) {
21
- parserState.module.buildMeta.exportsType = undefined;
22
- parserState.module.buildMeta.defaultObject = false;
22
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
23
+ buildMeta.exportsType = undefined;
24
+ buildMeta.defaultObject = false;
23
25
  }
24
26
  };
25
27
 
@@ -32,8 +34,9 @@ exports.enable = parserState => {
32
34
  if (value === false) return;
33
35
  parserStateExportsState.set(parserState, true);
34
36
  if (value !== true) {
35
- parserState.module.buildMeta.exportsType = "default";
36
- parserState.module.buildMeta.defaultObject = "redirect";
37
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
38
+ buildMeta.exportsType = "default";
39
+ buildMeta.defaultObject = "redirect";
37
40
  }
38
41
  };
39
42
 
@@ -44,7 +47,7 @@ exports.enable = parserState => {
44
47
  exports.setFlagged = parserState => {
45
48
  const value = parserStateExportsState.get(parserState);
46
49
  if (value !== true) return;
47
- const buildMeta = parserState.module.buildMeta;
50
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
48
51
  if (buildMeta.exportsType === "dynamic") return;
49
52
  buildMeta.exportsType = "flagged";
50
53
  };
@@ -56,7 +59,8 @@ exports.setFlagged = parserState => {
56
59
  exports.setDynamic = parserState => {
57
60
  const value = parserStateExportsState.get(parserState);
58
61
  if (value !== true) return;
59
- parserState.module.buildMeta.exportsType = "dynamic";
62
+ /** @type {BuildMeta} */
63
+ (parserState.module.buildMeta).exportsType = "dynamic";
60
64
  };
61
65
 
62
66
  /**
@@ -16,6 +16,9 @@ const NullDependency = require("./NullDependency");
16
16
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
17
  /** @typedef {import("../Module")} Module */
18
18
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
20
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
19
22
  /** @typedef {import("../util/Hash")} Hash */
20
23
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
21
24
 
@@ -48,19 +51,23 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
48
51
  switch (property) {
49
52
  case "canMangle": {
50
53
  const exportsInfo = moduleGraph.getExportsInfo(module);
51
- const exportInfo = exportsInfo.getExportInfo(exportName);
54
+ const exportInfo = exportsInfo.getExportInfo(
55
+ /** @type {string} */ (exportName)
56
+ );
52
57
  if (exportInfo) return exportInfo.canMangle;
53
58
  return exportsInfo.otherExportsInfo.canMangle;
54
59
  }
55
60
  case "used":
56
61
  return (
57
- moduleGraph.getExportsInfo(module).getUsed(exportName, runtime) !==
62
+ moduleGraph
63
+ .getExportsInfo(module)
64
+ .getUsed(/** @type {string} */ (exportName), runtime) !==
58
65
  UsageState.Unused
59
66
  );
60
67
  case "useInfo": {
61
68
  const state = moduleGraph
62
69
  .getExportsInfo(module)
63
- .getUsed(exportName, runtime);
70
+ .getUsed(/** @type {string} */ (exportName), runtime);
64
71
  switch (state) {
65
72
  case UsageState.Used:
66
73
  case UsageState.OnlyPropertiesUsed:
@@ -76,12 +83,19 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
76
83
  }
77
84
  }
78
85
  case "provideInfo":
79
- return moduleGraph.getExportsInfo(module).isExportProvided(exportName);
86
+ return moduleGraph
87
+ .getExportsInfo(module)
88
+ .isExportProvided(/** @type {string} */ (exportName));
80
89
  }
81
90
  return undefined;
82
91
  };
83
92
 
84
93
  class ExportsInfoDependency extends NullDependency {
94
+ /**
95
+ * @param {Range} range range
96
+ * @param {TODO} exportName export name
97
+ * @param {string | null} property property
98
+ */
85
99
  constructor(range, exportName, property) {
86
100
  super();
87
101
  this.range = range;
@@ -89,6 +103,9 @@ class ExportsInfoDependency extends NullDependency {
89
103
  this.property = property;
90
104
  }
91
105
 
106
+ /**
107
+ * @param {ObjectSerializerContext} context context
108
+ */
92
109
  serialize(context) {
93
110
  const { write } = context;
94
111
  write(this.range);
@@ -97,6 +114,10 @@ class ExportsInfoDependency extends NullDependency {
97
114
  super.serialize(context);
98
115
  }
99
116
 
117
+ /**
118
+ * @param {ObjectDeserializerContext} context context
119
+ * @returns {ExportsInfoDependency} ExportsInfoDependency
120
+ */
100
121
  static deserialize(context) {
101
122
  const obj = new ExportsInfoDependency(
102
123
  context.read(),
@@ -13,11 +13,14 @@ const NullDependency = require("./NullDependency");
13
13
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
14
14
  /** @typedef {import("../Dependency")} Dependency */
15
15
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
19
  /** @typedef {import("./HarmonyAcceptImportDependency")} HarmonyAcceptImportDependency */
17
20
 
18
21
  class HarmonyAcceptDependency extends NullDependency {
19
22
  /**
20
- * @param {[number, number]} range expression range
23
+ * @param {Range} range expression range
21
24
  * @param {HarmonyAcceptImportDependency[]} dependencies import dependencies
22
25
  * @param {boolean} hasCallback true, if the range wraps an existing callback
23
26
  */
@@ -32,6 +35,9 @@ class HarmonyAcceptDependency extends NullDependency {
32
35
  return "accepted harmony modules";
33
36
  }
34
37
 
38
+ /**
39
+ * @param {ObjectSerializerContext} context context
40
+ */
35
41
  serialize(context) {
36
42
  const { write } = context;
37
43
  write(this.range);
@@ -40,6 +46,9 @@ class HarmonyAcceptDependency extends NullDependency {
40
46
  super.serialize(context);
41
47
  }
42
48
 
49
+ /**
50
+ * @param {ObjectDeserializerContext} context context
51
+ */
43
52
  deserialize(context) {
44
53
  const { read } = context;
45
54
  this.range = read();
@@ -14,6 +14,9 @@ const NullDependency = require("./NullDependency");
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
15
 
16
16
  class HarmonyAcceptImportDependency extends HarmonyImportDependency {
17
+ /**
18
+ * @param {string} request the request string
19
+ */
17
20
  constructor(request) {
18
21
  super(request, NaN);
19
22
  this.weak = true;
@@ -15,6 +15,7 @@ const NullDependency = require("./NullDependency");
15
15
  /** @typedef {import("../Dependency")} Dependency */
16
16
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
17
  /** @typedef {import("../Module")} Module */
18
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
18
19
 
19
20
  class HarmonyCompatibilityDependency extends NullDependency {
20
21
  get type() {
@@ -80,7 +81,7 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
80
81
  0,
81
82
  undefined,
82
83
  `\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${
83
- module.buildMeta.async ? ", 1" : ""
84
+ /** @type {BuildMeta} */ (module.buildMeta).async ? ", 1" : ""
84
85
  });`
85
86
  )
86
87
  );
@@ -5,19 +5,32 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { JAVASCRIPT_MODULE_TYPE_ESM } = require("../ModuleTypeConstants");
8
9
  const DynamicExports = require("./DynamicExports");
9
10
  const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
10
11
  const HarmonyExports = require("./HarmonyExports");
11
12
 
13
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
14
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
15
+ /** @typedef {import("./HarmonyModulesPlugin").HarmonyModulesPluginOptions} HarmonyModulesPluginOptions */
16
+
12
17
  module.exports = class HarmonyDetectionParserPlugin {
18
+ /**
19
+ * @param {HarmonyModulesPluginOptions} options options
20
+ */
13
21
  constructor(options) {
14
22
  const { topLevelAwait = false } = options || {};
15
23
  this.topLevelAwait = topLevelAwait;
16
24
  }
17
25
 
26
+ /**
27
+ * @param {JavascriptParser} parser the parser
28
+ * @returns {void}
29
+ */
18
30
  apply(parser) {
19
31
  parser.hooks.program.tap("HarmonyDetectionParserPlugin", ast => {
20
- const isStrictHarmony = parser.state.module.type === "javascript/esm";
32
+ const isStrictHarmony =
33
+ parser.state.module.type === JAVASCRIPT_MODULE_TYPE_ESM;
21
34
  const isHarmony =
22
35
  isStrictHarmony ||
23
36
  ast.body.some(
@@ -60,15 +73,22 @@ module.exports = class HarmonyDetectionParserPlugin {
60
73
  "Top-level-await is only supported in EcmaScript Modules"
61
74
  );
62
75
  }
63
- module.buildMeta.async = true;
76
+ /** @type {BuildMeta} */
77
+ (module.buildMeta).async = true;
64
78
  });
65
79
 
80
+ /**
81
+ * @returns {boolean | undefined} true if in harmony
82
+ */
66
83
  const skipInHarmony = () => {
67
84
  if (HarmonyExports.isEnabled(parser.state)) {
68
85
  return true;
69
86
  }
70
87
  };
71
88
 
89
+ /**
90
+ * @returns {null | undefined} null if in harmony
91
+ */
72
92
  const nullInHarmony = () => {
73
93
  if (HarmonyExports.isEnabled(parser.state)) {
74
94
  return null;
@@ -12,6 +12,12 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
12
12
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
13
  /** @typedef {import("../Dependency")} Dependency */
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
16
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
17
+ /** @typedef {import("../javascript/JavascriptParser").Assertions} Assertions */
18
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
19
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
20
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
21
 
16
22
  /**
17
23
  * Dependency for static evaluating import specifier. e.g.
@@ -21,8 +27,17 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
21
27
  * a.x !== undefined; // if x value statically analyzable
22
28
  */
23
29
  class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDependency {
30
+ /**
31
+ * @param {string} request the request string
32
+ * @param {number} sourceOrder source order
33
+ * @param {TODO} ids ids
34
+ * @param {TODO} name name
35
+ * @param {Range} range location in source code
36
+ * @param {Assertions} assertions assertions
37
+ * @param {string} operator operator
38
+ */
24
39
  constructor(request, sourceOrder, ids, name, range, assertions, operator) {
25
- super(request, sourceOrder, ids, name, range, false, assertions);
40
+ super(request, sourceOrder, ids, name, range, false, assertions, []);
26
41
  this.operator = operator;
27
42
  }
28
43
 
@@ -30,12 +45,18 @@ class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDe
30
45
  return `evaluated X ${this.operator} harmony import specifier`;
31
46
  }
32
47
 
48
+ /**
49
+ * @param {ObjectSerializerContext} context context
50
+ */
33
51
  serialize(context) {
34
52
  super.serialize(context);
35
53
  const { write } = context;
36
54
  write(this.operator);
37
55
  }
38
56
 
57
+ /**
58
+ * @param {ObjectDeserializerContext} context context
59
+ */
39
60
  deserialize(context) {
40
61
  super.deserialize(context);
41
62
  const { read } = context;
@@ -66,15 +87,20 @@ HarmonyEvaluatedImportSpecifierDependency.Template = class HarmonyEvaluatedImpor
66
87
  // Skip rendering depending when dependency is conditional
67
88
  if (connection && !connection.isTargetActive(runtime)) return;
68
89
 
69
- const exportsInfo = moduleGraph.getExportsInfo(connection.module);
90
+ const exportsInfo = moduleGraph.getExportsInfo(
91
+ /** @type {ModuleGraphConnection} */ (connection).module
92
+ );
70
93
  const ids = dep.getIds(moduleGraph);
71
94
 
72
95
  let value;
73
96
 
74
- const exportsType = connection.module.getExportsType(
75
- moduleGraph,
76
- module.buildMeta.strictHarmonyModule
77
- );
97
+ const exportsType =
98
+ /** @type {ModuleGraphConnection} */
99
+ (connection).module.getExportsType(
100
+ moduleGraph,
101
+ /** @type {BuildMeta} */
102
+ (module.buildMeta).strictHarmonyModule
103
+ );
78
104
  switch (exportsType) {
79
105
  case "default-with-named": {
80
106
  if (ids[0] === "default") {
@@ -18,9 +18,14 @@ const {
18
18
  } = require("./HarmonyImportDependencyParserPlugin");
19
19
  const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
20
20
 
21
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
22
+
21
23
  const { HarmonyStarExportsList } = HarmonyExportImportedSpecifierDependency;
22
24
 
23
25
  module.exports = class HarmonyExportDependencyParserPlugin {
26
+ /**
27
+ * @param {import("../../declarations/WebpackOptions").JavascriptParserOptions} options options
28
+ */
24
29
  constructor(options) {
25
30
  this.exportPresenceMode =
26
31
  options.reexportExportsPresence !== undefined
@@ -8,6 +8,7 @@
8
8
  const ConcatenationScope = require("../ConcatenationScope");
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const makeSerializable = require("../util/makeSerializable");
11
+ const propertyAccess = require("../util/propertyAccess");
11
12
  const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
12
13
  const NullDependency = require("./NullDependency");
13
14
 
@@ -17,8 +18,17 @@ const NullDependency = require("./NullDependency");
17
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
18
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
19
20
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
21
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
23
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
24
 
21
25
  class HarmonyExportExpressionDependency extends NullDependency {
26
+ /**
27
+ * @param {Range} range range
28
+ * @param {Range} rangeStatement range statement
29
+ * @param {string} prefix prefix
30
+ * @param {string | { range: Range, prefix: string, suffix: string }} [declarationId] declaration id
31
+ */
22
32
  constructor(range, rangeStatement, prefix, declarationId) {
23
33
  super();
24
34
  this.range = range;
@@ -54,6 +64,9 @@ class HarmonyExportExpressionDependency extends NullDependency {
54
64
  return false;
55
65
  }
56
66
 
67
+ /**
68
+ * @param {ObjectSerializerContext} context context
69
+ */
57
70
  serialize(context) {
58
71
  const { write } = context;
59
72
  write(this.range);
@@ -63,6 +76,9 @@ class HarmonyExportExpressionDependency extends NullDependency {
63
76
  super.serialize(context);
64
77
  }
65
78
 
79
+ /**
80
+ * @param {ObjectDeserializerContext} context context
81
+ */
66
82
  deserialize(context) {
67
83
  const { read } = context;
68
84
  this.range = read();
@@ -135,6 +151,7 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
135
151
  `/* harmony default export */ ${dep.prefix}`
136
152
  );
137
153
  } else {
154
+ /** @type {string} */
138
155
  let content;
139
156
  const name = ConcatenationScope.DEFAULT_EXPORT;
140
157
  if (runtimeTemplate.supportsConst()) {
@@ -164,9 +181,9 @@ HarmonyExportExpressionDependency.Template = class HarmonyExportDependencyTempla
164
181
  if (used) {
165
182
  runtimeRequirements.add(RuntimeGlobals.exports);
166
183
  // This is a little bit incorrect as TDZ is not correct, but we can't use const.
167
- content = `/* harmony default export */ ${exportsName}[${JSON.stringify(
168
- used
169
- )}] = `;
184
+ content = `/* harmony default export */ ${exportsName}${propertyAccess(
185
+ typeof used === "string" ? [used] : used
186
+ )} = `;
170
187
  } else {
171
188
  content = `/* unused harmony default export */ var ${name} = `;
172
189
  }
@@ -11,8 +11,15 @@ const NullDependency = require("./NullDependency");
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
17
 
15
18
  class HarmonyExportHeaderDependency extends NullDependency {
19
+ /**
20
+ * @param {Range} range range
21
+ * @param {Range} rangeStatement range statement
22
+ */
16
23
  constructor(range, rangeStatement) {
17
24
  super();
18
25
  this.range = range;
@@ -23,6 +30,9 @@ class HarmonyExportHeaderDependency extends NullDependency {
23
30
  return "harmony export header";
24
31
  }
25
32
 
33
+ /**
34
+ * @param {ObjectSerializerContext} context context
35
+ */
26
36
  serialize(context) {
27
37
  const { write } = context;
28
38
  write(this.range);
@@ -30,6 +40,9 @@ class HarmonyExportHeaderDependency extends NullDependency {
30
40
  super.serialize(context);
31
41
  }
32
42
 
43
+ /**
44
+ * @param {ObjectDeserializerContext} context context
45
+ */
33
46
  deserialize(context) {
34
47
  const { read } = context;
35
48
  this.range = read();