@depup/webpack 5.110.1-depup.0 → 5.111.1-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 (304) hide show
  1. package/README.md +7 -8
  2. package/changes.json +7 -11
  3. package/lib/APIPlugin.js +26 -11
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/Cache.js +8 -3
  6. package/lib/CacheFacade.js +1 -1
  7. package/lib/ChunkGraph.js +20 -18
  8. package/lib/CircularModulesPlugin.js +157 -55
  9. package/lib/CleanPlugin.js +2 -2
  10. package/lib/CompatibilityPlugin.js +3 -4
  11. package/lib/Compilation.js +337 -338
  12. package/lib/Compiler.js +213 -51
  13. package/lib/ConcatenationScope.js +25 -35
  14. package/lib/ConstPlugin.js +16 -132
  15. package/lib/CopyPlugin.js +1054 -0
  16. package/lib/DefinePlugin.js +24 -8
  17. package/lib/DependencyTemplate.js +2 -1
  18. package/lib/DotenvPlugin.js +64 -40
  19. package/lib/ErrorHelpers.js +113 -0
  20. package/lib/ExportsInfo.js +30 -16
  21. package/lib/ExternalModule.js +47 -22
  22. package/lib/FileSystemInfo.js +17 -14
  23. package/lib/FlagDependencyExportsPlugin.js +53 -34
  24. package/lib/FlagDependencyUsagePlugin.js +17 -15
  25. package/lib/Generator.js +24 -2
  26. package/lib/HotModuleReplacementPlugin.js +55 -7
  27. package/lib/IgnorePlugin.js +1 -1
  28. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  29. package/lib/LoaderOptionsPlugin.js +1 -1
  30. package/lib/MainTemplate.js +5 -1
  31. package/lib/Module.js +19 -10
  32. package/lib/ModuleGraph.js +6 -9
  33. package/lib/MultiCompiler.js +7 -17
  34. package/lib/MultiWatching.js +1 -1
  35. package/lib/NormalModule.js +148 -70
  36. package/lib/NormalModuleFactory.js +1 -1
  37. package/lib/RuntimeGlobals.js +21 -7
  38. package/lib/RuntimeModule.js +28 -12
  39. package/lib/RuntimePlugin.js +33 -3
  40. package/lib/RuntimeTemplate.js +1147 -847
  41. package/lib/SourceMapDevToolPlugin.js +54 -104
  42. package/lib/TemplatedPathPlugin.js +16 -59
  43. package/lib/Watching.js +9 -0
  44. package/lib/WebpackOptionsApply.js +84 -91
  45. package/lib/asset/AssetBytesGenerator.js +7 -1
  46. package/lib/asset/AssetGenerator.js +50 -24
  47. package/lib/asset/AssetModule.js +3 -0
  48. package/lib/asset/AssetSourceGenerator.js +7 -1
  49. package/lib/asset/WebManifestParser.js +7 -5
  50. package/lib/async-modules/AsyncModuleHelpers.js +10 -4
  51. package/lib/buildChunkGraph.js +11 -15
  52. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  53. package/lib/cache/IdleFileCachePlugin.js +2 -2
  54. package/lib/cache/MemoryCachePlugin.js +4 -4
  55. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  56. package/lib/cache/PackFileCacheStrategy.js +17 -19
  57. package/lib/cache/getLazyHashedEtag.js +3 -5
  58. package/lib/config/browserslistTargetHandler.js +17 -4
  59. package/lib/config/defaults.js +162 -142
  60. package/lib/config/getClaimedAssetTypes.js +10 -11
  61. package/lib/config/normalization.js +100 -20
  62. package/lib/config/target.js +13 -4
  63. package/lib/container/ContainerReferencePlugin.js +6 -0
  64. package/lib/container/RemoteRuntimeModule.js +9 -0
  65. package/lib/container/declaredRemotes.js +39 -0
  66. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  67. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  68. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  69. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  70. package/lib/css/CssGenerator.js +27 -11
  71. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  72. package/lib/css/CssLoadingRuntimeModule.js +92 -15
  73. package/lib/css/CssModule.js +1 -1
  74. package/lib/css/CssModulesPlugin.js +3 -10
  75. package/lib/css/CssParser.js +162 -31
  76. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  77. package/lib/css/cssMinify.js +43 -32
  78. package/lib/css/data.js +3526 -871
  79. package/lib/css/syntax.js +6455 -1237
  80. package/lib/debug/ProfilingPlugin.js +7 -4
  81. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  82. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  83. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  84. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  85. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  86. package/lib/dependencies/CommonJsPlugin.js +19 -3
  87. package/lib/dependencies/CommonJsRequireDependency.js +32 -9
  88. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  89. package/lib/dependencies/ContextDependency.js +1 -1
  90. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  91. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
  92. package/lib/dependencies/ContextElementDependency.js +1 -1
  93. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  94. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  95. package/lib/dependencies/CssUrlDependency.js +3 -5
  96. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  97. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  98. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +10 -4
  99. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -7
  100. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  101. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +217 -34
  102. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  103. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  104. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  105. package/lib/dependencies/HarmonyImportDependency.js +99 -41
  106. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +198 -25
  107. package/lib/dependencies/HarmonyImportSideEffectDependency.js +117 -4
  108. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  109. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  110. package/lib/dependencies/HtmlEntryDependency.js +136 -104
  111. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  112. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  113. package/lib/dependencies/ImportContextDependency.js +43 -3
  114. package/lib/dependencies/ImportDependency.js +8 -29
  115. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  116. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  117. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  118. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  119. package/lib/dependencies/ImportParserPlugin.js +25 -15
  120. package/lib/dependencies/LoaderPlugin.js +26 -1
  121. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  122. package/lib/dependencies/RequireHeaderDependency.js +20 -21
  123. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  124. package/lib/dependencies/URLContextDependency.js +1 -1
  125. package/lib/dependencies/URLDependency.js +6 -5
  126. package/lib/dependencies/WorkerAndWorkletPlugin.js +16 -21
  127. package/lib/dependencies/WorkerDependency.js +12 -18
  128. package/lib/dependencies/WorkletDependency.js +12 -20
  129. package/lib/dependencies/importOptionsCheck.js +47 -0
  130. package/lib/dll/DelegatedModule.js +18 -1
  131. package/lib/dll/DllReferencePlugin.js +11 -8
  132. package/lib/dll/LibManifestPlugin.js +1 -1
  133. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  134. package/lib/errors/DotenvFileError.js +29 -0
  135. package/lib/errors/DuplicateModulesWarning.js +12 -7
  136. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  137. package/lib/errors/ExternalStarReexportError.js +44 -0
  138. package/lib/errors/HookWebpackError.js +3 -2
  139. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  140. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  141. package/lib/errors/ModuleParseError.js +2 -1
  142. package/lib/errors/UnusedAssetsWarning.js +36 -0
  143. package/lib/errors/UnusedFederationWarning.js +35 -0
  144. package/lib/errors/UnusedModulesWarning.js +38 -0
  145. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  146. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  147. package/lib/esm/ModuleChunkLoadingPlugin.js +21 -5
  148. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +91 -53
  149. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  150. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  151. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  152. package/lib/html/HtmlGenerator.js +72 -87
  153. package/lib/html/HtmlModulesPlugin.js +479 -215
  154. package/lib/html/HtmlParser.js +110 -147
  155. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  156. package/lib/html/data.js +142 -7
  157. package/lib/html/htmlMinify.js +92 -122
  158. package/lib/html/syntax.js +2031 -1556
  159. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  160. package/lib/index.js +49 -3
  161. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  162. package/lib/javascript/JavascriptGenerator.js +8 -1
  163. package/lib/javascript/JavascriptModule.js +1 -0
  164. package/lib/javascript/JavascriptModulesPlugin.js +76 -80
  165. package/lib/javascript/JavascriptParser.js +1970 -900
  166. package/lib/javascript/StartupHelpers.js +27 -3
  167. package/lib/javascript/data.js +172 -0
  168. package/lib/javascript/grammar.js +5546 -0
  169. package/lib/javascript/parser.js +1500 -0
  170. package/lib/javascript/regexp.js +1762 -0
  171. package/lib/javascript/regexpData.js +51 -0
  172. package/lib/javascript/syntax.js +9061 -5262
  173. package/lib/json/JsonGenerator.js +7 -1
  174. package/lib/library/ModuleLibraryPlugin.js +171 -132
  175. package/lib/loaders/LoaderRunner.js +170 -14
  176. package/lib/node/NodeWatchFileSystem.js +3 -9
  177. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  178. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +8 -15
  179. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  180. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  181. package/lib/optimize/ConcatenatedModule.js +222 -125
  182. package/lib/optimize/ConstExportsPlugin.js +50 -34
  183. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  184. package/lib/optimize/InlineExports.js +20 -2
  185. package/lib/optimize/InnerGraphPlugin.js +7 -13
  186. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  187. package/lib/optimize/MangleExportsPlugin.js +13 -4
  188. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  189. package/lib/optimize/RealContentHashPlugin.js +179 -44
  190. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  191. package/lib/optimize/SplitChunksPlugin.js +2 -4
  192. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  193. package/lib/performance/BroadContextsPlugin.js +1 -1
  194. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  195. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  196. package/lib/performance/EvalUsagePlugin.js +5 -2
  197. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  198. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  199. package/lib/performance/SizeLimitsPlugin.js +2 -4
  200. package/lib/performance/TopLevelThisPlugin.js +5 -4
  201. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  202. package/lib/performance/UnusedFederationPlugin.js +147 -0
  203. package/lib/performance/UnusedModulesPlugin.js +141 -0
  204. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  205. package/lib/performance/isOnlyReexported.js +65 -0
  206. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  207. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  208. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  209. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  210. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  211. package/lib/prefetch/ResourceHintPlugin.js +29 -35
  212. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  213. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  214. package/lib/rules/RuleSetCompiler.js +211 -4
  215. package/lib/runtime/AsyncModuleRuntimeModule.js +103 -67
  216. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  217. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  218. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  219. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  220. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  221. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  222. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  223. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  224. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  225. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  226. package/lib/runtime/HelperRuntimeModule.js +10 -0
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +313 -222
  228. package/lib/runtime/NonceRuntimeModule.js +9 -0
  229. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  230. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  231. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  232. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  233. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  234. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  235. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  236. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  237. package/lib/schemes/DataUriPlugin.js +3 -6
  238. package/lib/schemes/HttpUriPlugin.js +22 -5
  239. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  240. package/lib/serialization/BinaryMiddleware.js +9 -9
  241. package/lib/serialization/FileMiddleware.js +31 -18
  242. package/lib/serialization/ObjectMiddleware.js +168 -139
  243. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  244. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  245. package/lib/sharing/ShareRuntimeModule.js +9 -0
  246. package/lib/sharing/declaredShared.js +47 -0
  247. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  248. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  249. package/lib/typescript/TypeScriptPlugin.js +10 -13
  250. package/lib/url/URLParserPlugin.js +6 -8
  251. package/lib/util/ArrayQueue.js +3 -3
  252. package/lib/util/LocConverter.js +4 -7
  253. package/lib/util/SourceProcessor.js +115 -99
  254. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  255. package/lib/util/async.js +292 -0
  256. package/lib/util/buildDiagnostics.js +69 -0
  257. package/lib/util/chainedImports.js +3 -4
  258. package/lib/util/concatenate.js +4 -4
  259. package/lib/util/conventions.js +5 -1
  260. package/lib/util/createHooksRegistry.js +1 -2
  261. package/lib/util/createMappings.js +25 -3
  262. package/lib/util/dataURL.js +2 -3
  263. package/lib/util/deterministicGrouping.js +8 -13
  264. package/lib/util/findGraphRoots.js +6 -13
  265. package/lib/util/fs.js +27 -1
  266. package/lib/util/globUtils.js +1 -1
  267. package/lib/util/handlerKeys.js +40 -0
  268. package/lib/util/hash/wasm-hash.js +3 -4
  269. package/lib/util/identifier.js +20 -0
  270. package/lib/util/internalSerializables.js +7 -1
  271. package/lib/util/registerExternalSerializer.js +6 -45
  272. package/lib/util/removeBOM.js +82 -1
  273. package/lib/util/semver.js +5 -3
  274. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +14 -3
  275. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +14 -3
  276. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  277. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  278. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +7 -12
  279. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  280. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  281. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  282. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  283. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -6
  284. package/lib/web/FetchCompileWasmPlugin.js +4 -2
  285. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  286. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  287. package/package.json +55 -46
  288. package/schemas/WebpackOptions.check.js +1 -1
  289. package/schemas/WebpackOptions.json +388 -76
  290. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  291. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  292. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  293. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  294. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  295. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  296. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  297. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  298. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  299. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  300. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  301. package/types.d.ts +1795 -608
  302. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  303. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  304. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -259,7 +259,13 @@ class JsonGenerator extends Generator {
259
259
  * @returns {Source | null} generated code
260
260
  */
261
261
  generateError(error, module, generateContext) {
262
- return new RawSource(Generator.throwBuildErrorCode(error));
262
+ return new RawSource(
263
+ Generator.throwBuildErrorCode(
264
+ error,
265
+ undefined,
266
+ generateContext.runtimeTemplate.requestShortener
267
+ )
268
+ );
263
269
  }
264
270
 
265
271
  /**
@@ -14,15 +14,17 @@ const Template = require("../Template");
14
14
  const HarmonyExportExpressionDependency = require("../dependencies/HarmonyExportExpressionDependency");
15
15
  const HarmonyExportImportedSpecifierDependency = require("../dependencies/HarmonyExportImportedSpecifierDependency");
16
16
  const HarmonyExportSpecifierDependency = require("../dependencies/HarmonyExportSpecifierDependency");
17
+ const ExternalStarReexportError = require("../errors/ExternalStarReexportError");
17
18
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
18
19
  const ConcatenatedModule = require("../optimize/ConcatenatedModule");
19
20
  const { InlinedUsedName } = require("../optimize/InlineExports");
21
+ const { toJsStringLiteral } = require("../util/identifier");
20
22
  const {
21
23
  RESERVED_IDENTIFIER,
22
24
  SAFE_IDENTIFIER,
23
25
  propertyAccess
24
26
  } = require("../util/property");
25
- const { getEntryRuntime, getRuntimeKey } = require("../util/runtime");
27
+ const { getEntryRuntime } = require("../util/runtime");
26
28
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
27
29
 
28
30
  /** @import { Source } from "webpack-sources" */
@@ -37,13 +39,14 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
37
39
  /** @import Compilation from "../Compilation" */
38
40
  /** @import Compiler from "../Compiler" */
39
41
  /** @import ModuleGraph from "../ModuleGraph" */
40
- /** @import Module, { BuildMeta } from "../Module" */
42
+ /** @import Module from "../Module" */
41
43
  /**
42
44
  * @import {
43
45
  * StartupRenderContext,
44
46
  * ModuleRenderContext
45
47
  * } from "../javascript/JavascriptModulesPlugin"
46
48
  */
49
+ /** @import { ImportAttributes } from "../javascript/JavascriptParser" */
47
50
  /** @import { RuntimeSpec } from "../util/runtime" */
48
51
  /**
49
52
  * @import {
@@ -122,6 +125,18 @@ const definesOnlyNativeExports = (module, moduleGraph) => {
122
125
  const toExportName = (name) =>
123
126
  SAFE_IDENTIFIER.test(name) ? name : JSON.stringify(name);
124
127
 
128
+ /**
129
+ * Renders the import attributes of a reexport in the syntax the author wrote,
130
+ * since a legacy `assert` clause and a `with` clause are not interchangeable.
131
+ * @param {ImportAttributes | undefined} attributes the import attributes
132
+ * @returns {string} the attributes clause, empty when there are none
133
+ */
134
+ const toAttributesClause = (attributes) => {
135
+ if (!attributes) return "";
136
+ const { _isLegacyAssert: isLegacyAssert, ...values } = attributes;
137
+ return ` ${isLegacyAssert ? "assert" : "with"} ${JSON.stringify(values)}`;
138
+ };
139
+
125
140
  /**
126
141
  * Whether the export name can also be used as the declared binding name.
127
142
  * @param {string} name export name
@@ -156,73 +171,33 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
156
171
  super.apply(compiler);
157
172
 
158
173
  compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
159
- const { onDemandExportsGeneration } =
160
- ConcatenatedModule.getCompilationHooks(compilation);
161
174
  const javascriptHooks =
162
175
  JavascriptModulesPlugin.getCompilationHooks(compilation);
163
- onDemandExportsGeneration.tap(
164
- PLUGIN_NAME,
165
- (module, runtimes, source, finalName) => {
166
- /** @type {BuildMeta} */
167
- const buildMeta = module.buildMeta || (module.buildMeta = {});
168
-
169
- /** @type {BuildMeta["exportsSourceByRuntime"]} */
170
- const exportsSourceByRuntime =
171
- buildMeta.exportsSourceByRuntime ||
172
- (buildMeta.exportsSourceByRuntime = new Map());
173
-
174
- /** @type {BuildMeta["exportsFinalNameByRuntime"]} */
175
- const exportsFinalNameByRuntime =
176
- buildMeta.exportsFinalNameByRuntime ||
177
- (buildMeta.exportsFinalNameByRuntime = new Map());
178
-
179
- for (const runtime of runtimes) {
180
- const key = getRuntimeKey(runtime);
181
- exportsSourceByRuntime.set(key, source);
182
- exportsFinalNameByRuntime.set(key, finalName);
183
- }
184
176
 
185
- return true;
186
- }
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);
177
+ compilation.hooks.beforeCodeGeneration.tap(PLUGIN_NAME, () => {
178
+ const entries = libraryEntryModules.get(compilation);
179
+ if (entries === undefined) return;
180
+ const { moduleGraph } = compilation;
181
+ for (const { dependencies } of compilation.entries.values()) {
182
+ for (const dep of dependencies) {
183
+ const module = dep && moduleGraph.getModule(dep);
184
+ if (!module) continue;
185
+ const root =
186
+ module instanceof ConcatenatedModule ? module.rootModule : module;
187
+ if (!entries.has(root)) continue;
188
+ if (
189
+ root === module &&
190
+ !definesOnlyNativeExports(module, moduleGraph)
191
+ ) {
192
+ continue;
193
+ }
194
+ moduleGraph.getMeta(module).onDemandExports = true;
214
195
  }
215
- return true;
216
196
  }
217
- );
197
+ });
218
198
 
