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
@@ -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")) {
@@ -286,7 +293,15 @@ class WebpackOptionsApply extends OptionsApply {
286
293
  "library type \"module\" is only allowed when 'experiments.outputModule' is enabled"
287
294
  );
288
295
  }
289
- if (options.externalsType === "module") {
296
+ if (options.output.enabledLibraryTypes.includes("modern-module")) {
297
+ throw new Error(
298
+ "library type \"modern-module\" is only allowed when 'experiments.outputModule' is enabled"
299
+ );
300
+ }
301
+ if (
302
+ options.externalsType === "module" ||
303
+ options.externalsType === "module-import"
304
+ ) {
290
305
  throw new Error(
291
306
  "'externalsType: \"module\"' is only allowed when 'experiments.outputModule' is enabled"
292
307
  );
@@ -317,7 +332,7 @@ class WebpackOptionsApply extends OptionsApply {
317
332
  const lazyOptions =
318
333
  typeof options.experiments.lazyCompilation === "object"
319
334
  ? options.experiments.lazyCompilation
320
- : null;
335
+ : {};
321
336
  new LazyCompilationPlugin({
322
337
  backend:
323
338
  typeof lazyOptions.backend === "function"
@@ -345,7 +360,11 @@ class WebpackOptionsApply extends OptionsApply {
345
360
  }
346
361
 
347
362
  new EntryOptionPlugin().apply(compiler);
348
- compiler.hooks.entryOption.call(options.context, options.entry);
363
+ compiler.hooks.entryOption.call(
364
+ /** @type {string} */
365
+ (options.context),
366
+ options.entry
367
+ );
349
368
 
350
369
  new RuntimePlugin().apply(compiler);
351
370
 
@@ -540,7 +559,7 @@ class WebpackOptionsApply extends OptionsApply {
540
559
  break;
541
560
  }
542
561
  case "size": {
543
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
562
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
544
563
  const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
545
564
  new OccurrenceChunkIdsPlugin({
546
565
  prioritiseInitial: true
@@ -548,7 +567,7 @@ class WebpackOptionsApply extends OptionsApply {
548
567
  break;
549
568
  }
550
569
  case "total-size": {
551
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
570
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
552
571
  const OccurrenceChunkIdsPlugin = require("./ids/OccurrenceChunkIdsPlugin");
553
572
  new OccurrenceChunkIdsPlugin({
554
573
  prioritiseInitial: false
@@ -592,23 +611,28 @@ class WebpackOptionsApply extends OptionsApply {
592
611
 
593
612
  const AddManagedPathsPlugin = require("./cache/AddManagedPathsPlugin");
594
613
  new AddManagedPathsPlugin(
595
- options.snapshot.managedPaths,
596
- options.snapshot.immutablePaths,
597
- 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)
598
620
  ).apply(compiler);
599
621
 
600
622
  if (options.cache && typeof options.cache === "object") {
601
623
  const cacheOptions = options.cache;
602
624
  switch (cacheOptions.type) {
603
625
  case "memory": {
604
- if (isFinite(cacheOptions.maxGenerations)) {
605
- //@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
606
628
  const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
607
629
  new MemoryWithGcCachePlugin({
608
- maxGenerations: cacheOptions.maxGenerations
630
+ maxGenerations:
631
+ /** @type {number} */
632
+ (cacheOptions.maxGenerations)
609
633
  }).apply(compiler);
610
634
  } else {
611
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
635
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
612
636
  const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
613
637
  new MemoryCachePlugin().apply(compiler);
614
638
  }
@@ -624,16 +648,17 @@ class WebpackOptionsApply extends OptionsApply {
624
648
  }
625
649
  case "filesystem": {
626
650
  const AddBuildDependenciesPlugin = require("./cache/AddBuildDependenciesPlugin");
651
+ // eslint-disable-next-line guard-for-in
627
652
  for (const key in cacheOptions.buildDependencies) {
628
653
  const list = cacheOptions.buildDependencies[key];
629
654
  new AddBuildDependenciesPlugin(list).apply(compiler);
630
655
  }
631
- if (!isFinite(cacheOptions.maxMemoryGenerations)) {
632
- //@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
633
658
  const MemoryCachePlugin = require("./cache/MemoryCachePlugin");
634
659
  new MemoryCachePlugin().apply(compiler);
635
660
  } else if (cacheOptions.maxMemoryGenerations !== 0) {
636
- //@ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
661
+ // @ts-expect-error https://github.com/microsoft/TypeScript/issues/41697
637
662
  const MemoryWithGcCachePlugin = require("./cache/MemoryWithGcCachePlugin");
638
663
  new MemoryWithGcCachePlugin({
639
664
  maxGenerations: cacheOptions.maxMemoryGenerations
@@ -654,17 +679,19 @@ class WebpackOptionsApply extends OptionsApply {
654
679
  new IdleFileCachePlugin(
655
680
  new PackFileCacheStrategy({
656
681
  compiler,
657
- fs: /** @type {IntermediateFileSystem} */ (
658
- compiler.intermediateFileSystem
659
- ),
660
- context: options.context,
661
- 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),
662
689
  version: cacheOptions.version,
663
690
  logger: compiler.getInfrastructureLogger(
664
691
  "webpack.cache.PackFileCacheStrategy"
665
692
  ),
666
693
  snapshot: options.snapshot,
667
- maxAge: cacheOptions.maxAge,
694
+ maxAge: /** @type {number} */ (cacheOptions.maxAge),
668
695
  profile: cacheOptions.profile,
669
696
  allowCollectingMemory: cacheOptions.allowCollectingMemory,
670
697
  compression: cacheOptions.compression,