webpack 5.93.0 → 5.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (344) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +33 -20
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +75 -68
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +6 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +41 -15
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +130 -69
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +21 -13
  94. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  95. package/lib/WatchIgnorePlugin.js +26 -9
  96. package/lib/Watching.js +10 -5
  97. package/lib/WebpackOptionsApply.js +84 -62
  98. package/lib/asset/AssetGenerator.js +107 -42
  99. package/lib/asset/AssetModulesPlugin.js +29 -23
  100. package/lib/asset/AssetSourceGenerator.js +2 -7
  101. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  102. package/lib/buildChunkGraph.js +93 -81
  103. package/lib/cache/IdleFileCachePlugin.js +4 -4
  104. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  105. package/lib/cache/PackFileCacheStrategy.js +51 -50
  106. package/lib/cache/ResolverCachePlugin.js +6 -6
  107. package/lib/cache/mergeEtags.js +16 -21
  108. package/lib/cli.js +148 -104
  109. package/lib/config/browserslistTargetHandler.js +16 -13
  110. package/lib/config/defaults.js +32 -28
  111. package/lib/config/normalization.js +335 -344
  112. package/lib/config/target.js +42 -52
  113. package/lib/container/ContainerEntryModule.js +2 -2
  114. package/lib/container/ContainerPlugin.js +1 -1
  115. package/lib/container/RemoteRuntimeModule.js +11 -8
  116. package/lib/container/options.js +18 -4
  117. package/lib/css/CssExportsGenerator.js +26 -24
  118. package/lib/css/CssGenerator.js +9 -4
  119. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  120. package/lib/css/CssModulesPlugin.js +127 -47
  121. package/lib/css/CssParser.js +20 -18
  122. package/lib/css/walkCssTokens.js +80 -95
  123. package/lib/debug/ProfilingPlugin.js +19 -20
  124. package/lib/dependencies/AMDDefineDependency.js +1 -1
  125. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  126. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  127. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  128. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  129. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  130. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  131. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  132. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  133. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  134. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  135. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  136. package/lib/dependencies/ConstDependency.js +1 -1
  137. package/lib/dependencies/ContextDependency.js +7 -2
  138. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  139. package/lib/dependencies/ContextElementDependency.js +35 -8
  140. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  141. package/lib/dependencies/CssExportDependency.js +7 -7
  142. package/lib/dependencies/CssImportDependency.js +0 -2
  143. package/lib/dependencies/CssLocalIdentifierDependency.js +3 -3
  144. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  145. package/lib/dependencies/CssUrlDependency.js +4 -5
  146. package/lib/dependencies/DynamicExports.js +5 -5
  147. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  148. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  149. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  150. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  151. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  152. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  153. package/lib/dependencies/HarmonyExports.js +2 -2
  154. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  155. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  156. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -15
  157. package/lib/dependencies/ImportDependency.js +1 -1
  158. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  159. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  160. package/lib/dependencies/ImportParserPlugin.js +39 -44
  161. package/lib/dependencies/JsonExportsDependency.js +22 -18
  162. package/lib/dependencies/LoaderPlugin.js +47 -36
  163. package/lib/dependencies/LocalModule.js +1 -1
  164. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  165. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  166. package/lib/dependencies/ProvidedDependency.js +1 -1
  167. package/lib/dependencies/PureExpressionDependency.js +6 -6
  168. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  169. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  170. package/lib/dependencies/SystemPlugin.js +1 -1
  171. package/lib/dependencies/URLDependency.js +3 -3
  172. package/lib/dependencies/URLPlugin.js +66 -12
  173. package/lib/dependencies/WorkerPlugin.js +25 -24
  174. package/lib/dependencies/processExportInfo.js +3 -1
  175. package/lib/electron/ElectronTargetPlugin.js +1 -0
  176. package/lib/esm/ModuleChunkFormatPlugin.js +3 -3
  177. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  178. package/lib/formatLocation.js +1 -2
  179. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  180. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  181. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  182. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  183. package/lib/hmr/lazyCompilationBackend.js +64 -40
  184. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  185. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  186. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  187. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  188. package/lib/ids/IdHelpers.js +29 -39
  189. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  190. package/lib/index.js +1 -5
  191. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -4
  192. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  193. package/lib/javascript/ChunkHelpers.js +1 -1
  194. package/lib/javascript/CommonJsChunkFormatPlugin.js +3 -2
  195. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  196. package/lib/javascript/JavascriptGenerator.js +23 -7
  197. package/lib/javascript/JavascriptModulesPlugin.js +133 -86
  198. package/lib/javascript/JavascriptParser.js +179 -200
  199. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  200. package/lib/javascript/StartupHelpers.js +41 -13
  201. package/lib/json/JsonGenerator.js +7 -13
  202. package/lib/json/JsonModulesPlugin.js +1 -4
  203. package/lib/json/JsonParser.js +5 -3
  204. package/lib/library/AmdLibraryPlugin.js +12 -16
  205. package/lib/library/AssignLibraryPlugin.js +8 -10
  206. package/lib/library/EnableLibraryPlugin.js +15 -14
  207. package/lib/library/JsonpLibraryPlugin.js +2 -1
  208. package/lib/library/ModernModuleLibraryPlugin.js +8 -6
  209. package/lib/library/ModuleLibraryPlugin.js +2 -1
  210. package/lib/library/SystemLibraryPlugin.js +2 -1
  211. package/lib/library/UmdLibraryPlugin.js +66 -92
  212. package/lib/logging/Logger.js +32 -4
  213. package/lib/logging/createConsoleLogger.js +12 -13
  214. package/lib/logging/runtime.js +7 -8
  215. package/lib/logging/truncateArgs.js +5 -8
  216. package/lib/node/NodeWatchFileSystem.js +3 -18
  217. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  218. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  219. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/nodeConsole.js +22 -22
  221. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  222. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  223. package/lib/optimize/ConcatenatedModule.js +81 -51
  224. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  225. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  226. package/lib/optimize/InnerGraph.js +17 -17
  227. package/lib/optimize/InnerGraphPlugin.js +8 -7
  228. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  229. package/lib/optimize/MangleExportsPlugin.js +1 -0
  230. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
  231. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  232. package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
  233. package/lib/optimize/RealContentHashPlugin.js +7 -10
  234. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  235. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  236. package/lib/optimize/SplitChunksPlugin.js +34 -30
  237. package/lib/performance/SizeLimitsPlugin.js +2 -2
  238. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  239. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  240. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  241. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  242. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  243. package/lib/rules/RuleSetCompiler.js +41 -22
  244. package/lib/rules/UseEffectRulePlugin.js +36 -32
  245. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  246. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  247. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  248. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  249. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  250. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  251. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  252. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  253. package/lib/schemes/DataUriPlugin.js +1 -1
  254. package/lib/schemes/HttpUriPlugin.js +241 -126
  255. package/lib/serialization/BinaryMiddleware.js +44 -28
  256. package/lib/serialization/DateObjectSerializer.js +1 -0
  257. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  258. package/lib/serialization/FileMiddleware.js +154 -106
  259. package/lib/serialization/MapObjectSerializer.js +2 -1
  260. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  261. package/lib/serialization/ObjectMiddleware.js +52 -56
  262. package/lib/serialization/PlainObjectSerializer.js +32 -6
  263. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  264. package/lib/serialization/Serializer.js +4 -5
  265. package/lib/serialization/SerializerMiddleware.js +6 -6
  266. package/lib/serialization/SetObjectSerializer.js +2 -1
  267. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  268. package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
  269. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  270. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  271. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  272. package/lib/sharing/utils.js +15 -27
  273. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  274. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  275. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  276. package/lib/stats/StatsFactory.js +127 -56
  277. package/lib/stats/StatsPrinter.js +75 -44
  278. package/lib/util/ArrayHelpers.js +8 -4
  279. package/lib/util/ArrayQueue.js +1 -1
  280. package/lib/util/AsyncQueue.js +31 -12
  281. package/lib/util/IterableHelpers.js +3 -4
  282. package/lib/util/LazyBucketSortedSet.js +60 -44
  283. package/lib/util/LazySet.js +13 -0
  284. package/lib/util/MapHelpers.js +1 -3
  285. package/lib/util/ParallelismFactorCalculator.js +1 -1
  286. package/lib/util/Queue.js +1 -1
  287. package/lib/util/Semaphore.js +4 -7
  288. package/lib/util/SetHelpers.js +5 -5
  289. package/lib/util/SortableSet.js +4 -3
  290. package/lib/util/StackedCacheMap.js +4 -6
  291. package/lib/util/StackedMap.js +1 -3
  292. package/lib/util/StringXor.js +0 -5
  293. package/lib/util/TupleQueue.js +1 -1
  294. package/lib/util/TupleSet.js +15 -5
  295. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  296. package/lib/util/WeakTupleMap.js +19 -21
  297. package/lib/util/binarySearchBounds.js +5 -12
  298. package/lib/util/chainedImports.js +1 -1
  299. package/lib/util/cleverMerge.js +21 -19
  300. package/lib/util/comparators.js +57 -52
  301. package/lib/util/compileBooleanMatcher.js +3 -6
  302. package/lib/util/conventions.js +8 -11
  303. package/lib/util/createHash.js +9 -6
  304. package/lib/util/deprecation.js +22 -12
  305. package/lib/util/deterministicGrouping.js +19 -26
  306. package/lib/util/findGraphRoots.js +2 -2
  307. package/lib/util/fs.js +32 -32
  308. package/lib/util/hash/md4.js +2 -2
  309. package/lib/util/hash/wasm-hash.js +7 -7
  310. package/lib/util/hash/xxhash64.js +2 -2
  311. package/lib/util/identifier.js +81 -59
  312. package/lib/util/memoize.js +8 -10
  313. package/lib/util/mergeScope.js +6 -9
  314. package/lib/util/nonNumericOnlyHash.js +2 -2
  315. package/lib/util/numberHash.js +1 -6
  316. package/lib/util/objectToMap.js +0 -1
  317. package/lib/util/propertyAccess.js +2 -5
  318. package/lib/util/propertyName.js +1 -3
  319. package/lib/util/registerExternalSerializer.js +1 -1
  320. package/lib/util/runtime.js +109 -113
  321. package/lib/util/semver.js +29 -27
  322. package/lib/util/serialization.js +16 -1
  323. package/lib/util/smartGrouping.js +5 -5
  324. package/lib/util/source.js +1 -1
  325. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  326. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  327. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  328. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  329. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  330. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  331. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  333. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  334. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  335. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  336. package/package.json +18 -17
  337. package/schemas/WebpackOptions.check.js +1 -1
  338. package/schemas/WebpackOptions.json +5 -0
  339. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  340. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  341. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  342. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  343. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  344. package/types.d.ts +681 -355
