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
@@ -9,13 +9,86 @@
9
9
  * @param {string} str string
10
10
  * @returns {string} quoted meta
11
11
  */
12
- const quoteMeta = str => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
12
+ const quoteMeta = (str) => str.replace(/[-[\]\\/{}()*+?.^$|]/g, "\\$&");
13
+
14
+ /**
15
+ * @param {string} char character to escape for use in character class
16
+ * @returns {string} escaped character
17
+ */
18
+ const quoteMetaInCharClass = (char) => {
19
+ // In character class, only these need escaping: ] \ ^ -
20
+ if (char === "]" || char === "\\" || char === "^" || char === "-") {
21
+ return `\\${char}`;
22
+ }
23
+ return char;
24
+ };
25
+
26
+ /**
27
+ * Converts an array of single characters into an optimized character class string
28
+ * using ranges where possible. E.g., ["1","2","3","4","a"] => "1-4a"
29
+ * @param {string[]} chars array of single characters (should be sorted)
30
+ * @returns {string} optimized character class content (without the brackets)
31
+ */
32
+ const charsToCharClassContent = (chars) => {
33
+ if (chars.length === 0) return "";
34
+ if (chars.length === 1) return quoteMetaInCharClass(chars[0]);
35
+
36
+ // Sort by char code
37
+ const sorted = [...chars].sort((a, b) => a.charCodeAt(0) - b.charCodeAt(0));
38
+
39
+ /** @type {string[]} */
40
+ const parts = [];
41
+ let rangeStart = sorted[0];
42
+ let rangeEnd = sorted[0];
43
+
44
+ for (let i = 1; i < sorted.length; i++) {
45
+ const char = sorted[i];
46
+ const prevCode = rangeEnd.charCodeAt(0);
47
+ const currCode = char.charCodeAt(0);
48
+
49
+ if (currCode === prevCode + 1) {
50
+ // Extend the range
51
+ rangeEnd = char;
52
+ } else {
53
+ // Flush the current range
54
+ parts.push(formatRange(rangeStart, rangeEnd));
55
+ rangeStart = char;
56
+ rangeEnd = char;
57
+ }
58
+ }
59
+ // Flush the last range
60
+ parts.push(formatRange(rangeStart, rangeEnd));
61
+
62
+ return parts.join("");
63
+ };
64
+
65
+ /**
66
+ * Formats a range of characters for use in a character class
67
+ * @param {string} start start character
68
+ * @param {string} end end character
69
+ * @returns {string} formatted range
70
+ */
71
+ const formatRange = (start, end) => {
72
+ const startCode = start.charCodeAt(0);
73
+ const endCode = end.charCodeAt(0);
74
+ const length = endCode - startCode + 1;
75
+
76
+ if (length === 1) {
77
+ return quoteMetaInCharClass(start);
78
+ }
79
+ if (length === 2) {
80
+ // For 2 chars, just list them (e.g., "ab" instead of "a-b")
81
+ return quoteMetaInCharClass(start) + quoteMetaInCharClass(end);
82
+ }
83
+ // For 3+ chars, use range notation
84
+ return `${quoteMetaInCharClass(start)}-${quoteMetaInCharClass(end)}`;
85
+ };
13
86
 
14
87
  /**
15
88
  * @param {string} str string
16
89
  * @returns {string} string
17
90
  */
