webpack 5.90.3 → 5.92.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 (257) hide show
  1. package/README.md +5 -5
  2. package/bin/webpack.js +6 -3
  3. package/lib/APIPlugin.js +14 -6
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/BannerPlugin.js +3 -1
  6. package/lib/Cache.js +8 -2
  7. package/lib/CacheFacade.js +3 -3
  8. package/lib/Chunk.js +7 -4
  9. package/lib/ChunkGraph.js +52 -25
  10. package/lib/ChunkGroup.js +23 -17
  11. package/lib/CleanPlugin.js +8 -6
  12. package/lib/Compilation.js +295 -120
  13. package/lib/Compiler.js +223 -87
  14. package/lib/ConcatenationScope.js +3 -3
  15. package/lib/ConditionalInitFragment.js +4 -5
  16. package/lib/ContextModule.js +95 -41
  17. package/lib/ContextModuleFactory.js +4 -2
  18. package/lib/ContextReplacementPlugin.js +3 -2
  19. package/lib/DefinePlugin.js +18 -6
  20. package/lib/Dependency.js +12 -10
  21. package/lib/DependencyTemplate.js +17 -7
  22. package/lib/DllModule.js +1 -0
  23. package/lib/DllReferencePlugin.js +7 -3
  24. package/lib/EntryOptionPlugin.js +4 -1
  25. package/lib/EntryPlugin.js +6 -1
  26. package/lib/Entrypoint.js +1 -1
  27. package/lib/EvalDevToolModulePlugin.js +11 -0
  28. package/lib/ExportsInfo.js +23 -8
  29. package/lib/ExternalModule.js +160 -35
  30. package/lib/ExternalModuleFactoryPlugin.js +37 -2
  31. package/lib/FileSystemInfo.js +69 -42
  32. package/lib/FlagDependencyExportsPlugin.js +21 -7
  33. package/lib/Generator.js +4 -4
  34. package/lib/HookWebpackError.js +2 -2
  35. package/lib/HotModuleReplacementPlugin.js +108 -45
  36. package/lib/IgnorePlugin.js +4 -1
  37. package/lib/InitFragment.js +5 -3
  38. package/lib/LibManifestPlugin.js +17 -9
  39. package/lib/Module.js +41 -14
  40. package/lib/ModuleFactory.js +3 -3
  41. package/lib/ModuleFilenameHelpers.js +30 -17
  42. package/lib/ModuleGraph.js +60 -31
  43. package/lib/ModuleGraphConnection.js +2 -1
  44. package/lib/MultiCompiler.js +62 -9
  45. package/lib/NodeStuffPlugin.js +14 -3
  46. package/lib/NormalModule.js +13 -13
  47. package/lib/NormalModuleFactory.js +18 -9
  48. package/lib/NormalModuleReplacementPlugin.js +5 -1
  49. package/lib/Parser.js +1 -1
  50. package/lib/PlatformPlugin.js +39 -0
  51. package/lib/ProgressPlugin.js +1 -1
  52. package/lib/ProvidePlugin.js +3 -1
  53. package/lib/RawModule.js +2 -1
  54. package/lib/RecordIdsPlugin.js +4 -4
  55. package/lib/ResolverFactory.js +6 -4
  56. package/lib/RuntimeModule.js +4 -4
  57. package/lib/RuntimePlugin.js +1 -0
  58. package/lib/RuntimeTemplate.js +124 -52
  59. package/lib/SourceMapDevToolPlugin.js +4 -1
  60. package/lib/Stats.js +11 -4
  61. package/lib/Template.js +5 -5
  62. package/lib/TemplatedPathPlugin.js +48 -7
  63. package/lib/Watching.js +67 -60
  64. package/lib/WebpackError.js +6 -6
  65. package/lib/WebpackOptionsApply.js +18 -5
  66. package/lib/asset/AssetGenerator.js +15 -0
  67. package/lib/asset/RawDataUrlModule.js +3 -1
  68. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  69. package/lib/buildChunkGraph.js +120 -67
  70. package/lib/cache/IdleFileCachePlugin.js +8 -3
  71. package/lib/cache/MemoryCachePlugin.js +1 -1
  72. package/lib/cache/MemoryWithGcCachePlugin.js +6 -2
  73. package/lib/cache/PackFileCacheStrategy.js +51 -18
  74. package/lib/cache/ResolverCachePlugin.js +22 -14
  75. package/lib/cache/getLazyHashedEtag.js +2 -2
  76. package/lib/cli.js +5 -5
  77. package/lib/config/browserslistTargetHandler.js +7 -1
  78. package/lib/config/defaults.js +108 -34
  79. package/lib/config/normalization.js +3 -1
  80. package/lib/config/target.js +18 -11
  81. package/lib/container/ContainerEntryDependency.js +2 -1
  82. package/lib/container/ContainerEntryModule.js +4 -2
  83. package/lib/container/ContainerPlugin.js +14 -10
  84. package/lib/container/FallbackModule.js +1 -1
  85. package/lib/container/RemoteRuntimeModule.js +12 -3
  86. package/lib/css/CssExportsGenerator.js +68 -25
  87. package/lib/css/CssGenerator.js +34 -6
  88. package/lib/css/CssLoadingRuntimeModule.js +217 -98
  89. package/lib/css/CssModulesPlugin.js +238 -107
  90. package/lib/css/CssParser.js +24 -15
  91. package/lib/css/walkCssTokens.js +1 -1
  92. package/lib/debug/ProfilingPlugin.js +28 -3
  93. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +9 -5
  94. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +4 -1
  95. package/lib/dependencies/CommonJsDependencyHelpers.js +2 -1
  96. package/lib/dependencies/CommonJsExportRequireDependency.js +33 -18
  97. package/lib/dependencies/CommonJsExportsDependency.js +13 -5
  98. package/lib/dependencies/CommonJsExportsParserPlugin.js +20 -15
  99. package/lib/dependencies/CommonJsImportsParserPlugin.js +1 -2
  100. package/lib/dependencies/ContextDependencyHelpers.js +49 -29
  101. package/lib/dependencies/ContextElementDependency.js +8 -1
  102. package/lib/dependencies/CssExportDependency.js +2 -2
  103. package/lib/dependencies/CssLocalIdentifierDependency.js +71 -9
  104. package/lib/dependencies/CssUrlDependency.js +10 -7
  105. package/lib/dependencies/ExportsInfoDependency.js +5 -4
  106. package/lib/dependencies/ExternalModuleDependency.js +4 -2
  107. package/lib/dependencies/ExternalModuleInitFragment.js +5 -3
  108. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -4
  109. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +43 -23
  110. package/lib/dependencies/HarmonyExportHeaderDependency.js +1 -1
  111. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +73 -32
  112. package/lib/dependencies/HarmonyExportInitFragment.js +10 -2
  113. package/lib/dependencies/HarmonyImportDependency.js +28 -12
  114. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +70 -19
  115. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -6
  116. package/lib/dependencies/HarmonyImportSpecifierDependency.js +47 -35
  117. package/lib/dependencies/ImportDependency.js +9 -2
  118. package/lib/dependencies/ImportEagerDependency.js +4 -2
  119. package/lib/dependencies/ImportMetaContextDependency.js +7 -0
  120. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +25 -14
  121. package/lib/dependencies/ImportMetaPlugin.js +1 -1
  122. package/lib/dependencies/ImportParserPlugin.js +15 -5
  123. package/lib/dependencies/ImportWeakDependency.js +4 -2
  124. package/lib/dependencies/LoaderDependency.js +2 -1
  125. package/lib/dependencies/LoaderImportDependency.js +2 -1
  126. package/lib/dependencies/LoaderPlugin.js +2 -2
  127. package/lib/dependencies/ModuleDependency.js +4 -5
  128. package/lib/dependencies/PureExpressionDependency.js +64 -47
  129. package/lib/dependencies/RequireContextPlugin.js +1 -1
  130. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +26 -14
  131. package/lib/dependencies/RequireEnsureDependency.js +1 -1
  132. package/lib/dependencies/URLDependency.js +7 -4
  133. package/lib/dependencies/WorkerDependency.js +1 -1
  134. package/lib/dependencies/WorkerPlugin.js +2 -1
  135. package/lib/dependencies/getFunctionExpression.js +3 -1
  136. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -3
  137. package/lib/hmr/LazyCompilationPlugin.js +2 -2
  138. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -1
  139. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  140. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  141. package/lib/ids/IdHelpers.js +6 -6
  142. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  143. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  144. package/lib/ids/SyncModuleIdsPlugin.js +2 -2
  145. package/lib/index.js +11 -0
  146. package/lib/javascript/BasicEvaluatedExpression.js +2 -2
  147. package/lib/javascript/ChunkHelpers.js +2 -2
  148. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  149. package/lib/javascript/JavascriptGenerator.js +0 -1
  150. package/lib/javascript/JavascriptModulesPlugin.js +174 -17
  151. package/lib/javascript/JavascriptParser.js +204 -71
  152. package/lib/javascript/JavascriptParserHelpers.js +1 -1
  153. package/lib/javascript/StartupHelpers.js +22 -5
  154. package/lib/library/AbstractLibraryPlugin.js +2 -2
  155. package/lib/library/AmdLibraryPlugin.js +2 -2
  156. package/lib/library/AssignLibraryPlugin.js +3 -3
  157. package/lib/library/ExportPropertyLibraryPlugin.js +2 -2
  158. package/lib/library/JsonpLibraryPlugin.js +2 -2
  159. package/lib/library/ModuleLibraryPlugin.js +2 -2
  160. package/lib/library/SystemLibraryPlugin.js +2 -2
  161. package/lib/library/UmdLibraryPlugin.js +33 -12
  162. package/lib/logging/Logger.js +27 -2
  163. package/lib/logging/createConsoleLogger.js +13 -9
  164. package/lib/node/CommonJsChunkLoadingPlugin.js +2 -1
  165. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  166. package/lib/node/NodeTemplatePlugin.js +1 -1
  167. package/lib/node/NodeWatchFileSystem.js +37 -26
  168. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -1
  169. package/lib/node/ReadFileCompileWasmPlugin.js +1 -1
  170. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -1
  171. package/lib/node/nodeConsole.js +24 -1
  172. package/lib/optimize/AggressiveMergingPlugin.js +1 -1
  173. package/lib/optimize/AggressiveSplittingPlugin.js +1 -0
  174. package/lib/optimize/ConcatenatedModule.js +140 -121
  175. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  176. package/lib/optimize/InnerGraph.js +8 -3
  177. package/lib/optimize/InnerGraphPlugin.js +36 -13
  178. package/lib/optimize/LimitChunkCountPlugin.js +1 -2
  179. package/lib/optimize/ModuleConcatenationPlugin.js +13 -3
  180. package/lib/optimize/RealContentHashPlugin.js +3 -3
  181. package/lib/optimize/RemoveParentModulesPlugin.js +1 -0
  182. package/lib/optimize/RuntimeChunkPlugin.js +6 -1
  183. package/lib/optimize/SideEffectsFlagPlugin.js +48 -17
  184. package/lib/optimize/SplitChunksPlugin.js +10 -10
  185. package/lib/performance/SizeLimitsPlugin.js +13 -2
  186. package/lib/rules/ObjectMatcherRulePlugin.js +15 -1
  187. package/lib/rules/RuleSetCompiler.js +9 -7
  188. package/lib/runtime/EnsureChunkRuntimeModule.js +2 -1
  189. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
  190. package/lib/runtime/LoadScriptRuntimeModule.js +1 -1
  191. package/lib/runtime/StartupChunkDependenciesPlugin.js +1 -1
  192. package/lib/schemes/HttpUriPlugin.js +1 -1
  193. package/lib/serialization/BinaryMiddleware.js +4 -4
  194. package/lib/serialization/FileMiddleware.js +4 -3
  195. package/lib/serialization/NullPrototypeObjectSerializer.js +2 -2
  196. package/lib/serialization/ObjectMiddleware.js +8 -5
  197. package/lib/serialization/PlainObjectSerializer.js +2 -2
  198. package/lib/serialization/Serializer.js +19 -0
  199. package/lib/serialization/SerializerMiddleware.js +2 -2
  200. package/lib/serialization/SingleItemMiddleware.js +2 -2
  201. package/lib/serialization/types.js +1 -1
  202. package/lib/sharing/ConsumeSharedModule.js +2 -2
  203. package/lib/sharing/ConsumeSharedPlugin.js +17 -3
  204. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -2
  205. package/lib/sharing/ProvideSharedPlugin.js +13 -6
  206. package/lib/sharing/resolveMatchedConfigs.js +3 -3
  207. package/lib/sharing/utils.js +13 -6
  208. package/lib/stats/DefaultStatsFactoryPlugin.js +20 -20
  209. package/lib/stats/DefaultStatsPrinterPlugin.js +1 -1
  210. package/lib/stats/StatsFactory.js +2 -2
  211. package/lib/stats/StatsPrinter.js +6 -6
  212. package/lib/util/ArrayQueue.js +14 -21
  213. package/lib/util/AsyncQueue.js +1 -1
  214. package/lib/util/Queue.js +8 -2
  215. package/lib/util/SortableSet.js +16 -4
  216. package/lib/util/StackedCacheMap.js +26 -0
  217. package/lib/util/TupleQueue.js +8 -2
  218. package/lib/util/WeakTupleMap.js +57 -13
  219. package/lib/util/binarySearchBounds.js +1 -1
  220. package/lib/util/cleverMerge.js +26 -13
  221. package/lib/util/comparators.js +37 -15
  222. package/lib/util/conventions.js +129 -0
  223. package/lib/util/createHash.js +3 -5
  224. package/lib/util/deprecation.js +3 -3
  225. package/lib/util/deterministicGrouping.js +2 -2
  226. package/lib/util/findGraphRoots.js +1 -1
  227. package/lib/util/fs.js +383 -69
  228. package/lib/util/hash/BatchedHash.js +3 -0
  229. package/lib/util/hash/xxhash64.js +2 -2
  230. package/lib/util/identifier.js +5 -5
  231. package/lib/util/mergeScope.js +79 -0
  232. package/lib/util/runtime.js +2 -17
  233. package/lib/util/semver.js +3 -0
  234. package/lib/util/smartGrouping.js +3 -3
  235. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +4 -2
  236. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +1 -1
  237. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +4 -2
  238. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  239. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +16 -7
  240. package/lib/wasm-sync/WebAssemblyGenerator.js +40 -19
  241. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +1 -1
  242. package/lib/wasm-sync/WebAssemblyParser.js +7 -4
  243. package/lib/wasm-sync/WebAssemblyUtils.js +2 -1
  244. package/lib/web/FetchCompileWasmPlugin.js +1 -1
  245. package/lib/web/JsonpChunkLoadingRuntimeModule.js +3 -2
  246. package/lib/webpack.js +19 -6
  247. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +2 -1
  248. package/package.json +40 -39
  249. package/schemas/WebpackOptions.check.js +1 -1
  250. package/schemas/WebpackOptions.json +97 -8
  251. package/schemas/plugins/BannerPlugin.check.js +1 -1
  252. package/schemas/plugins/BannerPlugin.json +5 -1
  253. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +1 -1
  254. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  255. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +1 -1
  256. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -1
  257. package/types.d.ts +1826 -639