package/lib/Compiler.js CHANGED
@@ -14,7 +14,7 @@ const {
14
14
  AsyncSeriesHook
15
15
  } = require("tapable");
16
16
  const { SizeOnlySource } = require("webpack-sources");
17
- const webpack = require("./");
17
+ const webpack = require(".");
18
18
  const Cache = require("./Cache");
19
19
  const CacheFacade = require("./CacheFacade");
20
20
  const ChunkGraph = require("./ChunkGraph");
@@ -47,13 +47,18 @@ const { isSourceEqual } = require("./util/source");
47
47
  /** @typedef {import("./Module").BuildInfo} BuildInfo */
48
48
  /** @typedef {import("./config/target").PlatformTargetProperties} PlatformTargetProperties */
49
49
  /** @typedef {import("./logging/createConsoleLogger").LoggingFunction} LoggingFunction */
50
- /** @typedef {import("./util/WeakTupleMap")} WeakTupleMap */
51
50
  /** @typedef {import("./util/fs").IStats} IStats */
52
51
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
53
52
  /** @typedef {import("./util/fs").IntermediateFileSystem} IntermediateFileSystem */
54
53
  /** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
55
54
  /** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
56
55
 
56
+ /**
57
+ * @template {any[]} T
58
+ * @template V
59
+ * @typedef {import("./util/WeakTupleMap")<T, V>} WeakTupleMap
60
+ */
61
+
57
62
  /**
58
63
  * @typedef {object} CompilationParams
59
64
  * @property {NormalModuleFactory} normalModuleFactory
@@ -127,9 +132,8 @@ const includesHash = (filename, hashes) => {
127
132
  if (!hashes) return false;
128
133
  if (Array.isArray(hashes)) {
129
134
  return hashes.some(hash => filename.includes(hash));
130
- } else {
131
- return filename.includes(hashes);
132
135
  }
136
+ return filename.includes(hashes);
133
137
  };
134
138
 
135
139
  class Compiler {
@@ -197,7 +201,7 @@ class Compiler {
197
201
  /** @type {AsyncSeriesHook<[]>} */
