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
@@ -4,7 +4,9 @@
4
4
 
5
5
  "use strict";
6
6
 
7
+ const { DEFAULTS } = require("../config/defaults");
7
8
  const createHash = require("../util/createHash");
9
+ const AggregateErrorSerializer = require("./AggregateErrorSerializer");
8
10
  const ArraySerializer = require("./ArraySerializer");
9
11
  const DateObjectSerializer = require("./DateObjectSerializer");
10
12
  const ErrorObjectSerializer = require("./ErrorObjectSerializer");
@@ -15,11 +17,13 @@ const RegExpObjectSerializer = require("./RegExpObjectSerializer");
15
17
  const SerializerMiddleware = require("./SerializerMiddleware");
16
18
  const SetObjectSerializer = require("./SetObjectSerializer");
17
19
 
20
+ /** @typedef {import("../logging/Logger").Logger} Logger */
18
21
  /** @typedef {typeof import("../util/Hash")} Hash */
22
+ /** @typedef {import("./SerializerMiddleware").LazyOptions} LazyOptions */
19
23
  /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
20
24
  /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
21
25
 
22
- /** @typedef {new (...params: any[]) => any} Constructor */
26
+ /** @typedef {new (...params: EXPECTED_ANY[]) => EXPECTED_ANY} Constructor */
23
27
 
24
28
  /*
25
29
 
@@ -43,24 +47,38 @@ Technically any value can be used.
43
47
 
44
48
  */
45
49
 
50
+ /**
51
+ * @typedef {object} ObjectSerializerSnapshot
52
+ * @property {number} length
53
+ * @property {number} cycleStackSize
54
+ * @property {number} referenceableSize
55
+ * @property {number} currentPos
56
+ * @property {number} objectTypeLookupSize
57
+ * @property {number} currentPosTypeLookup
58
+ */
59
+
60
+ /** @typedef {EXPECTED_OBJECT | string} ReferenceableItem */
61
+
46
62
  /**
47
63
  * @typedef {object} ObjectSerializerContext
48
- * @property {function(any): void} write
49
- * @property {(function(any): void)=} writeLazy
50
- * @property {(function(any, object=): (() => Promise<any> | any))=} writeSeparate
51
- * @property {function(any): void} setCircularReference
64
+ * @property {(value: EXPECTED_ANY) => void} write
65
+ * @property {(value: ReferenceableItem) => void} setCircularReference
66
+ * @property {() => ObjectSerializerSnapshot} snapshot
67
+ * @property {(snapshot: ObjectSerializerSnapshot) => void} rollback
68
+ * @property {((item: EXPECTED_ANY | (() => EXPECTED_ANY)) => void)=} writeLazy
69
+ * @property {((item: (EXPECTED_ANY | (() => EXPECTED_ANY)), obj: LazyOptions | undefined) => import("./SerializerMiddleware").LazyFunction<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY, LazyOptions>)=} writeSeparate
52
70
  */
53
71
 
54
72
  /**
55
73
  * @typedef {object} ObjectDeserializerContext
56
- * @property {function(): any} read
57
- * @property {function(any): void} setCircularReference
74
+ * @property {() => EXPECTED_ANY} read
75
+ * @property {(value: ReferenceableItem) => void} setCircularReference
58
76
  */
59
77
 
60
78
  /**
61
79
  * @typedef {object} ObjectSerializer
62
- * @property {function(any, ObjectSerializerContext): void} serialize
63
- * @property {function(ObjectDeserializerContext): any} deserialize
80
+ * @property {(value: EXPECTED_ANY, context: ObjectSerializerContext) => void} serialize
81
+ * @property {(context: ObjectDeserializerContext) => EXPECTED_ANY} deserialize
64
82
  */
65
83
 
66
84
  /**
@@ -99,7 +117,7 @@ const setMapSize = (map, size) => {
99
117
  const toHash = (buffer, hashFunction) => {
100
118
  const hash = createHash(hashFunction);
101
119
  hash.update(buffer);
102
- return /** @type {string} */ (hash.digest("latin1"));
120
+ return hash.digest("latin1");
103
121
  };
