webpack 5.107.2 → 5.108.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 (357) hide show
  1. package/hot/dev-server.js +2 -0
  2. package/lib/APIPlugin.js +8 -4
  3. package/lib/CacheFacade.js +7 -0
  4. package/lib/Chunk.js +4 -0
  5. package/lib/ChunkGraph.js +30 -9
  6. package/lib/CircularModulesPlugin.js +190 -0
  7. package/lib/CleanPlugin.js +2 -1
  8. package/lib/Compilation.js +396 -65
  9. package/lib/Compiler.js +25 -11
  10. package/lib/ConcatenationScope.js +10 -3
  11. package/lib/ContextExclusionPlugin.js +1 -0
  12. package/lib/ContextModule.js +92 -47
  13. package/lib/ContextReplacementPlugin.js +4 -0
  14. package/lib/DefinePlugin.js +89 -15
  15. package/lib/Dependency.js +111 -7
  16. package/lib/EntryOptionPlugin.js +39 -2
  17. package/lib/EntryPlugin.js +2 -0
  18. package/lib/ExportsInfo.js +314 -73
  19. package/lib/ExternalModule.js +82 -34
  20. package/lib/ExternalModuleFactoryPlugin.js +1 -0
  21. package/lib/ExternalsPlugin.js +1 -0
  22. package/lib/FileSystemInfo.js +173 -23
  23. package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
  24. package/lib/FlagDependencyExportsPlugin.js +23 -0
  25. package/lib/FlagDependencyUsagePlugin.js +87 -5
  26. package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
  27. package/lib/Generator.js +8 -0
  28. package/lib/HotModuleReplacementPlugin.js +65 -28
  29. package/lib/IgnorePlugin.js +1 -0
  30. package/lib/InitFragment.js +5 -0
  31. package/lib/JavascriptMetaInfoPlugin.js +7 -5
  32. package/lib/LazyBarrel.js +361 -0
  33. package/lib/LoaderTargetPlugin.js +1 -0
  34. package/lib/Module.js +21 -42
  35. package/lib/ModuleGraph.js +3 -2
  36. package/lib/ModuleProfile.js +27 -1
  37. package/lib/ModuleTemplate.js +2 -0
  38. package/lib/MultiCompiler.js +2 -0
  39. package/lib/MultiStats.js +1 -0
  40. package/lib/MultiWatching.js +2 -0
  41. package/lib/NodeStuffPlugin.js +22 -17
  42. package/lib/NormalModule.js +142 -80
  43. package/lib/NormalModuleReplacementPlugin.js +2 -0
  44. package/lib/PrefetchPlugin.js +2 -0
  45. package/lib/ProgressPlugin.js +8 -0
  46. package/lib/ProvidePlugin.js +1 -0
  47. package/lib/RawModule.js +20 -16
  48. package/lib/RecordIdsPlugin.js +1 -0
  49. package/lib/RuntimeGlobals.js +5 -0
  50. package/lib/RuntimePlugin.js +58 -26
  51. package/lib/RuntimeTemplate.js +278 -21
  52. package/lib/SelfModuleFactory.js +1 -0
  53. package/lib/SourceMapDevToolPlugin.js +3 -5
  54. package/lib/Stats.js +1 -0
  55. package/lib/Template.js +8 -2
  56. package/lib/TemplatedPathPlugin.js +473 -131
  57. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
  58. package/lib/WarnDeprecatedOptionPlugin.js +4 -0
  59. package/lib/WarnNoModeSetPlugin.js +1 -0
  60. package/lib/WatchIgnorePlugin.js +1 -0
  61. package/lib/Watching.js +9 -0
  62. package/lib/WebpackOptionsApply.js +50 -5
  63. package/lib/asset/AssetBytesGenerator.js +11 -3
  64. package/lib/asset/AssetGenerator.js +47 -22
  65. package/lib/asset/AssetModule.js +47 -0
  66. package/lib/asset/AssetModulesPlugin.js +14 -14
  67. package/lib/asset/AssetParser.js +2 -2
  68. package/lib/asset/AssetSourceGenerator.js +8 -0
  69. package/lib/asset/RawDataUrlModule.js +12 -13
  70. package/lib/buildChunkGraph.js +64 -7
  71. package/lib/bun/BunTargetPlugin.js +48 -0
  72. package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
  73. package/lib/cache/AddManagedPathsPlugin.js +3 -0
  74. package/lib/cache/IdleFileCachePlugin.js +4 -0
  75. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  76. package/lib/cache/PackFileCacheStrategy.js +1 -0
  77. package/lib/cache/ResolverCachePlugin.js +2 -0
  78. package/lib/cache/mergeEtags.js +2 -0
  79. package/lib/cli.js +109 -19
  80. package/lib/config/browserslistTargetHandler.js +99 -0
  81. package/lib/config/defaults.js +147 -7
  82. package/lib/config/defineConfig.js +31 -0
  83. package/lib/config/normalization.js +5 -0
  84. package/lib/config/target.js +181 -2
  85. package/lib/container/ContainerEntryModule.js +15 -14
  86. package/lib/container/ContainerExposedDependency.js +2 -2
  87. package/lib/container/ContainerReferencePlugin.js +1 -1
  88. package/lib/container/FallbackDependency.js +5 -7
  89. package/lib/container/FallbackModule.js +10 -9
  90. package/lib/container/RemoteModule.js +20 -10
  91. package/lib/container/RemoteRuntimeModule.js +14 -12
  92. package/lib/css/CssGenerator.js +353 -327
  93. package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
  94. package/lib/css/CssLoadingRuntimeModule.js +118 -47
  95. package/lib/css/CssModule.js +52 -23
  96. package/lib/css/CssModulesPlugin.js +107 -124
  97. package/lib/css/CssParser.js +2759 -2205
  98. package/lib/css/syntax.js +2859 -0
  99. package/lib/debug/ProfilingPlugin.js +2 -0
  100. package/lib/deno/DenoTargetPlugin.js +47 -0
  101. package/lib/dependencies/AMDDefineDependency.js +22 -17
  102. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
  103. package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
  104. package/lib/dependencies/AMDRequireContextDependency.js +7 -11
  105. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
  106. package/lib/dependencies/AMDRequireDependency.js +24 -20
  107. package/lib/dependencies/CachedConstDependency.js +3 -0
  108. package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
  109. package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
  110. package/lib/dependencies/CommonJsExportsDependency.js +21 -16
  111. package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
  112. package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
  113. package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
  114. package/lib/dependencies/CommonJsPlugin.js +1 -1
  115. package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
  116. package/lib/dependencies/CommonJsRequireDependency.js +42 -11
  117. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
  118. package/lib/dependencies/ConstDependency.js +16 -11
  119. package/lib/dependencies/ContextDependency.js +4 -0
  120. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
  121. package/lib/dependencies/ContextElementDependency.js +23 -14
  122. package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
  123. package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
  124. package/lib/dependencies/CriticalDependencyWarning.js +1 -0
  125. package/lib/dependencies/CssIcssExportDependency.js +512 -574
  126. package/lib/dependencies/CssIcssImportDependency.js +9 -9
  127. package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
  128. package/lib/dependencies/CssImportDependency.js +25 -1
  129. package/lib/dependencies/CssUrlDependency.js +23 -14
  130. package/lib/dependencies/DllEntryDependency.js +9 -13
  131. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  132. package/lib/dependencies/ExportsInfoDependency.js +12 -12
  133. package/lib/dependencies/ExternalModuleDependency.js +8 -5
  134. package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
  135. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
  136. package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
  137. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  138. package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
  139. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
  140. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
  141. package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
  142. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
  143. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
  144. package/lib/dependencies/HarmonyExportInitFragment.js +18 -15
  145. package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
  146. package/lib/dependencies/HarmonyExports.js +4 -1
  147. package/lib/dependencies/HarmonyImportDependency.js +24 -0
  148. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
  149. package/lib/dependencies/HarmonyImportGuard.js +254 -0
  150. package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
  151. package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
  152. package/lib/dependencies/HarmonyLinkingError.js +1 -0
  153. package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
  154. package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +261 -109
  155. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  156. package/lib/dependencies/HtmlInlineScriptDependency.js +17 -13
  157. package/lib/dependencies/HtmlInlineStyleDependency.js +45 -11
  158. package/lib/dependencies/ImportContextDependency.js +5 -9
  159. package/lib/dependencies/ImportDependency.js +44 -2
  160. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  161. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  162. package/lib/dependencies/ImportMetaPlugin.js +74 -30
  163. package/lib/dependencies/ImportParserPlugin.js +19 -0
  164. package/lib/dependencies/ImportWeakDependency.js +1 -0
  165. package/lib/dependencies/JsonExportsDependency.js +9 -9
  166. package/lib/dependencies/LoaderImportDependency.js +1 -0
  167. package/lib/dependencies/LocalModule.js +11 -12
  168. package/lib/dependencies/LocalModuleDependency.js +11 -13
  169. package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
  170. package/lib/dependencies/ModuleDependency.js +7 -0
  171. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  172. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  173. package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
  174. package/lib/dependencies/ProvidedDependency.js +31 -27
  175. package/lib/dependencies/PureExpressionDependency.js +7 -9
  176. package/lib/dependencies/RequireEnsureDependency.js +12 -13
  177. package/lib/dependencies/RequireHeaderDependency.js +3 -4
  178. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
  179. package/lib/dependencies/RequireResolveContextDependency.js +7 -11
  180. package/lib/dependencies/RequireResolveDependency.js +1 -0
  181. package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
  182. package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
  183. package/lib/dependencies/StaticExportsDependency.js +10 -10
  184. package/lib/dependencies/SystemPlugin.js +2 -0
  185. package/lib/dependencies/URLContextDependency.js +5 -7
  186. package/lib/dependencies/URLDependency.js +14 -16
  187. package/lib/dependencies/UnsupportedDependency.js +8 -13
  188. package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
  189. package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
  190. package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
  191. package/lib/dependencies/WorkerDependency.js +19 -8
  192. package/lib/dependencies/WorkerPlugin.js +22 -6
  193. package/lib/dependencies/processExportInfo.js +13 -11
  194. package/lib/dll/DelegatedModule.js +29 -15
  195. package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
  196. package/lib/dll/DelegatedPlugin.js +1 -0
  197. package/lib/dll/DllEntryPlugin.js +3 -0
  198. package/lib/dll/DllModule.js +3 -2
  199. package/lib/dll/DllPlugin.js +16 -0
  200. package/lib/dll/DllReferencePlugin.js +3 -0
  201. package/lib/dll/LibManifestPlugin.js +1 -0
  202. package/lib/electron/ElectronTargetPlugin.js +22 -4
  203. package/lib/errors/ConcurrentCompilationError.js +1 -0
  204. package/lib/errors/HookWebpackError.js +11 -13
  205. package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
  206. package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
  207. package/lib/errors/JSONParseError.js +9 -8
  208. package/lib/errors/ModuleBuildError.js +16 -13
  209. package/lib/errors/ModuleDependencyError.js +8 -1
  210. package/lib/errors/ModuleDependencyWarning.js +8 -1
  211. package/lib/errors/ModuleError.js +5 -11
  212. package/lib/errors/ModuleHashingError.js +4 -0
  213. package/lib/errors/ModuleNotFoundError.js +3 -0
  214. package/lib/errors/ModuleParseError.js +5 -11
  215. package/lib/errors/ModuleRestoreError.js +2 -0
  216. package/lib/errors/ModuleStoreError.js +3 -0
  217. package/lib/errors/ModuleWarning.js +7 -11
  218. package/lib/errors/NodeStuffInWebError.js +1 -0
  219. package/lib/errors/NonErrorEmittedError.js +2 -0
  220. package/lib/errors/UnhandledSchemeError.js +1 -0
  221. package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
  222. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
  223. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  224. package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
  225. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  226. package/lib/hmr/LazyCompilationPlugin.js +30 -6
  227. package/lib/html/HtmlGenerator.js +217 -23
  228. package/lib/html/HtmlModule.js +40 -0
  229. package/lib/html/HtmlModulesPlugin.js +219 -55
  230. package/lib/html/HtmlParser.js +1108 -1099
  231. package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
  232. package/lib/ids/IdHelpers.js +4 -2
  233. package/lib/index.js +19 -0
  234. package/lib/javascript/BasicEvaluatedExpression.js +1 -0
  235. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
  236. package/lib/javascript/JavascriptGenerator.js +6 -2
  237. package/lib/javascript/JavascriptModule.js +54 -0
  238. package/lib/javascript/JavascriptModulesPlugin.js +257 -102
  239. package/lib/javascript/JavascriptParser.js +285 -158
  240. package/lib/json/JsonModule.js +40 -0
  241. package/lib/json/JsonModulesPlugin.js +7 -0
  242. package/lib/json/JsonParser.js +4 -2
  243. package/lib/library/AssignLibraryPlugin.js +5 -3
  244. package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
  245. package/lib/library/FalseIIFEUmdWarning.js +1 -0
  246. package/lib/library/ModuleLibraryPlugin.js +24 -5
  247. package/lib/library/SystemLibraryPlugin.js +3 -3
  248. package/lib/node/NodeTargetPlugin.js +1 -0
  249. package/lib/node/NodeWatchFileSystem.js +1 -0
  250. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
  251. package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
  252. package/lib/optimize/ConcatenatedModule.js +395 -77
  253. package/lib/optimize/ConstExportsPlugin.js +211 -0
  254. package/lib/optimize/InlineExports.js +178 -0
  255. package/lib/optimize/InnerGraph.js +372 -275
  256. package/lib/optimize/InnerGraphPlugin.js +196 -99
  257. package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
  258. package/lib/optimize/RealContentHashPlugin.js +14 -1
  259. package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
  260. package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
  261. package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
  262. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
  263. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
  264. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
  265. package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
  266. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  267. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
  268. package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
  269. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
  270. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
  271. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  272. package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
  273. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
  274. package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
  275. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  276. package/lib/schemes/HttpUriPlugin.js +3 -2
  277. package/lib/serialization/AggregateErrorSerializer.js +7 -6
  278. package/lib/serialization/ArraySerializer.js +4 -8
  279. package/lib/serialization/BinaryMiddleware.js +538 -468
  280. package/lib/serialization/DateObjectSerializer.js +2 -2
  281. package/lib/serialization/ErrorObjectSerializer.js +7 -6
  282. package/lib/serialization/MapObjectSerializer.js +5 -9
  283. package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
  284. package/lib/serialization/ObjectMiddleware.js +50 -13
  285. package/lib/serialization/PlainObjectSerializer.js +9 -8
  286. package/lib/serialization/RegExpObjectSerializer.js +2 -2
  287. package/lib/serialization/Serializer.js +1 -0
  288. package/lib/serialization/SetObjectSerializer.js +4 -8
  289. package/lib/sharing/ConsumeSharedModule.js +6 -7
  290. package/lib/sharing/ConsumeSharedPlugin.js +1 -0
  291. package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
  292. package/lib/sharing/ProvideSharedDependency.js +30 -15
  293. package/lib/sharing/ProvideSharedModule.js +30 -11
  294. package/lib/sharing/ProvideSharedPlugin.js +4 -2
  295. package/lib/sharing/SharePlugin.js +3 -0
  296. package/lib/sharing/ShareRuntimeModule.js +18 -16
  297. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  298. package/lib/sharing/utils.js +1 -1
  299. package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
  300. package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
  301. package/lib/stats/StatsFactory.js +11 -9
  302. package/lib/stats/StatsPrinter.js +9 -2
  303. package/lib/url/URLParserPlugin.js +5 -2
  304. package/lib/util/AsyncQueue.js +10 -0
  305. package/lib/util/LazyBucketSortedSet.js +5 -0
  306. package/lib/util/LazySet.js +6 -4
  307. package/lib/util/LocConverter.js +11 -1
  308. package/lib/util/Semaphore.js +1 -0
  309. package/lib/util/SourceProcessor.js +106 -0
  310. package/lib/util/TupleSet.js +1 -0
  311. package/lib/util/WeakTupleMap.js +27 -1
  312. package/lib/util/chainedImports.js +3 -3
  313. package/lib/util/comparators.js +2 -2
  314. package/lib/util/concatenate.js +31 -7
  315. package/lib/util/createHash.js +0 -1
  316. package/lib/util/deterministicGrouping.js +19 -12
  317. package/lib/util/extractSourceMap.js +1 -1
  318. package/lib/util/findGraphRoots.js +2 -0
  319. package/lib/util/fs.js +10 -5
  320. package/lib/util/hash/DebugHash.js +1 -0
  321. package/lib/util/hash/hash-digest.js +24 -15
  322. package/lib/util/identifier.js +7 -0
  323. package/lib/util/internalSerializables.js +11 -2
  324. package/lib/util/magicComment.js +42 -0
  325. package/lib/util/makeSerializable.js +1 -0
  326. package/lib/util/nonNumericOnlyHash.js +30 -1
  327. package/lib/util/property.js +7 -1
  328. package/lib/util/publicPathPlaceholder.js +64 -0
  329. package/lib/util/registerExternalSerializer.js +4 -4
  330. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  331. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
  333. package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
  334. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
  335. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  336. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
  337. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
  338. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
  339. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  340. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
  341. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
  342. package/lib/wasm-sync/WebAssemblyParser.js +7 -3
  343. package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
  344. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
  345. package/package.json +35 -27
  346. package/schemas/WebpackOptions.check.js +1 -1
  347. package/schemas/WebpackOptions.json +212 -3
  348. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
  349. package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
  350. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  351. package/schemas/plugins/HtmlParserOptions.json +3 -0
  352. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  353. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  354. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  355. package/types.d.ts +1456 -290
  356. package/lib/css/walkCssTokens.js +0 -2020
  357. package/lib/util/AppendOnlyStackedSet.js +0 -93
