webpack 5.107.1 → 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 (360) 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 +52 -14
  10. package/lib/ConcatenationScope.js +10 -3
  11. package/lib/ContextExclusionPlugin.js +1 -0
  12. package/lib/ContextModule.js +92 -47
  13. package/lib/ContextModuleFactory.js +45 -38
  14. package/lib/ContextReplacementPlugin.js +4 -0
  15. package/lib/DefinePlugin.js +89 -15
  16. package/lib/Dependency.js +111 -7
  17. package/lib/EntryOptionPlugin.js +39 -2
  18. package/lib/EntryPlugin.js +2 -0
  19. package/lib/ExportsInfo.js +314 -73
  20. package/lib/ExternalModule.js +82 -34
  21. package/lib/ExternalModuleFactoryPlugin.js +1 -0
  22. package/lib/ExternalsPlugin.js +1 -0
  23. package/lib/FileSystemInfo.js +173 -23
  24. package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
  25. package/lib/FlagDependencyExportsPlugin.js +23 -0
  26. package/lib/FlagDependencyUsagePlugin.js +87 -5
  27. package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
  28. package/lib/Generator.js +8 -0
  29. package/lib/HotModuleReplacementPlugin.js +65 -28
  30. package/lib/IgnorePlugin.js +1 -0
  31. package/lib/InitFragment.js +5 -0
  32. package/lib/JavascriptMetaInfoPlugin.js +7 -5
  33. package/lib/LazyBarrel.js +361 -0
  34. package/lib/LoaderTargetPlugin.js +1 -0
  35. package/lib/Module.js +21 -42
  36. package/lib/ModuleGraph.js +3 -2
  37. package/lib/ModuleProfile.js +27 -1
  38. package/lib/ModuleTemplate.js +2 -0
  39. package/lib/MultiCompiler.js +16 -0
  40. package/lib/MultiStats.js +1 -0
  41. package/lib/MultiWatching.js +2 -0
  42. package/lib/NodeStuffPlugin.js +22 -17
  43. package/lib/NormalModule.js +557 -77
  44. package/lib/NormalModuleReplacementPlugin.js +2 -0
  45. package/lib/PrefetchPlugin.js +2 -0
  46. package/lib/ProgressPlugin.js +9 -1
  47. package/lib/ProvidePlugin.js +1 -0
  48. package/lib/RawModule.js +20 -16
  49. package/lib/RecordIdsPlugin.js +1 -0
  50. package/lib/RuntimeGlobals.js +5 -0
  51. package/lib/RuntimePlugin.js +58 -26
  52. package/lib/RuntimeTemplate.js +278 -21
  53. package/lib/SelfModuleFactory.js +1 -0
  54. package/lib/SourceMapDevToolPlugin.js +105 -30
  55. package/lib/Stats.js +1 -0
  56. package/lib/Template.js +8 -2
  57. package/lib/TemplatedPathPlugin.js +473 -131
  58. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
  59. package/lib/WarnDeprecatedOptionPlugin.js +4 -0
  60. package/lib/WarnNoModeSetPlugin.js +1 -0
  61. package/lib/WatchIgnorePlugin.js +1 -0
  62. package/lib/Watching.js +9 -0
  63. package/lib/WebpackOptionsApply.js +50 -5
  64. package/lib/asset/AssetBytesGenerator.js +11 -3
  65. package/lib/asset/AssetGenerator.js +47 -22
  66. package/lib/asset/AssetModule.js +47 -0
  67. package/lib/asset/AssetModulesPlugin.js +14 -14
  68. package/lib/asset/AssetParser.js +2 -2
  69. package/lib/asset/AssetSourceGenerator.js +8 -0
  70. package/lib/asset/RawDataUrlModule.js +12 -13
  71. package/lib/buildChunkGraph.js +88 -9
  72. package/lib/bun/BunTargetPlugin.js +48 -0
  73. package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
  74. package/lib/cache/AddManagedPathsPlugin.js +3 -0
  75. package/lib/cache/IdleFileCachePlugin.js +4 -0
  76. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  77. package/lib/cache/PackFileCacheStrategy.js +1 -0
  78. package/lib/cache/ResolverCachePlugin.js +2 -0
  79. package/lib/cache/getLazyHashedEtag.js +9 -2
  80. package/lib/cache/mergeEtags.js +2 -0
  81. package/lib/cli.js +109 -19
  82. package/lib/config/browserslistTargetHandler.js +99 -0
  83. package/lib/config/defaults.js +147 -7
  84. package/lib/config/defineConfig.js +31 -0
  85. package/lib/config/normalization.js +5 -0
  86. package/lib/config/target.js +181 -2
  87. package/lib/container/ContainerEntryModule.js +15 -14
  88. package/lib/container/ContainerExposedDependency.js +2 -2
  89. package/lib/container/ContainerReferencePlugin.js +1 -1
  90. package/lib/container/FallbackDependency.js +5 -7
  91. package/lib/container/FallbackModule.js +10 -9
  92. package/lib/container/RemoteModule.js +20 -10
  93. package/lib/container/RemoteRuntimeModule.js +14 -12
  94. package/lib/css/CssGenerator.js +353 -327
  95. package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
  96. package/lib/css/CssLoadingRuntimeModule.js +118 -47
  97. package/lib/css/CssModule.js +52 -23
  98. package/lib/css/CssModulesPlugin.js +107 -124
  99. package/lib/css/CssParser.js +2759 -2205
  100. package/lib/css/syntax.js +2859 -0
  101. package/lib/debug/ProfilingPlugin.js +2 -0
  102. package/lib/deno/DenoTargetPlugin.js +47 -0
  103. package/lib/dependencies/AMDDefineDependency.js +22 -17
  104. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
  105. package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
  106. package/lib/dependencies/AMDRequireContextDependency.js +7 -11
  107. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
  108. package/lib/dependencies/AMDRequireDependency.js +24 -20
  109. package/lib/dependencies/CachedConstDependency.js +3 -0
  110. package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
  111. package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
  112. package/lib/dependencies/CommonJsExportsDependency.js +21 -16
  113. package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
  114. package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
  115. package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
  116. package/lib/dependencies/CommonJsPlugin.js +1 -1
  117. package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
  118. package/lib/dependencies/CommonJsRequireDependency.js +42 -11
  119. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
  120. package/lib/dependencies/ConstDependency.js +16 -11
  121. package/lib/dependencies/ContextDependency.js +4 -0
  122. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
  123. package/lib/dependencies/ContextElementDependency.js +23 -14
  124. package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
  125. package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
  126. package/lib/dependencies/CriticalDependencyWarning.js +1 -0
  127. package/lib/dependencies/CssIcssExportDependency.js +512 -574
  128. package/lib/dependencies/CssIcssImportDependency.js +9 -9
  129. package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
  130. package/lib/dependencies/CssImportDependency.js +25 -1
  131. package/lib/dependencies/CssUrlDependency.js +23 -14
  132. package/lib/dependencies/DllEntryDependency.js +9 -13
  133. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  134. package/lib/dependencies/ExportsInfoDependency.js +12 -12
  135. package/lib/dependencies/ExternalModuleDependency.js +8 -5
  136. package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
  137. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
  138. package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
  139. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  140. package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
  141. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
  142. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
  143. package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
  144. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
  145. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
  146. package/lib/dependencies/HarmonyExportInitFragment.js +22 -20
  147. package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
  148. package/lib/dependencies/HarmonyExports.js +4 -1
  149. package/lib/dependencies/HarmonyImportDependency.js +24 -0
  150. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
  151. package/lib/dependencies/HarmonyImportGuard.js +254 -0
  152. package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
  153. package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
  154. package/lib/dependencies/HarmonyLinkingError.js +1 -0
  155. package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
  156. package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +267 -154
  157. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  158. package/lib/dependencies/HtmlInlineScriptDependency.js +20 -27
  159. package/lib/dependencies/HtmlInlineStyleDependency.js +62 -11
  160. package/lib/dependencies/HtmlSourceDependency.js +18 -0
  161. package/lib/dependencies/ImportContextDependency.js +5 -9
  162. package/lib/dependencies/ImportDependency.js +44 -2
  163. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  164. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  165. package/lib/dependencies/ImportMetaPlugin.js +74 -30
  166. package/lib/dependencies/ImportParserPlugin.js +19 -0
  167. package/lib/dependencies/ImportWeakDependency.js +1 -0
  168. package/lib/dependencies/JsonExportsDependency.js +9 -9
  169. package/lib/dependencies/LoaderImportDependency.js +1 -0
  170. package/lib/dependencies/LocalModule.js +11 -12
  171. package/lib/dependencies/LocalModuleDependency.js +11 -13
  172. package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
  173. package/lib/dependencies/ModuleDependency.js +7 -0
  174. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  175. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  176. package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
  177. package/lib/dependencies/ProvidedDependency.js +31 -27
  178. package/lib/dependencies/PureExpressionDependency.js +7 -9
  179. package/lib/dependencies/RequireEnsureDependency.js +12 -13
  180. package/lib/dependencies/RequireHeaderDependency.js +3 -4
  181. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
  182. package/lib/dependencies/RequireResolveContextDependency.js +7 -11
  183. package/lib/dependencies/RequireResolveDependency.js +1 -0
  184. package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
  185. package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
  186. package/lib/dependencies/StaticExportsDependency.js +10 -10
  187. package/lib/dependencies/SystemPlugin.js +2 -0
  188. package/lib/dependencies/URLContextDependency.js +5 -7
  189. package/lib/dependencies/URLDependency.js +14 -16
  190. package/lib/dependencies/UnsupportedDependency.js +8 -13
  191. package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
  192. package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
  193. package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
  194. package/lib/dependencies/WorkerDependency.js +19 -8
  195. package/lib/dependencies/WorkerPlugin.js +40 -10
  196. package/lib/dependencies/processExportInfo.js +13 -11
  197. package/lib/dll/DelegatedModule.js +29 -15
  198. package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
  199. package/lib/dll/DelegatedPlugin.js +1 -0
  200. package/lib/dll/DllEntryPlugin.js +3 -0
  201. package/lib/dll/DllModule.js +3 -2
  202. package/lib/dll/DllPlugin.js +16 -0
  203. package/lib/dll/DllReferencePlugin.js +3 -0
  204. package/lib/dll/LibManifestPlugin.js +1 -0
  205. package/lib/electron/ElectronTargetPlugin.js +22 -4
  206. package/lib/errors/ConcurrentCompilationError.js +1 -0
  207. package/lib/errors/HookWebpackError.js +11 -13
  208. package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
  209. package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
  210. package/lib/errors/JSONParseError.js +9 -8
  211. package/lib/errors/ModuleBuildError.js +16 -13
  212. package/lib/errors/ModuleDependencyError.js +8 -1
  213. package/lib/errors/ModuleDependencyWarning.js +8 -1
  214. package/lib/errors/ModuleError.js +5 -11
  215. package/lib/errors/ModuleHashingError.js +4 -0
  216. package/lib/errors/ModuleNotFoundError.js +3 -0
  217. package/lib/errors/ModuleParseError.js +5 -11
  218. package/lib/errors/ModuleRestoreError.js +2 -0
  219. package/lib/errors/ModuleStoreError.js +3 -0
  220. package/lib/errors/ModuleWarning.js +7 -11
  221. package/lib/errors/NodeStuffInWebError.js +1 -0
  222. package/lib/errors/NonErrorEmittedError.js +2 -0
  223. package/lib/errors/UnhandledSchemeError.js +1 -0
  224. package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
  225. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
  226. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  227. package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
  228. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  229. package/lib/hmr/LazyCompilationPlugin.js +134 -6
  230. package/lib/html/HtmlGenerator.js +292 -50
  231. package/lib/html/HtmlModule.js +40 -0
  232. package/lib/html/HtmlModulesPlugin.js +287 -60
  233. package/lib/html/HtmlParser.js +1108 -1099
  234. package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
  235. package/lib/ids/IdHelpers.js +4 -2
  236. package/lib/index.js +19 -0
  237. package/lib/javascript/BasicEvaluatedExpression.js +1 -0
  238. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
  239. package/lib/javascript/JavascriptGenerator.js +6 -2
  240. package/lib/javascript/JavascriptModule.js +54 -0
  241. package/lib/javascript/JavascriptModulesPlugin.js +257 -102
  242. package/lib/javascript/JavascriptParser.js +286 -159
  243. package/lib/json/JsonModule.js +40 -0
  244. package/lib/json/JsonModulesPlugin.js +7 -0
  245. package/lib/json/JsonParser.js +4 -2
  246. package/lib/library/AssignLibraryPlugin.js +5 -3
  247. package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
  248. package/lib/library/FalseIIFEUmdWarning.js +1 -0
  249. package/lib/library/ModuleLibraryPlugin.js +54 -29
  250. package/lib/library/SystemLibraryPlugin.js +3 -3
  251. package/lib/node/NodeTargetPlugin.js +1 -0
  252. package/lib/node/NodeWatchFileSystem.js +38 -22
  253. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
  254. package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
  255. package/lib/optimize/ConcatenatedModule.js +397 -78
  256. package/lib/optimize/ConstExportsPlugin.js +211 -0
  257. package/lib/optimize/InlineExports.js +178 -0
  258. package/lib/optimize/InnerGraph.js +372 -275
  259. package/lib/optimize/InnerGraphPlugin.js +196 -99
  260. package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
  261. package/lib/optimize/RealContentHashPlugin.js +14 -1
  262. package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
  263. package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
  264. package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
  265. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
  266. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
  267. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
  268. package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
  269. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  270. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
  271. package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
  272. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
  273. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
  274. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  275. package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
  276. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
  277. package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
  278. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  279. package/lib/schemes/HttpUriPlugin.js +3 -2
  280. package/lib/serialization/AggregateErrorSerializer.js +7 -6
  281. package/lib/serialization/ArraySerializer.js +4 -8
  282. package/lib/serialization/BinaryMiddleware.js +538 -468
  283. package/lib/serialization/DateObjectSerializer.js +2 -2
  284. package/lib/serialization/ErrorObjectSerializer.js +7 -6
  285. package/lib/serialization/MapObjectSerializer.js +5 -9
  286. package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
  287. package/lib/serialization/ObjectMiddleware.js +50 -13
  288. package/lib/serialization/PlainObjectSerializer.js +9 -8
  289. package/lib/serialization/RegExpObjectSerializer.js +2 -2
  290. package/lib/serialization/Serializer.js +1 -0
  291. package/lib/serialization/SetObjectSerializer.js +4 -8
  292. package/lib/sharing/ConsumeSharedModule.js +6 -7
  293. package/lib/sharing/ConsumeSharedPlugin.js +1 -0
  294. package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
  295. package/lib/sharing/ProvideSharedDependency.js +30 -15
  296. package/lib/sharing/ProvideSharedModule.js +30 -11
  297. package/lib/sharing/ProvideSharedPlugin.js +4 -2
  298. package/lib/sharing/SharePlugin.js +3 -0
  299. package/lib/sharing/ShareRuntimeModule.js +18 -16
  300. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  301. package/lib/sharing/utils.js +1 -1
  302. package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
  303. package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
  304. package/lib/stats/StatsFactory.js +11 -9
  305. package/lib/stats/StatsPrinter.js +9 -2
  306. package/lib/url/URLParserPlugin.js +5 -2
  307. package/lib/util/AsyncQueue.js +10 -0
  308. package/lib/util/LazyBucketSortedSet.js +5 -0
  309. package/lib/util/LazySet.js +6 -4
  310. package/lib/util/LocConverter.js +11 -1
  311. package/lib/util/Semaphore.js +1 -0
  312. package/lib/util/SourceProcessor.js +106 -0
  313. package/lib/util/TupleSet.js +1 -0
  314. package/lib/util/WeakTupleMap.js +27 -1
  315. package/lib/util/chainedImports.js +3 -3
  316. package/lib/util/comparators.js +2 -2
  317. package/lib/util/concatenate.js +31 -7
  318. package/lib/util/createHash.js +0 -1
  319. package/lib/util/deterministicGrouping.js +19 -12
  320. package/lib/util/extractSourceMap.js +1 -1
  321. package/lib/util/findGraphRoots.js +2 -0
  322. package/lib/util/fs.js +16 -6
  323. package/lib/util/hash/DebugHash.js +1 -0
  324. package/lib/util/hash/hash-digest.js +24 -15
  325. package/lib/util/identifier.js +7 -0
  326. package/lib/util/internalSerializables.js +11 -2
  327. package/lib/util/magicComment.js +42 -0
  328. package/lib/util/makeSerializable.js +1 -0
  329. package/lib/util/nonNumericOnlyHash.js +30 -1
  330. package/lib/util/property.js +7 -1
  331. package/lib/util/publicPathPlaceholder.js +64 -0
  332. package/lib/util/registerExternalSerializer.js +4 -4
  333. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  334. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
  336. package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
  337. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
  338. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  339. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
  340. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
  341. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
  342. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  343. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
  344. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
  345. package/lib/wasm-sync/WebAssemblyParser.js +7 -3
  346. package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
  347. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
  348. package/package.json +36 -28
  349. package/schemas/WebpackOptions.check.js +1 -1
  350. package/schemas/WebpackOptions.json +212 -3
  351. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
  352. package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
  353. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  354. package/schemas/plugins/HtmlParserOptions.json +3 -0
  355. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  356. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  357. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  358. package/types.d.ts +1592 -314
  359. package/lib/css/walkCssTokens.js +0 -2020
  360. package/lib/util/AppendOnlyStackedSet.js +0 -93
