webpack 5.59.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 (570) hide show
  1. package/README.md +48 -38
  2. package/bin/webpack.js +34 -10
  3. package/hot/dev-server.js +19 -5
  4. package/hot/lazy-compilation-node.js +13 -1
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +23 -4
  8. package/hot/only-dev-server.js +3 -2
  9. package/hot/poll.js +5 -2
  10. package/hot/signal.js +6 -2
  11. package/lib/APIPlugin.js +226 -122
  12. package/lib/AbstractMethodError.js +10 -5
  13. package/lib/AsyncDependenciesBlock.js +13 -5
  14. package/lib/AutomaticPrefetchPlugin.js +2 -1
  15. package/lib/BannerPlugin.js +33 -12
  16. package/lib/Cache.js +16 -12
  17. package/lib/CacheFacade.js +13 -16
  18. package/lib/CaseSensitiveModulesWarning.js +8 -8
  19. package/lib/Chunk.js +60 -33
  20. package/lib/ChunkGraph.js +207 -72
  21. package/lib/ChunkGroup.js +40 -20
  22. package/lib/ChunkTemplate.js +43 -0
  23. package/lib/CleanPlugin.js +117 -32
  24. package/lib/CodeGenerationResults.js +8 -7
  25. package/lib/CommentCompilationWarning.js +0 -1
  26. package/lib/CompatibilityPlugin.js +85 -46
  27. package/lib/Compilation.js +712 -392
  28. package/lib/Compiler.js +393 -172
  29. package/lib/ConcatenationScope.js +10 -13
  30. package/lib/ConditionalInitFragment.js +22 -14
  31. package/lib/ConstPlugin.js +104 -64
  32. package/lib/ContextExclusionPlugin.js +3 -3
  33. package/lib/ContextModule.js +283 -108
  34. package/lib/ContextModuleFactory.js +151 -63
  35. package/lib/ContextReplacementPlugin.js +25 -10
  36. package/lib/CssModule.js +166 -0
  37. package/lib/DefinePlugin.js +254 -148
  38. package/lib/DelegatedModule.js +29 -6
  39. package/lib/DelegatedModuleFactoryPlugin.js +42 -22
  40. package/lib/DelegatedPlugin.js +4 -0
  41. package/lib/DependenciesBlock.js +17 -2
  42. package/lib/Dependency.js +58 -29
  43. package/lib/DependencyTemplate.js +24 -3
  44. package/lib/DependencyTemplates.js +2 -2
  45. package/lib/DllEntryPlugin.js +18 -1
  46. package/lib/DllModule.js +21 -4
  47. package/lib/DllModuleFactory.js +2 -1
  48. package/lib/DllPlugin.js +9 -7
  49. package/lib/DllReferencePlugin.js +50 -19
  50. package/lib/EntryOptionPlugin.js +6 -1
  51. package/lib/EntryPlugin.js +7 -4
  52. package/lib/Entrypoint.js +2 -2
  53. package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
  54. package/lib/EnvironmentPlugin.js +5 -2
  55. package/lib/ErrorHelpers.js +65 -26
  56. package/lib/EvalDevToolModulePlugin.js +37 -13
  57. package/lib/EvalSourceMapDevToolPlugin.js +50 -20
  58. package/lib/ExportsInfo.js +234 -133
  59. package/lib/ExportsInfoApiPlugin.js +31 -15
  60. package/lib/ExternalModule.js +391 -129
  61. package/lib/ExternalModuleFactoryPlugin.js +65 -17
  62. package/lib/FileSystemInfo.js +1038 -523
  63. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  64. package/lib/FlagDependencyExportsPlugin.js +352 -349
  65. package/lib/FlagDependencyUsagePlugin.js +10 -10
  66. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  67. package/lib/Generator.js +16 -8
  68. package/lib/GraphHelpers.js +3 -2
  69. package/lib/HookWebpackError.js +11 -13
  70. package/lib/HotModuleReplacementPlugin.js +221 -128
  71. package/lib/IgnoreErrorModuleFactory.js +4 -4
  72. package/lib/IgnorePlugin.js +5 -4
  73. package/lib/IgnoreWarningsPlugin.js +6 -9
  74. package/lib/InitFragment.js +39 -15
  75. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  76. package/lib/LibManifestPlugin.js +45 -16
  77. package/lib/LoaderOptionsPlugin.js +13 -3
  78. package/lib/MainTemplate.js +74 -21
  79. package/lib/Module.js +155 -34
  80. package/lib/ModuleBuildError.js +13 -11
  81. package/lib/ModuleDependencyError.js +6 -4
  82. package/lib/ModuleDependencyWarning.js +6 -4
  83. package/lib/ModuleError.js +10 -5
  84. package/lib/ModuleFactory.js +4 -4
  85. package/lib/ModuleFilenameHelpers.js +164 -54
  86. package/lib/ModuleGraph.js +93 -53
  87. package/lib/ModuleGraphConnection.js +27 -13
  88. package/lib/ModuleHashingError.js +29 -0
  89. package/lib/ModuleInfoHeaderPlugin.js +92 -33
  90. package/lib/ModuleNotFoundError.js +5 -2
  91. package/lib/ModuleParseError.js +17 -9
  92. package/lib/ModuleProfile.js +1 -0
  93. package/lib/ModuleRestoreError.js +3 -1
  94. package/lib/ModuleStoreError.js +3 -2
  95. package/lib/ModuleTemplate.js +33 -1
  96. package/lib/ModuleTypeConstants.js +168 -0
  97. package/lib/ModuleWarning.js +10 -5
  98. package/lib/MultiCompiler.js +115 -38
  99. package/lib/MultiStats.js +75 -33
  100. package/lib/MultiWatching.js +6 -2
  101. package/lib/NodeStuffPlugin.js +136 -37
  102. package/lib/NormalModule.js +437 -194
  103. package/lib/NormalModuleFactory.js +313 -116
  104. package/lib/NormalModuleReplacementPlugin.js +10 -4
  105. package/lib/NullFactory.js +1 -1
  106. package/lib/OptimizationStages.js +3 -3
  107. package/lib/Parser.js +1 -1
  108. package/lib/PlatformPlugin.js +39 -0
  109. package/lib/PrefetchPlugin.js +4 -0
  110. package/lib/ProgressPlugin.js +83 -28
  111. package/lib/ProvidePlugin.js +37 -19
  112. package/lib/RawModule.js +18 -5
  113. package/lib/RecordIdsPlugin.js +8 -8
  114. package/lib/RequireJsStuffPlugin.js +22 -15
  115. package/lib/ResolverFactory.js +8 -4
  116. package/lib/RuntimeGlobals.js +99 -65
  117. package/lib/RuntimeModule.js +17 -15
  118. package/lib/RuntimePlugin.js +116 -13
  119. package/lib/RuntimeTemplate.js +304 -102
  120. package/lib/SelfModuleFactory.js +12 -0
  121. package/lib/SizeFormatHelpers.js +2 -4
  122. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  123. package/lib/SourceMapDevToolPlugin.js +89 -42
  124. package/lib/Stats.js +12 -7
  125. package/lib/Template.js +30 -33
  126. package/lib/TemplatedPathPlugin.js +102 -34
  127. package/lib/UseStrictPlugin.js +37 -12
  128. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  129. package/lib/WarnDeprecatedOptionPlugin.js +6 -0
  130. package/lib/WatchIgnorePlugin.js +46 -13
  131. package/lib/Watching.js +139 -76
  132. package/lib/WebpackError.js +14 -5
  133. package/lib/WebpackIsIncludedPlugin.js +22 -13
  134. package/lib/WebpackOptionsApply.js +162 -56
  135. package/lib/WebpackOptionsDefaulter.js +10 -3
  136. package/lib/asset/AssetGenerator.js +351 -99
  137. package/lib/asset/AssetModulesPlugin.js +57 -33
  138. package/lib/asset/AssetParser.js +15 -6
  139. package/lib/asset/AssetSourceGenerator.js +30 -10
  140. package/lib/asset/AssetSourceParser.js +8 -2
  141. package/lib/asset/RawDataUrlModule.js +162 -0
  142. package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
  143. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  144. package/lib/buildChunkGraph.js +376 -420
  145. package/lib/cache/AddManagedPathsPlugin.js +6 -1
  146. package/lib/cache/IdleFileCachePlugin.js +26 -13
  147. package/lib/cache/MemoryCachePlugin.js +1 -1
  148. package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
  149. package/lib/cache/PackFileCacheStrategy.js +172 -94
  150. package/lib/cache/ResolverCachePlugin.js +115 -43
  151. package/lib/cache/getLazyHashedEtag.js +2 -2
  152. package/lib/cache/mergeEtags.js +16 -21
  153. package/lib/cli.js +195 -110
  154. package/lib/config/browserslistTargetHandler.js +106 -41
  155. package/lib/config/defaults.js +572 -154
  156. package/lib/config/normalization.js +361 -322
  157. package/lib/config/target.js +105 -66
  158. package/lib/container/ContainerEntryDependency.js +2 -1
  159. package/lib/container/ContainerEntryModule.js +27 -11
  160. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  161. package/lib/container/ContainerExposedDependency.js +9 -0
  162. package/lib/container/ContainerPlugin.js +18 -12
  163. package/lib/container/ContainerReferencePlugin.js +1 -1
  164. package/lib/container/FallbackDependency.js +13 -0
  165. package/lib/container/FallbackItemDependency.js +3 -0
  166. package/lib/container/FallbackModule.js +19 -8
  167. package/lib/container/FallbackModuleFactory.js +1 -1
  168. package/lib/container/ModuleFederationPlugin.js +2 -0
  169. package/lib/container/RemoteModule.js +17 -4
  170. package/lib/container/RemoteRuntimeModule.js +31 -17
  171. package/lib/container/RemoteToExternalDependency.js +3 -0
  172. package/lib/container/options.js +18 -4
  173. package/lib/css/CssExportsGenerator.js +203 -0
  174. package/lib/css/CssGenerator.js +151 -0
  175. package/lib/css/CssLoadingRuntimeModule.js +592 -0
  176. package/lib/css/CssModulesPlugin.js +888 -0
  177. package/lib/css/CssParser.js +1049 -0
  178. package/lib/css/walkCssTokens.js +775 -0
  179. package/lib/debug/ProfilingPlugin.js +102 -54
  180. package/lib/dependencies/AMDDefineDependency.js +54 -10
  181. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
  182. package/lib/dependencies/AMDPlugin.js +44 -24
  183. package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
  184. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  185. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  186. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
  187. package/lib/dependencies/AMDRequireDependency.js +21 -6
  188. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  189. package/lib/dependencies/AMDRuntimeModules.js +4 -4
  190. package/lib/dependencies/CachedConstDependency.js +22 -1
  191. package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
  193. package/lib/dependencies/CommonJsExportsDependency.js +28 -5
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
  197. package/lib/dependencies/CommonJsPlugin.js +51 -26
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
  199. package/lib/dependencies/CommonJsRequireDependency.js +9 -1
  200. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
  201. package/lib/dependencies/ConstDependency.js +12 -3
  202. package/lib/dependencies/ContextDependency.js +32 -5
  203. package/lib/dependencies/ContextDependencyHelpers.js +92 -62
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
  205. package/lib/dependencies/ContextElementDependency.js +41 -4
  206. package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
  207. package/lib/dependencies/CriticalDependencyWarning.js +4 -1
  208. package/lib/dependencies/CssExportDependency.js +156 -0
  209. package/lib/dependencies/CssImportDependency.js +125 -0
  210. package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
  211. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
  212. package/lib/dependencies/CssUrlDependency.js +164 -0
  213. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  214. package/lib/dependencies/DllEntryDependency.js +14 -0
  215. package/lib/dependencies/DynamicExports.js +15 -11
  216. package/lib/dependencies/ExportsInfoDependency.js +26 -5
  217. package/lib/dependencies/ExternalModuleDependency.js +109 -0
  218. package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
  219. package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
  220. package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
  221. package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
  222. package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
  223. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
  224. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
  225. package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
  226. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  227. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
  228. package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
  229. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  230. package/lib/dependencies/HarmonyExports.js +13 -7
  231. package/lib/dependencies/HarmonyImportDependency.js +65 -19
  232. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
  233. package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
  234. package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
  235. package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
  236. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  237. package/lib/dependencies/ImportContextDependency.js +15 -2
  238. package/lib/dependencies/ImportDependency.js +50 -12
  239. package/lib/dependencies/ImportEagerDependency.js +11 -6
  240. package/lib/dependencies/ImportMetaContextDependency.js +42 -0
  241. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
  242. package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
  243. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  244. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  245. package/lib/dependencies/ImportMetaPlugin.js +128 -59
  246. package/lib/dependencies/ImportParserPlugin.js +153 -83
  247. package/lib/dependencies/ImportPlugin.js +21 -7
  248. package/lib/dependencies/ImportWeakDependency.js +11 -6
  249. package/lib/dependencies/JsonExportsDependency.js +38 -30
  250. package/lib/dependencies/LoaderDependency.js +14 -0
  251. package/lib/dependencies/LoaderImportDependency.js +14 -0
  252. package/lib/dependencies/LoaderPlugin.js +54 -40
  253. package/lib/dependencies/LocalModule.js +17 -1
  254. package/lib/dependencies/LocalModuleDependency.js +15 -0
  255. package/lib/dependencies/LocalModulesHelpers.js +22 -4
  256. package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
  257. package/lib/dependencies/ModuleDependency.js +24 -7
  258. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  259. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  260. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  261. package/lib/dependencies/PrefetchDependency.js +3 -0
  262. package/lib/dependencies/ProvidedDependency.js +43 -8
  263. package/lib/dependencies/PureExpressionDependency.js +73 -39
  264. package/lib/dependencies/RequireContextDependency.js +6 -16
  265. package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
  266. package/lib/dependencies/RequireContextPlugin.js +20 -7
  267. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  268. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
  269. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  270. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  271. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  272. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  273. package/lib/dependencies/RequireIncludeDependency.js +6 -1
  274. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  275. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  276. package/lib/dependencies/RequireResolveContextDependency.js +19 -2
  277. package/lib/dependencies/RequireResolveDependency.js +8 -1
  278. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  279. package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
  280. package/lib/dependencies/StaticExportsDependency.js +8 -0
  281. package/lib/dependencies/SystemPlugin.js +49 -22
  282. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  283. package/lib/dependencies/URLDependency.js +20 -13
  284. package/lib/dependencies/URLPlugin.js +115 -27
  285. package/lib/dependencies/UnsupportedDependency.js +13 -0
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  287. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
  289. package/lib/dependencies/WorkerDependency.js +47 -3
  290. package/lib/dependencies/WorkerPlugin.js +143 -59
  291. package/lib/dependencies/getFunctionExpression.js +9 -0
  292. package/lib/dependencies/processExportInfo.js +3 -1
  293. package/lib/electron/ElectronTargetPlugin.js +1 -0
  294. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  295. package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
  296. package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
  297. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
  298. package/lib/formatLocation.js +1 -2
  299. package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
  300. package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
  301. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
  302. package/lib/hmr/LazyCompilationPlugin.js +94 -41
  303. package/lib/hmr/lazyCompilationBackend.js +107 -44
  304. package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
  305. package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
  306. package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
  307. package/lib/ids/HashedModuleIdsPlugin.js +24 -16
  308. package/lib/ids/IdHelpers.js +59 -49
  309. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  310. package/lib/ids/NamedModuleIdsPlugin.js +20 -12
  311. package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
  312. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  313. package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
  314. package/lib/ids/SyncModuleIdsPlugin.js +146 -0
  315. package/lib/index.js +44 -5
  316. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
  317. package/lib/javascript/BasicEvaluatedExpression.js +133 -19
  318. package/lib/javascript/ChunkHelpers.js +33 -0
  319. package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
  320. package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
  321. package/lib/javascript/JavascriptGenerator.js +37 -6
  322. package/lib/javascript/JavascriptModulesPlugin.js +523 -295
  323. package/lib/javascript/JavascriptParser.js +1591 -574
  324. package/lib/javascript/JavascriptParserHelpers.js +58 -37
  325. package/lib/javascript/StartupHelpers.js +69 -47
  326. package/lib/json/JsonData.js +33 -0
  327. package/lib/json/JsonGenerator.js +29 -21
  328. package/lib/json/JsonModulesPlugin.js +13 -7
  329. package/lib/json/JsonParser.js +30 -16
  330. package/lib/library/AbstractLibraryPlugin.js +6 -2
  331. package/lib/library/AmdLibraryPlugin.js +34 -18
  332. package/lib/library/AssignLibraryPlugin.js +68 -32
  333. package/lib/library/EnableLibraryPlugin.js +39 -14
  334. package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
  335. package/lib/library/JsonpLibraryPlugin.js +4 -3
  336. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  337. package/lib/library/ModuleLibraryPlugin.js +12 -7
  338. package/lib/library/SystemLibraryPlugin.js +6 -4
  339. package/lib/library/UmdLibraryPlugin.js +119 -100
  340. package/lib/logging/Logger.js +59 -6
  341. package/lib/logging/createConsoleLogger.js +25 -40
  342. package/lib/logging/runtime.js +8 -9
  343. package/lib/logging/truncateArgs.js +9 -8
  344. package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
  345. package/lib/node/NodeEnvironmentPlugin.js +14 -8
  346. package/lib/node/NodeTargetPlugin.js +7 -0
  347. package/lib/node/NodeTemplatePlugin.js +10 -2
  348. package/lib/node/NodeWatchFileSystem.js +100 -50
  349. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
  350. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
  351. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  352. package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
  353. package/lib/node/nodeConsole.js +48 -31
  354. package/lib/optimize/AggressiveMergingPlugin.js +10 -4
  355. package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
  356. package/lib/optimize/ConcatenatedModule.js +353 -212
  357. package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
  358. package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
  359. package/lib/optimize/InnerGraph.js +30 -25
  360. package/lib/optimize/InnerGraphPlugin.js +105 -64
  361. package/lib/optimize/LimitChunkCountPlugin.js +32 -9
  362. package/lib/optimize/MangleExportsPlugin.js +7 -2
  363. package/lib/optimize/MinMaxSizeWarning.js +6 -1
  364. package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
  365. package/lib/optimize/RealContentHashPlugin.js +99 -43
  366. package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
  367. package/lib/optimize/RuntimeChunkPlugin.js +15 -2
  368. package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
  369. package/lib/optimize/SplitChunksPlugin.js +129 -78
  370. package/lib/performance/SizeLimitsPlugin.js +22 -8
  371. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  372. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
  373. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
  374. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
  375. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
  376. package/lib/rules/BasicEffectRulePlugin.js +7 -1
  377. package/lib/rules/BasicMatcherRulePlugin.js +8 -1
  378. package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
  379. package/lib/rules/RuleSetCompiler.js +53 -32
  380. package/lib/rules/UseEffectRulePlugin.js +42 -36
  381. package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
  382. package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
  383. package/lib/runtime/BaseUriRuntimeModule.js +35 -0
  384. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  385. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  386. package/lib/runtime/CompatRuntimeModule.js +7 -2
  387. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
  388. package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
  389. package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
  390. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
  391. package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
  392. package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
  393. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  394. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  395. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
  396. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  397. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  398. package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
  399. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  400. package/lib/runtime/NonceRuntimeModule.js +24 -0
  401. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  402. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  403. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  404. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  405. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  406. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
  407. package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
  408. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  409. package/lib/schemes/DataUriPlugin.js +16 -3
  410. package/lib/schemes/HttpUriPlugin.js +336 -120
  411. package/lib/serialization/ArraySerializer.js +22 -6
  412. package/lib/serialization/BinaryMiddleware.js +212 -33
  413. package/lib/serialization/DateObjectSerializer.js +16 -4
  414. package/lib/serialization/ErrorObjectSerializer.js +23 -6
  415. package/lib/serialization/FileMiddleware.js +187 -86
  416. package/lib/serialization/MapObjectSerializer.js +25 -8
  417. package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
  418. package/lib/serialization/ObjectMiddleware.js +96 -66
  419. package/lib/serialization/PlainObjectSerializer.js +51 -14
  420. package/lib/serialization/RegExpObjectSerializer.js +17 -5
  421. package/lib/serialization/Serializer.js +23 -5
  422. package/lib/serialization/SerializerMiddleware.js +8 -8
  423. package/lib/serialization/SetObjectSerializer.js +22 -6
  424. package/lib/serialization/SingleItemMiddleware.js +2 -2
  425. package/lib/serialization/types.js +2 -2
  426. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  427. package/lib/sharing/ConsumeSharedModule.js +40 -17
  428. package/lib/sharing/ConsumeSharedPlugin.js +139 -102
  429. package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
  430. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  431. package/lib/sharing/ProvideSharedDependency.js +17 -0
  432. package/lib/sharing/ProvideSharedModule.js +19 -6
  433. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  434. package/lib/sharing/ProvideSharedPlugin.js +37 -30
  435. package/lib/sharing/SharePlugin.js +2 -2
  436. package/lib/sharing/ShareRuntimeModule.js +20 -10
  437. package/lib/sharing/resolveMatchedConfigs.js +6 -5
  438. package/lib/sharing/utils.js +338 -34
  439. package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
  440. package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
  441. package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
  442. package/lib/stats/StatsFactory.js +128 -57
  443. package/lib/stats/StatsPrinter.js +77 -46
  444. package/lib/util/ArrayHelpers.js +35 -1
  445. package/lib/util/ArrayQueue.js +15 -22
  446. package/lib/util/AsyncQueue.js +37 -16
  447. package/lib/util/IterableHelpers.js +3 -4
  448. package/lib/util/LazyBucketSortedSet.js +60 -44
  449. package/lib/util/LazySet.js +11 -2
  450. package/lib/util/MapHelpers.js +17 -5
  451. package/lib/util/ParallelismFactorCalculator.js +11 -1
  452. package/lib/util/Queue.js +9 -3
  453. package/lib/util/Semaphore.js +4 -7
  454. package/lib/util/SetHelpers.js +5 -5
  455. package/lib/util/SortableSet.js +19 -6
  456. package/lib/util/StackedCacheMap.js +33 -3
  457. package/lib/util/StackedMap.js +1 -3
  458. package/lib/util/StringXor.js +46 -0
  459. package/lib/util/TupleQueue.js +9 -3
  460. package/lib/util/TupleSet.js +15 -5
  461. package/lib/util/URLAbsoluteSpecifier.js +8 -8
  462. package/lib/util/WeakTupleMap.js +70 -28
  463. package/lib/util/binarySearchBounds.js +51 -9
  464. package/lib/util/chainedImports.js +97 -0
  465. package/lib/util/cleverMerge.js +51 -36
  466. package/lib/util/comparators.js +146 -83
  467. package/lib/util/compileBooleanMatcher.js +35 -7
  468. package/lib/util/conventions.js +126 -0
  469. package/lib/util/create-schema-validation.js +9 -2
  470. package/lib/util/createHash.js +49 -14
  471. package/lib/util/deprecation.js +48 -15
  472. package/lib/util/deterministicGrouping.js +71 -39
  473. package/lib/util/extractUrlAndGlobal.js +3 -0
  474. package/lib/util/findGraphRoots.js +7 -5
  475. package/lib/util/fs.js +419 -94
  476. package/lib/util/hash/BatchedHash.js +10 -4
  477. package/lib/util/hash/md4.js +20 -0
  478. package/lib/util/hash/wasm-hash.js +163 -0
  479. package/lib/util/hash/xxhash64.js +7 -141
  480. package/lib/util/identifier.js +140 -93
  481. package/lib/util/internalSerializables.js +22 -0
  482. package/lib/util/makeSerializable.js +7 -0
  483. package/lib/util/memoize.js +10 -10
  484. package/lib/util/mergeScope.js +76 -0
  485. package/lib/util/nonNumericOnlyHash.js +22 -0
  486. package/lib/util/numberHash.js +84 -34
  487. package/lib/util/objectToMap.js +0 -1
  488. package/lib/util/processAsyncTree.js +7 -1
  489. package/lib/util/propertyAccess.js +7 -55
  490. package/lib/util/propertyName.js +77 -0
  491. package/lib/util/registerExternalSerializer.js +2 -2
  492. package/lib/util/runtime.js +188 -133
  493. package/lib/util/semver.js +64 -56
  494. package/lib/util/serialization.js +26 -1
  495. package/lib/util/smartGrouping.js +10 -10
  496. package/lib/util/source.js +1 -1
  497. package/lib/validateSchema.js +6 -2
  498. package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
  499. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
  500. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  501. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
  502. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
  503. package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
  504. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
  505. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  506. package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
  507. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
  508. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  509. package/lib/wasm-sync/WebAssemblyParser.js +23 -9
  510. package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
  511. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  512. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  513. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  514. package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
  515. package/lib/webpack.js +43 -12
  516. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
  517. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
  518. package/module.d.ts +233 -0
  519. package/package.json +85 -139
  520. package/schemas/WebpackOptions.check.js +1 -1
  521. package/schemas/WebpackOptions.json +679 -47
  522. package/schemas/plugins/BannerPlugin.check.js +1 -1
  523. package/schemas/plugins/BannerPlugin.json +9 -1
  524. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  525. package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
  526. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  529. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  530. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  531. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  532. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  534. package/schemas/plugins/container/ContainerPlugin.json +10 -1
  535. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  536. package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
  537. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  538. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  539. package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
  540. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
  541. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
  542. package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
  543. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
  544. package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
  545. package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
  546. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
  547. package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
  548. package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
  549. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
  550. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
  551. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
  552. package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
  553. package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
  554. package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
  555. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
  556. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
  557. package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
  558. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
  559. package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
  560. package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
  561. package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
  562. package/schemas/plugins/css/CssParserOptions.check.js +6 -0
  563. package/schemas/plugins/css/CssParserOptions.json +3 -0
  564. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  565. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  566. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  567. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  568. package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
  569. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  570. package/types.d.ts +5026 -1756
