@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,22 +8,30 @@
8
8
  const Dependency = require("../Dependency");
9
9
  const { InlinedUsedName } = require("../optimize/InlineExports");
10
10
  const makeSerializable = require("../util/makeSerializable");
11
+ const memoize = require("../util/memoize");
11
12
  const ExportBindingInitFragment = require("./ExportBindingInitFragment");
12
13
  const HarmonyExportInitFragment = require("./HarmonyExportInitFragment");
13
14
  const NullDependency = require("./NullDependency");
14
15
 
15
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
16
- /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
17
- /** @typedef {import("../Dependency").LazyUntil} LazyUntil */
18
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
19
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
- /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
21
- /** @typedef {import("../optimize/InlineExports").InlinedValue} InlinedValue */
16
+ /** @import { ReplaceSource } from "webpack-sources" */
17
+ /** @import { ExportsSpec, LazyUntil } from "../Dependency" */
18
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
19
+ /** @import ModuleGraph from "../ModuleGraph" */
20
+ /** @import { ConnectionState } from "../ModuleGraphConnection" */
21
+ /** @import { InlinedValue } from "../optimize/InlineExports" */
22
22
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, string, InlinedValue | null | undefined]>} ObjectDeserializerContext */
23
23
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, string, InlinedValue | null | undefined]>} ObjectSerializerContext */
24
- /** @typedef {import("./HarmonyExportInitFragment").UnusedExports} UnusedExports */
25
- /** @typedef {import("./HarmonyExportInitFragment").ExportMap} ExportMap */
26
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildInfo} JavascriptModuleBuildInfo */
24
+ /** @import { UnusedExports, ExportMap } from "./HarmonyExportInitFragment" */
25
+ /**
26
+ * @import {
27
+ * JavascriptModuleBuildInfo
28
+ * } from "../javascript/JavascriptModule"
29
+ */
30
+
31
+ // Required here rather than at the top: the plugin reaches back into the dependencies.
32
+ const getJavascriptModulesPlugin = memoize(() =>
33
+ require("../javascript/JavascriptModulesPlugin")
34
+ );
27
35
 
28
36
  class HarmonyExportSpecifierDependency extends NullDependency {
29
37
  /**
@@ -139,10 +147,18 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
139
147
  apply(
140
148
  dependency,
141
149
  source,
142
- { module, moduleGraph, initFragments, runtime, concatenationScope }
150
+ {
151
+ module,
152
+ moduleGraph,
153
+ initFragments,
154
+ runtime,
155
+ runtimeTemplate,
156
+ concatenationScope
157
+ }
143
158
  ) {
144
159
  const dep = /** @type {HarmonyExportSpecifierDependency} */ (dependency);
145
- if (concatenationScope) {
160
+ // a wrapped module's bindings stay inside the wrapper, not in the shared scope
161
+ if (concatenationScope && !concatenationScope.isWrapped()) {
146
162
  concatenationScope.registerExport(dep.name, dep.id);
147
163
  return;
148
164
  }
@@ -169,6 +185,21 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
169
185
  /** @type {import("../Module").BuildInfo} */ (module.buildInfo)
170
186
  .isCircular === false;
171
187
 
188
+ // A library exporting the same bindings natively reads none of them back off the
189
+ // exports object, so it takes the call over and emits it only where wrapped.
190
+ const hooks = getJavascriptModulesPlugin().getCompilationHooks(
191
+ runtimeTemplate.compilation
192
+ );
193
+ const onDemand = hooks.onDemandExportsGeneration.isUsed()
194
+ ? (/** @type {string} */ definition, /** @type {boolean} */ placeAtEnd) =>
195
+ hooks.onDemandExportsGeneration.call(
196
+ module,
197
+ runtime,
198
+ definition,
199
+ placeAtEnd
200
+ ) === true
201
+ : undefined;
202
+
172
203
  if (canUseValueBinding) {
173
204
  initFragments.push(
174
205
  new ExportBindingInitFragment(
@@ -180,7 +211,8 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
180
211
  bindingType: "value"
181
212
  }
182
213
  ],
183
- true
214
+ true,
215
+ onDemand
184
216
  )
185
217
  );
186
218
  } else {
@@ -188,7 +220,12 @@ HarmonyExportSpecifierDependency.Template = class HarmonyExportSpecifierDependen
188
220
  const map = new Map();
189
221
  map.set(used, `/* binding */ ${dep.id}`);
190
222
  initFragments.push(
191
- new HarmonyExportInitFragment(module.exportsArgument, map, undefined)
223
+ new HarmonyExportInitFragment(
224
+ module.exportsArgument,
225
+ map,
226
+ undefined,
227
+ onDemand
228
+ )
192
229
  );
193
230
  }
