@mastra/core
Version:
Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack.
96 lines • 3.7 kB
TypeScript
/**
* Glob Pattern Utilities
*
* Shared glob pattern matching for workspace operations.
* Uses picomatch for battle-tested glob support including
* brace expansion, character classes, negation, and `**`.
*/
/**
* Check if a string contains glob metacharacters.
*
* @example
* isGlobPattern('/docs') // false
* isGlobPattern('/docs/**\/*.md') // true
* isGlobPattern('*.ts') // true
* isGlobPattern('/src/{a,b}') // true
*/
export declare function isGlobPattern(input: string): boolean;
/**
* Extract the static directory prefix before the first glob metacharacter.
* Returns the deepest non-glob ancestor directory.
*
* @example
* extractGlobBase('docs/**\/*.md') // 'docs'
* extractGlobBase('**\/*.md') // '.'
* extractGlobBase('src/*.ts') // 'src'
* extractGlobBase('exact/path') // 'exact/path'
*/
export declare function extractGlobBase(pattern: string): string;
/** A compiled matcher function: returns true if a path matches */
export type GlobMatcher = (path: string) => boolean;
export interface GlobMatcherOptions {
/** Match dotfiles (default: false) */
dot?: boolean;
}
/**
* Compile glob pattern(s) into a reusable matcher function.
* The matcher tests paths using workspace-style forward slashes.
*
* Automatically normalizes leading './' and '/' from both patterns
* and test paths, since picomatch does not match these prefixes.
*
* @example
* const match = createGlobMatcher('**\/*.ts');
* match('src/index.ts') // true
* match('src/style.css') // false
*
* const multi = createGlobMatcher(['**\/*.ts', '**\/*.tsx']);
* multi('App.tsx') // true
*/
export declare function createGlobMatcher(patterns: string | string[], options?: GlobMatcherOptions): GlobMatcher;
/**
* One-off convenience: test if a path matches a glob pattern.
*
* For repeated matching against the same pattern, prefer createGlobMatcher()
* to compile once and reuse.
*
* @example
* matchGlob('src/index.ts', '**\/*.ts') // true
*/
export declare function matchGlob(path: string, pattern: string | string[], options?: GlobMatcherOptions): boolean;
/** A filesystem entry returned by resolvePathPattern */
export interface PathEntry {
path: string;
type: 'file' | 'directory';
}
/** Minimal readdir entry — compatible with both FileEntry and SkillSourceEntry */
export interface ReaddirEntry {
name: string;
type: 'file' | 'directory';
isSymlink?: boolean;
}
export interface ResolvePathOptions {
/** Match dotfiles (default: false) */
dot?: boolean;
/** Maximum directory depth to walk (default: 10) */
maxDepth?: number;
}
/**
* Resolve a path pattern to matching filesystem entries.
*
* Handles both plain paths and glob patterns consistently:
* - Plain paths: determines file vs directory via readdir probe, returns single entry
* - Glob patterns: walks from the glob base, matches both files and directories
*
* @example
* // Plain paths
* resolvePathPattern('/docs', readdir) // [{ path: '/docs', type: 'directory' }]
* resolvePathPattern('/docs/readme.md', readdir) // [{ path: '/docs/readme.md', type: 'file' }]
*
* // Glob patterns — matches files and directories
* resolvePathPattern('/docs/**\/*.md', readdir) // all .md files under /docs
* resolvePathPattern('**\/skills', readdir) // all directories (and files) named 'skills'
* resolvePathPattern('/skills/**', readdir) // everything under /skills
*/
export declare function resolvePathPattern(pattern: string, readdir: (dir: string) => Promise<ReaddirEntry[]>, options?: ResolvePathOptions): Promise<PathEntry[]>;
//# sourceMappingURL=glob.d.ts.map