package/lib/util/fs.js CHANGED
@@ -11,7 +11,8 @@ const path = require("path");
11
11
  /** @typedef {import("../FileSystemInfo").FileSystemInfoEntry} FileSystemInfoEntry */
12
12
 
13
13
  /**
14
- * @typedef {Object} IStats
14
+ * @template T
15
+ * @typedef {object} IStatsBase
15
16
  * @property {() => boolean} isFile
16
17
  * @property {() => boolean} isDirectory
17
18
  * @property {() => boolean} isBlockDevice
@@ -19,20 +20,20 @@ const path = require("path");
19
20
  * @property {() => boolean} isSymbolicLink
20
21
  * @property {() => boolean} isFIFO
21
22
  * @property {() => boolean} isSocket
22
- * @property {number | bigint} dev
23
- * @property {number | bigint} ino
24
- * @property {number | bigint} mode
25
- * @property {number | bigint} nlink
26
- * @property {number | bigint} uid
27
- * @property {number | bigint} gid
28
- * @property {number | bigint} rdev
29
- * @property {number | bigint} size
30
- * @property {number | bigint} blksize
31
- * @property {number | bigint} blocks
32
- * @property {number | bigint} atimeMs
33
- * @property {number | bigint} mtimeMs
34
- * @property {number | bigint} ctimeMs
35
- * @property {number | bigint} birthtimeMs
23
+ * @property {T} dev
24
+ * @property {T} ino
25
+ * @property {T} mode
26
+ * @property {T} nlink
27
+ * @property {T} uid
28
+ * @property {T} gid
29
+ * @property {T} rdev
30
+ * @property {T} size
31
+ * @property {T} blksize
32
+ * @property {T} blocks
33
+ * @property {T} atimeMs
34
+ * @property {T} mtimeMs
35
+ * @property {T} ctimeMs
36
+ * @property {T} birthtimeMs
36
37
  * @property {Date} atime
37
38
  * @property {Date} mtime
38
39
  * @property {Date} ctime
@@ -40,7 +41,15 @@ const path = require("path");
40
41
  */
