webpack 5.86.0 → 5.88.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.

Potentially problematic release.


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

Files changed (207) hide show
  1. package/README.md +5 -2
  2. package/lib/APIPlugin.js +1 -1
  3. package/lib/AsyncDependenciesBlock.js +3 -3
  4. package/lib/CaseSensitiveModulesWarning.js +3 -1
  5. package/lib/ChunkGraph.js +4 -4
  6. package/lib/ChunkGroup.js +10 -3
  7. package/lib/CompatibilityPlugin.js +50 -30
  8. package/lib/Compilation.js +2 -1
  9. package/lib/Compiler.js +3 -1
  10. package/lib/ConcatenationScope.js +2 -2
  11. package/lib/ConditionalInitFragment.js +11 -1
  12. package/lib/ConstPlugin.js +57 -29
  13. package/lib/ContextModule.js +4 -1
  14. package/lib/ContextReplacementPlugin.js +13 -0
  15. package/lib/DelegatedModule.js +15 -3
  16. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  17. package/lib/Dependency.js +11 -5
  18. package/lib/DllEntryPlugin.js +11 -1
  19. package/lib/DllReferencePlugin.js +13 -1
  20. package/lib/Entrypoint.js +1 -1
  21. package/lib/ErrorHelpers.js +1 -0
  22. package/lib/EvalSourceMapDevToolPlugin.js +4 -0
  23. package/lib/ExportsInfo.js +17 -3
  24. package/lib/ExportsInfoApiPlugin.js +14 -5
  25. package/lib/ExternalModule.js +5 -0
  26. package/lib/FlagAllModulesAsUsedPlugin.js +6 -1
  27. package/lib/FlagDependencyUsagePlugin.js +3 -1
  28. package/lib/FlagEntryExportAsUsedPlugin.js +4 -0
  29. package/lib/HotModuleReplacementPlugin.js +8 -0
  30. package/lib/InitFragment.js +28 -5
  31. package/lib/JavascriptMetaInfoPlugin.js +11 -6
  32. package/lib/LibManifestPlugin.js +20 -4
  33. package/lib/Module.js +7 -2
  34. package/lib/ModuleDependencyError.js +4 -2
  35. package/lib/ModuleDependencyWarning.js +4 -2
  36. package/lib/ModuleGraph.js +31 -24
  37. package/lib/ModuleGraphConnection.js +19 -6
  38. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  39. package/lib/ModuleNotFoundError.js +5 -2
  40. package/lib/ModuleProfile.js +1 -0
  41. package/lib/ModuleRestoreError.js +2 -0
  42. package/lib/ModuleStoreError.js +2 -1
  43. package/lib/ModuleTypeConstants.js +7 -0
  44. package/lib/MultiWatching.js +4 -0
  45. package/lib/NodeStuffPlugin.js +32 -6
  46. package/lib/ProvidePlugin.js +13 -4
  47. package/lib/RawModule.js +3 -1
  48. package/lib/RequireJsStuffPlugin.js +7 -0
  49. package/lib/RuntimeGlobals.js +5 -0
  50. package/lib/RuntimeModule.js +3 -3
  51. package/lib/RuntimePlugin.js +6 -3
  52. package/lib/RuntimeTemplate.js +22 -4
  53. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  54. package/lib/SourceMapDevToolPlugin.js +7 -2
  55. package/lib/UseStrictPlugin.js +10 -3
  56. package/lib/WebpackError.js +6 -5
  57. package/lib/WebpackIsIncludedPlugin.js +6 -4
  58. package/lib/WebpackOptionsApply.js +1 -1
  59. package/lib/WebpackOptionsDefaulter.js +10 -3
  60. package/lib/asset/AssetGenerator.js +2 -1
  61. package/lib/asset/AssetParser.js +11 -6
  62. package/lib/asset/AssetSourceParser.js +8 -3
  63. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  64. package/lib/cache/IdleFileCachePlugin.js +2 -1
  65. package/lib/cache/PackFileCacheStrategy.js +35 -14
  66. package/lib/config/browserslistTargetHandler.js +7 -7
  67. package/lib/config/defaults.js +43 -26
  68. package/lib/container/RemoteRuntimeModule.js +1 -1
  69. package/lib/css/CssLoadingRuntimeModule.js +30 -13
  70. package/lib/css/CssModulesPlugin.js +5 -2
  71. package/lib/css/CssParser.js +22 -0
  72. package/lib/dependencies/AMDDefineDependency.js +34 -4
  73. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +5 -0
  74. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  75. package/lib/dependencies/CommonJsExportsParserPlugin.js +14 -4
  76. package/lib/dependencies/CommonJsImportsParserPlugin.js +169 -59
  77. package/lib/dependencies/CommonJsPlugin.js +13 -8
  78. package/lib/dependencies/CommonJsRequireContextDependency.js +2 -2
  79. package/lib/dependencies/ConstDependency.js +2 -2
  80. package/lib/dependencies/ContextDependency.js +7 -2
  81. package/lib/dependencies/CssImportDependency.js +1 -1
  82. package/lib/dependencies/CssLocalIdentifierDependency.js +5 -0
  83. package/lib/dependencies/CssUrlDependency.js +3 -3
  84. package/lib/dependencies/DllEntryDependency.js +5 -0
  85. package/lib/dependencies/DynamicExports.js +10 -6
  86. package/lib/dependencies/ExportsInfoDependency.js +14 -4
  87. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  88. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -1
  89. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +12 -5
  90. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +2 -0
  91. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +4 -4
  92. package/lib/dependencies/HarmonyExports.js +9 -5
  93. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +32 -17
  94. package/lib/dependencies/HarmonyImportSideEffectDependency.js +1 -2
  95. package/lib/dependencies/HarmonyImportSpecifierDependency.js +19 -9
  96. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  97. package/lib/dependencies/ImportDependency.js +5 -3
  98. package/lib/dependencies/ImportEagerDependency.js +5 -3
  99. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +19 -0
  100. package/lib/dependencies/ImportMetaPlugin.js +31 -15
  101. package/lib/dependencies/ImportParserPlugin.js +62 -25
  102. package/lib/dependencies/ImportWeakDependency.js +5 -3
  103. package/lib/dependencies/ModuleDependency.js +1 -1
  104. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  105. package/lib/dependencies/ProvidedDependency.js +4 -1
  106. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  107. package/lib/dependencies/RequireEnsureDependenciesBlock.js +5 -2
  108. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  109. package/lib/dependencies/RequireHeaderDependency.js +4 -0
  110. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +26 -5
  111. package/lib/dependencies/RequireResolveHeaderDependency.js +9 -0
  112. package/lib/dependencies/SystemPlugin.js +17 -5
  113. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  114. package/lib/dependencies/URLDependency.js +2 -2
  115. package/lib/dependencies/URLPlugin.js +9 -4
  116. package/lib/dependencies/WebAssemblyImportDependency.js +1 -1
  117. package/lib/dependencies/WorkerPlugin.js +59 -22
  118. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  119. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +1 -1
  120. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  121. package/lib/ids/HashedModuleIdsPlugin.js +1 -1
  122. package/lib/ids/SyncModuleIdsPlugin.js +1 -0
  123. package/lib/javascript/BasicEvaluatedExpression.js +23 -15
  124. package/lib/javascript/CommonJsChunkFormatPlugin.js +6 -2
  125. package/lib/javascript/JavascriptParser.js +135 -63
  126. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  127. package/lib/logging/runtime.js +1 -1
  128. package/lib/logging/truncateArgs.js +4 -0
  129. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -6
  130. package/lib/node/RequireChunkLoadingRuntimeModule.js +10 -6
  131. package/lib/optimize/InnerGraph.js +1 -1
  132. package/lib/optimize/InnerGraphPlugin.js +2 -1
  133. package/lib/performance/SizeLimitsPlugin.js +7 -4
  134. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  135. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  136. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  137. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  138. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  139. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  140. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  141. package/lib/rules/RuleSetCompiler.js +3 -3
  142. package/lib/rules/UseEffectRulePlugin.js +6 -4
  143. package/lib/runtime/AsyncModuleRuntimeModule.js +8 -5
  144. package/lib/runtime/AutoPublicPathRuntimeModule.js +4 -2
  145. package/lib/runtime/BaseUriRuntimeModule.js +3 -3
  146. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  147. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  148. package/lib/runtime/CompatRuntimeModule.js +7 -2
  149. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  150. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  151. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  152. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  153. package/lib/runtime/EnsureChunkRuntimeModule.js +15 -4
  154. package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -10
  155. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  156. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  157. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +4 -2
  158. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  159. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  160. package/lib/runtime/LoadScriptRuntimeModule.js +64 -48
  161. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  162. package/lib/runtime/NonceRuntimeModule.js +1 -1
  163. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  164. package/lib/runtime/PublicPathRuntimeModule.js +4 -2
  165. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  166. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  167. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -3
  168. package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -2
  169. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  170. package/lib/serialization/ObjectMiddleware.js +6 -3
  171. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  172. package/lib/sharing/ConsumeSharedRuntimeModule.js +14 -5
  173. package/lib/sharing/ProvideSharedDependency.js +11 -0
  174. package/lib/sharing/ProvideSharedModule.js +4 -0
  175. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  176. package/lib/sharing/ShareRuntimeModule.js +12 -5
  177. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  178. package/lib/sharing/utils.js +32 -5
  179. package/lib/util/AsyncQueue.js +4 -2
  180. package/lib/util/ParallelismFactorCalculator.js +10 -0
  181. package/lib/util/Semaphore.js +1 -1
  182. package/lib/util/createHash.js +30 -9
  183. package/lib/util/deprecation.js +10 -3
  184. package/lib/util/deterministicGrouping.js +50 -11
  185. package/lib/util/findGraphRoots.js +4 -2
  186. package/lib/util/memoize.js +3 -3
  187. package/lib/util/processAsyncTree.js +7 -1
  188. package/lib/util/registerExternalSerializer.js +1 -1
  189. package/lib/util/runtime.js +14 -1
  190. package/lib/util/smartGrouping.js +1 -1
  191. package/lib/validateSchema.js +6 -2
  192. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +6 -2
  193. package/lib/wasm-async/AsyncWebAssemblyParser.js +7 -3
  194. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +14 -7
  195. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -1
  196. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  197. package/lib/wasm-sync/WebAssemblyParser.js +6 -2
  198. package/lib/web/JsonpChunkLoadingRuntimeModule.js +14 -4
  199. package/lib/webpack.js +11 -2
  200. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -16
  201. package/module.d.ts +1 -0
  202. package/package.json +5 -4
  203. package/schemas/WebpackOptions.check.js +1 -1
  204. package/schemas/WebpackOptions.json +39 -5
  205. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  206. package/schemas/plugins/css/CssParserOptions.json +1 -1
  207. package/types.d.ts +519 -222
