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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (647) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +46 -35
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +107 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +91 -26
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +111 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +40 -49
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +152 -103
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +335 -169
  89. package/lib/RuntimeTemplate.js +2761 -316
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +12 -6
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +270 -78
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +46 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +84 -32
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +172 -100
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5334 -0
  160. package/lib/css/syntax.js +9647 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +170 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +121 -60
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +49 -31
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +45 -5
  230. package/lib/dependencies/ImportDependency.js +33 -50
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +73 -49
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +50 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
  290. package/lib/dependencies/WorkerDependency.js +22 -22
  291. package/lib/dependencies/WorkletDependency.js +18 -21
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/importOptionsCheck.js +47 -0
  294. package/lib/dependencies/processExportInfo.js +5 -5
  295. package/lib/dll/DelegatedModule.js +34 -22
  296. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  297. package/lib/dll/DelegatedPlugin.js +2 -2
  298. package/lib/dll/DllEntryPlugin.js +2 -2
  299. package/lib/dll/DllModule.js +22 -15
  300. package/lib/dll/DllModuleFactory.js +7 -3
  301. package/lib/dll/DllPlugin.js +7 -5
  302. package/lib/dll/DllReferencePlugin.js +10 -7
  303. package/lib/dll/LibManifestPlugin.js +5 -5
  304. package/lib/electron/ElectronTargetPlugin.js +53 -49
  305. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  306. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  307. package/lib/errors/BroadContextsWarning.js +43 -0
  308. package/lib/errors/BuildCycleError.js +1 -1
  309. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  310. package/lib/errors/ChunkRenderError.js +1 -1
  311. package/lib/errors/CircularDependenciesWarning.js +38 -0
  312. package/lib/errors/CodeGenerationError.js +1 -1
  313. package/lib/errors/CommentCompilationWarning.js +1 -1
  314. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  315. package/lib/errors/DotenvFileError.js +29 -0
  316. package/lib/errors/DuplicateModulesWarning.js +45 -0
  317. package/lib/errors/DynamicExportsWarning.js +30 -0
  318. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  319. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  320. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  321. package/lib/errors/EvalUsageWarning.js +28 -0
  322. package/lib/errors/HookWebpackError.js +5 -5
  323. package/lib/errors/HotspotsWarning.js +57 -0
  324. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  325. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  326. package/lib/errors/InlinedAssetsWarning.js +36 -0
  327. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  328. package/lib/errors/LargeModulesWarning.js +45 -0
  329. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  330. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  331. package/lib/errors/MixedExportsWarning.js +41 -0
  332. package/lib/errors/ModuleDependencyError.js +13 -16
  333. package/lib/errors/ModuleDependencyWarning.js +5 -15
  334. package/lib/errors/ModuleHashingError.js +1 -1
  335. package/lib/errors/ModuleNotFoundError.js +2 -2
  336. package/lib/errors/ModuleParseError.js +1 -2
  337. package/lib/errors/ModuleRestoreError.js +1 -1
  338. package/lib/errors/ModuleStoreError.js +1 -1
  339. package/lib/errors/NodeStuffInWebError.js +1 -1
  340. package/lib/errors/OsDependentRuleWarning.js +31 -0
  341. package/lib/errors/PureAnnotationsWarning.js +36 -0
  342. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  343. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  344. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  345. package/lib/errors/TinyChunksWarning.js +40 -0
  346. package/lib/errors/TopLevelThisWarning.js +34 -0
  347. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  348. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  349. package/lib/errors/UnusedAliasesWarning.js +29 -0
  350. package/lib/errors/UnusedDefinesWarning.js +29 -0
  351. package/lib/errors/UnusedExternalsWarning.js +29 -0
  352. package/lib/errors/UnusedReexportsWarning.js +42 -0
  353. package/lib/errors/UnusedRuleWarning.js +29 -0
  354. package/lib/errors/WebpackError.js +9 -5
  355. package/lib/errors/deriveStackFromNestedError.js +90 -0
  356. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  357. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  358. package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
  359. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
  360. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  361. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  362. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  363. package/lib/hmr/lazyCompilationBackend.js +9 -6
  364. package/lib/hmr/parserHooks.js +56 -0
  365. package/lib/html/HtmlGenerator.js +277 -77
  366. package/lib/html/HtmlModule.js +7 -3
  367. package/lib/html/HtmlModulesPlugin.js +366 -200
  368. package/lib/html/HtmlParser.js +31 -86
  369. package/lib/html/data.js +1928 -0
  370. package/lib/html/htmlMinify.js +288 -0
  371. package/lib/html/syntax.js +6034 -1384
  372. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  373. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  374. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  375. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  376. package/lib/ids/IdHelpers.js +7 -8
  377. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  378. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  379. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  380. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  381. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  382. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  383. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  384. package/lib/index.js +10 -0
  385. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  386. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  387. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  388. package/lib/javascript/ChunkHelpers.js +1 -1
  389. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  390. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  391. package/lib/javascript/JavascriptGenerator.js +65 -165
  392. package/lib/javascript/JavascriptModule.js +9 -3
  393. package/lib/javascript/JavascriptModulesPlugin.js +103 -123
  394. package/lib/javascript/JavascriptParser.js +242 -99
  395. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  396. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  397. package/lib/javascript/StartupHelpers.js +55 -9
  398. package/lib/javascript/syntax.js +2678 -232
  399. package/lib/json/JsonData.js +8 -4
  400. package/lib/json/JsonGenerator.js +38 -16
  401. package/lib/json/JsonModule.js +7 -3
  402. package/lib/json/JsonModulesPlugin.js +1 -1
  403. package/lib/json/JsonParser.js +5 -6
  404. package/lib/library/AbstractLibraryPlugin.js +20 -14
  405. package/lib/library/AmdLibraryPlugin.js +11 -7
  406. package/lib/library/AssignLibraryPlugin.js +19 -13
  407. package/lib/library/EnableLibraryPlugin.js +2 -2
  408. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  409. package/lib/library/JsonpLibraryPlugin.js +11 -7
  410. package/lib/library/ModuleLibraryPlugin.js +256 -64
  411. package/lib/library/SystemLibraryPlugin.js +12 -8
  412. package/lib/library/UmdLibraryPlugin.js +62 -25
  413. package/lib/loaders/LoaderRunner.js +47 -6
  414. package/lib/loaders/loadLoader.js +8 -4
  415. package/lib/logging/createConsoleLogger.js +7 -4
  416. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  417. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  418. package/lib/node/NodeSourcePlugin.js +1 -1
  419. package/lib/node/NodeTargetPlugin.js +4 -3
  420. package/lib/node/NodeTemplatePlugin.js +1 -1
  421. package/lib/node/NodeWatchFileSystem.js +70 -9
  422. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
  424. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  425. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  426. package/lib/node/nodeConsole.js +7 -3
  427. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  428. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  429. package/lib/optimize/ConcatenatedModule.js +1030 -476
  430. package/lib/optimize/ConstExportsPlugin.js +16 -7
  431. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  432. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  433. package/lib/optimize/InlineExports.js +130 -5
  434. package/lib/optimize/InnerGraph.js +28 -12
  435. package/lib/optimize/InnerGraphPlugin.js +23 -18
  436. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  437. package/lib/optimize/MangleExportsPlugin.js +7 -8
  438. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  439. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  440. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  441. package/lib/optimize/RealContentHashPlugin.js +121 -41
  442. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  443. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  444. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  445. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  446. package/lib/optimize/SplitChunksPlugin.js +86 -24
  447. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  448. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  449. package/lib/performance/BroadContextsPlugin.js +142 -0
  450. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  451. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  452. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  453. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  454. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  455. package/lib/performance/DynamicExportsPlugin.js +120 -0
  456. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  457. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  458. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  459. package/lib/performance/EvalUsagePlugin.js +115 -0
  460. package/lib/performance/HotspotsPlugin.js +296 -0
  461. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  462. package/lib/performance/LargeModulesPlugin.js +126 -0
  463. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  464. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  465. package/lib/performance/MixedExportsPlugin.js +136 -0
  466. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  467. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  468. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  469. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  470. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  471. package/lib/performance/SizeLimitsPlugin.js +139 -7
  472. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  473. package/lib/performance/TinyChunksPlugin.js +128 -0
  474. package/lib/performance/TopLevelThisPlugin.js +208 -0
  475. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  476. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  477. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  478. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  479. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  480. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  481. package/lib/performance/getModuleSize.js +22 -0
  482. package/lib/performance/getSourceModules.js +22 -0
  483. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  484. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  485. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  486. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  487. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  488. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  489. package/lib/prefetch/ResourceHintPlugin.js +295 -79
  490. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  491. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  492. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  493. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  494. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  495. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  496. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  497. package/lib/rules/RuleSetCompiler.js +146 -12
  498. package/lib/rules/UseEffectRulePlugin.js +18 -11
  499. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  500. package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
  501. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  502. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  503. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  504. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  505. package/lib/runtime/CompatRuntimeModule.js +5 -3
  506. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  507. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  508. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  509. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  510. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  511. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  512. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  513. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  514. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  515. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  516. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  517. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  518. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  519. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  520. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  521. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
  522. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  523. package/lib/runtime/NonceRuntimeModule.js +10 -0
  524. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  525. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  526. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  527. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  528. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  529. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  530. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  531. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  532. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  533. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  534. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  535. package/lib/runtime/baseUri.js +63 -0
  536. package/lib/schemes/DataUriPlugin.js +1 -1
  537. package/lib/schemes/FileUriPlugin.js +1 -1
  538. package/lib/schemes/HttpUriPlugin.js +46 -20
  539. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  540. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  541. package/lib/serialization/BinaryMiddleware.js +4 -4
  542. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  543. package/lib/serialization/FileMiddleware.js +22 -9
  544. package/lib/serialization/ObjectMiddleware.js +139 -114
  545. package/lib/serialization/PlainObjectSerializer.js +19 -16
  546. package/lib/sharing/ConsumeSharedModule.js +30 -21
  547. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  548. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  549. package/lib/sharing/ProvideSharedModule.js +25 -16
  550. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  551. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  552. package/lib/sharing/SharePlugin.js +17 -5
  553. package/lib/sharing/ShareRuntimeModule.js +4 -4
  554. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  555. package/lib/sharing/utils.js +1 -3
  556. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  557. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  558. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  559. package/lib/stats/StatsFactory.js +25 -26
  560. package/lib/stats/StatsPrinter.js +16 -12
  561. package/lib/typescript/TypeScriptPlugin.js +20 -24
  562. package/lib/url/URLParserPlugin.js +26 -13
  563. package/lib/util/ArrayQueue.js +3 -3
  564. package/lib/util/AsyncQueue.js +4 -3
  565. package/lib/util/Hash.js +5 -1
  566. package/lib/util/LazySet.js +35 -22
  567. package/lib/util/LocConverter.js +36 -13
  568. package/lib/util/SourceProcessor.js +1066 -24
  569. package/lib/util/StringXor.js +1 -1
  570. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  571. package/lib/util/chainedImports.js +9 -5
  572. package/lib/util/cleverMerge.js +1 -1
  573. package/lib/util/comparators.js +45 -14
  574. package/lib/util/concatenate.js +203 -77
  575. package/lib/util/conventions.js +10 -2
  576. package/lib/util/createHash.js +2 -2
  577. package/lib/util/createHooksRegistry.js +8 -10
  578. package/lib/util/createMappings.js +25 -3
  579. package/lib/util/dataURL.js +225 -1
  580. package/lib/util/extractSourceMap.js +4 -3
  581. package/lib/util/findCaseMismatch.js +139 -0
  582. package/lib/util/formatLocation.js +1 -2
  583. package/lib/util/fs.js +22 -5
  584. package/lib/util/globUtils.js +298 -24
  585. package/lib/util/hash/BatchedHash.js +5 -1
  586. package/lib/util/hash/BulkUpdateHash.js +5 -1
  587. package/lib/util/hash/DebugHash.js +5 -1
  588. package/lib/util/hash/hash-digest.js +6 -2
  589. package/lib/util/identifier.js +4 -0
  590. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  591. package/lib/util/internalSerializables.js +8 -0
  592. package/lib/util/lazyModule.js +56 -0
  593. package/lib/util/makeSerializable.js +7 -3
  594. package/lib/util/matchAlias.js +25 -0
  595. package/lib/util/mimeTypes.js +11 -5
  596. package/lib/util/nonNumericOnlyHash.js +4 -3
  597. package/lib/util/parseJson.js +5 -3
  598. package/lib/util/preloadModuleType.js +32 -0
  599. package/lib/util/registerExternalSerializer.js +7 -5
  600. package/lib/util/removeBOM.js +82 -1
  601. package/lib/util/runtime.js +2 -2
  602. package/lib/util/semver.js +1 -1
  603. package/lib/util/serialization.js +28 -28
  604. package/lib/util/source.js +2 -2
  605. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  606. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  607. package/lib/wasm/wasmModuleFilename.js +54 -0
  608. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
  609. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
  610. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  611. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  612. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  613. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  614. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  615. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
  616. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  617. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  618. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  619. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  620. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  621. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  622. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  623. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  624. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  625. package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
  626. package/lib/web/FetchCompileWasmPlugin.js +48 -16
  627. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  628. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  629. package/lib/web/JsonpTemplatePlugin.js +2 -2
  630. package/lib/webpack.js +22 -11
  631. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  632. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  633. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  634. package/module.d.ts +1 -0
  635. package/package.json +32 -25
  636. package/schemas/WebpackOptions.check.js +1 -1
  637. package/schemas/WebpackOptions.json +667 -34
  638. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  639. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  640. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  641. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  642. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  643. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  644. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  645. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  646. package/types.d.ts +3223 -465
  647. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -8,32 +8,48 @@
