webpack 5.59.0 → 5.94.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
@@ -5,13 +5,22 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("../ModuleTypeConstants");
8
13
  const ImportContextDependency = require("./ImportContextDependency");
9
14
  const ImportDependency = require("./ImportDependency");
10
15
  const ImportEagerDependency = require("./ImportEagerDependency");
11
16
  const ImportParserPlugin = require("./ImportParserPlugin");
12
17
  const ImportWeakDependency = require("./ImportWeakDependency");
13
18
 
19
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
14
20
  /** @typedef {import("../Compiler")} Compiler */
21
+ /** @typedef {import("../javascript/JavascriptParser")} Parser */
22
+
23
+ const PLUGIN_NAME = "ImportPlugin";
15
24
 
16
25
  class ImportPlugin {
17
26
  /**
@@ -21,7 +30,7 @@ class ImportPlugin {
21
30
  */
22
31
  apply(compiler) {
23
32
  compiler.hooks.compilation.tap(
24
- "ImportPlugin",
33
+ PLUGIN_NAME,
25
34
  (compilation, { contextModuleFactory, normalModuleFactory }) => {
26
35
  compilation.dependencyFactories.set(
27
36
  ImportDependency,
@@ -59,6 +68,11 @@ class ImportPlugin {
59
68
  new ImportContextDependency.Template()
60
69
  );
61
70
 
71
+ /**
72
+ * @param {Parser} parser parser parser
73
+ * @param {JavascriptParserOptions} parserOptions parserOptions
74
+ * @returns {void}
75
+ */
62
76
  const handler = (parser, parserOptions) => {
63
77
  if (parserOptions.import !== undefined && !parserOptions.import)
64
78
  return;
@@ -67,14 +81,14 @@ class ImportPlugin {
67
81
  };
68
82
 
69
83
  normalModuleFactory.hooks.parser
70
- .for("javascript/auto")
71
- .tap("ImportPlugin", handler);
84
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
85
+ .tap(PLUGIN_NAME, handler);
72
86
  normalModuleFactory.hooks.parser
73
- .for("javascript/dynamic")
74
- .tap("ImportPlugin", handler);
87
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
88
+ .tap(PLUGIN_NAME, handler);
75
89
  normalModuleFactory.hooks.parser
76
- .for("javascript/esm")
77
- .tap("ImportPlugin", handler);
90
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
91
+ .tap(PLUGIN_NAME, handler);
78
92
  }
79
93
  );
80
94
  }
@@ -12,16 +12,21 @@ const ImportDependency = require("./ImportDependency");
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../Module")} Module */
16
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
15
17
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
18
+ /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
19
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
16
20
 
17
21
  class ImportWeakDependency extends ImportDependency {
18
22
  /**
19
23
  * @param {string} request the request
20
- * @param {[number, number]} range expression range
21
- * @param {string[][]=} referencedExports list of referenced exports
24
+ * @param {Range} range expression range
25
+ * @param {(string[][] | null)=} referencedExports list of referenced exports
26
+ * @param {ImportAttributes=} attributes import attributes
22
27
  */
23
- constructor(request, range, referencedExports) {
24
- super(request, range, referencedExports);
28
+ constructor(request, range, referencedExports, attributes) {
29
+ super(request, range, referencedExports, attributes);
25
30
  this.weak = true;
26
31
  }
27
32
 
@@ -52,9 +57,9 @@ ImportWeakDependency.Template = class ImportDependencyTemplate extends (
52
57
  const dep = /** @type {ImportWeakDependency} */ (dependency);
53
58
  const content = runtimeTemplate.moduleNamespacePromise({
54
59
  chunkGraph,
55
- module: moduleGraph.getModule(dep),
60
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
56
61
  request: dep.request,
57
- strict: module.buildMeta.strictHarmonyModule,
62
+ strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
58
63
  message: "import() weak",
59
64
  weak: true,
60
65
  runtimeRequirements
@@ -13,41 +13,47 @@ const NullDependency = require("./NullDependency");
13
13
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
14
14
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
15
15
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
+ /** @typedef {import("../json/JsonData")} JsonData */
17
+ /** @typedef {import("../json/JsonData").RawJsonData} RawJsonData */
18
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
19
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
20
  /** @typedef {import("../util/Hash")} Hash */
17
21
 
22
+ /**
23
+ * @param {RawJsonData} data data
24
+ * @returns {TODO} value
25
+ */
18
26
  const getExportsFromData = data => {
19
27
  if (data && typeof data === "object") {
20
28
  if (Array.isArray(data)) {
21
- return data.map((item, idx) => {
22
- return {
23
- name: `${idx}`,
24
- canMangle: true,
25
- exports: getExportsFromData(item)
26
- };
29
+ return data.length < 100
30
+ ? data.map((item, idx) => ({
31
+ name: `${idx}`,
32
+ canMangle: true,
33
+ exports: getExportsFromData(item)
34
+ }))
35
+ : undefined;
36
+ }
37
+ const exports = [];
38
+ for (const key of Object.keys(data)) {
39
+ exports.push({
40
+ name: key,
41
+ canMangle: true,
42
+ exports: getExportsFromData(data[key])
27
43
  });
28
- } else {
29
- const exports = [];
30
- for (const key of Object.keys(data)) {
31
- exports.push({
32
- name: key,
33
- canMangle: true,
34
- exports: getExportsFromData(data[key])
35
- });
36
- }
37
- return exports;
38
44
  }
45
+ return exports;
39
46
  }
40
47
  return undefined;
41
48
  };
42
49
 
43
50
  class JsonExportsDependency extends NullDependency {
44
51
  /**
45
- * @param {(string | ExportSpec)[]} exports json exports
52
+ * @param {JsonData} data json data
46
53
  */
47
- constructor(exports) {
54
+ constructor(data) {
48
55
  super();
49
- this.exports = exports;
50
- this._hashUpdate = undefined;
56
+ this.data = data;
51
57
  }
52
58
 
53
59
  get type() {
@@ -61,7 +67,9 @@ class JsonExportsDependency extends NullDependency {
61
67
  */
62
68
  getExports(moduleGraph) {
63
69
  return {
64
- exports: this.exports,
70
+ exports: getExportsFromData(
71
+ this.data && /** @type {RawJsonData} */ (this.data.get())
72
+ ),
65
73
  dependencies: undefined
66
74
  };
67
75
  }
@@ -73,23 +81,24 @@ class JsonExportsDependency extends NullDependency {
73
81
  * @returns {void}
74
82
  */
75
83
  updateHash(hash, context) {
76
- if (this._hashUpdate === undefined) {
77
- this._hashUpdate = this.exports
78
- ? JSON.stringify(this.exports)
79
- : "undefined";
80
- }
81
- hash.update(this._hashUpdate);
84
+ this.data.updateHash(hash);
82
85
  }
83
86
 
87
+ /**
88
+ * @param {ObjectSerializerContext} context context
89
+ */
84
90
  serialize(context) {
85
91
  const { write } = context;
86
- write(this.exports);
92
+ write(this.data);
87
93
  super.serialize(context);
88
94
  }
89
95
 
96
+ /**
97
+ * @param {ObjectDeserializerContext} context context
98
+ */
90
99
  deserialize(context) {
91
100
  const { read } = context;
92
- this.exports = read();
101
+ this.data = read();
93
102
  super.deserialize(context);
94
103
  }
95
104
  }
@@ -100,4 +109,3 @@ makeSerializable(
100
109
  );
101
110
 
102
111
  module.exports = JsonExportsDependency;
103
- module.exports.getExportsFromData = getExportsFromData;
@@ -7,6 +7,12 @@
7
7
 
8
8
  const ModuleDependency = require("./ModuleDependency");
9
9
 
10
+ /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
11
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
12
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
13
+ /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
14
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
15
+
10
16
  class LoaderDependency extends ModuleDependency {
11
17
  /**
12
18
  * @param {string} request request string
@@ -22,6 +28,14 @@ class LoaderDependency extends ModuleDependency {
22
28
  get category() {
23
29
  return "loader";
24
30
  }
31
+
32
+ /**
33
+ * @param {ModuleGraph} moduleGraph module graph
34
+ * @returns {null | false | GetConditionFn} function to determine if the connection is active
35
+ */
36
+ getCondition(moduleGraph) {
37
+ return false;
38
+ }
25
39
  }
26
40
 
27
41
  module.exports = LoaderDependency;
@@ -7,6 +7,12 @@
7
7
 
8
8
  const ModuleDependency = require("./ModuleDependency");
9
9
 
10
+ /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
11
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
12
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
13
+ /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
14
+ /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
15
+
10
16
  class LoaderImportDependency extends ModuleDependency {
11
17
  /**
12
18
  * @param {string} request request string
@@ -23,6 +29,14 @@ class LoaderImportDependency extends ModuleDependency {
23
29
  get category() {
24
30
  return "loaderImport";
25
31
  }
32
+
33
+ /**
34
+ * @param {ModuleGraph} moduleGraph module graph
35
+ * @returns {null | false | GetConditionFn} function to determine if the connection is active
36
+ */
37
+ getCondition(moduleGraph) {
38
+ return false;
39
+ }
26
40
  }
27
41
 
28
42
  module.exports = LoaderImportDependency;
@@ -10,33 +10,29 @@ const LazySet = require("../util/LazySet");
10
10
  const LoaderDependency = require("./LoaderDependency");
11
11
  const LoaderImportDependency = require("./LoaderImportDependency");
12
12
 
13
+ /** @typedef {import("../../declarations/LoaderContext").LoaderPluginLoaderContext} LoaderPluginLoaderContext */
13
14
  /** @typedef {import("../Compilation").DepConstructor} DepConstructor */
15
+ /** @typedef {import("../Compilation").ExecuteModuleResult} ExecuteModuleResult */
14
16
  /** @typedef {import("../Compiler")} Compiler */
15
17
  /** @typedef {import("../Module")} Module */
16
-
17
- /**
18
- * @callback LoadModuleCallback
19
- * @param {Error=} err error object
20
- * @param {string | Buffer=} source source code
21
- * @param {object=} map source map
22
- * @param {Module=} module loaded module if successful
23
- */
18
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
24
19
 
25
20
  /**
26
21
  * @callback ImportModuleCallback
27
- * @param {Error=} err error object
22
+ * @param {(Error | null)=} err error object
28
23
  * @param {any=} exports exports of the evaluated module
29
24
  */
30
25
 
31
26
  /**
32
- * @typedef {Object} ImportModuleOptions
27
+ * @typedef {object} ImportModuleOptions
33
28
  * @property {string=} layer the target layer
34
29
  * @property {string=} publicPath the target public path
30
+ * @property {string=} baseUri target base uri
35
31
  */
36
32
 
37
33
  class LoaderPlugin {
38
34
  /**
39
- * @param {Object} options options
35
+ * @param {object} options options
40
36
  */
41
37
  constructor(options = {}) {}
42
38
 
@@ -65,11 +61,6 @@ class LoaderPlugin {
65
61
  NormalModule.getCompilationHooks(compilation).loader.tap(
66
62
  "LoaderPlugin",
67
63
  loaderContext => {
68
- /**
69
- * @param {string} request the request string to load the module from
70
- * @param {LoadModuleCallback} callback callback returning the loaded module or error
71
- * @returns {void}
72
- */
73
64
  loaderContext.loadModule = (request, callback) => {
74
65
  const dep = new LoaderDependency(request);
75
66
  dep.loc = {
@@ -90,7 +81,9 @@ class LoaderPlugin {
90
81
  {
91
82
  factory,
92
83
  dependencies: [dep],
93
- originModule: loaderContext._module,
84
+ originModule:
85
+ /** @type {NormalModule} */
86
+ (loaderContext._module),
94
87
  context: loaderContext.context,
95
88
  recursive: false
96
89
  },
@@ -116,7 +109,8 @@ class LoaderPlugin {
116
109
  )
117
110
  );
118
111
  }
119
- let source, map;
112
+ let map;
113
+ let source;
120
114
  if (moduleSource.sourceAndMap) {
121
115
  const sourceAndMap = moduleSource.sourceAndMap();
122
116
  map = sourceAndMap.map;
@@ -148,15 +142,20 @@ class LoaderPlugin {
148
142
  for (const d of buildDependencies) {
149
143
  loaderContext.addBuildDependency(d);
150
144
  }
151
- return callback(null, source, map, referencedModule);
145
+ return callback(
146
+ null,
147
+ source,
148
+ /** @type {object | null} */ (map),
149
+ referencedModule
150
+ );
152
151
  }
153
152
  );
154
153
  };
155
154
 
156
155
  /**
157
156
  * @param {string} request the request string to load the module from
158
- * @param {ImportModuleOptions=} options options
159
- * @param {ImportModuleCallback=} callback callback returning the exports
157
+ * @param {ImportModuleOptions} options options
158
+ * @param {ImportModuleCallback} callback callback returning the exports
160
159
  * @returns {void}
161
160
  */
162
161
  const importModule = (request, options, callback) => {
@@ -179,12 +178,15 @@ class LoaderPlugin {
179
178
  {
180
179
  factory,
181
180
  dependencies: [dep],
182
- originModule: loaderContext._module,
181
+ originModule:
182
+ /** @type {NormalModule} */
183
+ (loaderContext._module),
183
184
  contextInfo: {
184
185
  issuerLayer: options.layer
185
186
  },
186
187
  context: loaderContext.context,
187
- connectOrigin: false
188
+ connectOrigin: false,
189
+ checkCycle: true
188
190
  },
189
191
  err => {
190
192
  compilation.buildQueue.decreaseParallelism();
@@ -199,47 +201,59 @@ class LoaderPlugin {
199
201
  referencedModule,
200
202
  {
201
203
  entryOptions: {
204
+ baseUri: options.baseUri,
202
205
  publicPath: options.publicPath
203
206
  }
204
207
  },
205
208
  (err, result) => {
206
209
  if (err) return callback(err);
207
- for (const d of result.fileDependencies) {
210
+ const {
211
+ fileDependencies,
212
+ contextDependencies,
213
+ missingDependencies,
214
+ buildDependencies,
215
+ cacheable,
216
+ assets,
217
+ exports
218
+ } = /** @type {ExecuteModuleResult} */ (result);
219
+ for (const d of fileDependencies) {
208
220
  loaderContext.addDependency(d);
209
221
  }
210
- for (const d of result.contextDependencies) {
222
+ for (const d of contextDependencies) {
211
223
  loaderContext.addContextDependency(d);
212
224
  }
213
- for (const d of result.missingDependencies) {
225
+ for (const d of missingDependencies) {
214
226
  loaderContext.addMissingDependency(d);
215
227
  }
216
- for (const d of result.buildDependencies) {
228
+ for (const d of buildDependencies) {
217
229
  loaderContext.addBuildDependency(d);
218
230
  }
219
- if (result.cacheable === false)
220
- loaderContext.cacheable(false);
221
- for (const [name, { source, info }] of result.assets) {
222
- const { buildInfo } = loaderContext._module;
231
+ if (cacheable === false) loaderContext.cacheable(false);
232
+ for (const [name, { source, info }] of assets) {
233
+ const buildInfo =
234
+ /** @type {BuildInfo} */
235
+ (
236
+ /** @type {NormalModule} */ (loaderContext._module)
237
+ .buildInfo
238
+ );
223
239
  if (!buildInfo.assets) {
224
240
  buildInfo.assets = Object.create(null);
225
241
  buildInfo.assetsInfo = new Map();
226
242
  }
227
- buildInfo.assets[name] = source;
228
- buildInfo.assetsInfo.set(name, info);
243
+ /** @type {NonNullable<BuildInfo["assets"]>} */
244
+ (buildInfo.assets)[name] = source;
245
+ /** @type {NonNullable<BuildInfo["assetsInfo"]>} */
246
+ (buildInfo.assetsInfo).set(name, info);
229
247
  }
230
- callback(null, result.exports);
248
+ callback(null, exports);
231
249
  }
232
250
  );
233
251
  }
234
252
  );
235
253
  };
236
254
 
237
- /**
238
- * @param {string} request the request string to load the module from
239
- * @param {ImportModuleOptions} options options
240
- * @param {ImportModuleCallback=} callback callback returning the exports
241
- * @returns {Promise<any> | void} exports
242
- */
255
+ // eslint-disable-next-line no-warning-comments
256
+ // @ts-ignore Overloading doesn't work
243
257
  loaderContext.importModule = (request, options, callback) => {
244
258
  if (!callback) {
245
259
  return new Promise((resolve, reject) => {
@@ -7,7 +7,14 @@
7
7
 
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
 
10
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
12
+
10
13
  class LocalModule {
14
+ /**
15
+ * @param {string} name name
16
+ * @param {number} idx index
17
+ */
11
18
  constructor(name, idx) {
12
19
  this.name = name;
13
20
  this.idx = idx;
@@ -18,10 +25,16 @@ class LocalModule {
18
25
  this.used = true;
19
26
  }
20
27
 
28
+ /**
29
+ * @returns {string} variable name
30
+ */
21
31
  variableName() {
22
- return "__WEBPACK_LOCAL_MODULE_" + this.idx + "__";
32
+ return `__WEBPACK_LOCAL_MODULE_${this.idx}__`;
23
33
  }
24
34
 
35
+ /**
36
+ * @param {ObjectSerializerContext} context context
37
+ */
25
38
  serialize(context) {
26
39
  const { write } = context;
27
40
 
@@ -30,6 +43,9 @@ class LocalModule {
30
43
  write(this.used);
31
44
  }
32
45
 
46
+ /**
47
+ * @param {ObjectDeserializerContext} context context
48
+ */
33
49
  deserialize(context) {
34
50
  const { read } = context;
35
51
 
@@ -11,8 +11,17 @@ 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 */
17
+ /** @typedef {import("./LocalModule")} LocalModule */
14
18
 
15
19
  class LocalModuleDependency extends NullDependency {
20
+ /**
21
+ * @param {LocalModule} localModule local module
22
+ * @param {Range | undefined} range range
23
+ * @param {boolean} callNew true, when the local module should be called with new
24
+ */
16
25
  constructor(localModule, range, callNew) {
17
26
  super();
18
27
 
@@ -21,6 +30,9 @@ class LocalModuleDependency extends NullDependency {
21
30
  this.callNew = callNew;
22
31
  }
23
32
 
33
+ /**
34
+ * @param {ObjectSerializerContext} context context
35
+ */
24
36
  serialize(context) {
25
37
  const { write } = context;
26
38
 
@@ -31,6 +43,9 @@ class LocalModuleDependency extends NullDependency {
31
43
  super.serialize(context);
32
44
  }
33
45
 
46
+ /**
47
+ * @param {ObjectDeserializerContext} context context
48
+ */
34
49
  deserialize(context) {
35
50
  const { read } = context;
36
51
 
@@ -7,11 +7,18 @@
7
7
 
8
8
  const LocalModule = require("./LocalModule");
9
9
 
10
+ /** @typedef {import("../javascript/JavascriptParser").ParserState} ParserState */
11
+
12
+ /**
13
+ * @param {string} parent parent module
14
+ * @param {string} mod module to resolve
15
+ * @returns {string} resolved module
16
+ */
10
17
  const lookup = (parent, mod) => {
11
18
  if (mod.charAt(0) !== ".") return mod;
12
19
 
13
- var path = parent.split("/");
14
- var segments = mod.split("/");
20
+ const path = parent.split("/");
21
+ const segments = mod.split("/");
15
22
  path.pop();
16
23
 
17
24
  for (let i = 0; i < segments.length; i++) {
@@ -26,7 +33,12 @@ const lookup = (parent, mod) => {
26
33
  return path.join("/");
27
34
  };
28
35
 
29
- exports.addLocalModule = (state, name) => {
36
+ /**
37
+ * @param {ParserState} state parser state
38
+ * @param {string} name name
39
+ * @returns {LocalModule} local module
40
+ */
41
+ module.exports.addLocalModule = (state, name) => {
30
42
  if (!state.localModules) {
31
43
  state.localModules = [];
32
44
  }
@@ -35,7 +47,13 @@ exports.addLocalModule = (state, name) => {
35
47
  return m;
36
48
  };
37
49
 
38
- exports.getLocalModule = (state, name, namedModule) => {
50
+ /**
51
+ * @param {ParserState} state parser state
52
+ * @param {string} name name
53
+ * @param {string} [namedModule] named module
54
+ * @returns {LocalModule | null} local module or null
55
+ */
56
+ module.exports.getLocalModule = (state, name, namedModule) => {
39
57
  if (!state.localModules) return null;
40
58
  if (namedModule) {
41
59
  // resolve dependency name relative to the defining named module
@@ -18,6 +18,8 @@ const NullDependency = require("./NullDependency");
18
18
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
19
  /** @typedef {import("../DependencyTemplates")} DependencyTemplates */
20
20
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
23
  /** @typedef {import("../util/Hash")} Hash */
22
24
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
23
25
 
@@ -48,7 +50,7 @@ class ModuleDecoratorDependency extends NullDependency {
48
50
  * @returns {string | null} an identifier to merge equal requests
49
51
  */
50
52
  getResourceIdentifier() {
51
- return `self`;
53
+ return "self";
52
54
  }
53
55
 
54
56
  /**
@@ -76,6 +78,9 @@ class ModuleDecoratorDependency extends NullDependency {
76
78
  hash.update(this._hashUpdate);
77
79
  }
78
80
 
81
+ /**
82
+ * @param {ObjectSerializerContext} context context
83
+ */
79
84
  serialize(context) {
80
85
  const { write } = context;
81
86
  write(this.decorator);
@@ -83,6 +88,9 @@ class ModuleDecoratorDependency extends NullDependency {
83
88
  super.serialize(context);
84
89
  }
85
90
 
91
+ /**
92
+ * @param {ObjectDeserializerContext} context context
93
+ */
86
94
  deserialize(context) {
87
95
  const { read } = context;
88
96
  this.decorator = read();