webpack 5.101.2 → 5.102.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 (323) hide show
  1. package/README.md +21 -26
  2. package/lib/APIPlugin.js +30 -36
  3. package/lib/AsyncDependenciesBlock.js +1 -4
  4. package/lib/BannerPlugin.js +0 -1
  5. package/lib/Cache.js +7 -6
  6. package/lib/CacheFacade.js +0 -1
  7. package/lib/Chunk.js +49 -31
  8. package/lib/ChunkGraph.js +35 -25
  9. package/lib/ChunkGroup.js +8 -10
  10. package/lib/ChunkTemplate.js +1 -1
  11. package/lib/CleanPlugin.js +3 -3
  12. package/lib/CodeGenerationResults.js +2 -1
  13. package/lib/CompatibilityPlugin.js +29 -12
  14. package/lib/Compilation.js +204 -185
  15. package/lib/Compiler.js +36 -35
  16. package/lib/ConcatenationScope.js +6 -1
  17. package/lib/ConditionalInitFragment.js +1 -1
  18. package/lib/ConstPlugin.js +18 -10
  19. package/lib/ContextExclusionPlugin.js +0 -1
  20. package/lib/ContextModule.js +22 -20
  21. package/lib/ContextModuleFactory.js +30 -11
  22. package/lib/ContextReplacementPlugin.js +38 -15
  23. package/lib/DefinePlugin.js +18 -8
  24. package/lib/DelegatedModule.js +7 -11
  25. package/lib/DependenciesBlock.js +0 -2
  26. package/lib/Dependency.js +9 -11
  27. package/lib/DependencyTemplates.js +1 -3
  28. package/lib/DllModule.js +1 -7
  29. package/lib/DllReferencePlugin.js +2 -4
  30. package/lib/DynamicEntryPlugin.js +0 -2
  31. package/lib/EntryOptionPlugin.js +0 -5
  32. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  33. package/lib/EvalDevToolModulePlugin.js +4 -3
  34. package/lib/EvalSourceMapDevToolPlugin.js +3 -4
  35. package/lib/ExportsInfo.js +50 -49
  36. package/lib/ExternalModule.js +84 -52
  37. package/lib/ExternalModuleFactoryPlugin.js +27 -7
  38. package/lib/ExternalsPlugin.js +24 -17
  39. package/lib/FileSystemInfo.js +96 -78
  40. package/lib/FlagDependencyUsagePlugin.js +3 -4
  41. package/lib/Generator.js +2 -13
  42. package/lib/GraphHelpers.js +0 -3
  43. package/lib/HookWebpackError.js +0 -2
  44. package/lib/HotModuleReplacementPlugin.js +22 -24
  45. package/lib/HotUpdateChunk.js +0 -3
  46. package/lib/IgnorePlugin.js +5 -2
  47. package/lib/InitFragment.js +41 -29
  48. package/lib/InvalidDependenciesModuleWarning.js +0 -1
  49. package/lib/LibManifestPlugin.js +4 -6
  50. package/lib/LoaderOptionsPlugin.js +1 -10
  51. package/lib/MainTemplate.js +8 -19
  52. package/lib/Module.js +32 -20
  53. package/lib/ModuleFactory.js +1 -1
  54. package/lib/ModuleFilenameHelpers.js +41 -24
  55. package/lib/ModuleGraph.js +30 -16
  56. package/lib/ModuleInfoHeaderPlugin.js +0 -1
  57. package/lib/ModuleTemplate.js +0 -2
  58. package/lib/ModuleTypeConstants.js +11 -1
  59. package/lib/MultiCompiler.js +23 -15
  60. package/lib/MultiWatching.js +6 -10
  61. package/lib/NodeStuffPlugin.js +2 -10
  62. package/lib/NormalModule.js +145 -88
  63. package/lib/NormalModuleFactory.js +59 -40
  64. package/lib/OptionsApply.js +1 -1
  65. package/lib/Parser.js +1 -1
  66. package/lib/ProgressPlugin.js +6 -10
  67. package/lib/ProvidePlugin.js +5 -7
  68. package/lib/RawModule.js +1 -6
  69. package/lib/RecordIdsPlugin.js +10 -6
  70. package/lib/ResolverFactory.js +0 -2
  71. package/lib/RuntimeGlobals.js +5 -0
  72. package/lib/RuntimeModule.js +1 -3
  73. package/lib/RuntimePlugin.js +26 -22
  74. package/lib/RuntimeTemplate.js +12 -11
  75. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -2
  76. package/lib/SourceMapDevToolPlugin.js +6 -11
  77. package/lib/Stats.js +0 -1
  78. package/lib/Template.js +6 -11
  79. package/lib/TemplatedPathPlugin.js +2 -1
  80. package/lib/WatchIgnorePlugin.js +2 -3
  81. package/lib/Watching.js +15 -15
  82. package/lib/WebpackIsIncludedPlugin.js +0 -2
  83. package/lib/WebpackOptionsApply.js +74 -107
  84. package/lib/asset/AssetBytesGenerator.js +166 -0
  85. package/lib/asset/AssetBytesParser.js +37 -0
  86. package/lib/asset/AssetGenerator.js +20 -34
  87. package/lib/asset/AssetModulesPlugin.js +34 -16
  88. package/lib/asset/AssetParser.js +7 -3
  89. package/lib/asset/AssetSourceGenerator.js +1 -1
  90. package/lib/asset/RawDataUrlModule.js +3 -2
  91. package/lib/async-modules/AsyncModuleHelpers.js +6 -4
  92. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -1
  93. package/lib/buildChunkGraph.js +0 -1
  94. package/lib/cache/MemoryCachePlugin.js +0 -2
  95. package/lib/cache/MemoryWithGcCachePlugin.js +0 -2
  96. package/lib/cache/PackFileCacheStrategy.js +14 -1
  97. package/lib/cache/ResolverCachePlugin.js +9 -15
  98. package/lib/config/defaults.js +155 -21
  99. package/lib/config/normalization.js +18 -3
  100. package/lib/container/ContainerEntryDependency.js +0 -1
  101. package/lib/container/ContainerEntryModule.js +3 -7
  102. package/lib/container/ContainerPlugin.js +1 -2
  103. package/lib/container/ContainerReferencePlugin.js +0 -1
  104. package/lib/container/FallbackDependency.js +2 -1
  105. package/lib/container/FallbackModule.js +6 -7
  106. package/lib/container/ModuleFederationPlugin.js +0 -1
  107. package/lib/container/RemoteModule.js +8 -8
  108. package/lib/container/RemoteRuntimeModule.js +2 -2
  109. package/lib/css/CssGenerator.js +3 -6
  110. package/lib/css/CssLoadingRuntimeModule.js +6 -9
  111. package/lib/css/CssModulesPlugin.js +11 -13
  112. package/lib/css/CssParser.js +3 -3
  113. package/lib/css/walkCssTokens.js +1 -1
  114. package/lib/debug/ProfilingPlugin.js +35 -8
  115. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -17
  116. package/lib/dependencies/AMDPlugin.js +2 -2
  117. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -2
  118. package/lib/dependencies/CachedConstDependency.js +0 -4
  119. package/lib/dependencies/CommonJsExportRequireDependency.js +20 -14
  120. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  121. package/lib/dependencies/CommonJsExportsParserPlugin.js +20 -5
  122. package/lib/dependencies/CommonJsFullRequireDependency.js +6 -4
  123. package/lib/dependencies/CommonJsImportsParserPlugin.js +16 -7
  124. package/lib/dependencies/CommonJsRequireContextDependency.js +1 -1
  125. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  126. package/lib/dependencies/ConstDependency.js +2 -2
  127. package/lib/dependencies/ContextDependency.js +9 -4
  128. package/lib/dependencies/ContextDependencyHelpers.js +2 -2
  129. package/lib/dependencies/ContextDependencyTemplateAsId.js +9 -9
  130. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +9 -9
  131. package/lib/dependencies/ContextElementDependency.js +22 -11
  132. package/lib/dependencies/CssIcssImportDependency.js +0 -2
  133. package/lib/dependencies/CssIcssSymbolDependency.js +2 -2
  134. package/lib/dependencies/CssImportDependency.js +0 -8
  135. package/lib/dependencies/CssLocalIdentifierDependency.js +3 -4
  136. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -2
  137. package/lib/dependencies/CssUrlDependency.js +0 -6
  138. package/lib/dependencies/ExportsInfoDependency.js +7 -9
  139. package/lib/dependencies/ExternalModuleDependency.js +0 -3
  140. package/lib/dependencies/ExternalModuleInitFragment.js +1 -1
  141. package/lib/dependencies/HarmonyAcceptDependency.js +1 -1
  142. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -4
  143. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  144. package/lib/dependencies/HarmonyDetectionParserPlugin.js +0 -14
  145. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +3 -3
  146. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +4 -1
  147. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +29 -35
  148. package/lib/dependencies/HarmonyImportDependency.js +30 -14
  149. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +38 -24
  150. package/lib/dependencies/HarmonyImportSideEffectDependency.js +0 -4
  151. package/lib/dependencies/HarmonyImportSpecifierDependency.js +46 -31
  152. package/lib/dependencies/HarmonyModulesPlugin.js +3 -3
  153. package/lib/dependencies/ImportDependency.js +18 -6
  154. package/lib/dependencies/ImportEagerDependency.js +2 -3
  155. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +8 -5
  156. package/lib/dependencies/ImportMetaContextPlugin.js +0 -1
  157. package/lib/dependencies/ImportMetaPlugin.js +8 -1
  158. package/lib/dependencies/ImportParserPlugin.js +294 -45
  159. package/lib/dependencies/ImportWeakDependency.js +2 -3
  160. package/lib/dependencies/JsonExportsDependency.js +0 -1
  161. package/lib/dependencies/LoaderDependency.js +0 -3
  162. package/lib/dependencies/LoaderImportDependency.js +0 -3
  163. package/lib/dependencies/LoaderPlugin.js +11 -5
  164. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  165. package/lib/dependencies/ModuleDependency.js +3 -9
  166. package/lib/dependencies/NullDependency.js +2 -0
  167. package/lib/dependencies/ProvidedDependency.js +6 -8
  168. package/lib/dependencies/PureExpressionDependency.js +0 -1
  169. package/lib/dependencies/RequireEnsureDependenciesBlock.js +0 -1
  170. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -2
  171. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  172. package/lib/dependencies/RequireResolveDependency.js +2 -2
  173. package/lib/dependencies/RuntimeRequirementsDependency.js +2 -3
  174. package/lib/dependencies/StaticExportsDependency.js +3 -5
  175. package/lib/dependencies/URLDependency.js +2 -7
  176. package/lib/dependencies/URLPlugin.js +1 -2
  177. package/lib/dependencies/WebAssemblyExportImportedDependency.js +2 -2
  178. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  179. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  180. package/lib/dependencies/WorkerDependency.js +2 -3
  181. package/lib/dependencies/WorkerPlugin.js +3 -9
  182. package/lib/dependencies/processExportInfo.js +2 -3
  183. package/lib/esm/ModuleChunkFormatPlugin.js +0 -3
  184. package/lib/esm/ModuleChunkLoadingPlugin.js +2 -1
  185. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -7
  186. package/lib/hmr/LazyCompilationPlugin.js +6 -4
  187. package/lib/hmr/lazyCompilationBackend.js +13 -10
  188. package/lib/ids/DeterministicChunkIdsPlugin.js +0 -1
  189. package/lib/ids/NamedChunkIdsPlugin.js +1 -6
  190. package/lib/ids/NamedModuleIdsPlugin.js +1 -5
  191. package/lib/ids/NaturalChunkIdsPlugin.js +0 -1
  192. package/lib/ids/NaturalModuleIdsPlugin.js +0 -1
  193. package/lib/ids/OccurrenceChunkIdsPlugin.js +0 -1
  194. package/lib/ids/OccurrenceModuleIdsPlugin.js +0 -1
  195. package/lib/ids/SyncModuleIdsPlugin.js +4 -3
  196. package/lib/index.js +8 -7
  197. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -1
  198. package/lib/javascript/BasicEvaluatedExpression.js +13 -6
  199. package/lib/javascript/ChunkFormatHelpers.js +1 -1
  200. package/lib/javascript/CommonJsChunkFormatPlugin.js +0 -1
  201. package/lib/javascript/JavascriptGenerator.js +2 -3
  202. package/lib/javascript/JavascriptModulesPlugin.js +44 -21
  203. package/lib/javascript/JavascriptParser.js +159 -93
  204. package/lib/javascript/JavascriptParserHelpers.js +2 -2
  205. package/lib/javascript/StartupHelpers.js +2 -4
  206. package/lib/json/JsonData.js +1 -1
  207. package/lib/json/JsonGenerator.js +4 -5
  208. package/lib/json/JsonModulesPlugin.js +0 -3
  209. package/lib/json/JsonParser.js +4 -2
  210. package/lib/library/AbstractLibraryPlugin.js +2 -2
  211. package/lib/library/AmdLibraryPlugin.js +0 -1
  212. package/lib/library/AssignLibraryPlugin.js +23 -12
  213. package/lib/library/EnableLibraryPlugin.js +7 -11
  214. package/lib/library/ExportPropertyLibraryPlugin.js +8 -20
  215. package/lib/library/JsonpLibraryPlugin.js +5 -2
  216. package/lib/library/ModuleLibraryPlugin.js +88 -43
  217. package/lib/library/SystemLibraryPlugin.js +0 -1
  218. package/lib/library/UmdLibraryPlugin.js +12 -18
  219. package/lib/logging/Logger.js +12 -10
  220. package/lib/logging/createConsoleLogger.js +15 -14
  221. package/lib/logging/truncateArgs.js +1 -1
  222. package/lib/node/CommonJsChunkLoadingPlugin.js +2 -1
  223. package/lib/node/NodeWatchFileSystem.js +4 -4
  224. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  225. package/lib/node/RequireChunkLoadingRuntimeModule.js +5 -2
  226. package/lib/node/nodeConsole.js +2 -2
  227. package/lib/optimize/AggressiveSplittingPlugin.js +2 -0
  228. package/lib/optimize/ConcatenatedModule.js +142 -100
  229. package/lib/optimize/InnerGraph.js +17 -11
  230. package/lib/optimize/InnerGraphPlugin.js +0 -3
  231. package/lib/optimize/ModuleConcatenationPlugin.js +3 -4
  232. package/lib/optimize/RuntimeChunkPlugin.js +0 -1
  233. package/lib/optimize/SideEffectsFlagPlugin.js +3 -10
  234. package/lib/optimize/SplitChunksPlugin.js +46 -40
  235. package/lib/performance/SizeLimitsPlugin.js +2 -1
  236. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  237. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +0 -2
  238. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +0 -1
  239. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  240. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  241. package/lib/rules/BasicMatcherRulePlugin.js +0 -2
  242. package/lib/rules/ObjectMatcherRulePlugin.js +0 -1
  243. package/lib/rules/RuleSetCompiler.js +8 -6
  244. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  245. package/lib/runtime/CompatRuntimeModule.js +0 -1
  246. package/lib/runtime/GetChunkFilenameRuntimeModule.js +8 -9
  247. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  248. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +1 -1
  249. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  250. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  251. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  252. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  253. package/lib/schemes/DataUriPlugin.js +2 -28
  254. package/lib/schemes/FileUriPlugin.js +5 -2
  255. package/lib/schemes/HttpUriPlugin.js +4 -2
  256. package/lib/schemes/VirtualUrlPlugin.js +11 -11
  257. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  258. package/lib/serialization/ObjectMiddleware.js +30 -19
  259. package/lib/serialization/SerializerMiddleware.js +1 -3
  260. package/lib/serialization/types.js +1 -1
  261. package/lib/sharing/ConsumeSharedModule.js +3 -5
  262. package/lib/sharing/ConsumeSharedPlugin.js +2 -4
  263. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -6
  264. package/lib/sharing/ProvideSharedModule.js +3 -7
  265. package/lib/sharing/SharePlugin.js +0 -2
  266. package/lib/sharing/ShareRuntimeModule.js +4 -1
  267. package/lib/sharing/resolveMatchedConfigs.js +14 -6
  268. package/lib/sharing/utils.js +0 -6
  269. package/lib/stats/DefaultStatsFactoryPlugin.js +178 -94
  270. package/lib/stats/DefaultStatsPresetPlugin.js +15 -9
  271. package/lib/stats/DefaultStatsPrinterPlugin.js +77 -113
  272. package/lib/stats/StatsFactory.js +14 -11
  273. package/lib/url/URLParserPlugin.js +2 -4
  274. package/lib/util/ArrayHelpers.js +4 -4
  275. package/lib/util/AsyncQueue.js +1 -0
  276. package/lib/util/LazySet.js +2 -2
  277. package/lib/util/StackedCacheMap.js +0 -2
  278. package/lib/util/TupleSet.js +9 -4
  279. package/lib/util/URLAbsoluteSpecifier.js +0 -1
  280. package/lib/util/WeakTupleMap.js +1 -1
  281. package/lib/util/chainedImports.js +3 -1
  282. package/lib/util/cleverMerge.js +15 -18
  283. package/lib/util/comparators.js +2 -4
  284. package/lib/util/compileBooleanMatcher.js +11 -9
  285. package/lib/util/concatenate.js +1 -2
  286. package/lib/util/create-schema-validation.js +0 -1
  287. package/lib/util/dataURL.js +39 -0
  288. package/lib/util/deprecation.js +29 -31
  289. package/lib/util/deterministicGrouping.js +34 -30
  290. package/lib/util/extractSourceMap.js +319 -0
  291. package/lib/util/findGraphRoots.js +15 -5
  292. package/lib/util/fs.js +29 -8
  293. package/lib/util/semver.js +9 -8
  294. package/lib/util/smartGrouping.js +41 -26
  295. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  296. package/lib/wasm/EnableWasmLoadingPlugin.js +3 -2
  297. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +5 -1
  298. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +2 -13
  299. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +2 -9
  300. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -1
  301. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -4
  302. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -3
  303. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -4
  304. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +2 -7
  305. package/lib/wasm-sync/WebAssemblyParser.js +1 -4
  306. package/lib/web/JsonpChunkLoadingPlugin.js +2 -1
  307. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -1
  308. package/lib/web/JsonpTemplatePlugin.js +0 -1
  309. package/lib/webpack.js +21 -8
  310. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +2 -1
  311. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  312. package/package.json +13 -13
  313. package/schemas/WebpackOptions.check.js +1 -1
  314. package/schemas/WebpackOptions.json +77 -93
  315. package/schemas/plugins/BannerPlugin.check.js +1 -1
  316. package/schemas/plugins/BannerPlugin.json +4 -0
  317. package/schemas/plugins/IgnorePlugin.json +1 -1
  318. package/schemas/plugins/ProgressPlugin.json +1 -1
  319. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  320. package/schemas/plugins/SourceMapDevToolPlugin.json +5 -1
  321. package/schemas/plugins/schemes/VirtualUrlPlugin.json +3 -3
  322. package/types.d.ts +1140 -505
  323. package/SECURITY.md +0 -9