198
202
  shutdown: new AsyncSeriesHook([]),
199
203
 
200
- /** @type {SyncBailHook<[string, string, any[]], true>} */
204
+ /** @type {SyncBailHook<[string, string, any[] | undefined], true>} */
201
205
  infrastructureLog: new SyncBailHook(["origin", "type", "args"]),
202
206
 
203
207
  // TODO the following hooks are weirdly located here
@@ -284,7 +288,7 @@ class Compiler {
284
288
 
285
289
  this.cache = new Cache();
286
290
 
287
- /** @type {Map<Module, { buildInfo: BuildInfo, references: References | undefined, memCache: WeakTupleMap }> | undefined} */
291
+ /** @type {Map<Module, { buildInfo: BuildInfo, references: References | undefined, memCache: WeakTupleMap<any, any> }> | undefined} */
288
292
  this.moduleMemCaches = undefined;
289
293
 
290
294
  this.compilerPath = "";
@@ -354,10 +358,11 @@ class Compiler {
354
358
  );
355
359
  }
356
360
  }
357
- if (this.hooks.infrastructureLog.call(name, type, args) === undefined) {
358
- if (this.infrastructureLogger !== undefined) {
359
- this.infrastructureLogger(name, type, args);
360
- }
361
+ if (
362
+ this.hooks.infrastructureLog.call(name, type, args) === undefined &&
363
+ this.infrastructureLogger !== undefined
364
+ ) {
365
+ this.infrastructureLogger(name, type, args);
361
366
  }
362
367
  },