41
42
 
42
43
  /**
43
- * @typedef {Object} IDirent
44
+ * @typedef {IStatsBase<number>} IStats
45
+ */
46
+
47
+ /**
48
+ * @typedef {IStatsBase<bigint> & { atimeNs: bigint, mtimeNs: bigint, ctimeNs: bigint, birthtimeNs: bigint }} IBigIntStats
49
+ */
50
+
51
+ /**
52
+ * @typedef {object} Dirent
44
53
  * @property {() => boolean} isFile
45
54
  * @property {() => boolean} isDirectory
46
55
  * @property {() => boolean} isBlockDevice
@@ -48,91 +57,405 @@ const path = require("path");
48
57
  * @property {() => boolean} isSymbolicLink
49
58
  * @property {() => boolean} isFIFO
50
59
  * @property {() => boolean} isSocket
51
- * @property {string | Buffer} name
60
+ * @property {string} name
61
+ * @property {string} path
62
+ */
63
+
64
+ /** @typedef {string | number | boolean | null} JsonPrimitive */
65
+ /** @typedef {JsonValue[]} JsonArray */
66
+ /** @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue */
67
+ /** @typedef {{[Key in string]: JsonValue} & {[Key in string]?: JsonValue | undefined}} JsonObject */
68
+
69
+ /** @typedef {function(NodeJS.ErrnoException | null): void} NoParamCallback */
70
+ /** @typedef {function(NodeJS.ErrnoException | null, string=): void} StringCallback */
71
+ /** @typedef {function(NodeJS.ErrnoException | null, Buffer=): void} BufferCallback */
72
+ /** @typedef {function(NodeJS.ErrnoException | null, (string | Buffer)=): void} StringOrBufferCallback */
73
+ /** @typedef {function(NodeJS.ErrnoException | null, (string[])=): void} ReaddirStringCallback */
74
+ /** @typedef {function(NodeJS.ErrnoException | null, (Buffer[])=): void} ReaddirBufferCallback */
75
+ /** @typedef {function(NodeJS.ErrnoException | null, (string[] | Buffer[])=): void} ReaddirStringOrBufferCallback */
76
+ /** @typedef {function(NodeJS.ErrnoException | null, (Dirent[])=): void} ReaddirDirentCallback */
77
+ /** @typedef {function(NodeJS.ErrnoException | null, IStats=): void} StatsCallback */
78
+ /** @typedef {function(NodeJS.ErrnoException | null, IBigIntStats=): void} BigIntStatsCallback */
79
+ /** @typedef {function(NodeJS.ErrnoException | null, (IStats | IBigIntStats)=): void} StatsOrBigIntStatsCallback */
80
+ /** @typedef {function(NodeJS.ErrnoException | null, number=): void} NumberCallback */
81
+ /** @typedef {function(NodeJS.ErrnoException | Error | null, JsonObject=): void} ReadJsonCallback */
82
+
83
+ /** @typedef {Map<string, FileSystemInfoEntry | "ignore">} TimeInfoEntries */
84
+
85
+ /**
86
+ * @typedef {object} WatcherInfo
87
+ * @property {Set<string>} changes get current aggregated changes that have not yet send to callback
88
+ * @property {Set<string>} removals get current aggregated removals that have not yet send to callback
89
+ * @property {TimeInfoEntries} fileTimeInfoEntries get info about files
90
+ * @property {TimeInfoEntries} contextTimeInfoEntries get info about directories
52
91
  */
