webpack 5.93.0 → 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 (343) 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 +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 +126 -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 +12 -10
  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 +14 -19
  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 +31 -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 +1 -1
  138. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  139. package/lib/dependencies/ContextElementDependency.js +2 -2
  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 +91 -69
  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 +80 -48
  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/MinMaxSizeWarning.js +1 -1
  231. package/lib/optimize/ModuleConcatenationPlugin.js +54 -78
  232. package/lib/optimize/RealContentHashPlugin.js +7 -10
  233. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  234. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  235. package/lib/optimize/SplitChunksPlugin.js +34 -30
  236. package/lib/performance/SizeLimitsPlugin.js +2 -2
  237. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  238. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  239. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  240. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  241. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  242. package/lib/rules/RuleSetCompiler.js +41 -22
  243. package/lib/rules/UseEffectRulePlugin.js +36 -32
  244. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  245. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  246. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  247. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  248. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  249. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  250. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  251. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  252. package/lib/schemes/DataUriPlugin.js +1 -1
  253. package/lib/schemes/HttpUriPlugin.js +241 -126
  254. package/lib/serialization/BinaryMiddleware.js +44 -28
  255. package/lib/serialization/DateObjectSerializer.js +1 -0
  256. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  257. package/lib/serialization/FileMiddleware.js +154 -106
  258. package/lib/serialization/MapObjectSerializer.js +2 -1
  259. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  260. package/lib/serialization/ObjectMiddleware.js +52 -56
  261. package/lib/serialization/PlainObjectSerializer.js +32 -6
  262. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  263. package/lib/serialization/Serializer.js +4 -5
  264. package/lib/serialization/SerializerMiddleware.js +6 -6
  265. package/lib/serialization/SetObjectSerializer.js +2 -1
  266. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  267. package/lib/sharing/ConsumeSharedRuntimeModule.js +4 -4
  268. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  269. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  270. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  271. package/lib/sharing/utils.js +15 -27
  272. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  273. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  274. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  275. package/lib/stats/StatsFactory.js +127 -56
  276. package/lib/stats/StatsPrinter.js +75 -44
  277. package/lib/util/ArrayHelpers.js +8 -4
  278. package/lib/util/ArrayQueue.js +1 -1
  279. package/lib/util/AsyncQueue.js +31 -12
  280. package/lib/util/IterableHelpers.js +3 -4
  281. package/lib/util/LazyBucketSortedSet.js +60 -44
  282. package/lib/util/LazySet.js +1 -0
  283. package/lib/util/MapHelpers.js +1 -3
  284. package/lib/util/ParallelismFactorCalculator.js +1 -1
  285. package/lib/util/Queue.js +1 -1
  286. package/lib/util/Semaphore.js +4 -7
  287. package/lib/util/SetHelpers.js +5 -5
  288. package/lib/util/SortableSet.js +4 -3
  289. package/lib/util/StackedCacheMap.js +4 -6
  290. package/lib/util/StackedMap.js +1 -3
  291. package/lib/util/StringXor.js +0 -5
  292. package/lib/util/TupleQueue.js +1 -1
  293. package/lib/util/TupleSet.js +15 -5
  294. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  295. package/lib/util/WeakTupleMap.js +19 -21
  296. package/lib/util/binarySearchBounds.js +5 -12
  297. package/lib/util/chainedImports.js +1 -1
  298. package/lib/util/cleverMerge.js +21 -19
  299. package/lib/util/comparators.js +57 -52
  300. package/lib/util/compileBooleanMatcher.js +3 -6
  301. package/lib/util/conventions.js +8 -11
  302. package/lib/util/createHash.js +9 -6
  303. package/lib/util/deprecation.js +22 -12
  304. package/lib/util/deterministicGrouping.js +19 -26
  305. package/lib/util/findGraphRoots.js +2 -2
  306. package/lib/util/fs.js +31 -31
  307. package/lib/util/hash/md4.js +2 -2
  308. package/lib/util/hash/wasm-hash.js +7 -7
  309. package/lib/util/hash/xxhash64.js +2 -2
  310. package/lib/util/identifier.js +81 -59
  311. package/lib/util/memoize.js +8 -10
  312. package/lib/util/mergeScope.js +6 -9
  313. package/lib/util/nonNumericOnlyHash.js +2 -2
  314. package/lib/util/numberHash.js +1 -6
  315. package/lib/util/objectToMap.js +0 -1
  316. package/lib/util/propertyAccess.js +2 -5
  317. package/lib/util/propertyName.js +1 -3
  318. package/lib/util/registerExternalSerializer.js +1 -1
  319. package/lib/util/runtime.js +103 -113
  320. package/lib/util/semver.js +29 -27
  321. package/lib/util/serialization.js +16 -1
  322. package/lib/util/smartGrouping.js +5 -5
  323. package/lib/util/source.js +1 -1
  324. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  325. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  326. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  327. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  328. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  329. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  330. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  331. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  332. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  333. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  334. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  335. package/package.json +15 -14
  336. package/schemas/WebpackOptions.check.js +1 -1
  337. package/schemas/WebpackOptions.json +1 -0
  338. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  339. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  340. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  341. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  342. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  343. package/types.d.ts +667 -347