@@ -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;
@@ -237,15 +248,17 @@ module.exports = class HarmonyImportDependencyParserPlugin {
237
248
  settings.sourceOrder,
238
249
  ids,
239
250
  settings.name,
240
- expr.range,
251
+ /** @type {Range} */ (expr.range),
241
252
  exportPresenceMode,
242
253
  settings.assertions,
243
254
  ranges
244
255
  );
245
256
  dep.referencedPropertiesInDestructuring =
246
257
  parser.destructuringAssignmentPropertiesFor(expr);
247
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
248
- dep.loc = expr.loc;
258
+ dep.asiSafe = !parser.isAsiPosition(
259
+ /** @type {Range} */ (expr.range)[0]
260
+ );
261
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
249
262
  parser.state.module.addDependency(dep);
250
263
  InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
251
264
  return true;
@@ -281,18 +294,20 @@ module.exports = class HarmonyImportDependencyParserPlugin {
281
294
  settings.sourceOrder,
282
295
  ids,
283
296
  settings.name,
284
- expr.range,
297
+ /** @type {Range} */ (expr.range),
285
298
  exportPresenceMode,
286
299
  settings.assertions,
287
300
  ranges
288
301
  );
289
302
  dep.directImport = members.length === 0;
290
303
  dep.call = true;