219
- // `ModuleLibraryPlugin` stashes the on-demand exports source via
220
- // `onDemandExportsGeneration` and only re-emits it when the
221
- // module is wrapped in an IIFE/factory. When the entry is
222
- // inlined directly, the stashed source — and the
223
- // `definePropertyGetters` / `requireScope` runtime helpers it
224
- // pulled in — never make it into the output. Drop those helpers
225
- // from the chunk's set so the bundle stays clean.
199
+ // The stashed exports source is re-emitted only where the entry is wrapped;
200
+ // inlined directly, the helpers it pulled in have no reader and can go.
226
201
  compilation.hooks.additionalChunkRuntimeRequirements.tap(
227
202
  PLUGIN_NAME,
228
203
  (chunk, set, { chunkGraph, codeGenerationResults }) => {
@@ -240,22 +215,16 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
240
215
  if (javascriptHooks.inlineInRuntimeBailout.isUsed()) return;
241
216
 
242
217
  const [module] = chunkGraph.getChunkEntryModulesIterable(chunk);
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;
253
218
  const codeGenResult = codeGenerationResults.get(
254
219
  module,
255
220
  chunk.runtime
256
221
  );
257
- const jsSource =
258
- codeGenResult && codeGenResult.sources.get("javascript");
222
+ const { data } = codeGenResult;
223
+ const takenOver =
224
+ data !== undefined &&
225
+ (data.has("exportsSource") || data.has("exportsBindingSource"));
226
+ if (!takenOver) return;
227
+ const jsSource = codeGenResult.sources.get("javascript");
259
228
  if (
260
229
  jsSource &&
261
230
  String(jsSource.source()).includes(`${RuntimeGlobals.require}.`)
@@ -367,6 +336,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
367
336
  }
368
337
  }
369
338
  }