8
8
  const { ConcatSource } = require("webpack-sources");
9
9
  const { UsageState } = require("../ExportsInfo");
10
10
  const ExternalModule = require("../ExternalModule");
11
+ const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
11
12
  const RuntimeGlobals = require("../RuntimeGlobals");
12
13
  const Template = require("../Template");
14
+ const HarmonyExportExpressionDependency = require("../dependencies/HarmonyExportExpressionDependency");
13
15
  const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
14
16
  const HarmonyExportSpecifierDependency = require("../dependencies/HarmonyExportSpecifierDependency");
15
17
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
16
18
  const ConcatenatedModule = require("../optimize/ConcatenatedModule");
17
19
  const { InlinedUsedName } = require("../optimize/InlineExports");
18
- const { propertyAccess } = require("../util/property");
20
+ const {
21
+ RESERVED_IDENTIFIER,
22
+ SAFE_IDENTIFIER,
23
+ propertyAccess
24
+ } = require("../util/property");
19
25
  const { getEntryRuntime, getRuntimeKey } = require("../util/runtime");
20
26
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
21
27
 
22
- /** @typedef {import("webpack-sources").Source} Source */
23
- /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
24
- /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
25
- /** @typedef {import("../../declarations/WebpackOptions").LibraryExport} LibraryExport */
26
- /** @typedef {import("../Chunk")} Chunk */
27
- /** @typedef {import("../Compiler")} Compiler */
28
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
29
- /** @typedef {import("../Module")} Module */
30
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
31
- /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
32
- /** @typedef {import("../javascript/JavascriptModulesPlugin").StartupRenderContext} StartupRenderContext */
33
- /** @typedef {import("../javascript/JavascriptModulesPlugin").ModuleRenderContext} ModuleRenderContext */
34
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
35
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
36
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
28
+ /** @import { Source } from "webpack-sources" */
29
+ /**
30
+ * @import {
31
+ * LibraryOptions,
32
+ * LibraryType,
33
+ * LibraryExport
34
+ * } from "../../declarations/WebpackOptions"
35
+ */
36
+ /** @import Chunk from "../Chunk" */
37
+ /** @import Compilation from "../Compilation" */
38
+ /** @import Compiler from "../Compiler" */
39
+ /** @import ModuleGraph from "../ModuleGraph" */
40
+ /** @import Module, { BuildMeta } from "../Module" */
41
+ /**
42
+ * @import {
43
+ * StartupRenderContext,
44
+ * ModuleRenderContext
45
+ * } from "../javascript/JavascriptModulesPlugin"
46
+ */
47
+ /** @import { RuntimeSpec } from "../util/runtime" */
48
+ /**
49
+ * @import {
50
+ * JavascriptModuleBuildMeta
51
+ * } from "../javascript/JavascriptModule"
52
+ */
37
53
 