363
368
  childName => {
@@ -382,36 +387,33 @@ class Compiler {
382
387
  }
383
388
  return `${name}/${childName}`;
384
389
  });
385
- } else {
386
- return this.getInfrastructureLogger(() => {
387
- if (typeof name === "function") {
388
- name = name();
389
- if (!name) {
390
- throw new TypeError(
391
- "Compiler.getInfrastructureLogger(name) called with a function not returning a name"
392
- );
393
- }
394
- }
395
- return `${name}/${childName}`;
396
- });
397
390
  }
398
- } else {
399
- if (typeof childName === "function") {
400
- return this.getInfrastructureLogger(() => {
401
- if (typeof childName === "function") {
402
- childName = childName();
403
- if (!childName) {
404
- throw new TypeError(
405
- "Logger.getChildLogger(name) called with a function not returning a name"
406
- );
407
- }
391
+ return this.getInfrastructureLogger(() => {
392
+ if (typeof name === "function") {
393
+ name = name();
394
+ if (!name) {
395
+ throw new TypeError(
396
+ "Compiler.getInfrastructureLogger(name) called with a function not returning a name"
397
+ );
408
398
  }
409
- return `${name}/${childName}`;
410
- });
411
- } else {
412
- return this.getInfrastructureLogger(`${name}/${childName}`);
413
- }
399
+ }
400
+ return `${name}/${childName}`;
401
+ });
402
+ }
403
+ if (typeof childName === "function") {
404
+ return this.getInfrastructureLogger(() => {
405
+ if (typeof childName === "function") {
406
+ childName = childName();
407
+ if (!childName) {
408
+ throw new TypeError(
409
+ "Logger.getChildLogger(name) called with a function not returning a name"
410
+ );
411
+ }
412
+ }
413
+ return `${name}/${childName}`;
414
+ });
414
415
  }
416
+ return this.getInfrastructureLogger(`${name}/${childName}`);
415
417
  }
416
418
  );
417
419
  }
@@ -623,11 +625,11 @@ class Compiler {
623
625
  const finalCallback = (err, entries, compilation) => {
624
626
  try {
625
627
  callback(err, entries, compilation);
626
- } catch (e) {
628
+ } catch (runAsChildErr) {
627
629
  const err = new WebpackError(
628
- `compiler.runAsChild callback error: ${e}`
630
+ `compiler.runAsChild callback error: ${runAsChildErr}`
629
631
  );
630
- err.details = /** @type {Error} */ (e).stack;
632
+ err.details = /** @type {Error} */ (runAsChildErr).stack;
631
633
  /** @type {Compilation} */
632
634
  (this.parentCompilation).errors.push(err);
633
635
  }
@@ -765,18 +767,17 @@ ${other}`);
765
767
  callback(err);
766
768
  }
767
769
  return true;
768
- } else {
769
- caseInsensitiveMap.set(
770
- caseInsensitiveTargetPath,
771
- (similarEntry = /** @type {SimilarEntry} */ ({
772
- path: targetPath,
773
- source,
774
- size: undefined,
775
- waiting: undefined
776
- }))
777
- );
778
- return false;
779
770
  }
771
+ caseInsensitiveMap.set(
772
+ caseInsensitiveTargetPath,
773
+ (similarEntry = /** @type {SimilarEntry} */ ({
774
+ path: targetPath,
775
+ source,
776
+ size: undefined,
777
+ waiting: undefined
778
+ }))
779
+ );
780
+ return false;
780
781
  };
781
782
 
782
783
  /**
@@ -786,14 +787,12 @@ ${other}`);
786
787
  const getContent = () => {
787
788
  if (typeof source.buffer === "function") {
788
789
  return source.buffer();
789
- } else {
790
- const bufferOrString = source.source();
791
- if (Buffer.isBuffer(bufferOrString)) {
792
- return bufferOrString;
793
- } else {
794
- return Buffer.from(bufferOrString, "utf8");
795
- }
796
790
  }
791
+ const bufferOrString = source.source();
792
+ if (Buffer.isBuffer(bufferOrString)) {
793
+ return bufferOrString;
794
+ }
795
+ return Buffer.from(bufferOrString, "utf8");
797
796
  };
798
797
 
799
798
  const alreadyWritten = () => {
@@ -917,9 +916,8 @@ ${other}`);
917
916
  !content.equals(/** @type {Buffer} */ (existingContent))
918
917
  ) {
919
918
  return doWrite(content);
920
- } else {
921
- return alreadyWritten();
922
919
  }
920
+ return alreadyWritten();
923
921
  });
924
922
  }
925
923
 
@@ -956,10 +954,9 @@ ${other}`);
956
954
  });
