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
@@ -9,20 +9,26 @@ const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
9
9
  const ConstDependency = require("../dependencies/ConstDependency");
10
10
  const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
11
11
 
12
- /** @typedef {import("estree").Expression} ExpressionNode */
12
+ /** @typedef {import("estree").Expression} Expression */
13
13
  /** @typedef {import("estree").Node} Node */
14
+ /** @typedef {import("estree").SourceLocation} SourceLocation */
14
15
  /** @typedef {import("./JavascriptParser")} JavascriptParser */
16
+ /** @typedef {import("./JavascriptParser").Range} Range */
15
17
 
16
18
  /**
17
19
  * @param {JavascriptParser} parser the parser
18
20
  * @param {string} value the const value
19
21
  * @param {string[]=} runtimeRequirements runtime requirements
20
- * @returns {function(ExpressionNode): true} plugin function
22
+ * @returns {function(Expression): true} plugin function
21
23
  */
22
24
  exports.toConstantDependency = (parser, value, runtimeRequirements) => {
23
25
  return function constDependency(expr) {
24
- const dep = new ConstDependency(value, expr.range, runtimeRequirements);
25
- dep.loc = expr.loc;
26
+ const dep = new ConstDependency(
27
+ value,
28
+ /** @type {Range} */ (expr.range),
29
+ runtimeRequirements
30
+ );
31
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
26
32
  parser.state.module.addPresentationalDependency(dep);
27
33
  return true;
28
34
  };
@@ -30,33 +36,37 @@ exports.toConstantDependency = (parser, value, runtimeRequirements) => {
30
36
 
31
37
  /**
32
38
  * @param {string} value the string value
33
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} plugin function
39
+ * @returns {function(Expression): BasicEvaluatedExpression} plugin function
34
40
  */
35
41
  exports.evaluateToString = value => {
36
42
  return function stringExpression(expr) {
37
- return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
43
+ return new BasicEvaluatedExpression()
44
+ .setString(value)
45
+ .setRange(/** @type {Range} */ (expr.range));
38
46
  };
39
47
  };
40
48
 
41
49
  /**
42
50
  * @param {number} value the number value
43
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} plugin function
51
+ * @returns {function(Expression): BasicEvaluatedExpression} plugin function
44
52
  */
45
53
  exports.evaluateToNumber = value => {
46
54
  return function stringExpression(expr) {
47
- return new BasicEvaluatedExpression().setNumber(value).setRange(expr.range);
55
+ return new BasicEvaluatedExpression()
56
+ .setNumber(value)
57
+ .setRange(/** @type {Range} */ (expr.range));
48
58
  };
49
59
  };
50
60
 
51
61
  /**
52
62
  * @param {boolean} value the boolean value
53
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} plugin function
63
+ * @returns {function(Expression): BasicEvaluatedExpression} plugin function
54
64
  */
55
65
  exports.evaluateToBoolean = value => {
56
66
  return function booleanExpression(expr) {
57
67
  return new BasicEvaluatedExpression()
58
68
  .setBoolean(value)
59
- .setRange(expr.range);
69
+ .setRange(/** @type {Range} */ (expr.range));
60
70
  };
61
71
  };
62
72
 
@@ -65,14 +75,14 @@ exports.evaluateToBoolean = value => {
65
75
  * @param {string} rootInfo rootInfo
66
76
  * @param {function(): string[]} getMembers getMembers
67
77
  * @param {boolean|null=} truthy is truthy, null if nullish
68
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} callback
78
+ * @returns {function(Expression): BasicEvaluatedExpression} callback
69
79
  */
70
80
  exports.evaluateToIdentifier = (identifier, rootInfo, getMembers, truthy) => {
71
81
  return function identifierExpression(expr) {
72
82
  let evaluatedExpression = new BasicEvaluatedExpression()
73
83
  .setIdentifier(identifier, rootInfo, getMembers)
74
84
  .setSideEffects(false)
75
- .setRange(expr.range);
85
+ .setRange(/** @type {Range} */ (expr.range));
76
86
  switch (truthy) {
77
87
  case true:
78
88
  evaluatedExpression.setTruthy();
@@ -89,14 +99,26 @@ exports.evaluateToIdentifier = (identifier, rootInfo, getMembers, truthy) => {
89
99
  };
90
100
  };
91
101
 
102
+ /**
103
+ * @param {JavascriptParser} parser the parser
104
+ * @param {string} message the message
105
+ * @returns {function(Expression): boolean | undefined} callback to handle unsupported expression
106
+ */
92
107
  exports.expressionIsUnsupported = (parser, message) => {
93
108
  return function unsupportedExpression(expr) {
94
- const dep = new ConstDependency("(void 0)", expr.range, null);
95
- dep.loc = expr.loc;
109
+ const dep = new ConstDependency(
110
+ "(void 0)",
111
+ /** @type {Range} */ (expr.range),
112
+ null
113
+ );
114
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
96
115
  parser.state.module.addPresentationalDependency(dep);
97
116
  if (!parser.state.module) return;
98
117
  parser.state.module.addWarning(
99
- new UnsupportedFeatureWarning(message, expr.loc)
118
+ new UnsupportedFeatureWarning(
119
+ message,
120
+ /** @type {SourceLocation} */ (expr.loc)
121
+ )
100
122
  );
101
123
  return true;
102
124
  };
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const SyncBailHook = require("tapable/lib/SyncBailHook");
8
+ const { SyncBailHook } = require("tapable");
9
9
  const { Logger } = require("./Logger");
10
10
  const createConsoleLogger = require("./createConsoleLogger");
11
11
 
@@ -5,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /**
9
+ * @param {Array<number>} array array of numbers
10
+ * @returns {number} sum of all numbers in array
11
+ */
8
12
  const arraySum = array => {
9
13
  let sum = 0;
10
14
  for (const item of array) sum += item;
@@ -16,6 +16,8 @@ const compileBooleanMatcher = require("../util/compileBooleanMatcher");
16
16
  const { getUndoPath } = require("../util/identifier");
17
17
 
18
18
  /** @typedef {import("../Chunk")} Chunk */
19
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
+ /** @typedef {import("../Compilation")} Compilation */
19
21
 
20
22
  class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
21
23
  /**
@@ -46,11 +48,13 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
46
48
  }
47
49
 
48
50
  /**
49
- * @returns {string} runtime code
51
+ * @returns {string | null} runtime code
50
52
  */
51
53
  generate() {
52
- const { chunkGraph, chunk } = this;
53
- const { runtimeTemplate } = this.compilation;
54
+ const compilation = /** @type {Compilation} */ (this.compilation);
55
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
56
+ const chunk = /** @type {Chunk} */ (this.chunk);
57
+ const { runtimeTemplate } = compilation;
54
58
  const fn = RuntimeGlobals.ensureChunkHandlers;
55
59
  const withBaseURI = this.runtimeRequirements.has(RuntimeGlobals.baseURI);
56
60
  const withExternalInstallChunk = this.runtimeRequirements.has(
@@ -72,8 +76,8 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
72
76
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
73
77
  const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
74
78
 
75
- const outputName = this.compilation.getPath(
76
- getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
79
+ const outputName = compilation.getPath(
80
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
77
81
  {
78
82
  chunk,
79
83
  contentHashType: "javascript"
@@ -81,7 +85,7 @@ class ReadFileChunkLoadingRuntimeModule extends RuntimeModule {
81
85
  );
82
86
  const rootOutputDir = getUndoPath(
83
87
  outputName,
84
- /** @type {string} */ (this.compilation.outputOptions.path),
88
+ /** @type {string} */ (compilation.outputOptions.path),
85
89
  false
86
90
  );
87
91
 
@@ -16,6 +16,8 @@ const compileBooleanMatcher = require("../util/compileBooleanMatcher");
16
16
  const { getUndoPath } = require("../util/identifier");
17
17
 
18
18
  /** @typedef {import("../Chunk")} Chunk */
19
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
20
+ /** @typedef {import("../Compilation")} Compilation */
19
21
 
20
22
  class RequireChunkLoadingRuntimeModule extends RuntimeModule {
21
23
  /**
@@ -46,11 +48,13 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
46
48
  }
47
49
 
48
50
  /**
49
- * @returns {string} runtime code
51
+ * @returns {string | null} runtime code
50
52
  */
51
53
  generate() {
52
- const { chunkGraph, chunk } = this;
53
- const { runtimeTemplate } = this.compilation;
54
+ const compilation = /** @type {Compilation} */ (this.compilation);
55
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
56
+ const chunk = /** @type {Chunk} */ (this.chunk);
57
+ const { runtimeTemplate } = compilation;
54
58
  const fn = RuntimeGlobals.ensureChunkHandlers;
55
59
  const withBaseURI = this.runtimeRequirements.has(RuntimeGlobals.baseURI);
56
60
  const withExternalInstallChunk = this.runtimeRequirements.has(
@@ -72,8 +76,8 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
72
76
  const hasJsMatcher = compileBooleanMatcher(conditionMap);
73
77
  const initialChunkIds = getInitialChunkIds(chunk, chunkGraph, chunkHasJs);
74
78
 
75
- const outputName = this.compilation.getPath(
76
- getChunkFilenameTemplate(chunk, this.compilation.outputOptions),
79
+ const outputName = compilation.getPath(
80
+ getChunkFilenameTemplate(chunk, compilation.outputOptions),
77
81
  {
78
82
  chunk,
79
83
  contentHashType: "javascript"
@@ -81,7 +85,7 @@ class RequireChunkLoadingRuntimeModule extends RuntimeModule {
81
85
  );
82
86
  const rootOutputDir = getUndoPath(
83
87
  outputName,
84
- /** @type {string} */ (this.compilation.outputOptions.path),
88
+ /** @type {string} */ (compilation.outputOptions.path),
85
89
  true
86
90
  );
87
91
 
@@ -309,7 +309,7 @@ exports.isDependencyUsedByExports = (
309
309
 
310
310
  /**
311
311
  * @param {Dependency} dependency the dependency
312
- * @param {Set<string> | boolean} usedByExports usedByExports info
312
+ * @param {Set<string> | boolean | undefined} usedByExports usedByExports info
313
313
  * @param {ModuleGraph} moduleGraph moduleGraph
314
314
  * @returns {null | false | function(ModuleGraphConnection, RuntimeSpec): ConnectionState} function to determine if the connection is active
315
315
  */
@@ -16,6 +16,7 @@ const InnerGraph = require("./InnerGraph");
16
16
  /** @typedef {import("estree").ClassExpression} ClassExpressionNode */
17
17
  /** @typedef {import("estree").Node} Node */
18
18
  /** @typedef {import("estree").VariableDeclarator} VariableDeclaratorNode */
19
+ /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
19
20
  /** @typedef {import("../Compiler")} Compiler */
20
21
  /** @typedef {import("../Dependency")} Dependency */
21
22
  /** @typedef {import("../dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
@@ -46,7 +47,7 @@ class InnerGraphPlugin {
46
47
 
47
48
  /**
48
49
  * @param {JavascriptParser} parser the parser
49
- * @param {Object} parserOptions options
50
+ * @param {JavascriptParserOptions} parserOptions options
50
51
  * @returns {void}
51
52
  */
52
53
  const handler = (parser, parserOptions) => {
@@ -95,7 +95,7 @@ module.exports = class SizeLimitsPlugin {
95
95
  }
96
96
 
97
97
  const size = info.size || source.size();
98
- if (size > assetSizeLimit) {
98
+ if (size > /** @type {number} */ (assetSizeLimit)) {
99
99
  assetsOverSizeLimit.push({
100
100
  name,
101
101
  size
@@ -114,7 +114,7 @@ module.exports = class SizeLimitsPlugin {
114
114
  for (const [name, entry] of compilation.entrypoints) {
115
115
  const size = getEntrypointSize(entry);
116
116
 
117
- if (size > entrypointSizeLimit) {
117
+ if (size > /** @type {number} */ (entrypointSizeLimit)) {
118
118
  entrypointsOverLimit.push({
119
119
  name: name,
120
120
  size: size,
@@ -131,14 +131,17 @@ module.exports = class SizeLimitsPlugin {
131
131
  // if !1, then 2, if !2 return
132
132
  if (assetsOverSizeLimit.length > 0) {
133
133
  warnings.push(
134
- new AssetsOverSizeLimitWarning(assetsOverSizeLimit, assetSizeLimit)
134
+ new AssetsOverSizeLimitWarning(
135
+ assetsOverSizeLimit,
136
+ /** @type {number} */ (assetSizeLimit)
137
+ )
135
138
  );
136
139
  }
137
140
  if (entrypointsOverLimit.length > 0) {
138
141
  warnings.push(
139
142
  new EntrypointsOverSizeLimitWarning(
140
143
  entrypointsOverLimit,
141
- entrypointSizeLimit
144
+ /** @type {number} */ (entrypointSizeLimit)
142
145
  )
143
146
  );
144
147
  }
@@ -7,6 +7,7 @@
7
7
  const RuntimeModule = require("../RuntimeModule");
8
8
  const Template = require("../Template");
9
9
 
10
+ /** @typedef {import("../Compilation")} Compilation */
10
11
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
11
12
 
12
13
  class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule {
@@ -23,11 +24,12 @@ class ChunkPrefetchFunctionRuntimeModule extends RuntimeModule {
23
24
  }
24
25
 
25
26
  /**
26
- * @returns {string} runtime code
27
+ * @returns {string | null} runtime code
27
28
  */
28
29
  generate() {
29
30
  const { runtimeFunction, runtimeHandlers } = this;
30
- const { runtimeTemplate } = this.compilation;
31
+ const compilation = /** @type {Compilation} */ (this.compilation);
32
+ const { runtimeTemplate } = compilation;
31
33
  return Template.asString([
32
34
  `${runtimeHandlers} = {};`,
33
35
  `${runtimeFunction} = ${runtimeTemplate.basicFunction("chunkId", [
@@ -11,6 +11,8 @@ const ChunkPrefetchStartupRuntimeModule = require("./ChunkPrefetchStartupRuntime
11
11
  const ChunkPrefetchTriggerRuntimeModule = require("./ChunkPrefetchTriggerRuntimeModule");
12
12
  const ChunkPreloadTriggerRuntimeModule = require("./ChunkPreloadTriggerRuntimeModule");
13
13
 
14
+ /** @typedef {import("../Chunk")} Chunk */
15
+ /** @typedef {import("../ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
14
16
  /** @typedef {import("../Compiler")} Compiler */
15
17
 
16
18
  class ChunkPrefetchPreloadPlugin {
@@ -43,7 +45,7 @@ class ChunkPrefetchPreloadPlugin {
43
45
  compilation.hooks.additionalTreeRuntimeRequirements.tap(
44
46
  "ChunkPrefetchPreloadPlugin",
45
47
  (chunk, set, { chunkGraph }) => {
46
- const chunkMap = chunk.getChildIdsByOrdersMap(chunkGraph, false);
48
+ const chunkMap = chunk.getChildIdsByOrdersMap(chunkGraph);
47
49
 
48
50
  if (chunkMap.prefetch) {
49
51
  set.add(RuntimeGlobals.prefetchChunk);
@@ -9,6 +9,7 @@ const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
11
  /** @typedef {import("../Chunk")} Chunk */
12
+ /** @typedef {import("../Compilation")} Compilation */
12
13
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
13
14
 
14
15
  class ChunkPrefetchStartupRuntimeModule extends RuntimeModule {
@@ -21,11 +22,13 @@ class ChunkPrefetchStartupRuntimeModule extends RuntimeModule {
21
22
  }
22
23
 
23
24
  /**
24
- * @returns {string} runtime code
25
+ * @returns {string | null} runtime code
25
26
  */
26
27
  generate() {
27
- const { startupChunks, chunk } = this;
28
- const { runtimeTemplate } = this.compilation;
28
+ const { startupChunks } = this;
29
+ const compilation = /** @type {Compilation} */ (this.compilation);
30
+ const chunk = /** @type {Chunk} */ (this.chunk);
31
+ const { runtimeTemplate } = compilation;
29
32
  return Template.asString(
30
33
  startupChunks.map(
31
34
  ({ onChunks, chunks }) =>
@@ -8,6 +8,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
11
12
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
12
13
 
13
14
  class ChunkPrefetchTriggerRuntimeModule extends RuntimeModule {
@@ -20,11 +21,12 @@ class ChunkPrefetchTriggerRuntimeModule extends RuntimeModule {
20
21
  }
21
22
 
22
23
  /**
23
- * @returns {string} runtime code
24
+ * @returns {string | null} runtime code
24
25
  */
25
26
  generate() {
26
27
  const { chunkMap } = this;
27
- const { runtimeTemplate } = this.compilation;
28
+ const compilation = /** @type {Compilation} */ (this.compilation);
29
+ const { runtimeTemplate } = compilation;
28
30
  const body = [
29
31
  "var chunks = chunkToChildrenMap[chunkId];",
30
32
  `Array.isArray(chunks) && chunks.map(${RuntimeGlobals.prefetchChunk});`
@@ -8,6 +8,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
11
12
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
12
13
 
13
14
  class ChunkPreloadTriggerRuntimeModule extends RuntimeModule {
@@ -20,11 +21,12 @@ class ChunkPreloadTriggerRuntimeModule extends RuntimeModule {
20
21
  }
21
22
 
22
23
  /**
23
- * @returns {string} runtime code
24
+ * @returns {string | null} runtime code
24
25
  */
25
26
  generate() {
26
27
  const { chunkMap } = this;
27
- const { runtimeTemplate } = this.compilation;
28
+ const compilation = /** @type {Compilation} */ (this.compilation);
29
+ const { runtimeTemplate } = compilation;
28
30
  const body = [
29
31
  "var chunks = chunkToChildrenMap[chunkId];",
30
32
  `Array.isArray(chunks) && chunks.map(${RuntimeGlobals.preloadChunk});`
@@ -8,6 +8,10 @@
8
8
  /** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
9
9
 
10
10
  class BasicEffectRulePlugin {
11
+ /**
12
+ * @param {string} ruleProperty the rule property
13
+ * @param {string=} effectType the effect type
14
+ */
11
15
  constructor(ruleProperty, effectType) {
12
16
  this.ruleProperty = ruleProperty;
13
17
  this.effectType = effectType || ruleProperty;
@@ -9,6 +9,11 @@
9
9
  /** @typedef {import("./RuleSetCompiler").RuleCondition} RuleCondition */
10
10
 
11
11
  class BasicMatcherRulePlugin {
12
+ /**
13
+ * @param {string} ruleProperty the rule property
14
+ * @param {string=} dataProperty the data property
15
+ * @param {boolean=} invert if true, inverts the condition
16
+ */
12
17
  constructor(ruleProperty, dataProperty, invert) {
13
18
  this.ruleProperty = ruleProperty;
14
19
  this.dataProperty = dataProperty || ruleProperty;
@@ -150,9 +150,9 @@ class RuleSetCompiler {
150
150
  * @returns {CompiledRule[]} rules
151
151
  */
152
152
  compileRules(path, rules, refs) {
153
- return rules.map((rule, i) =>
154
- this.compileRule(`${path}[${i}]`, rule, refs)
155
- );
153
+ return rules
154
+ .filter(Boolean)
155
+ .map((rule, i) => this.compileRule(`${path}[${i}]`, rule, refs));
156
156
  }
157
157
 
158
158
  /**
@@ -106,9 +106,11 @@ class UseEffectRulePlugin {
106
106
  */
107
107
  const useToEffectsWithoutIdent = (path, items) => {
108
108
  if (Array.isArray(items)) {
109
- return items.map((item, idx) =>
110
- useToEffectRaw(`${path}[${idx}]`, "[[missing ident]]", item)
111
- );
109
+ return items
110
+ .filter(Boolean)
111
+ .map((item, idx) =>
112
+ useToEffectRaw(`${path}[${idx}]`, "[[missing ident]]", item)
113
+ );
112
114
  }
113
115
  return [useToEffectRaw(path, "[[missing ident]]", items)];
114
116
  };
@@ -120,7 +122,7 @@ class UseEffectRulePlugin {
120
122
  */
121
123
  const useToEffects = (path, items) => {
122
124
  if (Array.isArray(items)) {
123
- return items.map((item, idx) => {
125
+ return items.filter(Boolean).map((item, idx) => {
124
126
  const subPath = `${path}[${idx}]`;
125
127
  return useToEffect(subPath, subPath, item);
126
128
  });
@@ -8,23 +8,26 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class AsyncModuleRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("async module");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
21
24
  const fn = RuntimeGlobals.asyncModule;
22
25
  return Template.asString([
23
26
  'var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";',
24
27
  `var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
25
28
  'var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";',
26
29
  `var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
27
- "if(queue && !queue.d) {",
30
+ "if(queue && queue.d < 1) {",
28
31
  Template.indent([
29
32
  "queue.d = 1;",
30
33
  `queue.forEach(${runtimeTemplate.expressionFunction(
@@ -73,7 +76,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
73
76
  )};`,
74
77
  `${fn} = ${runtimeTemplate.basicFunction("module, body, hasAwait", [
75
78
  "var queue;",
76
- "hasAwait && ((queue = []).d = 1);",
79
+ "hasAwait && ((queue = []).d = -1);",
77
80
  "var depQueues = new Set();",
78
81
  "var exports = module.exports;",
79
82
  "var currentDeps;",
@@ -121,7 +124,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
121
124
  "(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)",
122
125
  "err"
123
126
  )});`,
124
- "queue && (queue.d = 0);"
127
+ "queue && queue.d < 0 && (queue.d = 0);"
125
128
  ])};`
126
129
  ]);
127
130
  }
@@ -10,16 +10,18 @@ const Template = require("../Template");
10
10
  const JavascriptModulesPlugin = require("../javascript/JavascriptModulesPlugin");
11
11
  const { getUndoPath } = require("../util/identifier");
12
12
 
13
+ /** @typedef {import("../Compilation")} Compilation */
14
+
13
15
  class AutoPublicPathRuntimeModule extends RuntimeModule {
14
16
  constructor() {
15
17
  super("publicPath", RuntimeModule.STAGE_BASIC);
16
18
  }
17
19
 
18
20
  /**
19
- * @returns {string} runtime code
21
+ * @returns {string | null} runtime code
20
22
  */
21
23
  generate() {
22
- const { compilation } = this;
24
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
25
  const { scriptType, importMetaName, path } = compilation.outputOptions;
24
26
  const chunkName = compilation.getPath(
25
27
  JavascriptModulesPlugin.getChunkFilenameTemplate(
@@ -9,6 +9,7 @@ const RuntimeGlobals = require("../RuntimeGlobals");
9
9
  const RuntimeModule = require("../RuntimeModule");
10
10
 
11
11
  /** @typedef {import("../../declarations/WebpackOptions").EntryDescriptionNormalized} EntryDescriptionNormalized */
12
+ /** @typedef {import("../Chunk")} Chunk */
12
13
 
13
14
  class BaseUriRuntimeModule extends RuntimeModule {
14
15
  constructor() {
@@ -16,11 +17,10 @@ class BaseUriRuntimeModule extends RuntimeModule {
16
17
  }
17
18
 
18
19
  /**
19
- * @returns {string} runtime code
20
+ * @returns {string | null} runtime code
20
21
  */
21
22
  generate() {
22
- const { chunk } = this;
23
-
23
+ const chunk = /** @type {Chunk} */ (this.chunk);
24
24
  const options =
25
25
  /** @type {EntryDescriptionNormalized} */
26
26
  (chunk.getEntryOptions());
@@ -17,7 +17,7 @@ class ChunkNameRuntimeModule extends RuntimeModule {
17
17
  }
18
18
 
19
19
  /**
20
- * @returns {string} runtime code
20
+ * @returns {string | null} runtime code
21
21
  */
22
22
  generate() {
23
23
  return `${RuntimeGlobals.chunkName} = ${JSON.stringify(this.chunkName)};`;
@@ -8,16 +8,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class CompatGetDefaultExportRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("compat get default export");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
21
24
  const fn = RuntimeGlobals.compatGetDefaultExport;
22
25
  return Template.asString([
23
26
  "// getDefaultExport function for compatibility with non-harmony modules",
@@ -7,6 +7,9 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
 
10
+ /** @typedef {import("../Chunk")} Chunk */
11
+ /** @typedef {import("../ChunkGraph")} ChunkGraph */
12
+ /** @typedef {import("../Compilation")} Compilation */
10
13
  /** @typedef {import("../MainTemplate")} MainTemplate */
11
14
 
12
15
  class CompatRuntimeModule extends RuntimeModule {
@@ -16,10 +19,12 @@ class CompatRuntimeModule extends RuntimeModule {
16
19
  }
17
20
 
18
21
  /**
19
- * @returns {string} runtime code
22
+ * @returns {string | null} runtime code
20
23
  */
21
24
  generate() {
22
- const { chunkGraph, chunk, compilation } = this;
25
+ const compilation = /** @type {Compilation} */ (this.compilation);
26
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
27
+ const chunk = /** @type {Chunk} */ (this.chunk);
23
28
  const {
24
29
  runtimeTemplate,
25
30
  mainTemplate,
@@ -8,16 +8,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const Template = require("../Template");
9
9
  const HelperRuntimeModule = require("./HelperRuntimeModule");
10
10
 
11
+ /** @typedef {import("../Compilation")} Compilation */
12
+
11
13
  class CreateFakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
12
14
  constructor() {
13
15
  super("create fake namespace object");
14
16
  }
15
17
 
16
18
  /**
17
- * @returns {string} runtime code
19
+ * @returns {string | null} runtime code
18
20
  */
19
21
  generate() {
20
- const { runtimeTemplate } = this.compilation;
22
+ const compilation = /** @type {Compilation} */ (this.compilation);
23
+ const { runtimeTemplate } = compilation;
21
24
  const fn = RuntimeGlobals.createFakeNamespaceObject;
22
25
  return Template.asString([
23
26
  `var getProto = Object.getPrototypeOf ? ${runtimeTemplate.returningFunction(