104
122
 
105
123
  const ESCAPE = null;
@@ -109,7 +127,10 @@ const ESCAPE_UNDEFINED = false;
109
127
 
110
128
  const CURRENT_VERSION = 2;
111
129
 
112
- /** @type {Map<Constructor, { request?: string, name?: string | number | null, serializer?: ObjectSerializer }>} */
130
+ /** @typedef {{ request?: string, name?: string | number | null, serializer?: ObjectSerializer }} SerializerConfig */
131
+ /** @typedef {{ request?: string, name?: string | number | null, serializer: ObjectSerializer }} SerializerConfigWithSerializer */
132
+
133
+ /** @type {Map<Constructor | null, SerializerConfig>} */
113
134
  const serializers = new Map();
114
135
  /** @type {Map<string | number, ObjectSerializer>} */
115
136
  const serializerInversed = new Map();
@@ -119,7 +140,9 @@ const loadedRequests = new Set();
119
140
 
120
141
  const NOT_SERIALIZABLE = {};
121
142
 
143
+ /** @type {Map<Constructor | null, ObjectSerializer>} */
122
144
  const jsTypes = new Map();
145
+
123
146
  jsTypes.set(Object, new PlainObjectSerializer());
124
147
  jsTypes.set(Array, new ArraySerializer());
125
148
  jsTypes.set(null, new NullPrototypeObjectSerializer());
@@ -134,15 +157,24 @@ jsTypes.set(ReferenceError, new ErrorObjectSerializer(ReferenceError));
134
157
  jsTypes.set(SyntaxError, new ErrorObjectSerializer(SyntaxError));
135
158
  jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
136
159
 
137
- // If in a sandboxed environment (e. g. jest), this escapes the sandbox and registers
138
- // real Object and Array types to. These types may occur in the wild too, e. g. when
160
+ // eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax
161
+ if (typeof AggregateError !== "undefined") {
162
+ jsTypes.set(
163
+ // eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax
164
+ AggregateError,
165
+ new AggregateErrorSerializer()
166
+ );
167
+ }
168
+
169
+ // If in a sandboxed environment (e.g. jest), this escapes the sandbox and registers
170
+ // real Object and Array types to. These types may occur in the wild too, e.g. when
139
171
  // using Structured Clone in postMessage.
140
172
  // eslint-disable-next-line n/exports-style