53
92
 
54
- /** @typedef {function((NodeJS.ErrnoException | null)=): void} Callback */
55
- /** @typedef {function((NodeJS.ErrnoException | null)=, Buffer=): void} BufferCallback */
56
- /** @typedef {function((NodeJS.ErrnoException | null)=, Buffer|string=): void} BufferOrStringCallback */
57
- /** @typedef {function((NodeJS.ErrnoException | null)=, (string | Buffer)[] | IDirent[]=): void} DirentArrayCallback */
58
- /** @typedef {function((NodeJS.ErrnoException | null)=, string=): void} StringCallback */
59
- /** @typedef {function((NodeJS.ErrnoException | null)=, number=): void} NumberCallback */
60
- /** @typedef {function((NodeJS.ErrnoException | null)=, IStats=): void} StatsCallback */
61
- /** @typedef {function((NodeJS.ErrnoException | Error | null)=, any=): void} ReadJsonCallback */
62
- /** @typedef {function((NodeJS.ErrnoException | Error | null)=, IStats|string=): void} LstatReadlinkAbsoluteCallback */
93
+ /** @typedef {Set<string>} Changes */
94
+ /** @typedef {Set<string>} Removals */
63
95
 
96
+ // TODO webpack 6 deprecate missing getInfo
64
97
  /**
65
- * @typedef {Object} Watcher
98
+ * @typedef {object} Watcher
66
99
  * @property {function(): void} close closes the watcher and all underlying file watchers
67
100
  * @property {function(): void} pause closes the watcher, but keeps underlying file watchers alive until the next watch call
68
- * @property {function(): Set<string>=} getAggregatedChanges get current aggregated changes that have not yet send to callback
69
- * @property {function(): Set<string>=} getAggregatedRemovals get current aggregated removals that have not yet send to callback
70
- * @property {function(): Map<string, FileSystemInfoEntry | "ignore">} getFileTimeInfoEntries get info about files
71
- * @property {function(): Map<string, FileSystemInfoEntry | "ignore">} getContextTimeInfoEntries get info about directories
101
+ * @property {function(): Changes=} getAggregatedChanges get current aggregated changes that have not yet send to callback
102
+ * @property {function(): Removals=} getAggregatedRemovals get current aggregated removals that have not yet send to callback
103
+ * @property {function(): TimeInfoEntries} getFileTimeInfoEntries get info about files
104
+ * @property {function(): TimeInfoEntries} getContextTimeInfoEntries get info about directories
105
+ * @property {function(): WatcherInfo=} getInfo get info about timestamps and changes
72
106
  */