291
- dep.asiSafe = !parser.isAsiPosition(expr.range[0]);
304
+ dep.asiSafe = !parser.isAsiPosition(
305
+ /** @type {Range} */ (expr.range)[0]
306
+ );
292
307
  // only in case when we strictly follow the spec we need a special case here
293
308
  dep.namespaceObjectAsContext =
294
309
  members.length > 0 && this.strictThisContextOnImports;
295
- dep.loc = expr.loc;
310
+ dep.loc = /** @type {DependencyLocation} */ (expr.loc);
296
311
  parser.state.module.addDependency(dep);
297
312
  if (args) parser.walkExpressions(args);
298
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 */
@@ -61,14 +63,15 @@ class HarmonyImportSpecifierDependency extends HarmonyImportDependency {
61
63
  this.range = range;
62
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);
@@ -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
  });
@@ -12,6 +12,8 @@ const ImportDependency = require("./ImportDependency");
12
12
  /** @typedef {import("../Dependency")} Dependency */
13
13
  /** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
14
14
  /** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
15
+ /** @typedef {import("../Module")} Module */
16
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
15
17
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
16
18
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
17
19
 
@@ -19,7 +21,7 @@ class ImportEagerDependency extends ImportDependency {
19
21
  /**
20
22
  * @param {string} request the request
21
23
  * @param {Range} range expression range
22
- * @param {string[][]=} referencedExports list of referenced exports
24
+ * @param {(string[][] | null)=} referencedExports list of referenced exports
23
25
  */
24
26
  constructor(request, range, referencedExports) {
25
27
  super(request, range, referencedExports);
@@ -56,9 +58,9 @@ ImportEagerDependency.Template = class ImportEagerDependencyTemplate extends (
56
58
  const dep = /** @type {ImportEagerDependency} */ (dependency);
57
59
  const content = runtimeTemplate.moduleNamespacePromise({
58
60
  chunkGraph,
59
- module: moduleGraph.getModule(dep),
61
+ module: /** @type {Module} */ (moduleGraph.getModule(dep)),
60
62
  request: dep.request,
61
- strict: module.buildMeta.strictHarmonyModule,
63
+ strict: /** @type {BuildMeta} */ (module.buildMeta).strictHarmonyModule,
62
64
  message: "import() eager",
63
65
  runtimeRequirements
64
66
  });
@@ -219,6 +219,25 @@ module.exports = class ImportMetaContextDependencyParserPlugin {
219
219
  }
220
220
  break;
221
221
  }
222
+ case "fetchPriority": {
223
+ const expr = parser.evaluateExpression(
224
+ /** @type {Expression} */ (prop.value)
225
+ );
226
+ if (
227
+ expr.isString() &&
228
+ ["high", "low", "auto"].includes(expr.string)
229
+ ) {
230
+ groupOptions.fetchPriority =
231
+ /** @type {RawChunkGroupOptions["fetchPriority"]} */ (
232
+ expr.string
233
+ );
234
+ } else {
235
+ errors.push(
236
+ createPropertyParseError(prop, '"high"|"low"|"auto"')
237
+ );
238
+ }
239
+ break;
240
+ }
222
241
  case "recursive": {
223
242
  const recursiveExpr = parser.evaluateExpression(
224
243
  /** @type {Expression} */ (prop.value)