Enhanced glob utility with gitignore support, pattern negation, and flexible filtering. A modern alternative to traditional glob libraries with better defaults and TypeScript support.
- π― Pattern Negation - Support for
!patternto exclude files - π Gitignore Support - Automatic respect for
.gitignorerules - π§ Sensible Defaults - Ignore
node_modules,.gitby default - π Cross-Platform - Windows and POSIX path normalization
- π Type Safe - Full TypeScript support with precise types
- β‘ Fast - Optimized traversal with parallel processing
- πͺ Flexible Filtering - Dotfiles, symlinks, case sensitivity options
npm install @dephub/glob
# or
pnpm add @dephub/glob
# or
yarn add @dephub/globimport { glob } from '@dephub/glob';
// Find all TypeScript files excluding tests
const files = await glob(['src/**/*.ts', '!**/*.test.ts']);
// With gitignore support and absolute paths
const projectFiles = await glob('**/*', {
gitignore: true,
absolute: true,
onlyFiles: true,
});import { glob } from '@dephub/glob';
// All source files
const sourceFiles = await glob('src/**/*.{js,ts}');
// Multiple patterns with exclusion
const assets = await glob([
'**/*.png',
'**/*.jpg',
'!**/node_modules/**',
'!**/dist/**',
]);
// From specific directory
const configFiles = await glob('**/*.json', {
projectRoot: './config',
});import { glob } from '@dephub/glob';
// Respect gitignore and include dotfiles
const allFiles = await glob('**/*', {
gitignore: true,
dot: true,
onlyFiles: true,
});
// Case-insensitive search
const caseInsensitive = await glob('**/*.JSX', {
ignoreCase: true,
});
// Follow symbolic links
const withSymlinks = await glob('**/*', {
followSymlinks: true,
});import { glob } from '@dephub/glob';
// Common project setup
const projectFiles = await glob(['**/*', '!**/node_modules/**'], {
projectRoot: process.cwd(),
gitignore: true,
onlyFiles: true,
dot: false,
ignores: ['*.log', 'temp/**'],
});The main glob function that returns a promise resolving to matched file paths.
Parameters:
pattern(string | string[]) - Glob pattern or array of patterns. Use!patternfor exclusion.options(Options) - Configuration options
Returns: Promise<string[]>
| Option | Type | Default | Description |
|---|---|---|---|
projectRoot |
string | process.cwd() |
Root directory for search |
ignores |
string[] | [] |
Additional patterns to ignore |
ignoreCase |
boolean | false |
Case-insensitive matching |
gitignore |
boolean | false |
Respect .gitignore files |
onlyFiles |
boolean | false |
Return only files, not directories |
dot |
boolean | false |
Include dotfiles (e.g., .env) |
followSymlinks |
boolean | false |
Follow symbolic links |
absolute |
boolean | false |
Return absolute paths |
// Include all TypeScript files
await glob('src/**/*.ts');
// Multiple file extensions
await glob('src/**/*.{js,ts,jsx,tsx}');// Exclude test files and node_modules
await glob([
'src/**/*.ts',
'!**/*.test.ts',
'!**/*.spec.ts',
'!node_modules/**',
]);// Complex inclusion/exclusion
await glob([
'**/*.ts',
'!**/dist/**',
'!**/node_modules/**',
'!**/*.d.ts',
'**/*.js',
'!**/vendor/**',
]);import { glob } from '@dephub/glob';
const sourceFiles = await glob(
['src/**/*.{js,ts}', '!**/*.test.*', '!**/*.spec.*'],
{
gitignore: true,
onlyFiles: true,
},
);const assets = await glob(
[
'**/*.{png,jpg,svg,gif}',
'**/*.{woff,woff2,ttf}',
'!node_modules/**',
'!dist/**',
],
{
onlyFiles: true,
},
);const configFiles = await glob(
['**/*config*.{json,js,ts}', '**/.env*', '!node_modules/**'],
{
dot: true,
gitignore: true,
},
);import { glob } from '@dephub/glob';
import { readFile, writeFile } from '@dephub/read-write';
// Process all Markdown files
const markdownFiles = await glob('**/*.md', {
gitignore: true,
onlyFiles: true,
});
for (const file of markdownFiles) {
const content = await readFile(file, 'utf-8');
const processed = transformContent(content);
await writeFile(file, processed);
}import { glob } from '@dephub/glob';
// Find all test files
const testFiles = await glob('**/*.{test,spec}.{js,ts}', {
ignores: ['node_modules/**', 'dist/**'],
});
// Configure test runner with found files
configureTests(testFiles);#!/usr/bin/env node
import { glob } from '@dephub/glob';
const patterns = process.argv.slice(2);
const files = await glob(patterns, {
gitignore: true,
onlyFiles: true,
});
console.log(files.join('\n'));// Before
import fastGlob from 'fast-glob';
const files = await fastGlob(['**/*.ts', '!**/*.d.ts'], {
ignore: ['node_modules/**'],
dot: true,
});
// After
import { glob } from '@dephub/glob';
const files = await glob(['**/*.ts', '!**/*.d.ts'], {
ignores: ['node_modules/**'],
dot: true,
});// Before
import { globby } from 'globby';
const files = await globby('**/*.ts', {
gitignore: true,
dot: true,
});
// After
import { glob } from '@dephub/glob';
const files = await glob('**/*.ts', {
gitignore: true,
dot: true,
});- Use
onlyFiles: truewhen you don't need directories - Set
gitignore: trueto avoid traversing ignored paths - Use specific patterns instead of
**/*when possible - Combine multiple exclusions in a single
ignoresarray
MIT License β see LICENSE for details.
Author: Estarlin R (estarlincito.com)