73
107
 
74
108
  /**
75
109
  * @callback WatchMethod
76
110
  * @param {Iterable<string>} files watched files
77
111
  * @param {Iterable<string>} directories watched directories
78
- * @param {Iterable<string>} missing watched exitance entries
112
+ * @param {Iterable<string>} missing watched existence entries
79
113
  * @param {number} startTime timestamp of start time
80
114
  * @param {WatchOptions} options options object
81
- * @param {function(Error=, Map<string, FileSystemInfoEntry | "ignore">, Map<string, FileSystemInfoEntry | "ignore">, Set<string>, Set<string>): void} callback aggregated callback
115
+ * @param {function(Error | null, TimeInfoEntries=, TimeInfoEntries=, Changes=, Removals=): void} callback aggregated callback
82
116
  * @param {function(string, number): void} callbackUndelayed callback when the first change was detected
83
117
  * @returns {Watcher} a watcher
84
118
  */
85
119
 
86
- // TODO webpack 6 make optional methods required
120
+ // TODO webpack 6 make optional methods required and avoid using non standard methods like `join`, `relative`, `dirname`, move IntermediateFileSystemExtras methods to InputFilesystem or OutputFilesystem
121
+
122
+ /**
123
+ * @typedef {string | Buffer | URL} PathLike
124
+ */
125
+
126
+ /**
127
+ * @typedef {PathLike | number} PathOrFileDescriptor
128
+ */
129
+
130
+ /**
131
+ * @typedef {object} ObjectEncodingOptions
132
+ * @property {BufferEncoding | null | undefined} [encoding]
133
+ */
134
+
135
+ /**
136
+ * @typedef {{
137
+ * (path: PathOrFileDescriptor, options: ({ encoding?: null | undefined, flag?: string | undefined } & import("events").Abortable) | undefined | null, callback: BufferCallback): void;
138
+ * (path: PathOrFileDescriptor, options: ({ encoding: BufferEncoding, flag?: string | undefined } & import("events").Abortable) | BufferEncoding, callback: StringCallback): void;
139
+ * (path: PathOrFileDescriptor, options: (ObjectEncodingOptions & { flag?: string | undefined } & import("events").Abortable) | BufferEncoding | undefined | null, callback: StringOrBufferCallback): void;
140
+ * (path: PathOrFileDescriptor, callback: BufferCallback): void;
141
+ * }} ReadFile
142
+ */
143
+
144
+ /**
145
+ * @typedef {{
146
+ * (path: PathOrFileDescriptor, options?: { encoding?: null | undefined, flag?: string | undefined } | null): Buffer;
147
+ * (path: PathOrFileDescriptor, options: { encoding: BufferEncoding, flag?: string | undefined } | BufferEncoding): string;
148
+ * (path: PathOrFileDescriptor, options?: (ObjectEncodingOptions & { flag?: string | undefined }) | BufferEncoding | null): string | Buffer;
149
+ * }} ReadFileSync
150
+ */
151
+
152
+ /**
153
+ * @typedef {ObjectEncodingOptions | BufferEncoding | undefined | null} EncodingOption
154
+ */
155
+
156
+ /**
157
+ * @typedef {'buffer'| { encoding: 'buffer' }} BufferEncodingOption
158
+ */
159
+
160
+ /**
161
+ * @typedef {object} StatOptions
162
+ * @property {(boolean | undefined)=} bigint
163
+ */
164
+
165
+ /**
166
+ * @typedef {object} StatSyncOptions
167
+ * @property {(boolean | undefined)=} bigint
168
+ * @property {(boolean | undefined)=} throwIfNoEntry
169
+ */
170
+
171
+ /**
172
+ * @typedef {{
173
+ * (path: PathLike, options: EncodingOption, callback: StringCallback): void;
174
+ * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void;
175
+ * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void;
176
+ * (path: PathLike, callback: StringCallback): void;
177
+ * }} Readlink
178
+ */
179
+
180
+ /**
181
+ * @typedef {{
182
+ * (path: PathLike, options?: EncodingOption): string;
183
+ * (path: PathLike, options: BufferEncodingOption): Buffer;
184
+ * (path: PathLike, options?: EncodingOption): string | Buffer;
185
+ * }} ReadlinkSync
186
+ */
187
+
188
+ /**
189
+ * @typedef {{
190
+ * (path: PathLike, options: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | undefined | null, callback: ReaddirStringCallback): void;
191
+ * (path: PathLike, options: { encoding: 'buffer', withFileTypes?: false | undefined, recursive?: boolean | undefined } | 'buffer', callback: ReaddirBufferCallback): void;
192
+ * (path: PathLike, callback: ReaddirStringCallback): void;
193
+ * (path: PathLike, options: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | undefined | null, callback: ReaddirStringOrBufferCallback): void;
194
+ * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }, callback: ReaddirDirentCallback): void;
195
+ * }} Readdir
196
+ */
197
+
198
+ /**
199
+ * @typedef {{
200
+ * (path: PathLike, options?: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | null): string[];
201
+ * (path: PathLike, options: { encoding: 'buffer', withFileTypes?: false | undefined, recursive?: boolean | undefined } | 'buffer'): Buffer[];
202
+ * (path: PathLike, options?: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | null): string[] | Buffer[];
203
+ * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }): Dirent[];
204
+ * }} ReaddirSync
205
+ */
206
+
207
+ /**
208
+ * @typedef {{
209
+ * (path: PathLike, callback: StatsCallback): void;
210
+ * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void;
211
+ * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void;
212
+ * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void;
213
+ * }} Stat
214
+ */
215
+
216
+ /**
217
+ * @typedef {{
218
+ * (path: PathLike, options?: undefined): IStats;
219
+ * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined;
220
+ * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined;
221
+ * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats;
222
+ * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats;
223
+ * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats;
224
+ * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined;
225
+ * }} StatSync
226
+ */
227
+
228
+ /**
229
+ * @typedef {{
230
+ * (path: PathLike, callback: StatsCallback): void;
231
+ * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void;
232
+ * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void;
233
+ * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void;
234
+ * }} LStat
235
+ */
236
+
237
+ /**
238
+ * @typedef {{
239
+ * (path: PathLike, options?: undefined): IStats;
240
+ * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined;
241
+ * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined;
242
+ * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats;
243
+ * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats;
244
+ * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats;
245
+ * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined;
246
+ * }} LStatSync
247
+ */
248
+
249
+ /**
250
+ * @typedef {{
251
+ * (path: PathLike, options: EncodingOption, callback: StringCallback): void;
252
+ * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void;
253
+ * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void;
254
+ * (path: PathLike, callback: StringCallback): void;
255
+ * }} RealPath
256
+ */
257
+
258
+ /**
259
+ * @typedef {{
260
+ * (path: PathLike, options?: EncodingOption): string;
261
+ * (path: PathLike, options: BufferEncodingOption): Buffer;
262
+ * (path: PathLike, options?: EncodingOption): string | Buffer;
263
+ * }} RealPathSync
264
+ */
265
+
266
+ /**
267
+ * @typedef {function(PathOrFileDescriptor, ReadJsonCallback): void} ReadJson
268
+ */
269
+
270
+ /**
271
+ * @typedef {function(PathOrFileDescriptor): JsonObject} ReadJsonSync
272
+ */
87
273
 
