webpack 5.97.1 → 5.104.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -7,10 +7,16 @@
7
7
 
8
8
  const { SyncHook } = require("tapable");
9
9
 
10
+ /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
11
+ /** @typedef {import("../../declarations/WebpackOptions").Falsy} Falsy */
12
+ /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
10
13
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
11
- /** @typedef {import("../../declarations/WebpackOptions").RuleSetRules} RuleSetRules */
12
14
 
13
- /** @typedef {function(string | EffectData): boolean} RuleConditionFunction */
15
+ /** @typedef {(Falsy | RuleSetRule)[]} RuleSetRules */
16
+
17
+ /**
18
+ * @typedef {(value: EffectData[keyof EffectData]) => boolean} RuleConditionFunction
19
+ */
14
20
 
15
21
  /**
16
22
  * @typedef {object} RuleCondition
@@ -26,30 +32,62 @@ const { SyncHook } = require("tapable");
26
32
  */
27
33
 
28
34
  /**
29
- * @typedef {Record<string, TODO>} EffectData
35
+ * @typedef {object} EffectData
36
+ * @property {string=} resource
37
+ * @property {string=} realResource
38
+ * @property {string=} resourceQuery
39
+ * @property {string=} resourceFragment
40
+ * @property {string=} scheme
41
+ * @property {ImportAttributes=} attributes
42
+ * @property {string=} mimetype
43
+ * @property {string} dependency
44
+ * @property {ResolveRequest["descriptionFileData"]=} descriptionData
45
+ * @property {string=} compiler
46
+ * @property {string} issuer
47
+ * @property {string} issuerLayer
30
48
  */
31
49
 
32
50
  /**
33
51
  * @typedef {object} CompiledRule
34
52
  * @property {RuleCondition[]} conditions
35
- * @property {(Effect|function(EffectData): Effect[])[]} effects
53
+ * @property {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
36
54
  * @property {CompiledRule[]=} rules
37
55
  * @property {CompiledRule[]=} oneOf
38
56
  */
39
57
 
58
+ /** @typedef {"use" | "use-pre" | "use-post"} EffectUseType */
59
+
60
+ /**
61
+ * @typedef {object} EffectUse
62
+ * @property {EffectUseType} type
63
+ * @property {{ loader: string, options?: string | null | Record<string, EXPECTED_ANY>, ident?: string }} value
64
+ */
65
+
40
66
  /**
41
- * @typedef {object} Effect
67
+ * @typedef {object} EffectBasic
42
68
  * @property {string} type
43
- * @property {any} value
69
+ * @property {EXPECTED_ANY} value
44
70
  */
45
71
 
72
+ /** @typedef {EffectUse | EffectBasic} Effect */
73
+
74
+ /** @typedef {Map<string, RuleSetLoaderOptions>} References */
75
+
46
76
  /**
47
77
  * @typedef {object} RuleSet
48
- * @property {Map<string, any>} references map of references in the rule set (may grow over time)
49
- * @property {function(EffectData): Effect[]} exec execute the rule set
78
+ * @property {References} references map of references in the rule set (may grow over time)
79
+ * @property {(effectData: EffectData) => Effect[]} exec execute the rule set
80
+ */
81
+
82
+ /**
83
+ * @template T
84
+ * @template {T[keyof T]} V
85
+ * @typedef {({ [key in keyof Required<T>]: Required<T>[key] extends V ? key : never })[keyof T]} KeysOfTypes
50
86
  */
51
87
 
52
- /** @typedef {{ apply: (function(RuleSetCompiler): void) }} RuleSetPlugin */
88
+ /** @typedef {Set<string>} UnhandledProperties */
89
+
90
+ /** @typedef {{ apply: (ruleSetCompiler: RuleSetCompiler) => void }} RuleSetPlugin */
53
91
 