@@ -10,11 +10,11 @@ const NullDependency = require("./NullDependency");
10
10
 
11
11
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
12
12
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
13
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
14
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
-
16
13
  /** @typedef {string[] | true} Exports */
17
14
 
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Exports, boolean]>} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Exports, boolean]>} ObjectSerializerContext */
17
+
18
18
  class StaticExportsDependency extends NullDependency {
19
19
  /**
20
20
  * Creates an instance of StaticExportsDependency.
@@ -23,7 +23,9 @@ class StaticExportsDependency extends NullDependency {
23
23
  */
24
24
  constructor(exports, canMangle) {
25
25
  super();
26
+ /** @type {Exports} */
26
27
  this.exports = exports;
28
+ /** @type {boolean} */
27
29
  this.canMangle = canMangle;
28
30
  }
29
31
 
@@ -49,9 +51,7 @@ class StaticExportsDependency extends NullDependency {
49
51
  * @param {ObjectSerializerContext} context context
50
52
  */
51
53
  serialize(context) {
52
- const { write } = context;
53
- write(this.exports);
54
- write(this.canMangle);
54
+ context.write(this.exports).write(this.canMangle);
55
55
  super.serialize(context);
56
56
  }
57
57
 
@@ -60,10 +60,10 @@ class StaticExportsDependency extends NullDependency {
60
60
  * @param {ObjectDeserializerContext} context context
61
61
  */
62
62
  deserialize(context) {
63
- const { read } = context;
64
- this.exports = read();
65
- this.canMangle = read();
66
- super.deserialize(context);
63
+ this.exports = context.read();
64
+ const c1 = context.rest;
65
+ this.canMangle = c1.read();
66
+ super.deserialize(c1.rest);
67
67
  }
68
68
  }
69
69
 
@@ -155,8 +155,10 @@ class SystemImportDeprecationWarning extends WebpackError {
155
155
  "For more info visit https://webpack.js.org/guides/code-splitting/"
156
156
  );
157
157
 
158
+ /** @type {string} */
158
159
  this.name = "SystemImportDeprecationWarning";
159
160
 
161
+ /** @type {DependencyLocation} */
160
162
  this.loc = loc;
161
163
  }
162
164
  }
