webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
package/lib/cli.js CHANGED
@@ -6,25 +6,32 @@
6
6
  "use strict";
7
7
 
8
8
  const path = require("path");
9
+ const tty = require("tty");
9
10
  const webpackSchema = require("../schemas/WebpackOptions.json");
10
11
 
11
- /** @typedef {TODO & { absolutePath: boolean, instanceof: string, cli: { helper?: boolean, exclude?: boolean } }} Schema */
12
+ /** @typedef {import("json-schema").JSONSchema4} JSONSchema4 */
13
+ /** @typedef {import("json-schema").JSONSchema6} JSONSchema6 */
14
+ /** @typedef {import("json-schema").JSONSchema7} JSONSchema7 */
15
+ /** @typedef {JSONSchema4 | JSONSchema6 | JSONSchema7} JSONSchema */
16
+ /** @typedef {JSONSchema & { absolutePath: boolean, instanceof: string, cli: { helper?: boolean, exclude?: boolean, description?: string, negatedDescription?: string, resetDescription?: string } }} Schema */
12
17
 
13
18
  // TODO add originPath to PathItem for better errors
14
19
  /**
15
20
  * @typedef {object} PathItem
16
- * @property {any} schema the part of the schema
21
+ * @property {Schema} schema the part of the schema
17
22
  * @property {string} path the path in the config
18
23
  */
19
24
 
20
25
  /** @typedef {"unknown-argument" | "unexpected-non-array-in-path" | "unexpected-non-object-in-path" | "multiple-values-unexpected" | "invalid-value"} ProblemType */
21
26
 
27
+ /** @typedef {string | number | boolean | RegExp} Value */
28
+
22
29
  /**
23
30
  * @typedef {object} Problem
24
31
  * @property {ProblemType} type
25
32
  * @property {string} path
26
33
  * @property {string} argument
27
- * @property {any=} value
34
+ * @property {Value=} value
28
35
  * @property {number=} index
29
36
  * @property {string=} expected
30
37
  */
@@ -36,14 +43,18 @@ const webpackSchema = require("../schemas/WebpackOptions.json");
36
43
  * @property {string=} expected
37
44
  */
38
45
 
46
+ /** @typedef {{ [key: string]: EnumValue }} EnumValueObject */
47
+ /** @typedef {EnumValue[]} EnumValueArray */
48
+ /** @typedef {string | number | boolean | EnumValueObject | EnumValueArray | null} EnumValue */
49
+
39
50
  /**
40
51
  * @typedef {object} ArgumentConfig
41
- * @property {string | undefined} description
42
- * @property {string} [negatedDescription]
52
+ * @property {string=} description
53
+ * @property {string=} negatedDescription
43
54
  * @property {string} path
44
55
  * @property {boolean} multiple
45
- * @property {"enum"|"string"|"path"|"number"|"boolean"|"RegExp"|"reset"} type
46
- * @property {any[]=} values
56
+ * @property {"enum" | "string" | "path" | "number" | "boolean" | "RegExp" | "reset"} type
57
+ * @property {EnumValue[]=} values
47
58
  */
48
59
 
49
60
  /** @typedef {"string" | "number" | "boolean"} SimpleType */
@@ -56,10 +67,10 @@ const webpackSchema = require("../schemas/WebpackOptions.json");
56
67
  * @property {ArgumentConfig[]} configs
57
68
  */
58
69
 
59
- /** @typedef {string | number | boolean | RegExp | (string | number | boolean | RegExp)} Value */
60
-
61
70
  /** @typedef {Record<string, Argument>} Flags */
62
71
 
72
+ /** @typedef {Record<string, EXPECTED_ANY>} ObjectConfiguration */
73
+
63
74
  /**
64
75
  * @param {Schema=} schema a json schema to create arguments for (by default webpack schema is used)
65
76
  * @returns {Flags} object of arguments
@@ -72,7 +83,7 @@ const getArguments = (schema = webpackSchema) => {
72
83
  * @param {string} input input
73
84
  * @returns {string} result
74
85
  */
75
- const pathToArgumentName = input =>
86
+ const pathToArgumentName = (input) =>
76
87
  input
77
88
  .replace(/\./g, "-")
78
89
  .replace(/\[\]/g, "")
