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
@@ -7,12 +7,15 @@
7
7
  const { constants } = require("buffer");
8
8
  const { pipeline } = require("stream");
9
9
  const {
10
+ constants: zConstants,
11
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
10
12
  createBrotliCompress,
13
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
11
14
  createBrotliDecompress,
12
- createGzip,
13
15
  createGunzip,
14
- constants: zConstants
16
+ createGzip
15
17
  } = require("zlib");
18
+ const { DEFAULTS } = require("../config/defaults");
16
19
  const createHash = require("../util/createHash");
17
20
  const { dirname, join, mkdirp } = require("../util/fs");
18
21
  const memoize = require("../util/memoize");
@@ -52,13 +55,13 @@ const WRITE_LIMIT_CHUNK = 511 * 1024 * 1024;
52
55
  const hashForName = (buffers, hashFunction) => {
53
56
  const hash = createHash(hashFunction);
54
57
  for (const buf of buffers) hash.update(buf);
55
- return /** @type {string} */ (hash.digest("hex"));
58
+ return hash.digest("hex");
56
59
  };
57
60
 
58
61
  const COMPRESSION_CHUNK_SIZE = 100 * 1024 * 1024;
59
62
  const DECOMPRESSION_CHUNK_SIZE = 100 * 1024 * 1024;
60
63
 
61
- /** @type {function(Buffer, number, number): void} */
64
+ /** @type {(buffer: Buffer, value: number, offset: number) => void} */
62
65
  const writeUInt64LE = Buffer.prototype.writeBigUInt64LE
63
66
  ? (buf, value, offset) => {
64
67
  buf.writeBigUInt64LE(BigInt(value), offset);
@@ -70,7 +73,7 @@ const writeUInt64LE = Buffer.prototype.writeBigUInt64LE
70
73
  buf.writeUInt32LE(high, offset + 4);
71
74
  };
72
75
 
73
- /** @type {function(Buffer, number): void} */
76
+ /** @type {(buffer: Buffer, offset: number) => void} */
74
77
  const readUInt64LE = Buffer.prototype.readBigUInt64LE
75
78
  ? (buf, offset) => Number(buf.readBigUInt64LE(offset))
76
79
  : (buf, offset) => {
@@ -79,18 +82,25 @@ const readUInt64LE = Buffer.prototype.readBigUInt64LE
79
82
  return high * 0x100000000 + low;
80
83
  };
81
84
 
85
+ /** @typedef {Promise<void | void[]>} BackgroundJob */
86
+
82
87
  /**
83
88
  * @typedef {object} SerializeResult
84
89
  * @property {string | false} name
85
90
  * @property {number} size
86
- * @property {Promise<any>=} backgroundJob
91
+ * @property {BackgroundJob=} backgroundJob
92
+ */
93
+
94
+ /** @typedef {{ name: string, size: number }} LazyOptions */
95
+ /**
96
+ * @typedef {import("./SerializerMiddleware").LazyFunction<BufferSerializableType[], Buffer, FileMiddleware, LazyOptions>} LazyFunction
87
97
  */
88
98
 
89
99
  /**
90
100
  * @param {FileMiddleware} middleware this
91
- * @param {BufferSerializableType[] | Promise<BufferSerializableType[]>} data data to be serialized
101
+ * @param {(BufferSerializableType | LazyFunction)[]} data data to be serialized
92
102
  * @param {string | boolean} name file base name
93
- * @param {function(string | false, Buffer[], number): Promise<void>} writeFile writes a file
103
+ * @param {(name: string | false, buffers: Buffer[], size: number) => Promise<void>} writeFile writes a file
94
104
  * @param {string | Hash} hashFunction hash function to use
95
105
  * @returns {Promise<SerializeResult>} resulting file pointer and promise
96
106
  */