@@ -11,8 +11,8 @@ const ContextDependencyTemplateAsRequireCall = require("./ContextDependencyTempl
11
11
 
12
12
  /** @typedef {import("../ContextModule").ContextOptions} ContextOptions */
13
13
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
14
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
15
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
14
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range]>} ObjectDeserializerContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range]>} ObjectSerializerContext */
16
16
 
17
17
  /** @typedef {ContextOptions & { request: string }} ContextDependencyOptions */
18
18
 
@@ -42,8 +42,7 @@ class URLContextDependency extends ContextDependency {
42
42
  * @param {ObjectSerializerContext} context context
43
43
  */
44
44
  serialize(context) {
45
- const { write } = context;
46
- write(this.valueRange);
45
+ context.write(this.valueRange);
47
46
  super.serialize(context);
48
47
  }
49
48
 
@@ -52,9 +51,8 @@ class URLContextDependency extends ContextDependency {
52
51
  * @param {ObjectDeserializerContext} context context
53
52
  */
54
53
  deserialize(context) {
55
- const { read } = context;
56
- this.valueRange = read();
57
- super.deserialize(context);
54
+ this.valueRange = context.read();
55
+ super.deserialize(context.rest);
58
56
  }
59
57
  }
60
58
 
@@ -22,8 +22,8 @@ const ModuleDependency = require("./ModuleDependency");
22
22
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
23
23
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
24
24
  /** @typedef {import("../optimize/InnerGraph").UsedByExports} UsedByExports */
25
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
26
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
25
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Range, boolean, UsedByExports | undefined]>} ObjectDeserializerContext */
26
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Range, boolean, UsedByExports | undefined]>} ObjectSerializerContext */
27
27
 
