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
@@ -22,8 +22,14 @@ const { join } = require("./util/fs");
22
22
  /** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
23
23
  /** @typedef {import("./ResolverFactory")} ResolverFactory */
24
24
  /** @typedef {import("./dependencies/ContextDependency")} ContextDependency */
25
- /** @template T @typedef {import("./util/deprecation").FakeHook<T>} FakeHook<T> */
25
+ /** @typedef {import("enhanced-resolve").ResolveRequest} ResolveRequest */
26
+ /**
27
+ * @template T
28
+ * @typedef {import("./util/deprecation").FakeHook<T>} FakeHook<T>
29
+ */
30
+ /** @typedef {import("./util/fs").IStats} IStats */
26
31
  /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
32
+ /** @typedef {{ context: string, request: string }} ContextAlternativeRequest */
27
33
 
28
34
  const EMPTY_RESOLVE_OPTIONS = {};
29
35
 
@@ -33,7 +39,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
33
39
  */
34
40
  constructor(resolverFactory) {
35
41
  super();
36
- /** @type {AsyncSeriesWaterfallHook<[TODO[], ContextModuleOptions]>} */
42
+ /** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[], ContextModuleOptions]>} */
37
43
  const alternativeRequests = new AsyncSeriesWaterfallHook([
38
44
  "modules",
39
45
  "options"
@@ -45,27 +51,27 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
45
51
  afterResolve: new AsyncSeriesWaterfallHook(["data"]),
46
52
  /** @type {SyncWaterfallHook<[string[]]>} */
47
53
  contextModuleFiles: new SyncWaterfallHook(["files"]),
48
- /** @type {FakeHook<Pick<AsyncSeriesWaterfallHook<[TODO[]]>, "tap" | "tapAsync" | "tapPromise" | "name">>} */
54
+ /** @type {FakeHook<Pick<AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>, "tap" | "tapAsync" | "tapPromise" | "name">>} */
49
55
  alternatives: createFakeHook(
50
56
  {
51
57
  name: "alternatives",
52
- /** @type {AsyncSeriesWaterfallHook<[TODO[]]>["intercept"]} */
58
+ /** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["intercept"]} */
53
59
  intercept: interceptor => {
54
60
  throw new Error(
55
61
  "Intercepting fake hook ContextModuleFactory.hooks.alternatives is not possible, use ContextModuleFactory.hooks.alternativeRequests instead"
56
62
  );
57
63
  },
58
- /** @type {AsyncSeriesWaterfallHook<[TODO[]]>["tap"]} */
64
+ /** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tap"]} */
59
65
  tap: (options, fn) => {
60
66
  alternativeRequests.tap(options, fn);
61
67
  },
62
- /** @type {AsyncSeriesWaterfallHook<[TODO[]]>["tapAsync"]} */
68
+ /** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tapAsync"]} */
63
69
  tapAsync: (options, fn) => {
64
70
  alternativeRequests.tapAsync(options, (items, _options, callback) =>
65
71
  fn(items, callback)
66
72
  );
67
73
  },
68
- /** @type {AsyncSeriesWaterfallHook<[TODO[]]>["tapPromise"]} */
74
+ /** @type {AsyncSeriesWaterfallHook<[ContextAlternativeRequest[]]>["tapPromise"]} */
69
75
  tapPromise: (options, fn) => {
70
76
  alternativeRequests.tapPromise(options, fn);
71
77
  }
@@ -93,8 +99,8 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
93
99
  const contextDependencies = new LazySet();
94
100
  this.hooks.beforeResolve.callAsync(
95
101
  {
96
- context: context,
97
- dependencies: dependencies,
102
+ context,
103
+ dependencies,
98
104
  layer: data.contextInfo.issuerLayer,
99
105
  resolveOptions,
100
106
  fileDependencies,
@@ -124,9 +130,9 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
124
130
  const request = beforeResolveResult.request;
125
131
  const resolveOptions = beforeResolveResult.resolveOptions;
126
132
 
127
- let loaders,
128
- resource,
129
- loadersPrefix = "";
133
+ let loaders;
134
+ let resource;
135
+ let loadersPrefix = "";
130
136
  const idx = request.lastIndexOf("!");
131
137
  if (idx >= 0) {
132
138
  let loadersRequest = request.slice(0, idx + 1);
@@ -142,11 +148,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
142
148
  .slice(i)
143
149
  .replace(/!+$/, "")
144
150
  .replace(/!!+/g, "!");
145
- if (loadersRequest === "") {
146
- loaders = [];
147
- } else {
148
- loaders = loadersRequest.split("!");
149
- }
151
+ loaders = loadersRequest === "" ? [] : loadersRequest.split("!");
150
152
  resource = request.slice(idx + 1);
151
153
  } else {
152
154
  loaders = [];
@@ -168,8 +170,14 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
168
170
  asyncLib.parallel(
169
171
  [
170
172
  callback => {
171
- const results = [];
172
- const yield_ = obj => results.push(obj);
173
+ const results = /** @type ResolveRequest[] */ ([]);
174
+ /**
175
+ * @param {ResolveRequest} obj obj
176
+ * @returns {void}
177
+ */
178
+ const yield_ = obj => {
179
+ results.push(obj);
180
+ };
173
181
 
174
182
  contextResolver.resolve(
175
183
  {},
@@ -202,7 +210,7 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
202
210
  },
203
211
  (err, result) => {
204
212
  if (err) return callback(err);
205
- callback(null, result);
213
+ callback(null, /** @type {string} */ (result));
206
214
  }
207
215
  );
208
216
  },
@@ -218,7 +226,8 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
218
226
  contextDependencies
219
227
  });
220
228
  }
221
- let [contextResult, loaderResult] = result;
229
+ let [contextResult, loaderResult] =
230
+ /** @type {[ResolveRequest[], string[]]} */ (result);
222
231
  if (contextResult.length > 1) {
223
232
  const first = contextResult[0];
224
233
  contextResult = contextResult.filter(r => r.path);
@@ -294,10 +303,19 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
294
303
  } = options;
295
304
  if (!regExp || !resource) return callback(null, []);
296
305
 
306
+ /**
307
+ * @param {string} ctx context
308
+ * @param {string} directory directory
309
+ * @param {Set<string>} visited visited
310
+ * @param {ResolveDependenciesCallback} callback callback
311
+ */
297
312
  const addDirectoryChecked = (ctx, directory, visited, callback) => {
298
- fs.realpath(directory, (err, realPath) => {
313
+ /** @type {NonNullable<InputFileSystem["realpath"]>} */
314
+ (fs.realpath)(directory, (err, _realPath) => {
299
315
  if (err) return callback(err);
316
+ const realPath = /** @type {string} */ (_realPath);
300
317
  if (visited.has(realPath)) return callback(null, []);
318
+ /** @type {Set<string> | undefined} */
301
319
  let recursionStack;
302
320
  addDirectory(
303
321
  ctx,
@@ -314,6 +332,12 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
314
332
  });
315
333
  };
316
334
 
335
+ /**
336
+ * @param {string} ctx context
337
+ * @param {string} directory directory
338
+ * @param {function(string, string, function(): void): void} addSubDirectory addSubDirectoryFn
339
+ * @param {ResolveDependenciesCallback} callback callback
340
+ */
317
341
  const addDirectory = (ctx, directory, addSubDirectory, callback) => {
318
342
  fs.readdir(directory, (err, files) => {
319
343
  if (err) return callback(err);
@@ -328,17 +352,18 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
328
352
  const subResource = join(fs, directory, segment);
329
353
 
330
354
  if (!exclude || !subResource.match(exclude)) {
331
- fs.stat(subResource, (err, stat) => {
355
+ fs.stat(subResource, (err, _stat) => {
332
356
  if (err) {
333
357
  if (err.code === "ENOENT") {
334
358
  // ENOENT is ok here because the file may have been deleted between
335
359
  // the readdir and stat calls.
336
360
  return callback();
337
- } else {
338
- return callback(err);
339
361
  }
362
+ return callback(err);
340
363
  }
341
364
 
365
+ const stat = /** @type {IStats} */ (_stat);
366
+
342
367
  if (stat.isDirectory()) {
343
368
  if (!recursive) return callback();
344
369
  addSubDirectory(ctx, subResource, callback);
@@ -346,10 +371,10 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
346
371
  stat.isFile() &&
347
372
  (!include || subResource.match(include))
348
373
  ) {
374
+ /** @type {{ context: string, request: string }} */
349
375
  const obj = {
350
376
  context: ctx,
351
- request:
352
- "." + subResource.slice(ctx.length).replace(/\\/g, "/")
377
+ request: `.${subResource.slice(ctx.length).replace(/\\/g, "/")}`
353
378
  };
354
379
 
355
380
  this.hooks.alternativeRequests.callAsync(
@@ -357,22 +382,29 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
357
382
  options,
358
383
  (err, alternatives) => {
359
384
  if (err) return callback(err);
360
- alternatives = alternatives
361
- .filter(obj => regExp.test(obj.request))
362
- .map(obj => {
363
- const dep = new ContextElementDependency(
364
- `${obj.request}${resourceQuery}${resourceFragment}`,
365
- obj.request,
366
- typePrefix,
367
- category,
368
- referencedExports,
369
- obj.context,
370
- attributes
371
- );
372
- dep.optional = true;
373
- return dep;
374
- });
375
- callback(null, alternatives);
385
+ callback(
386
+ null,
387
+ /** @type {ContextAlternativeRequest[]} */
388
+ (alternatives)
389
+ .filter(obj =>
390
+ regExp.test(/** @type {string} */ (obj.request))
391
+ )
392
+ .map(obj => {
393
+ const dep = new ContextElementDependency(
394
+ `${obj.request}${resourceQuery}${resourceFragment}`,
395
+ obj.request,
396
+ typePrefix,
397
+ /** @type {string} */
398
+ (category),
399
+ referencedExports,
400
+ /** @type {TODO} */
401
+ (obj.context),
402
+ attributes
403
+ );
404
+ dep.optional = true;
405
+ return dep;
406
+ })
407
+ );
376
408
  }
377
409
  );
378
410
  } else {
@@ -400,9 +432,19 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
400
432
  });
401
433
  };
402
434
 
435
+ /**
436
+ * @param {string} ctx context
437
+ * @param {string} dir dir
438
+ * @param {ResolveDependenciesCallback} callback callback
439
+ * @returns {void}
440
+ */
403
441
  const addSubDirectory = (ctx, dir, callback) =>
404
442
  addDirectory(ctx, dir, addSubDirectory, callback);
405
443
 
444
+ /**
445
+ * @param {string} resource resource
446
+ * @param {ResolveDependenciesCallback} callback callback
447
+ */
406
448
  const visitResource = (resource, callback) => {
407
449
  if (typeof fs.realpath === "function") {
408
450
  addDirectoryChecked(resource, resource, new Set(), callback);
@@ -414,12 +456,15 @@ module.exports = class ContextModuleFactory extends ModuleFactory {
414
456
  if (typeof resource === "string") {
415
457
  visitResource(resource, callback);
416
458
  } else {
417
- asyncLib.map(resource, visitResource, (err, result) => {
459
+ asyncLib.map(resource, visitResource, (err, _result) => {
418
460
  if (err) return callback(err);
461
+ const result = /** @type {ContextElementDependency[][]} */ (_result);
419
462
 
420
463
  // result dependencies should have unique userRequest
421
464
  // ordered by resolve result
465
+ /** @type {Set<string>} */
422
466
  const temp = new Set();
467
+ /** @type {ContextElementDependency[]} */
423
468
  const res = [];
424
469
  for (let i = 0; i < result.length; i++) {
425
470
  const inner = result[i];
@@ -16,7 +16,7 @@ class ContextReplacementPlugin {
16
16
  * @param {RegExp} resourceRegExp A regular expression that determines which files will be selected
17
17
  * @param {TODO=} newContentResource A new resource to replace the match
18
18
  * @param {TODO=} newContentRecursive If true, all subdirectories are searched for matches
19
- * @param {TODO=} newContentRegExp A regular expression that determines which files will be selected
19
+ * @param {RegExp=} newContentRegExp A regular expression that determines which files will be selected
20
20
  */
21
21
  constructor(
22
22
  resourceRegExp,
@@ -154,14 +154,15 @@ const createResolveDependenciesFromContextMap = createContextMap => {
154
154
  const resolveDependenciesFromContextMap = (fs, options, callback) => {
155
155
  createContextMap(fs, (err, map) => {
156
156
  if (err) return callback(err);
157
- const dependencies = Object.keys(map).map(key => {
158
- return new ContextElementDependency(
159
- map[key] + options.resourceQuery + options.resourceFragment,
160
- key,
161
- options.category,
162
- options.referencedExports
163
- );
164
- });
157
+ const dependencies = Object.keys(map).map(
158
+ key =>
159
+ new ContextElementDependency(
160
+ map[key] + options.resourceQuery + options.resourceFragment,
161
+ key,
162
+ options.category,
163
+ options.referencedExports
164
+ )
165
+ );
165
166
  callback(null, dependencies);
166
167
  });
167
168
  };