@@ -1,4 +1,3 @@
1
- // @ts-nocheck
2
1
  /*
3
2
  MIT License http://www.opensource.org/licenses/mit-license.php
4
3
  Author Tobias Koppers @sokra
@@ -6,29 +5,127 @@
6
5
 
7
6
  "use strict";
8
7
 
9
- var $installedChunks$ = undefined;
10
- var $loadUpdateChunk$ = undefined;
11
- var $moduleCache$ = undefined;
12
- var $moduleFactories$ = undefined;
13
- var $ensureChunkHandlers$ = undefined;
14
- var $hasOwnProperty$ = undefined;
15
- var $hmrModuleData$ = undefined;
16
- var $hmrDownloadUpdateHandlers$ = undefined;
17
- var $hmrInvalidateModuleHandlers$ = undefined;
18
- var __webpack_require__ = undefined;
8
+ /** @typedef {string | number} ModuleId */
9
+ /** @typedef {Record<string, unknown>} HotData */
10
+ /** @typedef {(data: HotData) => void} DisposeHandler */
11
+ /** @typedef {(outdatedDependencies: ModuleId[]) => void} AcceptCallback */
12
+ /** @typedef {(err: unknown, context: { moduleId: ModuleId, dependencyId: ModuleId }) => void} AcceptErrorHandler */
13
+ /** @typedef {{ type: string, moduleId: ModuleId, dependencyId?: ModuleId, error: unknown, originalError?: unknown }} HotErrorEvent */
14
+ /** @typedef {(reportError: (err: unknown) => void) => Promise<ModuleId[]>} ApplyFn */
15
+
16
+ /**
17
+ * @typedef {object} ApplyOptions
18
+ * @property {boolean=} ignoreUnaccepted ignore unaccepted modules
19
+ * @property {boolean=} ignoreDeclined ignore declined modules
20
+ * @property {boolean=} ignoreErrored ignore errors thrown while applying
21
+ * @property {((event: ModuleEffect) => void)=} onDeclined called for declined modules
22
+ * @property {((event: ModuleEffect) => void)=} onUnaccepted called for unaccepted modules
23
+ * @property {((event: ModuleEffect) => void)=} onAccepted called for accepted modules
24
+ * @property {((event: ModuleEffect) => void)=} onDisposed called for disposed modules
25
+ * @property {((event: HotErrorEvent) => void)=} onErrored called on apply errors
26
+ */
27
+
28
+ /**
29
+ * @typedef {object} ApplyResult
30
+ * @property {Error=} error fatal error that aborts the update
31
+ * @property {(() => void)=} dispose dispose phase of the update
32
+ * @property {ApplyFn=} apply apply phase of the update
33
+ */
34
+
35
+ /** @typedef {(options: ApplyOptions) => ApplyResult} ApplyHandler */
36
+ /** @typedef {(moduleId: ModuleId, applyHandlers: ApplyHandler[]) => void} InvalidateModuleHandler */
37
+ /** @typedef {(chunkIds: ModuleId[], removedChunks: ModuleId[], removedModules: ModuleId[], promises: Promise<unknown>[], applyHandlers: ApplyHandler[], updatedModulesList: ModuleId[], css: ModuleId[] | undefined, forceLoadChunks: ModuleId[] | undefined) => void} DownloadUpdateHandler */
38
+ /** @typedef {(chunkId: ModuleId, promises: Promise<unknown>[]) => void} EnsureChunkHandler */
39
+ /** @typedef {(webpackRequire: (id: ModuleId) => unknown) => void} RuntimeModuleFn */
40
+
41
+ /**
42
+ * @typedef {object} Hot
43
+ * @property {Record<ModuleId, AcceptCallback>} _acceptedDependencies accept callbacks by dependency id
44
+ * @property {Record<ModuleId, AcceptErrorHandler | undefined>} _acceptedErrorHandlers error handlers by dependency id
45
+ * @property {Record<ModuleId, boolean>} _declinedDependencies declined dependency ids
46
+ * @property {boolean | EXPECTED_FUNCTION} _selfAccepted true or the self-accept error handler
47
+ * @property {boolean} _selfDeclined module declined itself
48
+ * @property {boolean} _selfInvalidated module invalidated itself
49
+ * @property {DisposeHandler[]} _disposeHandlers registered dispose handlers
50
+ * @property {boolean} _main module is the entry of the update
51
+ * @property {() => void} _requireSelf re-require the module on apply
52
+ * @property {boolean} active module is not disposed
53
+ */
54
+
55
+ /**
56
+ * @typedef {object} HotModule
57
+ * @property {ModuleId} id module id
58
+ * @property {Hot} hot hot API of the module
59
+ * @property {ModuleId[]} parents ids of modules requiring this module
60
+ * @property {ModuleId[]} children ids of modules required by this module
61
+ */
62
+
63
+ /**
64
+ * @typedef {object} ModuleEffect
65
+ * @property {string} type effect type
66
+ * @property {ModuleId} moduleId affected module id
67
+ * @property {ModuleId[]=} chain update propagation chain
68
+ * @property {ModuleId=} parentId declining parent id
69
+ * @property {ModuleId[]=} outdatedModules outdated module ids
70
+ * @property {Record<ModuleId, ModuleId[]>=} outdatedDependencies outdated dependencies by module id
71
+ */
72
+
73
+ /** @typedef {{ chain: ModuleId[], id: ModuleId }} QueueItem */
74
+ /** @typedef {{ module: ModuleId, require: (id?: ModuleId) => void, errorHandler: boolean | EXPECTED_FUNCTION }} SelfAcceptedModule */
75
+
76
+ // Globals injected by code generation; declared here only to type the template.
77
+ /* eslint-disable no-unassigned-vars */
78
+ /** @type {Record<ModuleId, unknown>} */
79
+ var $installedChunks$;
80
+ /** @type {(chunkId: ModuleId, updatedModulesList?: ModuleId[]) => Promise<unknown>} */
81
+ var $loadUpdateChunk$;
82
+ /** @type {Record<ModuleId, HotModule>} */
83
+ var $moduleCache$;
84
+ /** @type {Record<ModuleId, EXPECTED_FUNCTION>} */
85
+ var $moduleFactories$;
86
+ /** @type {Record<string, EnsureChunkHandler>} */
87
+ var $ensureChunkHandlers$;
88
+ /** @type {(obj: object, key: ModuleId) => boolean} */
89
+ var $hasOwnProperty$;
90
+ /** @type {Record<ModuleId, HotData>} */
91
+ var $hmrModuleData$;
92
+ /** @type {Record<string, DownloadUpdateHandler>} */
93
+ var $hmrDownloadUpdateHandlers$;
94
+ /** @type {Record<string, InvalidateModuleHandler>} */
95
+ var $hmrInvalidateModuleHandlers$;
96
+ /** @type {(id: ModuleId) => unknown} */
97
+ var __webpack_require__;
98
+ /* eslint-enable no-unassigned-vars */
19
99
 