54
92
  class RuleSetCompiler {
55
93
  /**
@@ -57,7 +95,7 @@ class RuleSetCompiler {
57
95
  */
58
96
  constructor(plugins) {
59
97
  this.hooks = Object.freeze({
60
- /** @type {SyncHook<[string, RuleSetRule, Set<string>, CompiledRule, Map<string | undefined, any>]>} */
98
+ /** @type {SyncHook<[string, RuleSetRule, UnhandledProperties, CompiledRule, References]>} */
61
99
  rule: new SyncHook([
62
100
  "path",
63
101
  "rule",
@@ -74,7 +112,7 @@ class RuleSetCompiler {
74
112
  }
75
113
 
76
114
  /**
77
- * @param {TODO[]} ruleSet raw user provided rules
115
+ * @param {RuleSetRules} ruleSet raw user provided rules
78
116
  * @returns {RuleSet} compiled RuleSet
79
117
  */
80
118
  compile(ruleSet) {
@@ -91,7 +129,7 @@ class RuleSetCompiler {
91
129
  for (const condition of rule.conditions) {
92
130
  const p = condition.property;
93
131
  if (Array.isArray(p)) {
94
- /** @type {EffectData | string | undefined} */
132
+ /** @type {EXPECTED_ANY} */
95
133
  let current = data;
96
134
  for (const subProperty of p) {
97
135
  if (
@@ -99,7 +137,7 @@ class RuleSetCompiler {
99
137
  typeof current === "object" &&
100
138
  Object.prototype.hasOwnProperty.call(current, subProperty)
101
139
  ) {
102
- current = current[subProperty];
140
+ current = current[/** @type {keyof EffectData} */ (subProperty)];
103
141
  } else {
104
142
  current = undefined;
105
143
  break;
@@ -110,7 +148,7 @@ class RuleSetCompiler {
110
148
  continue;
111
149
  }
112
150
  } else if (p in data) {
113
- const value = data[p];
151
+ const value = data[/** @type {keyof EffectData} */ (p)];
114
152
  if (value !== undefined) {
115
153
  if (!condition.fn(value)) return false;
116
154
  continue;
@@ -147,7 +185,7 @@ class RuleSetCompiler {
147
185
 
148
186
  return {
149
187
  references: refs,
150
- exec: data => {
188
+ exec: (data) => {
151
189
  /** @type {Effect[]} */
152
190
  const effects = [];
153
191
  for (const rule of rules) {
@@ -161,7 +199,7 @@ class RuleSetCompiler {
161
199
  /**
162
200
  * @param {string} path current path
163
201
  * @param {RuleSetRules} rules the raw rules provided by user
164
- * @param {Map<string, any>} refs references
202
+ * @param {References} refs references
165
203
  * @returns {CompiledRule[]} rules
166
204
  */
167
205
  compileRules(path, rules, refs) {
@@ -179,13 +217,14 @@ class RuleSetCompiler {
179
217
  /**
180
218
  * @param {string} path current path
181
219
  * @param {RuleSetRule} rule the raw rule provided by user
182
- * @param {Map<string, any>} refs references
220
+ * @param {References} refs references
183
221
  * @returns {CompiledRule} normalized and compiled rule for processing
184
222
  */
185
223
  compileRule(path, rule, refs) {
224
+ /** @type {UnhandledProperties} */
186
225
  const unhandledProperties = new Set(
187
226
  Object.keys(rule).filter(
188
- key => rule[/** @type {keyof RuleSetRule} */ (key)] !== undefined
227
+ (key) => rule[/** @type {keyof RuleSetRule} */ (key)] !== undefined
189
228
  )
190
229
  );
191
230
 
@@ -202,16 +241,18 @@ class RuleSetCompiler {
202
241
  if (unhandledProperties.has("rules")) {
203
242
  unhandledProperties.delete("rules");
204
243
  const rules = rule.rules;
205
- if (!Array.isArray(rules))
244
+ if (!Array.isArray(rules)) {
206
245
  throw this.error(path, rules, "Rule.rules must be an array of rules");
246
+ }
207
247
  compiledRule.rules = this.compileRules(`${path}.rules`, rules, refs);
208
248
  }
209
249
 
210
250
  if (unhandledProperties.has("oneOf")) {
211
251
  unhandledProperties.delete("oneOf");
212
252
  const oneOf = rule.oneOf;
213
- if (!Array.isArray(oneOf))
253
+ if (!Array.isArray(oneOf)) {
214
254
  throw this.error(path, oneOf, "Rule.oneOf must be an array of rules");
255
+ }
215
256
  compiledRule.oneOf = this.compileRules(`${path}.oneOf`, oneOf, refs);
216
257
  }
217
258
 
@@ -219,7 +260,7 @@ class RuleSetCompiler {
219
260
  throw this.error(
220
261
  path,
221
262
  rule,
222
- `Properties ${Array.from(unhandledProperties).join(", ")} are unknown`
263
+ `Properties ${[...unhandledProperties].join(", ")} are unknown`
223
264
  );
224
265
  }
225
266
 
@@ -228,14 +269,14 @@ class RuleSetCompiler {
228
269
 
229
270
  /**
230
271
  * @param {string} path current path
231
- * @param {any} condition user provided condition value
272
+ * @param {RuleSetLoaderOptions} condition user provided condition value
232
273
  * @returns {Condition} compiled condition
233
274
  */
234
275
  compileCondition(path, condition) {
235
276
  if (condition === "") {
236
277
  return {
237
278
  matchWhenEmpty: true,
238
- fn: str => str === ""
279
+ fn: (str) => str === ""
239
280
  };
240
281
  }
241
282
  if (!condition) {
@@ -248,14 +289,14 @@ class RuleSetCompiler {
248
289
  if (typeof condition === "string") {
249
290
  return {
250
291
  matchWhenEmpty: condition.length === 0,
251
- fn: str => typeof str === "string" && str.startsWith(condition)
292
+ fn: (str) => typeof str === "string" && str.startsWith(condition)
252
293
  };
253
294
  }
254
295
  if (typeof condition === "function") {
255
296
  try {
256
297
  return {
257
298
  matchWhenEmpty: condition(""),
258
- fn: condition
299
+ fn: /** @type {RuleConditionFunction} */ (condition)
259
300
  };
260
301
  } catch (_err) {
261
302
  throw this.error(
@@ -268,7 +309,7 @@ class RuleSetCompiler {
268
309
  if (condition instanceof RegExp) {
269
310
  return {
270
311
  matchWhenEmpty: condition.test(""),
271
- fn: v => typeof v === "string" && condition.test(v)
312
+ fn: (v) => typeof v === "string" && condition.test(v)
272
313
  };
273
314
  }
274
315
  if (Array.isArray(condition)) {
@@ -324,7 +365,7 @@ class RuleSetCompiler {
324
365
  const fn = matcher.fn;
325
366
  conditions.push({
326
367
  matchWhenEmpty: !matcher.matchWhenEmpty,
327
- fn: /** @type {RuleConditionFunction} */ (v => !fn(v))
368
+ fn: /** @type {RuleConditionFunction} */ ((v) => !fn(v))
328
369
  });
329
370
  }
330
371
  break;
@@ -360,8 +401,8 @@ class RuleSetCompiler {
360
401
  return conditions[0];
361
402
  }
362
403
  return {
363
- matchWhenEmpty: conditions.some(c => c.matchWhenEmpty),
364
- fn: v => conditions.some(c => c.fn(v))
404
+ matchWhenEmpty: conditions.some((c) => c.matchWhenEmpty),
405
+ fn: (v) => conditions.some((c) => c.fn(v))
365
406
  };
366
407
  }
367
408
 
@@ -379,14 +420,14 @@ class RuleSetCompiler {
379
420
  return conditions[0];
380
421
  }
381
422
  return {
382
- matchWhenEmpty: conditions.every(c => c.matchWhenEmpty),
383
- fn: v => conditions.every(c => c.fn(v))
423
+ matchWhenEmpty: conditions.every((c) => c.matchWhenEmpty),
424
+ fn: (v) => conditions.every((c) => c.fn(v))
384
425
  };
385
426
  }
386
427
 
387
428
  /**
388
429
  * @param {string} path current path
389
- * @param {any} value value at the error location
430
+ * @param {EXPECTED_ANY} value value at the error location
390
431
  * @param {string} message message explaining the problem
391
432
  * @returns {Error} an error object
392
433
  */
@@ -7,11 +7,18 @@
7
7
 
8
8
  const util = require("util");
9
9
 
10
+ /** @typedef {import("../../declarations/WebpackOptions").Falsy} Falsy */
10
11
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoader} RuleSetLoader */
11
12
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
12
13
  /** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
14
+ /** @typedef {import("../../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
15
+ /** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
13
16
  /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
14
17
  /** @typedef {import("./RuleSetCompiler").Effect} Effect */
18
+ /** @typedef {import("./RuleSetCompiler").EffectData} EffectData */
19
+ /** @typedef {import("./RuleSetCompiler").EffectUseType} EffectUseType */
20
+
21
+ const PLUGIN_NAME = "UseEffectRulePlugin";
15
22
 
16
23
  class UseEffectRulePlugin {
17
24
  /**
@@ -20,7 +27,7 @@ class UseEffectRulePlugin {
20
27
  */
21
28
  apply(ruleSetCompiler) {
22
29
  ruleSetCompiler.hooks.rule.tap(
23
- "UseEffectRulePlugin",
30
+ PLUGIN_NAME,
24
31
  (path, rule, unhandledProperties, result, references) => {
25
32
  /**
26
33
  * @param {keyof RuleSetRule} property property
@@ -43,20 +50,27 @@ class UseEffectRulePlugin {
43
50
  conflictWith("loader", "use");
44
51
  conflictWith("options", "use");
45
52
 
46
- const use = rule.use;
53
+ const use = /** @type {RuleSetUse} */ (rule.use);
47
54
  const enforce = rule.enforce;
48
55
 
49
- const type = enforce ? `use-${enforce}` : "use";
56
+ const type =
57
+ /** @type {EffectUseType} */
58
+ (enforce ? `use-${enforce}` : "use");
50
59
 
51
60
  /**
52
61
  * @param {string} path options path
53
62
  * @param {string} defaultIdent default ident when none is provided
54
- * @param {object} item user provided use value
55
- * @returns {Effect|function(any): Effect[]} effect
63
+ * @param {RuleSetUseItem} item user provided use value
64
+ * @returns {(Effect | ((effectData: EffectData) => Effect[]))} effect
56
65
  */
57
66
  const useToEffect = (path, defaultIdent, item) => {
58
67
  if (typeof item === "function") {
59
- return data => useToEffectsWithoutIdent(path, item(data));
68
+ return (data) =>
69
+ useToEffectsWithoutIdent(
70
+ path,
71
+ /** @type {RuleSetUseItem | RuleSetUseItem[]} */
72
+ (item(data))
73
+ );
60
74
  }
61
75
  return useToEffectRaw(path, defaultIdent, item);
62
76
  };
@@ -64,7 +78,7 @@ class UseEffectRulePlugin {
64
78
  /**
65
79
  * @param {string} path options path
66
80
  * @param {string} defaultIdent default ident when none is provided
67
- * @param {{ ident?: string, loader?: RuleSetLoader, options?: RuleSetLoaderOptions }} item user provided use value
81
+ * @param {Exclude<NonNullable<RuleSetUseItem>, EXPECTED_FUNCTION>} item user provided use value
68
82
  * @returns {Effect} effect
69
83
  */
70
84
  const useToEffectRaw = (path, defaultIdent, item) => {
@@ -78,7 +92,7 @@ class UseEffectRulePlugin {
78
92
  }
79
93
  };
80
94
  }
81
- const loader = item.loader;
95
+ const loader = /** @type {string} */ (item.loader);
82
96
  const options = item.options;
83
97
  let ident = item.ident;
84
98
  if (options && typeof options === "object") {
@@ -104,41 +118,55 @@ class UseEffectRulePlugin {
104
118
 
105
119
  /**
106
120
  * @param {string} path options path
107
- * @param {any} items user provided use value
121
+ * @param {RuleSetUseItem | (Falsy | RuleSetUseItem)[]} items user provided use value
108
122
  * @returns {Effect[]} effects
109
123
  */
110
124
  const useToEffectsWithoutIdent = (path, items) => {
111
125
  if (Array.isArray(items)) {
112
- return items
113
- .filter(Boolean)
114
- .map((item, idx) =>
115
- useToEffectRaw(`${path}[${idx}]`, "[[missing ident]]", item)
116
- );
126
+ return items.filter(Boolean).map((item, idx) =>
127
+ useToEffectRaw(
128
+ `${path}[${idx}]`,
129
+ "[[missing ident]]",
130
+ /** @type {Exclude<RuleSetUseItem, EXPECTED_FUNCTION>} */
131
+ (item)
132
+ )
133
+ );
117
134
  }
118
- return [useToEffectRaw(path, "[[missing ident]]", items)];
135
+ return [
136
+ useToEffectRaw(
137
+ path,
138
+ "[[missing ident]]",
139
+ /** @type {Exclude<RuleSetUseItem, EXPECTED_FUNCTION>} */
140
+ (items)
141
+ )
142
+ ];
119
143
  };
120
144
 
121
145
  /**
122
146
  * @param {string} path current path
123
- * @param {any} items user provided use value
124
- * @returns {(Effect|function(any): Effect[])[]} effects
147
+ * @param {RuleSetUse} items user provided use value
148
+ * @returns {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
125
149
  */
126
150
  const useToEffects = (path, items) => {
127
151
  if (Array.isArray(items)) {
128
152
  return items.filter(Boolean).map((item, idx) => {
129
153
  const subPath = `${path}[${idx}]`;
130
- return useToEffect(subPath, subPath, item);
154
+ return useToEffect(
155
+ subPath,
156
+ subPath,
157
+ /** @type {RuleSetUseItem} */
158
+ (item)
159
+ );
131
160
  });
132
161
  }
133
- return [useToEffect(path, path, items)];
162
+ return [
163
+ useToEffect(path, path, /** @type {RuleSetUseItem} */ (items))
164
+ ];
134
165
  };
135
166
 
136
167
  if (typeof use === "function") {
137
- result.effects.push(data =>
138
- useToEffectsWithoutIdent(
139
- `${path}.use`,
140
- use(/** @type {TODO} */ (data))
141
- )
168
+ result.effects.push((data) =>
169
+ useToEffectsWithoutIdent(`${path}.use`, use(data))
142
170
  );
143
171
  } else {
144
172
  for (const effect of useToEffects(`${path}.use`, use)) {
@@ -182,7 +210,15 @@ class UseEffectRulePlugin {
182
210
 
183
211
  const ident =
184
212
  options && typeof options === "object" ? path : undefined;
185
- references.set(ident, options);
213
+
214
+ if (ident) {
215
+ references.set(
216
+ ident,
217
+ /** @type {RuleSetLoaderOptions} */
218
+ (options)
219
+ );
220
+ }
221
+
186
222
  result.effects.push({
187
223
  type: enforce ? `use-${enforce}` : "use",
188
224
  value: {
@@ -11,8 +11,12 @@ const HelperRuntimeModule = require("./HelperRuntimeModule");
11
11
  /** @typedef {import("../Compilation")} Compilation */
12
12
 
13
13
  class AsyncModuleRuntimeModule extends HelperRuntimeModule {
14
- constructor() {
14
+ /**
15
+ * @param {boolean=} deferInterop if defer import is used.
16
+ */
17
+ constructor(deferInterop = false) {
15
18
  super("async module");
19
+ this._deferInterop = deferInterop;
16
20
  }
17
21
 
18
22
  /**
@@ -22,10 +26,38 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
22
26
  const compilation = /** @type {Compilation} */ (this.compilation);
23
27
  const { runtimeTemplate } = compilation;
24
28
  const fn = RuntimeGlobals.asyncModule;
29
+ const defer = this._deferInterop;
25
30
  return Template.asString([
26
- 'var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";',
27
- `var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
28
- 'var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";',
31
+ 'var hasSymbol = typeof Symbol === "function";',
32
+ 'var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__";',
33
+ `var webpackExports = ${
34
+ defer ? `${RuntimeGlobals.asyncModuleExportSymbol}= ` : ""
35
+ }hasSymbol ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
36
+ 'var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__";',
37
+ defer
38
+ ? Template.asString([
39
+ `var webpackDone = ${RuntimeGlobals.asyncModuleDoneSymbol} = hasSymbol ? Symbol("webpack done") : "__webpack_done__";`,
40
+ `var webpackDefer = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol} = hasSymbol ? Symbol("webpack defer") : "__webpack_defer__";`,
41
+ `${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies} = ${runtimeTemplate.basicFunction(
42
+ "asyncDeps",
43
+ [
44
+ Template.indent([
45
+ "var hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {",
46
+ Template.indent([
47
+ "var cache = __webpack_module_cache__[id];",
48
+ "return !cache || cache[webpackDone] === false;"
49
+ ]),
50
+ "});",
51
+ "if (hasUnresolvedAsyncSubgraph) {",
52
+ Template.indent([
53
+ "return ({ then(onFulfilled, onRejected) { return Promise.all(asyncDeps.map(__webpack_require__)).then(onFulfilled, onRejected) } })"
54
+ ]),
55
+ "}"
56
+ ])
57
+ ]
58
+ )}`
59
+ ])
60
+ : "",
29
61
  `var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
30
62
  "if(queue && queue.d < 1) {",
31
63
  Template.indent([
@@ -45,6 +77,31 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
45
77
  `deps.map(${runtimeTemplate.basicFunction("dep", [
46
78
  'if(dep !== null && typeof dep === "object") {',
47
79
  Template.indent([
80
+ defer
81
+ ? Template.asString([
82
+ "if(!dep[webpackQueues] && dep[webpackDefer]) {",
83
+ Template.indent([
84
+ `var asyncDeps = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(dep[webpackDefer]);`,
85
+ "if (asyncDeps) {",
86
+ Template.indent([
87
+ "var d = dep;",
88
+ "dep = {",
89
+ Template.indent([
90
+ "then(onFulfilled, onRejected) {",
91
+ Template.indent([
92
+ `asyncDeps.then(${runtimeTemplate.returningFunction(
93
+ "onFulfilled(d)"
94
+ )}, onRejected);`
95
+ ]),
96
+ "}"
97
+ ]),
98
+ "};"
99
+ ]),
100
+ "} else return dep;"
101
+ ]),
102
+ "}"
103
+ ])
104
+ : "",
48
105
  "if(dep[webpackQueues]) return dep;",
49
106
  "if(dep.then) {",
50
107
  Template.indent([
@@ -58,6 +115,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
58
115
  "resolveQueue(queue);"
59
116
  ])});`,
60
117
  "var obj = {};",
118
+ defer ? "obj[webpackDefer] = false;" : "",
61
119
  `obj[webpackQueues] = ${runtimeTemplate.expressionFunction(
62
120
  "fn(queue)",
63
121
  "fn"
@@ -92,11 +150,12 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
92
150
  "fn"
93
151
  )};`,
94
152
  "module.exports = promise;",
95
- `body(${runtimeTemplate.basicFunction("deps", [
153
+ `var handle = ${runtimeTemplate.basicFunction("deps", [
96
154
  "currentDeps = wrapDeps(deps);",
97
155
  "var fn;",
98
156
  `var getResult = ${runtimeTemplate.returningFunction(
99
157
  `currentDeps.map(${runtimeTemplate.basicFunction("d", [
158
+ defer ? "if(d[webpackDefer]) return d;" : "",
100
159
  "if(d[webpackError]) throw d[webpackError];",
101
160
  "return d[webpackExports];"
102
161
  ])})`
@@ -114,16 +173,22 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
114
173
  "q"
115
174
  )};`,
116
175
  `currentDeps.map(${runtimeTemplate.expressionFunction(
117
- "dep[webpackQueues](fnQueue)",
176
+ `${
177
+ defer ? "dep[webpackDefer]||" : ""
178
+ }dep[webpackQueues](fnQueue)`,
118
179
  "dep"
119
180
  )});`
120
181
  ]
121
182
  )});`,
122
183
  "return fn.r ? promise : getResult();"
123
- ])}, ${runtimeTemplate.expressionFunction(
124
- "(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)",
184
+ ])}`,
185
+ `var done = ${runtimeTemplate.expressionFunction(
186
+ `(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)${
187
+ defer ? ", promise[webpackDone] = true" : ""
188
+ }`,
125
189
  "err"
126
- )});`,
190
+ )}`,
191
+ "body(handle, done);",
127
192
  "queue && queue.d < 0 && (queue.d = 0);"
128
193
  ])};`
129
194
  ]);
@@ -23,7 +23,8 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
23
23
  */
24
24
  generate() {
25
25
  const compilation = /** @type {Compilation} */ (this.compilation);
26
- const { scriptType, importMetaName, path } = compilation.outputOptions;
26
+ const { scriptType, importMetaName, path, environment } =
27
+ compilation.outputOptions;
27
28
  const chunkName = compilation.getPath(
28
29
  JavascriptModulesPlugin.getChunkFilenameTemplate(
29
30
  /** @type {Chunk} */
@@ -41,13 +42,17 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
41
42
  false
42
43
  );
43
44
 
45
+ const global = environment.globalThis
46
+ ? "globalThis"
47
+ : RuntimeGlobals.global;
48
+
44
49
  return Template.asString([
45
50
  "var scriptUrl;",
46
51
  scriptType === "module"
47
52
  ? `if (typeof ${importMetaName}.url === "string") scriptUrl = ${importMetaName}.url`
48
53
  : Template.asString([
49
- `if (${RuntimeGlobals.global}.importScripts) scriptUrl = ${RuntimeGlobals.global}.location + "";`,
50
- `var document = ${RuntimeGlobals.global}.document;`,
54
+ `if (${global}.importScripts) scriptUrl = ${global}.location + "";`,
55
+ `var document = ${global}.document;`,
51
56
  "if (!scriptUrl && document) {",
52
57
  Template.indent([
53
58
  // Technically we could use `document.currentScript instanceof window.HTMLScriptElement`,
@@ -72,7 +77,7 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
72
77
  "// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration",
73
78
  '// or pass an empty string ("") and set the __webpack_public_path__ variable from your code to use your own logic.',
74
79
  'if (!scriptUrl) throw new Error("Automatic publicPath is not supported in this browser");',
75
- 'scriptUrl = scriptUrl.replace(/#.*$/, "").replace(/\\?.*$/, "").replace(/\\/[^\\/]+$/, "/");',
80
+ 'scriptUrl = scriptUrl.replace(/^blob:/, "").replace(/#.*$/, "").replace(/\\?.*$/, "").replace(/\\/[^\\/]+$/, "/");',
76
81
  !undoPath
77
82
  ? `${RuntimeGlobals.publicPath} = scriptUrl;`
78
83
  : `${RuntimeGlobals.publicPath} = scriptUrl + ${JSON.stringify(
@@ -8,7 +8,7 @@
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
 
11
- /** @typedef {import("../../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescriptionNormalized */
11
+ /** @typedef {import("../../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescription */
12
12
  /** @typedef {import("../Chunk")} Chunk */
13
13
 
14
14
  class BaseUriRuntimeModule extends RuntimeModule {
@@ -22,7 +22,7 @@ class BaseUriRuntimeModule extends RuntimeModule {
22
22
  generate() {
23
23
  const chunk = /** @type {Chunk} */ (this.chunk);
24
24
  const options =
25
- /** @type {EntryDescriptionNormalized} */
25
+ /** @type {EntryDescription} */
26
26
  (chunk.getEntryOptions());
27
27
  return `${RuntimeGlobals.baseURI} = ${
28
28
  options.baseUri === undefined
@@ -10,7 +10,6 @@ const RuntimeModule = require("../RuntimeModule");
10
10
  /** @typedef {import("../Chunk")} Chunk */
11
11
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
12
12
  /** @typedef {import("../Compilation")} Compilation */
13
- /** @typedef {import("../MainTemplate")} MainTemplate */
14
13
 
15
14
  class CompatRuntimeModule extends RuntimeModule {
16
15
  constructor() {
@@ -49,7 +49,7 @@ class CreateFakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
49
49
  `${RuntimeGlobals.makeNamespaceObject}(ns);`,
50
50
  "var def = {};",
51
51
  "leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];",
52
- "for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {",
52
+ "for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {",
53
53
  Template.indent([
54
54
  `Object.getOwnPropertyNames(current).forEach(${runtimeTemplate.expressionFunction(
55
55
  `def[key] = ${runtimeTemplate.returningFunction("value[key]", "")}`,