38
54
  /**
39
55
  * Defines the shared type used by this module.
@@ -56,6 +72,64 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
56
72
 
57
73
  const PLUGIN_NAME = "ModuleLibraryPlugin";
58
74
 
75
+ /**
76
+ * The entry modules this plugin renders `export { … }` for, per compilation — the
77
+ * only ones whose export definitions may be taken over.
78
+ * @type {WeakMap<Compilation, WeakSet<Module>>}
79
+ */
80
+ const libraryEntryModules = new WeakMap();
81
+
82
+ /**
83
+ * Whether every export the module defines is a binding the library can export
84
+ * natively, so the definitions written into the exports object are read by nobody.
85
+ * A re-export or a renamed import is not: `renderStartup` reads those back off the
86
+ * object, and `treatAsCommonJs` hands the object out as the default export.
87
+ * @param {Module} module the entry module
88
+ * @param {ModuleGraph} moduleGraph the module graph
89
+ * @returns {boolean} true when the definitions may be taken over
90
+ */
91
+ const definesOnlyNativeExports = (module, moduleGraph) => {
92
+ const buildMeta = /** @type {JavascriptModuleBuildMeta} */ (module.buildMeta);
93
+ if (buildMeta && buildMeta.treatAsCommonJs) return false;
94
+ // A top-level `await` wraps the body in `__webpack_require__.a`, and the
95
+ // definitions read declarations inside that wrapper — re-emitting them after the
96
+ // module would put them out of scope.
97
+ if (moduleGraph.isAsync(module)) return false;
98
+ const topLevelDeclarations =
99
+ module.buildInfo && module.buildInfo.topLevelDeclarations;
100
+ if (!topLevelDeclarations) return false;
101
+ for (const dep of module.dependencies) {
102
+ // A re-export or an `export default` has no declaration of its own to bind to,
103
+ // so `renderStartup` reads its value back off the exports object.
104
+ if (
105
+ dep instanceof HarmonyExportImportedSpecifierDependency ||
106
+ dep instanceof HarmonyExportExpressionDependency
107
+ ) {
108
+ return false;
109
+ }
110
+ if (!(dep instanceof HarmonyExportSpecifierDependency)) continue;
111
+ if (!topLevelDeclarations.has(dep.id)) return false;
112
+ }
113
+ return true;
114
+ };
115
+
116
+ /**
117
+ * An export name is either an identifier name (reserved words included, e.g.
118
+ * `default`) or a string literal (arbitrary module namespace names).
119
+ * @param {string} name export name
120
+ * @returns {string} name as it can be written after `as`
121
+ */
122
+ const toExportName = (name) =>
123
+ SAFE_IDENTIFIER.test(name) ? name : JSON.stringify(name);
124
+
125
+ /**
126
+ * Whether the export name can also be used as the declared binding name.
127
+ * @param {string} name export name
128
+ * @returns {boolean} true, when the name can be declared
129
+ */
130
+ const isDeclarableExportName = (name) =>
131
+ SAFE_IDENTIFIER.test(name) && !RESERVED_IDENTIFIER.has(name);
132
+
59
133
  /**
60
134
  * Represents the module library plugin runtime component.
61
135
  * @typedef {ModuleLibraryPluginParsed} T
@@ -111,6 +185,36 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
111
185
  return true;
112
186
  }
113
187
  );
188
+ // The same for a plain entry, whose definitions come from a dependency template.
189
+ // Placed after the module body, which its value bindings read.
190
+ javascriptHooks.onDemandExportsGeneration.tap(
191
+ PLUGIN_NAME,
192
+ (module, runtime, source, placeAtEnd) => {
193
+ const entries = libraryEntryModules.get(compilation);
194
+ if (!entries || !entries.has(module)) return;
195
+ if (!definesOnlyNativeExports(module, compilation.moduleGraph)) {
196
+ return;
197
+ }
198
+ /** @type {BuildMeta} */
199
+ const buildMeta = module.buildMeta || (module.buildMeta = {});
200
+ const key = getRuntimeKey(runtime);
201
+ if (placeAtEnd) {
202
+ const bindings =
203
+ buildMeta.exportsBindingSourceByRuntime ||
204
+ (buildMeta.exportsBindingSourceByRuntime = new Map());
205
+ bindings.set(key, source);
206
+ } else {
207
+ const sources =
208
+ buildMeta.exportsSourceByRuntime ||
209
+ (buildMeta.exportsSourceByRuntime = new Map());
210
+ // The `__esModule` marker and the definitions both land here, so
211
+ // keep whichever arrived first rather than replacing it.
212
+ const before = sources.get(key);
213
+ sources.set(key, before ? `${before}${source}` : source);
214
+ }
215
+ return true;
216
+ }
217
+ );
114
218
 
