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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -5,25 +5,25 @@
5
5
  "use strict";
6
6
 
7
7
  const { SyncWaterfallHook } = require("tapable");
8
- /** @typedef {import("../Compilation")} Compilation */
8
+ /** @import Compilation from "../Compilation" */
9
9
  const RuntimeGlobals = require("../RuntimeGlobals");
10
10
  const RuntimeModule = require("../RuntimeModule");
11
11
  const Template = require("../Template");
12
12
  const {
13
13
  generateJavascriptHMR
14
14
  } = require("../hmr/JavascriptHotModuleReplacementHelper");
15
- const {
16
- chunkHasJs,
17
- getChunkFilenameTemplate
18
- } = require("../javascript/JavascriptModulesPlugin");
15
+ const { chunkHasJs } = require("../javascript/JavascriptModulesPlugin");
19
16
  const { getInitialChunkIds } = require("../javascript/StartupHelpers");
17
+ const { renderBaseUri } = require("../runtime/baseUri");
20
18
  const compileBooleanMatcher = require("../util/compileBooleanMatcher");
21
19
  const createHooksRegistry = require("../util/createHooksRegistry");
22
- const { getUndoPath } = require("../util/identifier");
20
+ const memoize = require("../util/memoize");
21
+
22
+ const getAPIPlugin = memoize(() => require("../APIPlugin"));
23
23
 
24
- /** @typedef {import("../Chunk")} Chunk */
25
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
26
- /** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
24
+ /** @import Chunk from "../Chunk" */
25
+ /** @import ChunkGraph from "../ChunkGraph" */
26
+ /** @import { ReadOnlyRuntimeRequirements } from "../Module" */
27
27
 
