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
@@ -21,7 +21,7 @@ const getDefaultTarget = context => {
21
21
  };
22
22
 
23
23
  /**
24
- * @typedef {Object} PlatformTargetProperties
24
+ * @typedef {object} PlatformTargetProperties
25
25
  * @property {boolean | null} web web platform, importing of http(s) and std: is available
26
26
  * @property {boolean | null} browser browser platform, running in a normal web browser
27
27
  * @property {boolean | null} webworker (Web)Worker platform, running in a web/shared/service worker
@@ -31,16 +31,17 @@ const getDefaultTarget = context => {
31
31
  */
32
32
 
33
33
  /**
34
- * @typedef {Object} ElectronContextTargetProperties
34
+ * @typedef {object} ElectronContextTargetProperties
35
35
  * @property {boolean | null} electronMain in main context
36
36
  * @property {boolean | null} electronPreload in preload context
37
37
  * @property {boolean | null} electronRenderer in renderer context with node integration
38
38
  */
39
39
 
40
40
  /**
41
- * @typedef {Object} ApiTargetProperties
41
+ * @typedef {object} ApiTargetProperties
42
42
  * @property {boolean | null} require has require function available
43
43
  * @property {boolean | null} nodeBuiltins has node.js built-in modules available
44
+ * @property {boolean | null} nodePrefixForCoreModules node.js allows to use `node:` prefix for core modules
44
45
  * @property {boolean | null} document has document available (allows script tags)
45
46
  * @property {boolean | null} importScripts has importScripts available
46
47
  * @property {boolean | null} importScriptsInWorker has importScripts available when creating a worker
@@ -49,7 +50,7 @@ const getDefaultTarget = context => {
49
50
  */
50
51
 
51
52
  /**
52
- * @typedef {Object} EcmaTargetProperties
53
+ * @typedef {object} EcmaTargetProperties
53
54
  * @property {boolean | null} globalThis has globalThis variable available
54
55
  * @property {boolean | null} bigIntLiteral big int literal syntax is available
55
56
  * @property {boolean | null} const const and let variable declarations are available
@@ -59,23 +60,42 @@ const getDefaultTarget = context => {
59
60
  * @property {boolean | null} dynamicImport async import() is available
60
61
  * @property {boolean | null} dynamicImportInWorker async import() is available when creating a worker
61
62
  * @property {boolean | null} module ESM syntax is available (when in module)
63
+ * @property {boolean | null} optionalChaining optional chaining is available
64
+ * @property {boolean | null} templateLiteral template literal is available
65
+ * @property {boolean | null} asyncFunction async functions and await are available
66
+ */
67
+
68
+ /**
69
+ * @template T
70
+ * @typedef {{ [P in keyof T]?: never }} Never<T>
71
+ */
72
+
73
+ /**
74
+ * @template A
75
+ * @template B
76
+ * @typedef {(A & Never<B>) | (Never<A> & B) | (A & B)} Mix<A, B>
62
77
  */
63
78
 
64
- ///** @typedef {PlatformTargetProperties | ApiTargetProperties | EcmaTargetProperties | PlatformTargetProperties & ApiTargetProperties | PlatformTargetProperties & EcmaTargetProperties | ApiTargetProperties & EcmaTargetProperties} TargetProperties */
65
- /** @template T @typedef {{ [P in keyof T]?: never }} Never<T> */
66
- /** @template A @template B @typedef {(A & Never<B>) | (Never<A> & B) | (A & B)} Mix<A,B> */
67
79
  /** @typedef {Mix<Mix<PlatformTargetProperties, ElectronContextTargetProperties>, Mix<ApiTargetProperties, EcmaTargetProperties>>} TargetProperties */
68
80
 