194
231
  }
@@ -7,10 +7,13 @@
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
 
10
- /** @typedef {import("../Module").BuildInfo} BuildInfo */
11
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
12
- /** @typedef {import("../javascript/JavascriptModule").JavascriptModuleBuildMeta} JavascriptModuleBuildMeta */
13
- /** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
10
+ /** @import { BuildInfo } from "../Module" */
11
+ /**
12
+ * @import {
13
+ * JavascriptModuleBuildMeta
14
+ * } from "../javascript/JavascriptModule"
15
+ */
16
+ /** @import { JavascriptParserState } from "../javascript/JavascriptParser" */
14
17
 
15
18
  /** @type {WeakMap<JavascriptParserState, boolean>} */
16
19
  const parserStateExportsState = new WeakMap();
@@ -11,25 +11,35 @@ const InitFragment = require("../InitFragment");
11
11
  const Template = require("../Template");
12
12
  const AwaitDependenciesInitFragment = require("../async-modules/AwaitDependenciesInitFragment");
13
13
  const isGeneratorLowered = require("../async-modules/isGeneratorLowered");
14
+ const memoize = require("../util/memoize");
14
15
  const { filterRuntime, mergeRuntime } = require("../util/runtime");
15
16
  const HarmonyLinkingError = require("./HarmonyLinkingError");
16
17
  const { ImportPhase, ImportPhaseUtils } = require("./ImportPhase");
17
18
  const ModuleDependency = require("./ModuleDependency");
18
19
 
19
- /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
20
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
21
- /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
22
- /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
23
- /** @typedef {import("../ExportsInfo")} ExportsInfo */
24
- /** @typedef {import("../Module")} Module */
25
- /** @typedef {import("../Module").BuildMeta} BuildMeta */
26
- /** @typedef {import("../ModuleGraph")} ModuleGraph */
27
- /** @typedef {import("../errors/WebpackError")} WebpackError */
28
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
29
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
30
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
31
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
32
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
20
+ const getExternalModule = memoize(() => require("../ExternalModule"));
21
+
22
+ /** @import { ReplaceSource } from "webpack-sources" */
23
+ /**
24
+ * @import {
25
+ * JavascriptParserOptions
26
+ * } from "../../declarations/WebpackOptions"
27
+ */
28
+ /** @import { ReferencedExports } from "../Dependency" */
29
+ /** @import { DependencyTemplateContext } from "../DependencyTemplate" */
30
+ /** @import ExportsInfo from "../ExportsInfo" */
31
+ /** @import Module, { BuildMeta } from "../Module" */
32
+ /** @import ModuleGraph from "../ModuleGraph" */
33
+ /** @import WebpackError from "../errors/WebpackError" */
34
+ /** @import { ImportAttributes } from "../javascript/JavascriptParser" */
35
+ /** @import { ImportPhaseType } from "./ImportPhase" */
36
+ /**
37
+ * @import {
38
+ * ObjectDeserializerContext,
39
+ * ObjectSerializerContext
40
+ * } from "../serialization/ObjectMiddleware"
41
+ */
42
+ /** @import { RuntimeSpec } from "../util/runtime" */
33
43
 
34
44
  /** @typedef {0 | 1 | 2 | 3} ExportPresenceMode */
35
45
 