339
+ this._checkStarReexportedExternals(module, compilation);
370
340
  moduleGraph.addExtraReason(module, "used as library export");
371
341
  let entries = libraryEntryModules.get(compilation);
372
342
  if (entries === undefined) {
@@ -376,6 +346,61 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
376
346
  entries.add(module);
377
347
  }
378
348
 
349
+ /**
350
+ * Reports every external the entry star-reexports whose request names a property
351
+ * path, which `export *` has no way to reference.
352
+ * @param {Module} module the library entry module
353
+ * @param {Compilation} compilation the compilation
354
+ * @returns {void}
355
+ */
356
+ _checkStarReexportedExternals(module, compilation) {
357
+ const { moduleGraph } = compilation;
358
+ /** @type {Set<Module>} */
359
+ const visitedReexportModules = new Set([module]);
360
+ /** @type {Module[]} */
361
+ const queue = [module];
362
+ /** @type {Set<ExternalModule>} */
363
+ const unsupportedExternals = new Set();
364
+
365
+ for (const current of queue) {
366
+ for (const connection of moduleGraph.getOutgoingConnections(current)) {
367
+ const dep = connection.dependency;
368
+
369
+ // Only handle star-reexport statement
370
+ if (
371
+ !(dep instanceof HarmonyExportImportedSpecifierDependency) ||
372
+ dep.name !== null
373
+ ) {
374
+ continue;
375
+ }
376
+ const importedModule = connection.resolvedModule;
377
+
378
+ // Only a module providing unknown exports keeps its reexport rendered
379
+ if (
380
+ moduleGraph.getExportsInfo(importedModule)._otherExportsInfo
381
+ .provided !== null
382
+ ) {
383
+ continue;
384
+ }
385
+ if (importedModule instanceof ExternalModule) {
386
+ const request = importedModule.getResolvedRequest();
387
+ if (Array.isArray(request) && request.length > 1) {
388
+ unsupportedExternals.add(importedModule);
389
+ }
390
+ } else if (!visitedReexportModules.has(importedModule)) {
391
+ visitedReexportModules.add(importedModule);
392
+ queue.push(importedModule);
393
+ }
394
+ }
395
+ }
396
+
397
+ for (const externalModule of unsupportedExternals) {
398
+ compilation.errors.push(
399
+ new ExternalStarReexportError(externalModule, module)
400
+ );
401
+ }
402
+ }
403
+
379
404
  /**
380
405
  * Returns preprocess as needed by overriding.
381
406
  * @param {LibraryOptions} library normalized library option
@@ -415,14 +440,17 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
415
440
  ) {
416
441
  const result = new ConcatSource(source);
417
442
  /** @type {Set<string>} */
