webpack 5.92.1 → 5.94.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 (350) 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 +36 -21
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +76 -69
  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 +5 -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 +104 -64
  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 +132 -70
  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 +12 -10
  94. package/lib/UseStrictPlugin.js +8 -1
  95. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  96. package/lib/WatchIgnorePlugin.js +26 -9
  97. package/lib/Watching.js +10 -5
  98. package/lib/WebpackOptionsApply.js +89 -62
  99. package/lib/asset/AssetGenerator.js +107 -42
  100. package/lib/asset/AssetModulesPlugin.js +29 -23
  101. package/lib/asset/AssetSourceGenerator.js +2 -7
  102. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  103. package/lib/buildChunkGraph.js +14 -19
  104. package/lib/cache/IdleFileCachePlugin.js +4 -4
  105. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  106. package/lib/cache/PackFileCacheStrategy.js +51 -50
  107. package/lib/cache/ResolverCachePlugin.js +6 -6
  108. package/lib/cache/mergeEtags.js +16 -21
  109. package/lib/cli.js +148 -104
  110. package/lib/config/browserslistTargetHandler.js +16 -13
  111. package/lib/config/defaults.js +31 -28
  112. package/lib/config/normalization.js +335 -344
  113. package/lib/config/target.js +42 -52
  114. package/lib/container/ContainerEntryModule.js +2 -2
  115. package/lib/container/ContainerPlugin.js +1 -1
  116. package/lib/container/RemoteRuntimeModule.js +11 -8
  117. package/lib/container/options.js +18 -4
  118. package/lib/css/CssExportsGenerator.js +39 -40
  119. package/lib/css/CssGenerator.js +11 -14
  120. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  121. package/lib/css/CssModulesPlugin.js +127 -47
  122. package/lib/css/CssParser.js +20 -18
  123. package/lib/css/walkCssTokens.js +80 -95
  124. package/lib/debug/ProfilingPlugin.js +19 -20
  125. package/lib/dependencies/AMDDefineDependency.js +1 -1
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  127. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  128. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  129. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  130. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  131. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  132. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  133. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  134. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  135. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  136. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  137. package/lib/dependencies/ConstDependency.js +1 -1
  138. package/lib/dependencies/ContextDependency.js +1 -1
  139. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  140. package/lib/dependencies/ContextElementDependency.js +2 -2
  141. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  142. package/lib/dependencies/CssExportDependency.js +72 -9
  143. package/lib/dependencies/CssImportDependency.js +0 -2
  144. package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
  145. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  146. package/lib/dependencies/CssUrlDependency.js +4 -5
  147. package/lib/dependencies/DynamicExports.js +5 -5
  148. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  149. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  150. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  151. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  152. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  153. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  154. package/lib/dependencies/HarmonyExports.js +2 -2
  155. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  156. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  157. package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
  158. package/lib/dependencies/ImportDependency.js +1 -1
  159. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  160. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  161. package/lib/dependencies/ImportParserPlugin.js +39 -44
  162. package/lib/dependencies/JsonExportsDependency.js +22 -18
  163. package/lib/dependencies/LoaderPlugin.js +47 -36
  164. package/lib/dependencies/LocalModule.js +1 -1
  165. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  166. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  167. package/lib/dependencies/ProvidedDependency.js +1 -1
  168. package/lib/dependencies/PureExpressionDependency.js +6 -6
  169. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  170. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  171. package/lib/dependencies/SystemPlugin.js +1 -1
  172. package/lib/dependencies/URLDependency.js +3 -3
  173. package/lib/dependencies/URLPlugin.js +66 -12
  174. package/lib/dependencies/WorkerPlugin.js +25 -24
  175. package/lib/dependencies/processExportInfo.js +3 -1
  176. package/lib/electron/ElectronTargetPlugin.js +1 -0
  177. package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
  178. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  179. package/lib/formatLocation.js +1 -2
  180. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  181. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  182. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  183. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  184. package/lib/hmr/lazyCompilationBackend.js +64 -40
  185. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  186. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  187. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  188. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  189. package/lib/ids/IdHelpers.js +29 -39
  190. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  191. package/lib/index.js +1 -5
  192. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
  193. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  194. package/lib/javascript/ChunkHelpers.js +1 -1
  195. package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
  196. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  197. package/lib/javascript/JavascriptGenerator.js +23 -7
  198. package/lib/javascript/JavascriptModulesPlugin.js +97 -70
  199. package/lib/javascript/JavascriptParser.js +179 -200
  200. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  201. package/lib/javascript/StartupHelpers.js +41 -13
  202. package/lib/json/JsonGenerator.js +7 -13
  203. package/lib/json/JsonModulesPlugin.js +1 -4
  204. package/lib/json/JsonParser.js +5 -3
  205. package/lib/library/AmdLibraryPlugin.js +12 -16
  206. package/lib/library/AssignLibraryPlugin.js +9 -11
  207. package/lib/library/EnableLibraryPlugin.js +25 -15
  208. package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
  209. package/lib/library/JsonpLibraryPlugin.js +2 -1
  210. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  211. package/lib/library/ModuleLibraryPlugin.js +2 -1
  212. package/lib/library/SystemLibraryPlugin.js +2 -1
  213. package/lib/library/UmdLibraryPlugin.js +66 -92
  214. package/lib/logging/Logger.js +32 -4
  215. package/lib/logging/createConsoleLogger.js +12 -13
  216. package/lib/logging/runtime.js +7 -8
  217. package/lib/logging/truncateArgs.js +5 -8
  218. package/lib/node/NodeWatchFileSystem.js +3 -18
  219. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  221. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  222. package/lib/node/nodeConsole.js +22 -22
  223. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  224. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  225. package/lib/optimize/ConcatenatedModule.js +144 -61
  226. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  227. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  228. package/lib/optimize/InnerGraph.js +17 -17
  229. package/lib/optimize/InnerGraphPlugin.js +8 -7
  230. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  231. package/lib/optimize/MangleExportsPlugin.js +1 -0
  232. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  233. package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
  234. package/lib/optimize/RealContentHashPlugin.js +7 -10
  235. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  236. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  237. package/lib/optimize/SplitChunksPlugin.js +34 -30
  238. package/lib/performance/SizeLimitsPlugin.js +2 -2
  239. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
  240. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  241. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  242. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  243. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  244. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  245. package/lib/rules/RuleSetCompiler.js +41 -22
  246. package/lib/rules/UseEffectRulePlugin.js +36 -32
  247. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  248. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  249. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  250. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  251. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  253. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  254. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  255. package/lib/schemes/DataUriPlugin.js +1 -1
  256. package/lib/schemes/HttpUriPlugin.js +241 -126
  257. package/lib/serialization/BinaryMiddleware.js +44 -28
  258. package/lib/serialization/DateObjectSerializer.js +1 -0
  259. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  260. package/lib/serialization/FileMiddleware.js +154 -106
  261. package/lib/serialization/MapObjectSerializer.js +2 -1
  262. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  263. package/lib/serialization/ObjectMiddleware.js +52 -56
  264. package/lib/serialization/PlainObjectSerializer.js +32 -6
  265. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  266. package/lib/serialization/Serializer.js +4 -5
  267. package/lib/serialization/SerializerMiddleware.js +6 -6
  268. package/lib/serialization/SetObjectSerializer.js +2 -1
  269. package/lib/sharing/ConsumeSharedModule.js +19 -14
  270. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  271. package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
  272. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  273. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  274. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  275. package/lib/sharing/utils.js +15 -27
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  277. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  279. package/lib/stats/StatsFactory.js +127 -56
  280. package/lib/stats/StatsPrinter.js +75 -44
  281. package/lib/util/ArrayHelpers.js +8 -4
  282. package/lib/util/ArrayQueue.js +1 -1
  283. package/lib/util/AsyncQueue.js +31 -12
  284. package/lib/util/IterableHelpers.js +3 -4
  285. package/lib/util/LazyBucketSortedSet.js +60 -44
  286. package/lib/util/LazySet.js +1 -0
  287. package/lib/util/MapHelpers.js +1 -3
  288. package/lib/util/ParallelismFactorCalculator.js +1 -1
  289. package/lib/util/Queue.js +1 -1
  290. package/lib/util/Semaphore.js +4 -7
  291. package/lib/util/SetHelpers.js +5 -5
  292. package/lib/util/SortableSet.js +4 -3
  293. package/lib/util/StackedCacheMap.js +4 -6
  294. package/lib/util/StackedMap.js +1 -3
  295. package/lib/util/StringXor.js +0 -5
  296. package/lib/util/TupleQueue.js +1 -1
  297. package/lib/util/TupleSet.js +15 -5
  298. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  299. package/lib/util/WeakTupleMap.js +19 -21
  300. package/lib/util/binarySearchBounds.js +5 -12
  301. package/lib/util/chainedImports.js +1 -1
  302. package/lib/util/cleverMerge.js +21 -19
  303. package/lib/util/comparators.js +57 -52
  304. package/lib/util/compileBooleanMatcher.js +3 -6
  305. package/lib/util/conventions.js +10 -13
  306. package/lib/util/createHash.js +9 -6
  307. package/lib/util/deprecation.js +22 -12
  308. package/lib/util/deterministicGrouping.js +19 -26
  309. package/lib/util/findGraphRoots.js +2 -2
  310. package/lib/util/fs.js +31 -31
  311. package/lib/util/hash/md4.js +2 -2
  312. package/lib/util/hash/wasm-hash.js +7 -7
  313. package/lib/util/hash/xxhash64.js +2 -2
  314. package/lib/util/identifier.js +81 -59
  315. package/lib/util/memoize.js +8 -10
  316. package/lib/util/mergeScope.js +6 -9
  317. package/lib/util/nonNumericOnlyHash.js +2 -2
  318. package/lib/util/numberHash.js +1 -6
  319. package/lib/util/objectToMap.js +0 -1
  320. package/lib/util/propertyAccess.js +2 -5
  321. package/lib/util/propertyName.js +1 -3
  322. package/lib/util/registerExternalSerializer.js +1 -1
  323. package/lib/util/runtime.js +103 -113
  324. package/lib/util/semver.js +29 -27
  325. package/lib/util/serialization.js +16 -1
  326. package/lib/util/smartGrouping.js +5 -5
  327. package/lib/util/source.js +1 -1
  328. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  329. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  330. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  331. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  332. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  333. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  334. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  336. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  337. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  338. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  339. package/package.json +17 -16
  340. package/schemas/WebpackOptions.check.js +1 -1
  341. package/schemas/WebpackOptions.json +17 -0
  342. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  343. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  344. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  345. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  346. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  347. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  348. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  349. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  350. package/types.d.ts +682 -347
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
 