115
219
  // `ModuleLibraryPlugin` stashes the on-demand exports source via
116
220
  // `onDemandExportsGeneration` and only re-emits it when the
@@ -124,7 +228,6 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
124
228
  (chunk, set, { chunkGraph, codeGenerationResults }) => {
125
229
  if (!set.has(RuntimeGlobals.definePropertyGetters)) return;
126
230
  if (chunkGraph.getNumberOfEntryModules(chunk) !== 1) return;
127
- if (chunkGraph.hasChunkEntryDependentChunks(chunk)) return;
128
231
  if (
129
232
  set.has(RuntimeGlobals.moduleFactories) ||
130
233
  set.has(RuntimeGlobals.moduleCache) ||
@@ -137,14 +240,16 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
137
240
  if (javascriptHooks.inlineInRuntimeBailout.isUsed()) return;
138
241
 
139
242
  const [module] = chunkGraph.getChunkEntryModulesIterable(chunk);
140
- const exportsSourceByRuntime =
141
- module.buildMeta && module.buildMeta.exportsSourceByRuntime;
142
- if (
143
- !exportsSourceByRuntime ||
144
- !exportsSourceByRuntime.has(getRuntimeKey(chunk.runtime))
145
- ) {
146
- return;
147
- }
243
+ const runtimeKey = getRuntimeKey(chunk.runtime);
244
+ const buildMeta = module.buildMeta;
245
+ const takenOver =
246
+ (buildMeta &&
247
+ buildMeta.exportsSourceByRuntime &&
248
+ buildMeta.exportsSourceByRuntime.has(runtimeKey)) ||
249
+ (buildMeta &&
250
+ buildMeta.exportsBindingSourceByRuntime &&
251
+ buildMeta.exportsBindingSourceByRuntime.has(runtimeKey));
252
+ if (!takenOver) return;
148
253
  const codeGenResult = codeGenerationResults.get(
149
254
  module,
150
255
  chunk.runtime
@@ -158,32 +263,63 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
158
263
  return;
159
264
  }
160
265
 
161
- // Check whether any other module in the chunk still needs
162
- // the helpers we want to remove.
266
+ // Without `avoidEntryIife`, another rendered module wraps the entry in
267
+ // an IIFE, which re-emits the stashed source — its helpers stay.
268
+ if (!compilation.options.optimization.avoidEntryIife) {
269
+ for (const m of chunkGraph.getChunkModulesIterableBySourceType(
270
+ chunk,
271
+ JAVASCRIPT_TYPE
272
+ ) || []) {
273
+ if (m !== module) return;
274
+ }
275
+ }
276
+
277
+ // The helpers land in the runtime, not in this chunk, so what still
278
+ // needs them is asked of every chunk sharing the entrypoint — the
279
+ // runtime chunk, and whatever `splitChunks` moved out of the entry.
280
+ /** @type {Set<Chunk>} */
281
+ const siblings = new Set([chunk]);
282
+ for (const [
283
+ ,
284
+ entrypoint
285
+ ] of chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)) {
286
+ if (!entrypoint) continue;
287
+ for (const sibling of entrypoint.chunks) siblings.add(sibling);
288
+ }
289
+
163
290
  let otherNeedsDefine = false;
291
+ let otherNeedsNamespaceObject = false;
164
292
  let otherNeedsExports = false;
165
293
  let otherNeedsRequireScope = false;
166
- for (const m of chunkGraph.getChunkModulesIterable(chunk)) {
167
- if (m === module) continue;
168
- const requirements = chunkGraph.getModuleRuntimeRequirements(
169
- m,
170
- chunk.runtime
171
- );
172
- if (!requirements) continue;
173
- if (requirements.has(RuntimeGlobals.definePropertyGetters)) {
174
- otherNeedsDefine = true;
175
- }
176
- if (requirements.has(RuntimeGlobals.exports)) {
177
- otherNeedsExports = true;
178
- }
179
- if (requirements.has(RuntimeGlobals.requireScope)) {
180
- otherNeedsRequireScope = true;
294
+ outer: for (const sibling of siblings) {
295
+ for (const m of chunkGraph.getChunkModulesIterable(sibling)) {
296
+ if (m === module) continue;
297
+ const requirements = chunkGraph.getModuleRuntimeRequirements(
298
+ m,
299
+ sibling.runtime
300
+ );
301
+ if (!requirements) continue;
302
+ if (requirements.has(RuntimeGlobals.definePropertyGetters)) {
303
+ otherNeedsDefine = true;
304
+ }
305
+ if (requirements.has(RuntimeGlobals.makeNamespaceObject)) {
306
+ otherNeedsNamespaceObject = true;
307
+ }
308
+ if (requirements.has(RuntimeGlobals.exports)) {
309
+ otherNeedsExports = true;
310
+ }
311
+ if (requirements.has(RuntimeGlobals.requireScope)) {
312
+ otherNeedsRequireScope = true;
313
+ }
314
+ if (otherNeedsDefine) break outer;
181
315
  }
182
- if (otherNeedsDefine) break;
183
316
  }
184
317
 
185
318
  if (otherNeedsDefine) return;
186
319
  set.delete(RuntimeGlobals.definePropertyGetters);
320
+ if (!otherNeedsNamespaceObject) {
321
+ set.delete(RuntimeGlobals.makeNamespaceObject);
322
+ }
187
323
  if (!otherNeedsExports) set.delete(RuntimeGlobals.exports);
188
324
  if (!otherNeedsRequireScope) set.delete(RuntimeGlobals.requireScope);
189
325
  }
@@ -232,6 +368,12 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
232
368
  }
233
369
  }
