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
@@ -85,24 +85,48 @@ const requestToAbsolute = (context, relativePath) => {
85
85
  return relativePath;
86
86
  };
87
87
 
88
+ /**
89
+ * @template T
90
+ * @typedef {function(string, object=): T} MakeCacheableResult
91
+ */
92
+
93
+ /**
94
+ * @template T
95
+ * @typedef {function(string): T} BindCacheResultFn
96
+ */
97
+
98
+ /**
99
+ * @template T
100
+ * @typedef {function(object): BindCacheResultFn<T>} BindCache
101
+ */
102
+
103
+ /**
104
+ * @template T
105
+ * @param {(function(string): T)} realFn real function
106
+ * @returns {MakeCacheableResult<T> & { bindCache: BindCache<T> }} cacheable function
107
+ */
88
108
  const makeCacheable = realFn => {
89
- /** @type {WeakMap<object, Map<string, ParsedResource>>} */
109
+ /**
110
+ * @template T
111
+ * @typedef {Map<string, T>} CacheItem
112
+ */
113
+ /** @type {WeakMap<object, CacheItem<T>>} */
90
114
  const cache = new WeakMap();
91
115
 
116
+ /**
117
+ * @param {object} associatedObjectForCache an object to which the cache will be attached
118
+ * @returns {CacheItem<T>} cache item
119
+ */
92
120
  const getCache = associatedObjectForCache => {
93
121
  const entry = cache.get(associatedObjectForCache);
94
122
  if (entry !== undefined) return entry;
95
- /** @type {Map<string, ParsedResource>} */
123
+ /** @type {Map<string, T>} */
96
124
  const map = new Map();
97
125
  cache.set(associatedObjectForCache, map);
98
126
  return map;
99
127
  };
100
128
 
101
- /**
102
- * @param {string} str the path with query and fragment
103
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
104
- * @returns {ParsedResource} parsed parts
105
- */
129
+ /** @type {MakeCacheableResult<T> & { bindCache: BindCache<T> }} */
106
130
  const fn = (str, associatedObjectForCache) => {
107
131
  if (!associatedObjectForCache) return realFn(str);
108
132
  const cache = getCache(associatedObjectForCache);
@@ -113,8 +137,13 @@ const makeCacheable = realFn => {
113
137
  return result;
114
138
  };
115
139
 
140
+ /** @type {BindCache<T>} */
116
141
  fn.bindCache = associatedObjectForCache => {
117
142
  const cache = getCache(associatedObjectForCache);
143
+ /**
144
+ * @param {string} str string
145
+ * @returns {T} value
146
+ */
118
147
  return str => {
119
148
  const entry = cache.get(str);
120
149
  if (entry !== undefined) return entry;
@@ -127,16 +156,21 @@ const makeCacheable = realFn => {
127
156
  return fn;
128
157
  };
129
158
 
159
+ /** @typedef {function(string, string, object=): string} MakeCacheableWithContextResult */
160
+ /** @typedef {function(string, string): string} BindCacheForContextResultFn */
161
+ /** @typedef {function(string): string} BindContextCacheForContextResultFn */
162
+ /** @typedef {function(object=): BindCacheForContextResultFn} BindCacheForContext */
163
+ /** @typedef {function(string, object=): BindContextCacheForContextResultFn} BindContextCacheForContext */
164
+
165
+ /**
166
+ * @param {function(string, string): string} fn function
167
+ * @returns {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} cacheable function with context
168
+ */
130
169
  const makeCacheableWithContext = fn => {
131
170
  /** @type {WeakMap<object, Map<string, Map<string, string>>>} */
132
171
  const cache = new WeakMap();
133
172
 
134
- /**
135
- * @param {string} context context used to create relative path
136
- * @param {string} identifier identifier used to create relative path
137
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
138
- * @returns {string} the returned relative path
139
- */
173
+ /** @type {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} */
140
174
  const cachedFn = (context, identifier, associatedObjectForCache) => {
141
175
  if (!associatedObjectForCache) return fn(context, identifier);
142
176
 
@@ -156,17 +190,13 @@ const makeCacheableWithContext = fn => {
156
190
 
157
191
  if (cachedResult !== undefined) {
158
192
  return cachedResult;
159
- } else {
160
- const result = fn(context, identifier);
161
- innerSubCache.set(identifier, result);
162
- return result;
163
193
  }
194
+ const result = fn(context, identifier);
195
+ innerSubCache.set(identifier, result);
196
+ return result;
164
197
  };
165
198
 
166
- /**
167
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
168
- * @returns {function(string, string): string} cached function
169
- */
199
+ /** @type {BindCacheForContext} */
170
200
  cachedFn.bindCache = associatedObjectForCache => {
171
201
  let innerCache;
172
202
  if (associatedObjectForCache) {
@@ -195,21 +225,16 @@ const makeCacheableWithContext = fn => {
195
225
 
196
226
  if (cachedResult !== undefined) {
197
227
  return cachedResult;
198
- } else {
199
- const result = fn(context, identifier);
200
- innerSubCache.set(identifier, result);
201
- return result;
202
228
  }
229
+ const result = fn(context, identifier);
230
+ innerSubCache.set(identifier, result);
231
+ return result;
203
232
  };
204
233
 
205
234
  return boundFn;
206
235
  };
207
236
 
208
- /**
209
- * @param {string} context context used to create relative path
210
- * @param {object=} associatedObjectForCache an object to which the cache will be attached
211
- * @returns {function(string): string} cached function
212
- */
237
+ /** @type {BindContextCacheForContext} */
213
238
  cachedFn.bindContextCache = (context, associatedObjectForCache) => {
214
239
  let innerSubCache;
215
240
  if (associatedObjectForCache) {
@@ -235,11 +260,10 @@ const makeCacheableWithContext = fn => {
235
260
  const cachedResult = innerSubCache.get(identifier);
236
261
  if (cachedResult !== undefined) {
237
262
  return cachedResult;
238
- } else {
239
- const result = fn(context, identifier);
240
- innerSubCache.set(identifier, result);
241
- return result;
242
263
  }
264
+ const result = fn(context, identifier);
265
+ innerSubCache.set(identifier, result);
266
+ return result;
243
267
  };
244
268
 
245
269
  return boundFn;
@@ -249,64 +273,58 @@ const makeCacheableWithContext = fn => {
249
273
  };
250
274
 
251
275
  /**
252
- *
253
276
  * @param {string} context context for relative path
254
277
  * @param {string} identifier identifier for path
255
278
  * @returns {string} a converted relative path
256
279
  */
257
- const _makePathsRelative = (context, identifier) => {
258
- return identifier
280
+ const _makePathsRelative = (context, identifier) =>
281
+ identifier
259
282
  .split(SEGMENTS_SPLIT_REGEXP)
260
283
  .map(str => absoluteToRequest(context, str))
261
284
  .join("");
262
- };
263
285
 
264
- exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
286
+ module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
265
287
 
266
288
  /**
267
- *
268
289
  * @param {string} context context for relative path
269
290
  * @param {string} identifier identifier for path
270
291
  * @returns {string} a converted relative path
271
292
  */
272
- const _makePathsAbsolute = (context, identifier) => {
273
- return identifier
293
+ const _makePathsAbsolute = (context, identifier) =>
294
+ identifier
274
295
  .split(SEGMENTS_SPLIT_REGEXP)
275
296
  .map(str => requestToAbsolute(context, str))
276
297
  .join("");
277
- };
278
298
 
279
- exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
299
+ module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
280
300
 
281
301
  /**
282
302
  * @param {string} context absolute context path
283
303
  * @param {string} request any request string may containing absolute paths, query string, etc.
284
304
  * @returns {string} a new request string avoiding absolute paths when possible
285
305
  */
286
- const _contextify = (context, request) => {
287
- return request
306
+ const _contextify = (context, request) =>
307
+ request
288
308
  .split("!")
289
309
  .map(r => absoluteToRequest(context, r))
290
310
  .join("!");
291
- };
292
311
 
293
312
  const contextify = makeCacheableWithContext(_contextify);
294
- exports.contextify = contextify;
313
+ module.exports.contextify = contextify;
295
314
 
296
315
  /**
297
316
  * @param {string} context absolute context path
298
317
  * @param {string} request any request string
299
318
  * @returns {string} a new request string using absolute paths when possible
300
319
  */
301
- const _absolutify = (context, request) => {
302
- return request
320
+ const _absolutify = (context, request) =>
321
+ request
303
322
  .split("!")
304
323
  .map(r => requestToAbsolute(context, r))
305
324
  .join("!");
306
- };
307
325
 
308
326
  const absolutify = makeCacheableWithContext(_absolutify);
309
- exports.absolutify = absolutify;
327
+ module.exports.absolutify = absolutify;
310
328
 
311
329
  const PATH_QUERY_FRAGMENT_REGEXP =
312
330
  /^((?:\0.|[^?#\0])*)(\?(?:\0.|[^#\0])*)?(#.*)?$/;
@@ -320,7 +338,9 @@ const PATH_QUERY_REGEXP = /^((?:\0.|[^?\0])*)(\?.*)?$/;
320
338
  * @returns {ParsedResource} parsed parts
321
339
  */
322
340
  const _parseResource = str => {
323
- const match = PATH_QUERY_FRAGMENT_REGEXP.exec(str);
341
+ const match =
342
+ /** @type {[string, string, string | undefined, string | undefined]} */
343
+ (/** @type {unknown} */ (PATH_QUERY_FRAGMENT_REGEXP.exec(str)));
324
344
  return {
325
345
  resource: str,
326
346
  path: match[1].replace(/\0(.)/g, "$1"),
@@ -328,7 +348,7 @@ const _parseResource = str => {
328
348
  fragment: match[3] || ""
329
349
  };
330
350
  };
331
- exports.parseResource = makeCacheable(_parseResource);
351
+ module.exports.parseResource = makeCacheable(_parseResource);
332
352
 
333
353
  /**
334
354
  * Parse resource, skips fragment part
@@ -336,14 +356,16 @@ exports.parseResource = makeCacheable(_parseResource);
336
356
  * @returns {ParsedResourceWithoutFragment} parsed parts
337
357
  */
338
358
  const _parseResourceWithoutFragment = str => {
339
- const match = PATH_QUERY_REGEXP.exec(str);
359
+ const match =
360
+ /** @type {[string, string, string | undefined]} */
361
+ (/** @type {unknown} */ (PATH_QUERY_REGEXP.exec(str)));
340
362
  return {
341
363
  resource: str,
342
364
  path: match[1].replace(/\0(.)/g, "$1"),
343
365
  query: match[2] ? match[2].replace(/\0(.)/g, "$1") : ""
344
366
  };
345
367
  };
346
- exports.parseResourceWithoutFragment = makeCacheable(
368
+ module.exports.parseResourceWithoutFragment = makeCacheable(
347
369
  _parseResourceWithoutFragment
348
370
  );
349
371
 
@@ -353,7 +375,7 @@ exports.parseResourceWithoutFragment = makeCacheable(
353
375
  * @param {boolean} enforceRelative true returns ./ for empty paths
354
376
  * @returns {string} repeated ../ to leave the directory of the provided filename to be back on output dir
355
377
  */
356
- exports.getUndoPath = (filename, outputPath, enforceRelative) => {
378
+ module.exports.getUndoPath = (filename, outputPath, enforceRelative) => {
357
379
  let depth = -1;
358
380
  let append = "";
359
381
  outputPath = outputPath.replace(/[\\/]$/, "");
@@ -365,8 +387,8 @@ exports.getUndoPath = (filename, outputPath, enforceRelative) => {
365
387
  const i = outputPath.lastIndexOf("/");
366
388
  const j = outputPath.lastIndexOf("\\");
367
389
  const pos = i < 0 ? j : j < 0 ? i : Math.max(i, j);
368
- if (pos < 0) return outputPath + "/";
369
- append = outputPath.slice(pos + 1) + "/" + append;
390
+ if (pos < 0) return `${outputPath}/`;
391
+ append = `${outputPath.slice(pos + 1)}/${append}`;
370
392
  outputPath = outputPath.slice(0, pos);
371
393
  }
372
394
  } else if (part !== ".") {
@@ -14,20 +14,18 @@
14
14
  const memoize = fn => {
15
15
  let cache = false;
16
16
  /** @type {T | undefined} */
17
- let result = undefined;
17
+ let result;
18
18
  return () => {
19
19
  if (cache) {
20
20
  return /** @type {T} */ (result);
21
- } else {
22
- result = fn();
23
- cache = true;
24
- // Allow to clean up memory for fn
25
- // and all dependent resources
26
- // eslint-disable-next-line no-warning-comments
27
- // @ts-ignore
28
- fn = undefined;
29
- return /** @type {T} */ (result);
30
21
  }
22
+
23
+ result = fn();
24
+ cache = true;
25
+ // Allow to clean up memory for fn
26
+ // and all dependent resources
27
+ fn = undefined;
28
+ return /** @type {T} */ (result);
31
29
  };
32
30
  };
33
31
 
@@ -42,18 +42,15 @@ const getPathInAst = (ast, node) => {
42
42
  const nr = node.range;
43
43
 
44
44
  const enterNode = n => {
45
- if (!n) return undefined;
45
+ if (!n) return;
46
46
  const r = n.range;
47
- if (r) {
48
- if (r[0] <= nr[0] && r[1] >= nr[1]) {
49
- const path = getPathInAst(n, node);
50
- if (path) {
51
- path.push(n);
52
- return path;
53
- }
47
+ if (r && r[0] <= nr[0] && r[1] >= nr[1]) {
48
+ const path = getPathInAst(n, node);
49
+ if (path) {
50
+ path.push(n);
51
+ return path;
54
52
  }
55
53
  }
56
- return undefined;
57
54
  };
58
55
 
59
56
  if (Array.isArray(ast)) {
@@ -15,8 +15,8 @@ const A_CODE = "a".charCodeAt(0);
15
15
  module.exports = (hash, hashLength) => {
16
16
  if (hashLength < 1) return "";
17
17
  const slice = hash.slice(0, hashLength);
18
- if (slice.match(/[^\d]/)) return slice;
18
+ if (/[^\d]/.test(slice)) return slice;
19
19
  return `${String.fromCharCode(
20
- A_CODE + (parseInt(hash[0], 10) % 6)
20
+ A_CODE + (Number.parseInt(hash[0], 10) % 6)
21
21
  )}${slice.slice(1)}`;
22
22
  };
@@ -77,24 +77,19 @@ function fnv1a64(str) {
77
77
  *
78
78
  * We use `numberHash` in `lib/ids/IdHelpers.js` to generate hash values for the module identifier. The generated
79
79
  * hash is used as a prefix for the module id's to avoid collisions with other modules.
80
- *
81
80
  * @param {string} str The input string to hash.
82
81
  * @param {number} range The range of the hash value (0 to range-1).
83
82
  * @returns {number} - The computed hash value.
84
- *
85
83
  * @example
86
- *
87
84
  * ```js
88
85
  * const numberHash = require("webpack/lib/util/numberHash");
89
86
  * numberHash("hello", 1000); // 73
90
87
  * numberHash("hello world"); // 72
91
88
  * ```
92
- *
93
89
  */
94
90
  module.exports = (str, range) => {
95
91
  if (range < FNV_64_THRESHOLD) {
96
92
  return fnv1a32(str) % range;
97
- } else {
98
- return Number(fnv1a64(str) % BigInt(range));
99
93
  }
94
+ return Number(fnv1a64(str) % BigInt(range));
100
95
  };
@@ -6,7 +6,6 @@
6
6
 
7
7
  /**
8
8
  * Convert an object into an ES6 map
9
- *
10
9
  * @param {object} obj any object type that works with Object.entries()
11
10
  * @returns {Map<string, any>} an ES6 Map of KV pairs
12
11
  */
@@ -5,10 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const {
9
- SAFE_IDENTIFIER,
10
- RESERVED_IDENTIFIER
11
- } = require("../util/propertyName");
8
+ const { SAFE_IDENTIFIER, RESERVED_IDENTIFIER } = require("./propertyName");
12
9
 
13
10
  /**
14
11
  * @param {ArrayLike<string>} properties properties
@@ -19,7 +16,7 @@ const propertyAccess = (properties, start = 0) => {
19
16
  let str = "";
20
17
  for (let i = start; i < properties.length; i++) {
21
18
  const p = properties[i];
22
- if (`${+p}` === p) {
19
+ if (`${Number(p)}` === p) {
23
20
  str += `[${p}]`;
24
21
  } else if (SAFE_IDENTIFIER.test(p) && !RESERVED_IDENTIFIER.has(p)) {
25
22
  str += `.${p}`;
@@ -64,16 +64,14 @@ const RESERVED_IDENTIFIER = new Set([
64
64
  * @summary Returns a valid JS property name for the given property.
65
65
  * Certain strings like "default", "null", and names with whitespace are not
66
66
  * valid JS property names, so they are returned as strings.
67
- *
68
67
  * @param {string} prop property name to analyze
69
68
  * @returns {string} valid JS property name
70
69
  */
71
70
  const propertyName = prop => {
72
71
  if (SAFE_IDENTIFIER.test(prop) && !RESERVED_IDENTIFIER.has(prop)) {
73
72
  return prop;
74
- } else {
75
- return JSON.stringify(prop);
76
73
  }
74
+ return JSON.stringify(prop);
77
75
  };
78
76
 
79
77
  module.exports = { SAFE_IDENTIFIER, RESERVED_IDENTIFIER, propertyName };
@@ -9,7 +9,7 @@ const { register } = require("./serialization");
9
9
 
10
10
  const Position = /** @type {TODO} */ (require("acorn")).Position;
11
11
  const SourceLocation = require("acorn").SourceLocation;
12
- const ValidationError = require("schema-utils/dist/ValidationError").default;
12
+ const ValidationError = require("schema-utils").ValidationError;
13
13
  const {
14
14
  CachedSource,
15
15
  ConcatSource,