18
- const toSimpleString = str => {
91
+ const toSimpleString = (str) => {
19
92
  if (`${Number(str)}` === str) {
20
93
  return str;
21
94
  }
@@ -23,12 +96,12 @@ const toSimpleString = str => {
23
96
  };
24
97
 
25
98
  /**
26
- * @param {Record<string|number, boolean>} map value map
27
- * @returns {boolean|(function(string): string)} true/false, when unconditionally true/false, or a template function to determine the value at runtime
99
+ * @param {Record<string | number, boolean>} map value map
100
+ * @returns {boolean | ((value: string) => string)} true/false, when unconditionally true/false, or a template function to determine the value at runtime
28
101
  */
29
- const compileBooleanMatcher = map => {
30
- const positiveItems = Object.keys(map).filter(i => map[i]);
31
- const negativeItems = Object.keys(map).filter(i => !map[i]);
102
+ const compileBooleanMatcher = (map) => {
103
+ const positiveItems = Object.keys(map).filter((i) => map[i]);
104
+ const negativeItems = Object.keys(map).filter((i) => !map[i]);
32
105
  if (positiveItems.length === 0) return false;
33
106
  if (negativeItems.length === 0) return true;
34
107
  return compileBooleanMatcherFromLists(positiveItems, negativeItems);
@@ -37,45 +110,49 @@ const compileBooleanMatcher = map => {
37
110
  /**
38
111
  * @param {string[]} positiveItems positive items
39
112
  * @param {string[]} negativeItems negative items
40
- * @returns {function(string): string} a template function to determine the value at runtime
113
+ * @returns {(value: string) => string} a template function to determine the value at runtime
41
114
  */
42
115
  const compileBooleanMatcherFromLists = (positiveItems, negativeItems) => {
43
116
  if (positiveItems.length === 0) return () => "false";
44
117
  if (negativeItems.length === 0) return () => "true";
45
- if (positiveItems.length === 1)
46
- return value => `${toSimpleString(positiveItems[0])} == ${value}`;
47
- if (negativeItems.length === 1)
48
- return value => `${toSimpleString(negativeItems[0])} != ${value}`;
118
+ if (positiveItems.length === 1) {
119
+ return (value) => `${toSimpleString(positiveItems[0])} == ${value}`;
120
+ }
121
+ if (negativeItems.length === 1) {
122
+ return (value) => `${toSimpleString(negativeItems[0])} != ${value}`;
123
+ }
49
124
  const positiveRegexp = itemsToRegexp(positiveItems);
50
125
  const negativeRegexp = itemsToRegexp(negativeItems);
51
126
  if (positiveRegexp.length <= negativeRegexp.length) {
52
- return value => `/^${positiveRegexp}$/.test(${value})`;
127
+ return (value) => `/^${positiveRegexp}$/.test(${value})`;
53
128
  }
54
- return value => `!/^${negativeRegexp}$/.test(${value})`;
129
+ return (value) => `!/^${negativeRegexp}$/.test(${value})`;
55
130
  };
56
131
 
132
+ /** @typedef {string[][]} ListOfCommonItems */
133
+
57
134
  /**
58
135
  * @param {Set<string>} itemsSet items set
59
136
  * @param {(str: string) => string | false} getKey get key function
60
- * @param {(str: Array<string>) => boolean} condition condition
61
- * @returns {Array<Array<string>>} list of common items
137
+ * @param {(str: string[]) => boolean} condition condition
138
+ * @returns {ListOfCommonItems} list of common items
62
139
  */
63
140
  const popCommonItems = (itemsSet, getKey, condition) => {
64
- /** @type {Map<string, Array<string>>} */
141
+ /** @type {Map<string, string[]>} */
65
142
  const map = new Map();
66
143
  for (const item of itemsSet) {
67
144
  const key = getKey(item);
68
145
  if (key) {
69
146
  let list = map.get(key);
70
147
  if (list === undefined) {
71
- /** @type {Array<string>} */
148
+ /** @type {string[]} */
72
149
  list = [];
73
150
  map.set(key, list);
74
151
  }
75
152
  list.push(item);
76
153
  }
77
154
  }
78
- /** @type {Array<Array<string>>} */
155
+ /** @type {ListOfCommonItems} */
79
156
  const result = [];
80
157
  for (const list of map.values()) {
81
158
  if (condition(list)) {
@@ -89,10 +166,10 @@ const popCommonItems = (itemsSet, getKey, condition) => {
89
166
  };
90
167
 
91
168
  /**
92
- * @param {Array<string>} items items
169
+ * @param {string[]} items items
93
170
  * @returns {string} common prefix
94
171
  */
95
- const getCommonPrefix = items => {
172
+ const getCommonPrefix = (items) => {
96
173
  let prefix = items[0];
97
174
  for (let i = 1; i < items.length; i++) {
98
175
  const item = items[i];
@@ -107,10 +184,10 @@ const getCommonPrefix = items => {
107
184
  };
108
185
 
109
186
  /**
110
- * @param {Array<string>} items items
187
+ * @param {string[]} items items
111
188
  * @returns {string} common suffix
112
189
  */
113
- const getCommonSuffix = items => {
190
+ const getCommonSuffix = (items) => {
114
191
  let suffix = items[0];
115
192
  for (let i = 1; i < items.length; i++) {
116
193
  const item = items[i];
@@ -125,14 +202,14 @@ const getCommonSuffix = items => {
125
202
  };
126
203
 
127
204
  /**
128
- * @param {Array<string>} itemsArr array of items
205
+ * @param {string[]} itemsArr array of items
129
206
  * @returns {string} regexp
130
207
  */
131
- const itemsToRegexp = itemsArr => {
208
+ const itemsToRegexp = (itemsArr) => {
132
209
  if (itemsArr.length === 1) {
133
210
  return quoteMeta(itemsArr[0]);
134
211
  }
135
- /** @type {Array<string>} */
212
+ /** @type {string[]} */
136
213
  const finishedItems = [];
137
214
 
138
215
  // merge single char items: (a|b|c|d|ef) => ([abcd]|ef)
@@ -144,29 +221,31 @@ const itemsToRegexp = itemsArr => {
144
221
  }
145
222
  // special case for only single char items
146
223
  if (countOfSingleCharItems === itemsArr.length) {
147
- return `[${quoteMeta(itemsArr.sort().join(""))}]`;
224
+ return `[${charsToCharClassContent(itemsArr)}]`;
148
225
  }
226
+ /** @type {Set<string>} */
149
227
  const items = new Set(itemsArr.sort());
150
228
  if (countOfSingleCharItems > 2) {
151
- let singleCharItems = "";
229
+ /** @type {string[]} */
230
+ const singleCharItems = [];
152
231
  for (const item of items) {
153
232
  if (item.length === 1) {
154
- singleCharItems += item;
233
+ singleCharItems.push(item);
155
234
  items.delete(item);
156
235
  }
157
236
  }
158
- finishedItems.push(`[${quoteMeta(singleCharItems)}]`);
237
+ finishedItems.push(`[${charsToCharClassContent(singleCharItems)}]`);
159
238
  }
160
239
 
161
240
  // special case for 2 items with common prefix/suffix
162
241
  if (finishedItems.length === 0 && items.size === 2) {
163
242
  const prefix = getCommonPrefix(itemsArr);
164
243
  const suffix = getCommonSuffix(
165
- itemsArr.map(item => item.slice(prefix.length))
244
+ itemsArr.map((item) => item.slice(prefix.length))
166
245
  );
167
246
  if (prefix.length > 0 || suffix.length > 0) {
168
247
  return `${quoteMeta(prefix)}${itemsToRegexp(
169
- itemsArr.map(i => i.slice(prefix.length, -suffix.length || undefined))
248
+ itemsArr.map((i) => i.slice(prefix.length, -suffix.length || undefined))
170
249
  )}${quoteMeta(suffix)}`;
171
250
  }
172
251
  }
@@ -187,8 +266,8 @@ const itemsToRegexp = itemsArr => {
187
266
  // find common prefix: (a1|a2|a3|a4|b5) => (a(1|2|3|4)|b5)
188
267
  const prefixed = popCommonItems(
189
268
  items,
190
- item => (item.length >= 1 ? item[0] : false),
191
- list => {
269
+ (item) => (item.length >= 1 ? item[0] : false),
270
+ (list) => {
192
271
  if (list.length >= 3) return true;
193
272
  if (list.length <= 1) return false;
194
273
  return list[0][1] === list[1][1];
@@ -198,7 +277,7 @@ const itemsToRegexp = itemsArr => {
198
277
  const prefix = getCommonPrefix(prefixedItems);
199
278
  finishedItems.push(
200
279
  `${quoteMeta(prefix)}${itemsToRegexp(
201
- prefixedItems.map(i => i.slice(prefix.length))
280
+ prefixedItems.map((i) => i.slice(prefix.length))
202
281
  )}`
203
282
  );
204
283
  }
@@ -206,8 +285,8 @@ const itemsToRegexp = itemsArr => {
206
285
  // find common suffix: (a1|b1|c1|d1|e2) => ((a|b|c|d)1|e2)
207
286
  const suffixed = popCommonItems(
208
287
  items,
209
- item => (item.length >= 1 ? item.slice(-1) : false),
210
- list => {
288
+ (item) => (item.length >= 1 ? item.slice(-1) : false),
289
+ (list) => {
211
290
  if (list.length >= 3) return true;
212
291
  if (list.length <= 1) return false;
213
292
  return list[0].slice(-2) === list[1].slice(-2);
@@ -217,18 +296,18 @@ const itemsToRegexp = itemsArr => {
217
296
  const suffix = getCommonSuffix(suffixedItems);
218
297
  finishedItems.push(
219
298
  `${itemsToRegexp(
220
- suffixedItems.map(i => i.slice(0, -suffix.length))
299
+ suffixedItems.map((i) => i.slice(0, -suffix.length))
221
300
  )}${quoteMeta(suffix)}`
222
301
  );
223
302
  }
224
303
 
225
- // TODO further optimize regexp, i. e.
226
- // use ranges: (1|2|3|4|a) => [1-4a]
227
- const conditional = finishedItems.concat(Array.from(items, quoteMeta));
304
+ /** @type {string[]} */
305
+ const conditional = [...finishedItems, ...Array.from(items, quoteMeta)];
228
306
  if (conditional.length === 1) return conditional[0];
229
307
  return `(${conditional.join("|")})`;
230
308
  };
231
309
 
232
310
  compileBooleanMatcher.fromLists = compileBooleanMatcherFromLists;
233
311
  compileBooleanMatcher.itemsToRegexp = itemsToRegexp;
312
+
234
313
  module.exports = compileBooleanMatcher;
@@ -12,7 +12,6 @@ const Template = require("../Template");
12
12
  /** @typedef {import("eslint-scope").Variable} Variable */
13
13
  /** @typedef {import("estree").Node} Node */
14
14
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
15
- /** @typedef {import("../javascript/JavascriptParser").Program} Program */
16
15
  /** @typedef {Set<string>} UsedNames */
17
16
 
18
17
  const DEFAULT_EXPORT = "__WEBPACK_DEFAULT_EXPORT__";
@@ -22,14 +21,14 @@ const NAMESPACE_OBJECT_EXPORT = "__WEBPACK_NAMESPACE_OBJECT__";
22
21
  * @param {Variable} variable variable
23
22
  * @returns {Reference[]} references
24
23
  */
25
- const getAllReferences = variable => {
24
+ const getAllReferences = (variable) => {
26
25
  let set = variable.references;
27
26
  // Look for inner scope variables too (like in class Foo { t() { Foo } })
28
27
  const identifiers = new Set(variable.identifiers);
29
28
  for (const scope of variable.scope.childScopes) {
30
29
  for (const innerVar of scope.variables) {
31
- if (innerVar.identifiers.some(id => identifiers.has(id))) {
32
- set = set.concat(innerVar.references);
30
+ if (innerVar.identifiers.some((id) => identifiers.has(id))) {
31
+ set = [...set, ...innerVar.references];
33
32
  break;
34
33
  }
35
34
  }
@@ -53,7 +52,7 @@ const getPathInAst = (ast, node) => {
53
52
  * @param {Node} n node
54
53
  * @returns {Node[] | undefined} result
55
54
  */
56
- const enterNode = n => {
55
+ const enterNode = (n) => {
57
56
  if (!n) return;
58
57
  const r = n.range;
59
58
  if (r && r[0] <= nr[0] && r[1] >= nr[1]) {
@@ -72,7 +71,7 @@ const getPathInAst = (ast, node) => {
72
71
  }
73
72
  } else if (ast && typeof ast === "object") {
74
73
  const keys =
75
- /** @type {Array<keyof Node>} */
74
+ /** @type {(keyof Node)[]} */
76
75
  (Object.keys(ast));
77
76
  for (let i = 0; i < keys.length; i++) {
78
77
  // We are making the faster check in `enterNode` using `n.range`
@@ -122,8 +121,9 @@ function findNewName(oldName, usedNamed1, usedNamed2, extraInfo) {
122
121
  if (
123
122
  !usedNamed1.has(nameIdent) &&
124
123
  (!usedNamed2 || !usedNamed2.has(nameIdent))
125
- )
124
+ ) {
126
125
  return nameIdent;
126
+ }
127
127
  }
128
128
 
129
129
  let i = 0;
@@ -139,11 +139,13 @@ function findNewName(oldName, usedNamed1, usedNamed2, extraInfo) {
139
139
  return nameWithNumber;
140
140
  }
141
141
 
142
+ /** @typedef {Set<Scope>} ScopeSet */
143
+
142
144
  /**
143
145
  * @param {Scope | null} s scope
144
146
  * @param {UsedNames} nameSet name set
145
- * @param {TODO} scopeSet1 scope set 1
146
- * @param {TODO} scopeSet2 scope set 2
147
+ * @param {ScopeSet} scopeSet1 scope set 1
148
+ * @param {ScopeSet} scopeSet2 scope set 2
147
149
  */
148
150
  const addScopeSymbols = (s, nameSet, scopeSet1, scopeSet2) => {
149
151
  let scope = s;
@@ -196,11 +198,13 @@ const RESERVED_NAMES = new Set(
196
198
  .split(",")
197
199
  );
198
200
 
201
+ /** @typedef {{ usedNames: UsedNames, alreadyCheckedScopes: ScopeSet }} ScopeInfo */
202
+
199
203
  /**
200
- * @param {Map<string, { usedNames: UsedNames, alreadyCheckedScopes: Set<TODO> }>} usedNamesInScopeInfo used names in scope info
204
+ * @param {Map<string, ScopeInfo>} usedNamesInScopeInfo used names in scope info
201
205
  * @param {string} module module identifier
202
206
  * @param {string} id export id
203
- * @returns {{ usedNames: UsedNames, alreadyCheckedScopes: Set<TODO> }} info
207
+ * @returns {ScopeInfo} info
204
208
  */
205
209
  const getUsedNamesInScopeInfo = (usedNamesInScopeInfo, module, id) => {
206
210
  const key = `${module}-${id}`;
@@ -216,12 +220,12 @@ const getUsedNamesInScopeInfo = (usedNamesInScopeInfo, module, id) => {
216
220
  };
217
221
 
218
222
  module.exports = {
219
- getUsedNamesInScopeInfo,
223
+ DEFAULT_EXPORT,
224
+ NAMESPACE_OBJECT_EXPORT,
225
+ RESERVED_NAMES,
226
+ addScopeSymbols,
220
227
  findNewName,
221
228
  getAllReferences,
222
229
  getPathInAst,
223
- NAMESPACE_OBJECT_EXPORT,
224
- DEFAULT_EXPORT,
225
- RESERVED_NAMES,
226
- addScopeSymbols
230
+ getUsedNamesInScopeInfo
227
231
  };
@@ -6,6 +6,77 @@
6
6
  "use strict";
7
7
 
8
8
  /** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
9
+ // Copy from css-loader
10
+ /**
11
+ * @param {string} string string
12
+ * @returns {string} result
13
+ */
14
+ const preserveCamelCase = (string) => {
15
+ let result = string;
16
+ let isLastCharLower = false;
17
+ let isLastCharUpper = false;
18
+ let isLastLastCharUpper = false;
19
+
20
+ for (let i = 0; i < result.length; i++) {
21
+ const character = result[i];
22
+
23
+ if (isLastCharLower && /[\p{Lu}]/u.test(character)) {
24
+ result = `${result.slice(0, i)}-${result.slice(i)}`;
25
+ isLastCharLower = false;
26
+ isLastLastCharUpper = isLastCharUpper;
27
+ isLastCharUpper = true;
28
+ i += 1;
29
+ } else if (
30
+ isLastCharUpper &&
31
+ isLastLastCharUpper &&
32
+ /[\p{Ll}]/u.test(character)
33
+ ) {
34
+ result = `${result.slice(0, i - 1)}-${result.slice(i - 1)}`;
35
+ isLastLastCharUpper = isLastCharUpper;
36
+ isLastCharUpper = false;
37
+ isLastCharLower = true;
38
+ } else {
39
+ isLastCharLower =
40
+ character.toLowerCase() === character &&
41
+ character.toUpperCase() !== character;
42
+ isLastLastCharUpper = isLastCharUpper;
43
+ isLastCharUpper =
44
+ character.toUpperCase() === character &&
45
+ character.toLowerCase() !== character;
46
+ }
47
+ }
48
+
49
+ return result;
50
+ };
51
+
52
+ // Copy from css-loader
53
+ /**
54
+ * @param {string} input input
55
+ * @returns {string} result
56
+ */
57
+ module.exports.camelCase = (input) => {
58
+ let result = input.trim();
59
+
60
+ if (result.length === 0) {
61
+ return "";
62
+ }
63
+
64
+ if (result.length === 1) {
65
+ return result.toLowerCase();
66
+ }
67
+
68
+ const hasUpperCase = result !== result.toLowerCase();
69
+
70
+ if (hasUpperCase) {
71
+ result = preserveCamelCase(result);
72
+ }
73
+
74
+ return result
75
+ .replace(/^[_.\- ]+/, "")
76
+ .toLowerCase()
77
+ .replace(/[_.\- ]+([\p{Alpha}\p{N}_]|$)/gu, (_, p1) => p1.toUpperCase())
78
+ .replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, (m) => m.toUpperCase());
79
+ };
9
80
 
10
81
  /**
11
82
  * @param {string} input input
@@ -42,7 +113,7 @@ module.exports.cssExportConvention = (input, convention) => {
42
113
  }
43
114
  }
44
115
  }
45
- return Array.from(set);
116
+ return [...set];
46
117
  };
47
118
 
48
119
  // Copy from css-loader
@@ -50,77 +121,5 @@ module.exports.cssExportConvention = (input, convention) => {
50
121
  * @param {string} input input
51
122
  * @returns {string} result
52
123
  */
53
- module.exports.dashesCamelCase = input =>
124
+ module.exports.dashesCamelCase = (input) =>
54
125
  input.replace(/-+(\w)/g, (match, firstLetter) => firstLetter.toUpperCase());
55
-
56
- // Copy from css-loader
57
- /**
58
- * @param {string} input input
59
- * @returns {string} result
60
- */
61
- module.exports.camelCase = input => {
62
- let result = input.trim();
63
-
64
- if (result.length === 0) {
65
- return "";
66
- }
67
-
68
- if (result.length === 1) {
69
- return result.toLowerCase();
70
- }
71
-
72
- const hasUpperCase = result !== result.toLowerCase();
73
-
74
- if (hasUpperCase) {
75
- result = preserveCamelCase(result);
76
- }
77
-
78
- return result
79
- .replace(/^[_.\- ]+/, "")
80
- .toLowerCase()
81
- .replace(/[_.\- ]+([\p{Alpha}\p{N}_]|$)/gu, (_, p1) => p1.toUpperCase())
82
- .replace(/\d+([\p{Alpha}\p{N}_]|$)/gu, m => m.toUpperCase());
83
- };
84
-
85
- // Copy from css-loader
86
- /**
87
- * @param {string} string string
88
- * @returns {string} result
89
- */
90
- const preserveCamelCase = string => {
91
- let result = string;
92
- let isLastCharLower = false;
93
- let isLastCharUpper = false;
94
- let isLastLastCharUpper = false;
95
-
96
- for (let i = 0; i < result.length; i++) {
97
- const character = result[i];
98
-
99
- if (isLastCharLower && /[\p{Lu}]/u.test(character)) {
100
- result = `${result.slice(0, i)}-${result.slice(i)}`;
101
- isLastCharLower = false;
102
- isLastLastCharUpper = isLastCharUpper;
103
- isLastCharUpper = true;
104
- i += 1;
105
- } else if (
106
- isLastCharUpper &&
107
- isLastLastCharUpper &&
108
- /[\p{Ll}]/u.test(character)
109
- ) {
110
- result = `${result.slice(0, i - 1)}-${result.slice(i - 1)}`;
111
- isLastLastCharUpper = isLastCharUpper;
112
- isLastCharUpper = false;
113
- isLastCharLower = true;
114
- } else {
115
- isLastCharLower =
116
- character.toLowerCase() === character &&
117
- character.toUpperCase() !== character;
118
- isLastLastCharUpper = isLastCharUpper;
119
- isLastCharUpper =
120
- character.toUpperCase() === character &&
121
- character.toLowerCase() !== character;
122
- }
123
- }
124
-
125
- return result;
126
- };
@@ -7,25 +7,25 @@
7
7
 
8
8
  const memoize = require("./memoize");
9
9
 
10
- /** @typedef {import("schema-utils/declarations/validate").ValidationErrorConfiguration} ValidationErrorConfiguration */
11
- /** @typedef {import("./fs").JsonObject} JsonObject */
10
+ /** @typedef {import("schema-utils").Schema} Schema */
11
+ /** @typedef {import("schema-utils").ValidationErrorConfiguration} ValidationErrorConfiguration */
12
12
 
13
13
  const getValidate = memoize(() => require("schema-utils").validate);
14
14
 
15
15
  /**
16
16
  * @template {object | object[]} T
17
- * @param {(function(T): boolean) | undefined} check check
18
- * @param {() => JsonObject} getSchema get schema fn
17
+ * @param {((value: T) => boolean) | undefined} check check
18
+ * @param {() => Schema} getSchema get schema fn
19
19
  * @param {ValidationErrorConfiguration} options options
20
- * @returns {function(T=): void} validate
20
+ * @returns {(value?: T) => void} validate
21
21
  */
22
22
  const createSchemaValidation = (check, getSchema, options) => {
23
23
  getSchema = memoize(getSchema);
24
- return value => {
25
- if (check && !check(/** @type {T} */ (value))) {
24
+ return (value) => {
25
+ if (check && value && !check(value)) {
26
26
  getValidate()(
27
27
  getSchema(),
28
- /** @type {object | object[]} */
28
+ /** @type {EXPECTED_OBJECT | EXPECTED_OBJECT[]} */
29
29
  (value),
30
30
  options
31
31
  );