webpack 5.85.0 → 5.88.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (249) hide show
  1. package/README.md +5 -2
  2. package/lib/APIPlugin.js +150 -99
  3. package/lib/AsyncDependenciesBlock.js +3 -3
  4. package/lib/BannerPlugin.js +2 -1
  5. package/lib/CaseSensitiveModulesWarning.js +3 -1
  6. package/lib/Chunk.js +35 -17
  7. package/lib/ChunkGraph.js +4 -4
  8. package/lib/ChunkGroup.js +20 -9
  9. package/lib/CompatibilityPlugin.js +50 -30
  10. package/lib/Compilation.js +2 -1
  11. package/lib/Compiler.js +10 -9
  12. package/lib/ConcatenationScope.js +2 -2
  13. package/lib/ConditionalInitFragment.js +11 -1
  14. package/lib/ConstPlugin.js +73 -32
  15. package/lib/ContextModule.js +8 -3
  16. package/lib/ContextModuleFactory.js +1 -0
  17. package/lib/ContextReplacementPlugin.js +13 -0
  18. package/lib/DelegatedModule.js +15 -3
  19. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  20. package/lib/DependenciesBlock.js +1 -1
  21. package/lib/Dependency.js +11 -5
  22. package/lib/DependencyTemplates.js +1 -1
  23. package/lib/DllEntryPlugin.js +11 -1
  24. package/lib/DllModule.js +6 -0
  25. package/lib/DllReferencePlugin.js +13 -1
  26. package/lib/Entrypoint.js +1 -1
  27. package/lib/ErrorHelpers.js +1 -0
  28. package/lib/EvalSourceMapDevToolPlugin.js +6 -1
  29. package/lib/ExportsInfo.js +22 -4
  30. package/lib/ExportsInfoApiPlugin.js +14 -5
  31. package/lib/ExternalModule.js +20 -8
  32. package/lib/FileSystemInfo.js +52 -24
  33. package/lib/FlagAllModulesAsUsedPlugin.js +6 -1
  34. package/lib/FlagDependencyUsagePlugin.js +3 -1
  35. package/lib/FlagEntryExportAsUsedPlugin.js +4 -0
  36. package/lib/Generator.js +7 -0
  37. package/lib/HotModuleReplacementPlugin.js +8 -0
  38. package/lib/InitFragment.js +28 -5
  39. package/lib/JavascriptMetaInfoPlugin.js +11 -6
  40. package/lib/LibManifestPlugin.js +20 -4
  41. package/lib/Module.js +14 -3
  42. package/lib/ModuleDependencyError.js +4 -2
  43. package/lib/ModuleDependencyWarning.js +4 -2
  44. package/lib/ModuleGraph.js +31 -24
  45. package/lib/ModuleGraphConnection.js +19 -6
  46. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  47. package/lib/ModuleNotFoundError.js +5 -2
  48. package/lib/ModuleProfile.js +1 -0
  49. package/lib/ModuleRestoreError.js +2 -0
  50. package/lib/ModuleStoreError.js +2 -1
  51. package/lib/ModuleTypeConstants.js +7 -0
  52. package/lib/MultiWatching.js +4 -0
  53. package/lib/NodeStuffPlugin.js +32 -6
  54. package/lib/ProgressPlugin.js +71 -15
  55. package/lib/ProvidePlugin.js +13 -4
  56. package/lib/RawModule.js +3 -1
  57. package/lib/RequireJsStuffPlugin.js +7 -0
  58. package/lib/RuntimeGlobals.js +5 -0
  59. package/lib/RuntimeModule.js +3 -3
  60. package/lib/RuntimePlugin.js +6 -3
  61. package/lib/RuntimeTemplate.js +22 -4
  62. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  63. package/lib/SourceMapDevToolPlugin.js +7 -2
  64. package/lib/UseStrictPlugin.js +10 -3
  65. package/lib/Watching.js +62 -25
  66. package/lib/WebpackError.js +6 -5
  67. package/lib/WebpackIsIncludedPlugin.js +6 -4
  68. package/lib/WebpackOptionsApply.js +4 -2
  69. package/lib/WebpackOptionsDefaulter.js +10 -3
  70. package/lib/asset/AssetGenerator.js +2 -1
  71. package/lib/asset/AssetParser.js +11 -6
  72. package/lib/asset/AssetSourceParser.js +8 -3
  73. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  74. package/lib/buildChunkGraph.js +37 -21
  75. package/lib/cache/IdleFileCachePlugin.js +2 -1
  76. package/lib/cache/PackFileCacheStrategy.js +53 -22
  77. package/lib/config/browserslistTargetHandler.js +7 -7
  78. package/lib/config/defaults.js +43 -26
  79. package/lib/container/RemoteRuntimeModule.js +1 -1
  80. package/lib/css/CssExportsGenerator.js +9 -0
  81. package/lib/css/CssGenerator.js +1 -1
  82. package/lib/css/CssLoadingRuntimeModule.js +43 -19
  83. package/lib/css/CssModulesPlugin.js +42 -14
  84. package/lib/css/CssParser.js +22 -0
  85. package/lib/dependencies/AMDDefineDependency.js +34 -4
  86. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -0
  87. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  88. package/lib/dependencies/CommonJsExportsParserPlugin.js +14 -4
  89. package/lib/dependencies/CommonJsImportsParserPlugin.js +169 -59
  90. package/lib/dependencies/CommonJsPlugin.js +13 -8
  91. package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
  92. package/lib/dependencies/ConstDependency.js +2 -2
  93. package/lib/dependencies/ContextDependency.js +7 -2
  94. package/lib/dependencies/CssImportDependency.js +1 -1
  95. package/lib/dependencies/CssLocalIdentifierDependency.js +5 -0
  96. package/lib/dependencies/CssUrlDependency.js +3 -3
  97. package/lib/dependencies/DllEntryDependency.js +5 -0
  98. package/lib/dependencies/DynamicExports.js +10 -6
  99. package/lib/dependencies/ExportsInfoDependency.js +14 -4
  100. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  101. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -1
  102. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -5
  103. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +2 -0
  104. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +4 -4
  105. package/lib/dependencies/HarmonyExports.js +9 -5
  106. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +40 -27
  107. package/lib/dependencies/HarmonyImportSideEffectDependency.js +1 -2
  108. package/lib/dependencies/HarmonyImportSpecifierDependency.js +31 -21
  109. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  110. package/lib/dependencies/ImportDependency.js +5 -3
  111. package/lib/dependencies/ImportEagerDependency.js +5 -3
  112. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +19 -0
  113. package/lib/dependencies/ImportMetaPlugin.js +31 -15
  114. package/lib/dependencies/ImportParserPlugin.js +62 -25
  115. package/lib/dependencies/ImportWeakDependency.js +5 -3
  116. package/lib/dependencies/JsonExportsDependency.js +1 -1
  117. package/lib/dependencies/ModuleDependency.js +1 -1
  118. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  119. package/lib/dependencies/ProvidedDependency.js +4 -1
  120. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  121. package/lib/dependencies/RequireEnsureDependenciesBlock.js +5 -2
  122. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  123. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  124. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +26 -5
  125. package/lib/dependencies/RequireResolveHeaderDependency.js +9 -0
  126. package/lib/dependencies/SystemPlugin.js +17 -5
  127. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  128. package/lib/dependencies/URLDependency.js +2 -2
  129. package/lib/dependencies/URLPlugin.js +9 -4
  130. package/lib/dependencies/WebAssemblyImportDependency.js +1 -1
  131. package/lib/dependencies/WorkerPlugin.js +59 -22
  132. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  133. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
  134. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  135. package/lib/ids/HashedModuleIdsPlugin.js +1 -1
  136. package/lib/ids/SyncModuleIdsPlugin.js +1 -0
  137. package/lib/javascript/BasicEvaluatedExpression.js +28 -19
  138. package/lib/javascript/CommonJsChunkFormatPlugin.js +6 -2
  139. package/lib/javascript/JavascriptModulesPlugin.js +25 -5
  140. package/lib/javascript/JavascriptParser.js +157 -85
  141. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  142. package/lib/json/JsonData.js +2 -2
  143. package/lib/json/JsonParser.js +25 -12
  144. package/lib/library/AmdLibraryPlugin.js +2 -2
  145. package/lib/library/AssignLibraryPlugin.js +13 -1
  146. package/lib/library/EnableLibraryPlugin.js +4 -0
  147. package/lib/library/SystemLibraryPlugin.js +1 -1
  148. package/lib/library/UmdLibraryPlugin.js +20 -2
  149. package/lib/logging/runtime.js +1 -1
  150. package/lib/logging/truncateArgs.js +4 -0
  151. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -6
  152. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +2 -1
  153. package/lib/node/RequireChunkLoadingRuntimeModule.js +10 -6
  154. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  155. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  156. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  157. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  158. package/lib/optimize/InnerGraph.js +5 -5
  159. package/lib/optimize/InnerGraphPlugin.js +2 -1
  160. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  161. package/lib/optimize/MangleExportsPlugin.js +1 -1
  162. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  163. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  164. package/lib/optimize/RealContentHashPlugin.js +80 -30
  165. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  166. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  167. package/lib/optimize/SideEffectsFlagPlugin.js +10 -1
  168. package/lib/optimize/SplitChunksPlugin.js +71 -31
  169. package/lib/performance/SizeLimitsPlugin.js +7 -4
  170. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  171. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  172. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  173. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  174. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  175. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  176. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  177. package/lib/rules/RuleSetCompiler.js +3 -3
  178. package/lib/rules/UseEffectRulePlugin.js +6 -4
  179. package/lib/runtime/AsyncModuleRuntimeModule.js +8 -5
  180. package/lib/runtime/AutoPublicPathRuntimeModule.js +4 -2
  181. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  182. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  183. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  184. package/lib/runtime/CompatRuntimeModule.js +7 -2
  185. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  186. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  187. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  188. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  189. package/lib/runtime/EnsureChunkRuntimeModule.js +15 -4
  190. package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -10
  191. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  192. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  193. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +4 -2
  194. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  195. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  196. package/lib/runtime/LoadScriptRuntimeModule.js +64 -48
  197. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  198. package/lib/runtime/NonceRuntimeModule.js +1 -1
  199. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  200. package/lib/runtime/PublicPathRuntimeModule.js +4 -2
  201. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  202. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  203. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -3
  204. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -2
  205. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  206. package/lib/serialization/BinaryMiddleware.js +143 -1
  207. package/lib/serialization/ErrorObjectSerializer.js +3 -0
  208. package/lib/serialization/ObjectMiddleware.js +9 -3
  209. package/lib/serialization/types.js +1 -1
  210. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  211. package/lib/sharing/ConsumeSharedRuntimeModule.js +14 -5
  212. package/lib/sharing/ProvideSharedDependency.js +11 -0
  213. package/lib/sharing/ProvideSharedModule.js +4 -0
  214. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  215. package/lib/sharing/ShareRuntimeModule.js +12 -5
  216. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  217. package/lib/sharing/utils.js +32 -5
  218. package/lib/util/AsyncQueue.js +4 -2
  219. package/lib/util/ParallelismFactorCalculator.js +10 -0
  220. package/lib/util/Semaphore.js +1 -1
  221. package/lib/util/StackedCacheMap.js +1 -1
  222. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  223. package/lib/util/createHash.js +30 -9
  224. package/lib/util/deprecation.js +10 -3
  225. package/lib/util/deterministicGrouping.js +50 -11
  226. package/lib/util/findGraphRoots.js +4 -2
  227. package/lib/util/memoize.js +3 -3
  228. package/lib/util/processAsyncTree.js +7 -1
  229. package/lib/util/registerExternalSerializer.js +1 -1
  230. package/lib/util/runtime.js +84 -21
  231. package/lib/util/semver.js +1 -0
  232. package/lib/util/smartGrouping.js +1 -1
  233. package/lib/validateSchema.js +6 -2
  234. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +6 -2
  235. package/lib/wasm-async/AsyncWebAssemblyParser.js +7 -3
  236. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +14 -7
  237. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -1
  238. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  239. package/lib/wasm-sync/WebAssemblyParser.js +6 -2
  240. package/lib/web/JsonpChunkLoadingRuntimeModule.js +14 -4
  241. package/lib/webpack.js +11 -2
  242. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -16
  243. package/module.d.ts +1 -0
  244. package/package.json +5 -4
  245. package/schemas/WebpackOptions.check.js +1 -1
  246. package/schemas/WebpackOptions.json +52 -6
  247. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  248. package/schemas/plugins/css/CssParserOptions.json +1 -1
  249. package/types.d.ts +606 -292
