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
package/lib/cli.js CHANGED
@@ -8,9 +8,11 @@
8
8
  const path = require("path");
9
9
  const webpackSchema = require("../schemas/WebpackOptions.json");
10
10
 
11
+ /** @typedef {TODO & { absolutePath: boolean, instanceof: string, cli: { helper?: boolean, exclude?: boolean } }} Schema */
12
+
11
13
  // TODO add originPath to PathItem for better errors
12
14
  /**
13
- * @typedef {Object} PathItem
15
+ * @typedef {object} PathItem
14
16
  * @property {any} schema the part of the schema
15
17
  * @property {string} path the path in the config
16
18
  */
@@ -18,7 +20,7 @@ const webpackSchema = require("../schemas/WebpackOptions.json");
18
20
  /** @typedef {"unknown-argument" | "unexpected-non-array-in-path" | "unexpected-non-object-in-path" | "multiple-values-unexpected" | "invalid-value"} ProblemType */
19
21
 
20
22
  /**
21
- * @typedef {Object} Problem
23
+ * @typedef {object} Problem
22
24
  * @property {ProblemType} type
23
25
  * @property {string} path
24
26
  * @property {string} argument
@@ -28,39 +30,50 @@ const webpackSchema = require("../schemas/WebpackOptions.json");
28
30
  */
29
31
 
30
32
  /**
31
- * @typedef {Object} LocalProblem
33
+ * @typedef {object} LocalProblem
32
34
  * @property {ProblemType} type
33
35
  * @property {string} path
34
36
  * @property {string=} expected
35
37
  */
36
38
 
37
39
  /**
38
- * @typedef {Object} ArgumentConfig
39
- * @property {string} description
40
+ * @typedef {object} ArgumentConfig
41
+ * @property {string | undefined} description
42
+ * @property {string} [negatedDescription]
40
43
  * @property {string} path
41
44
  * @property {boolean} multiple
42
45
  * @property {"enum"|"string"|"path"|"number"|"boolean"|"RegExp"|"reset"} type
43
46
  * @property {any[]=} values
44
47
  */
45
48
 
49
+ /** @typedef {"string" | "number" | "boolean"} SimpleType */
50
+
46
51
  /**
47
- * @typedef {Object} Argument
48
- * @property {string} description
49
- * @property {"string"|"number"|"boolean"} simpleType
52
+ * @typedef {object} Argument
53
+ * @property {string | undefined} description
54
+ * @property {SimpleType} simpleType
50
55
  * @property {boolean} multiple
51
56
  * @property {ArgumentConfig[]} configs
52
57
  */
53
58
 
59
+ /** @typedef {string | number | boolean | RegExp | (string | number | boolean | RegExp)} Value */
60
+
61
+ /** @typedef {Record<string, Argument>} Flags */
62
+
54
63
  /**
55
- * @param {any=} schema a json schema to create arguments for (by default webpack schema is used)
56
- * @returns {Record<string, Argument>} object of arguments
64
+ * @param {Schema=} schema a json schema to create arguments for (by default webpack schema is used)
65
+ * @returns {Flags} object of arguments
57
66
  */