88
274
  /**
89
- * @typedef {Object} OutputFileSystem
90
- * @property {function(string, Buffer|string, Callback): void} writeFile
91
- * @property {function(string, Callback): void} mkdir
92
- * @property {function(string, DirentArrayCallback): void=} readdir
93
- * @property {function(string, Callback): void=} rmdir
94
- * @property {function(string, Callback): void=} unlink
95
- * @property {function(string, StatsCallback): void} stat
96
- * @property {function(string, BufferOrStringCallback): void} readFile
275
+ * @typedef {function((string | string[] | Set<string>)=): void} Purge
276
+ */
277
+
278
+ /**
279
+ * @typedef {object} InputFileSystem
280
+ * @property {ReadFile} readFile
281
+ * @property {ReadFileSync=} readFileSync
282
+ * @property {Readlink} readlink
283
+ * @property {ReadlinkSync=} readlinkSync
284
+ * @property {Readdir} readdir
285
+ * @property {ReaddirSync=} readdirSync
286
+ * @property {Stat} stat
287
+ * @property {StatSync=} statSync
288
+ * @property {LStat=} lstat
289
+ * @property {LStatSync=} lstatSync
290
+ * @property {RealPath=} realpath
291
+ * @property {RealPathSync=} realpathSync
292
+ * @property {ReadJson=} readJson
293
+ * @property {ReadJsonSync=} readJsonSync
294
+ * @property {Purge=} purge
97
295
  * @property {(function(string, string): string)=} join
98
296
  * @property {(function(string, string): string)=} relative
99
297
  * @property {(function(string): string)=} dirname
100
298
  */
101
299
 