@@ -5,6 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
8
9
  /** @typedef {import("../Parser").ParserState} ParserState */
9
10
 
10
11
  /** @type {WeakMap<ParserState, boolean>} */
@@ -18,8 +19,9 @@ exports.bailout = parserState => {
18
19
  const value = parserStateExportsState.get(parserState);
19
20
  parserStateExportsState.set(parserState, false);
20
21
  if (value === true) {
21
- parserState.module.buildMeta.exportsType = undefined;
22
- parserState.module.buildMeta.defaultObject = false;
22
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
23
+ buildMeta.exportsType = undefined;
24
+ buildMeta.defaultObject = false;
23
25
  }
24
26
  };
25
27
 
@@ -32,8 +34,9 @@ exports.enable = parserState => {
32
34
  if (value === false) return;
33
35
  parserStateExportsState.set(parserState, true);
34
36
  if (value !== true) {
35
- parserState.module.buildMeta.exportsType = "default";
36
- parserState.module.buildMeta.defaultObject = "redirect";
37
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
38
+ buildMeta.exportsType = "default";
39
+ buildMeta.defaultObject = "redirect";
37
40
  }
38
41
  };
39
42
 
@@ -44,7 +47,7 @@ exports.enable = parserState => {
44
47
  exports.setFlagged = parserState => {
45
48
  const value = parserStateExportsState.get(parserState);
46
49
  if (value !== true) return;
47
- const buildMeta = parserState.module.buildMeta;
50
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
48
51
  if (buildMeta.exportsType === "dynamic") return;
49
52
  buildMeta.exportsType = "flagged";
50
53
  };
@@ -56,7 +59,8 @@ exports.setFlagged = parserState => {
56
59
  exports.setDynamic = parserState => {
57
60
  const value = parserStateExportsState.get(parserState);
58
61
  if (value !== true) return;
59
- parserState.module.buildMeta.exportsType = "dynamic";
62
+ /** @type {BuildMeta} */
63
+ (parserState.module.buildMeta).exportsType = "dynamic";
60
64
  };
61
65
 
62
66
  /**
@@ -51,19 +51,23 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
51
51
  switch (property) {
52
52
  case "canMangle": {
53
53
  const exportsInfo = moduleGraph.getExportsInfo(module);
54
- const exportInfo = exportsInfo.getExportInfo(exportName);
54
+ const exportInfo = exportsInfo.getExportInfo(
55
+ /** @type {string} */ (exportName)
56
+ );
55
57
  if (exportInfo) return exportInfo.canMangle;
56
58
  return exportsInfo.otherExportsInfo.canMangle;
57
59
  }
