index.d.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /**
  2. * Recursive version of readdir. Exposes a streaming API and promise API.
  3. * Streaming API allows to use a small amount of RAM.
  4. *
  5. * @module
  6. * @example
  7. ```js
  8. import readdirp from 'readdirp';
  9. for await (const entry of readdirp('.')) {
  10. const {path} = entry;
  11. console.log(`${JSON.stringify({path})}`);
  12. }
  13. ```
  14. */
  15. /*! readdirp - MIT License (c) 2012-2019 Thorsten Lorenz, Paul Miller (https://paulmillr.com) */
  16. import type { Stats, Dirent } from 'node:fs';
  17. import { Readable } from 'node:stream';
  18. /** Path in file system. */
  19. export type Path = string;
  20. /** Emitted entry. Contains relative & absolute path, basename, and either stats or dirent. */
  21. export interface EntryInfo {
  22. path: string;
  23. fullPath: string;
  24. stats?: Stats;
  25. dirent?: Dirent;
  26. basename: string;
  27. }
  28. /** Path or dir entries (files) */
  29. export type PathOrDirent = Dirent | Path;
  30. /** Filterer for files */
  31. export type Tester = (entryInfo: EntryInfo) => boolean;
  32. export type Predicate = string[] | string | Tester;
  33. export declare const EntryTypes: {
  34. readonly FILE_TYPE: "files";
  35. readonly DIR_TYPE: "directories";
  36. readonly FILE_DIR_TYPE: "files_directories";
  37. readonly EVERYTHING_TYPE: "all";
  38. };
  39. export type EntryType = (typeof EntryTypes)[keyof typeof EntryTypes];
  40. /**
  41. * Options for readdirp.
  42. * * type: files, directories, or both
  43. * * lstat: whether to use symlink-friendly stat
  44. * * depth: max depth
  45. * * alwaysStat: whether to use stat (more resources) or dirent
  46. * * highWaterMark: streaming param, specifies max amount of resources per entry
  47. */
  48. export type ReaddirpOptions = {
  49. root: string;
  50. fileFilter?: Predicate;
  51. directoryFilter?: Predicate;
  52. type?: EntryType;
  53. lstat?: boolean;
  54. depth?: number;
  55. alwaysStat?: boolean;
  56. highWaterMark?: number;
  57. };
  58. /** Directory entry. Contains path, depth count, and files. */
  59. export interface DirEntry {
  60. files: PathOrDirent[];
  61. depth: number;
  62. path: Path;
  63. }
  64. /** Readable readdir stream, emitting new files as they're being listed. */
  65. export declare class ReaddirpStream extends Readable {
  66. parents: any[];
  67. reading: boolean;
  68. parent?: DirEntry;
  69. _stat: Function;
  70. _maxDepth: number;
  71. _wantsDir: boolean;
  72. _wantsFile: boolean;
  73. _wantsEverything: boolean;
  74. _root: Path;
  75. _isDirent: boolean;
  76. _statsProp: 'dirent' | 'stats';
  77. _rdOptions: {
  78. encoding: 'utf8';
  79. withFileTypes: boolean;
  80. };
  81. _fileFilter: Tester;
  82. _directoryFilter: Tester;
  83. constructor(options?: Partial<ReaddirpOptions>);
  84. _read(batch: number): Promise<void>;
  85. _exploreDir(path: Path, depth: number): Promise<{
  86. files: string[] | undefined;
  87. depth: number;
  88. path: string;
  89. }>;
  90. _formatEntry(dirent: PathOrDirent, path: Path): Promise<EntryInfo | undefined>;
  91. _onError(err: Error): void;
  92. _getEntryType(entry: EntryInfo): Promise<void | '' | 'file' | 'directory'>;
  93. _includeAsFile(entry: EntryInfo): boolean | undefined;
  94. }
  95. /**
  96. * Streaming version: Reads all files and directories in given root recursively.
  97. * Consumes ~constant small amount of RAM.
  98. * @param root Root directory
  99. * @param options Options to specify root (start directory), filters and recursion depth
  100. */
  101. export declare function readdirp(root: Path, options?: Partial<ReaddirpOptions>): ReaddirpStream;
  102. /**
  103. * Promise version: Reads all files and directories in given root recursively.
  104. * Compared to streaming version, will consume a lot of RAM e.g. when 1 million files are listed.
  105. * @returns array of paths and their entry infos
  106. */
  107. export declare function readdirpPromise(root: Path, options?: Partial<ReaddirpOptions>): Promise<EntryInfo[]>;
  108. export default readdirp;