28
28
  const getIgnoredRawDataUrlModule = memoize(
29
29
  () => new RawDataUrlModule("data:,", "ignored-asset", "(ignored asset)")
@@ -41,6 +41,7 @@ class URLDependency extends ModuleDependency {
41
41
  super(request);
42
42
  this.range = range;
43
43
  this.outerRange = outerRange;
44
+ /** @type {boolean} */
44
45
  this.relative = relative || false;
45
46
  /** @type {UsedByExports | undefined} */
46
47
  this.usedByExports = undefined;
@@ -60,11 +61,7 @@ class URLDependency extends ModuleDependency {
60
61
  * @returns {null | false | GetConditionFn} function to determine if the connection is active
61
62
  */
62
63
  getCondition(moduleGraph) {
63
- return getDependencyUsedByExportsCondition(
64
- this,
65
- this.usedByExports,
66
- moduleGraph
67
- );
64
+ return getDependencyUsedByExportsCondition(this, moduleGraph);
68
65
  }
69
66
 
70
67
  /**
@@ -81,10 +78,10 @@ class URLDependency extends ModuleDependency {
81
78
  * @param {ObjectSerializerContext} context context
82
79
  */
83
80
  serialize(context) {
84
- const { write } = context;
85
- write(this.outerRange);
86
- write(this.relative);
87
- write(this.usedByExports);
81
+ context
82
+ .write(this.outerRange)
83
+ .write(this.relative)
84
+ .write(this.usedByExports);
88
85
  super.serialize(context);
89
86
  }
90
87
 
@@ -93,11 +90,12 @@ class URLDependency extends ModuleDependency {
93
90
  * @param {ObjectDeserializerContext} context context
94
91
  */
95
92
  deserialize(context) {
96
- const { read } = context;
97
- this.outerRange = read();
98
- this.relative = read();
99
- this.usedByExports = read();
100
- super.deserialize(context);
93
+ this.outerRange = context.read();
94
+ const c1 = context.rest;
95
+ this.relative = c1.read();
96
+ const c2 = c1.rest;
97
+ this.usedByExports = c2.read();
98
+ super.deserialize(c2.rest);
101
99
  }
102
100
  }
103
101
 
@@ -12,8 +12,8 @@ const NullDependency = require("./NullDependency");
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
14
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
15
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, Range]>} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, Range]>} ObjectSerializerContext */
17
17
 