58
60
  case "used":
59
61
  return (
60
- moduleGraph.getExportsInfo(module).getUsed(exportName, runtime) !==
62
+ moduleGraph
63
+ .getExportsInfo(module)
64
+ .getUsed(/** @type {string} */ (exportName), runtime) !==
61
65
  UsageState.Unused
62
66
  );
63
67
  case "useInfo": {
64
68
  const state = moduleGraph
65
69
  .getExportsInfo(module)
66
- .getUsed(exportName, runtime);
70
+ .getUsed(/** @type {string} */ (exportName), runtime);
67
71
  switch (state) {
68
72
  case UsageState.Used:
69
73
  case UsageState.OnlyPropertiesUsed:
@@ -79,7 +83,9 @@ const getProperty = (moduleGraph, module, exportName, property, runtime) => {
79
83
  }
80
84
  }
81
85
  case "provideInfo":
82
- return moduleGraph.getExportsInfo(module).isExportProvided(exportName);
86
+ return moduleGraph
87
+ .getExportsInfo(module)
88
+ .isExportProvided(/** @type {string} */ (exportName));
83
89
  }
84
90
  return undefined;
85
91
  };
@@ -108,6 +114,10 @@ class ExportsInfoDependency extends NullDependency {
108
114
  super.serialize(context);
109
115
  }