@@ -190,8 +191,10 @@ class ContextModule extends Module {
190
191
  * @returns {string} pretty RegExp
191
192
  */
192
193
  _prettyRegExp(regexString, stripSlash = true) {
193
- const str = (regexString + "").replace(/!/g, "%21").replace(/\|/g, "%7C");
194
- return stripSlash ? str.substring(1, str.length - 1) : str;
194
+ const str = stripSlash
195
+ ? regexString.source + regexString.flags
196
+ : `${regexString}`;
197
+ return str.replace(/!/g, "%21").replace(/\|/g, "%7C");
195
198
  }
196
199
 
197
200
  _createIdentifier() {
@@ -270,15 +273,15 @@ class ContextModule extends Module {
270
273
  readableIdentifier(requestShortener) {
271
274
  let identifier;
272
275
  if (this.context) {
273
- identifier = requestShortener.shorten(this.context) + "/";
276
+ identifier = `${requestShortener.shorten(this.context)}/`;
274
277
  } else if (
275
278
  typeof this.options.resource === "string" ||
276
279
  this.options.resource === false
277
280
  ) {
278
- identifier = requestShortener.shorten(`${this.options.resource}`) + "/";
281
+ identifier = `${requestShortener.shorten(`${this.options.resource}`)}/`;
279
282
  } else {
280
283
  identifier = this.options.resource
281
- .map(r => requestShortener.shorten(r) + "/")
284
+ .map(r => `${requestShortener.shorten(r)}/`)
282
285
  .join(" ");
283
286
  }
284
287
  if (this.options.resourceQuery) {
@@ -563,7 +566,7 @@ class ContextModule extends Module {
563
566
  } else if (typeof this.options.resource === "string") {
564
567
  contextDependencies.add(this.options.resource);
565
568
  } else if (this.options.resource === false) {
566
- return;
569
+ // Do nothing
567
570
  } else {
568
571
  for (const res of this.options.resource) contextDependencies.add(res);
569
572
  }
@@ -600,7 +603,7 @@ class ContextModule extends Module {
600
603
  /**
601
604
  * @param {Dependency[]} dependencies all dependencies
602
605
  * @param {ChunkGraph} chunkGraph chunk graph
603
- * @returns {FakeMap} fake map
606
+ * @returns {FakeMap | FakeMapType} fake map
604
607
  */
605
608
  getFakeMap(dependencies, chunkGraph) {
606
609
  if (!this.options.namespaceObject) {
@@ -619,13 +622,14 @@ class ContextModule extends Module {
619
622
  )
620
623
  .filter(Boolean)
621
624
  .sort(comparator);
625
+ /** @type {FakeMap} */
622
626
  const fakeMap = Object.create(null);
623
627
  for (const module of sortedModules) {
624
628
  const exportsType = module.getExportsType(
625
629
  moduleGraph,
626
630
  this.options.namespaceObject === "strict"
627
631
  );
628
- const id = chunkGraph.getModuleId(module);
632
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(module));
629
633
  switch (exportsType) {
630
634
  case "namespace":
631
635
  fakeMap[id] = 9;
@@ -666,7 +670,7 @@ class ContextModule extends Module {
666
670
  }
667
671
 
668
672
  /**
669
- * @param {FakeMap} fakeMap fake map
673
+ * @param {FakeMap | FakeMapType} fakeMap fake map
670
674
  * @returns {string} fake map init statement
671
675
  */
672
676
  getFakeMapInitStatement(fakeMap) {
@@ -690,7 +694,7 @@ class ContextModule extends Module {
690
694
  }
691
695
 
692
696
  /**
693
- * @param {FakeMap} fakeMap fake map
697
+ * @param {FakeMap | FakeMapType} fakeMap fake map
694
698
  * @param {boolean=} asyncModule us async module
695
699
  * @param {string=} fakeMapDataExpression fake map data expression
696
700
  * @returns {string} module object source
@@ -942,15 +946,19 @@ module.exports = webpackAsyncContext;`;
942
946
  chunkGraph
943
947
  );
944
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
+ */
945
953
  const items = blocks
946
954
  .map(block => {
947
955
  const dependency =
948
956
  /** @type {ContextElementDependency} */
949
957
  (block.dependencies[0]);
950
958
  return {
951
- dependency: dependency,
959
+ dependency,
952
960
  module: /** @type {Module} */ (moduleGraph.getModule(dependency)),
953
- block: block,
961
+ block,
954
962
  userRequest: dependency.userRequest,
955
963
  chunks: undefined
956
964
  };
@@ -972,18 +980,23 @@ module.exports = webpackAsyncContext;`;
972
980
  if (a.userRequest === b.userRequest) return 0;
973
981
  return a.userRequest < b.userRequest ? -1 : 1;
974
982
  });
983
+ /** @type {Record<string, ModuleId | (ModuleId[] | ChunkId[])>} */
975
984
  const map = Object.create(null);
976
985
  for (const item of sortedItems) {
977
- const moduleId = chunkGraph.getModuleId(item.module);
986
+ const moduleId =
987
+ /** @type {ModuleId} */
988
+ (chunkGraph.getModuleId(item.module));
978
989
  if (shortMode) {
979
990
  map[item.userRequest] = moduleId;
980
991
  } else {
992
+ /** @type {(ModuleId | ChunkId)[]} */
981
993
  const arrayStart = [moduleId];
982
994
  if (hasFakeMap) {
983
995
  arrayStart.push(fakeMap[moduleId]);
984
996
  }
985
997
  map[item.userRequest] = arrayStart.concat(
986
- item.chunks.map(chunk => chunk.id)
998
+ /** @type {Chunk[]} */
999
+ (item.chunks).map(chunk => /** @type {ChunkId} */ (chunk.id))
987
1000
  );
988
1001
  }
989
1002
  }
@@ -1084,7 +1097,7 @@ module.exports = webpackEmptyAsyncContext;`;
1084
1097
  * @returns {string} the source code
1085
1098
  */
1086
1099
  getSourceString(asyncMode, { runtimeTemplate, chunkGraph }) {
1087
- const id = chunkGraph.getModuleId(this);
1100
+ const id = /** @type {ModuleId} */ (chunkGraph.getModuleId(this));
1088
1101
  if (asyncMode === "lazy") {
1089
1102
  if (this.blocks && this.blocks.length > 0) {
1090
1103
  return this.getLazySource(this.blocks, id, {
@@ -1122,10 +1135,12 @@ module.exports = webpackEmptyAsyncContext;`;
1122
1135
  }
1123
1136
  return this.getSourceForEmptyAsyncContext(id, runtimeTemplate);
1124
1137
  }
1125
- if (asyncMode === "weak") {
1126
- if (this.dependencies && this.dependencies.length > 0) {
1127
- return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
1128
- }
1138
+ if (
1139
+ asyncMode === "weak" &&
1140
+ this.dependencies &&
1141
+ this.dependencies.length > 0
1142
+ ) {
1143
+ return this.getWeakSyncSource(this.dependencies, id, chunkGraph);
1129
1144
  }
1130
1145
  if (this.dependencies && this.dependencies.length > 0) {
1131
1146
  return this.getSyncSource(this.dependencies, id, chunkGraph);