@@ -99,18 +109,19 @@ const serialize = async (
99
109
  data,
100
110
  name,
101
111
  writeFile,
102
- hashFunction = "md4"
112
+ hashFunction = DEFAULTS.HASH_FUNCTION
103
113
  ) => {
104
- /** @type {(Buffer[] | Buffer | SerializeResult | Promise<SerializeResult>)[]} */
114
+ /** @type {(Buffer[] | Buffer | Promise<SerializeResult>)[]} */
105
115
  const processedData = [];
106
- /** @type {WeakMap<SerializeResult, function(): any | Promise<any>>} */
116
+ /** @type {WeakMap<SerializeResult, LazyFunction>} */
107
117
  const resultToLazy = new WeakMap();
108
118
  /** @type {Buffer[] | undefined} */
109
119
  let lastBuffers;
110
120
  for (const item of await data) {
111
121
  if (typeof item === "function") {
112
- if (!SerializerMiddleware.isLazy(item))
122
+ if (!SerializerMiddleware.isLazy(item)) {
113
123
  throw new Error("Unexpected function");
124
+ }
114
125
  if (!SerializerMiddleware.isLazy(item, middleware)) {
115
126
  throw new Error(
116
127
  "Unexpected lazy value with non-this target (can't pass through lazy values)"
@@ -133,12 +144,14 @@ const serialize = async (
133
144
  processedData.push(
134
145
  serialize(
135
146
  middleware,
136
- content,
147
+ /** @type {BufferSerializableType[]} */
148
+ (content),
137
149
  (options && options.name) || true,
138
150
  writeFile,
139
151
  hashFunction
140
- ).then(result => {
141
- /** @type {any} */ (item).options.size = result.size;
152
+ ).then((result) => {
153
+ /** @type {LazyOptions} */
154
+ (item.options).size = result.size;
142
155
  resultToLazy.set(result, item);
143
156
  return result;
144
157
  })
@@ -160,24 +173,24 @@ const serialize = async (
160
173
  throw new Error("Unexpected falsy value in items array");
161
174
  }
162
175
  }
163
- /** @type {Promise<any>[]} */
176
+ /** @type {BackgroundJob[]} */
164
177
  const backgroundJobs = [];
165
- const resolvedData = (
166
- await Promise.all(
167
- /** @type {Promise<Buffer[] | Buffer | SerializeResult>[]} */
168
- (processedData)
169
- )
170
- ).map(item => {
178
+ const resolvedData = (await Promise.all(processedData)).map((item) => {
171
179
  if (Array.isArray(item) || Buffer.isBuffer(item)) return item;
172
180
 
173
- backgroundJobs.push(item.backgroundJob);
181
+ backgroundJobs.push(
182
+ /** @type {BackgroundJob} */
183
+ (item.backgroundJob)
184
+ );
174
185
  // create pointer buffer from size and name
175
186
  const name = /** @type {string} */ (item.name);
176
187
  const nameBuffer = Buffer.from(name);
177
188
  const buf = Buffer.allocUnsafe(8 + nameBuffer.length);
178
189
  writeUInt64LE(buf, item.size, 0);
179
190
  nameBuffer.copy(buf, 8, 0);
180
- const lazy = resultToLazy.get(item);
191
+ const lazy =
192
+ /** @type {LazyFunction} */
193
+ (resultToLazy.get(item));
181
194
  SerializerMiddleware.setLazySerializedValue(lazy, buf);
182
195
  return buf;
183
196
  });
@@ -225,14 +238,14 @@ const serialize = async (
225
238
  backgroundJob:
226
239
  backgroundJobs.length === 1
227
240
  ? backgroundJobs[0]
228
- : Promise.all(backgroundJobs)
241
+ : /** @type {BackgroundJob} */ (Promise.all(backgroundJobs))
229
242
  };
230
243
  };
231
244
 
232
245
  /**
233
246
  * @param {FileMiddleware} middleware this
234
247
  * @param {string | false} name filename
235
- * @param {function(string | false): Promise<Buffer[]>} readFile read content of a file
248
+ * @param {(name: string | false) => Promise<Buffer[]>} readFile read content of a file
236
249
  * @returns {Promise<BufferSerializableType[]>} deserialized data
237
250
  */
238
251
  const deserialize = async (middleware, name, readFile) => {
@@ -252,13 +265,14 @@ const deserialize = async (middleware, name, readFile) => {
252
265
  /**
253
266
  * @param {number} n number of bytes to ensure
254
267
  */
255
- const ensureData = n => {
268
+ const ensureData = (n) => {
256
269
  if (contentPosition === contentItemLength) {
257
270
  nextContent();
258
271
  }
259
272
  while (contentItemLength - contentPosition < n) {
260
273
  const remaining = contentItem.slice(contentPosition);
261
274
  let lengthFromNext = n - remaining.length;
275
+ /** @type {Buffer[]} */
262
276
  const buffers = [remaining];
263
277
  for (let i = contentsIndex + 1; i < contents.length; i++) {
264
278
  const l = contents[i].length;
@@ -301,7 +315,7 @@ const deserialize = async (middleware, name, readFile) => {
301
315
  * @param {number} l length
302
316
  * @returns {Buffer} buffer
303
317
  */
304
- const readSlice = l => {
318
+ const readSlice = (l) => {
305
319
  ensureData(l);
306
320
  if (contentPosition === 0 && contentItemLength === l) {
307
321
  const result = contentItem;
@@ -334,6 +348,7 @@ const deserialize = async (middleware, name, readFile) => {
334
348
  lastLengthPositive = valuePositive;
335
349
  }
336
350
  }
351
+ /** @type {BufferSerializableType[]} */
337
352
  const result = [];
338
353
  for (let length of lengths) {
339
354
  if (length < 0) {
@@ -341,17 +356,17 @@ const deserialize = async (middleware, name, readFile) => {
341
356
  const size = Number(readUInt64LE(slice, 0));
342
357
  const nameBuffer = slice.slice(8);
343
358
  const name = nameBuffer.toString();
344
- result.push(
345
- SerializerMiddleware.createLazy(
346
- memoize(() => deserialize(middleware, name, readFile)),
347
- middleware,
348
- {
349
- name,
350
- size
351
- },
352
- slice
353
- )
354
- );
359
+ const lazy =
360
+ /** @type {LazyFunction} */
361
+ (
362
+ SerializerMiddleware.createLazy(
363
+ memoize(() => deserialize(middleware, name, readFile)),
364
+ middleware,
365
+ { name, size },
366
+ slice
367
+ )
368
+ );
369
+ result.push(lazy);
355
370
  } else {
356
371
  if (contentPosition === contentItemLength) {
357
372
  nextContent();
@@ -408,19 +423,19 @@ const deserialize = async (middleware, name, readFile) => {
408
423
  return result;
409
424
  };
410
425
 
411
- /** @typedef {{ filename: string, extension?: string }} FileMiddlewareContext */
426
+ /** @typedef {BufferSerializableType[]} DeserializedType */
427
+ /** @typedef {true} SerializedType */
428
+ /** @typedef {{ filename: string, extension?: string }} Context */
412
429
 
413
430
  /**
414
- * @typedef {BufferSerializableType[]} DeserializedType
415
- * @typedef {true} SerializedType
416
- * @extends {SerializerMiddleware<DeserializedType, SerializedType>}
431
+ * @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
417
432
  */
418
433
  class FileMiddleware extends SerializerMiddleware {
419
434
  /**
420
435
  * @param {IntermediateFileSystem} fs filesystem
421
436
  * @param {string | Hash} hashFunction hash function to use
422
437
  */
423
- constructor(fs, hashFunction = "md4") {
438
+ constructor(fs, hashFunction = DEFAULTS.HASH_FUNCTION) {
424
439
  super();
425
440
  this.fs = fs;
426
441
  this._hashFunction = hashFunction;
@@ -428,13 +443,13 @@ class FileMiddleware extends SerializerMiddleware {
428
443
 
429
444
  /**
430
445
  * @param {DeserializedType} data data
431
- * @param {object} context context object
432
- * @returns {SerializedType|Promise<SerializedType>} serialized data
446
+ * @param {Context} context context object
447
+ * @returns {SerializedType | Promise<SerializedType> | null} serialized data
433
448
  */
434
449
  serialize(data, context) {
435
450
  const { filename, extension = "" } = context;
436
451
  return new Promise((resolve, reject) => {
437
- mkdirp(this.fs, dirname(this.fs, filename), err => {
452
+ mkdirp(this.fs, dirname(this.fs, filename), (err) => {
438
453
  if (err) return reject(err);
439
454
 
440
455
  // It's important that we don't touch existing files during serialization
@@ -479,11 +494,11 @@ class FileMiddleware extends SerializerMiddleware {
479
494
  stream = compression;
480
495
  stream.on("finish", () => resolve());
481
496
  } else {
482
- stream.on("error", err => reject(err));
497
+ stream.on("error", (err) => reject(err));
483
498
  stream.on("finish", () => resolve());
484
499
  }
485
500
  // split into chunks for WRITE_LIMIT_CHUNK size
486
- /** @type {TODO[]} */
501
+ /** @type {Buffer[]} */
487
502
  const chunks = [];
488
503
  for (const b of content) {
489
504
  if (b.length < WRITE_LIMIT_CHUNK) {
@@ -500,7 +515,7 @@ class FileMiddleware extends SerializerMiddleware {
500
515
  /**
501
516
  * @param {(Error | null)=} err err
502
517
  */
503
- const batchWrite = err => {
518
+ const batchWrite = (err) => {
504
519
  // will be handled in "on" error handler
505
520
  if (err) return;
506
521
 
@@ -539,8 +554,8 @@ class FileMiddleware extends SerializerMiddleware {
539
554
  /**
540
555
  * @param {(value?: undefined) => void} resolve resolve
541
556
  */
542
- resolve => {
543
- this.fs.rename(filename, `${filename}.old`, err => {
557
+ (resolve) => {
558
+ this.fs.rename(filename, `${filename}.old`, (_err) => {
544
559
  resolve();
545
560
  });
546
561
  }
@@ -550,7 +565,7 @@ class FileMiddleware extends SerializerMiddleware {
550
565
  await Promise.all(
551
566
  Array.from(
552
567
  allWrittenFiles,
553
- file =>
568
+ (file) =>
554
569
  new Promise(
555
570
  /**
556
571
  * @param {(value?: undefined) => void} resolve resolve
@@ -558,7 +573,7 @@ class FileMiddleware extends SerializerMiddleware {
558
573
  * @returns {void}
559
574
  */
560
575
  (resolve, reject) => {
561
- this.fs.rename(`${file}_`, file, err => {
576
+ this.fs.rename(`${file}_`, file, (err) => {
562
577
  if (err) return reject(err);
563
578
  resolve();
564
579
  });
@@ -573,8 +588,8 @@ class FileMiddleware extends SerializerMiddleware {
573
588
  * @param {(value?: undefined) => void} resolve resolve
574
589
  * @returns {void}
575
590
  */
576
- resolve => {
577
- this.fs.rename(`${filename}_`, filename, err => {
591
+ (resolve) => {
592
+ this.fs.rename(`${filename}_`, filename, (err) => {
578
593
  if (err) return reject(err);
579
594
  resolve();
580
595
  });
@@ -590,16 +605,16 @@ class FileMiddleware extends SerializerMiddleware {
590
605
 
591
606
  /**
592
607
  * @param {SerializedType} data data
593
- * @param {object} context context object
594
- * @returns {DeserializedType|Promise<DeserializedType>} deserialized data
608
+ * @param {Context} context context object
609
+ * @returns {DeserializedType | Promise<DeserializedType>} deserialized data
595
610
  */
596
611
  deserialize(data, context) {
597
612
  const { filename, extension = "" } = context;
598
613
  /**
599
614
  * @param {string | boolean} name name
600
- * @returns {Promise<TODO>} result
615
+ * @returns {Promise<Buffer[]>} result
601
616
  */
602
- const readFile = name =>
617
+ const readFile = (name) =>
603
618
  new Promise((resolve, reject) => {
604
619
  const file = name
605
620
  ? join(this.fs, filename, `../${name}${extension}`)
@@ -614,7 +629,7 @@ class FileMiddleware extends SerializerMiddleware {
614
629
  let currentBuffer;
615
630
  /** @type {number | undefined} */
616
631
  let currentBufferUsed;
617
- /** @type {any[]} */
632
+ /** @type {Buffer[]} */
618
633
  const buf = [];
619
634
  /** @type {import("zlib").Zlib & import("stream").Transform | undefined} */
620
635
  let decompression;
@@ -628,7 +643,12 @@ class FileMiddleware extends SerializerMiddleware {
628
643
  });
629
644
  }
630
645
  if (decompression) {
646
+ /** @typedef {(value: Buffer[] | PromiseLike<Buffer[]>) => void} NewResolve */
647
+ /** @typedef {(reason?: Error) => void} NewReject */
648
+
649
+ /** @type {NewResolve | undefined} */
631
650
  let newResolve;
651
+ /** @type {NewReject | undefined} */
632
652
  let newReject;
633
653
  resolve(
634
654
  Promise.all([
@@ -636,15 +656,21 @@ class FileMiddleware extends SerializerMiddleware {
636
656
  newResolve = rs;
637
657
  newReject = rj;
638
658
  }),
639
- new Promise((resolve, reject) => {
640
- decompression.on("data", chunk => buf.push(chunk));
641
- decompression.on("end", () => resolve());
642
- decompression.on("error", err => reject(err));
643
- })
659
+ new Promise(
660
+ /**
661
+ * @param {(value?: undefined) => void} resolve resolve
662
+ * @param {(reason?: Error) => void} reject reject
663
+ */
664
+ (resolve, reject) => {
665
+ decompression.on("data", (chunk) => buf.push(chunk));
666
+ decompression.on("end", () => resolve());
667
+ decompression.on("error", (err) => reject(err));
668
+ }
669
+ )
644
670
  ]).then(() => buf)
645
671
  );
646
- resolve = newResolve;
647
- reject = newReject;
672
+ resolve = /** @type {NewResolve} */ (newResolve);
673
+ reject = /** @type {NewReject} */ (newReject);
648
674
  }
649
675
  this.fs.open(file, "r", (err, _fd) => {
650
676
  if (err) {
@@ -694,19 +720,23 @@ class FileMiddleware extends SerializerMiddleware {
694
720
  remaining -= bytesRead;
695
721
  if (
696
722
  currentBufferUsed ===
697
- /** @type {Buffer} */ (currentBuffer).length
723
+ /** @type {Buffer} */
724
+ (currentBuffer).length
698
725
  ) {
699
726
  if (decompression) {
700
727
  decompression.write(currentBuffer);
701
728
  } else {
702
- buf.push(currentBuffer);
729
+ buf.push(
730
+ /** @type {Buffer} */
731
+ (currentBuffer)
732
+ );
703
733
  }
704
734
  currentBuffer = undefined;
705
735
  if (remaining === 0) {
706
736
  if (decompression) {
707
737
  decompression.end();
708
738
  }
709
- this.fs.close(fd, err => {
739
+ this.fs.close(fd, (err) => {
710
740
  if (err) {
711
741
  reject(err);
712
742
  return;
@@ -7,6 +7,8 @@
7
7
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
9
 
10
+ /** @typedef {string[]} Keys */
11
+
10
12
  class NullPrototypeObjectSerializer {
11
13
  /**
12
14
  * @template {object} T
@@ -14,7 +16,7 @@ class NullPrototypeObjectSerializer {
14
16
  * @param {ObjectSerializerContext} context context
15
17
  */
16
18
  serialize(obj, context) {
17
- /** @type {string[]} */
19
+ /** @type {Keys} */
18
20
  const keys = Object.keys(obj);
19
21
  for (const key of keys) {
20
22
  context.write(key);
@@ -33,9 +35,9 @@ class NullPrototypeObjectSerializer {
33
35
  deserialize(context) {
34
36
  /** @type {T} */
35
37
  const obj = Object.create(null);
36
- /** @type {string[]} */
38
+ /** @type {Keys} */
37
39
  const keys = [];
38
- /** @type {string | null} */
40
+ /** @type {Keys[number] | null} */
39
41
  let key = context.read();
40
42
  while (key !== null) {
41
43
  keys.push(key);