110
116
 
117
+ /**
118
+ * @param {ObjectDeserializerContext} context context
119
+ * @returns {ExportsInfoDependency} ExportsInfoDependency
120
+ */
111
121
  static deserialize(context) {
112
122
  const obj = new ExportsInfoDependency(
113
123
  context.read(),
@@ -15,6 +15,7 @@ const NullDependency = require("./NullDependency");
15
15
  /** @typedef {import("../Dependency")} Dependency */
16
16
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
17
17
  /** @typedef {import("../Module")} Module */
18
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
18
19
 
19
20
  class HarmonyCompatibilityDependency extends NullDependency {
20
21
  get type() {
@@ -80,7 +81,7 @@ HarmonyCompatibilityDependency.Template = class HarmonyExportDependencyTemplate
80
81
  0,
81
82
  undefined,
82
83
  `\n__webpack_async_result__();\n} catch(e) { __webpack_async_result__(e); } }${
83
- module.buildMeta.async ? ", 1" : ""
84
+ /** @type {BuildMeta} */ (module.buildMeta).async ? ", 1" : ""
84
85
  });`
85
86
  )
86
87
  );
@@ -10,6 +10,7 @@ const DynamicExports = require("./DynamicExports");
10
10
  const HarmonyCompatibilityDependency = require("./HarmonyCompatibilityDependency");
11
11
  const HarmonyExports = require("./HarmonyExports");
12
12
 
13
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
13
14
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
14
15
  /** @typedef {import("./HarmonyModulesPlugin").HarmonyModulesPluginOptions} HarmonyModulesPluginOptions */
15
16
 
@@ -72,7 +73,8 @@ module.exports = class HarmonyDetectionParserPlugin {
72
73
  "Top-level-await is only supported in EcmaScript Modules"
73
74
  );
74
75
  }
75
- module.buildMeta.async = true;
76
+ /** @type {BuildMeta} */
77
+ (module.buildMeta).async = true;
76
78
  });
77
79
 
78
80
  /**
@@ -12,6 +12,8 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
12
12
  /** @typedef {import("../ChunkGraph")} ChunkGraph */
13
13
  /** @typedef {import("../Dependency")} Dependency */
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
16
+ /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
15
17
  /** @typedef {import("../javascript/JavascriptParser").Assertions} Assertions */
16
18
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
17
19
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
@@ -85,15 +87,20 @@ HarmonyEvaluatedImportSpecifierDependency.Template = class HarmonyEvaluatedImpor
85
87
  // Skip rendering depending when dependency is conditional
86
88
  if (connection && !connection.isTargetActive(runtime)) return;
87
89
 
88
- const exportsInfo = moduleGraph.getExportsInfo(connection.module);
90
+ const exportsInfo = moduleGraph.getExportsInfo(
91
+ /** @type {ModuleGraphConnection} */ (connection).module
92
+ );
89
93
  const ids = dep.getIds(moduleGraph);
90
94
 
91
95
  let value;
92
96
 