957
955
 
958
956
  return callback();
959
- } else {
960
- // Settings immutable will make it accept file content without comparing when file exist
961
- immutable = true;
962
957
  }
958
+ // Settings immutable will make it accept file content without comparing when file exist
959
+ immutable = true;
963
960
  } else if (!immutable) {
964
961
  if (checkSimilarFile()) return;
965
962
  // We wrote to this file before which has very likely a different content
@@ -986,7 +983,7 @@ ${other}`);
986
983
  }
987
984
  };
988
985
 
989
- if (targetFile.match(/\/|\\/)) {
986
+ if (/\/|\\/.test(targetFile)) {
990
987
  const fs = /** @type {OutputFileSystem} */ (this.outputFileSystem);
991
988
  const dir = dirname(fs, join(fs, outputPath, targetFile));
992
989
  mkdirp(fs, dir, writeOut);
@@ -1041,12 +1038,10 @@ ${other}`);
1041
1038
  } else {
1042
1039
  this.hooks.emitRecords.callAsync(callback);
1043
1040
  }
1041
+ } else if (this.recordsOutputPath) {
1042
+ this._emitRecords(callback);
1044
1043
  } else {
1045
- if (this.recordsOutputPath) {
1046
- this._emitRecords(callback);
1047
- } else {
1048
- callback();
1049
- }
1044
+ callback();
1050
1045
  }
1051
1046
  }
1052
1047
 
@@ -1115,13 +1110,11 @@ ${other}`);
1115
1110
  this.records = {};
1116
1111
  this.hooks.readRecords.callAsync(callback);
1117
1112
  }
1113
+ } else if (this.recordsInputPath) {
1114
+ this._readRecords(callback);
1118
1115
  } else {
1119
- if (this.recordsInputPath) {
1120
- this._readRecords(callback);
1121
- } else {
1122
- this.records = {};
1123
- callback();
1124
- }
1116
+ this.records = {};
1117
+ callback();
1125
1118
  }
1126
1119
  }
1127
1120
 
@@ -1150,10 +1143,10 @@ ${other}`);
1150
1143
  this.records = parseJson(
1151
1144
  /** @type {Buffer} */ (content).toString("utf-8")
1152
1145
  );
1153
- } catch (e) {
1146
+ } catch (parseErr) {
1154
1147
  return callback(
1155
1148
  new Error(
1156
- `Cannot parse records: ${/** @type {Error} */ (e).message}`
1149
+ `Cannot parse records: ${/** @type {Error} */ (parseErr).message}`
1157
1150
  )
1158
1151
  );
1159
1152
  }
@@ -1233,11 +1226,17 @@ ${other}`);
1233
1226
  "invalid",
1234
1227
  "done",
1235
1228
  "thisCompilation"
1236
- ].includes(name)
1229
+ ].includes(name) &&
1230
+ childCompiler.hooks[/** @type {keyof Compiler["hooks"]} */ (name)]
1237
1231
  ) {
1238
- if (childCompiler.hooks[name]) {
1239
- childCompiler.hooks[name].taps = this.hooks[name].taps.slice();
1240
- }
1232
+ childCompiler.hooks[
1233
+ /** @type {keyof Compiler["hooks"]} */
1234
+ (name)
1235
+ ].taps =
1236
+ this.hooks[
1237
+ /** @type {keyof Compiler["hooks"]} */
1238
+ (name)
1239
+ ].taps.slice();
1241
1240
  }
1242
1241
  }
1243
1242
 
@@ -1251,7 +1250,7 @@ ${other}`);
1251
1250
  }
