User-friendly glob matching library with Promise API, directory expansion, gitignore support, and streaming capabilities
npx @tessl/cli install tessl/npm-globby@14.1.0Globby is a user-friendly glob matching library built on top of fast-glob with additional convenience features. It provides Promise-based APIs for matching file paths using glob patterns, with support for negated patterns, automatic directory expansion, gitignore integration, and streaming capabilities.
npm install globbyimport { globby, globbySync, globbyStream } from "globby";Additional imports for ignore handling and utilities:
import {
isGitIgnored,
isIgnoredByIgnoreFiles,
GITIGNORE_FILES_PATTERN,
isDynamicPattern,
generateGlobTasks,
generateGlobTasksSync,
convertPathToPattern
} from "globby";For CommonJS:
const { globby, globbySync, globbyStream } = require("globby");
const { isGitIgnored, isIgnoredByIgnoreFiles, GITIGNORE_FILES_PATTERN } = require("globby");import { globby } from "globby";
// Basic glob matching
const paths = await globby(['*', '!node_modules']);
console.log(paths);
//=> ['index.js', 'package.json', 'readme.md']
// Multiple patterns with negation
const jsFiles = await globby(['src/**/*.js', '!src/**/*.test.js']);
// Directory expansion (default behavior)
const allFiles = await globby(['src', 'docs'], {
expandDirectories: {
files: ['*.js', '*.md'],
extensions: ['ts']
}
});
// Gitignore support
const trackedFiles = await globby(['**/*'], { gitignore: true });Globby is built around several key components:
globby, globbySync, globbyStream)Core file matching functionality with Promise-based API, synchronous variant, and streaming support for large file sets.
function globby(
patterns: string | readonly string[],
options?: Options
): Promise<string[]>;
function globby(
patterns: string | readonly string[],
options: Options & { objectMode: true }
): Promise<GlobEntry[]>;Integration with .gitignore and custom ignore file formats for excluding files from glob results.
function isGitIgnored(options?: GitignoreOptions): Promise<GlobbyFilterFunction>;
function isIgnoredByIgnoreFiles(
patterns: string | readonly string[],
options?: Options
): Promise<GlobbyFilterFunction>;Helper functions for pattern analysis, task generation, and integration with other globbing tools.
function isDynamicPattern(
patterns: string | readonly string[],
options?: { cwd?: URL | string }
): boolean;
function generateGlobTasks(
patterns: string | readonly string[],
options?: Options
): Promise<GlobTask[]>;interface Options {
/** Auto-expand directories to include files (default: true) */
readonly expandDirectories?: ExpandDirectoriesOption;
/** Respect .gitignore files (default: false) */
readonly gitignore?: boolean;
/** Custom ignore file patterns */
readonly ignoreFiles?: string | readonly string[];
/** Current working directory (supports URL objects) */
readonly cwd?: URL | string;
// Fast-glob options
/** Return only files (default: true) */
readonly onlyFiles?: boolean;
/** Return only directories (default: false) */
readonly onlyDirectories?: boolean;
/** Follow symbolic links (default: true) */
readonly followSymbolicLinks?: boolean;
/** Add trailing slash to directory paths when onlyFiles is false */
readonly markDirectories?: boolean;
/** Return entries with additional file information */
readonly objectMode?: boolean;
/** Ignore patterns */
readonly ignore?: readonly string[];
/** Search depth */
readonly deep?: number;
/** Include dot files (default: false) */
readonly dot?: boolean;
/** Suppress errors (default: true) */
readonly suppressErrors?: boolean;
/** Throw error on broken symbolic link */
readonly throwErrorOnBrokenSymbolicLink?: boolean;
/** Return absolute paths (default: false) */
readonly absolute?: boolean;
/** Add stats property to entries (requires objectMode: true) */
readonly stats?: boolean;
/** Case sensitive matching (default: true) */
readonly caseSensitiveMatch?: boolean;
/** Transform paths in results */
readonly transform?: (entry: GlobEntry) => GlobEntry;
}
type ExpandDirectoriesOption =
| boolean
| readonly string[]
| { files?: readonly string[]; extensions?: readonly string[] };
interface GlobEntry {
/** The name of the file/directory without path */
name: string;
/** The path relative to the search directory */
path: string;
/** Node.js directory entry with file type methods */
dirent: import('fs').Dirent;
/** Optional file stats (when stats option is true) */
stats?: import('fs').Stats;
}
interface GlobTask {
readonly patterns: string[];
readonly options: Options;
}
type GlobbyFilterFunction = (path: URL | string) => boolean;
interface GitignoreOptions {
readonly cwd?: URL | string;
}