[79a0317] | 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. */
|
---|
[0c6b92a] | 19 | export type Path = string;
|
---|
[79a0317] | 20 | /** Emitted entry. Contains relative & absolute path, basename, and either stats or dirent. */
|
---|
[0c6b92a] | 21 | export interface EntryInfo {
|
---|
| 22 | path: string;
|
---|
| 23 | fullPath: string;
|
---|
| 24 | stats?: Stats;
|
---|
| 25 | dirent?: Dirent;
|
---|
| 26 | basename: string;
|
---|
| 27 | }
|
---|
[79a0317] | 28 | /** Path or dir entries (files) */
|
---|
[0c6b92a] | 29 | export type PathOrDirent = Dirent | Path;
|
---|
[79a0317] | 30 | /** Filterer for files */
|
---|
| 31 | export type Tester = (entryInfo: EntryInfo) => boolean;
|
---|
[0c6b92a] | 32 | export type Predicate = string[] | string | Tester;
|
---|
[79a0317] | 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 = {
|
---|
[0c6b92a] | 49 | root: string;
|
---|
[79a0317] | 50 | fileFilter?: Predicate;
|
---|
| 51 | directoryFilter?: Predicate;
|
---|
| 52 | type?: EntryType;
|
---|
| 53 | lstat?: boolean;
|
---|
| 54 | depth?: number;
|
---|
| 55 | alwaysStat?: boolean;
|
---|
| 56 | highWaterMark?: number;
|
---|
[0c6b92a] | 57 | };
|
---|
[79a0317] | 58 | /** Directory entry. Contains path, depth count, and files. */
|
---|
[0c6b92a] | 59 | export interface DirEntry {
|
---|
| 60 | files: PathOrDirent[];
|
---|
| 61 | depth: number;
|
---|
| 62 | path: Path;
|
---|
| 63 | }
|
---|
[79a0317] | 64 | /** Readable readdir stream, emitting new files as they're being listed. */
|
---|
[0c6b92a] | 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;
|
---|
[79a0317] | 92 | _getEntryType(entry: EntryInfo): Promise<void | '' | 'file' | 'directory'>;
|
---|
[0c6b92a] | 93 | _includeAsFile(entry: EntryInfo): boolean | undefined;
|
---|
| 94 | }
|
---|
| 95 | /**
|
---|
[79a0317] | 96 | * Streaming version: Reads all files and directories in given root recursively.
|
---|
| 97 | * Consumes ~constant small amount of RAM.
|
---|
[0c6b92a] | 98 | * @param root Root directory
|
---|
| 99 | * @param options Options to specify root (start directory), filters and recursion depth
|
---|
| 100 | */
|
---|
[79a0317] | 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[]>;
|
---|
[0c6b92a] | 108 | export default readdirp;
|
---|