@@ -90,6 +100,31 @@ const getNonOptionalPart = (members, membersOptionals) => {
90
100
 
91
101
  /** @typedef {string[]} Ids */
92
102
 
103
+ /**
104
+ * Export names a lazy barrel still defers, so they are missing from its provided
105
+ * exports without being absent from the module.
106
+ * @param {Module} module the imported module
107
+ * @returns {Set<string> | true | undefined} deferred names, true when a deferred star re-export may provide any name, undefined when none
108
+ */
109
+ const getDeferredExports = (module) => {
110
+ const factoryMeta = module.factoryMeta;
111
+ if (factoryMeta === undefined || !factoryMeta.sideEffectFree) return;
112
+ /** @type {Set<string> | undefined} */
113
+ let names;
114
+ for (const dep of module.dependencies) {
115
+ // TODO remove in webpack 6
116
+ // These may be missing on custom dependency types not extending the base Dependency
117
+ if (!("getLazyUntil" in dep) || !("isLazy" in dep)) continue;
118
+ if (!dep.isLazy()) continue;
119
+ const until = dep.getLazyUntil();
120
+ if (until === Dependency.LAZY_UNTIL_FALLBACK) return true;
121
+ if (until !== Dependency.LAZY_UNTIL_ID) continue;
122
+ if (names === undefined) names = new Set();
123
+ names.add(/** @type {string} */ (dep.getLazyName()));
124
+ }
125
+ return names;
126
+ };
127
+
93
128
  class HarmonyImportDependency extends ModuleDependency {
94
129
  /**
95
130
  * Creates an instance of HarmonyImportDependency.
@@ -135,9 +170,10 @@ class HarmonyImportDependency extends ModuleDependency {
135
170
 
136
171
  /**
137
172
  * Returns true if this dependency can be concatenated
173
+ * @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
138
174
  * @returns {boolean} true if this dependency can be concatenated
139
175
  */
140
- canConcatenate() {
176
+ canConcatenate(concatenateCommonJsModules) {
141
177
  return true;
142
178
  }
143
179
 
@@ -177,9 +213,14 @@ class HarmonyImportDependency extends ModuleDependency {
177
213
  const importedModule = /** @type {Module} */ (moduleGraph.getModule(this));
178
214
  const meta = moduleGraph.getMeta(module);
179
215
 
216
+ // An async external is a promise webpack awaits, not a module record with
217
+ // an evaluating state, so deferring its namespace would never throw.
180
218
  const isDeferred =
181
219
  ImportPhaseUtils.isDefer(this.phase) &&
182
- !(/** @type {BuildMeta} */ (importedModule.buildMeta).async);
220
+ !(
221
+ /** @type {BuildMeta} */ (importedModule.buildMeta).async &&
222
+ importedModule instanceof getExternalModule()
223
+ );
183
224
 
184
225
  const metaKey = isDeferred ? "deferredImportVarMap" : "importVarMap";
185
226
  let importVarMap = meta[metaKey];
@@ -275,48 +316,63 @@ class HarmonyImportDependency extends ModuleDependency {
275
316
  (exportsType !== "default-with-named" || ids[0] !== "default") &&
276
317
  moduleGraph.isExportProvided(importedModule, ids) === false
277
318
  ) {
278
- // We are sure that it's not provided
279
-
280
- // Try to provide detailed info in the error message
281
- let pos = 0;
282
- let exportsInfo = moduleGraph.getExportsInfo(importedModule);
283
- while (pos < ids.length && exportsInfo) {
284
- const id = ids[pos++];
285
- const exportInfo = exportsInfo.getReadOnlyExportInfo(id);
286
- if (exportInfo.provided === false) {
287
- // We are sure that it's not provided
288
- const providedExports = exportsInfo.getProvidedExports();
289
- const moreInfo = !Array.isArray(providedExports)
290
- ? " (possible exports unknown)"
291
- : providedExports.length === 0
292
- ? " (module has no exports)"
293
- : ` (possible exports: ${providedExports.join(", ")})`;
294
- return [
295
- new HarmonyLinkingError(
296
- `export ${ids
297
- .slice(0, pos)
298
- .map((id) => `'${id}'`)
299
- .join(".")} ${additionalMessage} was not found in '${
300
- this.userRequest
301
- }'${moreInfo}`
302
- )
303
- ];
319
+ const deferredExports = getDeferredExports(importedModule);
320
+
321
+ if (
322
+ deferredExports !== true &&
323
+ (deferredExports === undefined || !deferredExports.has(ids[0]))
324
+ ) {
325
+ // We are sure that it's not provided
326
+
327
+ // Try to provide detailed info in the error message
328
+ let pos = 0;
329
+ let exportsInfo = moduleGraph.getExportsInfo(importedModule);
330
+ while (pos < ids.length && exportsInfo) {
331
+ const id = ids[pos++];
332
+ const exportInfo = exportsInfo.getReadOnlyExportInfo(id);
333
+ if (exportInfo.provided === false) {
334
+ // We are sure that it's not provided
335
+ let providedExports = exportsInfo.getProvidedExports();
336
+ // only the first level names the imported module itself
337
+ if (
338
+ pos === 1 &&
339
+ deferredExports !== undefined &&
340
+ Array.isArray(providedExports)
341
+ ) {
342
+ providedExports = [...providedExports, ...deferredExports];
343
+ }
344
+ const moreInfo = !Array.isArray(providedExports)
345
+ ? " (possible exports unknown)"
346
+ : providedExports.length === 0
347
+ ? " (module has no exports)"
348
+ : ` (possible exports: ${providedExports.join(", ")})`;
349
+ return [
350
+ new HarmonyLinkingError(
351
+ `export ${ids
352
+ .slice(0, pos)
353
+ .map((id) => `'${id}'`)
354
+ .join(".")} ${additionalMessage} was not found in '${
355
+ this.userRequest
356
+ }'${moreInfo}`
357
+ )
358
+ ];
359
+ }
360
+ exportsInfo =
361
+ /** @type {ExportsInfo} */
362
+ (exportInfo.getNestedExportsInfo());
304
363
  }
305
- exportsInfo =
306
- /** @type {ExportsInfo} */
307
- (exportInfo.getNestedExportsInfo());
308
- }
309
364
 
310
- // General error message
311
- return [
312
- new HarmonyLinkingError(
313
- `export ${ids
314
- .map((id) => `'${id}'`)
315
- .join(".")} ${additionalMessage} was not found in '${
316
- this.userRequest
317
- }'`
318
- )
319
- ];
365
+ // General error message
366
+ return [
367
+ new HarmonyLinkingError(
368
+ `export ${ids
369
+ .map((id) => `'${id}'`)
370
+ .join(".")} ${additionalMessage} was not found in '${
371
+ this.userRequest
372
+ }'`
373
+ )
374
+ ];
375
+ }
320
376
  }
321
377
  }
322
378
  switch (exportsType) {
@@ -384,8 +440,6 @@ class HarmonyImportDependency extends ModuleDependency {
384
440
  }
385
441
  }
386
442
 
387
- module.exports = HarmonyImportDependency;
388
-
389
443
  /** @type {WeakMap<Module, WeakMap<Module, RuntimeSpec | boolean>>} */
390
444
  const importEmittedMap = new WeakMap();
391
445
 
@@ -462,8 +516,13 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
462
516
  }
463
517
 
464
518
  const importStatement = dep.getImportStatement(false, templateContext);
519
+ // A module deferring itself is already evaluating: awaiting it would probe
520
+ // the deferred namespace and force the evaluation it must not trigger.
521
+ const isSelfDeferred =
522
+ ImportPhaseUtils.isDefer(dep.phase) && referencedModule === module;
465
523
  if (
466
524
  referencedModule &&
525
+ !isSelfDeferred &&
467
526
  templateContext.moduleGraph.isAsync(referencedModule)
468
527
  ) {
469
528
  templateContext.initFragments.push(
@@ -524,5 +583,7 @@ HarmonyImportDependency.Template = class HarmonyImportDependencyTemplate extends
524
583
  }
525
584
  };
526
585
 
527
- module.exports.ExportPresenceModes = ExportPresenceModes;
528
- module.exports.getNonOptionalPart = getNonOptionalPart;
586
+ HarmonyImportDependency.ExportPresenceModes = ExportPresenceModes;
587
+ HarmonyImportDependency.getNonOptionalPart = getNonOptionalPart;
588
+
589
+ module.exports = HarmonyImportDependency;
@@ -5,8 +5,9 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const HotModuleReplacementPlugin = require("../HotModuleReplacementPlugin");
8
+ const ImportedBindingAssignmentError = require("../errors/ImportedBindingAssignmentError");
9
9
  const WebpackError = require("../errors/WebpackError");
10
+ const getParserHooks = require("../hmr/parserHooks");
10
11
  const {
11
12
  VariableInfo,
12
13
  getImportAttributes
@@ -29,25 +30,31 @@ const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDepe
29
30
  const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
30
31
  const { ImportPhaseUtils, createGetImportPhase } = require("./ImportPhase");
31
32
 
32
- /** @typedef {import("estree").Expression} Expression */
33
- /** @typedef {import("estree").PrivateIdentifier} PrivateIdentifier */
34
- /** @typedef {import("estree").Identifier} Identifier */
35
- /** @typedef {import("estree").MemberExpression} MemberExpression */
36
- /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
37
- /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
38
- /** @typedef {import("../Module")} Module */
39
- /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
40
- /** @typedef {import("../javascript/JavascriptParser").ExportAllDeclaration} ExportAllDeclaration */
41
- /** @typedef {import("../javascript/JavascriptParser").ExportNamedDeclaration} ExportNamedDeclaration */
42
- /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
43
- /** @typedef {import("../javascript/JavascriptParser").ImportDeclaration} ImportDeclaration */
44
- /** @typedef {import("../javascript/JavascriptParser").Range} Range */
45
- /** @typedef {import("../javascript/JavascriptParser").Members} Members */
46
- /** @typedef {import("../javascript/JavascriptParser").MembersOptionals} MembersOptionals */
47
- /** @typedef {import("./HarmonyImportDependency").Ids} Ids */
48
- /** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
49
- /** @typedef {import("./ImportPhase").ImportPhaseType} ImportPhaseType */
50
- /** @typedef {import("./HarmonyImportGuard").GuardFrame} GuardFrame */
33
+ /**
34
+ * @import {
35
+ * Expression,
36
+ * PrivateIdentifier,
37
+ * Identifier,
38
+ * MemberExpression
39
+ * } from "estree"
40
+ */
41
+ /**
42
+ * @import {
43
+ * JavascriptParserOptions
44
+ * } from "../../declarations/WebpackOptions"
45
+ */
46
+ /** @import Module from "../Module" */
47
+ /** @import { JavascriptModuleBuildInfo } from "../javascript/JavascriptModule" */
48
+ /**
49
+ * @import JavascriptParser, {
50
+ * ImportAttributes,
51
+ * Range,
52
+ * Members
53
+ * } from "../javascript/JavascriptParser"
54
+ */
55
+ /** @import { Ids, ExportPresenceMode } from "./HarmonyImportDependency" */
56
+ /** @import { ImportPhaseType } from "./ImportPhase" */
57
+ /** @import { GuardFrame } from "./HarmonyImportGuard" */
51
58
 
52
59
  const harmonySpecifierTag = Symbol("harmony import");
53
60
 
@@ -66,10 +73,24 @@ const EMPTY_ID_RANGES = [];
66
73
  * @property {boolean} await
67
74
  * @property {ImportAttributes=} attributes
68
75
  * @property {ImportPhaseType} phase
76
+ * @property {boolean} used whether the binding is referenced anywhere
77
+ * @property {HarmonyImportSideEffectDependency | undefined} dependency the statement's own dependency
69
78
  */
70
79
 
71
80
  const PLUGIN_NAME = "HarmonyImportDependencyParserPlugin";
72
81
 
82
+ /**
83
+ * Records that an import binding is referenced, so it is not reported as an
84
+ * unused specifier naming a missing export.
85
+ * @param {HarmonySettings | undefined} settings settings of the referenced tag
86
+ * @returns {boolean} true when the reference was a harmony import specifier
87
+ */
88
+ const markUsed = (settings) => {
89
+ if (!settings) return false;
90
+ settings.used = true;
91
+ return true;
92
+ };
93
+
73
94
  /**
74
95
  * Gets in operator harmony import info.
75
96
  * @param {JavascriptParser} parser the parser
@@ -102,6 +123,7 @@ const getInOperatorHarmonyImportInfo = (parser, left, right) => {
102
123
  if (!settings) {
103
124
  return;
104
125
  }
126
+ settings.used = true;
105
127
 
106
128
  return {
107
129
  leftPart,
@@ -120,7 +142,10 @@ const getInOperatorHarmonyImportInfo = (parser, left, right) => {
120
142
  const findImportSpecifier = (parser, node) => {
121
143
  switch (node.type) {
122
144
  case "Identifier":
123
- return Boolean(parser.getTagData(node.name, harmonySpecifierTag));
145
+ return markUsed(
146
+ /** @type {HarmonySettings | undefined} */
147
+ (parser.getTagData(node.name, harmonySpecifierTag))
148
+ );
124
149
  case "UnaryExpression":
125
150
  return findImportSpecifier(
126
151
  parser,
@@ -147,7 +172,7 @@ const findImportSpecifier = (parser, node) => {
147
172
  }
148
173
  };
149
174
 
150
- module.exports = class HarmonyImportDependencyParserPlugin {
175
+ class HarmonyImportDependencyParserPlugin {
151
176
  /**
152
177
  * Creates an instance of HarmonyImportDependencyParserPlugin.
153
178
  * @param {JavascriptParserOptions} options options
@@ -208,6 +233,35 @@ module.exports = class HarmonyImportDependencyParserPlugin {
208
233
  this.options.sourceImport
209
234
  );
210
235
 
236
+ // Parsers are reused across modules, so both are reset per program.
237
+ /** @type {HarmonySettings[]} */
238
+ const declaredSpecifiers = [];
239
+ /** @type {HarmonyImportSideEffectDependency | undefined} */
240
+ let lastSideEffectDependency;
241
+
242
+ parser.hooks.program.tap(PLUGIN_NAME, () => {
243
+ declaredSpecifiers.length = 0;
244
+ lastSideEffectDependency = undefined;
245
+ });
246
+ parser.hooks.finish.tap(PLUGIN_NAME, () => {
247
+ for (const settings of declaredSpecifiers) {
248
+ const dependency = settings.dependency;
249
+ if (dependency === undefined || settings.used) continue;
250
+ if (dependency.unusedSpecifiers === undefined) {
251
+ dependency.unusedSpecifiers = {
252
+ exportPresenceMode: this.exportPresenceMode,
253
+ specifiers: []
254
+ };
255
+ }
256
+ dependency.unusedSpecifiers.specifiers.push([
257
+ settings.ids,
258
+ settings.name
259
+ ]);
260
+ }
261
+ declaredSpecifiers.length = 0;
262
+ lastSideEffectDependency = undefined;
263
+ });
264
+
211
265
  /**
212
266
  * Gets non optional member chain.
213
267
  * @param {MemberExpression} node member expression
@@ -223,7 +277,10 @@ module.exports = class HarmonyImportDependencyParserPlugin {
223
277
  const expr = /** @type {Identifier} */ (expression);
224
278
  if (
225
279
  parser.isVariableDefined(expr.name) ||
226
- parser.getTagData(expr.name, harmonySpecifierTag)
280
+ markUsed(
281
+ /** @type {HarmonySettings | undefined} */
282
+ (parser.getTagData(expr.name, harmonySpecifierTag))
283
+ )
227
284
  ) {
228
285
  return true;
229
286
  }
@@ -262,6 +319,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
262
319
  );
263
320
  sideEffectDep.loc = parser.getLocation(statement);
264
321
  parser.state.module.addDependency(sideEffectDep);
322
+ lastSideEffectDependency = sideEffectDep;
265
323
  return true;
266
324
  });
267
325
  parser.hooks.importSpecifier.tap(
@@ -269,18 +327,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
269
327
  (statement, source, id, name) => {
270
328
  const ids = id === null ? [] : [id];
271
329
  const phase = getImportPhase(parser, statement);
272
- parser.tagVariable(
330
+ const settings = /** @type {HarmonySettings} */ ({
273
331
  name,
274
- harmonySpecifierTag,
275
- /** @type {HarmonySettings} */ ({
276
- name,
277
- source,
278
- ids,
279
- sourceOrder: parser.state.lastHarmonyImportOrder,
280
- attributes: getImportAttributes(statement),
281
- phase
282
- })
283
- );
332
+ source,
333
+ ids,
334
+ sourceOrder: parser.state.lastHarmonyImportOrder,
335
+ attributes: getImportAttributes(statement),
336
+ phase,
337
+ used: false,
338
+ dependency: lastSideEffectDependency
339
+ });
340
+ parser.tagVariable(name, harmonySpecifierTag, settings);
341
+ // The statement's dependency carries them, so a never-referenced
342
+ // one still resolves; a namespace import names no export.
343
+ if (ids.length !== 0) declaredSpecifiers.push(settings);
284
344
  return true;
285
345
  }
286
346
  );
@@ -323,16 +383,37 @@ module.exports = class HarmonyImportDependencyParserPlugin {
323
383
  nameInfo &&
324
384
  nameInfo.rootInfo instanceof VariableInfo &&
325
385
  nameInfo.rootInfo.name &&
326
- parser.getTagData(nameInfo.rootInfo.name, harmonySpecifierTag)
386
+ markUsed(
387
+ /** @type {HarmonySettings | undefined} */
388
+ (parser.getTagData(nameInfo.rootInfo.name, harmonySpecifierTag))
389
+ )
327
390
  ) {
328
391
  return true;
329
392
  }
330
393
  }
331
394
  );