@@ -13,19 +13,10 @@ const HarmonyExports = require("./HarmonyExports");
13
13
 
14
14
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
15
15
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
16
- /** @typedef {import("./HarmonyModulesPlugin").HarmonyModulesPluginOptions} HarmonyModulesPluginOptions */
17
16
 
18
17
  const PLUGIN_NAME = "HarmonyDetectionParserPlugin";
19
18
 
20
19
  module.exports = class HarmonyDetectionParserPlugin {
21
- /**
22
- * @param {HarmonyModulesPluginOptions} options options
23
- */
24
- constructor(options) {
25
- const { topLevelAwait = false } = options || {};
26
- this.topLevelAwait = topLevelAwait;
27
- }
28
-
29
20
  /**
30
21
  * @param {JavascriptParser} parser the parser
31
22
  * @returns {void}
@@ -66,11 +57,6 @@ module.exports = class HarmonyDetectionParserPlugin {
66
57
 
67
58
  parser.hooks.topLevelAwait.tap(PLUGIN_NAME, () => {
68
59
  const module = parser.state.module;
69
- if (!this.topLevelAwait) {
70
- throw new Error(
71
- "The top-level-await experiment is not enabled (set experiments.topLevelAwait: true to enable it)"
72
- );
73
- }
74
60
  if (!HarmonyExports.isEnabled(parser.state)) {
75
61
  throw new Error(
76
62
  "Top-level-await is only supported in EcmaScript Modules"
@@ -9,7 +9,6 @@ const makeSerializable = require("../util/makeSerializable");
9
9
  const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDependency");
10
10
 
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
12
  /** @typedef {import("../Dependency")} Dependency */
14
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
14
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
@@ -18,6 +17,7 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
18
17
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
19
18
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
20
19
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
20
+ /** @typedef {import("./HarmonyImportDependency").Ids} Ids */
21
21
 
22
22
  /**
23
23
  * Dependency for static evaluating import specifier. e.g.
@@ -30,10 +30,10 @@ class HarmonyEvaluatedImportSpecifierDependency extends HarmonyImportSpecifierDe
30
30
  /**
31
31
  * @param {string} request the request string
32
32
  * @param {number} sourceOrder source order
33
- * @param {string[]} ids ids
33
+ * @param {Ids} ids ids
34
34
  * @param {string} name name
35
35
  * @param {Range} range location in source code
36
- * @param {ImportAttributes} attributes import assertions
36
+ * @param {ImportAttributes | undefined} attributes import assertions
37
37
  * @param {string} operator operator
38
38
  */
39
39
  constructor(request, sourceOrder, ids, name, range, attributes, operator) {
@@ -25,6 +25,7 @@ const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDepe
25
25
  /** @typedef {import("../javascript/JavascriptParser").ClassDeclaration} ClassDeclaration */
26
26
  /** @typedef {import("../javascript/JavascriptParser").FunctionDeclaration} FunctionDeclaration */
27
27
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
28
+ /** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
28
29
 
29
30
  const { HarmonyStarExportsList } = HarmonyExportImportedSpecifierDependency;
30
31
 
@@ -156,7 +157,9 @@ module.exports = class HarmonyExportDependencyParserPlugin {
156
157
  parser.hooks.exportSpecifier.tap(
157
158
  PLUGIN_NAME,
158
159
  (statement, id, name, idx) => {
159
- const settings = parser.getTagData(id, harmonySpecifierTag);
160
+ const settings =
161
+ /** @type {HarmonySettings} */
162
+ (parser.getTagData(id, harmonySpecifierTag));
160
163
  const harmonyNamedExports = (parser.state.harmonyNamedExports =
161
164
  parser.state.harmonyNamedExports || new Set());
162
165
  harmonyNamedExports.add(name);
@@ -33,17 +33,19 @@ const processExportInfo = require("./processExportInfo");
33
33
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
34
34
  /** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
35
35
  /** @typedef {import("../Dependency").GetConditionFn} GetConditionFn */
36
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
36
+ /** @typedef {import("../Dependency").RawReferencedExports} RawReferencedExports */
37
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
37
38
  /** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
38
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
39
39
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
40
40
  /** @typedef {import("../ExportsInfo")} ExportsInfo */
41
41
  /** @typedef {import("../ExportsInfo").ExportInfo} ExportInfo */
42
+ /** @typedef {import("../ExportsInfo").ExportInfoName} ExportInfoName */
42
43
  /** @typedef {import("../ExportsInfo").UsedName} UsedName */
43
44
  /** @typedef {import("../Generator").GenerateContext} GenerateContext */
44
45
  /** @typedef {import("../Module")} Module */
45
46
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
46
47
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
48
+ /** @typedef {import("../Module").ExportsType} ExportsType */
47
49
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
48
50
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
49
51
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
@@ -52,10 +54,9 @@ const processExportInfo = require("./processExportInfo");
52
54
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
53
55
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
54
56
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
55
- /** @typedef {import("../util/Hash")} Hash */
56
57
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
58
+ /** @typedef {import("./HarmonyImportDependency").Ids} Ids */
57
59
  /** @typedef {import("./HarmonyImportDependency").ExportPresenceMode} ExportPresenceMode */
58
- /** @typedef {import("./processExportInfo").ReferencedExports} ReferencedExports */
59
60
 
60
61
  /** @typedef {"missing"|"unused"|"empty-star"|"reexport-dynamic-default"|"reexport-named-default"|"reexport-namespace-object"|"reexport-fake-namespace-object"|"reexport-undefined"|"normal-reexport"|"dynamic-reexport"} ExportModeType */
61
62
 
@@ -66,7 +67,7 @@ const idsSymbol = Symbol("HarmonyExportImportedSpecifierDependency.ids");
66
67
  class NormalReexportItem {
67
68
  /**
68
69
  * @param {string} name export name
69
- * @param {string[]} ids reexported ids from other module
70
+ * @param {Ids} ids reexported ids from other module
70
71
  * @param {ExportInfo} exportInfo export info from other module
71
72
  * @param {boolean} checked true, if it should be checked at runtime if this export exists
72
73
  * @param {boolean} hidden true, if it is hidden behind another active export in the same module
@@ -119,23 +120,22 @@ class ExportMode {
119
120
  }
120
121
  }
121
122
 
122
- /** @typedef {string[]} Names */
123
123
  /** @typedef {number[]} DependencyIndices */
124
124
 
125
125
  /**
126
126
  * @param {ModuleGraph} moduleGraph module graph
127
- * @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency>} dependencies dependencies
128
- * @param {TODO=} additionalDependency additional dependency
129
- * @returns {{ names: Names, dependencyIndices: DependencyIndices }} result
127
+ * @param {HarmonyExportImportedSpecifierDependency[]} dependencies dependencies
128
+ * @param {HarmonyExportImportedSpecifierDependency=} additionalDependency additional dependency
129
+ * @returns {{ names: ExportInfoName[], dependencyIndices: DependencyIndices }} result
130
130
  */
131
131
  const determineExportAssignments = (
132
132
  moduleGraph,
133
133
  dependencies,
134
134
  additionalDependency
135
135
  ) => {
136
- /** @type {Set<string>} */
136
+ /** @type {Set<ExportInfoName>} */
137
137
  const names = new Set();
138
- /** @type {number[]} */
138
+ /** @type {DependencyIndices} */
139
139
  const dependencyIndices = [];
140
140
 
141
141
  if (additionalDependency) {
@@ -167,7 +167,7 @@ const determineExportAssignments = (
167
167
 
168
168
  /**
169
169
  * @param {object} options options
170
- * @param {Names} options.names names
170
+ * @param {ExportInfoName[]} options.names names
171
171
  * @param {DependencyIndices} options.dependencyIndices dependency indices
172
172
  * @param {string} name name
173
173
  * @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency>} dependencies dependencies
@@ -339,7 +339,7 @@ const getMode = (moduleGraph, dep, runtimeKey) => {
339
339
  exportName,
340
340
  [exportName],
341
341
  exportsInfo.getReadOnlyExportInfo(exportName),
342
- /** @type {Set<string>} */
342
+ /** @type {Checked} */
343
343
  (checked).has(exportName),
344
344
  false
345
345
  )
@@ -361,7 +361,6 @@ const getMode = (moduleGraph, dep, runtimeKey) => {
361
361
  return mode;
362
362
  };
363
363
 
364
- /** @typedef {string[]} Ids */
365
364
  /** @typedef {Set<string>} Exports */
366
365
  /** @typedef {Set<string>} Checked */
367
366
  /** @typedef {Set<string>} Hidden */
@@ -515,7 +514,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
515
514
  importedExportsInfo.getReadOnlyExportInfo(name);
516
515
  if (importedExportInfo.provided === false) continue;
517
516
  if (hiddenExports !== undefined && hiddenExports.has(name)) {
518
- /** @type {Set<string>} */
517
+ /** @type {Hidden} */
519
518
  (hidden).add(name);
520
519
  continue;
521
520
  }
@@ -567,7 +566,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
567
566
  * Returns list of exports referenced by this dependency
568
567
  * @param {ModuleGraph} moduleGraph module graph
569
568
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
570
- * @returns {(string[] | ReferencedExport)[]} referenced exports
569
+ * @returns {ReferencedExports} referenced exports
571
570
  */
572
571
  getReferencedExports(moduleGraph, runtime) {
573
572
  const mode = this.getMode(moduleGraph, runtime);
@@ -586,7 +585,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
586
585
  if (!mode.partialNamespaceExportInfo) {
587
586
  return Dependency.EXPORTS_OBJECT_REFERENCED;
588
587
  }
589
- /** @type {ReferencedExports} */
588
+ /** @type {RawReferencedExports} */
590
589
  const referencedExports = [];
591
590
  processExportInfo(
592
591
  runtime,
@@ -602,7 +601,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
602
601
  if (!mode.partialNamespaceExportInfo) {
603
602
  return Dependency.EXPORTS_OBJECT_REFERENCED;
604
603
  }
605
- /** @type {ReferencedExports} */
604
+ /** @type {RawReferencedExports} */
606
605
  const referencedExports = [];
607
606
  processExportInfo(
608
607
  runtime,
@@ -618,7 +617,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
618
617
  return Dependency.EXPORTS_OBJECT_REFERENCED;
619
618
 
620
619
  case "normal-reexport": {
621
- /** @type {ReferencedExports} */
620
+ /** @type {RawReferencedExports} */
622
621
  const referencedExports = [];
623
622
  for (const {
624
623
  ids,
@@ -638,7 +637,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
638
637
 
639
638
  /**
640
639
  * @param {ModuleGraph} moduleGraph the module graph
641
- * @returns {{ names: Names, namesSlice: number, dependencyIndices: DependencyIndices, dependencyIndex: number } | undefined} exported names and their origin dependency
640
+ * @returns {{ names: ExportInfoName[], namesSlice: number, dependencyIndices: DependencyIndices, dependencyIndex: number } | undefined} exported names and their origin dependency
642
641
  */
643
642
  _discoverActiveExportsFromOtherStarExports(moduleGraph) {
644
643
  if (!this.otherStarExports) return;
@@ -880,7 +879,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
880
879
  const importedModule = moduleGraph.getModule(this);
881
880
  if (importedModule) {
882
881
  const exportsInfo = moduleGraph.getExportsInfo(importedModule);
883
- /** @type {Map<string, string[]>} */
882
+ /** @type {Map<string, ExportInfoName[]>} */
884
883
  const conflicts = new Map();
885
884
  for (const exportInfo of exportsInfo.orderedExports) {
886
885
  if (exportInfo.provided !== true) continue;
@@ -980,8 +979,6 @@ makeSerializable(
980
979
  "webpack/lib/dependencies/HarmonyExportImportedSpecifierDependency"
981
980
  );
982
981
 
983
- module.exports = HarmonyExportImportedSpecifierDependency;
984
-
985
982
  HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedSpecifierDependencyTemplate extends (
986
983
  HarmonyImportDependency.Template
987
984
  ) {
@@ -1233,14 +1230,9 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1233
1230
  mode.hidden
1234
1231
  )
1235
1232
  : /** @type {ExportModeIgnored} */ (mode.ignored);
1236
- const modern =
1237
- runtimeTemplate.supportsConst() &&
1238
- runtimeTemplate.supportsArrowFunction();
1239
1233
  let content =
1240
1234
  "/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n" +
1241
- `/* harmony reexport (unknown) */ for(${
1242
- modern ? "const" : "var"
1243
- } __WEBPACK_IMPORT_KEY__ in ${importVar}) `;
1235
+ `/* harmony reexport (unknown) */ for(${runtimeTemplate.renderConst()} __WEBPACK_IMPORT_KEY__ in ${importVar}) `;
1244
1236
 
1245
1237
  // Filter out exports which are defined by other exports
1246
1238
  // and filter out default export because it cannot be reexported with *
@@ -1255,7 +1247,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1255
1247
  }
1256
1248
 
1257
1249
  content += "__WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = ";
1258
- content += modern
1250
+ content += runtimeTemplate.supportsArrowFunction()
1259
1251
  ? `() => ${importVar}[__WEBPACK_IMPORT_KEY__]`
1260
1252
  : `function(key) { return ${importVar}[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)`;
1261
1253
 
@@ -1285,7 +1277,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1285
1277
  * @param {string} comment comment
1286
1278
  * @param {UsedName} key key
1287
1279
  * @param {string} name name
1288
- * @param {string | string[] | null | false} valueKey value key
1280
+ * @param {UsedName | null} valueKey value key
1289
1281
  * @param {RuntimeRequirements} runtimeRequirements runtime requirements
1290
1282
  * @returns {HarmonyExportInitFragment} harmony export init fragment
1291
1283
  */
@@ -1310,7 +1302,7 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1310
1302
 
1311
1303
  /**
1312
1304
  * @param {Module} module module
1313
- * @param {string | string[] | false} key key
1305
+ * @param {UsedName} key key
1314
1306
  * @param {string} name name
1315
1307
  * @param {number} fakeType fake type
1316
1308
  * @param {RuntimeRequirements} runtimeRequirements runtime requirements
@@ -1349,10 +1341,10 @@ HarmonyExportImportedSpecifierDependency.Template = class HarmonyExportImportedS
1349
1341
  /**
1350
1342
  * @param {Module} module module
1351
1343
  * @param {ChunkGraph} chunkGraph chunkGraph
1352
- * @param {string | false | string[]} key key
1344
+ * @param {UsedName} key key
1353
1345
  * @param {string} name name
1354
- * @param {import("../Module").ExportsType} exportsType exportsType
1355
- * @param {Set<string>} runtimeRequirements runtimeRequirements
1346
+ * @param {ExportsType} exportsType exportsType
1347
+ * @param {RuntimeRequirements} runtimeRequirements runtimeRequirements
1356
1348
  * @returns {InitFragment<GenerateContext>[]} fragments
1357
1349
  */
1358
1350
  getReexportDeferredNamespaceObjectFragments(
@@ -1484,4 +1476,6 @@ makeSerializable(
1484
1476
  "HarmonyStarExportsList"
1485
1477
  );
1486
1478
 
1479
+ module.exports = HarmonyExportImportedSpecifierDependency;
1487
1480
  module.exports.HarmonyStarExportsList = HarmonyStarExportsList;
1481
+ module.exports.idsSymbol = idsSymbol;
@@ -15,21 +15,16 @@ const { filterRuntime, mergeRuntime } = require("../util/runtime");
15
15
  const ModuleDependency = require("./ModuleDependency");
16
16
 
17
17
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
18
- /** @typedef {import("webpack-sources").Source} Source */
19
- /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
- /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
21
- /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
18
+ /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
22
19
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
23
20
  /** @typedef {import("../ExportsInfo")} ExportsInfo */
24
21
  /** @typedef {import("../Module")} Module */
25
22
  /** @typedef {import("../Module").BuildMeta} BuildMeta */
26
23
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
27
- /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
28
24
  /** @typedef {import("../WebpackError")} WebpackError */
29
25
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
30
26
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
31
27
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
32
- /** @typedef {import("../util/Hash")} Hash */
33
28
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
34
29
 
35
30
  /** @typedef {0 | 1 | 2 | 3 | false} ExportPresenceMode */
@@ -59,6 +54,8 @@ const ExportPresenceModes = {
59
54
  }
60
55
  };
61
56
 
57
+ /** @typedef {string[]} Ids */
58
+
62
59
  class HarmonyImportDependency extends ModuleDependency {
63
60
  /**
64
61
  * @param {string} request request string
@@ -69,7 +66,7 @@ class HarmonyImportDependency extends ModuleDependency {
69
66
  constructor(request, sourceOrder, attributes, defer) {
70
67
  super(request);
71
68
  this.sourceOrder = sourceOrder;
72
- this.assertions = attributes;
69
+ this.attributes = attributes;
73
70
  this.defer = defer;
74
71
  }
75
72
 
@@ -77,11 +74,22 @@ class HarmonyImportDependency extends ModuleDependency {
77
74
  return "esm";
78
75
  }
79
76
 
77
+ /**
78
+ * @returns {string | null} an identifier to merge equal requests
79
+ */
80
+ getResourceIdentifier() {
81
+ let str = super.getResourceIdentifier();
82
+ if (this.attributes !== undefined) {
83
+ str += JSON.stringify(this.attributes);
84
+ }
85
+ return str;
86
+ }
87
+
80
88
  /**
81
89
  * Returns list of exports referenced by this dependency
82
90
  * @param {ModuleGraph} moduleGraph module graph
83
91
  * @param {RuntimeSpec} runtime the runtime for which the module is analysed
84
- * @returns {(string[] | ReferencedExport)[]} referenced exports
92
+ * @returns {ReferencedExports} referenced exports
85
93
  */
86
94
  getReferencedExports(moduleGraph, runtime) {
87
95
  return Dependency.NO_EXPORTS_REFERENCED;
@@ -98,17 +106,23 @@ class HarmonyImportDependency extends ModuleDependency {
98
106
 
99
107
  const metaKey = defer ? "deferredImportVarMap" : "importVarMap";
100
108
  let importVarMap = meta[metaKey];
101
- if (!importVarMap) meta[metaKey] = importVarMap = new Map();
109
+ if (!importVarMap) {
110
+ meta[metaKey] = importVarMap =
111
+ /** @type {Map<Module, string>} */
112
+ (new Map());
113
+ }
102
114
 
103
115
  let importVar = importVarMap.get(
104
- /** @type {Module} */ (moduleGraph.getModule(this))
116
+ /** @type {Module} */
117
+ (moduleGraph.getModule(this))
105
118
  );
106
119
  if (importVar) return importVar;
107
120
  importVar = `${Template.toIdentifier(
108
121
  `${this.userRequest}`
109
122
  )}__WEBPACK_${this.defer ? "DEFERRED_" : ""}IMPORTED_MODULE_${importVarMap.size}__`;
110
123
  importVarMap.set(
111
- /** @type {Module} */ (moduleGraph.getModule(this)),
124
+ /** @type {Module} */
125
+ (moduleGraph.getModule(this)),
112
126
  importVar
113
127
  );
114
128
  return importVar;
@@ -156,7 +170,7 @@ class HarmonyImportDependency extends ModuleDependency {
156
170
 
157
171
  /**
158
172
  * @param {ModuleGraph} moduleGraph module graph
159
- * @param {string[]} ids imported ids
173
+ * @param {Ids} ids imported ids
160
174
  * @param {string} additionalMessage extra info included in the error message
161
175
  * @returns {WebpackError[] | undefined} errors
162
176
  */
@@ -273,7 +287,8 @@ class HarmonyImportDependency extends ModuleDependency {
273
287
  serialize(context) {
274
288
  const { write } = context;
275
289
  write(this.sourceOrder);
276
- write(this.assertions);
290
+ write(this.attributes);
291
+ write(this.defer);
277
292
  super.serialize(context);
278
293
  }
279
294
 
@@ -283,7 +298,8 @@ class HarmonyImportDependency extends ModuleDependency {
283
298
  deserialize(context) {
284
299
  const { read } = context;
285
300
  this.sourceOrder = read();
286
- this.assertions = read();
301
+ this.attributes = read();
302
+ this.defer = read();
287
303
  super.deserialize(context);
288
304
  }
289
305
  }
@@ -8,7 +8,10 @@
8
8
  const CommentCompilationWarning = require("../CommentCompilationWarning");
9
9
  const HotModuleReplacementPlugin = require("../HotModuleReplacementPlugin");
10
10
  const WebpackError = require("../WebpackError");
11
- const { getImportAttributes } = require("../javascript/JavascriptParser");
11
+ const {
12
+ VariableInfo,
13
+ getImportAttributes
14
+ } = require("../javascript/JavascriptParser");
12
15
  const InnerGraph = require("../optimize/InnerGraph");
13
16
  const ConstDependency = require("./ConstDependency");
14
17
  const HarmonyAcceptDependency = require("./HarmonyAcceptDependency");
@@ -21,31 +24,24 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
21
24
 
22
25
  /** @typedef {import("estree").Expression} Expression */
23
26
  /** @typedef {import("estree").Identifier} Identifier */
24
- /** @typedef {import("estree").Literal} Literal */
25
27
  /** @typedef {import("estree").MemberExpression} MemberExpression */
26
- /** @typedef {import("estree").ObjectExpression} ObjectExpression */
27
- /** @typedef {import("estree").Property} Property */
28
28
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
29
29
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
30
- /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
31
30
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
32
- /** @typedef {import("../javascript/JavascriptParser").DestructuringAssignmentProperty} DestructuringAssignmentProperty */
33
31
  /** @typedef {import("../javascript/JavascriptParser").ExportAllDeclaration} ExportAllDeclaration */
34
32
  /** @typedef {import("../javascript/JavascriptParser").ExportNamedDeclaration} ExportNamedDeclaration */
35
33
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
36
34
  /** @typedef {import("../javascript/JavascriptParser").ImportDeclaration} ImportDeclaration */
37
- /** @typedef {import("../javascript/JavascriptParser").ImportExpression} ImportExpression */
38
35
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
39
- /** @typedef {import("../javascript/JavascriptParser").TagData} TagData */
40
- /** @typedef {import("../optimize/InnerGraph").InnerGraph} InnerGraph */
41
- /** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
42
- /** @typedef {import("./HarmonyImportDependency")} HarmonyImportDependency */
36
+ /** @typedef {import("../javascript/JavascriptParser").Members} Members */
37
+ /** @typedef {import("../javascript/JavascriptParser").MembersOptionals} MembersOptionals */
38
+ /** @typedef {import("./HarmonyImportDependency").Ids} Ids */
43
39
 
44
40
  const harmonySpecifierTag = Symbol("harmony import");
45
41
 
46
42
  /**
47
43
  * @typedef {object} HarmonySettings
48
- * @property {string[]} ids
44
+ * @property {Ids} ids
49
45
  * @property {string} source
50
46
  * @property {number} sourceOrder
51
47
  * @property {string} name
@@ -81,9 +77,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
81
77
  const { exportPresenceMode } = this;
82
78
 
83
79
  /**
84
- * @param {string[]} members members
85
- * @param {boolean[]} membersOptionals members Optionals
86
- * @returns {string[]} a non optional part
80
+ * @param {Members} members members
81
+ * @param {MembersOptionals} membersOptionals members Optionals
82
+ * @returns {Ids} a non optional part
87
83
  */
88
84
  function getNonOptionalPart(members, membersOptionals) {
89
85
  let i = 0;
@@ -155,14 +151,18 @@ module.exports = class HarmonyImportDependencyParserPlugin {
155
151
  const defer = this.deferImport
156
152
  ? getImportMode(parser, statement).defer
157
153
  : false;
158
- parser.tagVariable(name, harmonySpecifierTag, {
154
+ parser.tagVariable(
159
155
  name,
160
- source,
161
- ids,
162
- sourceOrder: parser.state.lastHarmonyImportOrder,
163
- attributes: getImportAttributes(statement),
164
- defer
165
- });
156
+ harmonySpecifierTag,
157
+ /** @type {HarmonySettings} */ ({
158
+ name,
159
+ source,
160
+ ids,
161
+ sourceOrder: parser.state.lastHarmonyImportOrder,
162
+ attributes: getImportAttributes(statement),
163
+ defer
164
+ })
165
+ );
166
166
  return true;
167
167
  }
168
168
  );
@@ -188,10 +188,10 @@ module.exports = class HarmonyImportDependencyParserPlugin {
188
188
  return;
189
189
  }
190
190
  const settings =
191
- /** @type {TagData} */
191
+ /** @type {HarmonySettings} */
192
192
  (rootInfo.tagInfo.data);
193
193
  const members =
194
- /** @type {(() => string[])} */
194
+ /** @type {(() => Members)} */
195
195
  (rightPart.getMembers)();
196
196
  const dep = new HarmonyEvaluatedImportSpecifierDependency(
197
197
  settings.source,
@@ -211,6 +211,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
211
211
  InnerGraph.onUsage(parser.state, (e) => (dep.usedByExports = e));
212
212
  return true;
213
213
  });
214
+ parser.hooks.collectDestructuringAssignmentProperties.tap(
215
+ PLUGIN_NAME,
216
+ (expr) => {
217
+ const nameInfo = parser.getNameForExpression(expr);
218
+ if (
219
+ nameInfo &&
220
+ nameInfo.rootInfo instanceof VariableInfo &&
221
+ nameInfo.rootInfo.name &&
222
+ parser.getTagData(nameInfo.rootInfo.name, harmonySpecifierTag)
223
+ ) {
224
+ return true;
225
+ }
226
+ }
227
+ );
214
228
  parser.hooks.expression
215
229
  .for(harmonySpecifierTag)
216
230
  .tap(PLUGIN_NAME, (expr) => {
@@ -14,12 +14,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
15
  /** @typedef {import("../Module")} Module */
16
16
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
- /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
18
17
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
19
- /** @typedef {import("../WebpackError")} WebpackError */
20
18
  /** @typedef {import("../javascript/JavascriptParser").ImportAttributes} ImportAttributes */
21
- /** @typedef {import("../util/Hash")} Hash */
22
- /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
23
19
 
24
20
  class HarmonyImportSideEffectDependency extends HarmonyImportDependency {
25
21
  /**