93
- const exportsType = connection.module.getExportsType(
94
- moduleGraph,
95
- module.buildMeta.strictHarmonyModule
96
- );
97
+ const exportsType =
98
+ /** @type {ModuleGraphConnection} */
99
+ (connection).module.getExportsType(
100
+ moduleGraph,
101
+ /** @type {BuildMeta} */
102
+ (module.buildMeta).strictHarmonyModule
103
+ );
97
104
  switch (exportsType) {
98
105
  case "default-with-named": {
99
106
  if (ids[0] === "default") {
@@ -18,6 +18,8 @@ const {
18
18
  } = require("./HarmonyImportDependencyParserPlugin");
19
19
  const HarmonyImportSideEffectDependency = require("./HarmonyImportSideEffectDependency");
20
20
 
21
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
22
+
21
23
  const { HarmonyStarExportsList } = HarmonyExportImportedSpecifierDependency;
22
24
 
23
25
  module.exports = class HarmonyExportDependencyParserPlugin {
@@ -330,9 +330,9 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
330
330
  * @param {string[]} ids the requested export name of the imported module
331
331
  * @param {string | null} name the export name of for this module
332
332
  * @param {Set<string>} activeExports other named exports in the module
333
- * @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency> | Iterable<HarmonyExportImportedSpecifierDependency>} otherStarExports other star exports in the module before this import
333
+ * @param {ReadonlyArray<HarmonyExportImportedSpecifierDependency> | Iterable<HarmonyExportImportedSpecifierDependency> | null} otherStarExports other star exports in the module before this import
334
334
  * @param {number} exportPresenceMode mode of checking export names
335
- * @param {HarmonyStarExportsList} allStarExports all star exports in the module
335
+ * @param {HarmonyStarExportsList | null} allStarExports all star exports in the module
336
336
  * @param {Assertions=} assertions import assertions
337
337
  */
338
338
  constructor(
@@ -756,7 +756,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
756
756
  /**
757
757
  * Returns warnings
758
758
  * @param {ModuleGraph} moduleGraph module graph
759
- * @returns {WebpackError[]} warnings
759
+ * @returns {WebpackError[] | null | undefined} warnings
760
760
  */
761
761
  getWarnings(moduleGraph) {
762
762
  const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
@@ -769,7 +769,7 @@ class HarmonyExportImportedSpecifierDependency extends HarmonyImportDependency {
769
769
  /**
770
770
  * Returns errors
771
771
  * @param {ModuleGraph} moduleGraph module graph
772
- * @returns {WebpackError[]} errors
772
+ * @returns {WebpackError[] | null | undefined} errors
773
773
  */
774
774
  getErrors(moduleGraph) {
775
775
  const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
@@ -7,6 +7,8 @@
7
7
 
8
8
  const RuntimeGlobals = require("../RuntimeGlobals");
9
9
 
10
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
11
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
10
12
  /** @typedef {import("../Parser").ParserState} ParserState */
11
13
 
12
14
  /** @type {WeakMap<ParserState, boolean>} */
@@ -22,12 +24,14 @@ exports.enable = (parserState, isStrictHarmony) => {
22
24
  if (value === false) return;
23
25
  parserStateExportsState.set(parserState, true);
24
26
  if (value !== true) {
25
- parserState.module.buildMeta.exportsType = "namespace";
26
- parserState.module.buildInfo.strict = true;
27
- parserState.module.buildInfo.exportsArgument = RuntimeGlobals.exports;
27
+ const buildMeta = /** @type {BuildMeta} */ (parserState.module.buildMeta);
28
+ buildMeta.exportsType = "namespace";
29
+ const buildInfo = /** @type {BuildInfo} */ (parserState.module.buildInfo);
30
+ buildInfo.strict = true;
31
+ buildInfo.exportsArgument = RuntimeGlobals.exports;
28
32
  if (isStrictHarmony) {
29
- parserState.module.buildMeta.strictHarmonyModule = true;
30
- parserState.module.buildInfo.moduleArgument = "__webpack_module__";
33
+ buildMeta.strictHarmonyModule = true;
34
+ buildInfo.moduleArgument = "__webpack_module__";
31
35
  }
32
36
  }
33
37
  };
@@ -21,8 +21,12 @@ const HarmonyImportSpecifierDependency = require("./HarmonyImportSpecifierDepend
21
21
  /** @typedef {import("estree").Identifier} Identifier */
22
22
  /** @typedef {import("estree").ImportDeclaration} ImportDeclaration */
23
23
  /** @typedef {import("estree").ImportExpression} ImportExpression */
24
+ /** @typedef {import("estree").MemberExpression} MemberExpression */
24
25
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
26
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
27
+ /** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
25
28
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
29
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
26
30
  /** @typedef {import("../optimize/InnerGraph").InnerGraph} InnerGraph */
27
31
  /** @typedef {import("../optimize/InnerGraph").TopLevelSymbol} TopLevelSymbol */
28
32
  /** @typedef {import("./HarmonyImportDependency")} HarmonyImportDependency */
@@ -113,19 +117,21 @@ module.exports = class HarmonyImportDependencyParserPlugin {
113
117
  parser.state.lastHarmonyImportOrder =
114
118
  (parser.state.lastHarmonyImportOrder || 0) + 1;
115
119
  const clearDep = new ConstDependency(
116
- parser.isAsiPosition(statement.range[0]) ? ";" : "",
117
- statement.range
120
+ parser.isAsiPosition(/** @type {Range} */ (statement.range)[0])
121
+ ? ";"
122
+ : "",
123
+ /** @type {Range} */ (statement.range)
118
124
  );
119
- clearDep.loc = statement.loc;
125
+ clearDep.loc = /** @type {DependencyLocation} */ (statement.loc);
120
126
  parser.state.module.addPresentationalDependency(clearDep);
121
- parser.unsetAsiPosition(statement.range[1]);
127
+ parser.unsetAsiPosition(/** @type {Range} */ (statement.range)[1]);
122
128
  const assertions = getAssertions(statement);
123
129
  const sideEffectDep = new HarmonyImportSideEffectDependency(
124
130
  source,
125
131
  parser.state.lastHarmonyImportOrder,
126
132
  assertions
127
133
  );
128
- sideEffectDep.loc = statement.loc;
134
+ sideEffectDep.loc = /** @type {DependencyLocation} */ (statement.loc);
129
135
  parser.state.module.addDependency(sideEffectDep);
130
136
  return true;
131
137
  }
@@ -172,13 +178,15 @@ module.exports = class HarmonyImportDependencyParserPlugin {
172
178
  settings.sourceOrder,
173
179
  settings.ids.concat(members).concat([leftPart]),
174
180
  settings.name,
175
- expression.range,
181
+ /** @type {Range} */ (expression.range),
176
182
  settings.assertions,
177
183
  "in"
178
184
  );
179
185
  dep.directImport = members.length === 0;
180
- dep.asiSafe = !parser.isAsiPosition(expression.range[0]);
181
- dep.loc = expression.loc;
186
+ dep.asiSafe = !parser.isAsiPosition(
187
+ /** @type {Range} */ (expression.range)[0]
188
+ );
189
+ dep.loc = /** @type {DependencyLocation} */ (expression.loc);
182
190
  parser.state.module.addDependency(dep);
183
191
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
184
192
  return true;
@@ -193,7 +201,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
193
201
  settings.sourceOrder,
194
202
  settings.ids,
195
203
  settings.name,
196
- expr.range,
204
+ /** @type {Range} */ (expr.range),
197
205
  exportPresenceMode,
198
206
  settings.assertions,
199
207
  []
@@ -202,8 +210,11 @@ module.exports = class HarmonyImportDependencyParserPlugin {
202
210
  parser.destructuringAssignmentPropertiesFor(expr);
203
211
  dep.shorthand = parser.scope.inShorthand;
204
212
  dep.directImport = true;
205
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
206
- dep.loc = expr.loc;
213
+ dep.asiSafe = !parser.isAsiPosition(
214
+ /** @type {Range} */ (expr.range)[0]
215
+ );
216
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
217
+ dep.call = parser.scope.inTaggedTemplateTag;
207
218
  parser.state.module.addDependency(dep);
208
219
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
209
220
  return true;
@@ -212,7 +223,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
212
223
  .for(harmonySpecifierTag)
213
224
  .tap(
214
225
  "HarmonyImportDependencyParserPlugin",
215
- (expression, members, membersOptionals, memberRangeStarts) => {
226
+ (expression, members, membersOptionals, memberRanges) => {
216
227
  const settings = /** @type {HarmonySettings} */ (
217
228
  parser.currentTagData
218
229
  );
@@ -220,10 +231,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
220
231
  members,
221
232
  membersOptionals
222
233
  );
223
- const rangeStarts = memberRangeStarts.slice(
234
+ const ranges = memberRanges.slice(
224
235
  0,
225
- memberRangeStarts.length -
226
- (members.length - nonOptionalMembers.length)
236
+ memberRanges.length - (members.length - nonOptionalMembers.length)
227
237
  );
228
238
  const expr =
229
239
  nonOptionalMembers !== members
@@ -238,15 +248,17 @@ module.exports = class HarmonyImportDependencyParserPlugin {
238
248
  settings.sourceOrder,
239
249
  ids,
240
250
  settings.name,
241
- expr.range,
251
+ /** @type {Range} */ (expr.range),
242
252
  exportPresenceMode,
243
253
  settings.assertions,
244
- rangeStarts
254
+ ranges
245
255
  );
246
256
  dep.referencedPropertiesInDestructuring =
247
257
  parser.destructuringAssignmentPropertiesFor(expr);
248
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
249
- dep.loc = expr.loc;
258
+ dep.asiSafe = !parser.isAsiPosition(
259
+ /** @type {Range} */ (expr.range)[0]
260
+ );
261
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
250
262
  parser.state.module.addDependency(dep);
251
263
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
252
264
  return true;
@@ -256,7 +268,7 @@ module.exports = class HarmonyImportDependencyParserPlugin {
256
268
  .for(harmonySpecifierTag)
257
269
  .tap(
258
270
  "HarmonyImportDependencyParserPlugin",
259
- (expression, members, membersOptionals, memberRangeStarts) => {
271
+ (expression, members, membersOptionals, memberRanges) => {
260
272
  const { arguments: args, callee } = expression;
261
273
  const settings = /** @type {HarmonySettings} */ (
262
274
  parser.currentTagData
@@ -265,10 +277,9 @@ module.exports = class HarmonyImportDependencyParserPlugin {
265
277
  members,
266
278
  membersOptionals
267
279
  );
268
- const rangeStarts = memberRangeStarts.slice(
280
+ const ranges = memberRanges.slice(
269
281
  0,
270
- memberRangeStarts.length -
271
- (members.length - nonOptionalMembers.length)
282
+ memberRanges.length - (members.length - nonOptionalMembers.length)
272
283
  );
273
284
  const expr =
274
285
  nonOptionalMembers !== members
@@ -283,18 +294,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
283
294
  settings.sourceOrder,
284
295
  ids,
285
296
  settings.name,
286
- expr.range,
297
+ /** @type {Range} */ (expr.range),
287
298
  exportPresenceMode,
288
299
  settings.assertions,
289
- rangeStarts
300
+ ranges
290
301
  );
291
302
  dep.directImport = members.length === 0;
292
303
  dep.call = true;
293
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
304
+ dep.asiSafe = !parser.isAsiPosition(
305
+ /** @type {Range} */ (expr.range)[0]
306
+ );
294
307
  // only in case when we strictly follow the spec we need a special case here
295
308
  dep.namespaceObjectAsContext =
296
309
  members.length > 0 && this.strictThisContextOnImports;
297
- dep.loc = expr.loc;
310
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
298
311
  parser.state.module.addDependency(dep);
299
312
  if (args) parser.walkExpressions(args);
300
313
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
@@ -11,7 +11,6 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
11
11
  /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
14
- /** @typedef {import("../InitFragment")} InitFragment */
15
14
  /** @typedef {import("../Module")} Module */
16
15
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
16
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
@@ -74,7 +73,7 @@ HarmonyImportSideEffectDependency.Template = class HarmonyImportSideEffectDepend
74
73
  apply(dependency, source, templateContext) {
75
74
  const { moduleGraph, concatenationScope } = templateContext;
76
75
  if (concatenationScope) {
77
- const module = moduleGraph.getModule(dependency);
76
+ const module = /** @type {Module} */ (moduleGraph.getModule(dependency));
78
77
  if (concatenationScope.isModuleInScope(module)) {
79
78
  return;
80
79
  }
@@ -19,6 +19,8 @@ const HarmonyImportDependency = require("./HarmonyImportDependency");
19
19
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
20
20
  /** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
21
21
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
22
+ /** @typedef {import("../Module")} Module */
23
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
22
24
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
23
25
  /** @typedef {import("../ModuleGraphConnection")} ModuleGraphConnection */
24
26
  /** @typedef {import("../ModuleGraphConnection").ConnectionState} ConnectionState */
@@ -43,7 +45,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
43
45
  * @param {Range} range range
44
46
  * @param {TODO} exportPresenceMode export presence mode
45
47
  * @param {Assertions=} assertions assertions
46
- * @param {number[]=} idRangeStarts range starts for members of ids; the two arrays are right-aligned
48
+ * @param {Range[]=} idRanges ranges for members of ids; the two arrays are right-aligned
47
49
  */
48
50
  constructor(
49
51
  request,
@@ -53,22 +55,23 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
53
55
  range,
54
56
  exportPresenceMode,
55
57
  assertions,
56
- idRangeStarts // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
58
+ idRanges // TODO webpack 6 make this non-optional. It must always be set to properly trim ids.
57
59
  ) {
58
60
  super(request, sourceOrder, assertions);
59
61
  this.ids = ids;
60
62
  this.name = name;
61
63
  this.range = range;
62
- this.idRangeStarts = idRangeStarts;
64
+ this.idRanges = idRanges;
63
65
  this.exportPresenceMode = exportPresenceMode;
66
+ /** @type {boolean | undefined} */
64
67
  this.namespaceObjectAsContext = false;
65
68
  this.call = undefined;
66
69
  this.directImport = undefined;
67
70
  this.shorthand = undefined;
68
71
  this.asiSafe = undefined;
69
- /** @type {Set<string> | boolean} */
72
+ /** @type {Set<string> | boolean | undefined} */
70
73
  this.usedByExports = undefined;
71
- /** @type {Set<string>} */
74
+ /** @type {Set<string> | undefined} */
72
75
  this.referencedPropertiesInDestructuring = undefined;
73
76
  }
74
77
 
@@ -143,11 +146,14 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
143
146
  let namespaceObjectAsContext = this.namespaceObjectAsContext;
144
147
  if (ids[0] === "default") {
145
148
  const selfModule = moduleGraph.getParentModule(this);
146
- const importedModule = moduleGraph.getModule(this);
149
+ const importedModule =
150
+ /** @type {Module} */
151
+ (moduleGraph.getModule(this));
147
152
  switch (
148
153
  importedModule.getExportsType(
149
154
  moduleGraph,
150
- selfModule.buildMeta.strictHarmonyModule
155
+ /** @type {BuildMeta} */
156
+ (selfModule.buildMeta).strictHarmonyModule
151
157
  )
152
158
  ) {
153
159
  case "default-only":
@@ -201,7 +207,10 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
201
207
  _getEffectiveExportPresenceLevel(moduleGraph) {
202
208
  if (this.exportPresenceMode !== ExportPresenceModes.AUTO)
203
209
  return this.exportPresenceMode;
204
- return moduleGraph.getParentModule(this).buildMeta.strictHarmonyModule
210
+ const buildMeta = /** @type {BuildMeta} */ (
211
+ moduleGraph.getParentModule(this).buildMeta
212
+ );
213
+ return buildMeta.strictHarmonyModule
205
214
  ? ExportPresenceModes.ERROR
206
215
  : ExportPresenceModes.WARN;
207
216
  }
@@ -209,7 +218,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
209
218
  /**
210
219
  * Returns warnings
211
220
  * @param {ModuleGraph} moduleGraph module graph
212
- * @returns {WebpackError[]} warnings
221
+ * @returns {WebpackError[] | null | undefined} warnings
213
222
  */
214
223
  getWarnings(moduleGraph) {
215
224
  const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
@@ -222,7 +231,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
222
231
  /**
223
232
  * Returns errors
224
233
  * @param {ModuleGraph} moduleGraph module graph
225
- * @returns {WebpackError[]} errors
234
+ * @returns {WebpackError[] | null | undefined} errors
226
235
  */
227
236
  getErrors(moduleGraph) {
228
237
  const exportsPresence = this._getEffectiveExportPresenceLevel(moduleGraph);
@@ -261,7 +270,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
261
270
  write(this.ids);
262
271
  write(this.name);
263
272
  write(this.range);
264
- write(this.idRangeStarts);
273
+ write(this.idRanges);
265
274
  write(this.exportPresenceMode);
266
275
  write(this.namespaceObjectAsContext);
267
276
  write(this.call);
@@ -281,7 +290,7 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
281
290
  this.ids = read();
282
291
  this.name = read();
283
292
  this.range = read();
284
- this.idRangeStarts = read();
293
+ this.idRanges = read();
285
294
  this.exportPresenceMode = read();
286
295
  this.namespaceObjectAsContext = read();
287
296
  this.call = read();
@@ -320,15 +329,15 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
320
329
 
321
330
  let [rangeStart, rangeEnd] = dep.range;
322
331
  if (trimmedIds.length !== ids.length) {
323
- // The array returned from dep.idRangeStarts is right-aligned with the array returned from dep.getIds.
332
+ // The array returned from dep.idRanges is right-aligned with the array returned from dep.getIds.
324
333
  // Meaning, the two arrays may not always have the same number of elements, but the last element of
325
- // dep.idRangeStarts corresponds to [the starting range position of] the last element of dep.getIds.
326
- // Use this to find the correct range end position based on the number of ids that were trimmed.
334
+ // dep.idRanges corresponds to [the expression fragment to the left of] the last element of dep.getIds.
335
+ // Use this to find the correct replacement range based on the number of ids that were trimmed.
327
336
  const idx =
328
- dep.idRangeStarts === undefined
337
+ dep.idRanges === undefined
329
338
  ? -1 /* trigger failure case below */
330
- : dep.idRangeStarts.length + (trimmedIds.length - ids.length);
331
- if (idx < 0 || idx >= dep.idRangeStarts.length) {
339
+ : dep.idRanges.length + (trimmedIds.length - ids.length);
340
+ if (idx < 0 || idx >= dep.idRanges.length) {
332
341
  // cspell:ignore minifiers
333
342
  // Should not happen but we can't throw an error here because of backward compatibility with
334
343
  // external plugins in wp5. Instead, we just disable trimming for now. This may break some minifiers.
@@ -336,7 +345,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
336
345
  // TODO webpack 6 remove the "trimmedIds = ids" above and uncomment the following line instead.
337
346
  // throw new Error("Missing range starts data for id replacement trimming.");
338
347
  } else {
339
- rangeEnd = dep.idRangeStarts[idx];
348
+ [rangeStart, rangeEnd] = dep.idRanges[idx];
340
349
  }
341
350
  }
342
351
 
@@ -362,9 +371,10 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
362
371
  * @returns {string[]} generated code
363
372
  */
364
373
  _trimIdsToThoseImported(ids, moduleGraph, dependency) {
374
+ /** @type {string[]} */
365
375
  let trimmedIds = [];
366
376
  const exportsInfo = moduleGraph.getExportsInfo(
367
- moduleGraph.getModule(dependency)
377
+ /** @type {Module} */ (moduleGraph.getModule(dependency))
368
378
  );
369
379
  let currentExportsInfo = /** @type {ExportsInfo=} */ exportsInfo;
370
380
  for (let i = 0; i < ids.length; i++) {
@@ -437,7 +447,7 @@ HarmonyImportSpecifierDependency.Template = class HarmonyImportSpecifierDependen
437
447
 
438
448
  exportExpr = runtimeTemplate.exportFromImport({
439
449
  moduleGraph,
440
- module: moduleGraph.getModule(dep),
450
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
441
451
  request: dep.request,
442
452
  exportName: ids,
443
453
  originModule: module,
@@ -8,17 +8,29 @@
8
8
  const ConstDependency = require("./ConstDependency");
9
9
  const HarmonyExports = require("./HarmonyExports");
10
10
 
11
+ /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
12
+ /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
13
+ /** @typedef {import("../javascript/JavascriptParser").Range} Range */
14
+
11
15
  class HarmonyTopLevelThisParserPlugin {
16
+ /**
17
+ * @param {JavascriptParser} parser the parser
18
+ * @returns {void}
19
+ */
12
20
  apply(parser) {
13
21
  parser.hooks.expression
14
22
  .for("this")
15
23
  .tap("HarmonyTopLevelThisParserPlugin", node => {
16
24
  if (!parser.scope.topLevelScope) return;
17
25
  if (HarmonyExports.isEnabled(parser.state)) {
18
- const dep = new ConstDependency("undefined", node.range, null);
19
- dep.loc = node.loc;
26
+ const dep = new ConstDependency(
27
+ "undefined",
28
+ /** @type {Range} */ (node.range),
29
+ null
30
+ );
31
+ dep.loc = /** @type {DependencyLocation} */ (node.loc);
20
32
  parser.state.module.addPresentationalDependency(dep);
21
- return this;
33
+ return true;
22
34
  }
23
35
  });
24
36
  }
@@ -13,6 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
13
13
  /** @typedef {import("../AsyncDependenciesBlock")} AsyncDependenciesBlock */
14
14
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
15
15
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
16
+ /** @typedef {import("../Module")} Module */
17
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
16
18
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
17
19
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
18
20
  /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
@@ -23,7 +25,7 @@ class ImportDependency extends ModuleDependency {
23
25
  /**
24
26
  * @param {string} request the request
25
27
  * @param {Range} range expression range
26
- * @param {string[][]=} referencedExports list of referenced exports
28
+ * @param {(string[][] | null)=} referencedExports list of referenced exports
27
29
  */
28
30
  constructor(request, range, referencedExports) {
29
31
  super(request);
@@ -96,9 +98,9 @@ ImportDependency.Template = class ImportDependencyTemplate extends (
96
98
  const content = runtimeTemplate.moduleNamespacePromise({
97
99
  chunkGraph,
98
100
  block: block,
99
- module: moduleGraph.getModule(dep),
101
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
100
102
  request: dep.request,
101
- strict: module.buildMeta.strictHarmonyModule,
103
+ strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
102
104
  message: "import()",
103
105
  runtimeRequirements
104
106
  });