1252
1251
 
1253
1252
  isChild() {
1254
- return !!this.parentCompilation;
1253
+ return Boolean(this.parentCompilation);
1255
1254
  }
1256
1255
 
1257
1256
  /**
@@ -64,7 +64,6 @@ class ConcatenationScope {
64
64
  }
65
65
 
66
66
  /**
67
- *
68
67
  * @param {string} exportName name of the export
69
68
  * @param {string} symbol identifier of the export in source code
70
69
  */
@@ -78,7 +77,6 @@ class ConcatenationScope {
78
77
  }
79
78
 
80
79
  /**
81
- *
82
80
  * @param {string} exportName name of the export
83
81
  * @param {string} expression expression to be used
84
82
  */
@@ -99,7 +97,6 @@ class ConcatenationScope {
99
97
  }
100
98
 
101
99
  /**
102
- *
103
100
  * @param {Module} module the referenced module
104
101
  * @param {Partial<ModuleReferenceOptions>} options options
105
102
  * @returns {string} the reference as identifier
@@ -138,7 +135,7 @@ class ConcatenationScope {
138
135
  static matchModuleReference(name) {
139
136
  const match = MODULE_REFERENCE_REGEXP.exec(name);
140
137
  if (!match) return null;
141
- const index = +match[1];
138
+ const index = Number(match[1]);
142
139
  const asiSafe = match[5];
143
140
  return {
144
141
  index,
@@ -146,8 +143,8 @@ class ConcatenationScope {
146
143
  match[2] === "ns"
147
144
  ? []
148
145
  : JSON.parse(Buffer.from(match[2], "hex").toString("utf-8")),
149
- call: !!match[3],
150
- directImport: !!match[4],
146
+ call: Boolean(match[3]),
147
+ directImport: Boolean(match[4]),
151
148
  asiSafe: asiSafe ? asiSafe === "1" : undefined
152
149
  };
153
150
  }
@@ -27,13 +27,12 @@ const wrapInCondition = (condition, source) => {
27
27
  "}",
28
28
  ""
29
29
  ]);
30
- } else {
31
- return new ConcatSource(
32
- `if (${condition}) {\n`,
33
- new PrefixSource("\t", source),
34
- "}\n"
35
- );
36
30
  }
31
+ return new ConcatSource(
32
+ `if (${condition}) {\n`,
33
+ new PrefixSource("\t", source),
34
+ "}\n"
35
+ );
37
36
  };
38
37
 
39
38
  /**
@@ -54,7 +53,7 @@ class ConditionalInitFragment extends InitFragment {
54
53
  position,
55
54
  key,
56
55
  runtimeCondition = true,
57
- endContent
56
+ endContent = undefined
58
57
  ) {
59
58
  super(content, stage, position, key, endContent);
60
59
  this.runtimeCondition = runtimeCondition;
@@ -207,21 +207,13 @@ class ConstPlugin {
207
207
  // NOTE: When code runs in strict mode, `var` declarations
208
208
  // are hoisted but `function` declarations don't.
209
209
  //
210
- let declarations;
211
- if (parser.scope.isStrict) {
212
- // If the code runs in strict mode, variable declarations
213
- // using `var` must be hoisted.
214
- declarations = getHoistedDeclarations(branchToRemove, false);
215
- } else {
216
- // Otherwise, collect all hoisted declaration.
217
- declarations = getHoistedDeclarations(branchToRemove, true);
218
- }
219
- let replacement;
220
- if (declarations.length > 0) {
221
- replacement = `{ var ${declarations.join(", ")}; }`;
222
- } else {
223
- replacement = "{}";
224
- }
210
+ const declarations = parser.scope.isStrict
211
+ ? getHoistedDeclarations(branchToRemove, false)
212
+ : getHoistedDeclarations(branchToRemove, true);
213
+ const replacement =
214
+ declarations.length > 0
215
+ ? `{ var ${declarations.join(", ")}; }`
216
+ : "{}";
225
217
  const dep = new ConstDependency(
226
218
  replacement,
227
219
  /** @type {Range} */ (branchToRemove.range)