18
18
  class UnsupportedDependency extends NullDependency {
19
19
  /**
@@ -24,6 +24,7 @@ class UnsupportedDependency extends NullDependency {
24
24
  constructor(request, range) {
25
25
  super();
26
26
 
27
+ /** @type {string} */
27
28
  this.request = request;
28
29
  this.range = range;
29
30
  }
@@ -33,11 +34,7 @@ class UnsupportedDependency extends NullDependency {
33
34
  * @param {ObjectSerializerContext} context context
34
35
  */
35
36
  serialize(context) {
36
- const { write } = context;
37
-
38
- write(this.request);
39
- write(this.range);
40
-
37
+ context.write(this.request).write(this.range);
41
38
  super.serialize(context);
42
39
  }
43
40
 
@@ -46,12 +43,10 @@ class UnsupportedDependency extends NullDependency {
46
43
  * @param {ObjectDeserializerContext} context context
47
44
  */
48
45
  deserialize(context) {
49
- const { read } = context;
50
-
51
- this.request = read();
52
- this.range = read();
53
-
54
- super.deserialize(context);
46
+ this.request = context.read();
47
+ const c1 = context.rest;
48
+ this.range = c1.read();
49
+ super.deserialize(c1.rest);
55
50
  }
56
51
  }
57
52
 
@@ -12,8 +12,8 @@ const ModuleDependency = require("./ModuleDependency");
12
12
  /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
13
13
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
16
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
15
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, string, string]>} ObjectDeserializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, string, string]>} ObjectSerializerContext */
17
17
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
18
18
 
19
19
  class WebAssemblyExportImportedDependency extends ModuleDependency {
@@ -49,7 +49,8 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
49
49
  * @returns {ReferencedExports} referenced exports
50
50
  */
51
51
  getReferencedExports(moduleGraph, runtime) {
52
- return [[this.name]];
52
+ // re-exporting wasm glue needs the real binding, never an inlined literal
53
+ return [{ name: [this.name], canInline: false }];
53
54
  }
54
55
 
55
56
  get type() {
@@ -65,12 +66,7 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
65
66
  * @param {ObjectSerializerContext} context context
66
67
  */
67
68
  serialize(context) {
68
- const { write } = context;
69
-
70
- write(this.exportName);
71
- write(this.name);
72
- write(this.valueType);
73
-
69
+ context.write(this.exportName).write(this.name).write(this.valueType);
74
70
  super.serialize(context);
75
71
  }
76
72
 
@@ -79,13 +75,12 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
79
75
  * @param {ObjectDeserializerContext} context context
80
76
  */
81
77
  deserialize(context) {
82
- const { read } = context;
83
-
84
- this.exportName = read();
85
- this.name = read();
86
- this.valueType = read();
87
-
88
- super.deserialize(context);
78
+ this.exportName = context.read();
79
+ const c1 = context.rest;
80
+ this.name = c1.read();
81
+ const c2 = c1.rest;
82
+ this.valueType = c2.read();
83
+ super.deserialize(c2.rest);
89
84
  }
90
85
  }
91
86
 
@@ -13,8 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
13
13
  /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
15
  /** @typedef {import("../errors/WebpackError")} WebpackError */
16
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, ModuleImportDescription, false | string]>} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, ModuleImportDescription, false | string]>} ObjectSerializerContext */
18
18
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
19
 
