Skip to content

jaywcjlove/recursive-readdir-files

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
November 30, 2023 19:30
October 17, 2021 23:53
src
April 26, 2022 01:12
August 19, 2021 01:50
October 17, 2021 23:53
October 17, 2021 23:53
November 30, 2023 19:30
November 30, 2023 19:33

recursive-readdir-files

Buy me a coffee Coverage Status npm version NPM Download

Node.js module to list all files in a directory or any subdirectories.

Installation

This package is ESM only: Node 12+ is needed to use it and it must be import instead of require.

npm install recursive-readdir-files

If you still want to use in CommonJS, you can use dynamic import() to load.

const recursiveReaddirFiles = await import('recursive-readdir-files');

// Fix compiling in typescript.
// https://github.com/microsoft/TypeScript/issues/43329#issuecomment-922544562
const { getExt, recursiveReaddirFiles } = await (Function('return import("recursive-readdir-files")')()) as Promise<typeof import("recursive-readdir-files")>;

Usage

import recursiveReaddirFiles from 'recursive-readdir-files';

const files = await recursiveReaddirFiles(process.cwd(), {
  ignored: /\/(node_modules|\.git)/
});

// `files` is an array
console.log(files);
// ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// [
//   {
//     dev: 16777233,
//     mode: 33188,
//     nlink: 1,
//     uid: 501,
//     gid: 20,
//     rdev: 0,
//     blksize: 4096,
//     ino: 145023089,
//     size: 89,
//     blocks: 8,
//     atimeMs: 1649303678077.934,
//     mtimeMs: 1649303676847.1777,
//     ctimeMs: 1649303676847.1777,
//     birthtimeMs: 1649301118132.6782,
//     atime: 2022-04-07T03:54:38.078Z,
//     mtime: 2022-04-07T03:54:36.847Z,
//     ctime: 2022-04-07T03:54:36.847Z,
//     birthtime: 2022-04-07T03:11:58.133Z,
//     name: 'watch.ts',
//     path: '/Users/xxx/watch.ts',
//     ext: 'ts'
//   },
//   // ...
// ]

Or

recursiveReaddirFiles(process.cwd(), {
  ignored: /\/(node_modules|\.git)/
}, (filepath, state) => {
  console.log(filepath);
  // 👉 /Users/xxx/watch.ts
  console.log(state.isFile());      // 👉 true
  console.log(state.isDirectory()); // 👉 false
  console.log(state);
  // ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
  // {
  //   dev: 16777233,
  //   mode: 33188,
  //   nlink: 1,
  //   uid: 501,
  //   gid: 20,
  //   rdev: 0,
  //   blksize: 4096,
  //   ino: 145023089,
  //   size: 89,
  //   blocks: 8,
  //   atimeMs: 1649303678077.934,
  //   mtimeMs: 1649303676847.1777,
  //   ctimeMs: 1649303676847.1777,
  //   birthtimeMs: 1649301118132.6782,
  //   atime: 2022-04-07T03:54:38.078Z,
  //   mtime: 2022-04-07T03:54:36.847Z,
  //   ctime: 2022-04-07T03:54:36.847Z,
  //   birthtime: 2022-04-07T03:11:58.133Z,
  //   name: 'watch.ts',
  //   path: '/Users/xxx/watch.ts',
  //   ext: 'ts'
  // }
})

Options

export interface RecursiveReaddirFilesOptions {
  /**
   * Ignore files
   * @example `/\/(node_modules|\.git)/`
   */
  ignored?: RegExp;
  /**
   * Specifies a list of `glob` patterns that match files to be included in compilation.
   * @example `/(\.json)$/`
   */
  include?: RegExp;
  /**
   * Specifies a list of files to be excluded from compilation.
   * @example `/(package\.json)$/`
   */
  exclude?: RegExp;
  /** Provide filtering methods to filter data. */
  filter?: (item: IFileDirStat) => boolean;
}

Result

import fs from 'node:fs';
export interface IFileDirStat extends Partial<fs.Stats> {
  /**
   * @example `/a/sum.jpg` => `sum.jpg`
   */
  name: string;
  /**
   * @example `/basic/src/utils/sum.ts`
   */
  path: string;
  /**
   * @example `/a/b.jpg` => `jpg`
   */
  ext?: string;
}
declare type Callback = (filepath: string, stat: IFileDirStat) => void;
export default function recursiveReaddirFiles(rootPath: string, options?: RecursiveReaddirFilesOptions, callback?: Callback): Promise<IFileDirStat[]>;
export { recursiveReaddirFiles };
export declare const getStat: (filepath: string) => Promise<IFileDirStat>;
/**
 * Get ext
 * @param {String} filePath `/a/b.jpg` => `jpg`
 */
export declare const getExt: (filePath: string) => string;

Contributors

As always, thanks to our amazing contributors!

Made with action-contributors.

License

Licensed under the MIT License.