58
67
  const getArguments = (schema = webpackSchema) => {
59
- /** @type {Record<string, Argument>} */
68
+ /** @type {Flags} */
60
69
  const flags = {};
61
70
 
62
- const pathToArgumentName = input => {
63
- return input
71
+ /**
72
+ * @param {string} input input
73
+ * @returns {string} result
74
+ */
75
+ const pathToArgumentName = input =>
76
+ input
64
77
  .replace(/\./g, "-")
65
78
  .replace(/\[\]/g, "")
66
79
  .replace(
@@ -69,8 +82,11 @@ const getArguments = (schema = webpackSchema) => {
69
82
  )
70
83
  .replace(/-?[^\p{Uppercase_Letter}\p{Lowercase_Letter}\d]+/gu, "-")
71
84
  .toLowerCase();
72
- };
73
85
 
86
+ /**
87
+ * @param {string} path path
88
+ * @returns {Schema} schema part
89
+ */
74
90
  const getSchemaPart = path => {
75
91
  const newPath = path.split("/");
76
92
 
@@ -90,21 +106,48 @@ const getArguments = (schema = webpackSchema) => {
90
106
  };
91
107
 
92
108
  /**
93
- *
94
109
  * @param {PathItem[]} path path in the schema
95
110
  * @returns {string | undefined} description
96
111
  */
97
112
  const getDescription = path => {
98
113
  for (const { schema } of path) {
99
- if (schema.cli && schema.cli.helper) continue;
114
+ if (schema.cli) {
115
+ if (schema.cli.helper) continue;
116
+ if (schema.cli.description) return schema.cli.description;
117
+ }
100
118
  if (schema.description) return schema.description;
101
119
  }
102
120
  };
103
121
 
104
122
  /**
105
- *
106
- * @param {any} schemaPart schema
107
- * @returns {Pick<ArgumentConfig, "type"|"values">} partial argument config
123
+ * @param {PathItem[]} path path in the schema
124
+ * @returns {string | undefined} negative description
125
+ */
126
+ const getNegatedDescription = path => {
127
+ for (const { schema } of path) {
128
+ if (schema.cli) {
129
+ if (schema.cli.helper) continue;
130
+ if (schema.cli.negatedDescription) return schema.cli.negatedDescription;
131
+ }
132
+ }
133
+ };
134
+
135
+ /**
136
+ * @param {PathItem[]} path path in the schema
137
+ * @returns {string | undefined} reset description
138
+ */
139
+ const getResetDescription = path => {
140
+ for (const { schema } of path) {
141
+ if (schema.cli) {
142
+ if (schema.cli.helper) continue;
143
+ if (schema.cli.resetDescription) return schema.cli.resetDescription;
144
+ }
145
+ }
146
+ };
147
+
148
+ /**
149
+ * @param {Schema} schemaPart schema
150
+ * @returns {Pick<ArgumentConfig, "type"|"values"> | undefined} partial argument config
108
151
  */
109
152
  const schemaToArgumentConfig = schemaPart => {
110
153
  if (schemaPart.enum) {
@@ -142,19 +185,25 @@ const getArguments = (schema = webpackSchema) => {
142
185
  const addResetFlag = path => {
143
186
  const schemaPath = path[0].path;
144
187
  const name = pathToArgumentName(`${schemaPath}.reset`);
145
- const description = getDescription(path);
188
+ const description =
189
+ getResetDescription(path) ||
190
+ `Clear all items provided in '${schemaPath}' configuration. ${getDescription(
191
+ path
192
+ )}`;
146
193
  flags[name] = {
147
194
  configs: [
148
195
  {
149
196
  type: "reset",
150
197
  multiple: false,
151
- description: `Clear all items provided in '${schemaPath}' configuration. ${description}`,
198
+ description,
152
199
  path: schemaPath
153
200
  }
154
201
  ],
155
202
  description: undefined,
156
- simpleType: undefined,
157
- multiple: undefined
203
+ simpleType:
204
+ /** @type {SimpleType} */
205
+ (/** @type {unknown} */ (undefined)),
206
+ multiple: /** @type {boolean} */ (/** @type {unknown} */ (undefined))
158
207
  };
159
208
  };
160
209
 
@@ -167,6 +216,7 @@ const getArguments = (schema = webpackSchema) => {
167
216
  const argConfigBase = schemaToArgumentConfig(path[0].schema);
168
217
  if (!argConfigBase) return 0;
169
218
 
219
+ const negatedDescription = getNegatedDescription(path);
170
220
  const name = pathToArgumentName(path[0].path);
171
221
  /** @type {ArgumentConfig} */
172
222
  const argConfig = {
@@ -176,12 +226,18 @@ const getArguments = (schema = webpackSchema) => {
176
226
  path: path[0].path
177
227
  };
178
228
 
229
+ if (negatedDescription) {
230
+ argConfig.negatedDescription = negatedDescription;
231
+ }
232
+
179
233
  if (!flags[name]) {
180
234
  flags[name] = {
181
235
  configs: [],
182
236
  description: undefined,
183
- simpleType: undefined,
184
- multiple: undefined
237
+ simpleType:
238
+ /** @type {SimpleType} */
239
+ (/** @type {unknown} */ (undefined)),
240
+ multiple: /** @type {boolean} */ (/** @type {unknown} */ (undefined))
185
241
  };
186
242
  }
187
243
 
@@ -214,8 +270,7 @@ const getArguments = (schema = webpackSchema) => {
214
270
  // TODO support `not` and `if/then/else`
215
271
  // TODO support `const`, but we don't use it on our schema
216
272
  /**
217
- *
218
- * @param {object} schemaPart the current schema
273
+ * @param {Schema} schemaPart the current schema
219
274
  * @param {string} schemaPath the current path in the schema
220
275
  * @param {{schema: object, path: string}[]} path all previous visited schemaParts
221
276
  * @param {string | null} inArray if inside of an array, the path to the array
@@ -240,13 +295,14 @@ const getArguments = (schema = webpackSchema) => {
240
295
 
241
296
  let addedArguments = 0;
242
297
 
243
- addedArguments += addFlag(fullPath, !!inArray);
298
+ addedArguments += addFlag(fullPath, Boolean(inArray));
244
299
 
245
300
  if (schemaPart.type === "object") {
246
301
  if (schemaPart.properties) {
247
302
  for (const property of Object.keys(schemaPart.properties)) {
248
303
  addedArguments += traverse(
249
- schemaPart.properties[property],
304
+ /** @type {Schema} */
305
+ (schemaPart.properties[property]),
250
306
  schemaPath ? `${schemaPath}.${property}` : property,
251
307
  fullPath,
252
308
  inArray
@@ -262,10 +318,11 @@ const getArguments = (schema = webpackSchema) => {
262
318
  return 0;
263
319
  }
264
320
  if (Array.isArray(schemaPart.items)) {
265
- let i = 0;
321
+ const i = 0;
266
322
  for (const item of schemaPart.items) {
267
323
  addedArguments += traverse(
268
- item,
324
+ /** @type {Schema} */
325
+ (item),
269
326
  `${schemaPath}.${i}`,
270
327
  fullPath,
271
328
  schemaPath
@@ -276,7 +333,8 @@ const getArguments = (schema = webpackSchema) => {
276
333
  }
277
334
 
278
335
  addedArguments += traverse(
279
- schemaPart.items,
336
+ /** @type {Schema} */
337
+ (schemaPart.items),
280
338
  `${schemaPath}[]`,
281
339
  fullPath,
282
340
  schemaPath
@@ -296,7 +354,13 @@ const getArguments = (schema = webpackSchema) => {
296
354
  const items = maybeOf;
297
355
 
298
356
  for (let i = 0; i < items.length; i++) {
299
- addedArguments += traverse(items[i], schemaPath, fullPath, inArray);
357
+ addedArguments += traverse(
358
+ /** @type {Schema} */
359
+ (items[i]),
360
+ schemaPath,
361
+ fullPath,
362
+ inArray
363
+ );
300
364
  }
301
365
 
302
366
  return addedArguments;
@@ -309,6 +373,7 @@ const getArguments = (schema = webpackSchema) => {
309
373
 
310
374
  // Summarize flags
311
375
  for (const name of Object.keys(flags)) {
376
+ /** @type {Argument} */
312
377
  const argument = flags[name];
313
378
  argument.description = argument.configs.reduce((desc, { description }) => {
314
379
  if (!desc) return description;
@@ -316,27 +381,34 @@ const getArguments = (schema = webpackSchema) => {
316
381
  if (desc.includes(description)) return desc;
317
382
  return `${desc} ${description}`;
318
383
  }, /** @type {string | undefined} */ (undefined));
319
- argument.simpleType = argument.configs.reduce((t, argConfig) => {
320
- /** @type {"string" | "number" | "boolean"} */
321
- let type = "string";
322
- switch (argConfig.type) {
323
- case "number":
324
- type = "number";
325
- break;
326
- case "reset":
327
- case "boolean":
328
- type = "boolean";
329
- break;
330
- case "enum":
331
- if (argConfig.values.every(v => typeof v === "boolean"))
332
- type = "boolean";
333
- if (argConfig.values.every(v => typeof v === "number"))
334
- type = "number";
335
- break;
336
- }
337
- if (t === undefined) return type;
338
- return t === type ? t : "string";
339
- }, /** @type {"string" | "number" | "boolean" | undefined} */ (undefined));
384
+ argument.simpleType =
385
+ /** @type {SimpleType} */
386
+ (
387
+ argument.configs.reduce((t, argConfig) => {
388
+ /** @type {SimpleType} */
389
+ let type = "string";
390
+ switch (argConfig.type) {
391
+ case "number":
392
+ type = "number";
393
+ break;
394
+ case "reset":
395
+ case "boolean":
396
+ type = "boolean";
397
+ break;
398
+ case "enum": {
399
+ const values =
400
+ /** @type {NonNullable<ArgumentConfig["values"]>} */
401
+ (argConfig.values);
402
+
403
+ if (values.every(v => typeof v === "boolean")) type = "boolean";
404
+ if (values.every(v => typeof v === "number")) type = "number";
405
+ break;
406
+ }
407
+ }
408
+ if (t === undefined) return type;
409
+ return t === type ? t : "string";
410
+ }, /** @type {SimpleType | undefined} */ (undefined))
411
+ );
340
412
  argument.multiple = argument.configs.some(c => c.multiple);
341
413
  }
342
414
 
@@ -345,16 +417,18 @@ const getArguments = (schema = webpackSchema) => {
345
417
 
346
418
  const cliAddedItems = new WeakMap();
347
419
 
420
+ /** @typedef {string | number} Property */
421
+
348
422
  /**
349
- * @param {any} config configuration
423
+ * @param {Configuration} config configuration
350
424
  * @param {string} schemaPath path in the config
351
425
  * @param {number | undefined} index index of value when multiple values are provided, otherwise undefined
352
- * @returns {{ problem?: LocalProblem, object?: any, property?: string | number, value?: any }} problem or object with property and value
426
+ * @returns {{ problem?: LocalProblem, object?: any, property?: Property, value?: any }} problem or object with property and value
353
427
  */
354
428
  const getObjectAndProperty = (config, schemaPath, index = 0) => {
355
429
  if (!schemaPath) return { value: config };
356
430
  const parts = schemaPath.split(".");
357
- let property = parts.pop();
431
+ const property = /** @type {string} */ (parts.pop());
358
432
  let current = config;
359
433
  let i = 0;
360
434
  for (const part of parts) {
@@ -393,22 +467,20 @@ const getObjectAndProperty = (config, schemaPath, index = 0) => {
393
467
  }
394
468
  value = value[x];
395
469
  }
396
- } else {
397
- if (value === undefined) {
398
- value = current[name] = {};
399
- } else if (value === null || typeof value !== "object") {
400
- return {
401
- problem: {
402
- type: "unexpected-non-object-in-path",
403
- path: parts.slice(0, i).join(".")
404
- }
405
- };
406
- }
470
+ } else if (value === undefined) {
471
+ value = current[name] = {};
472
+ } else if (value === null || typeof value !== "object") {
473
+ return {
474
+ problem: {
475
+ type: "unexpected-non-object-in-path",
476
+ path: parts.slice(0, i).join(".")
477
+ }
478
+ };
407
479
  }
408
480
  current = value;
409
481
  i++;
410
482
  }
411
- let value = current[property];
483
+ const value = current[property];
412
484
  if (property.endsWith("[]")) {
413
485
  const name = property.slice(0, -2);
414
486
  const value = current[name];
@@ -420,36 +492,35 @@ const getObjectAndProperty = (config, schemaPath, index = 0) => {
420
492
  current[name] = [value, ...Array.from({ length: index }), undefined];
421
493
  cliAddedItems.set(current[name], index + 1);
422
494
  return { object: current[name], property: index + 1, value: undefined };
423
- } else {
424
- let addedItems = cliAddedItems.get(value) || 0;
425
- while (addedItems <= index) {
426
- value.push(undefined);
427
- addedItems++;
428
- }
429
- cliAddedItems.set(value, addedItems);
430
- const x = value.length - addedItems + index;
431
- if (value[x] === undefined) {
432
- value[x] = {};
433
- } else if (value[x] === null || typeof value[x] !== "object") {
434
- return {
435
- problem: {
436
- type: "unexpected-non-object-in-path",
437
- path: schemaPath
438
- }
439
- };
440
- }
495
+ }
496
+ let addedItems = cliAddedItems.get(value) || 0;
497
+ while (addedItems <= index) {
498
+ value.push(undefined);
499
+ addedItems++;
500
+ }
501
+ cliAddedItems.set(value, addedItems);
502
+ const x = value.length - addedItems + index;
503
+ if (value[x] === undefined) {
504
+ value[x] = {};
505
+ } else if (value[x] === null || typeof value[x] !== "object") {
441
506
  return {
442
- object: value,
443
- property: x,
444
- value: value[x]
507
+ problem: {
508
+ type: "unexpected-non-object-in-path",
509
+ path: schemaPath
510
+ }
445
511
  };
446
512
  }
513
+ return {
514
+ object: value,
515
+ property: x,
516
+ value: value[x]
517
+ };
447
518
  }
448
519
  return { object: current, property, value };
449
520
  };
450
521
 
451
522
  /**
452
- * @param {any} config configuration
523
+ * @param {Configuration} config configuration
453
524
  * @param {string} schemaPath path in the config
454
525
  * @param {any} value parsed value
455
526
  * @param {number | undefined} index index of value when multiple values are provided, otherwise undefined
@@ -462,14 +533,14 @@ const setValue = (config, schemaPath, value, index) => {
462
533
  index
463
534
  );
464
535
  if (problem) return problem;
465
- object[property] = value;
536
+ object[/** @type {Property} */ (property)] = value;
466
537
  return null;
467
538
  };
468
539
 
469
540
  /**
470
541
  * @param {ArgumentConfig} argConfig processing instructions
471
- * @param {any} config configuration
472
- * @param {any} value the value
542
+ * @param {Configuration} config configuration
543
+ * @param {Value} value the value
473
544
  * @param {number | undefined} index the index if multiple values provided
474
545
  * @returns {LocalProblem | null} a problem if any
475
546
  */
@@ -499,22 +570,26 @@ const processArgumentConfig = (argConfig, config, value, index) => {
499
570
  */
500
571
  const getExpectedValue = argConfig => {
501
572
  switch (argConfig.type) {
502
- default:
503
- return argConfig.type;
504
573
  case "boolean":
505
574
  return "true | false";
506
575
  case "RegExp":
507
576
  return "regular expression (example: /ab?c*/)";
508
577
  case "enum":
509
- return argConfig.values.map(v => `${v}`).join(" | ");
578
+ return /** @type {NonNullable<ArgumentConfig["values"]>} */ (
579
+ argConfig.values
580
+ )
581
+ .map(v => `${v}`)
582
+ .join(" | ");
510
583
  case "reset":
511
584
  return "true (will reset the previous value to an empty array)";
585
+ default:
586
+ return argConfig.type;
512
587
  }
513
588
  };
514
589
 
515
590
  /**
516
591
  * @param {ArgumentConfig} argConfig processing instructions
517
- * @param {any} value the value
592
+ * @param {Value} value the value
518
593
  * @returns {any | undefined} parsed value
519
594
  */
520
595
  const parseValueForArgumentConfig = (argConfig, value) => {
@@ -532,8 +607,8 @@ const parseValueForArgumentConfig = (argConfig, value) => {
532
607
  case "number":
533
608
  if (typeof value === "number") return value;
534
609
  if (typeof value === "string" && /^[+-]?\d*(\.\d*)[eE]\d+$/) {
535
- const n = +value;
536
- if (!isNaN(n)) return n;
610
+ const n = Number(value);
611
+ if (!Number.isNaN(n)) return n;
537
612
  }
538
613
  break;
539
614
  case "boolean":
@@ -550,22 +625,28 @@ const parseValueForArgumentConfig = (argConfig, value) => {
550
625
  return new RegExp(match[1], match[2]);
551
626
  }
552
627
  break;
553
- case "enum":
554
- if (argConfig.values.includes(value)) return value;
555
- for (const item of argConfig.values) {
628
+ case "enum": {
629
+ const values =
630
+ /** @type {NonNullable<ArgumentConfig["values"]>} */
631
+ (argConfig.values);
632
+ if (values.includes(value)) return value;
633
+ for (const item of values) {
556
634
  if (`${item}` === value) return item;
557
635
  }
558
636
  break;
637
+ }
559
638
  case "reset":
560
639
  if (value === true) return [];
561
640
  break;
562
641
  }
563
642
  };
564
643
 
644
+ /** @typedef {any} Configuration */
645
+
565
646
  /**
566
- * @param {Record<string, Argument>} args object of arguments
567
- * @param {any} config configuration
568
- * @param {Record<string, string | number | boolean | RegExp | (string | number | boolean | RegExp)[]>} values object with values
647
+ * @param {Flags} args object of arguments
648
+ * @param {Configuration} config configuration
649
+ * @param {Record<string, Value[]>} values object with values
569
650
  * @returns {Problem[] | null} problems or null for success
570
651
  */
571
652
  const processArguments = (args, config, values) => {
@@ -581,6 +662,10 @@ const processArguments = (args, config, values) => {
581
662
  });
582
663
  continue;
583
664
  }
665
+ /**
666
+ * @param {Value} value value
667
+ * @param {number | undefined} i index
668
+ */
584
669
  const processValue = (value, i) => {
585
670
  const currentProblems = [];
586
671
  for (const argConfig of arg.configs) {
@@ -591,13 +676,13 @@ const processArguments = (args, config, values) => {
591
676
  currentProblems.push({
592
677
  ...problem,
593
678
  argument: key,
594
- value: value,
679
+ value,
595
680
  index: i
596
681
  });
597
682
  }
598
683
  problems.push(...currentProblems);
599
684
  };
600
- let value = values[key];
685
+ const value = values[key];
601
686
  if (Array.isArray(value)) {
602
687
  for (let i = 0; i < value.length; i++) {
603
688
  processValue(value[i], i);
@@ -610,5 +695,5 @@ const processArguments = (args, config, values) => {
610
695
  return problems;
611
696
  };
612
697
 
613
- exports.getArguments = getArguments;
614
- exports.processArguments = processArguments;
698
+ module.exports.getArguments = getArguments;
699
+ module.exports.processArguments = processArguments;