395
+ // Concatenation would turn the binding into a plain local, losing the
396
+ // getter-only property whose write throws.
397
+ parser.hooks.assign.for(harmonySpecifierTag).tap(PLUGIN_NAME, (expr) => {
398
+ const settings = /** @type {HarmonySettings} */ (parser.currentTagData);
399
+ markUsed(settings);
400
+ /** @type {JavascriptModuleBuildInfo} */
401
+ (parser.state.module.buildInfo).moduleConcatenationBailout =
402
+ "assignment to an imported binding";
403
+ // A named import is written through the namespace's getter-only
404
+ // property, which throws on its own. A namespace one is the binding
405
+ // itself, and nothing webpack can emit for it throws, so report it.
406
+ if (settings.ids.length === 0) {
407
+ const error = new ImportedBindingAssignmentError(settings.name);
408
+ error.loc = parser.getLocation(expr);
409
+ parser.state.module.addError(error);
410
+ }
411
+ });
332
412
  parser.hooks.expression
333
413
  .for(harmonySpecifierTag)
334
414
  .tap(PLUGIN_NAME, (expr) => {
335
415
  const settings = /** @type {HarmonySettings} */ (parser.currentTagData);
416
+ settings.used = true;
336
417
 
337
418
  const dep = new HarmonyImportSpecifierDependency(
338
419
  settings.source,
@@ -371,6 +452,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
371
452
  const settings =
372
453
  /** @type {HarmonySettings} */
373
454
  (parser.currentTagData);
455
+ settings.used = true;
374
456
  const nonOptionalMembers = getNonOptionalPart(
375
457
  members,
376
458
  membersOptionals
@@ -426,6 +508,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
426
508
  const settings = /** @type {HarmonySettings} */ (
427
509
  parser.currentTagData
428
510
  );
511
+ settings.used = true;
429
512
  const nonOptionalMembers = getNonOptionalPart(
430
513
  members,
431
514
  membersOptionals
@@ -486,6 +569,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
486
569
  .for(harmonySpecifierTag)
487
570
  .tap(PLUGIN_NAME, (expression, members) => {
488
571
  const settings = /** @type {HarmonySettings} */ (parser.currentTagData);
572
+ settings.used = true;
489
573
  if (!ImportPhaseUtils.isDefer(settings.phase)) return;
490
574
  if (expression.operator !== "=") return;
491
575
  if (members.length !== 1) return;
@@ -496,7 +580,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
496
580
  return true;
497
581
  });
498
582
  const { hotAcceptCallback, hotAcceptWithoutCallback } =
499
- HotModuleReplacementPlugin.getParserHooks(parser);
583
+ getParserHooks(parser);
500
584
  hotAcceptCallback.tap(PLUGIN_NAME, (expr, requests) => {
501
585
  if (!HarmonyExports.isEnabled(parser.state)) {
502
586
  // This is not a harmony module, skip it
@@ -567,6 +651,8 @@ module.exports = class HarmonyImportDependencyParserPlugin {
567
651
  return { consequent, alternate };
568
652
  });
569
653
  }
570
- };
654
+ }
655
+
656
+ HarmonyImportDependencyParserPlugin.harmonySpecifierTag = harmonySpecifierTag;
571
657
 
572
- module.exports.harmonySpecifierTag = harmonySpecifierTag;
658
+ module.exports = HarmonyImportDependencyParserPlugin;