webpack 5.76.1 → 5.88.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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (436) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +4 -0
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -5,12 +5,22 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const {
9
+ JAVASCRIPT_MODULE_TYPE_AUTO,
10
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
11
+ JAVASCRIPT_MODULE_TYPE_ESM
12
+ } = require("./ModuleTypeConstants");
13
+ const RuntimeGlobals = require("./RuntimeGlobals");
8
14
  const ConstDependency = require("./dependencies/ConstDependency");
9
15
 
16
+ /** @typedef {import("estree").CallExpression} CallExpression */
10
17
  /** @typedef {import("./Compiler")} Compiler */
18
+ /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
11
19
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
20
+ /** @typedef {import("./javascript/JavascriptParser").Range} Range */
12
21
 
13
- const nestedWebpackRequireTag = Symbol("nested __webpack_require__");
22
+ const nestedWebpackIdentifierTag = Symbol("nested webpack identifier");
23
+ const PLUGIN_NAME = "CompatibilityPlugin";
14
24
 
15
25
  class CompatibilityPlugin {
16
26
  /**
@@ -20,7 +30,7 @@ class CompatibilityPlugin {
20
30
  */
21
31
  apply(compiler) {
22
32
  compiler.hooks.compilation.tap(
23
- "CompatibilityPlugin",
33
+ PLUGIN_NAME,
24
34
  (compilation, { normalModuleFactory }) => {
25
35
  compilation.dependencyTemplates.set(
26
36
  ConstDependency,
@@ -28,24 +38,31 @@ class CompatibilityPlugin {
28
38
  );
29
39
 
30
40
  normalModuleFactory.hooks.parser
31
- .for("javascript/auto")
32
- .tap("CompatibilityPlugin", (parser, parserOptions) => {
41
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
42
+ .tap(PLUGIN_NAME, (parser, parserOptions) => {
33
43
  if (
34
44
  parserOptions.browserify !== undefined &&
35
45
  !parserOptions.browserify
36
46
  )
37
47
  return;
38
48
 
39
- parser.hooks.call
40
- .for("require")
41
- .tap("CompatibilityPlugin", expr => {
49
+ parser.hooks.call.for("require").tap(
50
+ PLUGIN_NAME,
51
+ /**
52
+ * @param {CallExpression} expr call expression
53
+ * @returns {boolean | void} true when need to handle
54
+ */
55
+ expr => {
42
56
  // support for browserify style require delegator: "require(o, !0)"
43
57
  if (expr.arguments.length !== 2) return;
44
58
  const second = parser.evaluateExpression(expr.arguments[1]);
45
59
  if (!second.isBoolean()) return;
46
60
  if (second.asBool() !== true) return;
47
- const dep = new ConstDependency("require", expr.callee.range);
48
- dep.loc = expr.loc;
61
+ const dep = new ConstDependency(
62
+ "require",
63
+ /** @type {Range} */ (expr.callee.range)
64
+ );
65
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
49
66
  if (parser.state.current.dependencies.length > 0) {
50
67
  const last =
51
68
  parser.state.current.dependencies[
@@ -62,7 +79,8 @@ class CompatibilityPlugin {
62
79
  }
63
80
  parser.state.module.addPresentationalDependency(dep);
64
81
  return true;
65
- });
82
+ }
83
+ );
66
84
  });
67
85
 
68
86
  /**
@@ -71,30 +89,51 @@ class CompatibilityPlugin {
71
89
  */
72
90
  const handler = parser => {
73
91
  // Handle nested requires
74
- parser.hooks.preStatement.tap("CompatibilityPlugin", statement => {
92
+ parser.hooks.preStatement.tap(PLUGIN_NAME, statement => {
75
93
  if (
76
94
  statement.type === "FunctionDeclaration" &&
77
95
  statement.id &&
78
- statement.id.name === "__webpack_require__"
96
+ statement.id.name === RuntimeGlobals.require
79
97
  ) {
80
- const newName = `__nested_webpack_require_${statement.range[0]}__`;
81
- parser.tagVariable(statement.id.name, nestedWebpackRequireTag, {
98
+ const newName = `__nested_webpack_require_${
99
+ /** @type {Range} */ (statement.range)[0]
100
+ }__`;
101
+ parser.tagVariable(
102
+ statement.id.name,
103
+ nestedWebpackIdentifierTag,
104
+ {
105
+ name: newName,
106
+ declaration: {
107
+ updated: false,
108
+ loc: statement.id.loc,
109
+ range: statement.id.range
110
+ }
111
+ }
112
+ );
113
+ return true;
114
+ }
115
+ });
116
+ parser.hooks.pattern
117
+ .for(RuntimeGlobals.require)
118
+ .tap(PLUGIN_NAME, pattern => {
119
+ const newName = `__nested_webpack_require_${
120
+ /** @type {Range} */ (pattern.range)[0]
121
+ }__`;
122
+ parser.tagVariable(pattern.name, nestedWebpackIdentifierTag, {
82
123
  name: newName,
83
124
  declaration: {
84
125
  updated: false,
85
- loc: statement.id.loc,
86
- range: statement.id.range
126
+ loc: pattern.loc,
127
+ range: pattern.range
87
128
  }
88
129
  });
89
130
  return true;
90
- }
91
- });
131
+ });
92
132
  parser.hooks.pattern
93
- .for("__webpack_require__")
94
- .tap("CompatibilityPlugin", pattern => {
95
- const newName = `__nested_webpack_require_${pattern.range[0]}__`;
96
- parser.tagVariable(pattern.name, nestedWebpackRequireTag, {
97
- name: newName,
133
+ .for(RuntimeGlobals.exports)
134
+ .tap(PLUGIN_NAME, pattern => {
135
+ parser.tagVariable(pattern.name, nestedWebpackIdentifierTag, {
136
+ name: "__nested_webpack_exports__",
98
137
  declaration: {
99
138
  updated: false,
100
139
  loc: pattern.loc,
@@ -104,8 +143,8 @@ class CompatibilityPlugin {
104
143
  return true;
105
144
  });
106
145
  parser.hooks.expression
107
- .for(nestedWebpackRequireTag)
108
- .tap("CompatibilityPlugin", expr => {
146
+ .for(nestedWebpackIdentifierTag)
147
+ .tap(PLUGIN_NAME, expr => {
109
148
  const { name, declaration } = parser.currentTagData;
110
149
  if (!declaration.updated) {
111
150
  const dep = new ConstDependency(name, declaration.range);
@@ -113,38 +152,38 @@ class CompatibilityPlugin {
113
152
  parser.state.module.addPresentationalDependency(dep);
114
153
  declaration.updated = true;
115
154
  }
116
- const dep = new ConstDependency(name, expr.range);
117
- dep.loc = expr.loc;
155
+ const dep = new ConstDependency(
156
+ name,
157
+ /** @type {Range} */ (expr.range)
158
+ );
159
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
118
160
  parser.state.module.addPresentationalDependency(dep);
119
161
  return true;
120
162
  });
121
163
 
122
164
  // Handle hashbang
123
- parser.hooks.program.tap(
124
- "CompatibilityPlugin",
125
- (program, comments) => {
126
- if (comments.length === 0) return;
127
- const c = comments[0];
128
- if (c.type === "Line" && c.range[0] === 0) {
129
- if (parser.state.source.slice(0, 2).toString() !== "#!") return;
130
- // this is a hashbang comment
131
- const dep = new ConstDependency("//", 0);
132
- dep.loc = c.loc;
133
- parser.state.module.addPresentationalDependency(dep);
134
- }
165
+ parser.hooks.program.tap(PLUGIN_NAME, (program, comments) => {
166
+ if (comments.length === 0) return;
167
+ const c = comments[0];
168
+ if (c.type === "Line" && /** @type {Range} */ (c.range)[0] === 0) {
169
+ if (parser.state.source.slice(0, 2).toString() !== "#!") return;
170
+ // this is a hashbang comment
171
+ const dep = new ConstDependency("//", 0);
172
+ dep.loc = /** @type {DependencyLocation} */ (c.loc);
173
+ parser.state.module.addPresentationalDependency(dep);
135
174
  }
136
- );
175
+ });
137
176
  };
138
177
 
139
178
  normalModuleFactory.hooks.parser
140
- .for("javascript/auto")
141
- .tap("CompatibilityPlugin", handler);
179
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
180
+ .tap(PLUGIN_NAME, handler);
142
181
  normalModuleFactory.hooks.parser
143
- .for("javascript/dynamic")
144
- .tap("CompatibilityPlugin", handler);
182
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
183
+ .tap(PLUGIN_NAME, handler);
145
184
  normalModuleFactory.hooks.parser
146
- .for("javascript/esm")
147
- .tap("CompatibilityPlugin", handler);
185
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
186
+ .tap(PLUGIN_NAME, handler);
148
187
  }
149
188
  );
150
189
  }
@@ -49,6 +49,7 @@ const ModuleProfile = require("./ModuleProfile");
49
49
  const ModuleRestoreError = require("./ModuleRestoreError");
50
50
  const ModuleStoreError = require("./ModuleStoreError");
51
51
  const ModuleTemplate = require("./ModuleTemplate");
52
+ const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
52
53
  const RuntimeGlobals = require("./RuntimeGlobals");
53
54
  const RuntimeTemplate = require("./RuntimeTemplate");
54
55
  const Stats = require("./Stats");
@@ -61,7 +62,7 @@ const StatsPrinter = require("./stats/StatsPrinter");
61
62
  const { equals: arrayEquals } = require("./util/ArrayHelpers");
62
63
  const AsyncQueue = require("./util/AsyncQueue");
63
64
  const LazySet = require("./util/LazySet");
64
- const { provide } = require("./util/MapHelpers");
65
+ const { getOrInsert } = require("./util/MapHelpers");
65
66
  const WeakTupleMap = require("./util/WeakTupleMap");
66
67
  const { cachedCleverMerge } = require("./util/cleverMerge");
67
68
  const {
@@ -646,7 +647,12 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
646
647
 
647
648
  /** @type {SyncHook<[]>} */
648
649
  beforeChunks: new SyncHook([]),
649
- /** @type {SyncHook<[Iterable<Chunk>]>} */
650
+ /**
651
+ * The `afterChunks` hook is called directly after the chunks and module graph have
652
+ * been created and before the chunks and modules have been optimized. This hook is useful to
653
+ * inspect, analyze, and/or modify the chunk graph.
654
+ * @type {SyncHook<[Iterable<Chunk>]>}
655
+ */
650
656
  afterChunks: new SyncHook(["chunks"]),
651
657
 
652
658
  /** @type {SyncBailHook<[Iterable<Module>]>} */
@@ -675,7 +681,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
675
681
  optimizeChunkModules: new AsyncSeriesBailHook(["chunks", "modules"]),
676
682
  /** @type {SyncHook<[Iterable<Chunk>, Iterable<Module>]>} */
677
683
  afterOptimizeChunkModules: new SyncHook(["chunks", "modules"]),
678
- /** @type {SyncBailHook<[], boolean>} */
684
+ /** @type {SyncBailHook<[], boolean | undefined>} */
679
685
  shouldRecord: new SyncBailHook([]),
680
686
 
681
687
  /** @type {SyncHook<[Chunk, Set<string>, RuntimeRequirementsContext]>} */
@@ -2578,6 +2584,8 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
2578
2584
  p.calculate();
2579
2585
 
2580
2586
  const logger = this.getLogger("webpack.Compilation.ModuleProfile");
2587
+ // Avoid coverage problems due indirect changes
2588
+ /* istanbul ignore next */
2581
2589
  const logByValue = (value, msg) => {
2582
2590
  if (value > 1000) {
2583
2591
  logger.error(msg);
@@ -2618,7 +2626,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
2618
2626
  const logByLoadersSummary = (category, getDuration, getParallelism) => {
2619
2627
  const map = new Map();
2620
2628
  for (const [module, profile] of modulesWithProfiles) {
2621
- const list = provide(
2629
+ const list = getOrInsert(
2622
2630
  map,
2623
2631
  module.type + "!" + module.identifier().replace(/(!|^)[^!]*$/, ""),
2624
2632
  () => []
@@ -3200,6 +3208,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3200
3208
  const { chunkGraph, moduleGraph, dependencyTemplates, runtimeTemplate } =
3201
3209
  this;
3202
3210
  const results = this.codeGenerationResults;
3211
+ /** @type {WebpackError[]} */
3203
3212
  const errors = [];
3204
3213
  /** @type {Set<Module> | undefined} */
3205
3214
  let notCodeGeneratedModules = undefined;
@@ -3295,7 +3304,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
3295
3304
  * @param {RuntimeTemplate} runtimeTemplate runtimeTemplate
3296
3305
  * @param {WebpackError[]} errors errors
3297
3306
  * @param {CodeGenerationResults} results results
3298
- * @param {function(WebpackError=, boolean=): void} callback callback
3307
+ * @param {function((WebpackError | null)=, boolean=): void} callback callback
3299
3308
  */
3300
3309
  _codeGenerationModule(
3301
3310
  module,
@@ -5016,13 +5025,13 @@ This prevents using hashes of each other and should be avoided.`);
5016
5025
  };
5017
5026
  const interceptModuleExecution = (__webpack_require__[
5018
5027
  RuntimeGlobals.interceptModuleExecution.replace(
5019
- "__webpack_require__.",
5028
+ `${RuntimeGlobals.require}.`,
5020
5029
  ""
5021
5030
  )
5022
5031
  ] = []);
5023
5032
  const moduleCache = (__webpack_require__[
5024
5033
  RuntimeGlobals.moduleCache.replace(
5025
- "__webpack_require__.",
5034
+ `${RuntimeGlobals.require}.`,
5026
5035
  ""
5027
5036
  )
5028
5037
  ] = {});
@@ -5119,7 +5128,7 @@ This prevents using hashes of each other and should be avoided.`);
5119
5128
  const usedIds = new Set();
5120
5129
 
5121
5130
  for (const module of this.modules) {
5122
- if (module.type === "runtime") continue;
5131
+ if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) continue;
5123
5132
  const moduleId = chunkGraph.getModuleId(module);
5124
5133
  if (moduleId === null) continue;
5125
5134
  if (usedIds.has(moduleId)) {
package/lib/Compiler.js CHANGED
@@ -126,7 +126,7 @@ class Compiler {
126
126
  /** @type {SyncHook<[]>} */
127
127
  initialize: new SyncHook([]),
128
128
 
129
- /** @type {SyncBailHook<[Compilation], boolean>} */
129
+ /** @type {SyncBailHook<[Compilation], boolean | undefined>} */
130
130
  shouldEmit: new SyncBailHook(["compilation"]),
131
131
  /** @type {AsyncSeriesHook<[Stats]>} */
132
132
  done: new AsyncSeriesHook(["stats"]),
@@ -970,10 +970,13 @@ ${other}`);
970
970
  readRecords(callback) {
971
971
  if (this.hooks.readRecords.isUsed()) {
972
972
  if (this.recordsInputPath) {
973
- asyncLib.parallel([
974
- cb => this.hooks.readRecords.callAsync(cb),
975
- this._readRecords.bind(this)
976
- ]);
973
+ asyncLib.parallel(
974
+ [
975
+ cb => this.hooks.readRecords.callAsync(cb),
976
+ this._readRecords.bind(this)
977
+ ],
978
+ err => callback(err)
979
+ );
977
980
  } else {
978
981
  this.records = {};
979
982
  this.hooks.readRecords.callAsync(callback);
@@ -1008,8 +1011,7 @@ ${other}`);
1008
1011
  try {
1009
1012
  this.records = parseJson(content.toString("utf-8"));
1010
1013
  } catch (e) {
1011
- e.message = "Cannot parse records: " + e.message;
1012
- return callback(e);
1014
+ return callback(new Error(`Cannot parse records: ${e.message}`));
1013
1015
  }
1014
1016
 
1015
1017
  return callback();
@@ -1071,7 +1073,9 @@ ${other}`);
1071
1073
  childCompiler.root = this.root;
1072
1074
  if (Array.isArray(plugins)) {
1073
1075
  for (const plugin of plugins) {
1074
- plugin.apply(childCompiler);
1076
+ if (plugin) {
1077
+ plugin.apply(childCompiler);
1078
+ }
1075
1079
  }
1076
1080
  }
1077
1081
  for (const name in this.hooks) {
@@ -108,7 +108,7 @@ class ConcatenationScope {
108
108
  module,
109
109
  { ids = undefined, call = false, directImport = false, asiSafe = false }
110
110
  ) {
111
- const info = this._modulesMap.get(module);
111
+ const info = /** @type {ModuleInfo} */ (this._modulesMap.get(module));
112
112
  const callFlag = call ? "_call" : "";
113
113
  const directImportFlag = directImport ? "_directImport" : "";
114
114
  const asiSafeFlag = asiSafe
@@ -133,7 +133,7 @@ class ConcatenationScope {
133
133
 
134
134
  /**
135
135
  * @param {string} name the identifier
136
- * @returns {ModuleReferenceOptions & { index: number }} parsed options and index
136
+ * @returns {ModuleReferenceOptions & { index: number } | null} parsed options and index
137
137
  */
138
138
  static matchModuleReference(name) {
139
139
  const match = MODULE_REFERENCE_REGEXP.exec(name);
@@ -14,6 +14,11 @@ const { mergeRuntime } = require("./util/runtime");
14
14
  /** @typedef {import("./Generator").GenerateContext} GenerateContext */
15
15
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
16
16
 
17
+ /**
18
+ * @param {string} condition condition
19
+ * @param {string | Source} source source
20
+ * @returns {string | Source} wrapped source
21
+ */
17
22
  const wrapInCondition = (condition, source) => {
18
23
  if (typeof source === "string") {
19
24
  return Template.asString([
@@ -33,13 +38,14 @@ const wrapInCondition = (condition, source) => {
33
38
 
34
39
  /**
35
40
  * @typedef {GenerateContext} Context
41
+ * @extends {InitFragment<Context>}
36
42
  */
37
43
  class ConditionalInitFragment extends InitFragment {
38
44
  /**
39
45
  * @param {string|Source} content the source code that will be included as initialization code
40
46
  * @param {number} stage category of initialization code (contribute to order)
41
47
  * @param {number} position position in the category (contribute to order)
42
- * @param {string} key unique key to avoid emitting the same initialization code twice
48
+ * @param {string | undefined} key unique key to avoid emitting the same initialization code twice
43
49
  * @param {RuntimeSpec | boolean} runtimeCondition in which runtime this fragment should be executed
44
50
  * @param {string|Source=} endContent the source code that will be included at the end of the module
45
51
  */
@@ -89,6 +95,10 @@ class ConditionalInitFragment extends InitFragment {
89
95
  return wrapInCondition(expr, this.endContent);
90
96
  }
91
97
 
98
+ /**
99
+ * @param {ConditionalInitFragment} other fragment to merge with
100
+ * @returns {ConditionalInitFragment} merged fragment
101
+ */
92
102
  merge(other) {
93
103
  if (this.runtimeCondition === true) return this;
94
104
  if (other.runtimeCondition === true) return other;