20
100
  module.exports = function () {
101
+ /** @type {Record<ModuleId, boolean>} */
21
102
  var currentUpdateChunks;
103
+ /** @type {Record<ModuleId, EXPECTED_FUNCTION | false>} */
22
104
  var currentUpdate;
105
+ /** @type {ModuleId[]} */
23
106
  var currentUpdateRemovedChunks;
107
+ /** @type {RuntimeModuleFn[]} */
24
108
  var currentUpdateRuntime;
109
+ /**
110
+ * @param {ApplyOptions} options apply options
111
+ * @returns {ApplyResult} dispose/apply handlers or a fatal error
112
+ */
25
113
  function applyHandler(options) {
26
114
  if ($ensureChunkHandlers$) delete $ensureChunkHandlers$.$key$Hmr;
27
- currentUpdateChunks = undefined;
115
+ currentUpdateChunks = /** @type {Record<ModuleId, boolean>} */ (
116
+ /** @type {unknown} */ (undefined)
117
+ );
118
+ /**
119
+ * @param {ModuleId} updateModuleId updated module id
120
+ * @returns {ModuleEffect} effect of updating the module
121
+ */
28
122
  function getAffectedModuleEffects(updateModuleId) {
123
+ /** @type {ModuleId[]} */
29
124
  var outdatedModules = [updateModuleId];
125
+ /** @type {Record<ModuleId, ModuleId[]>} */
30
126
  var outdatedDependencies = {};
31
127
 
128
+ /** @type {QueueItem[]} */
32
129
  var queue = outdatedModules.map(function (id) {
33
130
  return {
34
131
  chain: [id],
@@ -36,7 +133,7 @@ module.exports = function () {
36
133
  };
37
134
  });
38
135
  while (queue.length > 0) {
39
- var queueItem = queue.pop();
136
+ var queueItem = /** @type {QueueItem} */ (queue.pop());
40
137
  var moduleId = queueItem.id;
41
138
  var chain = queueItem.chain;
42
139
  var module = $moduleCache$[moduleId];
@@ -95,6 +192,11 @@ module.exports = function () {
95
192
  };
96
193
  }
97
194
 
195
+ /**
196
+ * @param {ModuleId[]} a target set
197
+ * @param {ModuleId[]} b items to add
198
+ * @returns {void}
199
+ */
98
200
  function addAllToSet(a, b) {
99
201
  for (var i = 0; i < b.length; i++) {
100
202
  var item = b[i];
@@ -104,10 +206,17 @@ module.exports = function () {
104
206
 
105
207
  // at begin all updates modules are outdated
106
208
  // the "outdated" status can propagate to parents if they don't accept the children
209
+ /** @type {Record<ModuleId, ModuleId[]>} */
107
210
  var outdatedDependencies = {};
211
+ /** @type {ModuleId[]} */
108
212
  var outdatedModules = [];
213
+ /** @type {Record<ModuleId, EXPECTED_FUNCTION>} */
109
214
  var appliedUpdate = {};
110
215
 
216
+ /**
217
+ * @param {HotModule} module disposed module
218
+ * @returns {void}
219
+ */
111
220
  var warnUnexpectedRequire = function warnUnexpectedRequire(module) {
112
221
  console.warn(
113
222
  "[HMR] unexpected require(" + module.id + ") to disposed module"
@@ -117,6 +226,7 @@ module.exports = function () {
117
226
  for (var moduleId in currentUpdate) {
118
227
  if ($hasOwnProperty$(currentUpdate, moduleId)) {
119
228
  var newModuleFactory = currentUpdate[moduleId];
229
+ /** @type {ModuleEffect} */
120
230
  var result = newModuleFactory
121
231
  ? getAffectedModuleEffects(moduleId)
122
232
  : {
@@ -176,15 +286,24 @@ module.exports = function () {
176
286
  };
177
287
  }
178
288
  if (doApply) {
179
- appliedUpdate[moduleId] = newModuleFactory;
180
- addAllToSet(outdatedModules, result.outdatedModules);
181
- for (moduleId in result.outdatedDependencies) {
182
- if ($hasOwnProperty$(result.outdatedDependencies, moduleId)) {
289
+ appliedUpdate[moduleId] = /** @type {EXPECTED_FUNCTION} */ (
290
+ newModuleFactory
291
+ );
292
+ addAllToSet(
293
+ outdatedModules,
294
+ /** @type {ModuleId[]} */ (result.outdatedModules)
295
+ );
296
+ var resultOutdatedDependencies =
297
+ /** @type {Record<ModuleId, ModuleId[]>} */ (
298
+ result.outdatedDependencies
299
+ );
300
+ for (moduleId in resultOutdatedDependencies) {
301
+ if ($hasOwnProperty$(resultOutdatedDependencies, moduleId)) {
183
302
  if (!outdatedDependencies[moduleId])
184
303
  outdatedDependencies[moduleId] = [];
185
304
  addAllToSet(
186
305
  outdatedDependencies[moduleId],
187
- result.outdatedDependencies[moduleId]
306
+ resultOutdatedDependencies[moduleId]
188
307
  );
189
308
  }
190
309
  }
@@ -195,9 +314,12 @@ module.exports = function () {
195
314
  }
196
315
  }
197
316
  }
198
- currentUpdate = undefined;
317
+ currentUpdate = /** @type {Record<ModuleId, EXPECTED_FUNCTION | false>} */ (
318
+ /** @type {unknown} */ (undefined)
319
+ );
199
320
 
200
321
  // Store self accepted outdated modules to require them later by the module system
322
+ /** @type {SelfAcceptedModule[]} */
201
323
  var outdatedSelfAcceptedModules = [];
202
324
  for (var j = 0; j < outdatedModules.length; j++) {
203
325
  var outdatedModuleId = outdatedModules[j];
@@ -218,6 +340,7 @@ module.exports = function () {
218
340
  }
219
341
  }
220
342
 
343
+ /** @type {ModuleId[]} */
221
344
  var moduleOutdatedDependencies;
222
345
 
223
346
  return {
@@ -225,15 +348,18 @@ module.exports = function () {
225
348
  currentUpdateRemovedChunks.forEach(function (chunkId) {
226
349
  delete $installedChunks$[chunkId];
227
350
  });
228
- currentUpdateRemovedChunks = undefined;
351
+ currentUpdateRemovedChunks = /** @type {ModuleId[]} */ (
352
+ /** @type {unknown} */ (undefined)
353
+ );
229
354
 
230
355
  var idx;
231
356
  var queue = outdatedModules.slice();
232
357
  while (queue.length > 0) {
233
- var moduleId = queue.pop();
358
+ var moduleId = /** @type {ModuleId} */ (queue.pop());
234
359
  var module = $moduleCache$[moduleId];
235
360
  if (!module) continue;
236
361
 
362
+ /** @type {HotData} */
237
363
  var data = {};
238
364
 
239
365
  // Call dispose handlers
@@ -281,6 +407,7 @@ module.exports = function () {
281
407
  }
282
408
  },
283
409
  apply: function (reportError) {
410
+ /** @type {Promise<unknown>[]} */
284
411
  var acceptPromises = [];
285
412
  // insert new code
286
413
  for (var updateModuleId in appliedUpdate) {
@@ -301,8 +428,11 @@ module.exports = function () {
301
428
  if (module) {
302
429
  moduleOutdatedDependencies =
303
430
  outdatedDependencies[outdatedModuleId];
431
+ /** @type {AcceptCallback[]} */
304
432
  var callbacks = [];
433
+ /** @type {(AcceptErrorHandler | undefined)[]} */
305
434
  var errorHandlers = [];
435
+ /** @type {ModuleId[]} */
306
436
  var dependenciesForCallbacks = [];
307
437
  for (var j = 0; j < moduleOutdatedDependencies.length; j++) {
308
438
  var dependency = moduleOutdatedDependencies[j];
@@ -318,13 +448,15 @@ module.exports = function () {
318
448
  }
319
449
  }
320
450
  for (var k = 0; k < callbacks.length; k++) {
451
+ /** @type {unknown} */
321
452
  var result;
322
453
  try {
323
454
  result = callbacks[k].call(null, moduleOutdatedDependencies);
324
455
  } catch (err) {
325
456
  if (typeof errorHandlers[k] === "function") {
326
457
  try {
327
- errorHandlers[k](err, {
458
+ /** @type {AcceptErrorHandler} */
459
+ (errorHandlers[k])(err, {
328
460
  moduleId: outdatedModuleId,
329
461
  dependencyId: dependenciesForCallbacks[k]
330
462
  });
@@ -357,8 +489,12 @@ module.exports = function () {
357
489
  }
358
490
  }
359
491
  }
360
- if (result && typeof result.then === "function") {
361
- acceptPromises.push(result);
492
+ if (
493
+ result &&
494
+ typeof (/** @type {{ then?: unknown }} */ (result).then) ===
495
+ "function"
496
+ ) {
497
+ acceptPromises.push(/** @type {Promise<unknown>} */ (result));
362
498
  }
363
499
  }
364
500
  }
@@ -434,7 +570,9 @@ module.exports = function () {
434
570
  removedModules,
435
571
  promises,
436
572
  applyHandlers,
437
- updatedModulesList
573
+ updatedModulesList,
574
+ css,
575
+ forceLoadChunks
438
576
  ) {
439
577
  applyHandlers.push(applyHandler);
440
578
  currentUpdateChunks = {};
@@ -442,7 +580,7 @@ module.exports = function () {
442
580
  currentUpdate = removedModules.reduce(function (obj, key) {
443
581
  obj[key] = false;
444
582
  return obj;
445
- }, {});
583
+ }, /** @type {Record<ModuleId, EXPECTED_FUNCTION | false>} */ ({}));
446
584
  currentUpdateRuntime = [];
447
585
  chunkIds.forEach(function (chunkId) {
448
586
  if (
@@ -466,6 +604,15 @@ module.exports = function () {
466
604
  currentUpdateChunks[chunkId] = true;
467
605
  }
468
606
  };
607
+ // Force-load chunks that now own modules orphaned by a removed chunk;
608
+ // ensure handlers skip already-installed chunks, so no guard is needed.
609
+ if (forceLoadChunks) {
610
+ forceLoadChunks.forEach(function (chunkId) {
611
+ Object.keys($ensureChunkHandlers$).forEach(function (key) {
612
+ $ensureChunkHandlers$[key](chunkId, promises);
613
+ });
614
+ });
615
+ }
469
616
  }
470
617
  };
471
618
  };
@@ -18,6 +18,7 @@ const {
18
18
  const RuntimeGlobals = require("../RuntimeGlobals");
19
19
  const Template = require("../Template");
20
20
  const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDependency");
21
+ const { resolveByProperty } = require("../util/cleverMerge");
21
22
  const { registerNotSerializable } = require("../util/serialization");
22
23
 
23
24
  /** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
@@ -25,6 +26,7 @@ const { registerNotSerializable } = require("../util/serialization");
25
26
  /** @typedef {import("../Compiler")} Compiler */
26
27
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
27
28
  /** @typedef {import("../Module").BuildCallback} BuildCallback */
29
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
28
30
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
29
31
  /** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
30
32
  /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
@@ -45,6 +47,96 @@ const { registerNotSerializable } = require("../util/serialization");
45
47
 
46
48
  /** @typedef {{ client: string, data: string, active: boolean }} ModuleResult */
47
49
 
50
+ /**
51
+ * Library wrappers of these types pass external modules as closure arguments
52
+ * (e.g. `__WEBPACK_EXTERNAL_MODULE_react__`) baked into the entry chunk at
53
+ * render time. When `lazyCompilation` activates a proxy for the first time,
54
+ * any external dependency the lazily-built module pulls in lands in a hot
55
+ * update chunk that lives outside the original wrapper closure, so the
56
+ * factory body can't resolve its closure identifier and throws at runtime.
57
+ * Reserving the externals up front (during the inactive build) folds them
58
+ * into the initial wrapper, so the closure identifiers are already defined
59
+ * when the activation update arrives.
60
+ */
61
+ const CLOSURE_LIBRARY_TYPES = new Set([
62
+ "umd",
63
+ "umd2",
64
+ "amd",
65
+ "amd-require",
66
+ "system"
67
+ ]);
68
+
69
+ /**
70
+ * `enabledLibraryTypes` covers both the global `output.library.type` and any
71
+ * per-entry `entry.<name>.library.type`, so a UMD/AMD/System wrapper attached
72
+ * to an individual entry is still detected.
73
+ * @param {import("../../declarations/WebpackOptions").OutputNormalized} output normalized output option
74
+ * @returns {boolean} true when at least one library wrapper passes externals as closure arguments
75
+ */
76
+ const hasClosureLibrary = (output) => {
77
+ const enabled = output.enabledLibraryTypes;
78
+ if (enabled) {
79
+ for (const type of enabled) {
80
+ if (CLOSURE_LIBRARY_TYPES.has(type)) return true;
81
+ }
82
+ }
83
+ if (output.library && output.library.type) {
84
+ return CLOSURE_LIBRARY_TYPES.has(output.library.type);
85
+ }
86
+ return false;
87
+ };
88
+
89
+ /**
90
+ * Collects request strings from statically-enumerable externals (string,
91
+ * object, and arrays of those). Function and RegExp forms are skipped because
92
+ * their effective request set isn't knowable until something asks for it.
93
+ *
94
+ * Layer resolution mirrors `ExternalModuleFactoryPlugin.resolveLayer`: the
95
+ * effective map for the proxy's layer is computed via the same
96
+ * `resolveByProperty(..., "byLayer", layer)` helper that the externals system
97
+ * uses, so `byLayer.default` fallback and function-form `byLayer` entries are
98
+ * honored the same way.
99
+ *
100
+ * Entries whose effective value is `false` are skipped — `false` explicitly
101
+ * disables externalization for that request, and reserving it would force the
102
+ * real module into the entry chunk.
103
+ * @param {import("../../declarations/WebpackOptions").Externals | undefined} externals normalized externals option
104
+ * @param {string | null} layer issuer layer for which to resolve `byLayer`
105
+ * @returns {Set<string>} requests to reserve in the entry chunk
106
+ */
107
+ const collectStaticExternalRequests = (externals, layer) => {
108
+ /** @type {Set<string>} */
109
+ const requests = new Set();
110
+ if (!externals) return requests;
111
+ /** @param {import("../../declarations/WebpackOptions").ExternalItem} item one item */
112
+ const visit = (item) => {
113
+ if (typeof item === "string") {
114
+ requests.add(item);
115
+ return;
116
+ }
117
+ if (!item || typeof item !== "object" || item instanceof RegExp) return;
118
+ const resolved = /** @type {Record<string, unknown>} */ (
119
+ resolveByProperty(
120
+ /** @type {Record<string, unknown>} */ (item),
121
+ "byLayer",
122
+ layer
123
+ )
124
+ );
125
+ for (const [request, value] of Object.entries(resolved)) {
126
+ // `false` explicitly opts the request out of externalization; reserving
127
+ // it would pull the actual module into the entry chunk.
128
+ if (value === false) continue;
129
+ requests.add(request);
130
+ }
131
+ };
132
+ if (Array.isArray(externals)) {
133
+ for (const item of externals) visit(item);
134
+ } else {
135
+ visit(externals);
136
+ }
137
+ return requests;
138
+ };
139
+
48
140
  /**
49
141
  * Defines the backend api type used by this module.
50
142
  * @typedef {object} BackendApi
@@ -88,6 +180,7 @@ class LazyCompilationDependency extends Dependency {
88
180
  */
89
181
  constructor(proxyModule) {
90
182
  super();
183
+ /** @type {LazyCompilationProxyModule} */
91
184
  this.proxyModule = proxyModule;
92
185
  }
93
186
 
@@ -110,6 +203,14 @@ class LazyCompilationDependency extends Dependency {
110
203
 
111
204
  registerNotSerializable(LazyCompilationDependency);
112
205
 
206
+ /**
207
+ * Defines the build info properties specific to lazy compilation proxy modules.
208
+ * @typedef {object} KnownLazyCompilationProxyModuleBuildInfo
209
+ * @property {boolean=} active whether the proxied module was active when built
210
+ */
211
+
212
+ /** @typedef {BuildInfo & KnownLazyCompilationProxyModuleBuildInfo} LazyCompilationProxyModuleBuildInfo */
213
+
113
214
  class LazyCompilationProxyModule extends Module {
114
215
  /**
115
216
  * Creates an instance of LazyCompilationProxyModule.
@@ -126,10 +227,18 @@ class LazyCompilationProxyModule extends Module {
126
227
  context,
127
228
  originalModule.layer
128
229
  );
230
+ // Redeclared with the lazy compilation proxy specific shape
231
+ /** @type {LazyCompilationProxyModuleBuildInfo | undefined} */
232
+ this.buildInfo = undefined;
233
+ /** @type {Module} */
129
234
  this.originalModule = originalModule;
235
+ /** @type {string} */
130
236
  this.request = request;
237
+ /** @type {string} */
131
238
  this.client = client;
239
+ /** @type {string} */
132
240
  this.data = data;
241
+ /** @type {boolean} */
133
242
  this.active = active;
134
243
  }
135
244
 
@@ -213,6 +322,19 @@ class LazyCompilationProxyModule extends Module {
213
322
  const block = new AsyncDependenciesBlock({});
214
323
  block.addDependency(dep);
215
324
  this.addBlock(block);
325
+ } else if (hasClosureLibrary(compilation.options.output)) {
326
+ // Reserve statically-declared externals as dependencies of the inactive
327
+ // proxy so the initial entry chunk's library wrapper already exposes
328
+ // their closure identifiers (e.g. `__WEBPACK_EXTERNAL_MODULE_react__`).
329
+ // Once the proxy activates and the lazily-built module references those
330
+ // externals, the identifiers resolve normally instead of throwing.
331
+ const requests = collectStaticExternalRequests(
332
+ options.externals,
333
+ this.layer
334
+ );
335
+ for (const request of requests) {
336
+ this.addDependency(new CommonJsRequireDependency(request));
337
+ }
216
338
  }
217
339
  callback();
218
340
  }
@@ -250,17 +372,19 @@ class LazyCompilationProxyModule extends Module {
250
372
  );
251
373
  const clientModule = moduleGraph.getModule(clientDep);
252
374
  const block = this.blocks[0];
375
+ const cst = runtimeTemplate.renderConst();
376
+ const lt = runtimeTemplate.renderLet();
253
377
  const client = Template.asString([
254
- `var client = ${runtimeTemplate.moduleExports({
378
+ `${cst} client = ${runtimeTemplate.moduleExports({
255
379
  module: clientModule,
256
380
  chunkGraph,
257
381
  request: clientDep.userRequest,
258
382
  runtimeRequirements
259
383
  })}`,
260
- `var data = ${JSON.stringify(this.data)};`
384
+ `${cst} data = ${JSON.stringify(this.data)};`
261
385
  ]);
262
386
  const keepActive = Template.asString([
263
- `var dispose = client.keepAlive({ data: data, active: ${JSON.stringify(
387
+ `${cst} dispose = client.keepAlive({ data: data, active: ${JSON.stringify(
264
388
  Boolean(block)
265
389
  )}, module: module, onError: onError });`
266
390
  ]);
@@ -288,7 +412,7 @@ class LazyCompilationProxyModule extends Module {
288
412
  chunkGraph.getModuleId(module)
289
413
  )}, function() { module.hot.invalidate(); });`,
290
414
  "module.hot.dispose(function(data) { delete data.resolveSelf; dispose(data); });",
291
- "if (module.hot.data && module.hot.data.resolveSelf) module.hot.data.resolveSelf(module.exports);"
415
+ `if (${runtimeTemplate.optionalChaining("module.hot.data", "resolveSelf")}) module.hot.data.resolveSelf(module.exports);`
292
416
  ]),
293
417
  "}",
294
418
  "function onError() { /* ignore */ }",
@@ -297,12 +421,12 @@ class LazyCompilationProxyModule extends Module {
297
421
  } else {
298
422
  source = Template.asString([
299
423
  client,
300
- "var resolveSelf, onError;",
424
+ `${lt} resolveSelf, onError;`,
301
425
  "module.exports = new Promise(function(resolve, reject) { resolveSelf = resolve; onError = reject; });",
302
426
  "if (module.hot) {",
303
427
  Template.indent([
304
428
  "module.hot.accept();",
305
- "if (module.hot.data && module.hot.data.resolveSelf) module.hot.data.resolveSelf(module.exports);",
429
+ `if (${runtimeTemplate.optionalChaining("module.hot.data", "resolveSelf")}) module.hot.data.resolveSelf(module.exports);`,
306
430
  "module.hot.dispose(function(data) { data.resolveSelf = resolveSelf; dispose(data); });"
307
431
  ]),
308
432
  "}",
@@ -388,9 +512,13 @@ class LazyCompilationPlugin {
388
512
  * @param {Options} options options
389
513
  */
390
514
  constructor({ backend, entries, imports, test }) {
515
+ /** @type {BackEnd} */
391
516
  this.backend = backend;
517
+ /** @type {boolean | undefined} */
392
518
  this.entries = entries;
519
+ /** @type {boolean | undefined} */
393
520
  this.imports = imports;
521
+ /** @type {string | RegExp | TestFn | undefined} */
394
522
  this.test = test;
395
523
  }
396
524