@@ -22,9 +22,9 @@ class ContextExclusionPlugin {
22
22
  */
23
23
  apply(compiler) {
24
24
  compiler.hooks.contextModuleFactory.tap("ContextExclusionPlugin", cmf => {
25
- cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files => {
26
- return files.filter(filePath => !this.negativeMatcher.test(filePath));
27
- });
25
+ cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files =>
26
+ files.filter(filePath => !this.negativeMatcher.test(filePath))
27
+ );
28
28
  });
29
29
  }
30
30
  }
@@ -30,6 +30,7 @@ const makeSerializable = require("./util/makeSerializable");
30
30
  /** @typedef {import("webpack-sources").Source} Source */
31
31
  /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
32
32
  /** @typedef {import("./Chunk")} Chunk */
33
+ /** @typedef {import("./Chunk").ChunkId} ChunkId */
33
34
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
34
35
  /** @typedef {import("./ChunkGraph").ModuleId} ModuleId */
35
36
  /** @typedef {import("./ChunkGroup").RawChunkGroupOptions} RawChunkGroupOptions */
@@ -86,7 +87,7 @@ const makeSerializable = require("./util/makeSerializable");
86
87
 
87
88
  /**
88
89
  * @callback ResolveDependenciesCallback
89
- * @param {(Error | null)=} err
90
+ * @param {Error | null} err
90
91
  * @param {ContextElementDependency[]=} dependencies
91
92
  */
92
93
 
@@ -99,7 +100,7 @@ const makeSerializable = require("./util/makeSerializable");
99
100
 
100
101
  /** @typedef {1 | 3 | 7 | 9} FakeMapType */
101
102
 
102
- /** @typedef {Map<string, string | number> | FakeMapType} FakeMap */
103
+ /** @typedef {Record<ModuleId, FakeMapType>} FakeMap */
103
104
 
104
105
  const SNAPSHOT_OPTIONS = { timestamp: true };
105
106
 