@@ -9,9 +9,12 @@ const { groupBy } = require("./util/ArrayHelpers");
9
9
  const createSchemaValidation = require("./util/create-schema-validation");
10
10
 
11
11
  /** @typedef {import("../declarations/plugins/WatchIgnorePlugin").WatchIgnorePluginOptions} WatchIgnorePluginOptions */
12
+ /** @typedef {import("../declarations/WebpackOptions").WatchOptions} WatchOptions */
12
13
  /** @typedef {import("./Compiler")} Compiler */
14
+ /** @typedef {import("./util/fs").TimeInfoEntries} TimeInfoEntries */
13
15
  /** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
14
-
16
+ /** @typedef {import("./util/fs").WatchMethod} WatchMethod */
17
+ /** @typedef {import("./util/fs").Watcher} Watcher */
15
18
  const validate = createSchemaValidation(
16
19
  require("../schemas/plugins/WatchIgnorePlugin.check.js"),
17
20
  () => require("../schemas/plugins/WatchIgnorePlugin.json"),
@@ -26,13 +29,14 @@ const IGNORE_TIME_ENTRY = "ignore";
26
29
  class IgnoringWatchFileSystem {
27
30
  /**
28
31
  * @param {WatchFileSystem} wfs original file system
29
- * @param {(string|RegExp)[]} paths ignored paths
32
+ * @param {WatchIgnorePluginOptions["paths"]} paths ignored paths
30
33
  */
31
34
  constructor(wfs, paths) {
32
35
  this.wfs = wfs;
33
36
  this.paths = paths;
34
37
  }
35
38
 
39
+ /** @type {WatchMethod} */
36
40
  watch(files, dirs, missing, startTime, options, callback, callbackUndelayed) {
37
41
  files = Array.from(files);
38
42
  dirs = Array.from(dirs);
@@ -45,8 +49,16 @@ class IgnoringWatchFileSystem {
45
49
  p instanceof RegExp ? p.test(path) : path.indexOf(p) === 0
46
50
  );
47
51
 
48
- const [ignoredFiles, notIgnoredFiles] = groupBy(files, ignored);
49
- const [ignoredDirs, notIgnoredDirs] = groupBy(dirs, ignored);
52
+ const [ignoredFiles, notIgnoredFiles] = groupBy(
53
+ /** @type {Array<string>} */
54
+ (files),
55
+ ignored
56
+ );
57
+ const [ignoredDirs, notIgnoredDirs] = groupBy(
58
+ /** @type {Array<string>} */
59
+ (dirs),
60
+ ignored
61
+ );
50
62
 
51
63
  const watcher = this.wfs.watch(
52
64
  notIgnoredFiles,
@@ -57,15 +69,17 @@ class IgnoringWatchFileSystem {
57
69
  (err, fileTimestamps, dirTimestamps, changedFiles, removedFiles) => {
58
70
  if (err) return callback(err);
59
71
  for (const path of ignoredFiles) {
60
- fileTimestamps.set(path, IGNORE_TIME_ENTRY);
72
+ /** @type {TimeInfoEntries} */
73
+ (fileTimestamps).set(path, IGNORE_TIME_ENTRY);
61
74
  }
62
75
 
63
76
  for (const path of ignoredDirs) {
64
- dirTimestamps.set(path, IGNORE_TIME_ENTRY);
77
+ /** @type {TimeInfoEntries} */
78
+ (dirTimestamps).set(path, IGNORE_TIME_ENTRY);
65
79
  }
66
80
 
67
81
  callback(
68
- err,
82
+ null,
69
83
  fileTimestamps,
70
84
  dirTimestamps,
71
85
  changedFiles,
@@ -95,7 +109,9 @@ class IgnoringWatchFileSystem {
95
109
  getInfo:
96
110
  watcher.getInfo &&
97
111
  (() => {
98
- const info = watcher.getInfo();
112
+ const info =
113
+ /** @type {NonNullable<Watcher["getInfo"]>} */
114
+ (watcher.getInfo)();
99
115
  const { fileTimeInfoEntries, contextTimeInfoEntries } = info;
100
116
  for (const path of ignoredFiles) {
101
117
  fileTimeInfoEntries.set(path, IGNORE_TIME_ENTRY);
@@ -126,7 +142,8 @@ class WatchIgnorePlugin {
126
142
  apply(compiler) {
127
143
  compiler.hooks.afterEnvironment.tap("WatchIgnorePlugin", () => {
128
144
  compiler.watchFileSystem = new IgnoringWatchFileSystem(
129
- compiler.watchFileSystem,
145
+ /** @type {WatchFileSystem} */
146
+ (compiler.watchFileSystem),
130
147
  this.paths
131
148
  );
132
149
  });
package/lib/Watching.js CHANGED
@@ -13,7 +13,9 @@ const Stats = require("./Stats");
13
13
  /** @typedef {import("./FileSystemInfo").FileSystemInfoEntry} FileSystemInfoEntry */
14
14
  /** @typedef {import("./WebpackError")} WebpackError */
15
15
  /** @typedef {import("./logging/Logger").Logger} Logger */
16
+ /** @typedef {import("./util/fs").TimeInfoEntries} TimeInfoEntries */
16
17
  /** @typedef {import("./util/fs").WatchFileSystem} WatchFileSystem */
18
+ /** @typedef {import("./util/fs").Watcher} Watcher */
17
19
 
18
20
  /**
19
21
  * @template T
@@ -43,12 +45,15 @@ class Watching {
43
45
  this._onChange = () => {};
44
46
  this._onInvalid = () => {};
45
47
  if (typeof watchOptions === "number") {
48
+ /** @type {WatchOptions} */
46
49
  this.watchOptions = {
47
50
  aggregateTimeout: watchOptions
48
51
  };
49
52
  } else if (watchOptions && typeof watchOptions === "object") {
53
+ /** @type {WatchOptions} */
50
54
  this.watchOptions = { ...watchOptions };
51
55
  } else {
56
+ /** @type {WatchOptions} */
52
57
  this.watchOptions = {};
53
58
  }
54
59
  if (typeof this.watchOptions.aggregateTimeout !== "number") {
@@ -95,8 +100,8 @@ class Watching {
95
100
  }
96
101
 
97
102
  /**
98
- * @param {ReadonlyMap<string, FileSystemInfoEntry | "ignore">=} fileTimeInfoEntries info for files
99
- * @param {ReadonlyMap<string, FileSystemInfoEntry | "ignore">=} contextTimeInfoEntries info for directories
103
+ * @param {TimeInfoEntries=} fileTimeInfoEntries info for files
104
+ * @param {TimeInfoEntries=} contextTimeInfoEntries info for directories
100
105
  * @param {ReadonlySet<string>=} changedFiles changed files
101
106
  * @param {ReadonlySet<string>=} removedFiles removed files
102
107
  * @returns {void}
@@ -255,7 +260,7 @@ class Watching {
255
260
  (compilation && compilation.getLogger("webpack.Watching"));
256
261
 
257
262
  /** @type {Stats | undefined} */
258
- let stats = undefined;
263
+ let stats;
259
264
 
260
265
  /**
261
266
  * @param {Error} err error
@@ -406,8 +411,8 @@ class Watching {
406
411
  }
407
412
 
408
413
  /**
409
- * @param {ReadonlyMap<string, FileSystemInfoEntry | "ignore">=} fileTimeInfoEntries info for files
410
- * @param {ReadonlyMap<string, FileSystemInfoEntry | "ignore">=} contextTimeInfoEntries info for directories
414
+ * @param {TimeInfoEntries=} fileTimeInfoEntries info for files
415
+ * @param {TimeInfoEntries=} contextTimeInfoEntries info for directories
411
416
  * @param {ReadonlySet<string>=} changedFiles changed files
412
417
  * @param {ReadonlySet<string>=} removedFiles removed files
413
418
  * @returns {void}
@@ -71,13 +71,13 @@ class WebpackOptionsApply extends OptionsApply {
71
71
  * @returns {WebpackOptions} options object
72
72
  */
73
73
  process(options, compiler) {
74
- compiler.outputPath = options.output.path;
74
+ compiler.outputPath = /** @type {string} */ (options.output.path);
75
75
  compiler.recordsInputPath = options.recordsInputPath || null;
76
76
  compiler.recordsOutputPath = options.recordsOutputPath || null;
77
77
  compiler.name = options.name;
78
78
 
79
79
  if (options.externals) {
80
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
80
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
81
81
  const ExternalsPlugin = require("./ExternalsPlugin");
82
82
  new ExternalsPlugin(options.externalsType, options.externals).apply(
83
83
  compiler
@@ -89,17 +89,17 @@ class WebpackOptionsApply extends OptionsApply {
89
89
  new NodeTargetPlugin().apply(compiler);
90
90
  }
91
91
  if (options.externalsPresets.electronMain) {
92
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
92
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
93
93
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
94
94
  new ElectronTargetPlugin("main").apply(compiler);
95
95
  }
96
96
  if (options.externalsPresets.electronPreload) {
97
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
97
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
98
98
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
99
99
  new ElectronTargetPlugin("preload").apply(compiler);
100
100
  }
101
101
  if (options.externalsPresets.electronRenderer) {
102
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
102
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
103
103
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
104
104
  new ElectronTargetPlugin("renderer").apply(compiler);
105
105
  }
@@ -109,17 +109,17 @@ class WebpackOptionsApply extends OptionsApply {
109
109
  !options.externalsPresets.electronPreload &&
110
110
  !options.externalsPresets.electronRenderer
111
111
  ) {
112
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
112
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
113
113
  const ElectronTargetPlugin = require("./electron/ElectronTargetPlugin");
114
114
  new ElectronTargetPlugin().apply(compiler);
115
115
  }
116
116
  if (options.externalsPresets.nwjs) {
117
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
117
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
118
118
  const ExternalsPlugin = require("./ExternalsPlugin");
119
119
  new ExternalsPlugin("node-commonjs", "nw.gui").apply(compiler);
120
120
  }
121
121
  if (options.externalsPresets.webAsync) {
122
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
122
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
123
123
  const ExternalsPlugin = require("./ExternalsPlugin");
124
124
  new ExternalsPlugin("import", ({ request, dependencyType }, callback) => {
125
125
  if (dependencyType === "url") {
@@ -139,7 +139,7 @@ class WebpackOptionsApply extends OptionsApply {
139
139
  callback();
140
140
  }).apply(compiler);
141
141
  } else if (options.externalsPresets.web) {
142
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
142
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
143
143
  const ExternalsPlugin = require("./ExternalsPlugin");
144
144
  new ExternalsPlugin("module", ({ request, dependencyType }, callback) => {
145
145
  if (dependencyType === "url") {
@@ -155,28 +155,23 @@ class WebpackOptionsApply extends OptionsApply {
155
155
  }
156
156
  callback();
157
157
  }).apply(compiler);
158
- } else if (options.externalsPresets.node) {
159
- if (options.experiments.css) {
160
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
161
- const ExternalsPlugin = require("./ExternalsPlugin");
162
- new ExternalsPlugin(
163
- "module",
164
- ({ request, dependencyType }, callback) => {
165
- if (dependencyType === "url") {
166
- if (/^(\/\/|https?:\/\/|#)/.test(request))
167
- return callback(null, `asset ${request}`);
168
- } else if (dependencyType === "css-import") {
169
- if (/^(\/\/|https?:\/\/|#)/.test(request))
170
- return callback(null, `css-import ${request}`);
171
- } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
172
- if (/^\.css(\?|$)/.test(request))
173
- return callback(null, `css-import ${request}`);
174
- return callback(null, `module ${request}`);
175
- }
176
- callback();
177
- }
178
- ).apply(compiler);
179
- }
158
+ } else if (options.externalsPresets.node && options.experiments.css) {
159
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
160
+ const ExternalsPlugin = require("./ExternalsPlugin");
161
+ new ExternalsPlugin("module", ({ request, dependencyType }, callback) => {
162
+ if (dependencyType === "url") {
163
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
164
+ return callback(null, `asset ${request}`);
165
+ } else if (dependencyType === "css-import") {
166
+ if (/^(\/\/|https?:\/\/|#)/.test(request))
167
+ return callback(null, `css-import ${request}`);
168
+ } else if (/^(\/\/|https?:\/\/|std:)/.test(request)) {
169
+ if (/^\.css(\?|$)/.test(request))
170
+ return callback(null, `css-import ${request}`);
171
+ return callback(null, `module ${request}`);
172
+ }
173
+ callback();
174
+ }).apply(compiler);
180
175
  }
181
176
 
182
177
  new ChunkPrefetchPreloadPlugin().apply(compiler);
@@ -200,27 +195,39 @@ class WebpackOptionsApply extends OptionsApply {
200
195
  }
201
196
  default:
202
197
  throw new Error(
203
- "Unsupported chunk format '" + options.output.chunkFormat + "'."
198
+ `Unsupported chunk format '${options.output.chunkFormat}'.`
204
199
  );
205
200
  }
206
201
  }
207
202
 
208
- if (options.output.enabledChunkLoadingTypes.length > 0) {
209
- for (const type of options.output.enabledChunkLoadingTypes) {
203
+ const enabledChunkLoadingTypes =
204
+ /** @type {NonNullable<WebpackOptions["output"]["enabledChunkLoadingTypes"]>} */
205
+ (options.output.enabledChunkLoadingTypes);
206
+
207
+ if (enabledChunkLoadingTypes.length > 0) {
208
+ for (const type of enabledChunkLoadingTypes) {
210
209
  const EnableChunkLoadingPlugin = require("./javascript/EnableChunkLoadingPlugin");
211
210
  new EnableChunkLoadingPlugin(type).apply(compiler);
212
211
  }
213
212
  }
214
213
 
215
- if (options.output.enabledWasmLoadingTypes.length > 0) {
216
- for (const type of options.output.enabledWasmLoadingTypes) {
214
+ const enabledWasmLoadingTypes =
215
+ /** @type {NonNullable<WebpackOptions["output"]["enabledWasmLoadingTypes"]>} */
216
+ (options.output.enabledWasmLoadingTypes);
217
+
218
+ if (enabledWasmLoadingTypes.length > 0) {
219
+ for (const type of enabledWasmLoadingTypes) {
217
220
  const EnableWasmLoadingPlugin = require("./wasm/EnableWasmLoadingPlugin");
218
221
  new EnableWasmLoadingPlugin(type).apply(compiler);
219
222
  }
220
223
  }
221
224
 
222
- if (options.output.enabledLibraryTypes.length > 0) {
223
- for (const type of options.output.enabledLibraryTypes) {
225
+ const enabledLibraryTypes =
226
+ /** @type {NonNullable<WebpackOptions["output"]["enabledLibraryTypes"]>} */
227
+ (options.output.enabledLibraryTypes);
228
+
229
+ if (enabledLibraryTypes.length > 0) {
230
+ for (const type of enabledLibraryTypes) {
224
231
  const EnableLibraryPlugin = require("./library/EnableLibraryPlugin");
225
232
  new EnableLibraryPlugin(type).apply(compiler);
226
233
  }
@@ -257,9 +264,9 @@ class WebpackOptionsApply extends OptionsApply {
257
264
  fallbackModuleFilenameTemplate:
258
265
  options.output.devtoolFallbackModuleFilenameTemplate,
259
266
  append: hidden ? false : undefined,
260
- module: moduleMaps ? true : cheap ? false : true,
261
- columns: cheap ? false : true,
262
- noSources: noSources,
267
+ module: moduleMaps ? true : !cheap,
268
+ columns: !cheap,
269
+ noSources,
263
270
  namespace: options.output.devtoolNamespace
264
271
  }).apply(compiler);
265
272
  } else if (options.devtool.includes("eval")) {
@@ -291,7 +298,10 @@ class WebpackOptionsApply extends OptionsApply {
291
298
  "library type \"modern-module\" is only allowed when 'experiments.outputModule' is enabled"
292
299
  );
293
300
  }
294
- if (options.externalsType === "module") {
301
+ if (
302
+ options.externalsType === "module" ||
303
+ options.externalsType === "module-import"
304
+ ) {
295
305
  throw new Error(
296
306
  "'externalsType: \"module\"' is only allowed when 'experiments.outputModule' is enabled"
297
307
  );
@@ -322,7 +332,7 @@ class WebpackOptionsApply extends OptionsApply {
322
332
  const lazyOptions =
323
333
  typeof options.experiments.lazyCompilation === "object"
324
334
  ? options.experiments.lazyCompilation
325
- : null;
335
+ : {};
326
336
  new LazyCompilationPlugin({
327
337
  backend:
328
338
  typeof lazyOptions.backend === "function"
@@ -350,7 +360,11 @@ class WebpackOptionsApply extends OptionsApply {
350
360
  }
351
361
 
352
362
  new EntryOptionPlugin().apply(compiler);
353
- compiler.hooks.entryOption.call(options.context, options.entry);
363
+ compiler.hooks.entryOption.call(
364
+ /** @type {string} */
365
+ (options.context),
366
+ options.entry
367
+ );
354
368
 
355
369
  new RuntimePlugin().apply(compiler);
356
370
 
@@ -545,7 +559,7 @@ class WebpackOptionsApply extends OptionsApply {
545
559
  break;
546
560
  }
547
561
  case "size": {
548
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
562
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
549
563
  const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
550
564
  new OccurrenceChunkIdsPlugin({
551
565
  prioritiseInitial: true
@@ -553,7 +567,7 @@ class WebpackOptionsApply extends OptionsApply {
553
567
  break;
554
568
  }
555
569
  case "total-size": {
556
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
570
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
557
571
  const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
558
572
  new OccurrenceChunkIdsPlugin({
559
573
  prioritiseInitial: false
@@ -597,23 +611,28 @@ class WebpackOptionsApply extends OptionsApply {
597
611
 
598
612
  const AddManagedPathsPlugin = require("./cache/AddManagedPathsPlugin");
599
613
  new AddManagedPathsPlugin(
600
- options.snapshot.managedPaths,
601
- options.snapshot.immutablePaths,
602
- options.snapshot.unmanagedPaths
614
+ /** @type {NonNullable<WebpackOptions["snapshot"]["managedPaths"]>} */
615
+ (options.snapshot.managedPaths),
616
+ /** @type {NonNullable<WebpackOptions["snapshot"]["managedPaths"]>} */
617
+ (options.snapshot.immutablePaths),
618
+ /** @type {NonNullable<WebpackOptions["snapshot"]["managedPaths"]>} */
619
+ (options.snapshot.unmanagedPaths)
603
620
  ).apply(compiler);
604
621
 
605
622
  if (options.cache && typeof options.cache === "object") {
606
623
  const cacheOptions = options.cache;
607
624
  switch (cacheOptions.type) {
608
625
  case "memory": {
609
- if (isFinite(cacheOptions.maxGenerations)) {
610
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
626
+ if (Number.isFinite(cacheOptions.maxGenerations)) {
627
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
611
628
  const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
612
629
  new MemoryWithGcCachePlugin({
613
- maxGenerations: cacheOptions.maxGenerations
630
+ maxGenerations:
631
+ /** @type {number} */
632
+ (cacheOptions.maxGenerations)
614
633
  }).apply(compiler);
615
634
  } else {
616
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
635
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
617
636
  const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
618
637
  new MemoryCachePlugin().apply(compiler);
619
638
  }
@@ -629,16 +648,17 @@ class WebpackOptionsApply extends OptionsApply {
629
648
  }
630
649
  case "filesystem": {
631
650
  const AddBuildDependenciesPlugin = require("./cache/AddBuildDependenciesPlugin");
651
+ // eslint-disable-next-line guard-for-in
632
652
  for (const key in cacheOptions.buildDependencies) {
633
653
  const list = cacheOptions.buildDependencies[key];
634
654
  new AddBuildDependenciesPlugin(list).apply(compiler);
635
655
  }
636
- if (!isFinite(cacheOptions.maxMemoryGenerations)) {
637
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
656
+ if (!Number.isFinite(cacheOptions.maxMemoryGenerations)) {
657
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
638
658
  const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
639
659
  new MemoryCachePlugin().apply(compiler);
640
660
  } else if (cacheOptions.maxMemoryGenerations !== 0) {
641
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
661
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
642
662
  const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
643
663
  new MemoryWithGcCachePlugin({
644
664
  maxGenerations: cacheOptions.maxMemoryGenerations
@@ -659,17 +679,19 @@ class WebpackOptionsApply extends OptionsApply {
659
679
  new IdleFileCachePlugin(
660
680
  new PackFileCacheStrategy({
661
681
  compiler,
662
- fs: /** @type {IntermediateFileSystem} */ (
663
- compiler.intermediateFileSystem
664
- ),
665
- context: options.context,
666
- cacheLocation: cacheOptions.cacheLocation,
682
+ fs:
683
+ /** @type {IntermediateFileSystem} */
684
+ (compiler.intermediateFileSystem),
685
+ context: /** @type {string} */ (options.context),
686
+ cacheLocation:
687
+ /** @type {string} */
688
+ (cacheOptions.cacheLocation),
667
689
  version: cacheOptions.version,
668
690
  logger: compiler.getInfrastructureLogger(
669
691
  "webpack.cache.PackFileCacheStrategy"
670
692
  ),
671
693
  snapshot: options.snapshot,
672
- maxAge: cacheOptions.maxAge,
694
+ maxAge: /** @type {number} */ (cacheOptions.maxAge),
673
695
  profile: cacheOptions.profile,
674
696
  allowCollectingMemory: cacheOptions.allowCollectingMemory,
675
697
  compression: cacheOptions.compression,