418
- const moduleRequests = new Set();
443
+ const externalReexports = new Set();
419
444
  /** @type {Map<string, string | InlinedUsedName>} */
420
445
  const unknownProvidedExports = new Map();
446
+ /** @type {Set<Module>} */
447
+ const visitedReexportModules = new Set();
421
448
 
422
449
  /**
423
450
  * Resolves dynamic star reexport.
424
451
  * @param {Module} module the module
425
452
  * @param {boolean} isDynamicReexport if module is dynamic reexported
453
+ * @returns {void}
426
454
  */
427
455
  const resolveDynamicStarReexport = (module, isDynamicReexport) => {
428
456
  for (const connection of moduleGraph.getOutgoingConnections(module)) {
@@ -445,8 +473,22 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
445
473
  ) {
446
474
  // Handle export * from 'external'
447
475
  if (importedModule instanceof ExternalModule) {
448
- moduleRequests.add(importedModule.userRequest);
449
- } else {
476
+ const request = importedModule.getResolvedRequest();
477
+ // A property path is reported by `_checkStarReexportedExternals`,
478
+ // and an absent one by the external's own build
479
+ const specifier =
480
+ typeof request === "string"
481
+ ? request
482
+ : Array.isArray(request) && request.length === 1
483
+ ? request[0]
484
+ : undefined;
485
+ if (specifier !== undefined) {
486
+ externalReexports.add(
487
+ `export * from ${toJsStringLiteral(specifier)}${toAttributesClause(dep.attributes)};\n`
488
+ );
489
+ }
490
+ } else if (!visitedReexportModules.has(importedModule)) {
491
+ visitedReexportModules.add(importedModule);
450
492
  resolveDynamicStarReexport(importedModule, true);
451
493
  }
452
494
  }
@@ -473,8 +515,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
473
515
 
474
516
  resolveDynamicStarReexport(module, false);
475
517
 
476
- for (const request of moduleRequests) {
477
- result.add(`export * from "${request}";\n`);
518
+ for (const reexport of externalReexports) {
519
+ result.add(reexport);
478
520
  }
479
521
 
480
522
  for (const [origin, used] of unknownProvidedExports) {
@@ -520,19 +562,13 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
520
562
  ]
521
563
  : moduleGraph.getExportsInfo(module).orderedExports;
522
564
 
523
- const exportsFinalNameByRuntime =
524
- (module.buildMeta &&
525
- module.buildMeta.exportsFinalNameByRuntime &&
526
- module.buildMeta.exportsFinalNameByRuntime.get(
527
- getRuntimeKey(chunk.runtime)
528
- )) ||
529
- {};
565
+ const { data } = codeGenerationResults.get(module, chunk.runtime);
530
566
 
531
567
  const isInlinedEntryWithoutIIFE = inlined && !inlinedInIIFE;
532
568
  // Direct export bindings from on-demand concatenation
533
- const definitions = isInlinedEntryWithoutIIFE
534
- ? exportsFinalNameByRuntime
535
- : {};
569
+ /** @type {Record<string, string>} */
570
+ const definitions =
571
+ (isInlinedEntryWithoutIIFE && data && data.get("exportsFinalName")) || {};
536
572
 
537
573
  /** @type {string[]} */
538
574
  const shortHandedExports = [];
@@ -566,15 +602,12 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
566
602
  .treatAsCommonJs;
567
603
  const skipRenderDefaultExport = Boolean(treatAsCommonJs);
568
604
 
569
- // A single (non-concatenated) inlined entry is rendered at the top
570
- // level, so its own declarations are top-level bindings we can export
571
- // directly — keeping ESM live bindings instead of snapshotting
572
- // `__webpack_exports__.x` into a `const`. Concatenated entries already
573
- // get direct bindings via `definitions` above.
605
+ // A single inlined entry renders at the top level, so its declarations are
606
+ // bindings that can be exported directly, keeping ESM live bindings rather
607
+ // than snapshotting them into a `const`.
574
608
  /** @type {Map<string, string> | undefined} */
575
609
  let directBindings;
576
610
  if (isInlinedEntryWithoutIIFE && !treatAsCommonJs) {
577
- const { data } = codeGenerationResults.get(module, chunk.runtime);
578
611
  const topLevelDeclarations =
579
612
  (data && data.get("topLevelDeclarations")) ||
580
613
  (module.buildInfo && module.buildInfo.topLevelDeclarations);
@@ -593,15 +626,8 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
593
626
  }
594
627
  }
595
628
 
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
- );
629
+ const bindingsTakenOver =
630
+ data !== undefined && data.has("exportsBindingSource");
605
631
 