20
20
  class WebAssemblyImportDependency extends ModuleDependency {
@@ -50,7 +50,8 @@ class WebAssemblyImportDependency extends ModuleDependency {
50
50
  * @returns {ReferencedExports} referenced exports
51
51
  */
52
52
  getReferencedExports(moduleGraph, runtime) {
53
- return [[this.name]];
53
+ // wasm import glue needs the real binding, never an inlined literal
54
+ return [{ name: [this.name], canInline: false }];
54
55
  }
55
56
 
56
57
  /**
@@ -79,12 +80,10 @@ class WebAssemblyImportDependency extends ModuleDependency {
79
80
  * @param {ObjectSerializerContext} context context
80
81
  */
81
82
  serialize(context) {
82
- const { write } = context;
83
-
84
- write(this.name);
85
- write(this.description);
86
- write(this.onlyDirectImport);
87
-
83
+ context
84
+ .write(this.name)
85
+ .write(this.description)
86
+ .write(this.onlyDirectImport);
88
87
  super.serialize(context);
89
88
  }
90
89
 
@@ -93,13 +92,12 @@ class WebAssemblyImportDependency extends ModuleDependency {
93
92
  * @param {ObjectDeserializerContext} context context
94
93
  */
95
94
  deserialize(context) {
96
- const { read } = context;
97
-
98
- this.name = read();
99
- this.description = read();
100
- this.onlyDirectImport = read();
101
-
102
- super.deserialize(context);
95
+ this.name = context.read();
96
+ const c1 = context.rest;
97
+ this.description = c1.read();
98
+ const c2 = c1.rest;
99
+ this.onlyDirectImport = c2.read();
100
+ super.deserialize(c2.rest);
103
101
  }
104
102
  }
105
103
 
@@ -26,6 +26,7 @@ class WebpackIsIncludedDependency extends ModuleDependency {
26
26
  constructor(request, range) {
27
27
  super(request);
28
28
 
29
+ /** @type {boolean} */
29
30
  this.weak = true;
30
31
  this.range = range;
31
32
  }
@@ -18,8 +18,8 @@ const ModuleDependency = require("./ModuleDependency");
18
18
  /** @typedef {import("../Entrypoint")} Entrypoint */
19
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
20
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
21
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[WorkerDependencyOptions]>} ObjectDeserializerContext */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[WorkerDependencyOptions]>} ObjectSerializerContext */
23
23
  /** @typedef {import("../util/Hash")} Hash */
24
24
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
25
25
 
@@ -28,6 +28,7 @@ const ModuleDependency = require("./ModuleDependency");
28
28
  * @typedef {object} WorkerDependencyOptions
29
29
  * @property {string=} publicPath public path for the worker
30
30
  * @property {boolean=} needNewUrl true when need generate `new URL(...)`, otherwise false
31
+ * @property {Range=} workerConstructorRange range of the global `Worker` constructor, set only for the `new Worker()` global syntax that needs a node-target rewrite
31
32
  */
32
33
 
33
34
  class WorkerDependency extends ModuleDependency {
@@ -84,8 +85,7 @@ class WorkerDependency extends ModuleDependency {
84
85
  * @param {ObjectSerializerContext} context context
85
86
  */
86
87
  serialize(context) {
87
- const { write } = context;
88
- write(this.options);
88
+ context.write(this.options);
89
89
  super.serialize(context);
90
90
  }
91
91
 
@@ -94,9 +94,8 @@ class WorkerDependency extends ModuleDependency {
94
94
  * @param {ObjectDeserializerContext} context context
95
95
  */
96
96
  deserialize(context) {
97
- const { read } = context;
98
- this.options = read();
99
- super.deserialize(context);
97
+ this.options = context.read();
98
+ super.deserialize(context.rest);
100
99
  }
101
100
  }
102
101
 
@@ -111,7 +110,8 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
111
110
  * @returns {void}
112
111
  */
113
112
  apply(dependency, source, templateContext) {
114
- const { chunkGraph, moduleGraph, runtimeRequirements } = templateContext;
113
+ const { chunkGraph, moduleGraph, runtimeRequirements, runtimeTemplate } =
114
+ templateContext;
115
115
  const dep = /** @type {WorkerDependency} */ (dependency);
116
116
  const block = /** @type {AsyncDependenciesBlock} */ (
117
117
  moduleGraph.getParentBlock(dependency)
@@ -138,6 +138,17 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
138
138
  dep.range[1] - 1,
139
139
  dep.options.needNewUrl ? `new URL(${workerImportStr})` : workerImportStr
140
140
  );
141
+
142
+ // `Worker` is global only on the web, so route node (universal or node-only) through `worker_threads`
143
+ const { platform } = runtimeTemplate.compilation.compiler;
144
+ const ctorRange = dep.options.workerConstructorRange;
145
+ if (
146
+ ctorRange &&
147
+ (runtimeTemplate.isUniversalTarget() || (platform.node && !platform.web))
148
+ ) {
149
+ runtimeRequirements.add(RuntimeGlobals.worker);
150
+ source.replace(ctorRange[0], ctorRange[1] - 1, RuntimeGlobals.worker);
151
+ }
141
152
  }
142
153
  };
143
154
 
@@ -77,9 +77,13 @@ class WorkerPlugin {
77
77
  * @param {WorkerPublicPath=} workerPublicPath worker public path
78
78
  */
79
79
  constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
80
+ /** @type {ChunkLoading | undefined} */
80
81
  this._chunkLoading = chunkLoading;
82
+ /** @type {WasmLoading | undefined} */
81
83
  this._wasmLoading = wasmLoading;
84
+ /** @type {boolean | undefined} */
82
85
  this._module = module;
86
+ /** @type {string | undefined} */
83
87
  this._workerPublicPath = workerPublicPath;
84
88
  }
85
89
 
@@ -255,9 +259,10 @@ class WorkerPlugin {
255
259
  /**
256
260
  * Returns true when handled.
257
261
  * @param {CallExpression} expr expression
262
+ * @param {boolean=} isGlobalWorker matched the global `new Worker()` syntax (eligible for universal rewrite)
258
263
  * @returns {boolean | void} true when handled
259
264
  */
260
- const handleNewWorker = (expr) => {
265
+ const handleNewWorker = (expr, isGlobalWorker = false) => {
261
266
  if (expr.arguments.length === 0 || expr.arguments.length > 2) {
262
267
  return;
263
268
  }
@@ -412,13 +417,17 @@ class WorkerPlugin {
412
417
  entryOptions: {
413
418
  chunkLoading: this._chunkLoading,
414
419
  wasmLoading: this._wasmLoading,
415
- ...entryOptions
420
+ ...entryOptions,
421
+ worker: true
416
422
  }
417
423
  });
418
424
  block.loc = expr.loc;
419
425
  const dep = new WorkerDependency(url, range, {
420
426
  publicPath: this._workerPublicPath,
421
- needNewUrl
427
+ needNewUrl,
428
+ workerConstructorRange: isGlobalWorker
429
+ ? /** @type {Range} */ (expr.callee.range)
430
+ : undefined
422
431
  });
423
432
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
424
433
  block.addDependency(dep);
@@ -454,12 +463,15 @@ class WorkerPlugin {
454
463
  parser.state.module.addPresentationalDependency(dep);
455
464
  }
456
465
  } else if (insertType === "spread") {
466
+ const type = this._module ? '"module"' : "undefined";
467
+ // `{ ...(opts), type }` is equivalent to `Object.assign({}, opts, { type })`
468
+ const useSpread = compilation.outputOptions.environment.spread;
457
469
  const dep1 = new ConstDependency(
458
- "Object.assign({}, ",
470
+ useSpread ? "{ ...(" : "Object.assign({}, ",
459
471
  /** @type {Range} */ (insertLocation)[0]
460
472
  );
461
473
  const dep2 = new ConstDependency(
462
- `, { type: ${this._module ? '"module"' : "undefined"} })`,
474
+ useSpread ? `), type: ${type} }` : `, { type: ${type} })`,
463
475
  /** @type {Range} */ (insertLocation)[1]
464
476
  );
465
477
  dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
@@ -559,7 +571,11 @@ class WorkerPlugin {
559
571
  return handleNewWorker(expr);
560
572
  });
561
573
  } else {
562
- parser.hooks.new.for(item).tap(PLUGIN_NAME, handleNewWorker);
574
+ parser.hooks.new
575
+ .for(item)
576
+ .tap(PLUGIN_NAME, (expr) =>
577
+ handleNewWorker(expr, item === "Worker")
578
+ );
563
579
  }
564
580
  }
565
581
  };