102
300
  /**
103
- * @typedef {Object} InputFileSystem
104
- * @property {function(string, BufferOrStringCallback): void} readFile
105
- * @property {(function(string, ReadJsonCallback): void)=} readJson
106
- * @property {function(string, BufferOrStringCallback): void} readlink
107
- * @property {function(string, DirentArrayCallback): void} readdir
108
- * @property {function(string, StatsCallback): void} stat
109
- * @property {function(string, StatsCallback): void=} lstat
110
- * @property {(function(string, BufferOrStringCallback): void)=} realpath
111
- * @property {(function(string=): void)=} purge
301
+ * @typedef {number | string} Mode
302
+ */
303
+
304
+ /**
305
+ * @typedef {(ObjectEncodingOptions & import("events").Abortable & { mode?: Mode | undefined, flag?: string | undefined, flush?: boolean | undefined }) | BufferEncoding | null} WriteFileOptions
306
+ */
307
+
308
+ /**
309
+ * @typedef {{
310
+ * (file: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, options: WriteFileOptions, callback: NoParamCallback): void;
311
+ * (file: PathOrFileDescriptor, data: string | NodeJS.ArrayBufferView, callback: NoParamCallback): void;
312
+ * }} WriteFile
313
+ */
314
+
315
+ /**
316
+ * @typedef {{ recursive?: boolean | undefined, mode?: Mode | undefined }} MakeDirectoryOptions
317
+ */
318
+
319
+ /**
320
+ * @typedef {{
321
+ * (file: PathLike, options: MakeDirectoryOptions & { recursive: true }, callback: StringCallback): void;
322
+ * (file: PathLike, options: Mode | (MakeDirectoryOptions & { recursive?: false | undefined; }) | null | undefined, callback: NoParamCallback): void;
323
+ * (file: PathLike, options: Mode | MakeDirectoryOptions | null | undefined, callback: StringCallback): void;
324
+ * (file: PathLike, callback: NoParamCallback): void;
325
+ * }} Mkdir
326
+ */
327
+
328
+ /**
329
+ * @typedef {{ maxRetries?: number | undefined, recursive?: boolean | undefined, retryDelay?: number | undefined }} RmDirOptions
330
+ */
331
+
332
+ /**
333
+ * @typedef {{
334
+ * (file: PathLike, callback: NoParamCallback): void;
335
+ * (file: PathLike, options: RmDirOptions, callback: NoParamCallback): void;
336
+ * }} Rmdir
337
+ */
338
+
339
+ /**
340
+ * @typedef {function(PathLike, NoParamCallback): void} Unlink
341
+ */
342
+
343
+ /**
344
+ * @typedef {object} OutputFileSystem
345
+ * @property {WriteFile} writeFile
346
+ * @property {Mkdir} mkdir
347
+ * @property {Readdir=} readdir
348
+ * @property {Rmdir=} rmdir
349
+ * @property {Unlink=} unlink
350
+ * @property {Stat} stat
351
+ * @property {LStat=} lstat
352
+ * @property {ReadFile} readFile
112
353
  * @property {(function(string, string): string)=} join
113
354
  * @property {(function(string, string): string)=} relative
114
355
  * @property {(function(string): string)=} dirname
115
356
  */
116
357
 
117
358
  /**
118
- * @typedef {Object} WatchFileSystem
359
+ * @typedef {object} WatchFileSystem
119
360
  * @property {WatchMethod} watch
120
361
  */
121
362
 
122
363
  /**
123
- * @typedef {Object} IntermediateFileSystemExtras
124
- * @property {function(string): void} mkdirSync
125
- * @property {function(string): NodeJS.WritableStream} createWriteStream
126
- * @property {function(string, string, NumberCallback): void} open
127
- * @property {function(number, Buffer, number, number, number, NumberCallback): void} read
128
- * @property {function(number, Callback): void} close
129
- * @property {function(string, string, Callback): void} rename
364
+ * @typedef {{
365
+ * (path: PathLike, options: MakeDirectoryOptions & { recursive: true }): string | undefined;
366
+ * (path: PathLike, options?: Mode | (MakeDirectoryOptions & { recursive?: false | undefined }) | null): void;
367
+ * (path: PathLike, options?: Mode | MakeDirectoryOptions | null): string | undefined;
368
+ * }} MkdirSync
369
+ */
370
+
371
+ /**
372
+ * @typedef {object} StreamOptions
373
+ * @property {(string | undefined)=} flags
374
+ * @property {(BufferEncoding | undefined)} encoding
375
+ * @property {(number | any | undefined)=} fd
376
+ * @property {(number | undefined)=} mode
377
+ * @property {(boolean | undefined)=} autoClose
378
+ * @property {(boolean | undefined)=} emitClose
379
+ * @property {(number | undefined)=} start
380
+ * @property {(AbortSignal | null | undefined)=} signal
381
+ */
382
+
383
+ /**
384
+ * @typedef {object} FSImplementation
385
+ * @property {((...args: any[]) => any)=} open
386
+ * @property {((...args: any[]) => any)=} close
387
+ */
388
+
389
+ /**
390
+ * @typedef {FSImplementation & { write: (...args: any[]) => any; close?: (...args: any[]) => any }} CreateWriteStreamFSImplementation
391
+ */
392
+
393
+ /**
394
+ * @typedef {StreamOptions & { fs?: CreateWriteStreamFSImplementation | null | undefined }} WriteStreamOptions
395
+ */
396
+
397
+ /**
398
+ * @typedef {function(PathLike, (BufferEncoding | WriteStreamOptions)=): NodeJS.WritableStream} CreateWriteStream
399
+ */
400
+
401
+ /**
402
+ * @typedef {number | string} OpenMode
403
+ */
404
+
405
+ /**
406
+ * @typedef {{
407
+ * (file: PathLike, flags: OpenMode | undefined, mode: Mode | undefined | null, callback: NumberCallback): void;
408
+ * (file: PathLike, flags: OpenMode | undefined, callback: NumberCallback): void;
409
+ * (file: PathLike, callback: NumberCallback): void;
410
+ * }} Open
411
+ */
412
+
413
+ /**
414
+ * @typedef {number | bigint} ReadPosition
415
+ */
416
+
417
+ /**
418
+ * @typedef {object} ReadSyncOptions
419
+ * @property {(number | undefined)=} offset
420
+ * @property {(number | undefined)=} length
421
+ * @property {(ReadPosition | null | undefined)=} position
422
+ */
423
+
424
+ /**
425
+ * @template {NodeJS.ArrayBufferView} TBuffer
426
+ * @typedef {object} ReadAsyncOptions
427
+ * @property {(number | undefined)=} offset
428
+ * @property {(number | undefined)=} length
429
+ * @property {(ReadPosition | null | undefined)=} position
430
+ * @property {TBuffer=} buffer
431
+ */
432
+
433
+ /**
434
+ * @template {NodeJS.ArrayBufferView} [TBuffer=Buffer]
435
+ * @typedef {{
436
+ * (fd: number, buffer: TBuffer, offset: number, length: number, position: ReadPosition | null, callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void): void;
437
+ * (fd: number, options: ReadAsyncOptions<TBuffer>, callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: TBuffer) => void): void;
438
+ * (fd: number, callback: (err: NodeJS.ErrnoException | null, bytesRead: number, buffer: NodeJS.ArrayBufferView) => void): void;
439
+ * }} Read
440
+ */
441
+
442
+ /** @typedef {function(number, NoParamCallback): void} Close */
443
+
444
+ /** @typedef {function(PathLike, PathLike, NoParamCallback): void} Rename */
445
+
446
+ /**
447
+ * @typedef {object} IntermediateFileSystemExtras
448
+ * @property {MkdirSync} mkdirSync
449
+ * @property {CreateWriteStream} createWriteStream
450
+ * @property {Open} open
451
+ * @property {Read} read
452
+ * @property {Close} close
453
+ * @property {Rename} rename
130
454
  */