@@ -25,7 +25,7 @@ const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
25
25
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
26
26
 
27
27
  /**
28
- * @typedef {Object} QueueItem
28
+ * @typedef {object} QueueItem
29
29
  * @property {number} action
30
30
  * @property {DependenciesBlock} block
31
31
  * @property {Module} module
@@ -35,7 +35,7 @@ const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
35
35
  */
36
36
 
37
37
  /**
38
- * @typedef {Object} ChunkGroupInfo
38
+ * @typedef {object} ChunkGroupInfo
39
39
  * @property {ChunkGroup} chunkGroup the chunk group
40
40
  * @property {RuntimeSpec} runtime the runtimes
41
41
  * @property {bigint | undefined} minAvailableModules current minimal set of modules available at this point
@@ -53,11 +53,21 @@ const { getEntryRuntime, mergeRuntime } = require("./util/runtime");
53
53
  */
54
54
 
55
55
  /**
56
- * @typedef {Object} BlockChunkGroupConnection
56
+ * @typedef {object} BlockChunkGroupConnection
57
57
  * @property {ChunkGroupInfo} originChunkGroupInfo origin chunk group
58
58
  * @property {ChunkGroup} chunkGroup referenced chunk group
59
59
  */
60
60
 
61
+ /** @typedef {(Module | ConnectionState | ModuleGraphConnection)[]} BlockModulesInTuples */
62
+ /** @typedef {(Module | ConnectionState | ModuleGraphConnection[])[]} BlockModulesInFlattenTuples */
63
+ /** @typedef {Map<DependenciesBlock, BlockModulesInFlattenTuples>} BlockModulesMap */
64
+ /** @typedef {Map<Chunk, bigint>} MaskByChunk */
65
+ /** @typedef {Set<DependenciesBlock>} BlocksWithNestedBlocks */
66
+ /** @typedef {Map<AsyncDependenciesBlock, BlockChunkGroupConnection[]>} BlockConnections */
67
+ /** @typedef {Map<ChunkGroup, ChunkGroupInfo>} ChunkGroupInfoMap */
68
+ /** @typedef {Set<ChunkGroup>} AllCreatedChunkGroups */
69
+ /** @typedef {Map<Entrypoint, Module[]>} InputEntrypointsAndModules */
70
+
61
71
  const ZERO_BIGINT = BigInt(0);
