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
@@ -15,6 +15,7 @@ const ProvideSharedModuleFactory = require("./ProvideSharedModuleFactory");
15
15
  /** @typedef {import("../../declarations/plugins/sharing/ProvideSharedPlugin").ProvideSharedPluginOptions} ProvideSharedPluginOptions */
16
16
  /** @typedef {import("../Compilation")} Compilation */
17
17
  /** @typedef {import("../Compiler")} Compiler */
18
+ /** @typedef {import("../NormalModuleFactory").NormalModuleCreateData} NormalModuleCreateData */
18
19
 
19
20
  const validate = createSchemaValidation(
20
21
  require("../../schemas/plugins/sharing/ProvideSharedPlugin.check.js"),
@@ -26,7 +27,7 @@ const validate = createSchemaValidation(
26
27
  );
27
28
 
28
29
  /**
29
- * @typedef {Object} ProvideOptions
30
+ * @typedef {object} ProvideOptions
30
31
  * @property {string} shareKey
31
32
  * @property {string} shareScope
32
33
  * @property {string | undefined | false} version
@@ -42,27 +43,28 @@ class ProvideSharedPlugin {
42
43
  constructor(options) {
43
44
  validate(options);
44
45
 
45
- /** @type {[string, ProvideOptions][]} */
46
- this._provides = parseOptions(
47
- options.provides,
48
- item => {
49
- if (Array.isArray(item))
50
- throw new Error("Unexpected array of provides");
51
- /** @type {ProvideOptions} */
52
- const result = {
53
- shareKey: item,
54
- version: undefined,
55
- shareScope: options.shareScope || "default",
56
- eager: false
57
- };
58
- return result;
59
- },
60
- item => ({
61
- shareKey: item.shareKey,
62
- version: item.version,
63
- shareScope: item.shareScope || options.shareScope || "default",
64
- eager: !!item.eager
65
- })
46
+ this._provides = /** @type {[string, ProvideOptions][]} */ (
47
+ parseOptions(
48
+ options.provides,
49
+ item => {
50
+ if (Array.isArray(item))
51
+ throw new Error("Unexpected array of provides");
52
+ /** @type {ProvideOptions} */
53
+ const result = {
54
+ shareKey: item,
55
+ version: undefined,
56
+ shareScope: options.shareScope || "default",
57
+ eager: false
58
+ };
59
+ return result;
60
+ },
61
+ item => ({
62
+ shareKey: item.shareKey,
63
+ version: item.version,
64
+ shareScope: item.shareScope || options.shareScope || "default",
65
+ eager: Boolean(item.eager)
66
+ })
67
+ )
66
68
  );
67
69
  this._provides.sort(([a], [b]) => {
68
70
  if (a < b) return -1;
@@ -111,6 +113,12 @@ class ProvideSharedPlugin {
111
113
  }
112
114
  }
113
115
  compilationData.set(compilation, resolvedProvideMap);
116
+ /**
117
+ * @param {string} key key
118
+ * @param {ProvideOptions} config config
119
+ * @param {NormalModuleCreateData["resource"]} resource resource
120
+ * @param {NormalModuleCreateData["resourceResolveData"]} resourceResolveData resource resolve data
121
+ */
114
122
  const provideSharedModule = (
115
123
  key,
116
124
  config,
@@ -121,7 +129,7 @@ class ProvideSharedPlugin {
121
129
  if (version === undefined) {
122
130
  let details = "";
123
131
  if (!resourceResolveData) {
124
- details = `No resolve data provided from resolver.`;
132
+ details = "No resolve data provided from resolver.";
125
133
  } else {
126
134
  const descriptionFileData =
127
135
  resourceResolveData.descriptionFileData;
@@ -129,8 +137,7 @@ class ProvideSharedPlugin {
129
137
  details =
130
138
  "No description file (usually package.json) found. Add description file with name and version, or manually specify version in shared config.";
131
139
  } else if (!descriptionFileData.version) {
132
- details =
133
- "No version in description file (usually package.json). Add version to description file, or manually specify version in shared config.";
140
+ details = `No version in description file (usually package.json). Add version to description file ${resourceResolveData.descriptionFilePath}, or manually specify version in shared config.`;
134
141
  } else {
135
142
  version = descriptionFileData.version;
136
143
  }
@@ -151,7 +158,7 @@ class ProvideSharedPlugin {
151
158
  normalModuleFactory.hooks.module.tap(
152
159
  "ProvideSharedPlugin",
153
160
  (module, { resource, resourceResolveData }, resolveData) => {
154
- if (resolvedProvideMap.has(resource)) {
161
+ if (resolvedProvideMap.has(/** @type {string} */ (resource))) {
155
162
  return module;
156
163
  }
157
164
  const { request } = resolveData;
@@ -161,7 +168,7 @@ class ProvideSharedPlugin {
161
168
  provideSharedModule(
162
169
  request,
163
170
  config,
164
- resource,
171
+ /** @type {string} */ (resource),
165
172
  resourceResolveData
166
173
  );
167
174
  resolveData.cacheable = false;
@@ -171,12 +178,12 @@ class ProvideSharedPlugin {
171
178
  if (request.startsWith(prefix)) {
172
179
  const remainder = request.slice(prefix.length);
173
180
  provideSharedModule(
174
- resource,
181
+ /** @type {string} */ (resource),
175
182
  {
176
183
  ...config,
177
184
  shareKey: config.shareKey + remainder
178
185
  },
179
- resource,
186
+ /** @type {string} */ (resource),
180
187
  resourceResolveData
181
188
  );
182
189
  resolveData.cacheable = false;
@@ -209,7 +216,7 @@ class ProvideSharedPlugin {
209
216
  },
210
217
  err => {
211
218
  if (err) return reject(err);
212
- resolve();
219
+ resolve(null);
213
220
  }
214
221
  );
215
222
  })
@@ -34,11 +34,11 @@ class SharePlugin {
34
34
  item === key || !isRequiredVersion(item)
35
35
  ? {
36
36
  import: item
37
- }
37
+ }
38
38
  : {
39
39
  import: key,
40
40
  requiredVersion: item
41
- };
41
+ };
42
42
  return config;
43
43
  },
44
44
  item => item
@@ -13,24 +13,31 @@ const {
13
13
  compareStrings
14
14
  } = require("../util/comparators");
15
15
 
16
+ /** @typedef {import("../Chunk")} Chunk */
17
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
18
+ /** @typedef {import("../Compilation")} Compilation */
19
+
16
20
  class ShareRuntimeModule extends RuntimeModule {
17
21
  constructor() {
18
22
  super("sharing");
19
23
  }
20
24
 
21
25
  /**
22
- * @returns {string} runtime code
26
+ * @returns {string | null} runtime code
23
27
  */
24
28
  generate() {
25
- const { compilation, chunkGraph } = this;
29
+ const compilation = /** @type {Compilation} */ (this.compilation);
26
30
  const {
27
31
  runtimeTemplate,
28
32
  codeGenerationResults,
29
- outputOptions: { uniqueName }
33
+ outputOptions: { uniqueName, ignoreBrowserWarnings }
30
34
  } = compilation;
35
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
31
36
  /** @type {Map<string, Map<number, Set<string>>>} */
32
37
  const initCodePerScope = new Map();
33
- for (const chunk of this.chunk.getAllReferencedChunks()) {
38
+ for (const chunk of /** @type {Chunk} */ (
39
+ this.chunk
40
+ ).getAllReferencedChunks()) {
34
41
  const modules = chunkGraph.getOrderedChunkModulesIterableBySourceType(
35
42
  chunk,
36
43
  "share-init",
@@ -77,10 +84,13 @@ class ShareRuntimeModule extends RuntimeModule {
77
84
  `if(!${RuntimeGlobals.hasOwnProperty}(${RuntimeGlobals.shareScopeMap}, name)) ${RuntimeGlobals.shareScopeMap}[name] = {};`,
78
85
  "// runs all init snippets from all modules reachable",
79
86
  `var scope = ${RuntimeGlobals.shareScopeMap}[name];`,
80
- `var warn = ${runtimeTemplate.returningFunction(
81
- 'typeof console !== "undefined" && console.warn && console.warn(msg)',
82
- "msg"
83
- )};`,
87
+ `var warn = ${
88
+ ignoreBrowserWarnings
89
+ ? runtimeTemplate.basicFunction("", "")
90
+ : runtimeTemplate.basicFunction("msg", [
91
+ 'if (typeof console !== "undefined" && console.warn) console.warn(msg);'
92
+ ])
93
+ };`,
84
94
  `var uniqueName = ${JSON.stringify(uniqueName || undefined)};`,
85
95
  `var register = ${runtimeTemplate.basicFunction(
86
96
  "name, version, factory, eager",
@@ -97,7 +107,7 @@ class ShareRuntimeModule extends RuntimeModule {
97
107
  )};`,
98
108
  "try {",
99
109
  Template.indent([
100
- "var module = __webpack_require__(id);",
110
+ `var module = ${RuntimeGlobals.require}(id);`,
101
111
  "if(!module) return;",
102
112
  `var initFn = ${runtimeTemplate.returningFunction(
103
113
  `module && module.init && module.init(${RuntimeGlobals.shareScopeMap}[name], initScope)`,
@@ -105,7 +115,7 @@ class ShareRuntimeModule extends RuntimeModule {
105
115
  )}`,
106
116
  "if(module.then) return promises.push(module.then(initFn, handleError));",
107
117
  "var initResult = initFn(module);",
108
- "if(initResult && initResult.then) return promises.push(initResult.catch(handleError));"
118
+ "if(initResult && initResult.then) return promises.push(initResult['catch'](handleError));"
109
119
  ]),
110
120
  "} catch(err) { handleError(err); }"
111
121
  ])}`,
@@ -13,7 +13,7 @@ const LazySet = require("../util/LazySet");
13
13
 
14
14
  /**
15
15
  * @template T
16
- * @typedef {Object} MatchedConfigs
16
+ * @typedef {object} MatchedConfigs
17
17
  * @property {Map<string, T>} resolved
18
18
  * @property {Map<string, T>} unresolved
19
19
  * @property {Map<string, T>} prefixed
@@ -28,7 +28,7 @@ const RESOLVE_OPTIONS = { dependencyType: "esm" };
28
28
  * @param {[string, T][]} configs to be processed configs
29
29
  * @returns {Promise<MatchedConfigs<T>>} resolved matchers
30
30
  */
31
- exports.resolveMatchedConfigs = (compilation, configs) => {
31
+ module.exports.resolveMatchedConfigs = (compilation, configs) => {
32
32
  /** @type {Map<string, T>} */
33
33
  const resolved = new Map();
34
34
  /** @type {Map<string, T>} */
@@ -47,6 +47,7 @@ exports.resolveMatchedConfigs = (compilation, configs) => {
47
47
  const context = compilation.compiler.context;
48
48
 
49
49
  return Promise.all(
50
+ // eslint-disable-next-line array-callback-return
50
51
  configs.map(([request, config]) => {
51
52
  if (/^\.\.?(\/|$)/.test(request)) {
52
53
  // relative request
@@ -64,10 +65,10 @@ exports.resolveMatchedConfigs = (compilation, configs) => {
64
65
  name: `shared module ${request}`
65
66
  })
66
67
  );
67
- return resolve();
68
+ return resolve(null);
68
69
  }
69
- resolved.set(result, config);
70
- resolve();
70
+ resolved.set(/** @type {string} */ (result), config);
71
+ resolve(null);
71
72
  }
72
73
  );
73
74
  });
@@ -8,21 +8,325 @@
8
8
  const { join, dirname, readJson } = require("../util/fs");
9
9
 
10
10
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
11
+ /** @typedef {import("../util/fs").JsonObject} JsonObject */
12
+ /** @typedef {import("../util/fs").JsonPrimitive} JsonPrimitive */
13
+
14
+ // Extreme shorthand only for github. eg: foo/bar
15
+ const RE_URL_GITHUB_EXTREME_SHORT = /^[^/@:.\s][^/@:\s]*\/[^@:\s]*[^/@:\s]#\S+/;
16
+
17
+ // Short url with specific protocol. eg: github:foo/bar
18
+ const RE_GIT_URL_SHORT = /^(github|gitlab|bitbucket|gist):\/?[^/.]+\/?/i;
19
+
20
+ // Currently supported protocols
21
+ const RE_PROTOCOL =
22
+ /^((git\+)?(ssh|https?|file)|git|github|gitlab|bitbucket|gist):$/i;
23
+
24
+ // Has custom protocol
25
+ const RE_CUSTOM_PROTOCOL = /^((git\+)?(ssh|https?|file)|git):\/\//i;
26
+
27
+ // Valid hash format for npm / yarn ...
28
+ const RE_URL_HASH_VERSION = /#(?:semver:)?(.+)/;
29
+
30
+ // Simple hostname validate
31
+ const RE_HOSTNAME = /^(?:[^/.]+(\.[^/]+)+|localhost)$/;
32
+
33
+ // For hostname with colon. eg: ssh://user@github.com:foo/bar
34
+ const RE_HOSTNAME_WITH_COLON =
35
+ /([^/@#:.]+(?:\.[^/@#:.]+)+|localhost):([^#/0-9]+)/;
36
+
37
+ // Reg for url without protocol
38
+ const RE_NO_PROTOCOL = /^([^/@#:.]+(?:\.[^/@#:.]+)+)/;
39
+
40
+ // RegExp for version string
41
+ const VERSION_PATTERN_REGEXP = /^([\d^=v<>~]|[*xX]$)/;
42
+
43
+ // Specific protocol for short url without normal hostname
44
+ const PROTOCOLS_FOR_SHORT = [
45
+ "github:",
46
+ "gitlab:",
47
+ "bitbucket:",
48
+ "gist:",
49
+ "file:"
50
+ ];
51
+
52
+ // Default protocol for git url
53
+ const DEF_GIT_PROTOCOL = "git+ssh://";
54
+
55
+ // thanks to https://github.com/npm/hosted-git-info/blob/latest/git-host-info.js
56
+ const extractCommithashByDomain = {
57
+ /**
58
+ * @param {string} pathname pathname
59
+ * @param {string} hash hash
60
+ * @returns {string | undefined} hash
61
+ */
62
+ "github.com": (pathname, hash) => {
63
+ let [, user, project, type, commithash] = pathname.split("/", 5);
64
+ if (type && type !== "tree") {
65
+ return;
66
+ }
67
+
68
+ commithash = !type ? hash : `#${commithash}`;
69
+
70
+ if (project && project.endsWith(".git")) {
71
+ project = project.slice(0, -4);
72
+ }
73
+
74
+ if (!user || !project) {
75
+ return;
76
+ }
77
+
78
+ return commithash;
79
+ },
80
+ /**
81
+ * @param {string} pathname pathname
82
+ * @param {string} hash hash
83
+ * @returns {string | undefined} hash
84
+ */
85
+ "gitlab.com": (pathname, hash) => {
86
+ const path = pathname.slice(1);
87
+ if (path.includes("/-/") || path.includes("/archive.tar.gz")) {
88
+ return;
89
+ }
90
+
91
+ const segments = path.split("/");
92
+ let project = /** @type {string} */ (segments.pop());
93
+ if (project.endsWith(".git")) {
94
+ project = project.slice(0, -4);
95
+ }
96
+
97
+ const user = segments.join("/");
98
+ if (!user || !project) {
99
+ return;
100
+ }
101
+
102
+ return hash;
103
+ },
104
+ /**
105
+ * @param {string} pathname pathname
106
+ * @param {string} hash hash
107
+ * @returns {string | undefined} hash
108
+ */
109
+ "bitbucket.org": (pathname, hash) => {
110
+ let [, user, project, aux] = pathname.split("/", 4);
111
+ if (["get"].includes(aux)) {
112
+ return;
113
+ }
114
+
115
+ if (project && project.endsWith(".git")) {
116
+ project = project.slice(0, -4);
117
+ }
118
+
119
+ if (!user || !project) {
120
+ return;
121
+ }
122
+
123
+ return hash;
124
+ },
125
+ /**
126
+ * @param {string} pathname pathname
127
+ * @param {string} hash hash
128
+ * @returns {string | undefined} hash
129
+ */
130
+ "gist.github.com": (pathname, hash) => {
131
+ let [, user, project, aux] = pathname.split("/", 4);
132
+ if (aux === "raw") {
133
+ return;
134
+ }
135
+
136
+ if (!project) {
137
+ if (!user) {
138
+ return;
139
+ }
140
+
141
+ project = user;
142
+ }
143
+
144
+ if (project.endsWith(".git")) {
145
+ project = project.slice(0, -4);
146
+ }
147
+
148
+ return hash;
149
+ }
150
+ };
151
+
152
+ /**
153
+ * extract commit hash from parsed url
154
+ * @inner
155
+ * @param {URL} urlParsed parsed url
156
+ * @returns {string} commithash
157
+ */
158
+ function getCommithash(urlParsed) {
159
+ let { hostname, pathname, hash } = urlParsed;
160
+ hostname = hostname.replace(/^www\./, "");
161
+
162
+ try {
163
+ hash = decodeURIComponent(hash);
164
+ // eslint-disable-next-line no-empty
165
+ } catch (_err) {}
166
+
167
+ if (
168
+ extractCommithashByDomain[
169
+ /** @type {keyof extractCommithashByDomain} */ (hostname)
170
+ ]
171
+ ) {
172
+ return (
173
+ extractCommithashByDomain[
174
+ /** @type {keyof extractCommithashByDomain} */ (hostname)
175
+ ](pathname, hash) || ""
176
+ );
177
+ }
178
+
179
+ return hash;
180
+ }
181
+
182
+ /**
183
+ * make url right for URL parse
184
+ * @inner
185
+ * @param {string} gitUrl git url
186
+ * @returns {string} fixed url
187
+ */
188
+ function correctUrl(gitUrl) {
189
+ // like:
190
+ // proto://hostname.com:user/repo -> proto://hostname.com/user/repo
191
+ return gitUrl.replace(RE_HOSTNAME_WITH_COLON, "$1/$2");
192
+ }
193
+
194
+ /**
195
+ * make url protocol right for URL parse
196
+ * @inner
197
+ * @param {string} gitUrl git url
198
+ * @returns {string} fixed url
199
+ */
200
+ function correctProtocol(gitUrl) {
201
+ // eg: github:foo/bar#v1.0. Should not add double slash, in case of error parsed `pathname`
202
+ if (RE_GIT_URL_SHORT.test(gitUrl)) {
203
+ return gitUrl;
204
+ }
205
+
206
+ // eg: user@github.com:foo/bar
207
+ if (!RE_CUSTOM_PROTOCOL.test(gitUrl)) {
208
+ return `${DEF_GIT_PROTOCOL}${gitUrl}`;
209
+ }
210
+
211
+ return gitUrl;
212
+ }
213
+
214
+ /**
215
+ * extract git dep version from hash
216
+ * @inner
217
+ * @param {string} hash hash
218
+ * @returns {string} git dep version
219
+ */
220
+ function getVersionFromHash(hash) {
221
+ const matched = hash.match(RE_URL_HASH_VERSION);
222
+
223
+ return (matched && matched[1]) || "";
224
+ }
225
+
226
+ /**
227
+ * if string can be decoded
228
+ * @inner
229
+ * @param {string} str str to be checked
230
+ * @returns {boolean} if can be decoded
231
+ */
232
+ function canBeDecoded(str) {
233
+ try {
234
+ decodeURIComponent(str);
235
+ } catch (_err) {
236
+ return false;
237
+ }
238
+
239
+ return true;
240
+ }
241
+
242
+ /**
243
+ * get right dep version from git url
244
+ * @inner
245
+ * @param {string} gitUrl git url
246
+ * @returns {string} dep version
247
+ */
248
+ function getGitUrlVersion(gitUrl) {
249
+ const oriGitUrl = gitUrl;
250
+ // github extreme shorthand
251
+ gitUrl = RE_URL_GITHUB_EXTREME_SHORT.test(gitUrl)
252
+ ? `github:${gitUrl}`
253
+ : correctProtocol(gitUrl);
254
+
255
+ gitUrl = correctUrl(gitUrl);
256
+
257
+ let parsed;
258
+ try {
259
+ parsed = new URL(gitUrl);
260
+ // eslint-disable-next-line no-empty
261
+ } catch (_err) {}
262
+
263
+ if (!parsed) {
264
+ return "";
265
+ }
266
+
267
+ const { protocol, hostname, pathname, username, password } = parsed;
268
+ if (!RE_PROTOCOL.test(protocol)) {
269
+ return "";
270
+ }
271
+
272
+ // pathname shouldn't be empty or URL malformed
273
+ if (!pathname || !canBeDecoded(pathname)) {
274
+ return "";
275
+ }
276
+
277
+ // without protocol, there should have auth info
278
+ if (RE_NO_PROTOCOL.test(oriGitUrl) && !username && !password) {
279
+ return "";
280
+ }
281
+
282
+ if (!PROTOCOLS_FOR_SHORT.includes(protocol.toLowerCase())) {
283
+ if (!RE_HOSTNAME.test(hostname)) {
284
+ return "";
285
+ }
286
+
287
+ const commithash = getCommithash(parsed);
288
+ return getVersionFromHash(commithash) || commithash;
289
+ }
290
+
291
+ // for protocol short
292
+ return getVersionFromHash(gitUrl);
293
+ }
11
294
 
12
295
  /**
13
296
  * @param {string} str maybe required version
14
297
  * @returns {boolean} true, if it looks like a version
15
298
  */
16
- exports.isRequiredVersion = str => {
17
- return /^([\d^=v<>~]|[*xX]$)/.test(str);
18
- };
299
+ function isRequiredVersion(str) {
300
+ return VERSION_PATTERN_REGEXP.test(str);
301
+ }
302
+
303
+ module.exports.isRequiredVersion = isRequiredVersion;
304
+
305
+ /**
306
+ * @see https://docs.npmjs.com/cli/v7/configuring-npm/package-json#urls-as-dependencies
307
+ * @param {string} versionDesc version to be normalized
308
+ * @returns {string} normalized version
309
+ */
310
+ function normalizeVersion(versionDesc) {
311
+ versionDesc = (versionDesc && versionDesc.trim()) || "";
312
+
313
+ if (isRequiredVersion(versionDesc)) {
314
+ return versionDesc;
315
+ }
316
+
317
+ // add handle for URL Dependencies
318
+ return getGitUrlVersion(versionDesc.toLowerCase());
319
+ }
320
+
321
+ module.exports.normalizeVersion = normalizeVersion;
322
+
323
+ /** @typedef {{ data: JsonObject, path: string }} DescriptionFile */
19
324
 
20
325
  /**
21
- *
22
326
  * @param {InputFileSystem} fs file system
23
327
  * @param {string} directory directory to start looking into
24
328
  * @param {string[]} descriptionFiles possible description filenames
25
- * @param {function(Error=, {data: object, path: string}=): void} callback callback
329
+ * @param {function((Error | null)=, DescriptionFile=): void} callback callback
26
330
  */
27
331
  const getDescriptionFile = (fs, directory, descriptionFiles, callback) => {
28
332
  let i = 0;
@@ -56,35 +360,35 @@ const getDescriptionFile = (fs, directory, descriptionFiles, callback) => {
56
360
  };
57
361
  tryLoadCurrent();
58
362
  };
59
- exports.getDescriptionFile = getDescriptionFile;
363
+ module.exports.getDescriptionFile = getDescriptionFile;
60
364
 
61
- exports.getRequiredVersionFromDescriptionFile = (data, packageName) => {
62
- if (
63
- data.optionalDependencies &&
64
- typeof data.optionalDependencies === "object" &&
65
- packageName in data.optionalDependencies
66
- ) {
67
- return data.optionalDependencies[packageName];
68
- }
69
- if (
70
- data.dependencies &&
71
- typeof data.dependencies === "object" &&
72
- packageName in data.dependencies
73
- ) {
74
- return data.dependencies[packageName];
75
- }
76
- if (
77
- data.peerDependencies &&
78
- typeof data.peerDependencies === "object" &&
79
- packageName in data.peerDependencies
80
- ) {
81
- return data.peerDependencies[packageName];
82
- }
83
- if (
84
- data.devDependencies &&
85
- typeof data.devDependencies === "object" &&
86
- packageName in data.devDependencies
87
- ) {
88
- return data.devDependencies[packageName];
365
+ /**
366
+ * @param {JsonObject} data description file data i.e.: package.json
367
+ * @param {string} packageName name of the dependency
368
+ * @returns {string | undefined} normalized version
369
+ */
370
+ const getRequiredVersionFromDescriptionFile = (data, packageName) => {
371
+ const dependencyTypes = [
372
+ "optionalDependencies",
373
+ "dependencies",
374
+ "peerDependencies",
375
+ "devDependencies"
376
+ ];
377
+
378
+ for (const dependencyType of dependencyTypes) {
379
+ const dependency = /** @type {JsonObject} */ (data[dependencyType]);
380
+ if (
381
+ dependency &&
382
+ typeof dependency === "object" &&
383
+ packageName in dependency
384
+ ) {
385
+ return normalizeVersion(
386
+ /** @type {Exclude<JsonPrimitive, null | boolean| number>} */ (
387
+ dependency[packageName]
388
+ )
389
+ );
390
+ }
89
391
  }
90
392
  };
393
+ module.exports.getRequiredVersionFromDescriptionFile =
394
+ getRequiredVersionFromDescriptionFile;