28
28
  const createCompilationHooks = () => ({
29
29
  /**
@@ -62,16 +62,14 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
62
62
  */
63
63
  _generateBaseUri(chunk, rootOutputDir) {
64
64
  const options = chunk.getEntryOptions();
65
- if (options && options.baseUri) {
66
- return `${RuntimeGlobals.baseURI} = ${JSON.stringify(options.baseUri)};`;
67
- }
68
65
  const compilation = /** @type {Compilation} */ (this.compilation);
69
66
  const {
70
67
  outputOptions: { importMetaName }
71
68
  } = compilation;
72
- return `${RuntimeGlobals.baseURI} = new URL(${JSON.stringify(
73
- rootOutputDir
74
- )}, ${importMetaName}.url);`;
69
+ return renderBaseUri(
70
+ options ? options.baseUri : undefined,
71
+ `new URL(${JSON.stringify(rootOutputDir)}, ${importMetaName}.url)`
72
+ );
75
73
  }
76
74
 
77
75
  /**
@@ -85,8 +83,14 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
85
83
  const environment = compilation.outputOptions.environment;
86
84
  const {
87
85
  runtimeTemplate,
88
- outputOptions: { importFunctionName, crossOriginLoading, charset }
86
+ outputOptions: {
87
+ importFunctionName,
88
+ crossOriginLoading,
89
+ charset,
90
+ resourceHints
91
+ }
89
92
  } = compilation;
93
+ const dedupePrefetch = Boolean(resourceHints && resourceHints.dedupe);
90
94
  const fn = RuntimeGlobals.ensureChunkHandlers;
91
95
  const withBaseURI = this._runtimeRequirements.has(RuntimeGlobals.baseURI);
92
96
  const withExternalInstallChunk = this._runtimeRequirements.has(
@@ -107,6 +111,11 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
107
111
  const withHmrManifest = this._runtimeRequirements.has(
108
112
  RuntimeGlobals.hmrDownloadManifest
109
113
  );
114
+ // `.f.j` serves `ensureChunk`: an analyzable import dispatches every handler but
115
+ // this one. HMR's force-load knows only a chunk id, so it needs the loader too.
116
+ const withJsLoading =
117
+ withLoading &&
118
+ (this._runtimeRequirements.has(RuntimeGlobals.ensureChunk) || withHmr);
110
119
  const { linkPreload, linkPrefetch } =
111
120
  ModuleChunkLoadingRuntimeModule.getCompilationHooks(compilation);
112
121
  const isNeutralPlatform = runtimeTemplate.isNeutralPlatform();
@@ -118,22 +127,41 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
118
127
  (environment.document || isNeutralPlatform) &&
119
128
  this._runtimeRequirements.has(RuntimeGlobals.preloadChunkHandlers) &&
120
129
  chunk.hasChildByOrder(chunkGraph, "preload", true, chunkHasJs);
130
+ // Under module output each hinted chunk is a known file, so the urls are written
131
+ // out and read by id rather than built from the chunk id at runtime.
132
+ const bakedChunkUrls =
133
+ withPrefetch || withPreload
134
+ ? runtimeTemplate.analyzableChunkScriptUrls(
135
+ chunk,
136
+ chunkGraph,
137
+ this._runtimeRequirements,
138
+ this
139
+ )
140
+ : null;
141
+ // A hint is best-effort, so an id an incomplete map lacks is not worth a per-id
142
+ // fallback — only a complete map replaces the runtime name lookup.
143
+ const chunkUrls =
144
+ bakedChunkUrls !== null && bakedChunkUrls.complete
145
+ ? bakedChunkUrls.urls
146
+ : null;
121
147
  const conditionMap = chunkGraph.getChunkConditionMap(chunk, chunkHasJs);
122
148
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
123
149
  const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
124
150
 
125
- const outputName = compilation.getPath(
126
- getChunkFilenameTemplate(chunk, compilation.outputOptions),
127
- {
128
- chunk,
129
- contentHashType: "javascript"
130
- }
131
- );
132
- const rootOutputDir = getUndoPath(
133
- outputName,
134
- compilation.outputOptions.path,
135
- true
136
- );
151
+ const rootOutputDir = runtimeTemplate.chunkRootOutputDir(chunk, true);
152
+
153
+ const { publicPath } = compilation.outputOptions;
154
+ // `import()` resolves a bare specifier as a package name, so a public path that
155
+ // leaves one — empty, or a plain relative directory — needs an explicit `./`.
156
+ // A runtime override can swap in an absolute path, so leave those alone.
157
+ const chunkImportBase =
158
+ publicPath === "auto"
159
+ ? JSON.stringify(rootOutputDir)
160
+ : typeof publicPath === "string" &&
161
+ !/^(?:\.{0,2}\/|[a-zA-Z][\w+.-]*:)/.test(publicPath) &&
162
+ !getAPIPlugin().usesRuntimePublicPathOverride(compilation)
163
+ ? `"./" + ${RuntimeGlobals.publicPath}`
164
+ : RuntimeGlobals.publicPath;
137
165
 
138
166
  const stateExpression = withHmr
139
167
  ? `${RuntimeGlobals.hmrRuntimeStatePrefix}_module`
@@ -146,19 +174,58 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
146
174
  ",\n"
147
175
  )
148
176
  )}\n}`;
177
+ // Every part below that reads the table. A chunk asking only for `.b` gets this
178
+ // module for the base uri alone, and then has nothing to look up.
179
+ const withInstalledChunks =
180
+ withLoading ||
181
+ withExternalInstallChunk ||
182
+ withAnalyzableImport ||
183
+ withOnChunkLoad ||
184
+ withHmr ||
185
+ withPrefetch ||
186
+ withPreload;
187
+ // The url is read through a thunk so a runtime hinting at many chunks builds only
188
+ // the one it appends.
189
+ /**
190
+ * @param {string} id expression naming the chunk whose url is wanted
191
+ * @returns {string} expression evaluating to its url
192
+ */
193
+ const chunkUrl = (id) =>
194
+ chunkUrls === null
195
+ ? `${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(${id})`
196
+ : `chunkUrls[${id}]()`;
149
197
  return Template.asString([
150
198
  withBaseURI
151
199
  ? this._generateBaseUri(chunk, rootOutputDir)
152
200
  : "// no baseURI",
153
201
  "",
154
- "// object to store loaded and loading chunks",
155
- "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
156
- "// [resolve, Promise] = chunk loading, 0 = chunk loaded",
157
- `${cst} installedChunks = ${
158
- stateExpression
159
- ? runtimeTemplate.assignOr(stateExpression, installedChunksObject)
160
- : installedChunksObject
161
- };`,
202
+ ...(chunkUrls
203
+ ? [
204
+ `${cst} chunkUrls = {\n${Template.indent(
205
+ Array.from(
206
+ chunkUrls,
207
+ ([id, url]) =>
208
+ `${JSON.stringify(String(id))}: ${runtimeTemplate.returningFunction(url)}`
209
+ ).join(",\n")
210
+ )}\n};`,
211
+ ""
212
+ ]
213
+ : []),
214
+ withInstalledChunks
215
+ ? Template.asString([
216
+ "// object to store loaded and loading chunks",
217
+ "// undefined = chunk not loaded, null = chunk preloaded/prefetched",
218
+ "// [resolve, Promise] = chunk loading, 0 = chunk loaded",
219
+ `${cst} installedChunks = ${
220
+ stateExpression
221
+ ? runtimeTemplate.assignOr(
222
+ stateExpression,
223
+ installedChunksObject
224
+ )
225
+ : installedChunksObject
226
+ };`
227
+ ])
228
+ : "// no installed chunks",
162
229
  "",
163
230
  withLoading || withExternalInstallChunk || withAnalyzableImport
164
231
  ? `${cst} installChunk = ${runtimeTemplate.basicFunction("data", [
@@ -189,14 +256,14 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
189
256
  `if(${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) && installedChunks[chunkId]) {`,
190
257
  Template.indent("installedChunks[chunkId][0]();"),
191
258
  "}",
192
- `installedChunks[${RuntimeGlobals.esmIds}[i]] = 0;`
259
+ "installedChunks[chunkId] = 0;"
193
260
  ]),
194
261
  "}",
195
262
  withOnChunkLoad ? `${RuntimeGlobals.onChunksLoaded}();` : ""
196
263
  ])}`
197
264
  : "// no install chunk",
198
265
  "",
199
- withLoading
266
+ withJsLoading
200
267
  ? Template.asString([
201
268
  `${fn}.j = ${runtimeTemplate.basicFunction(
202
269
  "chunkId, promises",
@@ -219,11 +286,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
219
286
  : `if(${hasJsMatcher("chunkId")}) {`,
220
287
  Template.indent([
221
288
  "// setup Promise in chunk cache",
222
- `${lt} promise = ${importFunctionName}(${
223
- compilation.outputOptions.publicPath === "auto"
224
- ? JSON.stringify(rootOutputDir)
225
- : RuntimeGlobals.publicPath
226
- } + ${
289
+ `${lt} promise = ${importFunctionName}(${chunkImportBase} + ${
227
290
  RuntimeGlobals.getChunkScriptFilename
228
291
  }(chunkId)).then(installChunk, ${runtimeTemplate.basicFunction(
229
292
  "e",
@@ -265,6 +328,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
265
328
  hasJsMatcher === true ? "true" : hasJsMatcher("chunkId")
266
329
  }) {`,
267
330
  Template.indent([
331
+ // A hint is best-effort, so an id no url was written for is
332
+ // skipped rather than turned into a bogus href.
333
+ ...(chunkUrls ? ["if(!chunkUrls[chunkId]) return;"] : []),
268
334
  "installedChunks[chunkId] = null;",
269
335
  linkPrefetch.call(
270
336
  Template.asString([
@@ -282,10 +348,23 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
282
348
  "}",
283
349
  'link.rel = "prefetch";',
284
350
  'link.as = "script";',
285
- `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`
351
+ `link.href = ${chunkUrl("chunkId")};`
286
352
  ]),
287
353
  chunk
288
354
  ),
355
+ dedupePrefetch
356
+ ? Template.asString([
357
+ // Chrome re-requests a resource when a prefetch link is added
358
+ // after it was already (pre)loaded via markup; skip in that case.
359
+ `${cst} links = document.getElementsByTagName("link");`,
360
+ `for(${lt} i = 0; i < links.length; i++) {`,
361
+ Template.indent([
362
+ `${cst} l = links[i];`,
363
+ 'if(l.href === link.href && (l.rel === "prefetch" || l.rel === "preload" || l.rel === "modulepreload")) return;'
364
+ ]),
365
+ "}"
366
+ ])
367
+ : "",
289
368
  "document.head.appendChild(link);"
290
369
  ]),
291
370
  "}"
@@ -306,6 +385,9 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
306
385
  hasJsMatcher === true ? "true" : hasJsMatcher("chunkId")
307
386
  }) {`,
308
387
  Template.indent([
388
+ // A hint is best-effort, so an id no url was written for is
389
+ // skipped rather than turned into a bogus href.
390
+ ...(chunkUrls ? ["if(!chunkUrls[chunkId]) return;"] : []),
309
391
  "installedChunks[chunkId] = null;",
310
392
  linkPreload.call(
311
393
  Template.asString([
@@ -317,7 +399,7 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
317
399
  ),
318
400
  "}",
319
401
  'link.rel = "modulepreload";',
320
- `link.href = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkScriptFilename}(chunkId);`,
402
+ `link.href = ${chunkUrl("chunkId")};`,
321
403
  crossOriginLoading
322
404
  ? crossOriginLoading === "use-credentials"
323
405
  ? 'link.crossOrigin = "use-credentials";'
@@ -350,24 +432,41 @@ class ModuleChunkLoadingRuntimeModule extends RuntimeModule {
350
432
  ? `${
351
433
  RuntimeGlobals.analyzableChunkImport
352
434
  } = ${runtimeTemplate.basicFunction("chunkId, importFn", [
353
- // A literal `import()` a foreign bundler can follow, wrapped to keep
354
- // `ensureChunk` timing and deduplication: resolved chunk → resolve now, in-flight →
355
- // reuse its promise, else run `importFn()` and install it.
435
+ // `ensureChunk` with its `.j` half replaced by a literal `import()` a foreign
436
+ // bundler can follow. The remaining handlers still run, so a chunk's css and
437
+ // its prefetch/preload children are not lost by taking this path.
438
+ `${lt} promises = [];`,
356
439
  `${lt} installedChunkData = ${RuntimeGlobals.hasOwnProperty}(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;`,
357
- "if(installedChunkData === 0) return Promise.resolve();",
358
- "if(installedChunkData) return installedChunkData[1];",
359
- `${lt} promise = importFn().then(installChunk, ${runtimeTemplate.basicFunction(
360
- "e",
361
- [
362
- "if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;",
363
- "throw e;"
364
- ]
365
- )});`,
366
- `promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
367
- "installedChunkData = installedChunks[chunkId] = [resolve]",
368
- "resolve"
369
- )})]);`,
370
- "return (installedChunkData[1] = promise);"
440
+ 'if(installedChunkData !== 0) { // 0 means "already installed".',
441
+ Template.indent([
442
+ '// a Promise means "currently loading".',
443
+ "if(installedChunkData) {",
444
+ Template.indent(["promises.push(installedChunkData[1]);"]),
445
+ "} else {",
446
+ Template.indent([
447
+ `${lt} promise = importFn().then(installChunk, ${runtimeTemplate.basicFunction(
448
+ "e",
449
+ [
450
+ "if(installedChunks[chunkId] !== 0) installedChunks[chunkId] = undefined;",
451
+ "throw e;"
452
+ ]
453
+ )});`,
454
+ `promise = Promise.race([promise, new Promise(${runtimeTemplate.expressionFunction(
455
+ "installedChunkData = installedChunks[chunkId] = [resolve]",
456
+ "resolve"
457
+ )})]);`,
458
+ "promises.push((installedChunkData[1] = promise));"
459
+ ]),
460
+ "}"
461
+ ]),
462
+ "}",
463
+ withLoading
464
+ ? `Object.keys(${fn}).forEach(${runtimeTemplate.basicFunction(
465
+ "key",
466
+ [`if(key !== "j") ${fn}[key](chunkId, promises);`]
467
+ )});`
468
+ : "// no other chunk loading handlers",
469
+ "return Promise.all(promises);"
371
470
  ])};`
372
471
  : "// no analyzable chunk import",
373
472
  "",
@@ -13,7 +13,9 @@
13
13
  /** @typedef {(status: string) => (Promise<void> | void)} StatusHandler */
14
14
  /** @typedef {Record<string, unknown>} ApplyOptions */
15
15
  /** @typedef {(reportError: (err: Error) => void) => Promise<ModuleId[]>} ApplyFn */
16
- /** @typedef {{ (id: ModuleId): unknown, e: (chunkId: ModuleId, fetchPriority?: string) => Promise<unknown>, [name: string]: unknown }} WebpackRequire */
16
+ /** @typedef {(chunkId: ModuleId, fetchPriority?: string) => Promise<unknown>} EnsureChunk */
17
+ /** @typedef {(chunkId: ModuleId, importFn: () => Promise<unknown>) => Promise<unknown>} AnalyzableChunkImport */
18
+ /** @typedef {{ (id: ModuleId): unknown, e?: EnsureChunk, ei?: AnalyzableChunkImport, [name: string]: unknown }} WebpackRequire */
17
19
 
18
20
  /**
19
21
  * @typedef {object} ApplyResult
@@ -185,13 +187,30 @@ module.exports = function () {
185
187
  };
186
188
  };
187
189
  for (var name in require) {
188
- if (Object.prototype.hasOwnProperty.call(require, name) && name !== "e") {
190
+ if (
191
+ Object.prototype.hasOwnProperty.call(require, name) &&
192
+ name !== "e" &&
193
+ name !== "ei"
194
+ ) {
189
195
  Object.defineProperty(fn, name, createPropertyDescriptor(name));
190
196
  }
191
197
  }
192
- /** @type {WebpackRequire} */ (fn).e = function (chunkId, fetchPriority) {
193
- return trackBlockingPromise(require.e(chunkId, fetchPriority));
194
- };
198
+ // A chunk load blocks the update until it settles, and `.ei` is the analyzable
199
+ // half of `.e`. A runtime that loads no chunks has neither to wrap.
200
+ if (require.e) {
201
+ /** @type {WebpackRequire} */ (fn).e = function (chunkId, fetchPriority) {
202
+ return trackBlockingPromise(
203
+ /** @type {EnsureChunk} */ (require.e)(chunkId, fetchPriority)
204
+ );
205
+ };
206
+ }
207
+ if (require.ei) {
208
+ /** @type {WebpackRequire} */ (fn).ei = function (chunkId, importFn) {
209
+ return trackBlockingPromise(
210
+ /** @type {AnalyzableChunkImport} */ (require.ei)(chunkId, importFn)
211
+ );
212
+ };
213
+ }
195
214
  return /** @type {WebpackRequire} */ (fn);
196
215
  }
197
216
 
@@ -9,7 +9,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
  const Template = require("../Template");
11
11
 
12
- /** @typedef {import("../Compilation")} Compilation */
12
+ /** @import Compilation from "../Compilation" */
13
13
 
14
14
  class HotModuleReplacementRuntimeModule extends RuntimeModule {
15
15
  constructor() {
@@ -21,29 +21,41 @@ const CommonJsRequireDependency = require("../dependencies/CommonJsRequireDepend
21
21
  const { resolveByProperty } = require("../util/cleverMerge");
22
22
  const { registerNotSerializable } = require("../util/serialization");
23
23
 
24
- /** @typedef {import("../config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
25
- /** @typedef {import("../Compilation")} Compilation */
26
- /** @typedef {import("../Compiler")} Compiler */
27
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
28
- /** @typedef {import("../Module").BuildCallback} BuildCallback */
29
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
30
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
31
- /** @typedef {import("../Module").CodeGenerationContext} CodeGenerationContext */
32
- /** @typedef {import("../Module").CodeGenerationResult} CodeGenerationResult */
33
- /** @typedef {import("../Module").LibIdentOptions} LibIdentOptions */
34
- /** @typedef {import("../Module").LibIdent} LibIdent */
35
- /** @typedef {import("../Module").NeedBuildCallback} NeedBuildCallback */
36
- /** @typedef {import("../Module").NeedBuildContext} NeedBuildContext */
37
- /** @typedef {import("../Module").SourceTypes} SourceTypes */
38
- /** @typedef {import("../Module").Sources} Sources */
39
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
40
- /** @typedef {import("../ModuleFactory").ModuleFactoryCallback} ModuleFactoryCallback */
41
- /** @typedef {import("../ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
42
- /** @typedef {import("../RequestShortener")} RequestShortener */
43
- /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
44
- /** @typedef {import("../dependencies/HarmonyImportDependency")} HarmonyImportDependency */
45
- /** @typedef {import("../util/Hash")} Hash */
46
- /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
24
+ /**
25
+ * @import {
26
+ * WebpackOptionsNormalizedWithDefaults as WebpackOptions
27
+ * } from "../config/defaults"
28
+ */
29
+ /** @import Compilation from "../Compilation" */
30
+ /** @import Compiler from "../Compiler" */
31
+ /** @import { UpdateHashContext } from "../Dependency" */
32
+ /**
33
+ * @import {
34
+ * BuildCallback,
35
+ * BuildInfo,
36
+ * BuildMeta,
37
+ * CodeGenerationContext,
38
+ * CodeGenerationResult,
39
+ * LibIdentOptions,
40
+ * LibIdent,
41
+ * NeedBuildCallback,
42
+ * NeedBuildContext,
43
+ * SourceTypes,
44
+ * Sources,
45
+ * RuntimeRequirements
46
+ * } from "../Module"
47
+ */
48
+ /**
49
+ * @import {
50
+ * ModuleFactoryCallback,
51
+ * ModuleFactoryCreateData
52
+ * } from "../ModuleFactory"
53
+ */
54
+ /** @import RequestShortener from "../RequestShortener" */
55
+ /** @import { ResolverWithOptions } from "../ResolverFactory" */
56
+ /** @import HarmonyImportDependency from "../dependencies/HarmonyImportDependency" */
57
+ /** @import Hash from "../util/Hash" */
58
+ /** @import { InputFileSystem } from "../util/fs" */
47
59
 
48
60
  /** @typedef {{ client: string, data: string, active: boolean }} ModuleResult */
49
61
 
@@ -403,7 +415,8 @@ class LazyCompilationProxyModule extends Module {
403
415
  dependency: dep,
404
416
  strict: false, // TODO this should be inherited from the original module
405
417
  message: "import()",
406
- runtimeRequirements
418
+ runtimeRequirements,
419
+ originModule: this
407
420
  })};`,
408
421
  "if (module.hot) {",
409
422
  Template.indent([
@@ -547,6 +560,14 @@ class LazyCompilationPlugin {
547
560
  compiler.hooks.thisCompilation.tap(
548
561
  PLUGIN_NAME,
549
562
  (compilation, { normalModuleFactory }) => {
563
+ // A proxy already loaded in the client outlives the build that required
564
+ // `ensureChunk`, so every runtime keeps it or the proxy calls a dropped global.
565
+ compilation.hooks.additionalTreeRuntimeRequirements.tap(
566
+ PLUGIN_NAME,
567
+ (chunk, set) => {
568
+ set.add(RuntimeGlobals.ensureChunk);
569
+ }
570
+ );
550
571
  normalModuleFactory.hooks.module.tap(
551
572
  PLUGIN_NAME,
552
573
  (module, createData, resolveData) => {
@@ -5,14 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("http").RequestListener} RequestListener */
9
8
  /** @typedef {import("http").ServerOptions} HttpServerOptions */
10
- /** @typedef {import("http").Server} HttpServer */
11
9
  /** @typedef {import("https").ServerOptions} HttpsServerOptions */
12
- /** @typedef {import("https").Server} HttpsServer */
13
- /** @typedef {import("net").AddressInfo} AddressInfo */
14
- /** @typedef {import("./LazyCompilationPlugin").BackendHandler} BackendHandler */
15
- /** @typedef {import("../../declarations/WebpackOptions").LazyCompilationDefaultBackendOptions} LazyCompilationDefaultBackendOptions */
10
+ /** @import { RequestListener, Server as HttpServer } from "http" */
11
+ /** @import { Server as HttpsServer } from "https" */
12
+ /** @import { AddressInfo } from "net" */
13
+ /** @import { BackendHandler } from "./LazyCompilationPlugin" */
14
+ /**
15
+ * @import {
16
+ * LazyCompilationDefaultBackendOptions
17
+ * } from "../../declarations/WebpackOptions"
18
+ */
16
19
 
17
20
  /** @typedef {HttpServer | HttpsServer} Server */
18
21
  /** @typedef {(server: Server) => void} Listen */
@@ -0,0 +1,56 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const { SyncBailHook } = require("tapable");
9
+
10
+ /** @import JavascriptParser from "../javascript/JavascriptParser" */
11
+ /** @import { CallExpression, Expression, SpreadElement } from "estree" */
12
+
13
+ /** @typedef {string[]} Requests */
14
+
15
+ /**
16
+ * Defines the hmr javascript parser hooks type used by this module.
17
+ * @typedef {object} HMRJavascriptParserHooks
18
+ * @property {SyncBailHook<[Expression | SpreadElement, Requests], void>} hotAcceptCallback
19
+ * @property {SyncBailHook<[CallExpression, Requests], void>} hotAcceptWithoutCallback
20
+ */
21
+
22
+ /** @type {WeakMap<JavascriptParser, HMRJavascriptParserHooks>} */
23
+ const parserHooksMap = new WeakMap();
24
+
25
+ /**
26
+ * Returns the attached hooks.
27
+ * @param {JavascriptParser} parser the parser
28
+ * @returns {HMRJavascriptParserHooks} the attached hooks
29
+ */
30
+ const getParserHooks = (parser) => {
31
+ // matched by class name, as `createHooksRegistry` does: a parser from another
32
+ // webpack copy has to pass, and requiring the parser here loads it eagerly
33
+ const candidate = /** @type {{ constructor?: { name: string } } | null} */ (
34
+ parser
35
+ );
36
+ if (
37
+ !candidate ||
38
+ !candidate.constructor ||
39
+ candidate.constructor.name !== "JavascriptParser"
40
+ ) {
41
+ throw new TypeError(
42
+ "The 'parser' argument must be an instance of JavascriptParser"
43
+ );
44
+ }
45
+ let hooks = parserHooksMap.get(parser);
46
+ if (hooks === undefined) {
47
+ hooks = {
48
+ hotAcceptCallback: new SyncBailHook(["expression", "requests"]),
49
+ hotAcceptWithoutCallback: new SyncBailHook(["expression", "requests"])
50
+ };
51
+ parserHooksMap.set(parser, hooks);
52
+ }
53
+ return hooks;
54
+ };
55
+
56
+ module.exports = getParserHooks;