141
173
  if (exports.constructor !== Object) {
142
- // eslint-disable-next-line jsdoc/check-types, n/exports-style
143
- const Obj = /** @type {typeof Object} */ (exports.constructor);
144
- const Fn = /** @type {typeof Function} */ (Obj.constructor);
145
- for (const [type, config] of Array.from(jsTypes)) {
174
+ // eslint-disable-next-line n/exports-style
175
+ const Obj = /** @type {ObjectConstructor} */ (exports.constructor);
176
+ const Fn = /** @type {FunctionConstructor} */ (Obj.constructor);
177
+ for (const [type, config] of jsTypes) {
146
178
  if (type) {
147
179
  const Type = new Fn(`return ${type.name};`)();
148
180
  jsTypes.set(Type, config);
@@ -171,17 +203,19 @@ for (const { request, name, serializer } of serializers.values()) {
171
203
  /** @type {Map<RegExp, (request: string) => boolean>} */
172
204
  const loaders = new Map();
173
205
 
206
+ /** @typedef {ComplexSerializableType[]} DeserializedType */
207
+ /** @typedef {PrimitiveSerializableType[]} SerializedType */
208
+ /** @typedef {{ logger: Logger }} Context */
209
+
174
210
  /**
175
- * @typedef {ComplexSerializableType[]} DeserializedType
176
- * @typedef {PrimitiveSerializableType[]} SerializedType
177
- * @extends {SerializerMiddleware<DeserializedType, SerializedType>}
211
+ * @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
178
212
  */
179
213
  class ObjectMiddleware extends SerializerMiddleware {
180
214
  /**
181
- * @param {function(any): void} extendContext context extensions
215
+ * @param {(context: ObjectSerializerContext | ObjectDeserializerContext) => void} extendContext context extensions
182
216
  * @param {string | Hash} hashFunction hash function to use
183
217
  */
184
- constructor(extendContext, hashFunction = "md4") {
218
+ constructor(extendContext, hashFunction = DEFAULTS.HASH_FUNCTION) {
185
219
  super();
186
220
  this.extendContext = extendContext;
187
221
  this._hashFunction = hashFunction;
@@ -189,7 +223,7 @@ class ObjectMiddleware extends SerializerMiddleware {
189
223
 
190
224
  /**
191
225
  * @param {RegExp} regExp RegExp for which the request is tested
192
- * @param {function(string): boolean} loader loader to load the request, returns true when successful
226
+ * @param {(request: string) => boolean} loader loader to load the request, returns true when successful
193
227
  * @returns {void}
194
228
  */
195
229
  static registerLoader(regExp, loader) {
@@ -241,6 +275,10 @@ class ObjectMiddleware extends SerializerMiddleware {
241
275
  serializers.set(Constructor, NOT_SERIALIZABLE);
242
276
  }
243
277
 
278
+ /**
279
+ * @param {Constructor} object for serialization
280
+ * @returns {SerializerConfigWithSerializer} Serializer config
281
+ */
244
282
  static getSerializerFor(object) {
245
283
  const proto = Object.getPrototypeOf(object);
246
284
  let c;
@@ -260,12 +298,12 @@ class ObjectMiddleware extends SerializerMiddleware {
260
298
  if (!config) throw new Error(`No serializer registered for ${c.name}`);
261
299
  if (config === NOT_SERIALIZABLE) throw NOT_SERIALIZABLE;
262
300
 
263
- return config;
301
+ return /** @type {SerializerConfigWithSerializer} */ (config);
264
302
  }
265
303
 
266
304
  /**
267
305
  * @param {string} request request
268
- * @param {TODO} name name
306
+ * @param {string} name name
269
307
  * @returns {ObjectSerializer} serializer
270
308
  */
271
309
  static getDeserializerFor(request, name) {
@@ -292,15 +330,19 @@ class ObjectMiddleware extends SerializerMiddleware {
292
330
 
293
331
  /**
294
332
  * @param {DeserializedType} data data
295
- * @param {object} context context object
296
- * @returns {SerializedType|Promise<SerializedType>} serialized data
333
+ * @param {Context} context context object
334
+ * @returns {SerializedType | Promise<SerializedType> | null} serialized data
297
335
  */
298
336
  serialize(data, context) {
299
- /** @type {any[]} */
337
+ /** @type {PrimitiveSerializableType[]} */
300
338
  let result = [CURRENT_VERSION];
301
339
  let currentPos = 0;
340
+ /** @type {Map<ReferenceableItem, number>} */
302
341
  let referenceable = new Map();
303
- const addReferenceable = item => {
342
+ /**
343
+ * @param {ReferenceableItem} item referenceable item
344
+ */
345
+ const addReferenceable = (item) => {
304
346
  referenceable.set(item, currentPos++);
305
347
  };
306
348
  let bufferDedupeMap = new Map();
@@ -308,7 +350,7 @@ class ObjectMiddleware extends SerializerMiddleware {
308
350
  * @param {Buffer} buf buffer
309
351
  * @returns {Buffer} deduped buffer
310
352
  */
311
- const dedupeBuffer = buf => {
353
+ const dedupeBuffer = (buf) => {
312
354
  const len = buf.length;
313
355
  const entry = bufferDedupeMap.get(len);
314
356
  if (entry === undefined) {
@@ -368,11 +410,15 @@ class ObjectMiddleware extends SerializerMiddleware {
368
410
  let currentPosTypeLookup = 0;
369
411
  let objectTypeLookup = new Map();
370
412
  const cycleStack = new Set();
371
- const stackToString = item => {
372
- const arr = Array.from(cycleStack);
413
+ /**
414
+ * @param {ComplexSerializableType} item item to stack
415
+ * @returns {string} stack
416
+ */
417
+ const stackToString = (item) => {
418
+ const arr = [...cycleStack];
373
419
  arr.push(item);
374
420
  return arr
375
- .map(item => {
421
+ .map((item) => {
376
422
  if (typeof item === "string") {
377
423
  if (item.length > 100) {
378
424
  return `String ${JSON.stringify(item.slice(0, 100)).slice(
@@ -392,11 +438,13 @@ class ObjectMiddleware extends SerializerMiddleware {
392
438
  }
393
439
  if (typeof item === "object" && item !== null) {
394
440
  if (item.constructor) {
395
- if (item.constructor === Object)
441
+ if (item.constructor === Object) {
396
442
  return `Object { ${Object.keys(item).join(", ")} }`;
443
+ }
397
444
  if (item.constructor === Map) return `Map { ${item.size} items }`;
398
- if (item.constructor === Array)
445
+ if (item.constructor === Array) {
399
446
  return `Array { ${item.length} items }`;
447
+ }
400
448
  if (item.constructor === Set) return `Set { ${item.size} items }`;
401
449
  if (item.constructor === RegExp) return item.toString();
402
450
  return `${item.constructor.name}`;
@@ -411,21 +459,23 @@ class ObjectMiddleware extends SerializerMiddleware {
411
459
  try {
412
460
  return `${item}`;
413
461
  } catch (err) {
414
- return `(${err.message})`;
462
+ return `(${/** @type {Error} */ (err).message})`;
415
463
  }
416
464
  })
417
465
  .join(" -> ");
418
466
  };
419
467
  /** @type {WeakSet<Error>} */
420
468
  let hasDebugInfoAttached;
469
+ /** @type {ObjectSerializerContext} */
421
470
  let ctx = {
422
- write(value, key) {
471
+ write(value) {
423
472
  try {
424
473
  process(value);
425
474
  } catch (err) {
426
475
  if (err !== NOT_SERIALIZABLE) {
427
- if (hasDebugInfoAttached === undefined)
476
+ if (hasDebugInfoAttached === undefined) {
428
477
  hasDebugInfoAttached = new WeakSet();
478
+ }
429
479
  if (!hasDebugInfoAttached.has(/** @type {Error} */ (err))) {
430
480
  /** @type {Error} */
431
481
  (err).message += `\nwhile serializing ${stackToString(value)}`;
@@ -459,7 +509,10 @@ class ObjectMiddleware extends SerializerMiddleware {
459
509
  ...context
460
510
  };
461
511
  this.extendContext(ctx);
462
- const process = item => {
512
+ /**
513
+ * @param {ComplexSerializableType} item item to serialize
514
+ */
515
+ const process = (item) => {
463
516
  if (Buffer.isBuffer(item)) {
464
517
  // check if we can emit a reference
465
518
  const ref = referenceable.get(item);
@@ -479,7 +532,7 @@ class ObjectMiddleware extends SerializerMiddleware {
479
532
  }
480
533
  addReferenceable(item);
481
534
 
482
- result.push(item);
535
+ result.push(/** @type {Buffer} */ (item));
483
536
  } else if (item === ESCAPE) {
484
537
  result.push(ESCAPE, ESCAPE_ESCAPE_VALUE);
485
538
  } else if (
@@ -499,8 +552,10 @@ class ObjectMiddleware extends SerializerMiddleware {
499
552
  );
500
553
  }
501
554
 
502
- const { request, name, serializer } =
503
- ObjectMiddleware.getSerializerFor(item);
555
+ const { request, name, serializer } = ObjectMiddleware.getSerializerFor(
556
+ /** @type {Constructor} */
557
+ (item)
558
+ );
504
559
  const key = `${request}/${name}`;
505
560
  const lastIndex = objectTypeLookup.get(key);
506
561
 
@@ -545,11 +600,14 @@ class ObjectMiddleware extends SerializerMiddleware {
545
600
 
546
601
  result.push(item);
547
602
  } else if (typeof item === "function") {
548
- if (!SerializerMiddleware.isLazy(item))
603
+ if (!SerializerMiddleware.isLazy(item)) {
549
604
  throw new Error(`Unexpected function ${item}`);
550
- /** @type {SerializedType} */
605
+ }
606
+
607
+ /** @type {SerializedType | undefined} */
551
608
  const serializedData =
552
609
  SerializerMiddleware.getLazySerializedValue(item);
610
+
553
611
  if (serializedData !== undefined) {
554
612
  if (typeof serializedData === "function") {
555
613
  result.push(serializedData);
@@ -559,9 +617,13 @@ class ObjectMiddleware extends SerializerMiddleware {
559
617
  } else if (SerializerMiddleware.isLazy(item, this)) {
560
618
  throw new Error("Not implemented");
561
619
  } else {
562
- const data = SerializerMiddleware.serializeLazy(item, data =>
563
- this.serialize([data], context)
564
- );
620
+ const data =
621
+ /** @type {() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>} */
622
+ (
623
+ SerializerMiddleware.serializeLazy(item, (data) =>
624
+ this.serialize([data], context)
625
+ )
626
+ );
565
627
  SerializerMiddleware.setLazySerializedValue(item, data);
566
628
  result.push(data);
567
629
  }
@@ -599,30 +661,39 @@ class ObjectMiddleware extends SerializerMiddleware {
599
661
 
600
662
  /**
601
663
  * @param {SerializedType} data data
602
- * @param {object} context context object
603
- * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
664
+ * @param {Context} context context object
665
+ * @returns {DeserializedType | Promise<DeserializedType>} deserialized data
604
666
  */
605
667
  deserialize(data, context) {
606
668
  let currentDataPos = 0;
607
669
  const read = () => {
608
- if (currentDataPos >= data.length)
670
+ if (currentDataPos >= data.length) {
609
671
  throw new Error("Unexpected end of stream");
672
+ }
610
673
 
611
674
  return data[currentDataPos++];
612
675
  };
613
676
 
614
- if (read() !== CURRENT_VERSION)
677
+ if (read() !== CURRENT_VERSION) {
615
678
  throw new Error("Version mismatch, serializer changed");
679
+ }
616
680
 
617
681
  let currentPos = 0;
682
+ /** @type {ReferenceableItem[]} */
618
683
  let referenceable = [];
619
- const addReferenceable = item => {
684
+ /**
685
+ * @param {ReferenceableItem} item referenceable item
686
+ */
687
+ const addReferenceable = (item) => {
620
688
  referenceable.push(item);
621
689
  currentPos++;
622
690
  };
623
691
  let currentPosTypeLookup = 0;
692
+ /** @type {ObjectSerializer[]} */
624
693
  let objectTypeLookup = [];
694
+ /** @type {ComplexSerializableType[]} */
625
695
  let result = [];
696
+ /** @type {ObjectDeserializerContext} */
626
697
  let ctx = {
627
698
  read() {
628
699
  return decodeValue();
@@ -633,6 +704,9 @@ class ObjectMiddleware extends SerializerMiddleware {
633
704
  ...context
634
705
  };
635
706
  this.extendContext(ctx);
707
+ /**
708
+ * @returns {ComplexSerializableType} deserialize value
709
+ */
636
710
  const decodeValue = () => {
637
711
  const item = read();
638
712
 
@@ -724,7 +798,7 @@ class ObjectMiddleware extends SerializerMiddleware {
724
798
  const name = !serializerEntry
725
799
  ? "unknown"
726
800
  : !serializerEntry[1].request
727
- ? serializerEntry[0].name
801
+ ? /** @type {Constructor[]} */ (serializerEntry)[0].name
728
802
  : serializerEntry[1].name
729
803
  ? `${serializerEntry[1].request} ${serializerEntry[1].name}`
730
804
  : serializerEntry[1].request;
@@ -746,7 +820,9 @@ class ObjectMiddleware extends SerializerMiddleware {
746
820
  } else if (typeof item === "function") {
747
821
  return SerializerMiddleware.deserializeLazy(
748
822
  item,
749
- data => this.deserialize(data, context)[0]
823
+ (data) =>
824
+ /** @type {[DeserializedType]} */
825
+ (this.deserialize(data, context))[0]
750
826
  );
751
827
  } else {
752
828
  return item;
@@ -7,7 +7,7 @@
7
7
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
9
 
10
- /** @typedef {(arg0?: any) => void} CacheAssoc */
10
+ /** @typedef {EXPECTED_FUNCTION} CacheAssoc */
11
11
 
12
12
  /**
13
13
  * @template T
@@ -5,59 +5,77 @@
5
5
  "use strict";
6
6
 
7
7
  /**
8
- * @template T, K
9
- * @typedef {import("./SerializerMiddleware")<T, K>} SerializerMiddleware
8
+ * @template T, K, C
9
+ * @typedef {import("./SerializerMiddleware")<T, K, C>} SerializerMiddleware
10
10
  */
11
11
 
12
+ /**
13
+ * @template DeserializedValue
14
+ * @template SerializedValue
15
+ * @template Context
16
+ */
12
17
  class Serializer {
13
18
  /**
14
- * @param {SerializerMiddleware<any, any>[]} middlewares serializer middlewares
15
- * @param {TODO=} context context
19
+ * @param {SerializerMiddleware<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>[]} middlewares serializer middlewares
20
+ * @param {Context=} context context
16
21
  */
17
22
  constructor(middlewares, context) {
18
- this.serializeMiddlewares = middlewares.slice();
19
- this.deserializeMiddlewares = middlewares.slice().reverse();
23
+ this.serializeMiddlewares = [...middlewares];
24
+ this.deserializeMiddlewares = [...middlewares].reverse();
20
25
  this.context = context;
21
26
  }
22
27
 
23
28
  /**
24
- * @param {any} obj object
25
- * @param {TODO} context content
26
- * @returns {Promise<any>} result
29
+ * @template ExtendedContext
30
+ * @param {DeserializedValue | Promise<DeserializedValue>} obj object
31
+ * @param {Context & ExtendedContext} context context object
32
+ * @returns {Promise<SerializedValue>} result
27
33
  */
28
34
  serialize(obj, context) {
29
35
  const ctx = { ...context, ...this.context };
30
36
  let current = obj;
31
37
  for (const middleware of this.serializeMiddlewares) {
32
- if (current && typeof current.then === "function") {
33
- current = current.then(data => data && middleware.serialize(data, ctx));
38
+ if (
39
+ current &&
40
+ typeof (/** @type {Promise<DeserializedValue>} */ (current).then) ===
41
+ "function"
42
+ ) {
43
+ current =
44
+ /** @type {Promise<DeserializedValue>} */
45
+ (current).then((data) => data && middleware.serialize(data, ctx));
34
46
  } else if (current) {
35
47
  try {
36
48
  current = middleware.serialize(current, ctx);
37
49
  } catch (err) {
38
50
  current = Promise.reject(err);
39
51
  }
40
- } else break;
52
+ } else {
53
+ break;
54
+ }
41
55
  }
42
- return current;
56
+ return /** @type {Promise<SerializedValue>} */ (current);
43
57
  }
44
58
 
45
59
  /**
46
- * @param {any} value value
47
- * @param {TODO} context context
48
- * @returns {Promise<any>} result
60
+ * @template ExtendedContext
61
+ * @param {SerializedValue | Promise<SerializedValue>} value value
62
+ * @param {Context & ExtendedContext} context object
63
+ * @returns {Promise<DeserializedValue>} result
49
64
  */
50
65
  deserialize(value, context) {
51
66
  const ctx = { ...context, ...this.context };
52
- /** @type {any} */
53
67
  let current = value;
54
68
  for (const middleware of this.deserializeMiddlewares) {
55
69
  current =
56
- current && typeof current.then === "function"
57
- ? current.then(data => middleware.deserialize(data, ctx))
70
+ current &&
71
+ typeof (/** @type {Promise<SerializedValue>} */ (current).then) ===
72
+ "function"
73
+ ? /** @type {Promise<SerializedValue>} */ (current).then((data) =>
74
+ middleware.deserialize(data, ctx)
75
+ )
58
76
  : middleware.deserialize(current, ctx);
59
77
  }
60
- return current;
78
+ return /** @type {Promise<DeserializedValue>} */ (current);
61
79
  }
62
80
  }
63
81