@@ -18,7 +18,7 @@ const { UsageState } = require("../ExportsInfo");
18
18
  * @param {string[]} prefix export prefix
19
19
  * @param {ExportInfo=} exportInfo the export info
20
20
  * @param {boolean} defaultPointsToSelf when true, using default will reference itself
21
- * @param {Set<ExportInfo>} alreadyVisited already visited export info (to handle circular reexports)
21
+ * @param {Set<ExportInfo>=} alreadyVisited already visited export info (to handle circular reexports)
22
22
  */
23
23
  const processExportInfo = (
24
24
  runtime,
@@ -26,7 +26,7 @@ const processExportInfo = (
26
26
  prefix,
27
27
  exportInfo,
28
28
  defaultPointsToSelf = false,
29
- alreadyVisited = new Set()
29
+ alreadyVisited = undefined
30
30
  ) => {
31
31
  if (!exportInfo) {
32
32
  referencedExports.push(prefix);
@@ -34,35 +34,37 @@ const processExportInfo = (
34
34
  }
35
35
  const used = exportInfo.getUsed(runtime);
36
36
  if (used === UsageState.Unused) return;
37
- if (alreadyVisited.has(exportInfo)) {
37
+ if (alreadyVisited !== undefined && alreadyVisited.has(exportInfo)) {
38
38
  referencedExports.push(prefix);
39
39
  return;
40
40
  }
41
- alreadyVisited.add(exportInfo);
41
+ // Terminal case: not recursing, so no need to track visited here
42
42
  if (
43
43
  used !== UsageState.OnlyPropertiesUsed ||
44
44
  !exportInfo.exportsInfo ||
45
45
  exportInfo.exportsInfo.otherExportsInfo.getUsed(runtime) !==
46
46
  UsageState.Unused
47
47
  ) {
48
- alreadyVisited.delete(exportInfo);
49
48
  referencedExports.push(prefix);
50
49
  return;
51
50
  }
51
+ // Only the recursive path needs the visited set; allocate it lazily
52
+ const visited = alreadyVisited !== undefined ? alreadyVisited : new Set();
53
+ visited.add(exportInfo);
52
54
  const exportsInfo = exportInfo.exportsInfo;
53
- for (const exportInfo of exportsInfo.orderedExports) {
55
+ for (const childExportInfo of exportsInfo.orderedExports) {
54
56
  processExportInfo(
55
57
  runtime,
56
58
  referencedExports,
57
- defaultPointsToSelf && exportInfo.name === "default"
59
+ defaultPointsToSelf && childExportInfo.name === "default"
58
60
  ? prefix
59
- : [...prefix, exportInfo.name],
60
- exportInfo,
61
+ : [...prefix, childExportInfo.name],
62
+ childExportInfo,
61
63
  false,
62
- alreadyVisited
64
+ visited
63
65
  );
64
66
  }
65
- alreadyVisited.delete(exportInfo);
67
+ visited.delete(exportInfo);
66
68
  };
67
69
 
68
70
  module.exports = processExportInfo;
@@ -36,8 +36,8 @@ const makeSerializable = require("../util/makeSerializable");
36
36
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
37
37
  /** @typedef {import("../RequestShortener")} RequestShortener */
38
38
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
39
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
40
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
39
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[DelegatedModuleSourceRequest, DelegatedModuleData, DelegatedModuleType, string, string | Module]>} ObjectDeserializerContext */
40
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[DelegatedModuleSourceRequest, DelegatedModuleData, DelegatedModuleType, string, string | Module]>} ObjectSerializerContext */
41
41
  /** @typedef {import("../dependencies/StaticExportsDependency").Exports} Exports */
42
42
  /** @typedef {import("../util/Hash")} Hash */
43
43
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
@@ -72,11 +72,17 @@ class DelegatedModule extends Module {
72
72
  super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
73
73
 
74
74
  // Info from Factory
75
+ /** @type {string} */
75
76
  this.sourceRequest = sourceRequest;
77
+ /** @type {ModuleId} */
76
78
  this.request = data.id;
79
+ /** @type {DelegatedModuleType} */
77
80
  this.delegationType = type;
81
+ /** @type {string} */
78
82
  this.userRequest = userRequest;
83
+ /** @type {string | Module} */
79
84
  this.originalRequest = originalRequest;
85
+ /** @type {DelegatedModuleData} */
80
86
  this.delegateData = data;
81
87
 
82
88
  // Build info
@@ -232,13 +238,13 @@ class DelegatedModule extends Module {
232
238
  * @param {ObjectSerializerContext} context context
233
239
  */
234
240
  serialize(context) {
235
- const { write } = context;
236
241
  // constructor
237
- write(this.sourceRequest);
238
- write(this.delegateData);
239
- write(this.delegationType);
240
- write(this.userRequest);
241
- write(this.originalRequest);
242
+ context
243
+ .write(this.sourceRequest)
244
+ .write(this.delegateData)
245
+ .write(this.delegationType)
246
+ .write(this.userRequest)
247
+ .write(this.originalRequest);
242
248
  super.serialize(context);
243
249
  }
244
250
 
@@ -248,15 +254,23 @@ class DelegatedModule extends Module {
248
254
  * @returns {DelegatedModule} DelegatedModule
249
255
  */
250
256
  static deserialize(context) {
251
- const { read } = context;
257
+ const sourceRequest = context.read();
258
+ const c1 = context.rest;
259
+ const delegateData = c1.read();
260
+ const c2 = c1.rest;
261
+ const delegationType = c2.read();
262
+ const c3 = c2.rest;
263
+ const userRequest = c3.read();
264
+ const c4 = c3.rest;
265
+ const originalRequest = c4.read();
252
266
  const obj = new DelegatedModule(
253
- read(), // sourceRequest
254
- read(), // delegateData
255
- read(), // delegationType
256
- read(), // userRequest
257
- read() // originalRequest
267
+ sourceRequest,
268
+ delegateData,
269
+ delegationType,
270
+ userRequest,
271
+ originalRequest
258
272
  );
259
- obj.deserialize(context);
273
+ obj.deserialize(c4.rest);
260
274
  return obj;
261
275
  }
262
276
 
@@ -35,6 +35,7 @@ class DelegatedModuleFactoryPlugin {
35
35
  * @param {Options} options options
36
36
  */
37
37
  constructor(options) {
38
+ /** @type {Options} */
38
39
  this.options = options;
39
40
  options.type = options.type || "require";
40
41
  options.extensions = options.extensions || ["", ".js", ".json", ".wasm"];
@@ -19,6 +19,7 @@ class DelegatedPlugin {
19
19
  * @param {Options} options options
20
20
  */
21
21
  constructor(options) {
22
+ /** @type {Options} */
22
23
  this.options = options;
23
24
  }
24
25
 
@@ -25,8 +25,11 @@ class DllEntryPlugin {
25
25
  * @param {Options} options options
26
26
  */
27
27
  constructor(context, entries, options) {
28
+ /** @type {string} */
28
29
  this.context = context;
30
+ /** @type {Entries} */
29
31
  this.entries = entries;
32
+ /** @type {Options} */
30
33
  this.options = options;
31
34
  }
32
35