UNPKG

fs-visitor

Version:

A Node.js library for recursively listing files and directories with customizable filtering and sorting options.

137 lines (104 loc) 3.45 kB
# fs-visitor `fs-visitor` is a Node.js library that provides a simple API to recursively list files and directories with various filtering and sorting options. ## Table of Contents - [Installation](#installation) - [Usage](#usage) - [API](#api) - [`Entry`](#entry) - [`FilterEntry`](#filterentry) - [`Options`](#options) - [`processVisitor`](#processvisitor) - [Examples](#examples) - [Contributing](#contributing) - [License](#license) ## Installation ```bash npm install fs-visitor ``` ## Usage ```javascript const { processVisitor } = require("fs-visitor"); // Example: List all files and directories in the current directory const entries = processVisitor("./"); console.log(entries); // Example: List only TypeScript files with a depth of 2 const tsFilter = (entry) => entry.type === "file" && entry.name.endsWith(".ts"); const options = { deep: 2, filterEntry: tsFilter }; const tsEntries = processVisitor("./src", options); console.log(tsEntries); ``` ## API ### `Entry` ```typescript type Entry = { type: "directory" | "file" | string; name: string; absolute: string; relative: string; }; ``` Represents an entry (file or directory) returned by `processVisitor`. ### `FilterEntry` ```typescript type FilterEntry = (entry: Entry) => boolean; ``` A function used for filtering entries based on custom criteria. ### `Options` ```typescript type Options = { deep?: number; filterEntry?: FilterEntry | FilterEntry[]; withDirectory?: boolean; sorter?: (a: Entry, b: Entry) => number; relativePrefix?: string; useSlash?: boolean; }; ``` Options to customize the behavior of `processVisitor`. - `deep`: Maximum depth to scan. - `filterEntry`: A single or an array of `FilterEntry` functions. - `withDirectory`: Include directories in the result. - `sorter`: Custom function to sort entries. - `relativePrefix`: Prefix to add to relative paths. - `useSlash`: Use forward slash `/` as a directory separator. ### `processVisitor` ```typescript export const processVisitor = ( directory: string, options: Options = {} ) => Entry[]; ``` The main method that lists files and directories based on the provided options. ## Examples ### Example 1: List All Files and Directories ```javascript import { processVisitor } from "fs-visitor"; const entries = processVisitor("./"); console.log(entries); ``` ### Example 2: List TypeScript Files Only (Depth 2) ```javascript import { processVisitor } from "fs-visitor"; const entries = processVisitor("./src", { deep: 2, filterEntry: (entry) => { return entry.type === "file" && entry.name.endsWith(".ts"); }, }); console.log(entries); ``` ### Example 3: Include and Exclude This example use `minimatch` and expose a simple function `createFileEntry` in `filter` file ```javascript import { processVisitor } from "fs-visitor"; import { createFileEntry } from "fs-visitor/filter"; const filterEntry = createFileEntry({ include: "**/*.ts", exclude: ["**/Config*", "**/Defined*"], }); const entries = processVisitor("./src/widget", { filterEntry }); console.log(entries); ``` Feel free to contribute to this project, report issues, or suggest improvements. Your feedback is highly appreciated. ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.