62
72
  const ONE_BIGINT = BigInt(1);
63
73
 
@@ -88,15 +98,26 @@ const getActiveStateOfConnections = (connections, runtime) => {
88
98
  return merged;
89
99
  };
90
100
 
101
+ /**
102
+ * @param {Module} module module
103
+ * @param {ModuleGraph} moduleGraph module graph
104
+ * @param {RuntimeSpec} runtime runtime
105
+ * @param {BlockModulesMap} blockModulesMap block modules map
106
+ */
91
107
  const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
108
+ /** @type {DependenciesBlock | undefined} */
92
109
  let blockCache;
110
+ /** @type {BlockModulesInTuples | undefined} */
93
111
  let modules;
94
112
 
113
+ /** @type {BlockModulesInTuples[]} */
95
114
  const arrays = [];
96
115
 
116
+ /** @type {DependenciesBlock[]} */
97
117
  const queue = [module];
98
118
  while (queue.length > 0) {
99
- const block = queue.pop();
119
+ const block = /** @type {DependenciesBlock} */ (queue.pop());
120
+ /** @type {Module[]} */
100
121
  const arr = [];
101
122
  arrays.push(arr);
102
123
  blockModulesMap.set(block, arr);
@@ -120,17 +141,26 @@ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
120
141
 
121
142
  // deprecated fallback
122
143
  if (index < 0) {
123
- index = block.dependencies.indexOf(d);
144
+ index = /** @type {DependenciesBlock} */ (block).dependencies.indexOf(d);
124
145
  }
125
146
 
126
147
  if (blockCache !== block) {
127
- modules = blockModulesMap.get((blockCache = block));
148
+ modules =
149
+ /** @type {BlockModulesInTuples} */
150
+ (
151
+ blockModulesMap.get(
152
+ (blockCache = /** @type {DependenciesBlock} */ (block))
153
+ )
154
+ );
128
155
  }
129
156
 
130
157
  const i = index * 3;
131
- modules[i] = m;
132
- modules[i + 1] = connection.getActiveState(runtime);
133
- modules[i + 2] = connection;
158
+ /** @type {BlockModulesInTuples} */
159
+ (modules)[i] = m;
160
+ /** @type {BlockModulesInTuples} */
161
+ (modules)[i + 1] = connection.getActiveState(runtime);
162
+ /** @type {BlockModulesInTuples} */
163
+ (modules)[i + 2] = connection;
134
164
  }