@@ -192,7 +193,7 @@ class ContextModule extends Module {
192
193
  _prettyRegExp(regexString, stripSlash = true) {
193
194
  const str = stripSlash
194
195
  ? regexString.source + regexString.flags
195
- : regexString + "";
196
+ : `${regexString}`;
196
197
  return str.replace(/!/g, "%21").replace(/\|/g, "%7C");
197
198
  }
198
199
 
@@ -272,15 +273,15 @@ class ContextModule extends Module {
272
273
  readableIdentifier(requestShortener) {
273
274
  let identifier;
274
275
  if (this.context) {
275
- identifier = requestShortener.shorten(this.context) + "/";
276
+ identifier = `${requestShortener.shorten(this.context)}/`;
276
277
  } else if (
277
278
  typeof this.options.resource === "string" ||
278
279
  this.options.resource === false
279
280
  ) {
280
- identifier = requestShortener.shorten(`${this.options.resource}`) + "/";
281
+ identifier = `${requestShortener.shorten(`${this.options.resource}`)}/`;
281
282
  } else {
282
283
  identifier = this.options.resource
283
- .map(r => requestShortener.shorten(r) + "/")
284
+ .map(r => `${requestShortener.shorten(r)}/`)
284
285
  .join(" ");
285
286
  }
286
287
  if (this.options.resourceQuery) {
@@ -565,7 +566,7 @@ class ContextModule extends Module {
565
566
  } else if (typeof this.options.resource === "string") {
566
567
  contextDependencies.add(this.options.resource);
567
568
  } else if (this.options.resource === false) {
568
- return;
569
+ // Do nothing
569
570
  } else {
570
571
  for (const res of this.options.resource) contextDependencies.add(res);
571
572
  }
@@ -602,7 +603,7 @@ class ContextModule extends Module {
602
603
  /**
603
604
  * @param {Dependency[]} dependencies all dependencies
604
605
  * @param {ChunkGraph} chunkGraph chunk graph
605
- * @returns {FakeMap} fake map
606
+ * @returns {FakeMap | FakeMapType} fake map
606
607
  */
607
608
  getFakeMap(dependencies, chunkGraph) {
608
609
  if (!this.options.namespaceObject) {
@@ -621,13 +622,14 @@ class ContextModule extends Module {
621
622
  )
622
623
  .filter(Boolean)
623
624
  .sort(comparator);
625
+ /** @type {FakeMap} */
624
626
  const fakeMap = Object.create(null);
625
627
  for (const module of sortedModules) {
626
628
  const exportsType = module.getExportsType(
627
629
  moduleGraph,
628
630
  this.options.namespaceObject === "strict"
629
631
  );
630
- const id = chunkGraph.getModuleId(module);
632
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
631
633
  switch (exportsType) {
632
634
  case "namespace":
633
635
  fakeMap[id] = 9;
@@ -668,7 +670,7 @@ class ContextModule extends Module {
668
670
  }
669
671
 
670
672
  /**
671
- * @param {FakeMap} fakeMap fake map
673
+ * @param {FakeMap | FakeMapType} fakeMap fake map
672
674
  * @returns {string} fake map init statement
673
675
  */
674
676
  getFakeMapInitStatement(fakeMap) {
@@ -692,7 +694,7 @@ class ContextModule extends Module {
692
694
  }
693
695
 
694
696
  /**
695
- * @param {FakeMap} fakeMap fake map
697
+ * @param {FakeMap | FakeMapType} fakeMap fake map
696
698
  * @param {boolean=} asyncModule us async module
697
699
  * @param {string=} fakeMapDataExpression fake map data expression
698
700
  * @returns {string} module object source
@@ -944,15 +946,19 @@ module.exports = webpackAsyncContext;`;
944
946
  chunkGraph
945
947
  );
946
948
  const hasFakeMap = typeof fakeMap === "object";
949
+ /** @typedef {{userRequest: string, dependency: ContextElementDependency, chunks: undefined | Chunk[], module: Module, block: AsyncDependenciesBlock}} Item */
950
+ /**
951
+ * @type {Item[]}
952
+ */
947
953
  const items = blocks
948
954
  .map(block => {
949
955
  const dependency =
950
956
  /** @type {ContextElementDependency} */
951
957
  (block.dependencies[0]);
952
958
  return {
953
- dependency: dependency,
959
+ dependency,
954
960
  module: /** @type {Module} */ (moduleGraph.getModule(dependency)),
955
- block: block,
961
+ block,
956
962
  userRequest: dependency.userRequest,
957
963
  chunks: undefined
958
964
  };
@@ -974,18 +980,23 @@ module.exports = webpackAsyncContext;`;
974
980
  if (a.userRequest === b.userRequest) return 0;
975
981
  return a.userRequest < b.userRequest ? -1 : 1;
976
982
  });
983
+ /** @type {Record<string, ModuleId | (ModuleId[] | ChunkId[])>} */
977
984
  const map = Object.create(null);
978
985
  for (const item of sortedItems) {
979
- const moduleId = chunkGraph.getModuleId(item.module);
986
+ const moduleId =
987
+ /** @type {ModuleId} */
988
+ (chunkGraph.getModuleId(item.module));
980
989
  if (shortMode) {
981
990
  map[item.userRequest] = moduleId;
982
991
  } else {
992
+ /** @type {(ModuleId | ChunkId)[]} */
983
993
  const arrayStart = [moduleId];
984
994
  if (hasFakeMap) {
985
995
  arrayStart.push(fakeMap[moduleId]);
986
996
  }
987
997
  map[item.userRequest] = arrayStart.concat(
988
- item.chunks.map(chunk => chunk.id)
998
+ /** @type {Chunk[]} */
999
+ (item.chunks).map(chunk => /** @type {ChunkId} */ (chunk.id))
989
1000
  );
990
1001
  }
991
1002
  }
@@ -1086,7 +1097,7 @@ module.exports = webpackEmptyAsyncContext;`;
1086
1097
  * @returns {string} the source code
1087
1098
  */
1088
1099
  getSourceString(asyncMode, { runtimeTemplate, chunkGraph }) {
1089
- const id = chunkGraph.getModuleId(this);
1100
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(this));
1090
1101
  if (asyncMode === "lazy") {
1091
1102
  if (this.blocks && this.blocks.length > 0) {
1092
1103
  return this.getLazySource(this.blocks, id, {
@@ -1124,10 +1135,12 @@ module.exports = webpackEmptyAsyncContext;`;
1124
1135
  }
1125
1136
  return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
1126
1137
  }
1127
- if (asyncMode === "weak") {
1128
- if (this.dependencies && this.dependencies.length > 0) {
1129
- return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
1130
- }
1138
+ if (
1139
+ asyncMode === "weak" &&
1140
+ this.dependencies &&
1141
+ this.dependencies.length > 0
1142
+ ) {
1143
+ return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
1131
1144
  }
1132
1145
  if (this.dependencies && this.dependencies.length > 0) {
1133
1146
  return this.getSyncSource(this.dependencies, id, chunkGraph);