234
370
  moduleGraph.addExtraReason(module, "used as library export");
371
+ let entries = libraryEntryModules.get(compilation);
372
+ if (entries === undefined) {
373
+ entries = new WeakSet();
374
+ libraryEntryModules.set(compilation, entries);
375
+ }
376
+ entries.add(module);
235
377
  }
236
378
 
237
379
  /**
@@ -398,6 +540,23 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
398
540
  const exports = [];
399
541
  /** @type {Set<string>} */
400
542
  const alreadyRenderedExports = new Set();
543
+ /** @type {Set<string>} */
544
+ const usedLocalNames = new Set();
545
+
546
+ /**
547
+ * `toIdentifier` is lossy, so distinct export names (`"a b"` and `"a-b"`)
548
+ * would otherwise be bound to the same generated name twice.
549
+ * @param {string} exportName export name
550
+ * @returns {string} unique local name for the export
551
+ */
552
+ const toLocalName = (exportName) => {
553
+ const base = `${RuntimeGlobals.exports}${Template.toIdentifier(exportName)}`;
554
+ let name = base;
555
+ let i = 0;
556
+ while (usedLocalNames.has(name)) name = `${base}_${i++}`;
557
+ usedLocalNames.add(name);
558
+ return name;
559
+ };
401
560
 