606
632
  const moduleExportsInfo = moduleGraph.getExportsInfo(module);
607
633
 
@@ -623,7 +649,7 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
623
649
  }
624
650
 
625
651
  // Try to find all known exports of the entry module
626
- outer: for (const exportInfo of exportInfos) {
652
+ for (const exportInfo of exportInfos) {
627
653
  if (!exportInfo.provided) continue;
628
654
 
629
655
  const originalName = exportInfo.name;
@@ -631,20 +657,40 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
631
657
  if (skipRenderDefaultExport && originalName === "default") continue;
632
658
 
633
659
  // Try to find all exports from the reexported modules
634
- const target = exportInfo.findTarget(moduleGraph, (_m) => true);
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];
639
- const reexportsInfo = moduleGraph.getExportsInfo(target.module);
640
- for (const reexportInfo of reexportsInfo.orderedExports) {
641
- if (
642
- reexportInfo.provided === false &&
643
- reexportInfo.name !== "default" &&
644
- reexportInfo.name === targetExport
645
- ) {
646
- continue outer;
647
- }
660
+ const target = exportInfo.getTarget(moduleGraph);
661
+
662
+ // A re-export is provided even when its target lacks the export, and
663
+ // the path can end in a property access, so every name is looked up.
664
+ if (
665
+ target &&
666
+ target.export &&
667
+ target.export[target.export.length - 1] !== "default" &&
668
+ moduleGraph
669
+ .getExportsInfo(target.module)
670
+ .isExportProvided(target.export) === false
671
+ ) {
672
+ continue;
673
+ }
674
+
675
+ if (
676
+ target &&
677
+ target.module instanceof ExternalModule &&
678
+ target.export &&
679
+ target.export.length === 1 &&
680
+ codeGenerationResults.has(target.module, chunk.runtime)
681
+ ) {
682
+ const reexport = codeGenerationResults.getData(
683
+ target.module,
684
+ chunk.runtime,
685
+ "externalReexport"
686
+ );
687
+ if (reexport) {
688
+ if (!bindingsTakenOver) needExportsDeclaration = true;
689
+ result.add(
690
+ `export { ${toExportName(target.export[0])} as ${toExportName(originalName)} } ${reexport};\n`
691
+ );
692
+ alreadyRenderedExports.add(originalName);
693
+ continue;
648
694
  }
649
695
  }
650
696
 
@@ -690,7 +736,6 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
690
736
  finalName.includes("("))
691
737
  ) {
692
738
  if (exportInfo.isReexport()) {
693
- const { data } = codeGenerationResults.get(module, chunk.runtime);
694
739
  const topLevelDeclarations =
695
740
  (data && data.get("topLevelDeclarations")) ||
696
741
  (module.buildInfo && module.buildInfo.topLevelDeclarations);
@@ -769,19 +814,13 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
769
814
  renderModuleContent(
770
815
  source,
771
816
  module,
772
- { factory, inlinedInIIFE, chunk },
817
+ { factory, inlinedInIIFE, chunk, codeGenerationResults },
773
818
  libraryContext
774
819
  ) {
775
- const runtimeKey = getRuntimeKey(chunk.runtime);
776
- const buildMeta = module.buildMeta;
777
- const exportsSource =
778
- buildMeta &&
779
- buildMeta.exportsSourceByRuntime &&
780
- buildMeta.exportsSourceByRuntime.get(runtimeKey);
781
- const bindingSource =
782
- buildMeta &&
783
- buildMeta.exportsBindingSourceByRuntime &&
784
- buildMeta.exportsBindingSourceByRuntime.get(runtimeKey);
820
+ const { data } = codeGenerationResults.get(module, chunk.runtime);
821
+ if (data === undefined) return source;
822
+ const exportsSource = data.get("exportsSource");
823
+ const bindingSource = data.get("exportsBindingSource");
785
824
 
786
825
  // Re-add the exports source in a factory or IIFE-wrapped startup module; value
787
826
  // bindings read the declarations above them, so those go after the body.