135
165
 
136
166
  for (const modules of arrays) {
@@ -140,14 +170,15 @@ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
140
170
  outer: for (let j = 0; j < modules.length; j += 3) {
141
171
  const m = modules[j];
142
172
  if (m === undefined) continue;
143
- const state = modules[j + 1];
144
- const connection = modules[j + 2];
173
+ const state = /** @type {ConnectionState} */ (modules[j + 1]);
174
+ const connection = /** @type {ModuleGraphConnection} */ (modules[j + 2]);
145
175
  if (indexMap === undefined) {
146
176
  let i = 0;
147
177
  for (; i < length; i += 3) {
148
178
  if (modules[i] === m) {
149
- const merged = modules[i + 1];
150
- modules[i + 2].push(connection);
179
+ const merged = /** @type {ConnectionState} */ (modules[i + 1]);
180
+ /** @type {ModuleGraphConnection[]} */
181
+ (/** @type {unknown} */ (modules[i + 2])).push(connection);
151
182
  if (merged === true) continue outer;
152
183
  modules[i + 1] = ModuleGraphConnection.addConnectionStates(
153
184
  merged,
@@ -160,7 +191,8 @@ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
160
191
  length++;
161
192
  modules[length] = state;
162
193
  length++;
163
- modules[length] = [connection];
194
+ /** @type {ModuleGraphConnection[]} */
195
+ (/** @type {unknown} */ (modules[length])) = [connection];
164
196
  length++;
165
197
  if (length > 30) {
166
198
  // To avoid worse case performance, we will use an index map for
@@ -174,8 +206,9 @@ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
174
206
  } else {
175
207
  const idx = indexMap.get(m);
176
208
  if (idx !== undefined) {
177
- const merged = modules[idx];
178
- modules[idx + 1].push(connection);
209
+ const merged = /** @type {ConnectionState} */ (modules[idx]);
210
+ /** @type {ModuleGraphConnection[]} */
211
+ (/** @type {unknown} */ (modules[idx + 1])).push(connection);
179
212
  if (merged === true) continue outer;
180
213
  modules[idx] = ModuleGraphConnection.addConnectionStates(
181
214
  merged,
@@ -187,7 +220,11 @@ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
187
220
  modules[length] = state;
188
221
  indexMap.set(m, length);
189
222
  length++;
190
- modules[length] = [connection];
223
+ /** @type {ModuleGraphConnection[]} */
224
+ (
225
+ /** @type {unknown} */
226
+ (modules[length])
227
+ ) = [connection];
191
228
  length++;
192
229
  }
193
230
  }
@@ -200,12 +237,12 @@ const extractBlockModules = (module, moduleGraph, runtime, blockModulesMap) => {
200
237
  *
201
238
  * @param {Logger} logger a logger
202
239
  * @param {Compilation} compilation the compilation
203
- * @param {Map<Entrypoint, Module[]>} inputEntrypointsAndModules chunk groups which are processed with the modules
204
- * @param {Map<ChunkGroup, ChunkGroupInfo>} chunkGroupInfoMap mapping from chunk group to available modules
205
- * @param {Map<AsyncDependenciesBlock, BlockChunkGroupConnection[]>} blockConnections connection for blocks
206
- * @param {Set<DependenciesBlock>} blocksWithNestedBlocks flag for blocks that have nested blocks
207
- * @param {Set<ChunkGroup>} allCreatedChunkGroups filled with all chunk groups that are created here
208
- * @param {Map<Chunk, bigint>} maskByChunk module content mask by chunk
240
+ * @param {InputEntrypointsAndModules} inputEntrypointsAndModules chunk groups which are processed with the modules
241
+ * @param {ChunkGroupInfoMap} chunkGroupInfoMap mapping from chunk group to available modules
242
+ * @param {BlockConnections} blockConnections connection for blocks
243
+ * @param {BlocksWithNestedBlocks} blocksWithNestedBlocks flag for blocks that have nested blocks
244
+ * @param {AllCreatedChunkGroups} allCreatedChunkGroups filled with all chunk groups that are created here
245
+ * @param {MaskByChunk} maskByChunk module content mask by chunk
209
246
  */
210
247
  const visitModules = (
211
248
  logger,
@@ -221,9 +258,7 @@ const visitModules = (
221
258
 
222
259
  const blockModulesRuntimeMap = new Map();
223
260
 
224
- /** @type {RuntimeSpec | false} */
225
- let blockModulesMapRuntime = false;
226
- /** @type {Map<DependenciesBlock, (Module | ConnectionState)[]>} */
261
+ /** @type {BlockModulesMap | undefined} */
227
262
  let blockModulesMap;
228
263
 
229
264
  /** @type {Map<Module, number>} */
@@ -254,15 +289,13 @@ const visitModules = (
254
289
  *
255
290
  * @param {DependenciesBlock} block block
256
291
  * @param {RuntimeSpec} runtime runtime
257
- * @returns {(Module | ConnectionState | ModuleGraphConnection[])[]} block modules in flatten tuples
292
+ * @returns {BlockModulesInFlattenTuples} block modules in flatten tuples
258
293
  */
259
294
  const getBlockModules = (block, runtime) => {
260
- if (blockModulesMapRuntime !== runtime) {
261
- blockModulesMap = blockModulesRuntimeMap.get(runtime);
262
- if (blockModulesMap === undefined) {
263
- blockModulesMap = new Map();
264
- blockModulesRuntimeMap.set(runtime, blockModulesMap);
265
- }
295
+ blockModulesMap = blockModulesRuntimeMap.get(runtime);
296
+ if (blockModulesMap === undefined) {
297
+ blockModulesMap = new Map();
298
+ blockModulesRuntimeMap.set(runtime, blockModulesMap);
266
299
  }
267
300
  let blockModules = blockModulesMap.get(block);
268
301
  if (blockModules !== undefined) return blockModules;
@@ -286,9 +319,11 @@ const visitModules = (
286
319
  } else {
287
320
  logger.time("visitModules: prepare");
288
321
  extractBlockModules(module, moduleGraph, runtime, blockModulesMap);
289
- blockModules = blockModulesMap.get(block);
322
+ blockModules =
323
+ /** @type {BlockModulesInFlattenTuples} */
324
+ (blockModulesMap.get(block));
290
325
  logger.timeAggregate("visitModules: prepare");
291
- return /** @type {(Module | ConnectionState)[]} */ (blockModules);
326
+ return blockModules;
292
327
  }
293
328
  };
294
329
 
@@ -451,6 +486,7 @@ const visitModules = (
451
486
  const iteratorBlock = b => {
452
487
  // 1. We create a chunk group with single chunk in it for this Block
453
488
  // but only once (blockChunkGroups map)
489
+ /** @type {ChunkGroupInfo | undefined} */
454
490
  let cgi = blockChunkGroups.get(b);
455
491
  /** @type {ChunkGroup | undefined} */
456
492
  let c;
@@ -465,8 +501,8 @@ const visitModules = (
465
501
  entrypoint = compilation.addAsyncEntrypoint(
466
502
  entryOptions,
467
503
  module,
468
- b.loc,
469
- b.request
504
+ /** @type {DependencyLocation} */ (b.loc),
505
+ /** @type {string} */ (b.request)
470
506
  );
471
507
  maskByChunk.set(entrypoint.chunks[0], ZERO_BIGINT);
472
508
  entrypoint.index = nextChunkGroupIndex++;
@@ -500,7 +536,11 @@ const visitModules = (
500
536
  } else {
501
537
  entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
502
538
  // TODO merge entryOptions
503
- entrypoint.addOrigin(module, b.loc, b.request);
539
+ entrypoint.addOrigin(
540
+ module,
541
+ /** @type {DependencyLocation} */ (b.loc),
542
+ /** @type {string} */ (b.request)
543
+ );
504
544
  chunkGraph.connectBlockAndChunkGroup(b, entrypoint);
505
545
  }
506
546
 
@@ -524,13 +564,13 @@ const visitModules = (
524
564
  chunkGroupInfo
525
565
  });
526
566
  } else {
527
- cgi = chunkName && namedChunkGroups.get(chunkName);
567
+ cgi = chunkName ? namedChunkGroups.get(chunkName) : undefined;
528
568
  if (!cgi) {
529
569
  c = compilation.addChunkInGroup(
530
570
  b.groupOptions || b.chunkName,
531
571
  module,
532
- b.loc,
533
- b.request
572
+ /** @type {DependencyLocation} */ (b.loc),
573
+ /** @type {string} */ (b.request)
534
574
  );
535
575
  maskByChunk.set(c.chunks[0], ZERO_BIGINT);
536
576
  c.index = nextChunkGroupIndex++;
@@ -561,19 +601,23 @@ const visitModules = (
561
601
  new AsyncDependencyToInitialChunkError(
562
602
  /** @type {string} */ (chunkName),
563
603
  module,
564
- b.loc
604
+ /** @type {DependencyLocation} */ (b.loc)
565
605
  )
566
606
  );
567
607
  c = chunkGroup;
568
608
  } else {
569
609
  c.addOptions(b.groupOptions);
570
610
  }
571
- c.addOrigin(module, b.loc, b.request);
611
+ c.addOrigin(
612
+ module,
613
+ /** @type {DependencyLocation} */ (b.loc),
614
+ /** @type {string} */ (b.request)
615
+ );
572
616
  }
573
617
  blockConnections.set(b, []);
574
618
  }
575
619
  blockChunkGroups.set(b, /** @type {ChunkGroupInfo} */ (cgi));
576
- blockByChunkGroups.set(cgi, b);
620
+ blockByChunkGroups.set(/** @type {ChunkGroupInfo} */ (cgi), b);
577
621
  } else if (entryOptions) {
578
622
  entrypoint = /** @type {Entrypoint} */ (cgi.chunkGroup);
579
623
  } else {
@@ -583,7 +627,8 @@ const visitModules = (
583
627
  if (c !== undefined) {
584
628
  // 2. We store the connection for the block
585
629
  // to connect it later if needed
586
- blockConnections.get(b).push({
630
+ /** @type {BlockChunkGroupConnection[]} */
631
+ (blockConnections.get(b)).push({
587
632
  originChunkGroupInfo: chunkGroupInfo,
588
633
  chunkGroup: c
589
634
  });
@@ -622,7 +667,9 @@ const visitModules = (
622
667
  const blockModules = getBlockModules(block, chunkGroupInfo.runtime);
623
668
 
624
669
  if (blockModules !== undefined) {
625
- const { minAvailableModules } = chunkGroupInfo;
670
+ const minAvailableModules =
671
+ /** @type {bigint} */
672
+ (chunkGroupInfo.minAvailableModules);
626
673
  // Buffer items because order need to be reversed to get indices correct
627
674
  // Traverse all referenced modules
628
675
  for (let i = 0, len = blockModules.length; i < len; i += 3) {
@@ -770,7 +817,7 @@ const visitModules = (
770
817
  // We connect Module and Chunk
771
818
  chunkGraph.connectChunkAndModule(chunk, module);
772
819
  const moduleOrdinal = getModuleOrdinal(module);
773
- let chunkMask = maskByChunk.get(chunk);
820
+ let chunkMask = /** @type {bigint} */ (maskByChunk.get(chunk));
774
821
  chunkMask |= ONE_BIGINT << BigInt(moduleOrdinal);
775
822
  maskByChunk.set(chunk, chunkMask);
776
823
  }
@@ -837,11 +884,13 @@ const visitModules = (
837
884
  if (chunkGroupInfo.resultingAvailableModules !== undefined)
838
885
  return chunkGroupInfo.resultingAvailableModules;
839
886
 
840
- let resultingAvailableModules = chunkGroupInfo.minAvailableModules;
887
+ let resultingAvailableModules = /** @type {bigint} */ (
888
+ chunkGroupInfo.minAvailableModules
889
+ );
841
890
 
842
891
  // add the modules from the chunk group to the set
843
892
  for (const chunk of chunkGroupInfo.chunkGroup.chunks) {
844
- const mask = maskByChunk.get(chunk);
893
+ const mask = /** @type {bigint} */ (maskByChunk.get(chunk));
845
894
  resultingAvailableModules |= mask;
846
895
  }
847
896
 
@@ -986,7 +1035,8 @@ const visitModules = (
986
1035
  const ordinal = getModuleOrdinal(module);
987
1036
  info.skippedModuleConnections.delete(entry);
988
1037
  if (isOrdinalSetInMask(minAvailableModules, ordinal)) {
989
- info.skippedItems.add(module);
1038
+ /** @type {NonNullable<ChunkGroupInfo["skippedItems"]>} */
1039
+ (info.skippedItems).add(module);
990
1040
  continue;
991
1041
  }
992
1042
  }
@@ -1079,13 +1129,11 @@ const visitModules = (
1079
1129
  let preOrderIndex = 0;
1080
1130
  let postOrderIndex = 0;
1081
1131
 
1132
+ /**
1133
+ * @param {DependenciesBlock} current current
1134
+ * @param {BlocksWithNestedBlocks} visited visited dependencies blocks
1135
+ */
1082
1136
  const process = (current, visited) => {
1083
- if (visited.has(current)) {
1084
- return;
1085
- }
1086
-
1087
- visited.add(current);
1088
-
1089
1137
  const blockModules = getBlockModules(current, runtime);
1090
1138
  if (blockModules === undefined) {
1091
1139
  return;
@@ -1099,6 +1147,11 @@ const visitModules = (
1099
1147
  continue;
1100
1148
  }
1101
1149
  const refModule = /** @type {Module} */ (blockModules[i]);
1150
+ if (visited.has(refModule)) {
1151
+ continue;
1152
+ }
1153
+
1154
+ visited.add(refModule);
1102
1155
 
1103
1156
  if (refModule) {
1104
1157
  chunkGroup.setModulePreOrderIndex(refModule, preOrderIndex++);
@@ -1128,9 +1181,9 @@ const visitModules = (
1128
1181
  /**
1129
1182
  *
1130
1183
  * @param {Compilation} compilation the compilation
1131
- * @param {Set<DependenciesBlock>} blocksWithNestedBlocks flag for blocks that have nested blocks
1132
- * @param {Map<AsyncDependenciesBlock, BlockChunkGroupConnection[]>} blockConnections connection for blocks
1133
- * @param {Map<Chunk, bigint>} maskByChunk mapping from chunk to module mask
1184
+ * @param {BlocksWithNestedBlocks} blocksWithNestedBlocks flag for blocks that have nested blocks
1185
+ * @param {BlockConnections} blockConnections connection for blocks
1186
+ * @param {MaskByChunk} maskByChunk mapping from chunk to module mask
1134
1187
  */
1135
1188
  const connectChunkGroups = (
1136
1189
  compilation,
@@ -1149,7 +1202,7 @@ const connectChunkGroups = (
1149
1202
  */
1150
1203
  const areModulesAvailable = (chunkGroup, availableModules) => {
1151
1204
  for (const chunk of chunkGroup.chunks) {
1152
- const chunkMask = maskByChunk.get(chunk);
1205
+ const chunkMask = /** @type {bigint} */ (maskByChunk.get(chunk));
1153
1206
  if ((chunkMask & availableModules) !== chunkMask) return false;
1154
1207
  }
1155
1208
  return true;
@@ -1169,7 +1222,7 @@ const connectChunkGroups = (
1169
1222
  connections.every(({ chunkGroup, originChunkGroupInfo }) =>
1170
1223
  areModulesAvailable(
1171
1224
  chunkGroup,
1172
- originChunkGroupInfo.resultingAvailableModules
1225
+ /** @type {bigint} */ (originChunkGroupInfo.resultingAvailableModules)
1173
1226
  )
1174
1227
  )
1175
1228
  ) {
@@ -1215,7 +1268,7 @@ const cleanupUnconnectedGroups = (compilation, allCreatedChunkGroups) => {
1215
1268
  /**
1216
1269
  * This method creates the Chunk graph from the Module graph
1217
1270
  * @param {Compilation} compilation the compilation
1218
- * @param {Map<Entrypoint, Module[]>} inputEntrypointsAndModules chunk groups which are processed with the modules
1271
+ * @param {InputEntrypointsAndModules} inputEntrypointsAndModules chunk groups which are processed with the modules
1219
1272
  * @returns {void}
1220
1273
  */
1221
1274
  const buildChunkGraph = (compilation, inputEntrypointsAndModules) => {
@@ -1223,19 +1276,19 @@ const buildChunkGraph = (compilation, inputEntrypointsAndModules) => {
1223
1276
 
1224
1277
  // SHARED STATE
1225
1278
 
1226
- /** @type {Map<AsyncDependenciesBlock, BlockChunkGroupConnection[]>} */
1279
+ /** @type {BlockConnections} */
1227
1280
  const blockConnections = new Map();
1228
1281
 
1229
- /** @type {Set<ChunkGroup>} */
1282
+ /** @type {AllCreatedChunkGroups} */
1230
1283
  const allCreatedChunkGroups = new Set();
1231
1284
 
1232
- /** @type {Map<ChunkGroup, ChunkGroupInfo>} */
1285
+ /** @type {ChunkGroupInfoMap} */
1233
1286
  const chunkGroupInfoMap = new Map();
1234
1287
 
1235
- /** @type {Set<DependenciesBlock>} */
1288
+ /** @type {BlocksWithNestedBlocks} */
1236
1289
  const blocksWithNestedBlocks = new Set();
1237
1290
 
1238
- /** @type {Map<Chunk, bigint>} */
1291
+ /** @type {MaskByChunk} */
1239
1292
  const maskByChunk = new Map();
1240
1293
 
1241
1294
  // PART ONE
@@ -9,12 +9,13 @@ const Cache = require("../Cache");
9
9
  const ProgressPlugin = require("../ProgressPlugin");
10
10
 
11
11
  /** @typedef {import("../Compiler")} Compiler */
12
+ /** @typedef {import("./PackFileCacheStrategy")} PackFileCacheStrategy */
12
13
 
13
14
  const BUILD_DEPENDENCIES_KEY = Symbol();
14
15
 
15
16
  class IdleFileCachePlugin {
16
17
  /**
17
- * @param {TODO} strategy cache strategy
18
+ * @param {PackFileCacheStrategy} strategy cache strategy
18
19
  * @param {number} idleTimeout timeout
19
20
  * @param {number} idleTimeoutForInitialStore initial timeout
20
21
  * @param {number} idleTimeoutAfterLargeChanges timeout after changes
@@ -93,7 +94,9 @@ class IdleFileCachePlugin {
93
94
  { name: "IdleFileCachePlugin", stage: Cache.STAGE_DISK },
94
95
  dependencies => {
95
96
  pendingIdleTasks.set(BUILD_DEPENDENCIES_KEY, () =>
96
- strategy.storeBuildDependencies(dependencies)
97
+ Promise.resolve().then(() =>
98
+ strategy.storeBuildDependencies(dependencies)
99
+ )
97
100
  );
98
101
  }
99
102
  );
@@ -227,7 +230,9 @@ class IdleFileCachePlugin {
227
230
  compiler.hooks.done.tap("IdleFileCachePlugin", stats => {
228
231
  // 10% build overhead is ignored, as it's not cacheable
229
232
  timeSpendInBuild *= 0.9;
230
- timeSpendInBuild += stats.endTime - stats.startTime;
233
+ timeSpendInBuild +=
234
+ /** @type {number} */ (stats.endTime) -
235
+ /** @type {number} */ (stats.startTime);
231
236
  });
232
237
  }
233
238
  }
@@ -19,7 +19,7 @@ class MemoryCachePlugin {
19
19
  * @returns {void}
20
20
  */
21
21
  apply(compiler) {
22
- /** @type {Map<string, { etag: Etag | null, data: any }>} */
22
+ /** @type {Map<string, { etag: Etag | null, data: any } | null>} */
23
23
  const cache = new Map();
24
24
  compiler.cache.hooks.store.tap(
25
25
  { name: "MemoryCachePlugin", stage: Cache.STAGE_MEMORY },
@@ -13,6 +13,10 @@ const Cache = require("../Cache");
13
13
  /** @typedef {import("../Module")} Module */
14
14
 
15
15
  class MemoryWithGcCachePlugin {
16
+ /**
17
+ * @param {object} options Options
18
+ * @param {number} options.maxGenerations max generations
19
+ */
16
20
  constructor({ maxGenerations }) {
17
21
  this._maxGenerations = maxGenerations;
18
22
  }
@@ -23,9 +27,9 @@ class MemoryWithGcCachePlugin {
23
27
  */
24
28
  apply(compiler) {
25
29
  const maxGenerations = this._maxGenerations;
26
- /** @type {Map<string, { etag: Etag | null, data: any }>} */
30
+ /** @type {Map<string, { etag: Etag | null, data: any } | undefined | null>} */
27
31
  const cache = new Map();
28
- /** @type {Map<string, { entry: { etag: Etag | null, data: any }, until: number }>} */
32
+ /** @type {Map<string, { entry: { etag: Etag | null, data: any } | null, until: number }>} */
29
33
  const oldCache = new Map();
30
34
  let generation = 0;
31
35
  let cachePosition = 0;