402
561
  const isAsync = moduleGraph.isAsync(module);
403
562
 
@@ -434,6 +593,16 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
434
593
  }
435
594
  }
436
595
 
596
+ // Taken over by `onDemandExportsGeneration` above, and re-emitted by
597
+ // `renderModuleContent` only where the module is wrapped — which is not here.
598
+ const bindingsTakenOver = Boolean(
599
+ module.buildMeta &&
600
+ module.buildMeta.exportsBindingSourceByRuntime &&
601
+ module.buildMeta.exportsBindingSourceByRuntime.has(
602
+ getRuntimeKey(chunk.runtime)
603
+ )
604
+ );
605
+
437
606
  const moduleExportsInfo = moduleGraph.getExportsInfo(module);
438
607
 
439
608
  // Define ESM compatibility flag will rely on `__webpack_exports__`
@@ -463,13 +632,16 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
463
632
 
464
633
  // Try to find all exports from the reexported modules
465
634
  const target = exportInfo.findTarget(moduleGraph, (_m) => true);
466
- if (target) {
635
+ // A namespace object target (`export * as ns from "./module"`) has no
636
+ // export name, so there is nothing that could be missing
637
+ if (target && target.export) {
638
+ const targetExport = target.export[0];
467
639
  const reexportsInfo = moduleGraph.getExportsInfo(target.module);
468
640
  for (const reexportInfo of reexportsInfo.orderedExports) {
469
641
  if (
470
642
  reexportInfo.provided === false &&
471
643
  reexportInfo.name !== "default" &&
472
- reexportInfo.name === /** @type {string[]} */ (target.export)[0]
644
+ reexportInfo.name === targetExport
473
645
  ) {
474
646
  continue outer;
475
647
  }
@@ -495,11 +667,13 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
495
667
  } else if (directLocal !== undefined) {
496
668
  // Live binding to the inlined entry's own top-level declaration
497
669
  finalName = directLocal;
498
- needExportsDeclaration = true;
670
+ // The declaration is only there for the definitions written into it; with
671
+ // those taken over (and not re-emitted here) nothing reads the object.
672
+ if (!bindingsTakenOver) needExportsDeclaration = true;
499
673
  } else {
500
674
  // Fallback to `__webpack_exports__` property access
501
675
  // when no direct export binding was found
502
- finalName = `${RuntimeGlobals.exports}${Template.toIdentifier(originalName)}`;
676
+ finalName = toLocalName(originalName);
503
677
  needExportsDeclaration = true;
504
678
  result.add(
505
679
  `${runtimeTemplate.renderConst()} ${finalName} = ${RuntimeGlobals.exports}${propertyAccess(
@@ -522,11 +696,11 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
522
696
  (module.buildInfo && module.buildInfo.topLevelDeclarations);
523
697
 
524
698
  if (topLevelDeclarations && topLevelDeclarations.has(originalName)) {
525
- const name = `${RuntimeGlobals.exports}${Template.toIdentifier(originalName)}`;
699
+ const name = toLocalName(originalName);
526
700
  result.add(
527
701
  `${runtimeTemplate.renderConst()} ${name} = ${finalName};\n`
528
702
  );
529
- shortHandedExports.push(`${name} as ${originalName}`);
703
+ shortHandedExports.push(`${name} as ${toExportName(originalName)}`);
530
704
  } else {
531
705
  exports.push([originalName, finalName]);
532
706
  }
@@ -537,21 +711,21 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
537
711
  shortHandedExports.push(
538
712
  finalName === originalName
539
713
  ? finalName
540
- : `${finalName} as ${originalName}`
714
+ : `${finalName} as ${toExportName(originalName)}`
541
715
  );
542
716
  }
543
717
 
544
718
  alreadyRenderedExports.add(originalName);
545
719
  }
546
720
 
721
+ if (shortHandedExports.length > 0) {
722
+ result.add(`export { ${shortHandedExports.join(", ")} };\n`);
723
+ }
724
+
547
725
  // Add default export `__webpack_exports__` statement to keep better compatibility
548
726
  if (treatAsCommonJs) {
549
727
  needExportsDeclaration = true;
550
- shortHandedExports.push(`${RuntimeGlobals.exports} as default`);
551
- }
552
-
553
- if (shortHandedExports.length > 0) {
554
- result.add(`export { ${shortHandedExports.join(", ")} };\n`);
728
+ result.add(`export default ${RuntimeGlobals.exports};\n`);
555
729
  }
556
730
 
557
731
  result = this._analyzeUnknownProvidedExports(
@@ -564,8 +738,16 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
564
738
  );
565
739
 
566
740
  for (const [exportName, final] of exports) {
741
+ if (isDeclarableExportName(exportName)) {
742
+ result.add(
743
+ `export ${runtimeTemplate.renderConst()} ${exportName} = ${final};\n`
744
+ );
745
+ continue;
746
+ }
747
+ // Bind to a generated name, the export name can't be declared
748
+ const name = toLocalName(exportName);
567
749
  result.add(
568
- `export ${runtimeTemplate.renderConst()} ${exportName} = ${final};\n`
750
+ `${runtimeTemplate.renderConst()} ${name} = ${final};\nexport { ${name} as ${toExportName(exportName)} };\n`
569
751
  );
570
752
  }
571
753
 
@@ -590,15 +772,25 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
590
772
  { factory, inlinedInIIFE, chunk },
591
773
  libraryContext
592
774
  ) {
775
+ const runtimeKey = getRuntimeKey(chunk.runtime);
776
+ const buildMeta = module.buildMeta;
593
777
  const exportsSource =
594
- module.buildMeta &&
595
- module.buildMeta.exportsSourceByRuntime &&
596
- module.buildMeta.exportsSourceByRuntime.get(getRuntimeKey(chunk.runtime));
597
-
598
- // Re-add the module's exports source when rendered in factory
599
- // or as an inlined startup module wrapped in an IIFE
600
- if ((inlinedInIIFE || factory) && exportsSource) {
601
- return new ConcatSource(exportsSource, source);
778
+ buildMeta &&
779
+ buildMeta.exportsSourceByRuntime &&
780
+ buildMeta.exportsSourceByRuntime.get(runtimeKey);
781
+ const bindingSource =
782
+ buildMeta &&
783
+ buildMeta.exportsBindingSourceByRuntime &&
784
+ buildMeta.exportsBindingSourceByRuntime.get(runtimeKey);
785
+
786
+ // Re-add the exports source in a factory or IIFE-wrapped startup module; value
787
+ // bindings read the declarations above them, so those go after the body.
788
+ if ((inlinedInIIFE || factory) && (exportsSource || bindingSource)) {
789
+ return new ConcatSource(
790
+ ...(exportsSource ? [exportsSource] : []),
791
+ source,
792
+ ...(bindingSource ? ["\n", bindingSource] : [])
793
+ );
602
794
  }
603
795
  return source;
604
796
  }
@@ -12,14 +12,18 @@ const Template = require("../Template");
12
12
  const { propertyAccess } = require("../util/property");
13
13
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
14
14
 
15
- /** @typedef {import("webpack-sources").Source} Source */
16
- /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
17
- /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
18
- /** @typedef {import("../Chunk")} Chunk */
19
- /** @typedef {import("../Compilation").ChunkHashContext} ChunkHashContext */
20
- /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
21
- /** @typedef {import("../javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
22
- /** @typedef {import("../util/Hash")} Hash */
15
+ /** @import { Source } from "webpack-sources" */
16
+ /**
17
+ * @import {
18
+ * LibraryOptions,
19
+ * LibraryType
20
+ * } from "../../declarations/WebpackOptions"
21
+ */
22
+ /** @import Chunk from "../Chunk" */
23
+ /** @import { ChunkHashContext } from "../Compilation" */
24
+ /** @import { ExportInfoName } from "../Dependency" */
25
+ /** @import { RenderContext } from "../javascript/JavascriptModulesPlugin" */
26
+ /** @import Hash from "../util/Hash" */
23
27
  /**
24
28
  * Defines the shared type used by this module.
25
29
  * @template T
@@ -10,14 +10,18 @@ const ExternalModule = require("../ExternalModule");
10
10
  const Template = require("../Template");
11
11
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
12
12
 
13
- /** @typedef {import("webpack-sources").Source} Source */
14
- /** @typedef {import("../../declarations/WebpackOptions").LibraryCustomUmdCommentObject} LibraryCustomUmdCommentObject */
15
- /** @typedef {import("../../declarations/WebpackOptions").LibraryCustomUmdObject} LibraryCustomUmdObject */
16
- /** @typedef {import("../../declarations/WebpackOptions").LibraryName} LibraryName */
17
- /** @typedef {import("../../declarations/WebpackOptions").LibraryOptions} LibraryOptions */
18
- /** @typedef {import("../../declarations/WebpackOptions").LibraryType} LibraryType */
19
- /** @typedef {import("../javascript/JavascriptModulesPlugin").RenderContext} RenderContext */
20
- /** @typedef {import("../ExternalModule").RequestRecord} RequestRecord */
13
+ /** @import { Source } from "webpack-sources" */
14
+ /**
15
+ * @import {
16
+ * LibraryCustomUmdCommentObject,
17
+ * LibraryCustomUmdObject,
18
+ * LibraryName,
19
+ * LibraryOptions,
20
+ * LibraryType
21
+ * } from "../../declarations/WebpackOptions"
22
+ */
23
+ /** @import { RenderContext } from "../javascript/JavascriptModulesPlugin" */
24
+ /** @import { RequestRecord } from "../ExternalModule" */
21
25
 
22
26
  /**
23
27
  * Defines the shared type used by this module.
@@ -58,6 +62,24 @@ const accessorAccess = (base, accessor, joinWith = ", ") => {
58
62
  .join(joinWith);
59
63
  };
60
64
 
65
+ /**
66
+ * Builds the guard for an AMD-style loader on a container object, e.g. `sap.ui` becomes
67
+ * `typeof sap !== 'undefined' && sap.ui && typeof sap.ui.define === 'function'`. The path is
68
+ * walked step by step because `typeof sap.ui` alone throws when `sap` is undeclared, which is
69
+ * exactly when the branch has to be skipped.
70
+ * @param {string} container the container object holding `define`
71
+ * @returns {string} the condition
72
+ */
73
+ const amdContainerCondition = (container) => {
74
+ const path = container.split(".");
75
+ const conditions = [`typeof ${path[0]} !== 'undefined'`];
76
+ for (let i = 1; i < path.length; i++) {
77
+ conditions.push(path.slice(0, i + 1).join("."));
78
+ }
79
+ conditions.push(`typeof ${container}.define === 'function'`);
80
+ return conditions.join(" && ");
81
+ };
82
+
61
83
  /**
62
84
  * Defines the umd library plugin options type used by this module.
63
85
  * @typedef {object} UmdLibraryPluginOptions
@@ -72,6 +94,7 @@ const accessorAccess = (base, accessor, joinWith = ", ") => {
72
94
  * @property {LibraryCustomUmdObject} names
73
95
  * @property {string | LibraryCustomUmdCommentObject | undefined} auxiliaryComment
74
96
  * @property {boolean | undefined} namedDefine
97
+ * @property {string | undefined} amdContainer
75
98
  */
76
99
 
77
100
  /**
@@ -120,7 +143,8 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
120
143
  name,
121
144
  names,
122
145
  auxiliaryComment: library.auxiliaryComment,
123
- namedDefine: library.umdNamedDefine
146
+ namedDefine: library.umdNamedDefine,
147
+ amdContainer: library.umdAmdContainer
124
148
  };
125
149
  }
126
150
 
@@ -233,9 +257,9 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
233
257
  );
234
258
  }
235
259
  let expr = Array.isArray(request)
236
- ? `require(${JSON.stringify(
237
- request[0]
238
- )})${accessorToObjectAccess(request.slice(1))}`
260
+ ? `require(${JSON.stringify(request[0])})${accessorToObjectAccess(
261
+ request.slice(1)
262
+ )}`
239
263
  : `require(${JSON.stringify(request)})`;
240
264
  if (m.isOptional(moduleGraph)) {
241
265
  expr = `(function webpackLoadOptionalExternalModule() { try { return ${expr}; } catch(e) {} }())`;
@@ -291,7 +315,24 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
291
315
  amdFactory = "factory";
292
316
  }
293
317
 
294
- const { auxiliaryComment, namedDefine, names } = options;
318
+ const { amdContainer, auxiliaryComment, namedDefine, names } = options;
319
+
320
+ /**
321
+ * Returns a call to an AMD-style define function.
322
+ * @param {string} defineFunction the define function to call
323
+ * @returns {string} the define call
324
+ */
325
+ const defineCall = (defineFunction) => {
326
+ const deps =
327
+ requiredExternals.length > 0
328
+ ? externalsDepsArray(requiredExternals)
329
+ : "[]";
330
+ return names.amd && namedDefine === true
331
+ ? ` ${defineFunction}(${libraryName(
332
+ names.amd
333
+ )}, ${deps}, ${amdFactory});\n`
334
+ : ` ${defineFunction}(${deps}, ${amdFactory});\n`;
335
+ };
295
336
 
296
337
  /**
297
338
  * Gets auxiliary comment.
@@ -317,18 +358,14 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
317
358
  "commonjs2"
318
359
  )});\n${getAuxiliaryComment(
319
360
  "amd"
320
- )} else if(typeof define === 'function' && define.amd)\n${
321
- requiredExternals.length > 0
322
- ? names.amd && namedDefine === true
323
- ? ` define(${libraryName(names.amd)}, ${externalsDepsArray(
324
- requiredExternals
325
- )}, ${amdFactory});\n`
326
- : ` define(${externalsDepsArray(requiredExternals)}, ${
327
- amdFactory
328
- });\n`
329
- : names.amd && namedDefine === true
330
- ? ` define(${libraryName(names.amd)}, [], ${amdFactory});\n`
331
- : ` define([], ${amdFactory});\n`
361
+ )} else if(typeof define === 'function' && define.amd)\n${defineCall(
362
+ "define"
363
+ )}${
364
+ amdContainer
365
+ ? ` else if(${amdContainerCondition(
366
+ amdContainer
367
+ )})\n${defineCall(`${amdContainer}.define`)}`
368
+ : ""
332
369
  }${
333
370
  names.root || names.commonjs
334
371
  ? `${getAuxiliaryComment(