@@ -87,13 +98,13 @@ const getArguments = (schema = webpackSchema) => {
87
98
  * @param {string} path path
88
99
  * @returns {Schema} schema part
89
100
  */
90
- const getSchemaPart = path => {
101
+ const getSchemaPart = (path) => {
91
102
  const newPath = path.split("/");
92
103
 
93
104
  let schemaPart = schema;
94
105
 
95
106
  for (let i = 1; i < newPath.length; i++) {
96
- const inner = schemaPart[newPath[i]];
107
+ const inner = schemaPart[/** @type {keyof Schema} */ (newPath[i])];
97
108
 
98
109
  if (!inner) {
99
110
  break;
@@ -109,7 +120,7 @@ const getArguments = (schema = webpackSchema) => {
109
120
  * @param {PathItem[]} path path in the schema
110
121
  * @returns {string | undefined} description
111
122
  */
112
- const getDescription = path => {
123
+ const getDescription = (path) => {
113
124
  for (const { schema } of path) {
114
125
  if (schema.cli) {
115
126
  if (schema.cli.helper) continue;
@@ -123,7 +134,7 @@ const getArguments = (schema = webpackSchema) => {
123
134
  * @param {PathItem[]} path path in the schema
124
135
  * @returns {string | undefined} negative description
125
136
  */
126
- const getNegatedDescription = path => {
137
+ const getNegatedDescription = (path) => {
127
138
  for (const { schema } of path) {
128
139
  if (schema.cli) {
129
140
  if (schema.cli.helper) continue;
@@ -136,7 +147,7 @@ const getArguments = (schema = webpackSchema) => {
136
147
  * @param {PathItem[]} path path in the schema
137
148
  * @returns {string | undefined} reset description
138
149
  */
139
- const getResetDescription = path => {
150
+ const getResetDescription = (path) => {
140
151
  for (const { schema } of path) {
141
152
  if (schema.cli) {
142
153
  if (schema.cli.helper) continue;
@@ -147,9 +158,9 @@ const getArguments = (schema = webpackSchema) => {
147
158
 
148
159
  /**
149
160
  * @param {Schema} schemaPart schema
150
- * @returns {Pick<ArgumentConfig, "type"|"values"> | undefined} partial argument config
161
+ * @returns {Pick<ArgumentConfig, "type" | "values"> | undefined} partial argument config
151
162
  */
152
- const schemaToArgumentConfig = schemaPart => {
163
+ const schemaToArgumentConfig = (schemaPart) => {
153
164
  if (schemaPart.enum) {
154
165
  return {
155
166
  type: "enum",
@@ -182,7 +193,7 @@ const getArguments = (schema = webpackSchema) => {
182
193
  * @param {PathItem[]} path path in the schema
183
194
  * @returns {void}
184
195
  */
185
- const addResetFlag = path => {
196
+ const addResetFlag = (path) => {
186
197
  const schemaPath = path[0].path;
187
198
  const name = pathToArgumentName(`${schemaPath}.reset`);
188
199
  const description =
@@ -243,7 +254,7 @@ const getArguments = (schema = webpackSchema) => {
243
254
 
244
255
  if (
245
256
  flags[name].configs.some(
246
- item => JSON.stringify(item) === JSON.stringify(argConfig)
257
+ (item) => JSON.stringify(item) === JSON.stringify(argConfig)
247
258
  )
248
259
  ) {
249
260
  return 0;
@@ -251,7 +262,7 @@ const getArguments = (schema = webpackSchema) => {
251
262
 
252
263
  if (
253
264
  flags[name].configs.some(
254
- item => item.type === argConfig.type && item.multiple !== multiple
265
+ (item) => item.type === argConfig.type && item.multiple !== multiple
255
266
  )
256
267
  ) {
257
268
  if (multiple) {
@@ -272,7 +283,7 @@ const getArguments = (schema = webpackSchema) => {
272
283
  /**
273
284
  * @param {Schema} schemaPart the current schema
274
285
  * @param {string} schemaPath the current path in the schema
275
- * @param {{schema: object, path: string}[]} path all previous visited schemaParts
286
+ * @param {PathItem[]} path all previous visited schemaParts
276
287
  * @param {string | null} inArray if inside of an array, the path to the array
277
288
  * @returns {number} added arguments
278
289
  */
@@ -291,6 +302,7 @@ const getArguments = (schema = webpackSchema) => {
291
302
 
292
303
  if (schemaPart.cli && schemaPart.cli.exclude) return 0;
293
304
 
305
+ /** @type {PathItem[]} */
294
306
  const fullPath = [{ schema: schemaPart, path: schemaPath }, ...path];
295
307
 
296
308
  let addedArguments = 0;
@@ -400,8 +412,8 @@ const getArguments = (schema = webpackSchema) => {
400
412
  /** @type {NonNullable<ArgumentConfig["values"]>} */
401
413
  (argConfig.values);
402
414
 
403
- if (values.every(v => typeof v === "boolean")) type = "boolean";
404
- if (values.every(v => typeof v === "number")) type = "number";
415
+ if (values.every((v) => typeof v === "boolean")) type = "boolean";
416
+ if (values.every((v) => typeof v === "number")) type = "number";
405
417
  break;
406
418
  }
407
419
  }
@@ -409,7 +421,7 @@ const getArguments = (schema = webpackSchema) => {
409
421
  return t === type ? t : "string";
410
422
  }, /** @type {SimpleType | undefined} */ (undefined))
411
423
  );
412
- argument.multiple = argument.configs.some(c => c.multiple);
424
+ argument.multiple = argument.configs.some((c) => c.multiple);
413
425
  }
414
426
 
415
427
  return flags;
@@ -420,10 +432,10 @@ const cliAddedItems = new WeakMap();
420
432
  /** @typedef {string | number} Property */
421
433
 
422
434
  /**
423
- * @param {Configuration} config configuration
435
+ * @param {ObjectConfiguration} config configuration
424
436
  * @param {string} schemaPath path in the config
425
437
  * @param {number | undefined} index index of value when multiple values are provided, otherwise undefined
426
- * @returns {{ problem?: LocalProblem, object?: any, property?: Property, value?: any }} problem or object with property and value
438
+ * @returns {{ problem?: LocalProblem, object?: ObjectConfiguration, property?: Property, value?: EXPECTED_OBJECT | EXPECTED_ANY[] }} problem or object with property and value
427
439
  */
428
440
  const getObjectAndProperty = (config, schemaPath, index = 0) => {
429
441
  if (!schemaPath) return { value: config };
@@ -520,9 +532,9 @@ const getObjectAndProperty = (config, schemaPath, index = 0) => {
520
532
  };
521
533
 
522
534
  /**
523
- * @param {Configuration} config configuration
535
+ * @param {ObjectConfiguration} config configuration
524
536
  * @param {string} schemaPath path in the config
525
- * @param {any} value parsed value
537
+ * @param {ParsedValue} value parsed value
526
538
  * @param {number | undefined} index index of value when multiple values are provided, otherwise undefined
527
539
  * @returns {LocalProblem | null} problem or null for success
528
540
  */
@@ -533,13 +545,14 @@ const setValue = (config, schemaPath, value, index) => {
533
545
  index
534
546
  );
535
547
  if (problem) return problem;
536
- object[/** @type {Property} */ (property)] = value;
548
+ /** @type {ObjectConfiguration} */
549
+ (object)[/** @type {Property} */ (property)] = value;
537
550
  return null;
538
551
  };
539
552
 
540
553
  /**
541
554
  * @param {ArgumentConfig} argConfig processing instructions
542
- * @param {Configuration} config configuration
555
+ * @param {ObjectConfiguration} config configuration
543
556
  * @param {Value} value the value
544
557
  * @param {number | undefined} index the index if multiple values provided
545
558
  * @returns {LocalProblem | null} a problem if any
@@ -568,7 +581,7 @@ const processArgumentConfig = (argConfig, config, value, index) => {
568
581
  * @param {ArgumentConfig} argConfig processing instructions
569
582
  * @returns {string | undefined} expected message
570
583
  */
571
- const getExpectedValue = argConfig => {
584
+ const getExpectedValue = (argConfig) => {
572
585
  switch (argConfig.type) {
573
586
  case "boolean":
574
587
  return "true | false";
@@ -578,7 +591,7 @@ const getExpectedValue = argConfig => {
578
591
  return /** @type {NonNullable<ArgumentConfig["values"]>} */ (
579
592
  argConfig.values
580
593
  )
581
- .map(v => `${v}`)
594
+ .map((v) => `${v}`)
582
595
  .join(" | ");
583
596
  case "reset":
584
597
  return "true (will reset the previous value to an empty array)";
@@ -587,10 +600,12 @@ const getExpectedValue = argConfig => {
587
600
  }
588
601
  };
589
602
 
603
+ /** @typedef {null | string | number | boolean | RegExp | EnumValue | []} ParsedValue */
604
+
590
605
  /**
591
606
  * @param {ArgumentConfig} argConfig processing instructions
592
607
  * @param {Value} value the value
593
- * @returns {any | undefined} parsed value
608
+ * @returns {ParsedValue | undefined} parsed value
594
609
  */
595
610
  const parseValueForArgumentConfig = (argConfig, value) => {
596
611
  switch (argConfig.type) {
@@ -621,15 +636,18 @@ const parseValueForArgumentConfig = (argConfig, value) => {
621
636
  if (typeof value === "string") {
622
637
  // cspell:word yugi
623
638
  const match = /^\/(.*)\/([yugi]*)$/.exec(value);
624
- if (match && !/[^\\]\//.test(match[1]))
639
+ if (match && !/[^\\]\//.test(match[1])) {
625
640
  return new RegExp(match[1], match[2]);
641
+ }
626
642
  }
627
643
  break;
628
644
  case "enum": {
629
645
  const values =
630
- /** @type {NonNullable<ArgumentConfig["values"]>} */
646
+ /** @type {EnumValue[]} */
631
647
  (argConfig.values);
632
- if (values.includes(value)) return value;
648
+ if (values.includes(/** @type {Exclude<Value, RegExp>} */ (value))) {
649
+ return value;
650
+ }
633
651
  for (const item of values) {
634
652
  if (`${item}` === value) return item;
635
653
  }
@@ -641,12 +659,12 @@ const parseValueForArgumentConfig = (argConfig, value) => {
641
659
  }
642
660
  };
643
661
 
644
- /** @typedef {any} Configuration */
662
+ /** @typedef {Record<string, Value[]>} Values */
645
663
 
646
664
  /**
647
665
  * @param {Flags} args object of arguments
648
- * @param {Configuration} config configuration
649
- * @param {Record<string, Value[]>} values object with values
666
+ * @param {ObjectConfiguration} config configuration
667
+ * @param {Values} values object with values
650
668
  * @returns {Problem[] | null} problems or null for success
651
669
  */
652
670
  const processArguments = (args, config, values) => {
@@ -695,5 +713,145 @@ const processArguments = (args, config, values) => {
695
713
  return problems;
696
714
  };
697
715
 
716
+ /**
717
+ * @returns {boolean} true when colors supported, otherwise false
718
+ */
719
+ const isColorSupported = () => {
720
+ const { env = {}, argv = [], platform = "" } = process;
721
+
722
+ const isDisabled = "NO_COLOR" in env || argv.includes("--no-color");
723
+ const isForced = "FORCE_COLOR" in env || argv.includes("--color");
724
+ const isWindows = platform === "win32";
725
+ const isDumbTerminal = env.TERM === "dumb";
726
+
727
+ const isCompatibleTerminal = tty.isatty(1) && env.TERM && !isDumbTerminal;
728
+
729
+ const isCI =
730
+ "CI" in env &&
731
+ ("GITHUB_ACTIONS" in env || "GITLAB_CI" in env || "CIRCLECI" in env);
732
+
733
+ return (
734
+ !isDisabled &&
735
+ (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)
736
+ );
737
+ };
738
+
739
+ /**
740
+ * @param {number} index index
741
+ * @param {string} string string
742
+ * @param {string} close close
743
+ * @param {string=} replace replace
744
+ * @param {string=} head head
745
+ * @param {string=} tail tail
746
+ * @param {number=} next next
747
+ * @returns {string} result
748
+ */
749
+ const replaceClose = (
750
+ index,
751
+ string,
752
+ close,
753
+ replace,
754
+ head = string.slice(0, Math.max(0, index)) + replace,
755
+ tail = string.slice(Math.max(0, index + close.length)),
756
+ next = tail.indexOf(close)
757
+ ) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace));
758
+
759
+ /**
760
+ * @param {number} index index to replace
761
+ * @param {string} string string
762
+ * @param {string} open open string
763
+ * @param {string} close close string
764
+ * @param {string=} replace extra replace
765
+ * @returns {string} result
766
+ */
767
+ const clearBleed = (index, string, open, close, replace) =>
768
+ index < 0
769
+ ? open + string + close
770
+ : open + replaceClose(index, string, close, replace) + close;
771
+
772
+ /** @typedef {(value: EXPECTED_ANY) => string} PrintFunction */
773
+
774
+ /**
775
+ * @param {string} open open string
776
+ * @param {string} close close string
777
+ * @param {string=} replace extra replace
778
+ * @param {number=} at at
779
+ * @returns {PrintFunction} function to create color
780
+ */
781
+ const filterEmpty =
782
+ (open, close, replace = open, at = open.length + 1) =>
783
+ (string) =>
784
+ string || !(string === "" || string === undefined)
785
+ ? clearBleed(`${string}`.indexOf(close, at), string, open, close, replace)
786
+ : "";
787
+
788
+ /**
789
+ * @param {number} open open code
790
+ * @param {number} close close code
791
+ * @param {string=} replace extra replace
792
+ * @returns {PrintFunction} result
793
+ */
794
+ const init = (open, close, replace) =>
795
+ filterEmpty(`\u001B[${open}m`, `\u001B[${close}m`, replace);
796
+
797
+ /**
798
+ * @typedef {{ reset: PrintFunction, bold: PrintFunction, dim: PrintFunction, italic: PrintFunction, underline: PrintFunction, inverse: PrintFunction, hidden: PrintFunction, strikethrough: PrintFunction, black: PrintFunction, red: PrintFunction, green: PrintFunction, yellow: PrintFunction, blue: PrintFunction, magenta: PrintFunction, cyan: PrintFunction, white: PrintFunction, gray: PrintFunction, bgBlack: PrintFunction, bgRed: PrintFunction, bgGreen: PrintFunction, bgYellow: PrintFunction, bgBlue: PrintFunction, bgMagenta: PrintFunction, bgCyan: PrintFunction, bgWhite: PrintFunction, blackBright: PrintFunction, redBright: PrintFunction, greenBright: PrintFunction, yellowBright: PrintFunction, blueBright: PrintFunction, magentaBright: PrintFunction, cyanBright: PrintFunction, whiteBright: PrintFunction, bgBlackBright: PrintFunction, bgRedBright: PrintFunction, bgGreenBright: PrintFunction, bgYellowBright: PrintFunction, bgBlueBright: PrintFunction, bgMagentaBright: PrintFunction, bgCyanBright: PrintFunction, bgWhiteBright: PrintFunction }} Colors
799
+ */
800
+
801
+ /**
802
+ * @typedef {object} ColorsOptions
803
+ * @property {boolean=} useColor force use colors
804
+ */
805
+
806
+ /**
807
+ * @param {ColorsOptions=} options options
808
+ * @returns {Colors} colors
809
+ */
810
+ const createColors = ({ useColor = isColorSupported() } = {}) => ({
811
+ reset: useColor ? init(0, 0) : String,
812
+ bold: useColor ? init(1, 22, "\u001B[22m\u001B[1m") : String,
813
+ dim: useColor ? init(2, 22, "\u001B[22m\u001B[2m") : String,
814
+ italic: useColor ? init(3, 23) : String,
815
+ underline: useColor ? init(4, 24) : String,
816
+ inverse: useColor ? init(7, 27) : String,
817
+ hidden: useColor ? init(8, 28) : String,
818
+ strikethrough: useColor ? init(9, 29) : String,
819
+ black: useColor ? init(30, 39) : String,
820
+ red: useColor ? init(31, 39) : String,
821
+ green: useColor ? init(32, 39) : String,
822
+ yellow: useColor ? init(33, 39) : String,
823
+ blue: useColor ? init(34, 39) : String,
824
+ magenta: useColor ? init(35, 39) : String,
825
+ cyan: useColor ? init(36, 39) : String,
826
+ white: useColor ? init(37, 39) : String,
827
+ gray: useColor ? init(90, 39) : String,
828
+ bgBlack: useColor ? init(40, 49) : String,
829
+ bgRed: useColor ? init(41, 49) : String,
830
+ bgGreen: useColor ? init(42, 49) : String,
831
+ bgYellow: useColor ? init(43, 49) : String,
832
+ bgBlue: useColor ? init(44, 49) : String,
833
+ bgMagenta: useColor ? init(45, 49) : String,
834
+ bgCyan: useColor ? init(46, 49) : String,
835
+ bgWhite: useColor ? init(47, 49) : String,
836
+ blackBright: useColor ? init(90, 39) : String,
837
+ redBright: useColor ? init(91, 39) : String,
838
+ greenBright: useColor ? init(92, 39) : String,
839
+ yellowBright: useColor ? init(93, 39) : String,
840
+ blueBright: useColor ? init(94, 39) : String,
841
+ magentaBright: useColor ? init(95, 39) : String,
842
+ cyanBright: useColor ? init(96, 39) : String,
843
+ whiteBright: useColor ? init(97, 39) : String,
844
+ bgBlackBright: useColor ? init(100, 49) : String,
845
+ bgRedBright: useColor ? init(101, 49) : String,
846
+ bgGreenBright: useColor ? init(102, 49) : String,
847
+ bgYellowBright: useColor ? init(103, 49) : String,
848
+ bgBlueBright: useColor ? init(104, 49) : String,
849
+ bgMagentaBright: useColor ? init(105, 49) : String,
850
+ bgCyanBright: useColor ? init(106, 49) : String,
851
+ bgWhiteBright: useColor ? init(107, 49) : String
852
+ });
853
+
854
+ module.exports.createColors = createColors;
698
855
  module.exports.getArguments = getArguments;
856
+ module.exports.isColorSupported = isColorSupported;
699
857
  module.exports.processArguments = processArguments;