Modern FileSystem (fs) utilities to lazy walk directories Asynchronously (but also Synchronously). Under the hood the code has been created using ES6 Generators.
Features
- Lazy walk by using fs.opendir.
- Zero dependencies.
- Enforce usage of Symbols for CONSTANTS.
- Synchronous API.
[!NOTE]
Performance over some of the features is a non-goal.
Requirements
Getting Started
This package is available in the Node Package Repository and can be easily installed with npm or yarn.
$ npm i @nodesecure/fs-walk
$ yarn add @nodesecure/fs-walk
Usage example
import path from "node:path";
import { walk } from "@nodesecure/fs-walk";
for await (const [dirent, absoluteFileLocation] of walk(".")) {
if (dirent.isFile()) {
console.log(absoluteFileLocation);
console.log(path.extname(absoluteFileLocation));
}
}
API
export interface WalkOptions {
extensions?: Set<string>;
}
export type WalkEntry = [dirent: fs.Dirent, absoluteFileLocation: string];
walk(directory: string, options?: WalkOptions): AsyncIterableIterator< WalkEntry >
Asynchronous walk.
walkSync(directory: string, options?: WalkOptions): IterableIterator< WalkEntry >
Synchronous walk (using readdirSync under the hood instead of opendir).
For example fetching JavaScript files for a given location:
import { walkSync } from "@nodesecure/fs-walk";
const javascriptFiles = [...walkSync("./someDirectory", { extensions: new Set([".js"]) }))]
.filter(([dirent]) => dirent.isFile())
.map(([, absoluteFileLocation]) => absoluteFileLocation);
console.log(javascriptFiles);
Contributors ✨
Thanks goes to these wonderful people (emoji key):
License
MIT