81
+ /**
82
+ * @param {string} major major version
83
+ * @param {string | undefined} minor minor version
84
+ * @returns {(vMajor: number, vMinor?: number) => boolean | undefined} check if version is greater or equal
85
+ */
69
86
  const versionDependent = (major, minor) => {
70
- if (!major) return () => /** @type {undefined} */ (undefined);
71
- major = +major;
72
- minor = minor ? +minor : 0;
73
- return (vMajor, vMinor = 0) => {
74
- return major > vMajor || (major === vMajor && minor >= vMinor);
75
- };
87
+ if (!major) {
88
+ return () => /** @type {undefined} */ (undefined);
89
+ }
90
+ /** @type {number} */
91
+ const nMajor = Number(major);
92
+ /** @type {number} */
93
+ const nMinor = minor ? Number(minor) : 0;
94
+ return (vMajor, vMinor = 0) =>
95
+ nMajor > vMajor || (nMajor === vMajor && nMinor >= vMinor);
76
96
  };
77
97
 
78
- /** @type {[string, string, RegExp, (...args: string[]) => TargetProperties | false][]} */
98
+ /** @type {[string, string, RegExp, (...args: string[]) => Partial<TargetProperties>][]} */
79
99
  const TARGETS = [
80
100
  [
81
101
  "browserslist / browserslist:env / browserslist:query / browserslist:path-to-config / browserslist:path-to-config:env",
@@ -93,6 +113,7 @@ See https://github.com/browserslist/browserslist#queries for possible ways to pr
93
113
  The recommended way is to add a 'browserslist' key to your package.json and list supported browsers (resp. node.js versions).
94
114
  You can also more options via the 'target' option: 'browserslist' / 'browserslist:env' / 'browserslist:query' / 'browserslist:path-to-config' / 'browserslist:path-to-config:env'`);
95
115
  }
116
+
96
117
  return browserslistTargetHandler.resolve(browsers);
97
118
  }
98
119
  ],
@@ -100,53 +121,49 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
100
121
  "web",
101
122
  "Web browser.",
102
123
  /^web$/,
103
- () => {
104
- return {
105
- web: true,
106
- browser: true,
107
- webworker: null,
108
- node: false,
109
- electron: false,
110
- nwjs: false,
124
+ () => ({
125
+ web: true,
126
+ browser: true,
127
+ webworker: null,
128
+ node: false,
129
+ electron: false,
130
+ nwjs: false,
111
131
 
112
- document: true,
113
- importScriptsInWorker: true,
114
- fetchWasm: true,
115
- nodeBuiltins: false,
116
- importScripts: false,
117
- require: false,
118
- global: false
119
- };
120
- }
132
+ document: true,
133
+ importScriptsInWorker: true,
134
+ fetchWasm: true,
135
+ nodeBuiltins: false,
136
+ importScripts: false,
137
+ require: false,
138
+ global: false
139
+ })
121
140
  ],
122
141
  [
123
142
  "webworker",
124
143
  "Web Worker, SharedWorker or Service Worker.",
125
144
  /^webworker$/,
126
- () => {
127
- return {
128
- web: true,
129
- browser: true,
130
- webworker: true,
131
- node: false,
132
- electron: false,
133
- nwjs: false,
145
+ () => ({
146
+ web: true,
147
+ browser: true,
148
+ webworker: true,
149
+ node: false,
150
+ electron: false,
151
+ nwjs: false,
134
152
 
135
- importScripts: true,
136
- importScriptsInWorker: true,
137
- fetchWasm: true,
138
- nodeBuiltins: false,
139
- require: false,
140
- document: false,
141
- global: false
142
- };
143
- }
153
+ importScripts: true,
154
+ importScriptsInWorker: true,
155
+ fetchWasm: true,
156
+ nodeBuiltins: false,
157
+ require: false,
158
+ document: false,
159
+ global: false
160
+ })
144
161
  ],
145
162
  [
146
163
  "[async-]node[X[.Y]]",
147
164
  "Node.js in version X.Y. The 'async-' prefix will load chunks asynchronously via 'fs' and 'vm' instead of 'require()'. Examples: node14.5, async-node10.",
148
- /^(async-)?node(\d+(?:\.(\d+))?)?$/,
149
- (asyncFlag, major, minor) => {
165
+ /^(async-)?node((\d+)(?:\.(\d+))?)?$/,
166
+ (asyncFlag, _, major, minor) => {
150
167
  const v = versionDependent(major, minor);
151
168
  // see https://node.green/
152
169
  return {
@@ -159,6 +176,8 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
159
176
 
160
177
  require: !asyncFlag,
161
178
  nodeBuiltins: true,
179
+ // v16.0.0, v14.18.0
180
+ nodePrefixForCoreModules: Number(major) < 15 ? v(14, 18) : v(16),
162
181
  global: true,
163
182
  document: false,
164
183
  fetchWasm: false,
@@ -167,7 +186,10 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
167
186
 
168
187
  globalThis: v(12),
169
188
  const: v(6),
189
+ templateLiteral: v(4),
190
+ optionalChaining: v(14),
170
191
  arrowFunction: v(6),
192
+ asyncFunction: v(7, 6),
171
193
  forOf: v(5),
172
194
  destructuring: v(6),
173
195
  bigIntLiteral: v(10, 4),
@@ -180,8 +202,8 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
180
202
  [
181
203
  "electron[X[.Y]]-main/preload/renderer",
182
204
  "Electron in version X.Y. Script is running in main, preload resp. renderer context.",
183
- /^electron(\d+(?:\.(\d+))?)?-(main|preload|renderer)$/,
184
- (major, minor, context) => {
205
+ /^electron((\d+)(?:\.(\d+))?)?-(main|preload|renderer)$/,
206
+ (_, major, minor, context) => {
185
207
  const v = versionDependent(major, minor);
186
208
  // see https://node.green/ + https://github.com/electron/releases
187
209
  return {
@@ -198,6 +220,10 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
198
220
 
199
221
  global: true,
200
222
  nodeBuiltins: true,
223
+ // 15.0.0 - Node.js v16.5
224
+ // 14.0.0 - Mode.js v14.17, but prefixes only since v14.18
225
+ nodePrefixForCoreModules: v(15),
226
+
201
227
  require: true,
202
228
  document: context === "renderer",
203
229
  fetchWasm: context === "renderer",
@@ -206,7 +232,10 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
206
232
 
207
233
  globalThis: v(5),
208
234
  const: v(1, 1),
235
+ templateLiteral: v(1, 1),
236
+ optionalChaining: v(8),
209
237
  arrowFunction: v(1, 1),
238
+ asyncFunction: v(1, 7),
210
239
  forOf: v(0, 36),
211
240
  destructuring: v(1, 1),
212
241
  bigIntLiteral: v(4),
@@ -219,8 +248,8 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
219
248
  [
220
249
  "nwjs[X[.Y]] / node-webkit[X[.Y]]",
221
250
  "NW.js in version X.Y.",
222
- /^(?:nwjs|node-webkit)(\d+(?:\.(\d+))?)?$/,
223
- (major, minor) => {
251
+ /^(?:nwjs|node-webkit)((\d+)(?:\.(\d+))?)?$/,
252
+ (_, major, minor) => {
224
253
  const v = versionDependent(major, minor);
225
254
  // see https://node.green/ + https://github.com/nwjs/nw.js/blob/nw48/CHANGELOG.md
226
255
  return {
@@ -241,7 +270,10 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
241
270
 
242
271
  globalThis: v(0, 43),
243
272
  const: v(0, 15),
273
+ templateLiteral: v(0, 13),
274
+ optionalChaining: v(0, 44),
244
275
  arrowFunction: v(0, 15),
276
+ asyncFunction: v(0, 21),
245
277
  forOf: v(0, 13),
246
278
  destructuring: v(0, 15),
247
279
  bigIntLiteral: v(0, 32),
@@ -256,14 +288,17 @@ You can also more options via the 'target' option: 'browserslist' / 'browserslis
256
288
  "EcmaScript in this version. Examples: es2020, es5.",
257
289
  /^es(\d+)$/,
258
290
  version => {
259
- let v = +version;
291
+ let v = Number(version);
260
292
  if (v < 1000) v = v + 2009;
261
293
  return {
262
294
  const: v >= 2015,
295
+ templateLiteral: v >= 2015,
296
+ optionalChaining: v >= 2020,
263
297
  arrowFunction: v >= 2015,
264
298
  forOf: v >= 2015,
265
299
  destructuring: v >= 2015,
266
300
  module: v >= 2015,
301
+ asyncFunction: v >= 2017,
267
302
  globalThis: v >= 2020,
268
303
  bigIntLiteral: v >= 2020,
269
304
  dynamicImport: v >= 2020,
@@ -284,7 +319,7 @@ const getTargetProperties = (target, context) => {
284
319
  if (match) {
285
320
  const [, ...args] = match;
286
321
  const result = handler(...args, context);
287
- if (result) return result;
322
+ if (result) return /** @type {TargetProperties} */ (result);
288
323
  }
289
324
  }
290
325
  throw new Error(
@@ -294,13 +329,19 @@ const getTargetProperties = (target, context) => {
294
329
  );
295
330
  };
296
331
 
332
+ /**
333
+ * @param {TargetProperties[]} targetProperties array of target properties
334
+ * @returns {TargetProperties} merged target properties
335
+ */
297
336
  const mergeTargetProperties = targetProperties => {
337
+ /** @type {Set<keyof TargetProperties>} */
298
338
  const keys = new Set();
299
339
  for (const tp of targetProperties) {
300
340
  for (const key of Object.keys(tp)) {
301
- keys.add(key);
341
+ keys.add(/** @type {keyof TargetProperties} */ (key));
302
342
  }
303
343
  }
344
+ /** @type {object} */
304
345
  const result = {};
305
346
  for (const key of keys) {
306
347
  let hasTrue = false;
@@ -317,7 +358,8 @@ const mergeTargetProperties = targetProperties => {
317
358
  }
318
359
  }
319
360
  if (hasTrue || hasFalse)
320
- result[key] = hasFalse && hasTrue ? null : hasTrue ? true : false;
361
+ /** @type {TargetProperties} */
362
+ (result)[key] = hasFalse && hasTrue ? null : Boolean(hasTrue);
321
363
  }
322
364
  return /** @type {TargetProperties} */ (result);
323
365
  };
@@ -327,12 +369,9 @@ const mergeTargetProperties = targetProperties => {
327
369
  * @param {string} context the context directory
328
370
  * @returns {TargetProperties} target properties
329
371
  */
330
- const getTargetsProperties = (targets, context) => {
331
- return mergeTargetProperties(
332
- targets.map(t => getTargetProperties(t, context))
333
- );
334
- };
372
+ const getTargetsProperties = (targets, context) =>
373
+ mergeTargetProperties(targets.map(t => getTargetProperties(t, context)));
335
374
 
336
- exports.getDefaultTarget = getDefaultTarget;
337
- exports.getTargetProperties = getTargetProperties;
338
- exports.getTargetsProperties = getTargetsProperties;
375
+ module.exports.getDefaultTarget = getDefaultTarget;
376
+ module.exports.getTargetProperties = getTargetProperties;
377
+ module.exports.getTargetsProperties = getTargetsProperties;
@@ -9,11 +9,12 @@ const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  /** @typedef {import("./ContainerEntryModule").ExposeOptions} ExposeOptions */
12
+ /** @typedef {import("./ContainerEntryModule").ExposesList} ExposesList */
12
13
 
13
14
  class ContainerEntryDependency extends Dependency {
14
15
  /**
15
16
  * @param {string} name entry name
16
- * @param {[string, ExposeOptions][]} exposes list of exposed modules
17
+ * @param {ExposesList} exposes list of exposed modules
17
18
  * @param {string} shareScope name of the share scope
18
19
  */
19
20
  constructor(name, exposes, shareScope) {
@@ -8,8 +8,10 @@
8
8
  const { OriginalSource, RawSource } = require("webpack-sources");
9
9
  const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
10
10
  const Module = require("../Module");
11
+ const { JAVASCRIPT_MODULE_TYPE_DYNAMIC } = require("../ModuleTypeConstants");
11
12
  const RuntimeGlobals = require("../RuntimeGlobals");
12
13
  const Template = require("../Template");
14
+ const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
13
15
  const makeSerializable = require("../util/makeSerializable");
14
16
  const ContainerExposedDependency = require("./ContainerExposedDependency");
15
17
 
@@ -21,36 +23,41 @@ const ContainerExposedDependency = require("./ContainerExposedDependency");
21
23
  /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
22
24
  /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
23
25
  /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
26
+ /** @typedef {import("../Module").SourceTypes} SourceTypes */
24
27
  /** @typedef {import("../RequestShortener")} RequestShortener */
25
28
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
26
29
  /** @typedef {import("../WebpackError")} WebpackError */
30
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
31
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
27
32
  /** @typedef {import("../util/Hash")} Hash */
28
33
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
29
34
  /** @typedef {import("./ContainerEntryDependency")} ContainerEntryDependency */
30
35
 
31
36
  /**
32
- * @typedef {Object} ExposeOptions
37
+ * @typedef {object} ExposeOptions
33
38
  * @property {string[]} import requests to exposed modules (last one is exported)
34
39
  * @property {string} name custom chunk name for the exposed module
35
40
  */
36
41
 
42
+ /** @typedef {[string, ExposeOptions][]} ExposesList */
43
+
37
44
  const SOURCE_TYPES = new Set(["javascript"]);
38
45
 
39
46
  class ContainerEntryModule extends Module {
40
47
  /**
41
48
  * @param {string} name container entry name
42
- * @param {[string, ExposeOptions][]} exposes list of exposed modules
49
+ * @param {ExposesList} exposes list of exposed modules
43
50
  * @param {string} shareScope name of the share scope
44
51
  */
45
52
  constructor(name, exposes, shareScope) {
46
- super("javascript/dynamic", null);
53
+ super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
47
54
  this._name = name;
48
55
  this._exposes = exposes;
49
56
  this._shareScope = shareScope;
50
57
  }
51
58
 
52
59
  /**
53
- * @returns {Set<string>} types available (do not mutate)
60
+ * @returns {SourceTypes} types available (do not mutate)
54
61
  */
55
62
  getSourceTypes() {
56
63
  return SOURCE_TYPES;
@@ -70,7 +77,7 @@ class ContainerEntryModule extends Module {
70
77
  * @returns {string} a user readable identifier of the module
71
78
  */
72
79
  readableIdentifier(requestShortener) {
73
- return `container entry`;
80
+ return "container entry";
74
81
  }
75
82
 
76
83
  /**
@@ -78,12 +85,14 @@ class ContainerEntryModule extends Module {
78
85
  * @returns {string | null} an identifier for library inclusion
79
86
  */
80
87
  libIdent(options) {
81
- return `webpack/container/entry/${this._name}`;
88
+ return `${this.layer ? `(${this.layer})/` : ""}webpack/container/entry/${
89
+ this._name
90
+ }`;
82
91
  }
83
92
 
84
93
  /**
85
94
  * @param {NeedBuildContext} context context info
86
- * @param {function(WebpackError=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
95
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback function, returns true, if the module needs a rebuild
87
96
  * @returns {void}
88
97
  */
89
98
  needBuild(context, callback) {
@@ -104,6 +113,7 @@ class ContainerEntryModule extends Module {
104
113
  strict: true,
105
114
  topLevelDeclarations: new Set(["moduleMap", "get", "init"])
106
115
  };
116
+ this.buildMeta.exportsType = "namespace";
107
117
 
108
118
  this.clearDependenciesAndBlocks();
109
119
 
@@ -127,6 +137,7 @@ class ContainerEntryModule extends Module {
127
137
  }
128
138
  this.addBlock(block);
129
139
  }
140
+ this.addDependency(new StaticExportsDependency(["get", "init"], false));
130
141
 
131
142
  callback();
132
143
  }
@@ -194,7 +205,7 @@ class ContainerEntryModule extends Module {
194
205
  }
195
206
 
196
207
  const source = Template.asString([
197
- `var moduleMap = {`,
208
+ "var moduleMap = {",
198
209
  Template.indent(getters.join(",\n")),
199
210
  "};",
200
211
  `var get = ${runtimeTemplate.basicFunction("module, getScope", [
@@ -217,10 +228,8 @@ class ContainerEntryModule extends Module {
217
228
  ])};`,
218
229
  `var init = ${runtimeTemplate.basicFunction("shareScope, initScope", [
219
230
  `if (!${RuntimeGlobals.shareScopeMap}) return;`,
220
- `var oldScope = ${RuntimeGlobals.shareScopeMap}[${JSON.stringify(
221
- this._shareScope
222
- )}];`,
223
231
  `var name = ${JSON.stringify(this._shareScope)}`,
232
+ `var oldScope = ${RuntimeGlobals.shareScopeMap}[name];`,
224
233
  `if(oldScope && oldScope !== shareScope) throw new Error("Container initialization failed as it has already been initialized with a different share scope");`,
225
234
  `${RuntimeGlobals.shareScopeMap}[name] = shareScope;`,
226
235
  `return ${RuntimeGlobals.initializeSharing}(name, initScope);`
@@ -256,6 +265,9 @@ class ContainerEntryModule extends Module {
256
265
  return 42;
257
266
  }
258
267
 
268
+ /**
269
+ * @param {ObjectSerializerContext} context context
270
+ */
259
271
  serialize(context) {
260
272
  const { write } = context;
261
273
  write(this._name);
@@ -264,6 +276,10 @@ class ContainerEntryModule extends Module {
264
276
  super.serialize(context);
265
277
  }
266
278
 
279
+ /**
280
+ * @param {ObjectDeserializerContext} context context
281
+ * @returns {ContainerEntryModule} deserialized container entry module
282
+ */
267
283
  static deserialize(context) {
268
284
  const { read } = context;
269
285
  const obj = new ContainerEntryModule(read(), read(), read());
@@ -15,7 +15,7 @@ const ContainerEntryModule = require("./ContainerEntryModule");
15
15
  module.exports = class ContainerEntryModuleFactory extends ModuleFactory {
16
16
  /**
17
17
  * @param {ModuleFactoryCreateData} data data object
18
- * @param {function(Error=, ModuleFactoryResult=): void} callback callback
18
+ * @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
19
19
  * @returns {void}
20
20
  */
21
21
  create({ dependencies: [dependency] }, callback) {
@@ -8,6 +8,9 @@
8
8
  const ModuleDependency = require("../dependencies/ModuleDependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+
11
14
  class ContainerExposedDependency extends ModuleDependency {
12
15
  /**
13
16
  * @param {string} exposedName public name
@@ -33,11 +36,17 @@ class ContainerExposedDependency extends ModuleDependency {
33
36
  return `exposed dependency ${this.exposedName}=${this.request}`;
34
37
  }
35
38
 
39
+ /**
40
+ * @param {ObjectSerializerContext} context context
41
+ */
36
42
  serialize(context) {
37
43
  context.write(this.exposedName);
38
44
  super.serialize(context);
39
45
  }
40
46
 
47
+ /**
48
+ * @param {ObjectDeserializerContext} context context
49
+ */
41
50
  deserialize(context) {
42
51
  this.exposedName = context.read();
43
52
  super.deserialize(context);
@@ -13,6 +13,8 @@ const { parseOptions } = require("./options");
13
13
 
14
14
  /** @typedef {import("../../declarations/plugins/container/ContainerPlugin").ContainerPluginOptions} ContainerPluginOptions */
15
15
  /** @typedef {import("../Compiler")} Compiler */
16
+ /** @typedef {import("./ContainerEntryModule").ExposeOptions} ExposeOptions */
17
+ /** @typedef {import("./ContainerEntryModule").ExposesList} ExposesList */
16
18
 
17
19
  const validate = createSchemaValidation(
18
20
  require("../../schemas/plugins/container/ContainerPlugin.check.js"),
@@ -41,16 +43,18 @@ class ContainerPlugin {
41
43
  },
42
44
  runtime: options.runtime,
43
45
  filename: options.filename || undefined,
44
- exposes: parseOptions(
45
- options.exposes,
46
- item => ({
47
- import: Array.isArray(item) ? item : [item],
48
- name: undefined
49
- }),
50
- item => ({
51
- import: Array.isArray(item.import) ? item.import : [item.import],
52
- name: item.name || undefined
53
- })
46
+ exposes: /** @type {ExposesList} */ (
47
+ parseOptions(
48
+ options.exposes,
49
+ item => ({
50
+ import: Array.isArray(item) ? item : [item],
51
+ name: undefined
52
+ }),
53
+ item => ({
54
+ import: Array.isArray(item.import) ? item.import : [item.import],
55
+ name: item.name || undefined
56
+ })
57
+ )
54
58
  )
55
59
  };
56
60
  }
@@ -64,13 +68,15 @@ class ContainerPlugin {
64
68
  const { name, exposes, shareScope, filename, library, runtime } =
65
69
  this._options;
66
70
 
67
- compiler.options.output.enabledLibraryTypes.push(library.type);
71
+ if (!compiler.options.output.enabledLibraryTypes.includes(library.type)) {
72
+ compiler.options.output.enabledLibraryTypes.push(library.type);
73
+ }
68
74
 
69
75
  compiler.hooks.make.tapAsync(PLUGIN_NAME, (compilation, callback) => {
70
76
  const dep = new ContainerEntryDependency(name, exposes, shareScope);
71
77
  dep.loc = { name };
72
78
  compilation.addEntry(
73
- compilation.options.context,
79
+ /** @type {string} */ (compilation.options.context),
74
80
  dep,
75
81
  {
76
82
  name,
@@ -113,7 +113,7 @@ class ContainerReferencePlugin {
113
113
  ? external.slice(9)
114
114
  : `webpack/container/reference/${key}${
115
115
  i ? `/fallback-${i}` : ""
116
- }`
116
+ }`
117
117
  ),
118
118
  `.${data.request.slice(key.length)}`,
119
119
  config.shareScope
@@ -8,7 +8,13 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
13
+
11
14
  class FallbackDependency extends Dependency {
15
+ /**
16
+ * @param {string[]} requests requests
17
+ */
12
18
  constructor(requests) {
13
19
  super();
14
20
  this.requests = requests;
@@ -29,12 +35,19 @@ class FallbackDependency extends Dependency {
29
35
  return "esm";
30
36
  }
31
37
 
38
+ /**
39
+ * @param {ObjectSerializerContext} context context
40
+ */
32
41
  serialize(context) {
33
42
  const { write } = context;
34
43
  write(this.requests);
35
44
  super.serialize(context);
36
45
  }
37
46
 
47
+ /**
48
+ * @param {ObjectDeserializerContext} context context
49
+ * @returns {FallbackDependency} deserialize fallback dependency
50
+ */
38
51
  static deserialize(context) {
39
52
  const { read } = context;
40
53
  const obj = new FallbackDependency(read());
@@ -9,6 +9,9 @@ const ModuleDependency = require("../dependencies/ModuleDependency");
9
9
  const makeSerializable = require("../util/makeSerializable");
10
10
 
11
11
  class FallbackItemDependency extends ModuleDependency {
12
+ /**
13
+ * @param {string} request request
14
+ */
12
15
  constructor(request) {
13
16
  super(request);
14
17
  }