131
455
 
132
456
  /** @typedef {InputFileSystem & OutputFileSystem & IntermediateFileSystemExtras} IntermediateFileSystem */
133
457
 
134
458
  /**
135
- *
136
459
  * @param {InputFileSystem|OutputFileSystem|undefined} fs a file system
137
460
  * @param {string} rootPath the root path
138
461
  * @param {string} targetPath the target path
@@ -145,13 +468,12 @@ const relative = (fs, rootPath, targetPath) => {
145
468
  return path.posix.relative(rootPath, targetPath);
146
469
  } else if (path.win32.isAbsolute(rootPath)) {
147
470
  return path.win32.relative(rootPath, targetPath);
148
- } else {
149
- throw new Error(
150
- `${rootPath} is neither a posix nor a windows path, and there is no 'relative' method defined in the file system`
151
- );
152
471
  }
472
+ throw new Error(
473
+ `${rootPath} is neither a posix nor a windows path, and there is no 'relative' method defined in the file system`
474
+ );
153
475
  };
154
- exports.relative = relative;
476
+ module.exports.relative = relative;
155
477
 
156
478
  /**
157
479
  * @param {InputFileSystem|OutputFileSystem|undefined} fs a file system
@@ -166,13 +488,12 @@ const join = (fs, rootPath, filename) => {
166
488
  return path.posix.join(rootPath, filename);
167
489
  } else if (path.win32.isAbsolute(rootPath)) {
168
490
  return path.win32.join(rootPath, filename);
169
- } else {
170
- throw new Error(
171
- `${rootPath} is neither a posix nor a windows path, and there is no 'join' method defined in the file system`
172
- );
173
491
  }
492
+ throw new Error(
493
+ `${rootPath} is neither a posix nor a windows path, and there is no 'join' method defined in the file system`
494
+ );
174
495
  };
175
- exports.join = join;
496
+ module.exports.join = join;
176
497
 
177
498
  /**
178
499
  * @param {InputFileSystem|OutputFileSystem|undefined} fs a file system
@@ -186,13 +507,12 @@ const dirname = (fs, absPath) => {
186
507
  return path.posix.dirname(absPath);
187
508
  } else if (path.win32.isAbsolute(absPath)) {
188
509
  return path.win32.dirname(absPath);
189
- } else {
190
- throw new Error(
191
- `${absPath} is neither a posix nor a windows path, and there is no 'dirname' method defined in the file system`
192
- );
193
510
  }
511
+ throw new Error(
512
+ `${absPath} is neither a posix nor a windows path, and there is no 'dirname' method defined in the file system`
513
+ );
194
514
  };
195
- exports.dirname = dirname;
515
+ module.exports.dirname = dirname;
196
516
 
197
517
  /**
198
518
  * @param {OutputFileSystem} fs a file system
@@ -237,7 +557,7 @@ const mkdirp = (fs, p, callback) => {
237
557
  callback();
238
558
  });
239
559
  };
240
- exports.mkdirp = mkdirp;
560
+ module.exports.mkdirp = mkdirp;
241
561
 
242
562
  /**
243
563
  * @param {IntermediateFileSystem} fs a file system
@@ -249,7 +569,7 @@ const mkdirpSync = (fs, p) => {
249
569
  fs.mkdirSync(p);
250
570
  } catch (err) {
251
571
  if (err) {
252
- if (err.code === "ENOENT") {
572
+ if (/** @type {NodeJS.ErrnoException} */ (err).code === "ENOENT") {
253
573
  const dir = dirname(fs, p);
254
574
  if (dir === p) {
255
575
  throw err;
@@ -257,14 +577,14 @@ const mkdirpSync = (fs, p) => {
257
577
  mkdirpSync(fs, dir);
258
578
  fs.mkdirSync(p);
259
579
  return;
260
- } else if (err.code === "EEXIST") {
580
+ } else if (/** @type {NodeJS.ErrnoException} */ (err).code === "EEXIST") {
261
581
  return;
262
582
  }
263
583
  throw err;
264
584
  }
265
585
  }
266
586
  };
267
- exports.mkdirpSync = mkdirpSync;
587
+ module.exports.mkdirpSync = mkdirpSync;
268
588
 
269
589
  /**
270
590
  * @param {InputFileSystem} fs a file system
@@ -273,24 +593,27 @@ exports.mkdirpSync = mkdirpSync;
273
593
  * @returns {void}
274
594
  */
275
595
  const readJson = (fs, p, callback) => {
276
- if ("readJson" in fs) return fs.readJson(p, callback);
596
+ if ("readJson" in fs)
597
+ return /** @type {NonNullable<InputFileSystem["readJson"]>} */ (
598
+ fs.readJson
599
+ )(p, callback);
277
600
  fs.readFile(p, (err, buf) => {
278
601
  if (err) return callback(err);
279
602
  let data;
280
603
  try {
281
- data = JSON.parse(buf.toString("utf-8"));
282
- } catch (e) {
283
- return callback(e);
604
+ data = JSON.parse(/** @type {Buffer} */ (buf).toString("utf-8"));
605
+ } catch (err1) {
606
+ return callback(/** @type {Error} */ (err1));
284
607
  }
285
608
  return callback(null, data);
286
609
  });
287
610
  };
288
- exports.readJson = readJson;
611
+ module.exports.readJson = readJson;
289
612
 
290
613
  /**
291
614
  * @param {InputFileSystem} fs a file system
292
615
  * @param {string} p an absolute path
293
- * @param {ReadJsonCallback} callback callback
616
+ * @param {function(NodeJS.ErrnoException | Error | null, (IStats | string)=): void} callback callback
294
617
  * @returns {void}
295
618
  */
296
619
  const lstatReadlinkAbsolute = (fs, p, callback) => {
@@ -309,18 +632,20 @@ const lstatReadlinkAbsolute = (fs, p, callback) => {
309
632
  };
310
633
  const doStat = () => {
311
634
  if ("lstat" in fs) {
312
- return fs.lstat(p, (err, stats) => {
313
- if (err) return callback(err);
314
- if (stats.isSymbolicLink()) {
315
- return doReadLink();
635
+ return /** @type {NonNullable<InputFileSystem["lstat"]>} */ (fs.lstat)(
636
+ p,
637
+ (err, stats) => {
638
+ if (err) return callback(err);
639
+ if (/** @type {IStats} */ (stats).isSymbolicLink()) {
640
+ return doReadLink();
641
+ }
642
+ callback(null, stats);
316
643
  }
317
- callback(null, stats);
318
- });
319
- } else {
320
- return fs.stat(p, callback);
644
+ );
321
645
  }
646
+ return fs.stat(p, callback);
322
647
  };
323
648
  if ("lstat" in fs) return doStat();
324
649
  doReadLink();
325
650
  };
326
- exports.lstatReadlinkAbsolute = lstatReadlinkAbsolute;
651
+ module.exports.lstatReadlinkAbsolute = lstatReadlinkAbsolute;