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
@@ -5,9 +5,9 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @type {WeakMap<object, WeakMap<object, object>>} */
8
+ /** @type {WeakMap<EXPECTED_OBJECT, WeakMap<EXPECTED_OBJECT, EXPECTED_OBJECT>>} */
9
9
  const mergeCache = new WeakMap();
10
- /** @type {WeakMap<object, Map<string, Map<string|number|boolean, object>>>} */
10
+ /** @type {WeakMap<EXPECTED_OBJECT, Map<string, Map<string | number | boolean, EXPECTED_OBJECT>>>} */
11
11
  const setPropertyCache = new WeakMap();
12
12
  const DELETE = Symbol("DELETE");
13
13
  const DYNAMIC_INFO = Symbol("cleverMerge dynamic info");
@@ -30,10 +30,12 @@ const DYNAMIC_INFO = Symbol("cleverMerge dynamic info");
30
30
  const cachedCleverMerge = (first, second) => {
31
31
  if (second === undefined) return /** @type {T} */ (first);
32
32
  if (first === undefined) return /** @type {O} */ (second);
33
- if (typeof second !== "object" || second === null)
33
+ if (typeof second !== "object" || second === null) {
34
34
  return /** @type {O} */ (second);
35
- if (typeof first !== "object" || first === null)
35
+ }
36
+ if (typeof first !== "object" || first === null) {
36
37
  return /** @type {T} */ (first);
38
+ }
37
39
 
38
40
  let innerCache = mergeCache.get(first);
39
41
  if (innerCache === undefined) {
@@ -44,14 +46,14 @@ const cachedCleverMerge = (first, second) => {
44
46
  if (prevMerge !== undefined) return prevMerge;
45
47
  const newMerge = _cleverMerge(first, second, true);
46
48
  innerCache.set(second, newMerge);
47
- return /** @type {T & O} */ (newMerge);
49
+ return newMerge;
48
50
  };
49
51
 
50
52
  /**
51
53
  * @template T
52
54
  * @param {Partial<T>} obj object
53
55
  * @param {string} property property
54
- * @param {string|number|boolean} value assignment value
56
+ * @param {string | number | boolean} value assignment value
55
57
  * @returns {T} new object
56
58
  */
57
59
  const cachedSetProperty = (obj, property, value) => {
@@ -82,49 +84,70 @@ const cachedSetProperty = (obj, property, value) => {
82
84
  return /** @type {T} */ (result);
83
85
  };
84
86
 
85
- /** @typedef {Map<string, any>} ByValues */
87
+ /**
88
+ * @typedef {Map<string, EXPECTED_ANY>} ByValues
89
+ */
86
90
 
87
91
  /**
92
+ * @template T
88
93
  * @typedef {object} ObjectParsedPropertyEntry
89
- * @property {any | undefined} base base value
90
- * @property {string | undefined} byProperty the name of the selector property
91
- * @property {ByValues} byValues value depending on selector property, merged with base
94
+ * @property {T[keyof T] | undefined} base base value
95
+ * @property {`by${string}` | undefined} byProperty the name of the selector property
96
+ * @property {ByValues | undefined} byValues value depending on selector property, merged with base
97
+ */
98
+
99
+ /** @typedef {(function(...EXPECTED_ANY): object) & { [DYNAMIC_INFO]: [DynamicFunction, object] }} DynamicFunction */
100
+
101
+ /**
102
+ * @template {object} T
103
+ * @typedef {Map<keyof T, ObjectParsedPropertyEntry<T>>} ParsedObjectStatic
104
+ */
105
+
106
+ /**
107
+ * @template {object} T
108
+ * @typedef {{ byProperty: `by${string}`, fn: DynamicFunction }} ParsedObjectDynamic
92
109
  */
93
110
 
94
111
  /**
112
+ * @template {object} T
95
113
  * @typedef {object} ParsedObject
96
- * @property {Map<string, ObjectParsedPropertyEntry>} static static properties (key is property name)
97
- * @property {{ byProperty: string, fn: Function } | undefined} dynamic dynamic part
114
+ * @property {ParsedObjectStatic<T>} static static properties (key is property name)
115
+ * @property {ParsedObjectDynamic<T> | undefined} dynamic dynamic part
98
116
  */
99
117
 
100
- /** @type {WeakMap<object, ParsedObject>} */
118
+ /** @type {WeakMap<EXPECTED_OBJECT, ParsedObject<EXPECTED_ANY>>} */
101
119
  const parseCache = new WeakMap();
102
120
 
103
121
  /**
104
- * @param {object} obj the object
105
- * @returns {ParsedObject} parsed object
122
+ * @template {object} T
123
+ * @param {T} obj the object
124
+ * @returns {ParsedObject<T>} parsed object
106
125
  */
107
- const cachedParseObject = obj => {
108
- const entry = parseCache.get(obj);
126
+ const cachedParseObject = (obj) => {
127
+ const entry = parseCache.get(/** @type {EXPECTED_OBJECT} */ (obj));
109
128
  if (entry !== undefined) return entry;
110
129
  const result = parseObject(obj);
111
- parseCache.set(obj, result);
130
+ parseCache.set(/** @type {EXPECTED_OBJECT} */ (obj), result);
112
131
  return result;
113
132
  };
114
133
 
134
+ /** @typedef {{ [p: string]: { [p: string]: EXPECTED_ANY } } | DynamicFunction} ByObject */
135
+
115
136
  /**
116
137
  * @template {object} T
117
138
  * @param {T} obj the object
118
- * @returns {ParsedObject} parsed object
139
+ * @returns {ParsedObject<T>} parsed object
119
140
  */
120
- const parseObject = obj => {
141
+ const parseObject = (obj) => {
142
+ /** @type {ParsedObjectStatic<T>} */
121
143
  const info = new Map();
144
+ /** @type {ParsedObjectDynamic<T> | undefined} */
122
145
  let dynamicInfo;
123
146
  /**
124
- * @param {string} p path
125
- * @returns {Partial<ObjectParsedPropertyEntry>} object parsed property entry
147
+ * @param {keyof T} p path
148
+ * @returns {Partial<ObjectParsedPropertyEntry<T>>} object parsed property entry
126
149
  */
127
- const getInfo = p => {
150
+ const getInfo = (p) => {
128
151
  const entry = info.get(p);
129
152
  if (entry !== undefined) return entry;
130
153
  const newEntry = {
@@ -135,17 +158,18 @@ const parseObject = obj => {
135
158
  info.set(p, newEntry);
136
159
  return newEntry;
137
160
  };
138
- for (const key of Object.keys(obj)) {
139
- if (key.startsWith("by")) {
140
- const byProperty = /** @type {keyof T} */ (key);
141
- const byObj = /** @type {object} */ (obj[byProperty]);
161
+ for (const key_ of Object.keys(obj)) {
162
+ const key = /** @type {keyof T} */ (key_);
163
+ if (typeof key === "string" && key.startsWith("by")) {
164
+ const byProperty = key;
165
+ const byObj = /** @type {ByObject} */ (obj[byProperty]);
142
166
  if (typeof byObj === "object") {
143
167
  for (const byValue of Object.keys(byObj)) {
144
168
  const obj = byObj[/** @type {keyof (keyof T)} */ (byValue)];
145
169
  for (const key of Object.keys(obj)) {
146
- const entry = getInfo(key);
170
+ const entry = getInfo(/** @type {keyof T} */ (key));
147
171
  if (entry.byProperty === undefined) {
148
- entry.byProperty = /** @type {string} */ (byProperty);
172
+ entry.byProperty = /** @type {`by${string}`} */ (byProperty);
149
173
  entry.byValues = new Map();
150
174
  } else if (entry.byProperty !== byProperty) {
151
175
  throw new Error(
@@ -153,17 +177,18 @@ const parseObject = obj => {
153
177
  );
154
178
  }
155
179
  /** @type {ByValues} */
156
- (entry.byValues).set(
157
- byValue,
158
- obj[/** @type {keyof (keyof T)} */ (key)]
159
- );
180
+ (entry.byValues).set(byValue, obj[key]);
160
181
  if (byValue === "default") {
161
182
  for (const otherByValue of Object.keys(byObj)) {
162
183
  if (
163
- !(/** @type {ByValues} */ (entry.byValues).has(otherByValue))
164
- )
184
+ !(
185
+ /** @type {ByValues} */
186
+ (entry.byValues).has(otherByValue)
187
+ )
188
+ ) {
165
189
  /** @type {ByValues} */
166
190
  (entry.byValues).set(otherByValue, undefined);
191
+ }
167
192
  }
168
193
  }
169
194
  }
@@ -171,7 +196,7 @@ const parseObject = obj => {
171
196
  } else if (typeof byObj === "function") {
172
197
  if (dynamicInfo === undefined) {
173
198
  dynamicInfo = {
174
- byProperty: key,
199
+ byProperty: /** @type {`by${string}`} */ (key),
175
200
  fn: byObj
176
201
  };
177
202
  } else {
@@ -181,11 +206,11 @@ const parseObject = obj => {
181
206
  }
182
207
  } else {
183
208
  const entry = getInfo(key);
184
- entry.base = obj[/** @type {keyof T} */ (key)];
209
+ entry.base = obj[key];
185
210
  }
186
211
  } else {
187
212
  const entry = getInfo(key);
188
- entry.base = obj[/** @type {keyof T} */ (key)];
213
+ entry.base = obj[key];
189
214
  }
190
215
  }
191
216
  return {
@@ -196,30 +221,36 @@ const parseObject = obj => {
196
221
 
197
222
  /**
198
223
  * @template {object} T
199
- * @param {Map<string, ObjectParsedPropertyEntry>} info static properties (key is property name)
200
- * @param {{ byProperty: string, fn: Function } | undefined} dynamicInfo dynamic part
224
+ * @param {ParsedObjectStatic<T>} info static properties (key is property name)
225
+ * @param {{ byProperty: `by${string}`, fn: DynamicFunction } | undefined} dynamicInfo dynamic part
201
226
  * @returns {T} the object
202
227
  */
203
228
  const serializeObject = (info, dynamicInfo) => {
204
- const obj = /** @type {T} */ ({});
229
+ const obj = /** @type {EXPECTED_ANY} */ ({});
205
230
  // Setup byProperty structure
206
231
  for (const entry of info.values()) {
207
232
  if (entry.byProperty !== undefined) {
208
- const byObj = (obj[entry.byProperty] = obj[entry.byProperty] || {});
209
- for (const byValue of entry.byValues.keys()) {
233
+ const byProperty = entry.byProperty;
234
+ const byObj = (obj[byProperty] = obj[byProperty] || {});
235
+ for (const byValue of /** @type {ByValues} */ (entry.byValues).keys()) {
210
236
  byObj[byValue] = byObj[byValue] || {};
211
237
  }
212
238
  }
213
239
  }
214
240
  for (const [key, entry] of info) {
215
241
  if (entry.base !== undefined) {
216
- obj[/** @type {keyof T} */ (key)] = entry.base;
242
+ obj[key] = entry.base;
217
243
  }
218
244
  // Fill byProperty structure
219
245
  if (entry.byProperty !== undefined) {
220
- const byObj = (obj[entry.byProperty] = obj[entry.byProperty] || {});
246
+ const byProperty = entry.byProperty;
247
+ const byObj = (obj[byProperty] = obj[byProperty] || {});
221
248
  for (const byValue of Object.keys(byObj)) {
222
- const value = getFromByValues(entry.byValues, byValue);
249
+ const value = getFromByValues(
250
+ /** @type {ByValues} */
251
+ (entry.byValues),
252
+ byValue
253
+ );
223
254
  if (value !== undefined) byObj[byValue][key] = value;
224
255
  }
225
256
  }
@@ -237,10 +268,11 @@ const VALUE_TYPE_OBJECT = 3;
237
268
  const VALUE_TYPE_DELETE = 4;
238
269
 
239
270
  /**
240
- * @param {any} value a single value
271
+ * @template T
272
+ * @param {T} value a single value
241
273
  * @returns {VALUE_TYPE_UNDEFINED | VALUE_TYPE_ATOM | VALUE_TYPE_ARRAY_EXTEND | VALUE_TYPE_OBJECT | VALUE_TYPE_DELETE} value type
242
274
  */
243
- const getValueType = value => {
275
+ const getValueType = (value) => {
244
276
  if (value === undefined) {
245
277
  return VALUE_TYPE_UNDEFINED;
246
278
  } else if (value === DELETE) {
@@ -278,11 +310,13 @@ const cleverMerge = (first, second) => {
278
310
  };
279
311
 
280
312
  /**
313
+ * @template {object} T
314
+ * @template {object} O
281
315
  * Merges two objects. Objects are deeply clever merged.
282
- * @param {object} first first object
283
- * @param {object} second second object
316
+ * @param {T} first first
317
+ * @param {O} second second
284
318
  * @param {boolean} internalCaching should parsing of objects and nested merges be cached
285
- * @returns {object} merged object of first and second object
319
+ * @returns {T & O} merged object of first and second object
286
320
  */
287
321
  const _cleverMerge = (first, second, internalCaching = false) => {
288
322
  const firstObject = internalCaching
@@ -295,11 +329,16 @@ const _cleverMerge = (first, second, internalCaching = false) => {
295
329
  let { byProperty, fn } = firstDynamicInfo;
296
330
  const fnInfo = fn[DYNAMIC_INFO];
297
331
  if (fnInfo) {
298
- second = internalCaching
299
- ? cachedCleverMerge(fnInfo[1], second)
300
- : cleverMerge(fnInfo[1], second);
332
+ second =
333
+ /** @type {O} */
334
+ (
335
+ internalCaching
336
+ ? cachedCleverMerge(fnInfo[1], second)
337
+ : cleverMerge(fnInfo[1], second)
338
+ );
301
339
  fn = fnInfo[0];
302
340
  }
341
+ /** @type {DynamicFunction} */
303
342
  const newFn = (...args) => {
304
343
  const fnResult = fn(...args);
305
344
  return internalCaching
@@ -307,7 +346,9 @@ const _cleverMerge = (first, second, internalCaching = false) => {
307
346
  : cleverMerge(fnResult, second);
308
347
  };
309
348
  newFn[DYNAMIC_INFO] = [fn, second];
310
- return serializeObject(firstObject.static, { byProperty, fn: newFn });
349
+ return /** @type {T & O} */ (
350
+ serializeObject(firstObject.static, { byProperty, fn: newFn })
351
+ );
311
352
  }
312
353
 
313
354
  // If the first part is static only, we merge the static parts and keep the dynamic part of the second argument
@@ -315,10 +356,12 @@ const _cleverMerge = (first, second, internalCaching = false) => {
315
356
  ? cachedParseObject(second)
316
357
  : parseObject(second);
317
358
  const { static: secondInfo, dynamic: secondDynamicInfo } = secondObject;
318
- /** @type {Map<string, ObjectParsedPropertyEntry>} */
319
359
  const resultInfo = new Map();
320
360
  for (const [key, firstEntry] of firstInfo) {
321
- const secondEntry = secondInfo.get(key);
361
+ const secondEntry = secondInfo.get(
362
+ /** @type {keyof (T | O)} */
363
+ (key)
364
+ );
322
365
  const entry =
323
366
  secondEntry !== undefined
324
367
  ? mergeEntries(firstEntry, secondEntry, internalCaching)
@@ -326,18 +369,19 @@ const _cleverMerge = (first, second, internalCaching = false) => {
326
369
  resultInfo.set(key, entry);
327
370
  }
328
371
  for (const [key, secondEntry] of secondInfo) {
329
- if (!firstInfo.has(key)) {
372
+ if (!firstInfo.has(/** @type {keyof (T | O)} */ (key))) {
330
373
  resultInfo.set(key, secondEntry);
331
374
  }
332
375
  }
333
- return serializeObject(resultInfo, secondDynamicInfo);
376
+ return /** @type {T & O} */ (serializeObject(resultInfo, secondDynamicInfo));
334
377
  };
335
378
 
336
379
  /**
337
- * @param {ObjectParsedPropertyEntry} firstEntry a
338
- * @param {ObjectParsedPropertyEntry} secondEntry b
380
+ * @template T, O
381
+ * @param {ObjectParsedPropertyEntry<T>} firstEntry a
382
+ * @param {ObjectParsedPropertyEntry<O>} secondEntry b
339
383
  * @param {boolean} internalCaching should parsing of objects and nested merges be cached
340
- * @returns {ObjectParsedPropertyEntry} new entry
384
+ * @returns {ObjectParsedPropertyEntry<T> | ObjectParsedPropertyEntry<O> | ObjectParsedPropertyEntry<T & O>} new entry
341
385
  */
342
386
  const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
343
387
  switch (getValueType(secondEntry.base)) {
@@ -363,8 +407,14 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
363
407
  // = first.base + (first.byProperty + second.byProperty)
364
408
  // need to merge first and second byValues
365
409
  const newByValues = new Map(firstEntry.byValues);
366
- for (const [key, value] of secondEntry.byValues) {
367
- const firstValue = getFromByValues(firstEntry.byValues, key);
410
+ for (const [key, value] of /** @type {ByValues} */ (
411
+ secondEntry.byValues
412
+ )) {
413
+ const firstValue = getFromByValues(
414
+ /** @type {ByValues} */
415
+ (firstEntry.byValues),
416
+ key
417
+ );
368
418
  newByValues.set(
369
419
  key,
370
420
  mergeSingleValue(firstValue, value, internalCaching)
@@ -381,11 +431,15 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
381
431
  // The simple case
382
432
  // = (first.base + second.base) + second.byProperty
383
433
  return {
384
- base: mergeSingleValue(
385
- firstEntry.base,
386
- secondEntry.base,
387
- internalCaching
388
- ),
434
+ base:
435
+ /** @type {T[keyof T] & O[keyof O]} */
436
+ (
437
+ mergeSingleValue(
438
+ firstEntry.base,
439
+ secondEntry.base,
440
+ internalCaching
441
+ )
442
+ ),
389
443
  byProperty: secondEntry.byProperty,
390
444
  byValues: secondEntry.byValues
391
445
  };
@@ -399,10 +453,12 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
399
453
  );
400
454
  }
401
455
  if (
402
- Array.from(firstEntry.byValues.values()).every(value => {
403
- const type = getValueType(value);
404
- return type === VALUE_TYPE_ATOM || type === VALUE_TYPE_DELETE;
405
- })
456
+ [.../** @type {ByValues} */ (firstEntry.byValues).values()].every(
457
+ (value) => {
458
+ const type = getValueType(value);
459
+ return type === VALUE_TYPE_ATOM || type === VALUE_TYPE_DELETE;
460
+ }
461
+ )
406
462
  ) {
407
463
  // = (first.base + second.base) + ((first.byProperty + second.base) + second.byProperty)
408
464
  newBase = mergeSingleValue(
@@ -413,13 +469,14 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
413
469
  } else {
414
470
  // = first.base + ((first.byProperty (+default) + second.base) + second.byProperty)
415
471
  newBase = firstEntry.base;
416
- if (!intermediateByValues.has("default"))
472
+ if (!intermediateByValues.has("default")) {
417
473
  intermediateByValues.set("default", secondEntry.base);
474
+ }
418
475
  }
419
476
  if (!secondEntry.byProperty) {
420
477
  // = first.base + (first.byProperty + second.base)
421
478
  return {
422
- base: newBase,
479
+ base: /** @type {T[keyof T] & O[keyof O]} */ (newBase),
423
480
  byProperty: firstEntry.byProperty,
424
481
  byValues: intermediateByValues
425
482
  };
@@ -429,7 +486,9 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
429
486
  );
430
487
  }
431
488
  const newByValues = new Map(intermediateByValues);
432
- for (const [key, value] of secondEntry.byValues) {
489
+ for (const [key, value] of /** @type {ByValues} */ (
490
+ secondEntry.byValues
491
+ )) {
433
492
  const firstValue = getFromByValues(intermediateByValues, key);
434
493
  newByValues.set(
435
494
  key,
@@ -437,7 +496,7 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
437
496
  );
438
497
  }
439
498
  return {
440
- base: newBase,
499
+ base: /** @type {T[keyof T] & O[keyof O]} */ (newBase),
441
500
  byProperty: firstEntry.byProperty,
442
501
  byValues: newByValues
443
502
  };
@@ -446,9 +505,10 @@ const mergeEntries = (firstEntry, secondEntry, internalCaching) => {
446
505
  };
447
506
 
448
507
  /**
449
- * @param {Map<string, any>} byValues all values
508
+ * @template V
509
+ * @param {ByValues} byValues all values
450
510
  * @param {string} key value of the selector
451
- * @returns {any | undefined} value
511
+ * @returns {V | undefined} value
452
512
  */
453
513
  const getFromByValues = (byValues, key) => {
454
514
  if (key !== "default" && byValues.has(key)) {
@@ -458,10 +518,12 @@ const getFromByValues = (byValues, key) => {
458
518
  };
459
519
 
460
520
  /**
461
- * @param {any} a value
462
- * @param {any} b value
521
+ * @template A
522
+ * @template B
523
+ * @param {A | A[]} a value
524
+ * @param {B | B[]} b value
463
525
  * @param {boolean} internalCaching should parsing of objects and nested merges be cached
464
- * @returns {any} value
526
+ * @returns {A & B | (A | B)[] | A | A[] | B | B[]} value
465
527
  */
466
528
  const mergeSingleValue = (a, b, internalCaching) => {
467
529
  const bType = getValueType(b);
@@ -490,12 +552,13 @@ const mergeSingleValue = (a, b, internalCaching) => {
490
552
  case VALUE_TYPE_UNDEFINED:
491
553
  return b;
492
554
  case VALUE_TYPE_DELETE:
493
- return /** @type {any[]} */ (b).filter(item => item !== "...");
555
+ return /** @type {B[]} */ (b).filter((item) => item !== "...");
494
556
  case VALUE_TYPE_ARRAY_EXTEND: {
557
+ /** @type {(A | B)[]} */
495
558
  const newArray = [];
496
- for (const item of b) {
559
+ for (const item of /** @type {B[]} */ (b)) {
497
560
  if (item === "...") {
498
- for (const item of a) {
561
+ for (const item of /** @type {A[]} */ (a)) {
499
562
  newArray.push(item);
500
563
  }
501
564
  } else {
@@ -505,8 +568,8 @@ const mergeSingleValue = (a, b, internalCaching) => {
505
568
  return newArray;
506
569
  }
507
570
  case VALUE_TYPE_OBJECT:
508
- return /** @type {any[]} */ (b).map(item =>
509
- item === "..." ? a : item
571
+ return /** @type {(A | B)[]} */ (b).map((item) =>
572
+ item === "..." ? /** @type {A} */ (a) : item
510
573
  );
511
574
  default:
512
575
  throw new Error("Not implemented");
@@ -524,14 +587,12 @@ const mergeSingleValue = (a, b, internalCaching) => {
524
587
  */
525
588
  const removeOperations = (obj, keysToKeepOriginalValue = []) => {
526
589
  const newObj = /** @type {T} */ ({});
527
- for (const key of Object.keys(obj)) {
528
- const value = obj[/** @type {keyof T} */ (key)];
590
+ for (const _key of Object.keys(obj)) {
591
+ const key = /** @type {keyof T} */ (_key);
592
+ const value = obj[key];
529
593
  const type = getValueType(value);
530
- if (
531
- type === VALUE_TYPE_OBJECT &&
532
- keysToKeepOriginalValue.includes(/** @type {keyof T} */ (key))
533
- ) {
534
- newObj[/** @type {keyof T} */ (key)] = value;
594
+ if (type === VALUE_TYPE_OBJECT && keysToKeepOriginalValue.includes(key)) {
595
+ newObj[key] = value;
535
596
  continue;
536
597
  }
537
598
  switch (type) {
@@ -539,25 +600,26 @@ const removeOperations = (obj, keysToKeepOriginalValue = []) => {
539
600
  case VALUE_TYPE_DELETE:
540
601
  break;
541
602
  case VALUE_TYPE_OBJECT:
542
- newObj[/** @type {keyof T} */ (key)] =
603
+ newObj[key] =
543
604
  /** @type {T[keyof T]} */
544
605
  (
545
606
  removeOperations(
546
- /** @type {TODO} */ (value),
607
+ /** @type {T} */
608
+ (value),
547
609
  keysToKeepOriginalValue
548
610
  )
549
611
  );
550
612
  break;
551
613
  case VALUE_TYPE_ARRAY_EXTEND:
552
- newObj[/** @type {keyof T} */ (key)] =
614
+ newObj[key] =
553
615
  /** @type {T[keyof T]} */
554
616
  (
555
- /** @type {any[]} */
556
- (value).filter(i => i !== "...")
617
+ /** @type {EXPECTED_ANY[]} */
618
+ (value).filter((i) => i !== "...")
557
619
  );
558
620
  break;
559
621
  default:
560
- newObj[/** @type {keyof T} */ (key)] = value;
622
+ newObj[key] = value;
561
623
  break;
562
624
  }
563
625
  }
@@ -566,10 +628,11 @@ const removeOperations = (obj, keysToKeepOriginalValue = []) => {
566
628
 
567
629
  /**
568
630
  * @template T
569
- * @template {string} P
631
+ * @template {keyof T} P
632
+ * @template V
570
633
  * @param {T} obj the object
571
634
  * @param {P} byProperty the by description
572
- * @param {...any} values values
635
+ * @param {...V} values values
573
636
  * @returns {Omit<T, P>} object with merged byProperty
574
637
  */
575
638
  const resolveByProperty = (obj, byProperty, ...values) => {
@@ -579,10 +642,10 @@ const resolveByProperty = (obj, byProperty, ...values) => {
579
642
  const { [byProperty]: _byValue, ..._remaining } = obj;
580
643
  const remaining = /** @type {T} */ (_remaining);
581
644
  const byValue =
582
- /** @type {Record<string, T> | function(...any[]): T} */
645
+ /** @type {Record<string, T> | ((...args: V[]) => T)} */
583
646
  (_byValue);
584
647
  if (typeof byValue === "object") {
585
- const key = values[0];
648
+ const key = /** @type {string} */ (values[0]);
586
649
  if (key in byValue) {
587
650
  return cachedCleverMerge(remaining, byValue[key]);
588
651
  } else if ("default" in byValue) {
@@ -597,11 +660,12 @@ const resolveByProperty = (obj, byProperty, ...values) => {
597
660
  resolveByProperty(result, byProperty, ...values)
598
661
  );
599
662
  }
663
+ return obj;
600
664
  };
601
665
 
602
- module.exports.cachedSetProperty = cachedSetProperty;
666
+ module.exports.DELETE = DELETE;
603
667
  module.exports.cachedCleverMerge = cachedCleverMerge;
668
+ module.exports.cachedSetProperty = cachedSetProperty;
604
669
  module.exports.cleverMerge = cleverMerge;
605
- module.exports.resolveByProperty = resolveByProperty;
606
670
  module.exports.removeOperations = removeOperations;
607
- module.exports.DELETE = DELETE;
671
+ module.exports.resolveByProperty = resolveByProperty;