@depup/webpack 5.109.2-depup.0 → 5.110.3-depup.0

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 (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const EventEmitter = require("events");
9
+
9
10
  const { basename, extname } = require("path");
10
11
  const {
11
12
  // eslint-disable-next-line n/no-unsupported-features/node-builtins
@@ -18,21 +19,29 @@ const createHash = require("../util/createHash");
18
19
  const { dirname, join, mkdirp } = require("../util/fs");
19
20
  const memoize = require("../util/memoize");
20
21
 
21
- /** @typedef {import("http").IncomingMessage} IncomingMessage */
22
- /** @typedef {import("http").OutgoingHttpHeaders} OutgoingHttpHeaders */
23
- /** @typedef {import("http").RequestOptions} RequestOptions */
24
- /** @typedef {import("net").Socket} Socket */
25
- /** @typedef {import("stream").Readable} Readable */
26
- /** @typedef {import("../../declarations/plugins/schemes/HttpUriPlugin").HttpUriPluginOptions} HttpUriPluginOptions */
27
- /** @typedef {import("../Compiler")} Compiler */
28
- /** @typedef {import("../FileSystemInfo").Snapshot} Snapshot */
29
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
30
- /** @typedef {import("../NormalModuleFactory").ResourceDataWithData} ResourceDataWithData */
31
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
32
- /** @typedef {import("../NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
22
+ const getHttps = memoize(() => require("https"));
33
23
 
34
24
  const getHttp = memoize(() => require("http"));
35
- const getHttps = memoize(() => require("https"));
25
+
26
+ /**
27
+ * @import {
28
+ * IncomingMessage,
29
+ * OutgoingHttpHeaders,
30
+ * RequestOptions
31
+ * } from "http"
32
+ */
33
+ /** @import { Socket } from "net" */
34
+ /** @import { Readable } from "stream" */
35
+ /**
36
+ * @import {
37
+ * HttpUriPluginOptions
38
+ * } from "../../declarations/plugins/schemes/HttpUriPlugin"
39
+ */
40
+ /** @import Compiler from "../Compiler" */
41
+ /** @import { Snapshot } from "../FileSystemInfo" */
42
+ /** @import { ResourceDataWithData } from "../NormalModuleFactory" */
43
+ /** @import { IntermediateFileSystem } from "../util/fs" */
44
+ /** @import { NormalModuleBuildInfo } from "../NormalModule" */
36
45
 
37
46
  const MAX_REDIRECTS = 5;
38
47
 
@@ -140,7 +149,8 @@ const verifyIntegrity = (content, integrity) => {
140
149
  };
141
150
 
142
151
  /**
143
- * Parses key value pairs.
152
+ * Parses key value pairs. Keys are lower-cased because HTTP directive names are
153
+ * case-insensitive; values are kept verbatim (they may be quoted field lists).
144
154
  * @param {string} str input
145
155
  * @returns {Record<string, string>} parsed
146
156
  */
@@ -150,11 +160,11 @@ const parseKeyValuePairs = (str) => {
150
160
  for (const item of str.split(",")) {
151
161
  const i = item.indexOf("=");
152
162
  if (i >= 0) {
153
- const key = item.slice(0, i).trim();
163
+ const key = item.slice(0, i).trim().toLowerCase();
154
164
  const value = item.slice(i + 1).trim();
155
165
  result[key] = value;
156
166
  } else {
157
- const key = item.trim();
167
+ const key = item.trim().toLowerCase();
158
168
  if (!key) continue;
159
169
  result[key] = key;
160
170
  }
@@ -177,7 +187,9 @@ const parseCacheControl = (cacheControl, requestTime) => {
177
187
  let validUntil = 0;
178
188
  if (cacheControl) {
179
189
  const parsed = parseKeyValuePairs(cacheControl);
180
- if (parsed["no-cache"]) storeCache = storeLock = false;
190
+ if (parsed["no-cache"] || parsed["no-store"]) {
191
+ storeCache = storeLock = false;
192
+ }
181
193
  if (parsed["max-age"] && !Number.isNaN(Number(parsed["max-age"]))) {
182
194
  validUntil = requestTime + Number(parsed["max-age"]) * 1000;
183
195
  }
@@ -482,7 +494,7 @@ const cachedWithKey = (fn, forceFn = fn) => {
482
494
  * Defines the lockfile cache type used by this module.
483
495
  * @typedef {object} LockfileCache
484
496
  * @property {Lockfile} lockfile lockfile
485
- * @property {Snapshot} snapshot snapshot
497
+ * @property {InstanceType<Snapshot>} snapshot snapshot
486
498
  */
487
499
 
488
500
  /**
@@ -644,7 +656,7 @@ class HttpUriPlugin {
644
656
  : new Lockfile();
645
657
  lockfileCache = {
646
658
  lockfile,
647
- snapshot: /** @type {Snapshot} */ (s)
659
+ snapshot: /** @type {InstanceType<Snapshot>} */ (s)
648
660
  };
649
661
  callback(null, lockfile);
650
662
  }
@@ -975,7 +987,11 @@ class HttpUriPlugin {
975
987
  /** @type {Buffer[]} */
976
988
  const bufferArr = [];
977
989
 
978
- const contentEncoding = res.headers["content-encoding"];
990
+ // content codings are case-insensitive tokens
991
+ const contentEncodingHeader = res.headers["content-encoding"];
992
+ const contentEncoding =
993
+ contentEncodingHeader &&
994
+ contentEncodingHeader.trim().toLowerCase();
979
995
  /** @type {Readable} */
980
996
  let stream = res;
981
997
  if (contentEncoding === "gzip") {
@@ -985,6 +1001,16 @@ class HttpUriPlugin {
985
1001
  } else if (contentEncoding === "deflate") {
986
1002
  stream = stream.pipe(createInflate());
987
1003
  }
1004
+ if (stream !== res) {
1005
+ // a decompressor error never reaches the request's handler
1006
+ stream.once("error", (err) => {
1007
+ logger.log(
1008
+ `GET ${url} [${res.statusCode}] (invalid encoding)`
1009
+ );
1010
+ err.message += `\nwhile decompressing ${url}`;
1011
+ callback(err);
1012
+ });
1013
+ }
988
1014
 
989
1015
  stream.on(
990
1016
  "data",
@@ -6,21 +6,27 @@
6
6
  "use strict";
7
7
 
8
8
  const NormalModule = require("../NormalModule");
9
- const ModuleNotFoundError = require("../errors/ModuleNotFoundError");
9
+
10
10
  const { getContext } = require("../loaders/LoaderRunner");
11
11
  const { isAbsolute, join } = require("../util/fs");
12
12
  const { parseResourceWithoutFragment } = require("../util/identifier");
13
+ const memoize = require("../util/memoize");
14
+
15
+ const getModuleNotFoundError = memoize(() =>
16
+ require("../errors/ModuleNotFoundError")
17
+ );
13
18
 
14
19
  const DEFAULT_SCHEME = "virtual";
15
20
 
16
21
  const PLUGIN_NAME = "VirtualUrlPlugin";
17
22
 
23
+ /** @import Compiler from "../Compiler" */
18
24
  /**
19
- * Defines the compiler type used by this module.
20
- * @typedef {import("../Compiler")} Compiler
21
- * @typedef {import("../../declarations/plugins/schemes/VirtualUrlPlugin").VirtualModule} VirtualModuleConfig
22
- * @typedef {import("../../declarations/plugins/schemes/VirtualUrlPlugin").VirtualModuleContent} VirtualModuleInput
23
- * @typedef {import("../../declarations/plugins/schemes/VirtualUrlPlugin").VirtualUrlOptions} VirtualUrlOptions
25
+ * @import {
26
+ * VirtualModule as VirtualModuleConfig,
27
+ * VirtualModuleContent as VirtualModuleInput,
28
+ * VirtualUrlOptions
29
+ * } from "../../declarations/plugins/schemes/VirtualUrlPlugin"
24
30
  */
25
31
 
26
32
  /** @typedef {(loaderContext: LoaderContext<EXPECTED_ANY>) => Promise<string | Buffer> | string | Buffer} SourceFn */
@@ -271,7 +277,7 @@ class VirtualUrlPlugin {
271
277
  findVirtualModuleConfigById(id) {
272
278
  const config = this.modules[id];
273
279
  if (!config) {
274
- throw new ModuleNotFoundError(
280
+ throw new (getModuleNotFoundError())(
275
281
  null,
276
282
  new Error(`Can't resolve virtual module ${id}`),
277
283
  {
@@ -4,7 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
7
+ /** @import { ComplexSerializableType } from "./types" */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<ComplexSerializableType[]>} ObjectDeserializerContext */
9
9
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<ComplexSerializableType[]>} ObjectSerializerContext */
10
10
 
@@ -8,8 +8,8 @@ const { deserialize: v8Deserialize, serialize: v8Serialize } = require("v8");
8
8
  const memoize = require("../util/memoize");
9
9
  const SerializerMiddleware = require("./SerializerMiddleware");
10
10
 
11
- /** @typedef {import("./types").BufferSerializableType} BufferSerializableType */
12
11
  /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
12
+ /** @import { BufferSerializableType } from "./types" */
13
13
 
14
14
  /*
15
15
  Format:
@@ -579,7 +579,7 @@ class BinaryMiddleware extends SerializerMiddleware {
579
579
  }
580
580
  }
581
581
 
582
- module.exports = BinaryMiddleware;
582
+ BinaryMiddleware.MEASURE_END_OPERATION = MEASURE_END_OPERATION;
583
+ BinaryMiddleware.MEASURE_START_OPERATION = MEASURE_START_OPERATION;
583
584
 
584
- module.exports.MEASURE_END_OPERATION = MEASURE_END_OPERATION;
585
- module.exports.MEASURE_START_OPERATION = MEASURE_START_OPERATION;
585
+ module.exports = BinaryMiddleware;
@@ -4,7 +4,7 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
7
+ /** @import { ComplexSerializableType } from "./types" */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext<ComplexSerializableType[]>} ObjectDeserializerContext */
9
9
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext<ComplexSerializableType[]>} ObjectSerializerContext */
10
10
 
@@ -31,10 +31,9 @@ const { dirname, join, mkdirp } = require("../util/fs");
31
31
  const memoize = require("../util/memoize");
32
32
  const SerializerMiddleware = require("./SerializerMiddleware");
33
33
 
34
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
35
- /** @typedef {import("../util/fs").IStats} IStats */
36
- /** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
37
- /** @typedef {import("./types").BufferSerializableType} BufferSerializableType */
34
+ /** @import { HashFunction } from "../util/Hash" */
35
+ /** @import { IStats, IntermediateFileSystem } from "../util/fs" */
36
+ /** @import { BufferSerializableType } from "./types" */
38
37
 
39
38
  /*
40
39
  Format:
@@ -550,9 +549,13 @@ class FileMiddleware extends SerializerMiddleware {
550
549
  });
551
550
  }
552
551
  if (compression) {
553
- pipeline(compression, stream, reject);
552
+ // resolve on the pipeline, not on the transform's "finish":
553
+ // the latter fires before the destination has flushed
554
+ pipeline(compression, stream, (err) => {
555
+ if (err) return reject(err);
556
+ resolve();
557
+ });
554
558
  stream = compression;
555
- stream.on("finish", () => resolve());
556
559
  } else {
557
560
  stream.on("error", (err) => reject(err));
558
561
  stream.on("finish", () => resolve());
@@ -794,6 +797,15 @@ class FileMiddleware extends SerializerMiddleware {
794
797
  });
795
798
  return;
796
799
  }
800
+ // a file truncated after `stat` reads 0 bytes forever
801
+ if (bytesRead === 0 && remaining > 0) {
802
+ this.fs.close(fd, (err) => {
803
+ reject(
804
+ err || new Error(`Unexpected end of file ${file}`)
805
+ );
806
+ });
807
+ return;
808
+ }
797
809
  /** @type {number} */
798
810
  (currentBufferUsed) += bytesRead;
799
811
  remaining -= bytesRead;
@@ -1046,7 +1058,8 @@ const getReferencedFilenames = (fs, file) =>
1046
1058
  ? getReferencedFilenamesCompressed(fs, file)
1047
1059
  : getReferencedFilenamesUncompressed(fs, file);
1048
1060
 
1049
- module.exports = FileMiddleware;
1050
1061
  // Exposed for testing the content-buffer boundary handling in `deserialize`.
1051
- module.exports._deserialize = deserialize;
1052
- module.exports.getReferencedFilenames = getReferencedFilenames;
1062
+ FileMiddleware._deserialize = deserialize;
1063
+ FileMiddleware.getReferencedFilenames = getReferencedFilenames;
1064
+
1065
+ module.exports = FileMiddleware;
@@ -17,11 +17,15 @@ const RegExpObjectSerializer = require("./RegExpObjectSerializer");
17
17
  const SerializerMiddleware = require("./SerializerMiddleware");
18
18
  const SetObjectSerializer = require("./SetObjectSerializer");
19
19
 
20
- /** @typedef {import("../logging/Logger").Logger} Logger */
21
- /** @typedef {import("../util/Hash").HashFunction} HashFunction */
22
- /** @typedef {import("./SerializerMiddleware").LazyOptions} LazyOptions */
23
- /** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
24
- /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
20
+ /** @import { Logger } from "../logging/Logger" */
21
+ /** @import { HashFunction } from "../util/Hash" */
22
+ /** @import { LazyOptions } from "./SerializerMiddleware" */
23
+ /**
24
+ * @import {
25
+ * ComplexSerializableType,
26
+ * PrimitiveSerializableType
27
+ * } from "./types"
28
+ */
25
29
 
26
30
  /** @typedef {new (...params: EXPECTED_ANY[]) => EXPECTED_ANY} Constructor */
27
31
 
@@ -457,7 +461,7 @@ class ObjectMiddleware extends SerializerMiddleware {
457
461
  return buf;
458
462
  };
459
463
  let currentPosTypeLookup = 0;
460
- /** @type {Map<ComplexSerializableType, number>} */
464
+ /** @type {Map<SerializerConfigWithSerializer, number>} */
461
465
  let objectTypeLookup = new Map();
462
466
  /** @type {Set<ComplexSerializableType>} */
463
467
  const cycleStack = new Set();
@@ -569,140 +573,160 @@ class ObjectMiddleware extends SerializerMiddleware {
569
573
  ...context
570
574
  };
571
575
  this.extendContext(ctx);
576
+ // Dispatched on `typeof` first: two thirds of the items are numbers,
577
+ // booleans and `undefined`, and only 3% are buffers.
572
578
  /**
573
579
  * Processes the provided item.
574
580
  * @param {ComplexSerializableType} item item to serialize
575
581
  */
576
582
  const process = (item) => {
577
- if (Buffer.isBuffer(item)) {
578
- // check if we can emit a reference
579
- const ref = referenceable.get(item);
580
- if (ref !== undefined) {
581
- result.push(ESCAPE, ref - currentPos);
583
+ switch (typeof item) {
584
+ case "number":
585
+ case "boolean":
586
+ result.push(item);
582
587
  return;
583
- }
584
- const alreadyUsedBuffer = dedupeBuffer(item);
585
- if (alreadyUsedBuffer !== item) {
586
- const ref = referenceable.get(alreadyUsedBuffer);
587
- if (ref !== undefined) {
588
- referenceable.set(item, ref);
589
- result.push(ESCAPE, ref - currentPos);
590
- return;
588
+ case "string": {
589
+ if (item.length > 1) {
590
+ // short strings are shorter when not emitting a reference (this saves 1 byte per empty string)
591
+ // check if we can emit a reference
592
+ const ref = referenceable.get(item);
593
+ if (ref !== undefined) {
594
+ const offset = ref - currentPos;
595
+ if (
596
+ // One far ref → 5 bytes (`null` + offset), one near ref -> 2/3 bytes
597
+ offset >= -32768 ||
598
+ // long enough that the ref wins, keep it
599
+ item.length >= 4 ||
600
+ // multibyte → inline would be even bigger, keep it
601
+ Buffer.byteLength(item) !== item.length
602
+ ) {
603
+ // A back-reference is `null` + the offset.
604
+ result.push(ESCAPE, offset);
605
+ return;
606
+ }
607
+ }
608
+ addReferenceable(item);
609
+ }
610
+
611
+ if (item.length > 102400 && context.logger) {
612
+ context.logger.warn(
613
+ `Serializing big strings (${Math.round(
614
+ item.length / 1024
615
+ )}kiB) impacts deserialization performance (consider using Buffer instead and decode when needed)`
616
+ );
591
617
  }
592
- item = alreadyUsedBuffer;
593
- }
594
- addReferenceable(item);
595
618
 
596
- result.push(/** @type {Buffer} */ (item));
597
- } else if (item === ESCAPE) {
598
- result.push(ESCAPE, ESCAPE_ESCAPE_VALUE);
599
- } else if (
600
- typeof item === "object"
601
- // We don't have to check for null as ESCAPE is null and this has been checked before
602
- ) {
603
- // check if we can emit a reference
604
- const ref = referenceable.get(item);
605
- if (ref !== undefined) {
606
- result.push(ESCAPE, ref - currentPos);
619
+ result.push(item);
607
620
  return;
608
621
  }
622
+ case "undefined":
623
+ result.push(ESCAPE, ESCAPE_UNDEFINED);
624
+ return;
625
+ case "object": {
626
+ // ESCAPE is null, so this covers null too
627
+ if (item === ESCAPE) {
628
+ result.push(ESCAPE, ESCAPE_ESCAPE_VALUE);
629
+ return;
630
+ }
609
631
 
610
- if (cycleStack.has(item)) {
611
- throw new Error(
612
- "This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize."
613
- );
614
- }
632
+ if (Buffer.isBuffer(item)) {
633
+ // check if we can emit a reference
634
+ const ref = referenceable.get(item);
635
+ if (ref !== undefined) {
636
+ result.push(ESCAPE, ref - currentPos);
637
+ return;
638
+ }
639
+ const alreadyUsedBuffer = dedupeBuffer(item);
640
+ if (alreadyUsedBuffer !== item) {
641
+ const ref = referenceable.get(alreadyUsedBuffer);
642
+ if (ref !== undefined) {
643
+ referenceable.set(item, ref);
644
+ result.push(ESCAPE, ref - currentPos);
645
+ return;
646
+ }
647
+ item = alreadyUsedBuffer;
648
+ }
649
+ addReferenceable(item);
615
650
 
616
- const { request, name, serializer } = ObjectMiddleware.getSerializerFor(
617
- /** @type {Constructor} */
618
- (item)
619
- );
620
- const key = `${request}/${name}`;
621
- const lastIndex = objectTypeLookup.get(key);
651
+ result.push(/** @type {Buffer} */ (item));
652
+ return;
653
+ }
622
654
 
623
- if (lastIndex === undefined) {
624
- objectTypeLookup.set(key, currentPosTypeLookup++);
655
+ // check if we can emit a reference
656
+ const ref = referenceable.get(item);
657
+ if (ref !== undefined) {
658
+ result.push(ESCAPE, ref - currentPos);
659
+ return;
660
+ }
625
661
 
626
- result.push(ESCAPE, request, name);
627
- } else {
628
- result.push(ESCAPE, currentPosTypeLookup - lastIndex);
629
- }
662
+ if (cycleStack.has(item)) {
663
+ throw new Error(
664
+ "This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize."
665
+ );
666
+ }
630
667
 
631
- cycleStack.add(item);
668
+ // Keyed by the registration itself: one per class, so it stands in for
669
+ // `${request}/${name}` without building that string per object.
670
+ const config = ObjectMiddleware.getSerializerFor(
671
+ /** @type {Constructor} */
672
+ (item)
673
+ );
674
+ const { request, name, serializer } = config;
675
+ const lastIndex = objectTypeLookup.get(config);
632
676
 
633
- try {
634
- serializer.serialize(item, ctx);
635
- } finally {
636
- cycleStack.delete(item);
637
- }
677
+ if (lastIndex === undefined) {
678
+ objectTypeLookup.set(config, currentPosTypeLookup++);
638
679
 
639
- result.push(ESCAPE, ESCAPE_END_OBJECT);
680
+ result.push(ESCAPE, request, name);
681
+ } else {
682
+ result.push(ESCAPE, currentPosTypeLookup - lastIndex);
683
+ }
640
684
 
641
- addReferenceable(item);
642
- } else if (typeof item === "string") {
643
- if (item.length > 1) {
644
- // short strings are shorter when not emitting a reference (this saves 1 byte per empty string)
645
- // check if we can emit a reference
646
- const ref = referenceable.get(item);
647
- if (ref !== undefined) {
648
- const offset = ref - currentPos;
649
- if (
650
- // One far ref → 5 bytes (`null` + offset), one near ref -> 2/3 bytes
651
- offset >= -32768 ||
652
- // long enough that the ref wins, keep it
653
- item.length >= 4 ||
654
- // multibyte → inline would be even bigger, keep it
655
- Buffer.byteLength(item) !== item.length
656
- ) {
657
- // A back-reference is `null` + the offset.
658
- result.push(ESCAPE, offset);
659
- return;
660
- }
685
+ cycleStack.add(item);
686
+
687
+ try {
688
+ serializer.serialize(item, ctx);
689
+ } finally {
690
+ cycleStack.delete(item);
661
691
  }
662
- addReferenceable(item);
663
- }
664
692
 
665
- if (item.length > 102400 && context.logger) {
666
- context.logger.warn(
667
- `Serializing big strings (${Math.round(
668
- item.length / 1024
669
- )}kiB) impacts deserialization performance (consider using Buffer instead and decode when needed)`
670
- );
671
- }
693
+ result.push(ESCAPE, ESCAPE_END_OBJECT);
672
694
 
673
- result.push(item);
674
- } else if (typeof item === "function") {
675
- if (!SerializerMiddleware.isLazy(item)) {
676
- throw new Error(`Unexpected function ${item}`);
695
+ addReferenceable(item);
696
+ return;
677
697
  }
698
+ case "function": {
699
+ if (!SerializerMiddleware.isLazy(item)) {
700
+ throw new Error(`Unexpected function ${item}`);
701
+ }
678
702
 
679
- /** @type {SerializedType | undefined} */
680
- const serializedData =
681
- SerializerMiddleware.getLazySerializedValue(item);
703
+ /** @type {SerializedType | undefined} */
704
+ const serializedData =
705
+ SerializerMiddleware.getLazySerializedValue(item);
682
706
 
683
- if (serializedData !== undefined) {
684
- if (typeof serializedData === "function") {
685
- result.push(serializedData);
686
- } else {
707
+ if (serializedData !== undefined) {
708
+ if (typeof serializedData === "function") {
709
+ result.push(serializedData);
710
+ } else {
711
+ throw new Error("Not implemented");
712
+ }
713
+ } else if (SerializerMiddleware.isLazy(item, this)) {
687
714
  throw new Error("Not implemented");
715
+ } else {
716
+ const data =
717
+ /** @type {() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>} */
718
+ (
719
+ SerializerMiddleware.serializeLazy(item, (data) =>
720
+ this.serialize([data], context)
721
+ )
722
+ );
723
+ SerializerMiddleware.setLazySerializedValue(item, data);
724
+ result.push(data);
688
725
  }
689
- } else if (SerializerMiddleware.isLazy(item, this)) {
690
- throw new Error("Not implemented");
691
- } else {
692
- const data =
693
- /** @type {() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>} */
694
- (
695
- SerializerMiddleware.serializeLazy(item, (data) =>
696
- this.serialize([data], context)
697
- )
698
- );
699
- SerializerMiddleware.setLazySerializedValue(item, data);
700
- result.push(data);
726
+ return;
701
727
  }
702
- } else if (item === undefined) {
703
- result.push(ESCAPE, ESCAPE_UNDEFINED);
704
- } else {
705
- result.push(item);
728
+ default:
729
+ result.push(item);
706
730
  }
707
731
  };
708
732
 
@@ -933,5 +957,6 @@ class ObjectMiddleware extends SerializerMiddleware {
933
957
  }
934
958
  }
935
959
 
960
+ ObjectMiddleware.NOT_SERIALIZABLE = NOT_SERIALIZABLE;
961
+
936
962
  module.exports = ObjectMiddleware;
937
- module.exports.NOT_SERIALIZABLE = NOT_SERIALIZABLE;
@@ -3,32 +3,32 @@
3
3
  */
4
4
 
5
5
  "use strict";
6
+ /** @import { ObjectDeserializerContext, ObjectSerializerContext } from "./ObjectMiddleware" */
6
7
 
7
- /** @typedef {EXPECTED_FUNCTION} CacheAssoc */
8
+ /** @typedef {ObjectSerializerContext<EXPECTED_ANY>["write"]} CacheAssoc */
8
9
 
9
10
  /**
10
11
  * Defines the shared type used by this module.
11
- * @template T
12
- * @typedef {WeakMap<CacheAssoc, ObjectStructure<T>>}
12
+ * @type {WeakMap<CacheAssoc, ObjectStructure<PropertyKey>>}
13
13
  */
14
14
  const cache = new WeakMap();
15
15
 
16
16
  /**
17
17
  * Represents ObjectStructure.
18
- * @template T
18
+ * @template {PropertyKey} K
19
19
  */
20
20
  class ObjectStructure {
21
21
  constructor() {
22
- /** @type {undefined | keyof T[]} */
22
+ /** @type {undefined | K[]} */
23
23
  this.keys = undefined;
24
- /** @type {undefined | Map<keyof T, ObjectStructure<T>>} */
24
+ /** @type {undefined | Map<K, ObjectStructure<K>>} */
25
25
  this.children = undefined;
26
26
  }
27
27
 
28
28
  /**
29
29
  * Returns keys.
30
- * @param {keyof T[]} keys keys
31
- * @returns {keyof T[]} keys
30
+ * @param {K[]} keys keys
31
+ * @returns {K[]} keys
32
32
  */
33
33
  getKeys(keys) {
34
34
  if (this.keys === undefined) this.keys = keys;
@@ -37,13 +37,14 @@ class ObjectStructure {
37
37
 
38
38
  /**
39
39
  * Returns object structure.
40
- * @param {keyof T} key key
41
- * @returns {ObjectStructure<T>} object structure
40
+ * @param {K} key key
41
+ * @returns {ObjectStructure<K>} object structure
42
42
  */
43
43
  key(key) {
44
44
  if (this.children === undefined) this.children = new Map();
45
45
  const child = this.children.get(key);
46
46
  if (child !== undefined) return child;
47
+ /** @type {ObjectStructure<K>} */
47
48
  const newChild = new ObjectStructure();
48
49
  this.children.set(key, newChild);
49
50
  return newChild;
@@ -52,13 +53,15 @@ class ObjectStructure {
52
53
 
53
54
  /**
54
55
  * Returns keys.
55
- * @template T
56
- * @param {(keyof T)[]} keys keys
56
+ * @template {PropertyKey} K
57
+ * @param {K[]} keys keys
57
58
  * @param {CacheAssoc} cacheAssoc cache assoc fn
58
- * @returns {(keyof T)[]} keys
59
+ * @returns {K[]} keys
59
60
  */
60
61
  const getCachedKeys = (keys, cacheAssoc) => {
61
- let root = cache.get(cacheAssoc);
62
+ let root = /** @type {ObjectStructure<K> | undefined} */ (
63
+ cache.get(cacheAssoc)
64
+ );
62
65
  if (root === undefined) {
63
66
  root = new ObjectStructure();
64
67
  cache.set(cacheAssoc, root);
@@ -75,7 +78,7 @@ class PlainObjectSerializer {
75
78
  * Serializes this instance into the provided serializer context.
76
79
  * @template {object} T
77
80
  * @param {T} obj plain object
78
- * @param {import("./ObjectMiddleware").ObjectSerializerContext<((keyof T)[] | keyof T | null | T[keyof T])[]>} context context
81
+ * @param {ObjectSerializerContext<((keyof T)[] | keyof T | null | T[keyof T])[]>} context context
79
82
  */
80
83
  serialize(obj, context) {
81
84
  const keys = /** @type {(keyof T)[]} */ (Object.keys(obj));
@@ -103,7 +106,7 @@ class PlainObjectSerializer {
103
106
  /**
104
107
  * Restores this instance from the provided deserializer context.
105
108
  * @template {object} T
106
- * @param {import("./ObjectMiddleware").ObjectDeserializerContext<((keyof T)[] | keyof T | null | T[keyof T])[]>} context context
109
+ * @param {ObjectDeserializerContext<((keyof T)[] | keyof T | null | T[keyof T])[]>} context context
107
110
  * @returns {T} plain object
108
111
  */
109
112
  deserialize(context) {