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;
|
---|