Spaces:
Sleeping
Sleeping
import { Minimatch } from 'minimatch'; | |
import { Minipass } from 'minipass'; | |
import { FSOption, Path, PathScurry } from 'path-scurry'; | |
import { IgnoreLike } from './ignore.js'; | |
import { Pattern } from './pattern.js'; | |
export type MatchSet = Minimatch['set']; | |
export type GlobParts = Exclude<Minimatch['globParts'], undefined>; | |
/** | |
* A `GlobOptions` object may be provided to any of the exported methods, and | |
* must be provided to the `Glob` constructor. | |
* | |
* All options are optional, boolean, and false by default, unless otherwise | |
* noted. | |
* | |
* All resolved options are added to the Glob object as properties. | |
* | |
* If you are running many `glob` operations, you can pass a Glob object as the | |
* `options` argument to a subsequent operation to share the previously loaded | |
* cache. | |
*/ | |
export interface GlobOptions { | |
/** | |
* Set to `true` to always receive absolute paths for | |
* matched files. Set to `false` to always return relative paths. | |
* | |
* When this option is not set, absolute paths are returned for patterns | |
* that are absolute, and otherwise paths are returned that are relative | |
* to the `cwd` setting. | |
* | |
* This does _not_ make an extra system call to get | |
* the realpath, it only does string path resolution. | |
* | |
* Conflicts with {@link withFileTypes} | |
*/ | |
absolute?: boolean; | |
/** | |
* Set to false to enable {@link windowsPathsNoEscape} | |
* | |
* @deprecated | |
*/ | |
allowWindowsEscape?: boolean; | |
/** | |
* The current working directory in which to search. Defaults to | |
* `process.cwd()`. | |
* | |
* May be eiher a string path or a `file://` URL object or string. | |
*/ | |
cwd?: string | URL; | |
/** | |
* Include `.dot` files in normal matches and `globstar` | |
* matches. Note that an explicit dot in a portion of the pattern | |
* will always match dot files. | |
*/ | |
dot?: boolean; | |
/** | |
* Prepend all relative path strings with `./` (or `.\` on Windows). | |
* | |
* Without this option, returned relative paths are "bare", so instead of | |
* returning `'./foo/bar'`, they are returned as `'foo/bar'`. | |
* | |
* Relative patterns starting with `'../'` are not prepended with `./`, even | |
* if this option is set. | |
*/ | |
dotRelative?: boolean; | |
/** | |
* Follow symlinked directories when expanding `**` | |
* patterns. This can result in a lot of duplicate references in | |
* the presence of cyclic links, and make performance quite bad. | |
* | |
* By default, a `**` in a pattern will follow 1 symbolic link if | |
* it is not the first item in the pattern, or none if it is the | |
* first item in the pattern, following the same behavior as Bash. | |
*/ | |
follow?: boolean; | |
/** | |
* string or string[], or an object with `ignore` and `ignoreChildren` | |
* methods. | |
* | |
* If a string or string[] is provided, then this is treated as a glob | |
* pattern or array of glob patterns to exclude from matches. To ignore all | |
* children within a directory, as well as the entry itself, append `'/**'` | |
* to the ignore pattern. | |
* | |
* **Note** `ignore` patterns are _always_ in `dot:true` mode, regardless of | |
* any other settings. | |
* | |
* If an object is provided that has `ignored(path)` and/or | |
* `childrenIgnored(path)` methods, then these methods will be called to | |
* determine whether any Path is a match or if its children should be | |
* traversed, respectively. | |
*/ | |
ignore?: string | string[] | IgnoreLike; | |
/** | |
* Treat brace expansion like `{a,b}` as a "magic" pattern. Has no | |
* effect if {@link nobrace} is set. | |
* | |
* Only has effect on the {@link hasMagic} function. | |
*/ | |
magicalBraces?: boolean; | |
/** | |
* Add a `/` character to directory matches. Note that this requires | |
* additional stat calls in some cases. | |
*/ | |
mark?: boolean; | |
/** | |
* Perform a basename-only match if the pattern does not contain any slash | |
* characters. That is, `*.js` would be treated as equivalent to | |
* `**\/*.js`, matching all js files in all directories. | |
*/ | |
matchBase?: boolean; | |
/** | |
* Limit the directory traversal to a given depth below the cwd. | |
* Note that this does NOT prevent traversal to sibling folders, | |
* root patterns, and so on. It only limits the maximum folder depth | |
* that the walk will descend, relative to the cwd. | |
*/ | |
maxDepth?: number; | |
/** | |
* Do not expand `{a,b}` and `{1..3}` brace sets. | |
*/ | |
nobrace?: boolean; | |
/** | |
* Perform a case-insensitive match. This defaults to `true` on macOS and | |
* Windows systems, and `false` on all others. | |
* | |
* **Note** `nocase` should only be explicitly set when it is | |
* known that the filesystem's case sensitivity differs from the | |
* platform default. If set `true` on case-sensitive file | |
* systems, or `false` on case-insensitive file systems, then the | |
* walk may return more or less results than expected. | |
*/ | |
nocase?: boolean; | |
/** | |
* Do not match directories, only files. (Note: to match | |
* _only_ directories, put a `/` at the end of the pattern.) | |
*/ | |
nodir?: boolean; | |
/** | |
* Do not match "extglob" patterns such as `+(a|b)`. | |
*/ | |
noext?: boolean; | |
/** | |
* Do not match `**` against multiple filenames. (Ie, treat it as a normal | |
* `*` instead.) | |
* | |
* Conflicts with {@link matchBase} | |
*/ | |
noglobstar?: boolean; | |
/** | |
* Defaults to value of `process.platform` if available, or `'linux'` if | |
* not. Setting `platform:'win32'` on non-Windows systems may cause strange | |
* behavior. | |
*/ | |
platform?: NodeJS.Platform; | |
/** | |
* Set to true to call `fs.realpath` on all of the | |
* results. In the case of an entry that cannot be resolved, the | |
* entry is omitted. This incurs a slight performance penalty, of | |
* course, because of the added system calls. | |
*/ | |
realpath?: boolean; | |
/** | |
* | |
* A string path resolved against the `cwd` option, which | |
* is used as the starting point for absolute patterns that start | |
* with `/`, (but not drive letters or UNC paths on Windows). | |
* | |
* Note that this _doesn't_ necessarily limit the walk to the | |
* `root` directory, and doesn't affect the cwd starting point for | |
* non-absolute patterns. A pattern containing `..` will still be | |
* able to traverse out of the root directory, if it is not an | |
* actual root directory on the filesystem, and any non-absolute | |
* patterns will be matched in the `cwd`. For example, the | |
* pattern `/../*` with `{root:'/some/path'}` will return all | |
* files in `/some`, not all files in `/some/path`. The pattern | |
* `*` with `{root:'/some/path'}` will return all the entries in | |
* the cwd, not the entries in `/some/path`. | |
* | |
* To start absolute and non-absolute patterns in the same | |
* path, you can use `{root:''}`. However, be aware that on | |
* Windows systems, a pattern like `x:/*` or `//host/share/*` will | |
* _always_ start in the `x:/` or `//host/share` directory, | |
* regardless of the `root` setting. | |
*/ | |
root?: string; | |
/** | |
* A [PathScurry](http://npm.im/path-scurry) object used | |
* to traverse the file system. If the `nocase` option is set | |
* explicitly, then any provided `scurry` object must match this | |
* setting. | |
*/ | |
scurry?: PathScurry; | |
/** | |
* Call `lstat()` on all entries, whether required or not to determine | |
* if it's a valid match. When used with {@link withFileTypes}, this means | |
* that matches will include data such as modified time, permissions, and | |
* so on. Note that this will incur a performance cost due to the added | |
* system calls. | |
*/ | |
stat?: boolean; | |
/** | |
* An AbortSignal which will cancel the Glob walk when | |
* triggered. | |
*/ | |
signal?: AbortSignal; | |
/** | |
* Use `\\` as a path separator _only_, and | |
* _never_ as an escape character. If set, all `\\` characters are | |
* replaced with `/` in the pattern. | |
* | |
* Note that this makes it **impossible** to match against paths | |
* containing literal glob pattern characters, but allows matching | |
* with patterns constructed using `path.join()` and | |
* `path.resolve()` on Windows platforms, mimicking the (buggy!) | |
* behavior of Glob v7 and before on Windows. Please use with | |
* caution, and be mindful of [the caveat below about Windows | |
* paths](#windows). (For legacy reasons, this is also set if | |
* `allowWindowsEscape` is set to the exact value `false`.) | |
*/ | |
windowsPathsNoEscape?: boolean; | |
/** | |
* Return [PathScurry](http://npm.im/path-scurry) | |
* `Path` objects instead of strings. These are similar to a | |
* NodeJS `Dirent` object, but with additional methods and | |
* properties. | |
* | |
* Conflicts with {@link absolute} | |
*/ | |
withFileTypes?: boolean; | |
/** | |
* An fs implementation to override some or all of the defaults. See | |
* http://npm.im/path-scurry for details about what can be overridden. | |
*/ | |
fs?: FSOption; | |
/** | |
* Just passed along to Minimatch. Note that this makes all pattern | |
* matching operations slower and *extremely* noisy. | |
*/ | |
debug?: boolean; | |
/** | |
* Return `/` delimited paths, even on Windows. | |
* | |
* On posix systems, this has no effect. But, on Windows, it means that | |
* paths will be `/` delimited, and absolute paths will be their full | |
* resolved UNC forms, eg instead of `'C:\\foo\\bar'`, it would return | |
* `'//?/C:/foo/bar'` | |
*/ | |
posix?: boolean; | |
/** | |
* Do not match any children of any matches. For example, the pattern | |
* `**\/foo` would match `a/foo`, but not `a/foo/b/foo` in this mode. | |
* | |
* This is especially useful for cases like "find all `node_modules` | |
* folders, but not the ones in `node_modules`". | |
* | |
* In order to support this, the `Ignore` implementation must support an | |
* `add(pattern: string)` method. If using the default `Ignore` class, then | |
* this is fine, but if this is set to `false`, and a custom `Ignore` is | |
* provided that does not have an `add()` method, then it will throw an | |
* error. | |
* | |
* **Caveat** It *only* ignores matches that would be a descendant of a | |
* previous match, and only if that descendant is matched *after* the | |
* ancestor is encountered. Since the file system walk happens in | |
* indeterminate order, it's possible that a match will already be added | |
* before its ancestor, if multiple or braced patterns are used. | |
* | |
* For example: | |
* | |
* ```ts | |
* const results = await glob([ | |
* // likely to match first, since it's just a stat | |
* 'a/b/c/d/e/f', | |
* | |
* // this pattern is more complicated! It must to various readdir() | |
* // calls and test the results against a regular expression, and that | |
* // is certainly going to take a little bit longer. | |
* // | |
* // So, later on, it encounters a match at 'a/b/c/d/e', but it's too | |
* // late to ignore a/b/c/d/e/f, because it's already been emitted. | |
* 'a/[bdf]/?/[a-z]/*', | |
* ], { includeChildMatches: false }) | |
* ``` | |
* | |
* It's best to only set this to `false` if you can be reasonably sure that | |
* no components of the pattern will potentially match one another's file | |
* system descendants, or if the occasional included child entry will not | |
* cause problems. | |
* | |
* @default true | |
*/ | |
includeChildMatches?: boolean; | |
} | |
export type GlobOptionsWithFileTypesTrue = GlobOptions & { | |
withFileTypes: true; | |
absolute?: undefined; | |
mark?: undefined; | |
posix?: undefined; | |
}; | |
export type GlobOptionsWithFileTypesFalse = GlobOptions & { | |
withFileTypes?: false; | |
}; | |
export type GlobOptionsWithFileTypesUnset = GlobOptions & { | |
withFileTypes?: undefined; | |
}; | |
export type Result<Opts> = Opts extends GlobOptionsWithFileTypesTrue ? Path : Opts extends GlobOptionsWithFileTypesFalse ? string : Opts extends GlobOptionsWithFileTypesUnset ? string : string | Path; | |
export type Results<Opts> = Result<Opts>[]; | |
export type FileTypes<Opts> = Opts extends GlobOptionsWithFileTypesTrue ? true : Opts extends GlobOptionsWithFileTypesFalse ? false : Opts extends GlobOptionsWithFileTypesUnset ? false : boolean; | |
/** | |
* An object that can perform glob pattern traversals. | |
*/ | |
export declare class Glob<Opts extends GlobOptions> implements GlobOptions { | |
absolute?: boolean; | |
cwd: string; | |
root?: string; | |
dot: boolean; | |
dotRelative: boolean; | |
follow: boolean; | |
ignore?: string | string[] | IgnoreLike; | |
magicalBraces: boolean; | |
mark?: boolean; | |
matchBase: boolean; | |
maxDepth: number; | |
nobrace: boolean; | |
nocase: boolean; | |
nodir: boolean; | |
noext: boolean; | |
noglobstar: boolean; | |
pattern: string[]; | |
platform: NodeJS.Platform; | |
realpath: boolean; | |
scurry: PathScurry; | |
stat: boolean; | |
signal?: AbortSignal; | |
windowsPathsNoEscape: boolean; | |
withFileTypes: FileTypes<Opts>; | |
includeChildMatches: boolean; | |
/** | |
* The options provided to the constructor. | |
*/ | |
opts: Opts; | |
/** | |
* An array of parsed immutable {@link Pattern} objects. | |
*/ | |
patterns: Pattern[]; | |
/** | |
* All options are stored as properties on the `Glob` object. | |
* | |
* See {@link GlobOptions} for full options descriptions. | |
* | |
* Note that a previous `Glob` object can be passed as the | |
* `GlobOptions` to another `Glob` instantiation to re-use settings | |
* and caches with a new pattern. | |
* | |
* Traversal functions can be called multiple times to run the walk | |
* again. | |
*/ | |
constructor(pattern: string | string[], opts: Opts); | |
/** | |
* Returns a Promise that resolves to the results array. | |
*/ | |
walk(): Promise<Results<Opts>>; | |
/** | |
* synchronous {@link Glob.walk} | |
*/ | |
walkSync(): Results<Opts>; | |
/** | |
* Stream results asynchronously. | |
*/ | |
stream(): Minipass<Result<Opts>, Result<Opts>>; | |
/** | |
* Stream results synchronously. | |
*/ | |
streamSync(): Minipass<Result<Opts>, Result<Opts>>; | |
/** | |
* Default sync iteration function. Returns a Generator that | |
* iterates over the results. | |
*/ | |
iterateSync(): Generator<Result<Opts>, void, void>; | |
[Symbol.iterator](): Generator<Result<Opts>, void, void>; | |
/** | |
* Default async iteration function. Returns an AsyncGenerator that | |
* iterates over the results. | |
*/ | |
iterate(): AsyncGenerator<Result<Opts>, void, void>; | |
[Symbol.asyncIterator](): AsyncGenerator<Result<Opts>, void, void>; | |
} | |
//# sourceMappingURL=glob.d.ts.map |