init
This commit is contained in:
		
							
								
								
									
										15
									
								
								node_modules/minimatch/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								node_modules/minimatch/LICENSE
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
The ISC License
 | 
			
		||||
 | 
			
		||||
Copyright (c) 2011-2023 Isaac Z. Schlueter and Contributors
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
purpose with or without fee is hereby granted, provided that the above
 | 
			
		||||
copyright notice and this permission notice appear in all copies.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 | 
			
		||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 | 
			
		||||
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 | 
			
		||||
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 | 
			
		||||
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 | 
			
		||||
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR
 | 
			
		||||
IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
							
								
								
									
										454
									
								
								node_modules/minimatch/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										454
									
								
								node_modules/minimatch/README.md
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,454 @@
 | 
			
		||||
# minimatch
 | 
			
		||||
 | 
			
		||||
A minimal matching utility.
 | 
			
		||||
 | 
			
		||||
This is the matching library used internally by npm.
 | 
			
		||||
 | 
			
		||||
It works by converting glob expressions into JavaScript `RegExp`
 | 
			
		||||
objects.
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
// hybrid module, load with require() or import
 | 
			
		||||
import { minimatch } from 'minimatch'
 | 
			
		||||
// or:
 | 
			
		||||
const { minimatch } = require('minimatch')
 | 
			
		||||
 | 
			
		||||
minimatch('bar.foo', '*.foo') // true!
 | 
			
		||||
minimatch('bar.foo', '*.bar') // false!
 | 
			
		||||
minimatch('bar.foo', '*.+(bar|foo)', { debug: true }) // true, and noisy!
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Features
 | 
			
		||||
 | 
			
		||||
Supports these glob features:
 | 
			
		||||
 | 
			
		||||
- Brace Expansion
 | 
			
		||||
- Extended glob matching
 | 
			
		||||
- "Globstar" `**` matching
 | 
			
		||||
- [Posix character
 | 
			
		||||
  classes](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html),
 | 
			
		||||
  like `[[:alpha:]]`, supporting the full range of Unicode
 | 
			
		||||
  characters. For example, `[[:alpha:]]` will match against
 | 
			
		||||
  `'é'`, though `[a-zA-Z]` will not. Collating symbol and set
 | 
			
		||||
  matching is not supported, so `[[=e=]]` will _not_ match `'é'`
 | 
			
		||||
  and `[[.ch.]]` will not match `'ch'` in locales where `ch` is
 | 
			
		||||
  considered a single character.
 | 
			
		||||
 | 
			
		||||
See:
 | 
			
		||||
 | 
			
		||||
- `man sh`
 | 
			
		||||
- `man bash` [Pattern
 | 
			
		||||
  Matching](https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html)
 | 
			
		||||
- `man 3 fnmatch`
 | 
			
		||||
- `man 5 gitignore`
 | 
			
		||||
 | 
			
		||||
## Windows
 | 
			
		||||
 | 
			
		||||
**Please only use forward-slashes in glob expressions.**
 | 
			
		||||
 | 
			
		||||
Though windows uses either `/` or `\` as its path separator, only `/`
 | 
			
		||||
characters are used by this glob implementation. You must use
 | 
			
		||||
forward-slashes **only** in glob expressions. Back-slashes in patterns
 | 
			
		||||
will always be interpreted as escape characters, not path separators.
 | 
			
		||||
 | 
			
		||||
Note that `\` or `/` _will_ be interpreted as path separators in paths on
 | 
			
		||||
Windows, and will match against `/` in glob expressions.
 | 
			
		||||
 | 
			
		||||
So just always use `/` in patterns.
 | 
			
		||||
 | 
			
		||||
### UNC Paths
 | 
			
		||||
 | 
			
		||||
On Windows, UNC paths like `//?/c:/...` or
 | 
			
		||||
`//ComputerName/Share/...` are handled specially.
 | 
			
		||||
 | 
			
		||||
- Patterns starting with a double-slash followed by some
 | 
			
		||||
  non-slash characters will preserve their double-slash. As a
 | 
			
		||||
  result, a pattern like `//*` will match `//x`, but not `/x`.
 | 
			
		||||
- Patterns staring with `//?/<drive letter>:` will _not_ treat
 | 
			
		||||
  the `?` as a wildcard character. Instead, it will be treated
 | 
			
		||||
  as a normal string.
 | 
			
		||||
- Patterns starting with `//?/<drive letter>:/...` will match
 | 
			
		||||
  file paths starting with `<drive letter>:/...`, and vice versa,
 | 
			
		||||
  as if the `//?/` was not present. This behavior only is
 | 
			
		||||
  present when the drive letters are a case-insensitive match to
 | 
			
		||||
  one another. The remaining portions of the path/pattern are
 | 
			
		||||
  compared case sensitively, unless `nocase:true` is set.
 | 
			
		||||
 | 
			
		||||
Note that specifying a UNC path using `\` characters as path
 | 
			
		||||
separators is always allowed in the file path argument, but only
 | 
			
		||||
allowed in the pattern argument when `windowsPathsNoEscape: true`
 | 
			
		||||
is set in the options.
 | 
			
		||||
 | 
			
		||||
## Minimatch Class
 | 
			
		||||
 | 
			
		||||
Create a minimatch object by instantiating the `minimatch.Minimatch` class.
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var Minimatch = require('minimatch').Minimatch
 | 
			
		||||
var mm = new Minimatch(pattern, options)
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### Properties
 | 
			
		||||
 | 
			
		||||
- `pattern` The original pattern the minimatch object represents.
 | 
			
		||||
- `options` The options supplied to the constructor.
 | 
			
		||||
- `set` A 2-dimensional array of regexp or string expressions.
 | 
			
		||||
  Each row in the
 | 
			
		||||
  array corresponds to a brace-expanded pattern. Each item in the row
 | 
			
		||||
  corresponds to a single path-part. For example, the pattern
 | 
			
		||||
  `{a,b/c}/d` would expand to a set of patterns like:
 | 
			
		||||
 | 
			
		||||
        [ [ a, d ]
 | 
			
		||||
        , [ b, c, d ] ]
 | 
			
		||||
 | 
			
		||||
  If a portion of the pattern doesn't have any "magic" in it
 | 
			
		||||
  (that is, it's something like `"foo"` rather than `fo*o?`), then it
 | 
			
		||||
  will be left as a string rather than converted to a regular
 | 
			
		||||
  expression.
 | 
			
		||||
 | 
			
		||||
- `regexp` Created by the `makeRe` method. A single regular expression
 | 
			
		||||
  expressing the entire pattern. This is useful in cases where you wish
 | 
			
		||||
  to use the pattern somewhat like `fnmatch(3)` with `FNM_PATH` enabled.
 | 
			
		||||
- `negate` True if the pattern is negated.
 | 
			
		||||
- `comment` True if the pattern is a comment.
 | 
			
		||||
- `empty` True if the pattern is `""`.
 | 
			
		||||
 | 
			
		||||
### Methods
 | 
			
		||||
 | 
			
		||||
- `makeRe()` Generate the `regexp` member if necessary, and return it.
 | 
			
		||||
  Will return `false` if the pattern is invalid.
 | 
			
		||||
- `match(fname)` Return true if the filename matches the pattern, or
 | 
			
		||||
  false otherwise.
 | 
			
		||||
- `matchOne(fileArray, patternArray, partial)` Take a `/`-split
 | 
			
		||||
  filename, and match it against a single row in the `regExpSet`. This
 | 
			
		||||
  method is mainly for internal use, but is exposed so that it can be
 | 
			
		||||
  used by a glob-walker that needs to avoid excessive filesystem calls.
 | 
			
		||||
- `hasMagic()` Returns true if the parsed pattern contains any
 | 
			
		||||
  magic characters. Returns false if all comparator parts are
 | 
			
		||||
  string literals. If the `magicalBraces` option is set on the
 | 
			
		||||
  constructor, then it will consider brace expansions which are
 | 
			
		||||
  not otherwise magical to be magic. If not set, then a pattern
 | 
			
		||||
  like `a{b,c}d` will return `false`, because neither `abd` nor
 | 
			
		||||
  `acd` contain any special glob characters.
 | 
			
		||||
 | 
			
		||||
  This does **not** mean that the pattern string can be used as a
 | 
			
		||||
  literal filename, as it may contain magic glob characters that
 | 
			
		||||
  are escaped. For example, the pattern `\\*` or `[*]` would not
 | 
			
		||||
  be considered to have magic, as the matching portion parses to
 | 
			
		||||
  the literal string `'*'` and would match a path named `'*'`,
 | 
			
		||||
  not `'\\*'` or `'[*]'`. The `minimatch.unescape()` method may
 | 
			
		||||
  be used to remove escape characters.
 | 
			
		||||
 | 
			
		||||
All other methods are internal, and will be called as necessary.
 | 
			
		||||
 | 
			
		||||
### minimatch(path, pattern, options)
 | 
			
		||||
 | 
			
		||||
Main export. Tests a path against the pattern using the options.
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var isJS = minimatch(file, '*.js', { matchBase: true })
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### minimatch.filter(pattern, options)
 | 
			
		||||
 | 
			
		||||
Returns a function that tests its
 | 
			
		||||
supplied argument, suitable for use with `Array.filter`. Example:
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var javascripts = fileList.filter(minimatch.filter('*.js', { matchBase: true }))
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### minimatch.escape(pattern, options = {})
 | 
			
		||||
 | 
			
		||||
Escape all magic characters in a glob pattern, so that it will
 | 
			
		||||
only ever match literal strings
 | 
			
		||||
 | 
			
		||||
If the `windowsPathsNoEscape` option is used, then characters are
 | 
			
		||||
escaped by wrapping in `[]`, because a magic character wrapped in
 | 
			
		||||
a character class can only be satisfied by that exact character.
 | 
			
		||||
 | 
			
		||||
Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot
 | 
			
		||||
be escaped or unescaped.
 | 
			
		||||
 | 
			
		||||
### minimatch.unescape(pattern, options = {})
 | 
			
		||||
 | 
			
		||||
Un-escape a glob string that may contain some escaped characters.
 | 
			
		||||
 | 
			
		||||
If the `windowsPathsNoEscape` option is used, then square-brace
 | 
			
		||||
escapes are removed, but not backslash escapes. For example, it
 | 
			
		||||
will turn the string `'[*]'` into `*`, but it will not turn
 | 
			
		||||
`'\\*'` into `'*'`, because `\` is a path separator in
 | 
			
		||||
`windowsPathsNoEscape` mode.
 | 
			
		||||
 | 
			
		||||
When `windowsPathsNoEscape` is not set, then both brace escapes
 | 
			
		||||
and backslash escapes are removed.
 | 
			
		||||
 | 
			
		||||
Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot
 | 
			
		||||
be escaped or unescaped.
 | 
			
		||||
 | 
			
		||||
### minimatch.match(list, pattern, options)
 | 
			
		||||
 | 
			
		||||
Match against the list of
 | 
			
		||||
files, in the style of fnmatch or glob. If nothing is matched, and
 | 
			
		||||
options.nonull is set, then return a list containing the pattern itself.
 | 
			
		||||
 | 
			
		||||
```javascript
 | 
			
		||||
var javascripts = minimatch.match(fileList, '*.js', { matchBase: true })
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### minimatch.makeRe(pattern, options)
 | 
			
		||||
 | 
			
		||||
Make a regular expression object from the pattern.
 | 
			
		||||
 | 
			
		||||
## Options
 | 
			
		||||
 | 
			
		||||
All options are `false` by default.
 | 
			
		||||
 | 
			
		||||
### debug
 | 
			
		||||
 | 
			
		||||
Dump a ton of stuff to stderr.
 | 
			
		||||
 | 
			
		||||
### nobrace
 | 
			
		||||
 | 
			
		||||
Do not expand `{a,b}` and `{1..3}` brace sets.
 | 
			
		||||
 | 
			
		||||
### noglobstar
 | 
			
		||||
 | 
			
		||||
Disable `**` matching against multiple folder names.
 | 
			
		||||
 | 
			
		||||
### dot
 | 
			
		||||
 | 
			
		||||
Allow patterns to match filenames starting with a period, even if
 | 
			
		||||
the pattern does not explicitly have a period in that spot.
 | 
			
		||||
 | 
			
		||||
Note that by default, `a/**/b` will **not** match `a/.d/b`, unless `dot`
 | 
			
		||||
is set.
 | 
			
		||||
 | 
			
		||||
### noext
 | 
			
		||||
 | 
			
		||||
Disable "extglob" style patterns like `+(a|b)`.
 | 
			
		||||
 | 
			
		||||
### nocase
 | 
			
		||||
 | 
			
		||||
Perform a case-insensitive match.
 | 
			
		||||
 | 
			
		||||
### nocaseMagicOnly
 | 
			
		||||
 | 
			
		||||
When used with `{nocase: true}`, create regular expressions that
 | 
			
		||||
are case-insensitive, but leave string match portions untouched.
 | 
			
		||||
Has no effect when used without `{nocase: true}`
 | 
			
		||||
 | 
			
		||||
Useful when some other form of case-insensitive matching is used,
 | 
			
		||||
or if the original string representation is useful in some other
 | 
			
		||||
way.
 | 
			
		||||
 | 
			
		||||
### nonull
 | 
			
		||||
 | 
			
		||||
When a match is not found by `minimatch.match`, return a list containing
 | 
			
		||||
the pattern itself if this option is set. When not set, an empty list
 | 
			
		||||
is returned if there are no matches.
 | 
			
		||||
 | 
			
		||||
### magicalBraces
 | 
			
		||||
 | 
			
		||||
This only affects the results of the `Minimatch.hasMagic` method.
 | 
			
		||||
 | 
			
		||||
If the pattern contains brace expansions, such as `a{b,c}d`, but
 | 
			
		||||
no other magic characters, then the `Minimatch.hasMagic()` method
 | 
			
		||||
will return `false` by default. When this option set, it will
 | 
			
		||||
return `true` for brace expansion as well as other magic glob
 | 
			
		||||
characters.
 | 
			
		||||
 | 
			
		||||
### matchBase
 | 
			
		||||
 | 
			
		||||
If set, then patterns without slashes will be matched
 | 
			
		||||
against the basename of the path if it contains slashes. For example,
 | 
			
		||||
`a?b` would match the path `/xyz/123/acb`, but not `/xyz/acb/123`.
 | 
			
		||||
 | 
			
		||||
### nocomment
 | 
			
		||||
 | 
			
		||||
Suppress the behavior of treating `#` at the start of a pattern as a
 | 
			
		||||
comment.
 | 
			
		||||
 | 
			
		||||
### nonegate
 | 
			
		||||
 | 
			
		||||
Suppress the behavior of treating a leading `!` character as negation.
 | 
			
		||||
 | 
			
		||||
### flipNegate
 | 
			
		||||
 | 
			
		||||
Returns from negate expressions the same as if they were not negated.
 | 
			
		||||
(Ie, true on a hit, false on a miss.)
 | 
			
		||||
 | 
			
		||||
### partial
 | 
			
		||||
 | 
			
		||||
Compare a partial path to a pattern. As long as the parts of the path that
 | 
			
		||||
are present are not contradicted by the pattern, it will be treated as a
 | 
			
		||||
match. This is useful in applications where you're walking through a
 | 
			
		||||
folder structure, and don't yet have the full path, but want to ensure that
 | 
			
		||||
you do not walk down paths that can never be a match.
 | 
			
		||||
 | 
			
		||||
For example,
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
minimatch('/a/b', '/a/*/c/d', { partial: true }) // true, might be /a/b/c/d
 | 
			
		||||
minimatch('/a/b', '/**/d', { partial: true }) // true, might be /a/b/.../d
 | 
			
		||||
minimatch('/x/y/z', '/a/**/z', { partial: true }) // false, because x !== a
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### windowsPathsNoEscape
 | 
			
		||||
 | 
			
		||||
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 earlier versions on Windows. Please use with
 | 
			
		||||
caution, and be mindful of [the caveat about Windows
 | 
			
		||||
paths](#windows).
 | 
			
		||||
 | 
			
		||||
For legacy reasons, this is also set if
 | 
			
		||||
`options.allowWindowsEscape` is set to the exact value `false`.
 | 
			
		||||
 | 
			
		||||
### windowsNoMagicRoot
 | 
			
		||||
 | 
			
		||||
When a pattern starts with a UNC path or drive letter, and in
 | 
			
		||||
`nocase:true` mode, do not convert the root portions of the
 | 
			
		||||
pattern into a case-insensitive regular expression, and instead
 | 
			
		||||
leave them as strings.
 | 
			
		||||
 | 
			
		||||
This is the default when the platform is `win32` and
 | 
			
		||||
`nocase:true` is set.
 | 
			
		||||
 | 
			
		||||
### preserveMultipleSlashes
 | 
			
		||||
 | 
			
		||||
By default, multiple `/` characters (other than the leading `//`
 | 
			
		||||
in a UNC path, see "UNC Paths" above) are treated as a single
 | 
			
		||||
`/`.
 | 
			
		||||
 | 
			
		||||
That is, a pattern like `a///b` will match the file path `a/b`.
 | 
			
		||||
 | 
			
		||||
Set `preserveMultipleSlashes: true` to suppress this behavior.
 | 
			
		||||
 | 
			
		||||
### optimizationLevel
 | 
			
		||||
 | 
			
		||||
A number indicating the level of optimization that should be done
 | 
			
		||||
to the pattern prior to parsing and using it for matches.
 | 
			
		||||
 | 
			
		||||
Globstar parts `**` are always converted to `*` when `noglobstar`
 | 
			
		||||
is set, and multiple adjascent `**` parts are converted into a
 | 
			
		||||
single `**` (ie, `a/**/**/b` will be treated as `a/**/b`, as this
 | 
			
		||||
is equivalent in all cases).
 | 
			
		||||
 | 
			
		||||
- `0` - Make no further changes. In this mode, `.` and `..` are
 | 
			
		||||
  maintained in the pattern, meaning that they must also appear
 | 
			
		||||
  in the same position in the test path string. Eg, a pattern
 | 
			
		||||
  like `a/*/../c` will match the string `a/b/../c` but not the
 | 
			
		||||
  string `a/c`.
 | 
			
		||||
- `1` - (default) Remove cases where a double-dot `..` follows a
 | 
			
		||||
  pattern portion that is not `**`, `.`, `..`, or empty `''`. For
 | 
			
		||||
  example, the pattern `./a/b/../*` is converted to `./a/*`, and
 | 
			
		||||
  so it will match the path string `./a/c`, but not the path
 | 
			
		||||
  string `./a/b/../c`. Dots and empty path portions in the
 | 
			
		||||
  pattern are preserved.
 | 
			
		||||
- `2` (or higher) - Much more aggressive optimizations, suitable
 | 
			
		||||
  for use with file-walking cases:
 | 
			
		||||
 | 
			
		||||
  - Remove cases where a double-dot `..` follows a pattern
 | 
			
		||||
    portion that is not `**`, `.`, or empty `''`. Remove empty
 | 
			
		||||
    and `.` portions of the pattern, where safe to do so (ie,
 | 
			
		||||
    anywhere other than the last position, the first position, or
 | 
			
		||||
    the second position in a pattern starting with `/`, as this
 | 
			
		||||
    may indicate a UNC path on Windows).
 | 
			
		||||
  - Convert patterns containing `<pre>/**/../<p>/<rest>` into the
 | 
			
		||||
    equivalent `<pre>/{..,**}/<p>/<rest>`, where `<p>` is a
 | 
			
		||||
    a pattern portion other than `.`, `..`, `**`, or empty
 | 
			
		||||
    `''`.
 | 
			
		||||
  - Dedupe patterns where a `**` portion is present in one and
 | 
			
		||||
    omitted in another, and it is not the final path portion, and
 | 
			
		||||
    they are otherwise equivalent. So `{a/**/b,a/b}` becomes
 | 
			
		||||
    `a/**/b`, because `**` matches against an empty path portion.
 | 
			
		||||
  - Dedupe patterns where a `*` portion is present in one, and a
 | 
			
		||||
    non-dot pattern other than `**`, `.`, `..`, or `''` is in the
 | 
			
		||||
    same position in the other. So `a/{*,x}/b` becomes `a/*/b`,
 | 
			
		||||
    because `*` can match against `x`.
 | 
			
		||||
 | 
			
		||||
  While these optimizations improve the performance of
 | 
			
		||||
  file-walking use cases such as [glob](http://npm.im/glob) (ie,
 | 
			
		||||
  the reason this module exists), there are cases where it will
 | 
			
		||||
  fail to match a literal string that would have been matched in
 | 
			
		||||
  optimization level 1 or 0.
 | 
			
		||||
 | 
			
		||||
  Specifically, while the `Minimatch.match()` method will
 | 
			
		||||
  optimize the file path string in the same ways, resulting in
 | 
			
		||||
  the same matches, it will fail when tested with the regular
 | 
			
		||||
  expression provided by `Minimatch.makeRe()`, unless the path
 | 
			
		||||
  string is first processed with
 | 
			
		||||
  `minimatch.levelTwoFileOptimize()` or similar.
 | 
			
		||||
 | 
			
		||||
### platform
 | 
			
		||||
 | 
			
		||||
When set to `win32`, this will trigger all windows-specific
 | 
			
		||||
behaviors (special handling for UNC paths, and treating `\` as
 | 
			
		||||
separators in file paths for comparison.)
 | 
			
		||||
 | 
			
		||||
Defaults to the value of `process.platform`.
 | 
			
		||||
 | 
			
		||||
## Comparisons to other fnmatch/glob implementations
 | 
			
		||||
 | 
			
		||||
While strict compliance with the existing standards is a
 | 
			
		||||
worthwhile goal, some discrepancies exist between minimatch and
 | 
			
		||||
other implementations. Some are intentional, and some are
 | 
			
		||||
unavoidable.
 | 
			
		||||
 | 
			
		||||
If the pattern starts with a `!` character, then it is negated. Set the
 | 
			
		||||
`nonegate` flag to suppress this behavior, and treat leading `!`
 | 
			
		||||
characters normally. This is perhaps relevant if you wish to start the
 | 
			
		||||
pattern with a negative extglob pattern like `!(a|B)`. Multiple `!`
 | 
			
		||||
characters at the start of a pattern will negate the pattern multiple
 | 
			
		||||
times.
 | 
			
		||||
 | 
			
		||||
If a pattern starts with `#`, then it is treated as a comment, and
 | 
			
		||||
will not match anything. Use `\#` to match a literal `#` at the
 | 
			
		||||
start of a line, or set the `nocomment` flag to suppress this behavior.
 | 
			
		||||
 | 
			
		||||
The double-star character `**` is supported by default, unless the
 | 
			
		||||
`noglobstar` flag is set. This is supported in the manner of bsdglob
 | 
			
		||||
and bash 4.1, where `**` only has special significance if it is the only
 | 
			
		||||
thing in a path part. That is, `a/**/b` will match `a/x/y/b`, but
 | 
			
		||||
`a/**b` will not.
 | 
			
		||||
 | 
			
		||||
If an escaped pattern has no matches, and the `nonull` flag is set,
 | 
			
		||||
then minimatch.match returns the pattern as-provided, rather than
 | 
			
		||||
interpreting the character escapes. For example,
 | 
			
		||||
`minimatch.match([], "\\*a\\?")` will return `"\\*a\\?"` rather than
 | 
			
		||||
`"*a?"`. This is akin to setting the `nullglob` option in bash, except
 | 
			
		||||
that it does not resolve escaped pattern characters.
 | 
			
		||||
 | 
			
		||||
If brace expansion is not disabled, then it is performed before any
 | 
			
		||||
other interpretation of the glob pattern. Thus, a pattern like
 | 
			
		||||
`+(a|{b),c)}`, which would not be valid in bash or zsh, is expanded
 | 
			
		||||
**first** into the set of `+(a|b)` and `+(a|c)`, and those patterns are
 | 
			
		||||
checked for validity. Since those two are valid, matching proceeds.
 | 
			
		||||
 | 
			
		||||
Negated extglob patterns are handled as closely as possible to
 | 
			
		||||
Bash semantics, but there are some cases with negative extglobs
 | 
			
		||||
which are exceedingly difficult to express in a JavaScript
 | 
			
		||||
regular expression. In particular the negated pattern
 | 
			
		||||
`<start>!(<pattern>*|)*` will in bash match anything that does
 | 
			
		||||
not start with `<start><pattern>`. However,
 | 
			
		||||
`<start>!(<pattern>*)*` _will_ match paths starting with
 | 
			
		||||
`<start><pattern>`, because the empty string can match against
 | 
			
		||||
the negated portion. In this library, `<start>!(<pattern>*|)*`
 | 
			
		||||
will _not_ match any pattern starting with `<start>`, due to a
 | 
			
		||||
difference in precisely which patterns are considered "greedy" in
 | 
			
		||||
Regular Expressions vs bash path expansion. This may be fixable,
 | 
			
		||||
but not without incurring some complexity and performance costs,
 | 
			
		||||
and the trade-off seems to not be worth pursuing.
 | 
			
		||||
 | 
			
		||||
Note that `fnmatch(3)` in libc is an extremely naive string comparison
 | 
			
		||||
matcher, which does not do anything special for slashes. This library is
 | 
			
		||||
designed to be used in glob searching and file walkers, and so it does do
 | 
			
		||||
special things with `/`. Thus, `foo*` will not match `foo/bar` in this
 | 
			
		||||
library, even though it would in `fnmatch(3)`.
 | 
			
		||||
							
								
								
									
										2
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
export declare const assertValidPattern: (pattern: any) => void;
 | 
			
		||||
//# sourceMappingURL=assert-valid-pattern.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"assert-valid-pattern.d.ts","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAUlD,CAAA"}
 | 
			
		||||
							
								
								
									
										14
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.assertValidPattern = void 0;
 | 
			
		||||
const MAX_PATTERN_LENGTH = 1024 * 64;
 | 
			
		||||
const assertValidPattern = (pattern) => {
 | 
			
		||||
    if (typeof pattern !== 'string') {
 | 
			
		||||
        throw new TypeError('invalid pattern');
 | 
			
		||||
    }
 | 
			
		||||
    if (pattern.length > MAX_PATTERN_LENGTH) {
 | 
			
		||||
        throw new TypeError('pattern is too long');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
exports.assertValidPattern = assertValidPattern;
 | 
			
		||||
//# sourceMappingURL=assert-valid-pattern.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/assert-valid-pattern.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"assert-valid-pattern.js","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":";;;AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAA;AAC7B,MAAM,kBAAkB,GAA2B,CACxD,OAAY,EACe,EAAE;IAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAA;KACvC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE;QACvC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAA;KAC3C;AACH,CAAC,CAAA;AAVY,QAAA,kBAAkB,sBAU9B","sourcesContent":["const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n  pattern: any\n): asserts pattern is string => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n"]}
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/minimatch/dist/cjs/ast.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								node_modules/minimatch/dist/cjs/ast.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
import { MinimatchOptions, MMRegExp } from './index.js';
 | 
			
		||||
export type ExtglobType = '!' | '?' | '+' | '*' | '@';
 | 
			
		||||
export declare class AST {
 | 
			
		||||
    #private;
 | 
			
		||||
    type: ExtglobType | null;
 | 
			
		||||
    constructor(type: ExtglobType | null, parent?: AST, options?: MinimatchOptions);
 | 
			
		||||
    get hasMagic(): boolean | undefined;
 | 
			
		||||
    toString(): string;
 | 
			
		||||
    push(...parts: (string | AST)[]): void;
 | 
			
		||||
    toJSON(): any[];
 | 
			
		||||
    isStart(): boolean;
 | 
			
		||||
    isEnd(): boolean;
 | 
			
		||||
    copyIn(part: AST | string): void;
 | 
			
		||||
    clone(parent: AST): AST;
 | 
			
		||||
    static fromGlob(pattern: string, options?: MinimatchOptions): AST;
 | 
			
		||||
    toMMPattern(): MMRegExp | string;
 | 
			
		||||
    toRegExpSource(allowDot?: boolean): [re: string, body: string, hasMagic: boolean, uflag: boolean];
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=ast.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/ast.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/ast.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAwCvD,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAkCrD,qBAAa,GAAG;;IACd,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;gBAiBtB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,GAAE,gBAAqB;IAahC,IAAI,QAAQ,IAAI,OAAO,GAAG,SAAS,CAUlC;IAGD,QAAQ,IAAI,MAAM;IA+ClB,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;IAY/B,MAAM;IAgBN,OAAO,IAAI,OAAO;IAgBlB,KAAK,IAAI,OAAO;IAYhB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAKzB,KAAK,CAAC,MAAM,EAAE,GAAG;IAsIjB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAQ/D,WAAW,IAAI,QAAQ,GAAG,MAAM;IAgGhC,cAAc,CACZ,QAAQ,CAAC,EAAE,OAAO,GACjB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;CAiMjE"}
 | 
			
		||||
							
								
								
									
										589
									
								
								node_modules/minimatch/dist/cjs/ast.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										589
									
								
								node_modules/minimatch/dist/cjs/ast.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,589 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
// parse a single path portion
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.AST = void 0;
 | 
			
		||||
const brace_expressions_js_1 = require("./brace-expressions.js");
 | 
			
		||||
const unescape_js_1 = require("./unescape.js");
 | 
			
		||||
const types = new Set(['!', '?', '+', '*', '@']);
 | 
			
		||||
const isExtglobType = (c) => types.has(c);
 | 
			
		||||
// Patterns that get prepended to bind to the start of either the
 | 
			
		||||
// entire string, or just a single path portion, to prevent dots
 | 
			
		||||
// and/or traversal patterns, when needed.
 | 
			
		||||
// Exts don't need the ^ or / bit, because the root binds that already.
 | 
			
		||||
const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))';
 | 
			
		||||
const startNoDot = '(?!\\.)';
 | 
			
		||||
// characters that indicate a start of pattern needs the "no dots" bit,
 | 
			
		||||
// because a dot *might* be matched. ( is not in the list, because in
 | 
			
		||||
// the case of a child extglob, it will handle the prevention itself.
 | 
			
		||||
const addPatternStart = new Set(['[', '.']);
 | 
			
		||||
// cases where traversal is A-OK, no dot prevention needed
 | 
			
		||||
const justDots = new Set(['..', '.']);
 | 
			
		||||
const reSpecials = new Set('().*{}+?[]^$\\!');
 | 
			
		||||
const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
 | 
			
		||||
// any single thing other than /
 | 
			
		||||
const qmark = '[^/]';
 | 
			
		||||
// * => any number of characters
 | 
			
		||||
const star = qmark + '*?';
 | 
			
		||||
// use + when we need to ensure that *something* matches, because the * is
 | 
			
		||||
// the only thing in the path portion.
 | 
			
		||||
const starNoEmpty = qmark + '+?';
 | 
			
		||||
// remove the \ chars that we added if we end up doing a nonmagic compare
 | 
			
		||||
// const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
 | 
			
		||||
class AST {
 | 
			
		||||
    type;
 | 
			
		||||
    #root;
 | 
			
		||||
    #hasMagic;
 | 
			
		||||
    #uflag = false;
 | 
			
		||||
    #parts = [];
 | 
			
		||||
    #parent;
 | 
			
		||||
    #parentIndex;
 | 
			
		||||
    #negs;
 | 
			
		||||
    #filledNegs = false;
 | 
			
		||||
    #options;
 | 
			
		||||
    #toString;
 | 
			
		||||
    // set to true if it's an extglob with no children
 | 
			
		||||
    // (which really means one child of '')
 | 
			
		||||
    #emptyExt = false;
 | 
			
		||||
    constructor(type, parent, options = {}) {
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        // extglobs are inherently magical
 | 
			
		||||
        if (type)
 | 
			
		||||
            this.#hasMagic = true;
 | 
			
		||||
        this.#parent = parent;
 | 
			
		||||
        this.#root = this.#parent ? this.#parent.#root : this;
 | 
			
		||||
        this.#options = this.#root === this ? options : this.#root.#options;
 | 
			
		||||
        this.#negs = this.#root === this ? [] : this.#root.#negs;
 | 
			
		||||
        if (type === '!' && !this.#root.#filledNegs)
 | 
			
		||||
            this.#negs.push(this);
 | 
			
		||||
        this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
 | 
			
		||||
    }
 | 
			
		||||
    get hasMagic() {
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        if (this.#hasMagic !== undefined)
 | 
			
		||||
            return this.#hasMagic;
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        for (const p of this.#parts) {
 | 
			
		||||
            if (typeof p === 'string')
 | 
			
		||||
                continue;
 | 
			
		||||
            if (p.type || p.hasMagic)
 | 
			
		||||
                return (this.#hasMagic = true);
 | 
			
		||||
        }
 | 
			
		||||
        // note: will be undefined until we generate the regexp src and find out
 | 
			
		||||
        return this.#hasMagic;
 | 
			
		||||
    }
 | 
			
		||||
    // reconstructs the pattern
 | 
			
		||||
    toString() {
 | 
			
		||||
        if (this.#toString !== undefined)
 | 
			
		||||
            return this.#toString;
 | 
			
		||||
        if (!this.type) {
 | 
			
		||||
            return (this.#toString = this.#parts.map(p => String(p)).join(''));
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return (this.#toString =
 | 
			
		||||
                this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    #fillNegs() {
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        if (this !== this.#root)
 | 
			
		||||
            throw new Error('should only call on root');
 | 
			
		||||
        if (this.#filledNegs)
 | 
			
		||||
            return this;
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        // call toString() once to fill this out
 | 
			
		||||
        this.toString();
 | 
			
		||||
        this.#filledNegs = true;
 | 
			
		||||
        let n;
 | 
			
		||||
        while ((n = this.#negs.pop())) {
 | 
			
		||||
            if (n.type !== '!')
 | 
			
		||||
                continue;
 | 
			
		||||
            // walk up the tree, appending everthing that comes AFTER parentIndex
 | 
			
		||||
            let p = n;
 | 
			
		||||
            let pp = p.#parent;
 | 
			
		||||
            while (pp) {
 | 
			
		||||
                for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
 | 
			
		||||
                    for (const part of n.#parts) {
 | 
			
		||||
                        /* c8 ignore start */
 | 
			
		||||
                        if (typeof part === 'string') {
 | 
			
		||||
                            throw new Error('string part in extglob AST??');
 | 
			
		||||
                        }
 | 
			
		||||
                        /* c8 ignore stop */
 | 
			
		||||
                        part.copyIn(pp.#parts[i]);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                p = pp;
 | 
			
		||||
                pp = p.#parent;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
    push(...parts) {
 | 
			
		||||
        for (const p of parts) {
 | 
			
		||||
            if (p === '')
 | 
			
		||||
                continue;
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
            if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
 | 
			
		||||
                throw new Error('invalid part: ' + p);
 | 
			
		||||
            }
 | 
			
		||||
            /* c8 ignore stop */
 | 
			
		||||
            this.#parts.push(p);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    toJSON() {
 | 
			
		||||
        const ret = this.type === null
 | 
			
		||||
            ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))
 | 
			
		||||
            : [this.type, ...this.#parts.map(p => p.toJSON())];
 | 
			
		||||
        if (this.isStart() && !this.type)
 | 
			
		||||
            ret.unshift([]);
 | 
			
		||||
        if (this.isEnd() &&
 | 
			
		||||
            (this === this.#root ||
 | 
			
		||||
                (this.#root.#filledNegs && this.#parent?.type === '!'))) {
 | 
			
		||||
            ret.push({});
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
    isStart() {
 | 
			
		||||
        if (this.#root === this)
 | 
			
		||||
            return true;
 | 
			
		||||
        // if (this.type) return !!this.#parent?.isStart()
 | 
			
		||||
        if (!this.#parent?.isStart())
 | 
			
		||||
            return false;
 | 
			
		||||
        if (this.#parentIndex === 0)
 | 
			
		||||
            return true;
 | 
			
		||||
        // if everything AHEAD of this is a negation, then it's still the "start"
 | 
			
		||||
        const p = this.#parent;
 | 
			
		||||
        for (let i = 0; i < this.#parentIndex; i++) {
 | 
			
		||||
            const pp = p.#parts[i];
 | 
			
		||||
            if (!(pp instanceof AST && pp.type === '!')) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    isEnd() {
 | 
			
		||||
        if (this.#root === this)
 | 
			
		||||
            return true;
 | 
			
		||||
        if (this.#parent?.type === '!')
 | 
			
		||||
            return true;
 | 
			
		||||
        if (!this.#parent?.isEnd())
 | 
			
		||||
            return false;
 | 
			
		||||
        if (!this.type)
 | 
			
		||||
            return this.#parent?.isEnd();
 | 
			
		||||
        // if not root, it'll always have a parent
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        const pl = this.#parent ? this.#parent.#parts.length : 0;
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        return this.#parentIndex === pl - 1;
 | 
			
		||||
    }
 | 
			
		||||
    copyIn(part) {
 | 
			
		||||
        if (typeof part === 'string')
 | 
			
		||||
            this.push(part);
 | 
			
		||||
        else
 | 
			
		||||
            this.push(part.clone(this));
 | 
			
		||||
    }
 | 
			
		||||
    clone(parent) {
 | 
			
		||||
        const c = new AST(this.type, parent);
 | 
			
		||||
        for (const p of this.#parts) {
 | 
			
		||||
            c.copyIn(p);
 | 
			
		||||
        }
 | 
			
		||||
        return c;
 | 
			
		||||
    }
 | 
			
		||||
    static #parseAST(str, ast, pos, opt) {
 | 
			
		||||
        let escaping = false;
 | 
			
		||||
        let inBrace = false;
 | 
			
		||||
        let braceStart = -1;
 | 
			
		||||
        let braceNeg = false;
 | 
			
		||||
        if (ast.type === null) {
 | 
			
		||||
            // outside of a extglob, append until we find a start
 | 
			
		||||
            let i = pos;
 | 
			
		||||
            let acc = '';
 | 
			
		||||
            while (i < str.length) {
 | 
			
		||||
                const c = str.charAt(i++);
 | 
			
		||||
                // still accumulate escapes at this point, but we do ignore
 | 
			
		||||
                // starts that are escaped
 | 
			
		||||
                if (escaping || c === '\\') {
 | 
			
		||||
                    escaping = !escaping;
 | 
			
		||||
                    acc += c;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (inBrace) {
 | 
			
		||||
                    if (i === braceStart + 1) {
 | 
			
		||||
                        if (c === '^' || c === '!') {
 | 
			
		||||
                            braceNeg = true;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
 | 
			
		||||
                        inBrace = false;
 | 
			
		||||
                    }
 | 
			
		||||
                    acc += c;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                else if (c === '[') {
 | 
			
		||||
                    inBrace = true;
 | 
			
		||||
                    braceStart = i;
 | 
			
		||||
                    braceNeg = false;
 | 
			
		||||
                    acc += c;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
 | 
			
		||||
                    ast.push(acc);
 | 
			
		||||
                    acc = '';
 | 
			
		||||
                    const ext = new AST(c, ast);
 | 
			
		||||
                    i = AST.#parseAST(str, ext, i, opt);
 | 
			
		||||
                    ast.push(ext);
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                acc += c;
 | 
			
		||||
            }
 | 
			
		||||
            ast.push(acc);
 | 
			
		||||
            return i;
 | 
			
		||||
        }
 | 
			
		||||
        // some kind of extglob, pos is at the (
 | 
			
		||||
        // find the next | or )
 | 
			
		||||
        let i = pos + 1;
 | 
			
		||||
        let part = new AST(null, ast);
 | 
			
		||||
        const parts = [];
 | 
			
		||||
        let acc = '';
 | 
			
		||||
        while (i < str.length) {
 | 
			
		||||
            const c = str.charAt(i++);
 | 
			
		||||
            // still accumulate escapes at this point, but we do ignore
 | 
			
		||||
            // starts that are escaped
 | 
			
		||||
            if (escaping || c === '\\') {
 | 
			
		||||
                escaping = !escaping;
 | 
			
		||||
                acc += c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (inBrace) {
 | 
			
		||||
                if (i === braceStart + 1) {
 | 
			
		||||
                    if (c === '^' || c === '!') {
 | 
			
		||||
                        braceNeg = true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
 | 
			
		||||
                    inBrace = false;
 | 
			
		||||
                }
 | 
			
		||||
                acc += c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            else if (c === '[') {
 | 
			
		||||
                inBrace = true;
 | 
			
		||||
                braceStart = i;
 | 
			
		||||
                braceNeg = false;
 | 
			
		||||
                acc += c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (isExtglobType(c) && str.charAt(i) === '(') {
 | 
			
		||||
                part.push(acc);
 | 
			
		||||
                acc = '';
 | 
			
		||||
                const ext = new AST(c, part);
 | 
			
		||||
                part.push(ext);
 | 
			
		||||
                i = AST.#parseAST(str, ext, i, opt);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '|') {
 | 
			
		||||
                part.push(acc);
 | 
			
		||||
                acc = '';
 | 
			
		||||
                parts.push(part);
 | 
			
		||||
                part = new AST(null, ast);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === ')') {
 | 
			
		||||
                if (acc === '' && ast.#parts.length === 0) {
 | 
			
		||||
                    ast.#emptyExt = true;
 | 
			
		||||
                }
 | 
			
		||||
                part.push(acc);
 | 
			
		||||
                acc = '';
 | 
			
		||||
                ast.push(...parts, part);
 | 
			
		||||
                return i;
 | 
			
		||||
            }
 | 
			
		||||
            acc += c;
 | 
			
		||||
        }
 | 
			
		||||
        // unfinished extglob
 | 
			
		||||
        // if we got here, it was a malformed extglob! not an extglob, but
 | 
			
		||||
        // maybe something else in there.
 | 
			
		||||
        ast.type = null;
 | 
			
		||||
        ast.#hasMagic = undefined;
 | 
			
		||||
        ast.#parts = [str.substring(pos - 1)];
 | 
			
		||||
        return i;
 | 
			
		||||
    }
 | 
			
		||||
    static fromGlob(pattern, options = {}) {
 | 
			
		||||
        const ast = new AST(null, undefined, options);
 | 
			
		||||
        AST.#parseAST(pattern, ast, 0, options);
 | 
			
		||||
        return ast;
 | 
			
		||||
    }
 | 
			
		||||
    // returns the regular expression if there's magic, or the unescaped
 | 
			
		||||
    // string if not.
 | 
			
		||||
    toMMPattern() {
 | 
			
		||||
        // should only be called on root
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        if (this !== this.#root)
 | 
			
		||||
            return this.#root.toMMPattern();
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        const glob = this.toString();
 | 
			
		||||
        const [re, body, hasMagic, uflag] = this.toRegExpSource();
 | 
			
		||||
        // if we're in nocase mode, and not nocaseMagicOnly, then we do
 | 
			
		||||
        // still need a regular expression if we have to case-insensitively
 | 
			
		||||
        // match capital/lowercase characters.
 | 
			
		||||
        const anyMagic = hasMagic ||
 | 
			
		||||
            this.#hasMagic ||
 | 
			
		||||
            (this.#options.nocase &&
 | 
			
		||||
                !this.#options.nocaseMagicOnly &&
 | 
			
		||||
                glob.toUpperCase() !== glob.toLowerCase());
 | 
			
		||||
        if (!anyMagic) {
 | 
			
		||||
            return body;
 | 
			
		||||
        }
 | 
			
		||||
        const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
 | 
			
		||||
        return Object.assign(new RegExp(`^${re}$`, flags), {
 | 
			
		||||
            _src: re,
 | 
			
		||||
            _glob: glob,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    // returns the string match, the regexp source, whether there's magic
 | 
			
		||||
    // in the regexp (so a regular expression is required) and whether or
 | 
			
		||||
    // not the uflag is needed for the regular expression (for posix classes)
 | 
			
		||||
    // TODO: instead of injecting the start/end at this point, just return
 | 
			
		||||
    // the BODY of the regexp, along with the start/end portions suitable
 | 
			
		||||
    // for binding the start/end in either a joined full-path makeRe context
 | 
			
		||||
    // (where we bind to (^|/), or a standalone matchPart context (where
 | 
			
		||||
    // we bind to ^, and not /).  Otherwise slashes get duped!
 | 
			
		||||
    //
 | 
			
		||||
    // In part-matching mode, the start is:
 | 
			
		||||
    // - if not isStart: nothing
 | 
			
		||||
    // - if traversal possible, but not allowed: ^(?!\.\.?$)
 | 
			
		||||
    // - if dots allowed or not possible: ^
 | 
			
		||||
    // - if dots possible and not allowed: ^(?!\.)
 | 
			
		||||
    // end is:
 | 
			
		||||
    // - if not isEnd(): nothing
 | 
			
		||||
    // - else: $
 | 
			
		||||
    //
 | 
			
		||||
    // In full-path matching mode, we put the slash at the START of the
 | 
			
		||||
    // pattern, so start is:
 | 
			
		||||
    // - if first pattern: same as part-matching mode
 | 
			
		||||
    // - if not isStart(): nothing
 | 
			
		||||
    // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
 | 
			
		||||
    // - if dots allowed or not possible: /
 | 
			
		||||
    // - if dots possible and not allowed: /(?!\.)
 | 
			
		||||
    // end is:
 | 
			
		||||
    // - if last pattern, same as part-matching mode
 | 
			
		||||
    // - else nothing
 | 
			
		||||
    //
 | 
			
		||||
    // Always put the (?:$|/) on negated tails, though, because that has to be
 | 
			
		||||
    // there to bind the end of the negated pattern portion, and it's easier to
 | 
			
		||||
    // just stick it in now rather than try to inject it later in the middle of
 | 
			
		||||
    // the pattern.
 | 
			
		||||
    //
 | 
			
		||||
    // We can just always return the same end, and leave it up to the caller
 | 
			
		||||
    // to know whether it's going to be used joined or in parts.
 | 
			
		||||
    // And, if the start is adjusted slightly, can do the same there:
 | 
			
		||||
    // - if not isStart: nothing
 | 
			
		||||
    // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
 | 
			
		||||
    // - if dots allowed or not possible: (?:/|^)
 | 
			
		||||
    // - if dots possible and not allowed: (?:/|^)(?!\.)
 | 
			
		||||
    //
 | 
			
		||||
    // But it's better to have a simpler binding without a conditional, for
 | 
			
		||||
    // performance, so probably better to return both start options.
 | 
			
		||||
    //
 | 
			
		||||
    // Then the caller just ignores the end if it's not the first pattern,
 | 
			
		||||
    // and the start always gets applied.
 | 
			
		||||
    //
 | 
			
		||||
    // But that's always going to be $ if it's the ending pattern, or nothing,
 | 
			
		||||
    // so the caller can just attach $ at the end of the pattern when building.
 | 
			
		||||
    //
 | 
			
		||||
    // So the todo is:
 | 
			
		||||
    // - better detect what kind of start is needed
 | 
			
		||||
    // - return both flavors of starting pattern
 | 
			
		||||
    // - attach $ at the end of the pattern when creating the actual RegExp
 | 
			
		||||
    //
 | 
			
		||||
    // Ah, but wait, no, that all only applies to the root when the first pattern
 | 
			
		||||
    // is not an extglob. If the first pattern IS an extglob, then we need all
 | 
			
		||||
    // that dot prevention biz to live in the extglob portions, because eg
 | 
			
		||||
    // +(*|.x*) can match .xy but not .yx.
 | 
			
		||||
    //
 | 
			
		||||
    // So, return the two flavors if it's #root and the first child is not an
 | 
			
		||||
    // AST, otherwise leave it to the child AST to handle it, and there,
 | 
			
		||||
    // use the (?:^|/) style of start binding.
 | 
			
		||||
    //
 | 
			
		||||
    // Even simplified further:
 | 
			
		||||
    // - Since the start for a join is eg /(?!\.) and the start for a part
 | 
			
		||||
    // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
 | 
			
		||||
    // or start or whatever) and prepend ^ or / at the Regexp construction.
 | 
			
		||||
    toRegExpSource(allowDot) {
 | 
			
		||||
        const dot = allowDot ?? !!this.#options.dot;
 | 
			
		||||
        if (this.#root === this)
 | 
			
		||||
            this.#fillNegs();
 | 
			
		||||
        if (!this.type) {
 | 
			
		||||
            const noEmpty = this.isStart() && this.isEnd();
 | 
			
		||||
            const src = this.#parts
 | 
			
		||||
                .map(p => {
 | 
			
		||||
                const [re, _, hasMagic, uflag] = typeof p === 'string'
 | 
			
		||||
                    ? AST.#parseGlob(p, this.#hasMagic, noEmpty)
 | 
			
		||||
                    : p.toRegExpSource(allowDot);
 | 
			
		||||
                this.#hasMagic = this.#hasMagic || hasMagic;
 | 
			
		||||
                this.#uflag = this.#uflag || uflag;
 | 
			
		||||
                return re;
 | 
			
		||||
            })
 | 
			
		||||
                .join('');
 | 
			
		||||
            let start = '';
 | 
			
		||||
            if (this.isStart()) {
 | 
			
		||||
                if (typeof this.#parts[0] === 'string') {
 | 
			
		||||
                    // this is the string that will match the start of the pattern,
 | 
			
		||||
                    // so we need to protect against dots and such.
 | 
			
		||||
                    // '.' and '..' cannot match unless the pattern is that exactly,
 | 
			
		||||
                    // even if it starts with . or dot:true is set.
 | 
			
		||||
                    const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
 | 
			
		||||
                    if (!dotTravAllowed) {
 | 
			
		||||
                        const aps = addPatternStart;
 | 
			
		||||
                        // check if we have a possibility of matching . or ..,
 | 
			
		||||
                        // and prevent that.
 | 
			
		||||
                        const needNoTrav = 
 | 
			
		||||
                        // dots are allowed, and the pattern starts with [ or .
 | 
			
		||||
                        (dot && aps.has(src.charAt(0))) ||
 | 
			
		||||
                            // the pattern starts with \., and then [ or .
 | 
			
		||||
                            (src.startsWith('\\.') && aps.has(src.charAt(2))) ||
 | 
			
		||||
                            // the pattern starts with \.\., and then [ or .
 | 
			
		||||
                            (src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
 | 
			
		||||
                        // no need to prevent dots if it can't match a dot, or if a
 | 
			
		||||
                        // sub-pattern will be preventing it anyway.
 | 
			
		||||
                        const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
 | 
			
		||||
                        start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // append the "end of path portion" pattern to negation tails
 | 
			
		||||
            let end = '';
 | 
			
		||||
            if (this.isEnd() &&
 | 
			
		||||
                this.#root.#filledNegs &&
 | 
			
		||||
                this.#parent?.type === '!') {
 | 
			
		||||
                end = '(?:$|\\/)';
 | 
			
		||||
            }
 | 
			
		||||
            const final = start + src + end;
 | 
			
		||||
            return [
 | 
			
		||||
                final,
 | 
			
		||||
                (0, unescape_js_1.unescape)(src),
 | 
			
		||||
                (this.#hasMagic = !!this.#hasMagic),
 | 
			
		||||
                this.#uflag,
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
        // We need to calculate the body *twice* if it's a repeat pattern
 | 
			
		||||
        // at the start, once in nodot mode, then again in dot mode, so a
 | 
			
		||||
        // pattern like *(?) can match 'x.y'
 | 
			
		||||
        const repeated = this.type === '*' || this.type === '+';
 | 
			
		||||
        // some kind of extglob
 | 
			
		||||
        const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
 | 
			
		||||
        let body = this.#partsToRegExp(dot);
 | 
			
		||||
        if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
 | 
			
		||||
            // invalid extglob, has to at least be *something* present, if it's
 | 
			
		||||
            // the entire path portion.
 | 
			
		||||
            const s = this.toString();
 | 
			
		||||
            this.#parts = [s];
 | 
			
		||||
            this.type = null;
 | 
			
		||||
            this.#hasMagic = undefined;
 | 
			
		||||
            return [s, (0, unescape_js_1.unescape)(this.toString()), false, false];
 | 
			
		||||
        }
 | 
			
		||||
        // XXX abstract out this map method
 | 
			
		||||
        let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot
 | 
			
		||||
            ? ''
 | 
			
		||||
            : this.#partsToRegExp(true);
 | 
			
		||||
        if (bodyDotAllowed === body) {
 | 
			
		||||
            bodyDotAllowed = '';
 | 
			
		||||
        }
 | 
			
		||||
        if (bodyDotAllowed) {
 | 
			
		||||
            body = `(?:${body})(?:${bodyDotAllowed})*?`;
 | 
			
		||||
        }
 | 
			
		||||
        // an empty !() is exactly equivalent to a starNoEmpty
 | 
			
		||||
        let final = '';
 | 
			
		||||
        if (this.type === '!' && this.#emptyExt) {
 | 
			
		||||
            final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            const close = this.type === '!'
 | 
			
		||||
                ? // !() must match something,but !(x) can match ''
 | 
			
		||||
                    '))' +
 | 
			
		||||
                        (this.isStart() && !dot && !allowDot ? startNoDot : '') +
 | 
			
		||||
                        star +
 | 
			
		||||
                        ')'
 | 
			
		||||
                : this.type === '@'
 | 
			
		||||
                    ? ')'
 | 
			
		||||
                    : this.type === '?'
 | 
			
		||||
                        ? ')?'
 | 
			
		||||
                        : this.type === '+' && bodyDotAllowed
 | 
			
		||||
                            ? ')'
 | 
			
		||||
                            : this.type === '*' && bodyDotAllowed
 | 
			
		||||
                                ? `)?`
 | 
			
		||||
                                : `)${this.type}`;
 | 
			
		||||
            final = start + body + close;
 | 
			
		||||
        }
 | 
			
		||||
        return [
 | 
			
		||||
            final,
 | 
			
		||||
            (0, unescape_js_1.unescape)(body),
 | 
			
		||||
            (this.#hasMagic = !!this.#hasMagic),
 | 
			
		||||
            this.#uflag,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
    #partsToRegExp(dot) {
 | 
			
		||||
        return this.#parts
 | 
			
		||||
            .map(p => {
 | 
			
		||||
            // extglob ASTs should only contain parent ASTs
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
            if (typeof p === 'string') {
 | 
			
		||||
                throw new Error('string type in extglob ast??');
 | 
			
		||||
            }
 | 
			
		||||
            /* c8 ignore stop */
 | 
			
		||||
            // can ignore hasMagic, because extglobs are already always magic
 | 
			
		||||
            const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
 | 
			
		||||
            this.#uflag = this.#uflag || uflag;
 | 
			
		||||
            return re;
 | 
			
		||||
        })
 | 
			
		||||
            .filter(p => !(this.isStart() && this.isEnd()) || !!p)
 | 
			
		||||
            .join('|');
 | 
			
		||||
    }
 | 
			
		||||
    static #parseGlob(glob, hasMagic, noEmpty = false) {
 | 
			
		||||
        let escaping = false;
 | 
			
		||||
        let re = '';
 | 
			
		||||
        let uflag = false;
 | 
			
		||||
        for (let i = 0; i < glob.length; i++) {
 | 
			
		||||
            const c = glob.charAt(i);
 | 
			
		||||
            if (escaping) {
 | 
			
		||||
                escaping = false;
 | 
			
		||||
                re += (reSpecials.has(c) ? '\\' : '') + c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '\\') {
 | 
			
		||||
                if (i === glob.length - 1) {
 | 
			
		||||
                    re += '\\\\';
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    escaping = true;
 | 
			
		||||
                }
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '[') {
 | 
			
		||||
                const [src, needUflag, consumed, magic] = (0, brace_expressions_js_1.parseClass)(glob, i);
 | 
			
		||||
                if (consumed) {
 | 
			
		||||
                    re += src;
 | 
			
		||||
                    uflag = uflag || needUflag;
 | 
			
		||||
                    i += consumed - 1;
 | 
			
		||||
                    hasMagic = hasMagic || magic;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '*') {
 | 
			
		||||
                if (noEmpty && glob === '*')
 | 
			
		||||
                    re += starNoEmpty;
 | 
			
		||||
                else
 | 
			
		||||
                    re += star;
 | 
			
		||||
                hasMagic = true;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '?') {
 | 
			
		||||
                re += qmark;
 | 
			
		||||
                hasMagic = true;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            re += regExpEscape(c);
 | 
			
		||||
        }
 | 
			
		||||
        return [re, (0, unescape_js_1.unescape)(glob), !!hasMagic, uflag];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
exports.AST = AST;
 | 
			
		||||
//# sourceMappingURL=ast.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/ast.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/ast.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										8
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
export type ParseClassResult = [
 | 
			
		||||
    src: string,
 | 
			
		||||
    uFlag: boolean,
 | 
			
		||||
    consumed: number,
 | 
			
		||||
    hasMagic: boolean
 | 
			
		||||
];
 | 
			
		||||
export declare const parseClass: (glob: string, position: number) => ParseClassResult;
 | 
			
		||||
//# sourceMappingURL=brace-expressions.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"brace-expressions.d.ts","sourceRoot":"","sources":["../../src/brace-expressions.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,OAAO;CAClB,CAAA;AAQD,eAAO,MAAM,UAAU,SACf,MAAM,YACF,MAAM,qBA8HjB,CAAA"}
 | 
			
		||||
							
								
								
									
										152
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										152
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,152 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
// translate the various posix character classes into unicode properties
 | 
			
		||||
// this works across all unicode locales
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.parseClass = void 0;
 | 
			
		||||
// { <posix class>: [<translation>, /u flag required, negated]
 | 
			
		||||
const posixClasses = {
 | 
			
		||||
    '[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true],
 | 
			
		||||
    '[:alpha:]': ['\\p{L}\\p{Nl}', true],
 | 
			
		||||
    '[:ascii:]': ['\\x' + '00-\\x' + '7f', false],
 | 
			
		||||
    '[:blank:]': ['\\p{Zs}\\t', true],
 | 
			
		||||
    '[:cntrl:]': ['\\p{Cc}', true],
 | 
			
		||||
    '[:digit:]': ['\\p{Nd}', true],
 | 
			
		||||
    '[:graph:]': ['\\p{Z}\\p{C}', true, true],
 | 
			
		||||
    '[:lower:]': ['\\p{Ll}', true],
 | 
			
		||||
    '[:print:]': ['\\p{C}', true],
 | 
			
		||||
    '[:punct:]': ['\\p{P}', true],
 | 
			
		||||
    '[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true],
 | 
			
		||||
    '[:upper:]': ['\\p{Lu}', true],
 | 
			
		||||
    '[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true],
 | 
			
		||||
    '[:xdigit:]': ['A-Fa-f0-9', false],
 | 
			
		||||
};
 | 
			
		||||
// only need to escape a few things inside of brace expressions
 | 
			
		||||
// escapes: [ \ ] -
 | 
			
		||||
const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&');
 | 
			
		||||
// escape all regexp magic characters
 | 
			
		||||
const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
 | 
			
		||||
// everything has already been escaped, we just have to join
 | 
			
		||||
const rangesToString = (ranges) => ranges.join('');
 | 
			
		||||
// takes a glob string at a posix brace expression, and returns
 | 
			
		||||
// an equivalent regular expression source, and boolean indicating
 | 
			
		||||
// whether the /u flag needs to be applied, and the number of chars
 | 
			
		||||
// consumed to parse the character class.
 | 
			
		||||
// This also removes out of order ranges, and returns ($.) if the
 | 
			
		||||
// entire class just no good.
 | 
			
		||||
const parseClass = (glob, position) => {
 | 
			
		||||
    const pos = position;
 | 
			
		||||
    /* c8 ignore start */
 | 
			
		||||
    if (glob.charAt(pos) !== '[') {
 | 
			
		||||
        throw new Error('not in a brace expression');
 | 
			
		||||
    }
 | 
			
		||||
    /* c8 ignore stop */
 | 
			
		||||
    const ranges = [];
 | 
			
		||||
    const negs = [];
 | 
			
		||||
    let i = pos + 1;
 | 
			
		||||
    let sawStart = false;
 | 
			
		||||
    let uflag = false;
 | 
			
		||||
    let escaping = false;
 | 
			
		||||
    let negate = false;
 | 
			
		||||
    let endPos = pos;
 | 
			
		||||
    let rangeStart = '';
 | 
			
		||||
    WHILE: while (i < glob.length) {
 | 
			
		||||
        const c = glob.charAt(i);
 | 
			
		||||
        if ((c === '!' || c === '^') && i === pos + 1) {
 | 
			
		||||
            negate = true;
 | 
			
		||||
            i++;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (c === ']' && sawStart && !escaping) {
 | 
			
		||||
            endPos = i + 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        sawStart = true;
 | 
			
		||||
        if (c === '\\') {
 | 
			
		||||
            if (!escaping) {
 | 
			
		||||
                escaping = true;
 | 
			
		||||
                i++;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            // escaped \ char, fall through and treat like normal char
 | 
			
		||||
        }
 | 
			
		||||
        if (c === '[' && !escaping) {
 | 
			
		||||
            // either a posix class, a collation equivalent, or just a [
 | 
			
		||||
            for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
 | 
			
		||||
                if (glob.startsWith(cls, i)) {
 | 
			
		||||
                    // invalid, [a-[] is fine, but not [a-[:alpha]]
 | 
			
		||||
                    if (rangeStart) {
 | 
			
		||||
                        return ['$.', false, glob.length - pos, true];
 | 
			
		||||
                    }
 | 
			
		||||
                    i += cls.length;
 | 
			
		||||
                    if (neg)
 | 
			
		||||
                        negs.push(unip);
 | 
			
		||||
                    else
 | 
			
		||||
                        ranges.push(unip);
 | 
			
		||||
                    uflag = uflag || u;
 | 
			
		||||
                    continue WHILE;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // now it's just a normal character, effectively
 | 
			
		||||
        escaping = false;
 | 
			
		||||
        if (rangeStart) {
 | 
			
		||||
            // throw this range away if it's not valid, but others
 | 
			
		||||
            // can still match.
 | 
			
		||||
            if (c > rangeStart) {
 | 
			
		||||
                ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));
 | 
			
		||||
            }
 | 
			
		||||
            else if (c === rangeStart) {
 | 
			
		||||
                ranges.push(braceEscape(c));
 | 
			
		||||
            }
 | 
			
		||||
            rangeStart = '';
 | 
			
		||||
            i++;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        // now might be the start of a range.
 | 
			
		||||
        // can be either c-d or c-] or c<more...>] or c] at this point
 | 
			
		||||
        if (glob.startsWith('-]', i + 1)) {
 | 
			
		||||
            ranges.push(braceEscape(c + '-'));
 | 
			
		||||
            i += 2;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (glob.startsWith('-', i + 1)) {
 | 
			
		||||
            rangeStart = c;
 | 
			
		||||
            i += 2;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        // not the start of a range, just a single character
 | 
			
		||||
        ranges.push(braceEscape(c));
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
    if (endPos < i) {
 | 
			
		||||
        // didn't see the end of the class, not a valid class,
 | 
			
		||||
        // but might still be valid as a literal match.
 | 
			
		||||
        return ['', false, 0, false];
 | 
			
		||||
    }
 | 
			
		||||
    // if we got no ranges and no negates, then we have a range that
 | 
			
		||||
    // cannot possibly match anything, and that poisons the whole glob
 | 
			
		||||
    if (!ranges.length && !negs.length) {
 | 
			
		||||
        return ['$.', false, glob.length - pos, true];
 | 
			
		||||
    }
 | 
			
		||||
    // if we got one positive range, and it's a single character, then that's
 | 
			
		||||
    // not actually a magic pattern, it's just that one literal character.
 | 
			
		||||
    // we should not treat that as "magic", we should just return the literal
 | 
			
		||||
    // character. [_] is a perfectly valid way to escape glob magic chars.
 | 
			
		||||
    if (negs.length === 0 &&
 | 
			
		||||
        ranges.length === 1 &&
 | 
			
		||||
        /^\\?.$/.test(ranges[0]) &&
 | 
			
		||||
        !negate) {
 | 
			
		||||
        const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
 | 
			
		||||
        return [regexpEscape(r), false, endPos - pos, false];
 | 
			
		||||
    }
 | 
			
		||||
    const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';
 | 
			
		||||
    const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';
 | 
			
		||||
    const comb = ranges.length && negs.length
 | 
			
		||||
        ? '(' + sranges + '|' + snegs + ')'
 | 
			
		||||
        : ranges.length
 | 
			
		||||
            ? sranges
 | 
			
		||||
            : snegs;
 | 
			
		||||
    return [comb, uflag, endPos - pos, true];
 | 
			
		||||
};
 | 
			
		||||
exports.parseClass = parseClass;
 | 
			
		||||
//# sourceMappingURL=brace-expressions.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/brace-expressions.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										12
									
								
								node_modules/minimatch/dist/cjs/escape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								node_modules/minimatch/dist/cjs/escape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
import { MinimatchOptions } from './index.js';
 | 
			
		||||
/**
 | 
			
		||||
 * Escape all magic characters in a glob pattern.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}
 | 
			
		||||
 * option is used, then characters are escaped by wrapping in `[]`, because
 | 
			
		||||
 * a magic character wrapped in a character class can only be satisfied by
 | 
			
		||||
 * that exact character.  In this mode, `\` is _not_ escaped, because it is
 | 
			
		||||
 * not interpreted as a magic character, but instead as a path separator.
 | 
			
		||||
 */
 | 
			
		||||
export declare const escape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, 'windowsPathsNoEscape'>) => string;
 | 
			
		||||
//# sourceMappingURL=escape.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/escape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/escape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,MACd,MAAM,8BAGN,KAAK,gBAAgB,EAAE,sBAAsB,CAAC,WAQlD,CAAA"}
 | 
			
		||||
							
								
								
									
										22
									
								
								node_modules/minimatch/dist/cjs/escape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								node_modules/minimatch/dist/cjs/escape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.escape = void 0;
 | 
			
		||||
/**
 | 
			
		||||
 * Escape all magic characters in a glob pattern.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}
 | 
			
		||||
 * option is used, then characters are escaped by wrapping in `[]`, because
 | 
			
		||||
 * a magic character wrapped in a character class can only be satisfied by
 | 
			
		||||
 * that exact character.  In this mode, `\` is _not_ escaped, because it is
 | 
			
		||||
 * not interpreted as a magic character, but instead as a path separator.
 | 
			
		||||
 */
 | 
			
		||||
const escape = (s, { windowsPathsNoEscape = false, } = {}) => {
 | 
			
		||||
    // don't need to escape +@! because we escape the parens
 | 
			
		||||
    // that make those magic, and escaping ! as [!] isn't valid,
 | 
			
		||||
    // because [!]] is a valid glob class meaning not ']'.
 | 
			
		||||
    return windowsPathsNoEscape
 | 
			
		||||
        ? s.replace(/[?*()[\]]/g, '[$&]')
 | 
			
		||||
        : s.replace(/[?*()[\]\\]/g, '\\$&');
 | 
			
		||||
};
 | 
			
		||||
exports.escape = escape;
 | 
			
		||||
//# sourceMappingURL=escape.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/escape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/escape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":";;;AACA;;;;;;;;GAQG;AACI,MAAM,MAAM,GAAG,CACpB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,wDAAwD;IACxD,4DAA4D;IAC5D,sDAAsD;IACtD,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC,CAAA;AAZY,QAAA,MAAM,UAYlB","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character.  In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  // don't need to escape +@! because we escape the parens\n  // that make those magic, and escaping ! as [!] isn't valid,\n  // because [!]] is a valid glob class meaning not ']'.\n  return windowsPathsNoEscape\n    ? s.replace(/[?*()[\\]]/g, '[$&]')\n    : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n"]}
 | 
			
		||||
							
								
								
									
										94
									
								
								node_modules/minimatch/dist/cjs/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								node_modules/minimatch/dist/cjs/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
import { AST } from './ast.js';
 | 
			
		||||
type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd';
 | 
			
		||||
export interface MinimatchOptions {
 | 
			
		||||
    nobrace?: boolean;
 | 
			
		||||
    nocomment?: boolean;
 | 
			
		||||
    nonegate?: boolean;
 | 
			
		||||
    debug?: boolean;
 | 
			
		||||
    noglobstar?: boolean;
 | 
			
		||||
    noext?: boolean;
 | 
			
		||||
    nonull?: boolean;
 | 
			
		||||
    windowsPathsNoEscape?: boolean;
 | 
			
		||||
    allowWindowsEscape?: boolean;
 | 
			
		||||
    partial?: boolean;
 | 
			
		||||
    dot?: boolean;
 | 
			
		||||
    nocase?: boolean;
 | 
			
		||||
    nocaseMagicOnly?: boolean;
 | 
			
		||||
    magicalBraces?: boolean;
 | 
			
		||||
    matchBase?: boolean;
 | 
			
		||||
    flipNegate?: boolean;
 | 
			
		||||
    preserveMultipleSlashes?: boolean;
 | 
			
		||||
    optimizationLevel?: number;
 | 
			
		||||
    platform?: Platform;
 | 
			
		||||
    windowsNoMagicRoot?: boolean;
 | 
			
		||||
}
 | 
			
		||||
export declare const minimatch: {
 | 
			
		||||
    (p: string, pattern: string, options?: MinimatchOptions): boolean;
 | 
			
		||||
    sep: Sep;
 | 
			
		||||
    GLOBSTAR: typeof GLOBSTAR;
 | 
			
		||||
    filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean;
 | 
			
		||||
    defaults: (def: MinimatchOptions) => typeof minimatch;
 | 
			
		||||
    braceExpand: (pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
    makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp;
 | 
			
		||||
    match: (list: string[], pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
    AST: typeof AST;
 | 
			
		||||
    Minimatch: typeof Minimatch;
 | 
			
		||||
    escape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, "windowsPathsNoEscape">) => string;
 | 
			
		||||
    unescape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, "windowsPathsNoEscape">) => string;
 | 
			
		||||
};
 | 
			
		||||
type Sep = '\\' | '/';
 | 
			
		||||
export declare const sep: Sep;
 | 
			
		||||
export declare const GLOBSTAR: unique symbol;
 | 
			
		||||
export declare const filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean;
 | 
			
		||||
export declare const defaults: (def: MinimatchOptions) => typeof minimatch;
 | 
			
		||||
export declare const braceExpand: (pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
export declare const makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp;
 | 
			
		||||
export declare const match: (list: string[], pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
export type MMRegExp = RegExp & {
 | 
			
		||||
    _src?: string;
 | 
			
		||||
    _glob?: string;
 | 
			
		||||
};
 | 
			
		||||
export type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR;
 | 
			
		||||
export type ParseReturn = ParseReturnFiltered | false;
 | 
			
		||||
export declare class Minimatch {
 | 
			
		||||
    options: MinimatchOptions;
 | 
			
		||||
    set: ParseReturnFiltered[][];
 | 
			
		||||
    pattern: string;
 | 
			
		||||
    windowsPathsNoEscape: boolean;
 | 
			
		||||
    nonegate: boolean;
 | 
			
		||||
    negate: boolean;
 | 
			
		||||
    comment: boolean;
 | 
			
		||||
    empty: boolean;
 | 
			
		||||
    preserveMultipleSlashes: boolean;
 | 
			
		||||
    partial: boolean;
 | 
			
		||||
    globSet: string[];
 | 
			
		||||
    globParts: string[][];
 | 
			
		||||
    nocase: boolean;
 | 
			
		||||
    isWindows: boolean;
 | 
			
		||||
    platform: Platform;
 | 
			
		||||
    windowsNoMagicRoot: boolean;
 | 
			
		||||
    regexp: false | null | MMRegExp;
 | 
			
		||||
    constructor(pattern: string, options?: MinimatchOptions);
 | 
			
		||||
    hasMagic(): boolean;
 | 
			
		||||
    debug(..._: any[]): void;
 | 
			
		||||
    make(): void;
 | 
			
		||||
    preprocess(globParts: string[][]): string[][];
 | 
			
		||||
    adjascentGlobstarOptimize(globParts: string[][]): string[][];
 | 
			
		||||
    levelOneOptimize(globParts: string[][]): string[][];
 | 
			
		||||
    levelTwoFileOptimize(parts: string | string[]): string[];
 | 
			
		||||
    firstPhasePreProcess(globParts: string[][]): string[][];
 | 
			
		||||
    secondPhasePreProcess(globParts: string[][]): string[][];
 | 
			
		||||
    partsMatch(a: string[], b: string[], emptyGSMatch?: boolean): false | string[];
 | 
			
		||||
    parseNegate(): void;
 | 
			
		||||
    matchOne(file: string[], pattern: ParseReturn[], partial?: boolean): boolean;
 | 
			
		||||
    braceExpand(): string[];
 | 
			
		||||
    parse(pattern: string): ParseReturn;
 | 
			
		||||
    makeRe(): false | MMRegExp;
 | 
			
		||||
    slashSplit(p: string): string[];
 | 
			
		||||
    match(f: string, partial?: boolean): boolean;
 | 
			
		||||
    static defaults(def: MinimatchOptions): typeof Minimatch;
 | 
			
		||||
}
 | 
			
		||||
export { AST } from './ast.js';
 | 
			
		||||
export { escape } from './escape.js';
 | 
			
		||||
export { unescape } from './unescape.js';
 | 
			
		||||
//# sourceMappingURL=index.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/index.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/index.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAe,MAAM,UAAU,CAAA;AAI3C,KAAK,QAAQ,GACT,KAAK,GACL,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,OAAO,GACP,SAAS,GACT,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,CAAA;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,eAAO,MAAM,SAAS;QACjB,MAAM,WACA,MAAM,YACN,gBAAgB;;;sBAuGf,MAAM,YAAW,gBAAgB,SACvC,MAAM;oBAOkB,gBAAgB,KAAG,gBAAgB;2BA6EtD,MAAM,YACN,gBAAgB;sBA2BK,MAAM,YAAW,gBAAgB;kBAKzD,MAAM,EAAE,WACL,MAAM,YACN,gBAAgB;;;;;CArN1B,CAAA;AA+DD,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG,CAAA;AAOrB,eAAO,MAAM,GAAG,KAAgE,CAAA;AAGhF,eAAO,MAAM,QAAQ,eAAwB,CAAA;AAmB7C,eAAO,MAAM,MAAM,YACP,MAAM,YAAW,gBAAgB,SACvC,MAAM,YACsB,CAAA;AAMlC,eAAO,MAAM,QAAQ,QAAS,gBAAgB,KAAG,gBA+DhD,CAAA;AAaD,eAAO,MAAM,WAAW,YACb,MAAM,YACN,gBAAgB,aAY1B,CAAA;AAeD,eAAO,MAAM,MAAM,YAAa,MAAM,YAAW,gBAAgB,qBACvB,CAAA;AAG1C,eAAO,MAAM,KAAK,SACV,MAAM,EAAE,WACL,MAAM,YACN,gBAAgB,aAQ1B,CAAA;AAQD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,QAAQ,CAAA;AACrE,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,KAAK,CAAA;AAErD,qBAAa,SAAS;IACpB,OAAO,EAAE,gBAAgB,CAAA;IACzB,GAAG,EAAE,mBAAmB,EAAE,EAAE,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IAEf,oBAAoB,EAAE,OAAO,CAAA;IAC7B,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,uBAAuB,EAAE,OAAO,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAA;IACrB,MAAM,EAAE,OAAO,CAAA;IAEf,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAE3B,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAA;gBACnB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAkC3D,QAAQ,IAAI,OAAO;IAYnB,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE;IAEjB,IAAI;IA0FJ,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IA6BhC,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IAiB/C,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IAoBtC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA6D7C,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IA0F1C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE;IAgBxD,UAAU,CACR,CAAC,EAAE,MAAM,EAAE,EACX,CAAC,EAAE,MAAM,EAAE,EACX,YAAY,GAAE,OAAe,GAC5B,KAAK,GAAG,MAAM,EAAE;IA+CnB,WAAW;IAqBX,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE,OAAe;IAiNzE,WAAW;IAIX,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IA6CnC,MAAM;IAsFN,UAAU,CAAC,CAAC,EAAE,MAAM;IAepB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,UAAe;IAiEvC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB;CAGtC;AAED,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA"}
 | 
			
		||||
							
								
								
									
										1011
									
								
								node_modules/minimatch/dist/cjs/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1011
									
								
								node_modules/minimatch/dist/cjs/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										3
									
								
								node_modules/minimatch/dist/cjs/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								node_modules/minimatch/dist/cjs/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "commonjs"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/minimatch/dist/cjs/unescape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node_modules/minimatch/dist/cjs/unescape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import { MinimatchOptions } from './index.js';
 | 
			
		||||
/**
 | 
			
		||||
 * Un-escape a string that has been escaped with {@link escape}.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape} option is used, then square-brace
 | 
			
		||||
 * escapes are removed, but not backslash escapes.  For example, it will turn
 | 
			
		||||
 * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
 | 
			
		||||
 * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
 | 
			
		||||
 *
 | 
			
		||||
 * When `windowsPathsNoEscape` is not set, then both brace escapes and
 | 
			
		||||
 * backslash escapes are removed.
 | 
			
		||||
 *
 | 
			
		||||
 * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
 | 
			
		||||
 * or unescaped.
 | 
			
		||||
 */
 | 
			
		||||
export declare const unescape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, 'windowsPathsNoEscape'>) => string;
 | 
			
		||||
//# sourceMappingURL=unescape.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/unescape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/unescape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"unescape.d.ts","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ,MAChB,MAAM,8BAGN,KAAK,gBAAgB,EAAE,sBAAsB,CAAC,WAKlD,CAAA"}
 | 
			
		||||
							
								
								
									
										24
									
								
								node_modules/minimatch/dist/cjs/unescape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								node_modules/minimatch/dist/cjs/unescape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
"use strict";
 | 
			
		||||
Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
exports.unescape = void 0;
 | 
			
		||||
/**
 | 
			
		||||
 * Un-escape a string that has been escaped with {@link escape}.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape} option is used, then square-brace
 | 
			
		||||
 * escapes are removed, but not backslash escapes.  For example, it will turn
 | 
			
		||||
 * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
 | 
			
		||||
 * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
 | 
			
		||||
 *
 | 
			
		||||
 * When `windowsPathsNoEscape` is not set, then both brace escapes and
 | 
			
		||||
 * backslash escapes are removed.
 | 
			
		||||
 *
 | 
			
		||||
 * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
 | 
			
		||||
 * or unescaped.
 | 
			
		||||
 */
 | 
			
		||||
const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {
 | 
			
		||||
    return windowsPathsNoEscape
 | 
			
		||||
        ? s.replace(/\[([^\/\\])\]/g, '$1')
 | 
			
		||||
        : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, '$1$2').replace(/\\([^\/])/g, '$1');
 | 
			
		||||
};
 | 
			
		||||
exports.unescape = unescape;
 | 
			
		||||
//# sourceMappingURL=unescape.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/cjs/unescape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/cjs/unescape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"unescape.js","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":";;;AACA;;;;;;;;;;;;;GAaG;AACI,MAAM,QAAQ,GAAG,CACtB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAChF,CAAC,CAAA;AATY,QAAA,QAAQ,YASpB","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes.  For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  return windowsPathsNoEscape\n    ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n    : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n"]}
 | 
			
		||||
							
								
								
									
										2
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
export declare const assertValidPattern: (pattern: any) => void;
 | 
			
		||||
//# sourceMappingURL=assert-valid-pattern.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"assert-valid-pattern.d.ts","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,kBAAkB,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAUlD,CAAA"}
 | 
			
		||||
							
								
								
									
										10
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,10 @@
 | 
			
		||||
const MAX_PATTERN_LENGTH = 1024 * 64;
 | 
			
		||||
export const assertValidPattern = (pattern) => {
 | 
			
		||||
    if (typeof pattern !== 'string') {
 | 
			
		||||
        throw new TypeError('invalid pattern');
 | 
			
		||||
    }
 | 
			
		||||
    if (pattern.length > MAX_PATTERN_LENGTH) {
 | 
			
		||||
        throw new TypeError('pattern is too long');
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
//# sourceMappingURL=assert-valid-pattern.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/assert-valid-pattern.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"assert-valid-pattern.js","sourceRoot":"","sources":["../../src/assert-valid-pattern.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAA;AACpC,MAAM,CAAC,MAAM,kBAAkB,GAA2B,CACxD,OAAY,EACe,EAAE;IAC7B,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;QAC/B,MAAM,IAAI,SAAS,CAAC,iBAAiB,CAAC,CAAA;KACvC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,kBAAkB,EAAE;QACvC,MAAM,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAA;KAC3C;AACH,CAAC,CAAA","sourcesContent":["const MAX_PATTERN_LENGTH = 1024 * 64\nexport const assertValidPattern: (pattern: any) => void = (\n  pattern: any\n): asserts pattern is string => {\n  if (typeof pattern !== 'string') {\n    throw new TypeError('invalid pattern')\n  }\n\n  if (pattern.length > MAX_PATTERN_LENGTH) {\n    throw new TypeError('pattern is too long')\n  }\n}\n"]}
 | 
			
		||||
							
								
								
									
										19
									
								
								node_modules/minimatch/dist/mjs/ast.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								node_modules/minimatch/dist/mjs/ast.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
import { MinimatchOptions, MMRegExp } from './index.js';
 | 
			
		||||
export type ExtglobType = '!' | '?' | '+' | '*' | '@';
 | 
			
		||||
export declare class AST {
 | 
			
		||||
    #private;
 | 
			
		||||
    type: ExtglobType | null;
 | 
			
		||||
    constructor(type: ExtglobType | null, parent?: AST, options?: MinimatchOptions);
 | 
			
		||||
    get hasMagic(): boolean | undefined;
 | 
			
		||||
    toString(): string;
 | 
			
		||||
    push(...parts: (string | AST)[]): void;
 | 
			
		||||
    toJSON(): any[];
 | 
			
		||||
    isStart(): boolean;
 | 
			
		||||
    isEnd(): boolean;
 | 
			
		||||
    copyIn(part: AST | string): void;
 | 
			
		||||
    clone(parent: AST): AST;
 | 
			
		||||
    static fromGlob(pattern: string, options?: MinimatchOptions): AST;
 | 
			
		||||
    toMMPattern(): MMRegExp | string;
 | 
			
		||||
    toRegExpSource(allowDot?: boolean): [re: string, body: string, hasMagic: boolean, uflag: boolean];
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=ast.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/ast.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/ast.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../src/ast.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAwCvD,MAAM,MAAM,WAAW,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAA;AAkCrD,qBAAa,GAAG;;IACd,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;gBAiBtB,IAAI,EAAE,WAAW,GAAG,IAAI,EACxB,MAAM,CAAC,EAAE,GAAG,EACZ,OAAO,GAAE,gBAAqB;IAahC,IAAI,QAAQ,IAAI,OAAO,GAAG,SAAS,CAUlC;IAGD,QAAQ,IAAI,MAAM;IA+ClB,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE;IAY/B,MAAM;IAgBN,OAAO,IAAI,OAAO;IAgBlB,KAAK,IAAI,OAAO;IAYhB,MAAM,CAAC,IAAI,EAAE,GAAG,GAAG,MAAM;IAKzB,KAAK,CAAC,MAAM,EAAE,GAAG;IAsIjB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAQ/D,WAAW,IAAI,QAAQ,GAAG,MAAM;IAgGhC,cAAc,CACZ,QAAQ,CAAC,EAAE,OAAO,GACjB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC;CAiMjE"}
 | 
			
		||||
							
								
								
									
										585
									
								
								node_modules/minimatch/dist/mjs/ast.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										585
									
								
								node_modules/minimatch/dist/mjs/ast.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,585 @@
 | 
			
		||||
// parse a single path portion
 | 
			
		||||
import { parseClass } from './brace-expressions.js';
 | 
			
		||||
import { unescape } from './unescape.js';
 | 
			
		||||
const types = new Set(['!', '?', '+', '*', '@']);
 | 
			
		||||
const isExtglobType = (c) => types.has(c);
 | 
			
		||||
// Patterns that get prepended to bind to the start of either the
 | 
			
		||||
// entire string, or just a single path portion, to prevent dots
 | 
			
		||||
// and/or traversal patterns, when needed.
 | 
			
		||||
// Exts don't need the ^ or / bit, because the root binds that already.
 | 
			
		||||
const startNoTraversal = '(?!(?:^|/)\\.\\.?(?:$|/))';
 | 
			
		||||
const startNoDot = '(?!\\.)';
 | 
			
		||||
// characters that indicate a start of pattern needs the "no dots" bit,
 | 
			
		||||
// because a dot *might* be matched. ( is not in the list, because in
 | 
			
		||||
// the case of a child extglob, it will handle the prevention itself.
 | 
			
		||||
const addPatternStart = new Set(['[', '.']);
 | 
			
		||||
// cases where traversal is A-OK, no dot prevention needed
 | 
			
		||||
const justDots = new Set(['..', '.']);
 | 
			
		||||
const reSpecials = new Set('().*{}+?[]^$\\!');
 | 
			
		||||
const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
 | 
			
		||||
// any single thing other than /
 | 
			
		||||
const qmark = '[^/]';
 | 
			
		||||
// * => any number of characters
 | 
			
		||||
const star = qmark + '*?';
 | 
			
		||||
// use + when we need to ensure that *something* matches, because the * is
 | 
			
		||||
// the only thing in the path portion.
 | 
			
		||||
const starNoEmpty = qmark + '+?';
 | 
			
		||||
// remove the \ chars that we added if we end up doing a nonmagic compare
 | 
			
		||||
// const deslash = (s: string) => s.replace(/\\(.)/g, '$1')
 | 
			
		||||
export class AST {
 | 
			
		||||
    type;
 | 
			
		||||
    #root;
 | 
			
		||||
    #hasMagic;
 | 
			
		||||
    #uflag = false;
 | 
			
		||||
    #parts = [];
 | 
			
		||||
    #parent;
 | 
			
		||||
    #parentIndex;
 | 
			
		||||
    #negs;
 | 
			
		||||
    #filledNegs = false;
 | 
			
		||||
    #options;
 | 
			
		||||
    #toString;
 | 
			
		||||
    // set to true if it's an extglob with no children
 | 
			
		||||
    // (which really means one child of '')
 | 
			
		||||
    #emptyExt = false;
 | 
			
		||||
    constructor(type, parent, options = {}) {
 | 
			
		||||
        this.type = type;
 | 
			
		||||
        // extglobs are inherently magical
 | 
			
		||||
        if (type)
 | 
			
		||||
            this.#hasMagic = true;
 | 
			
		||||
        this.#parent = parent;
 | 
			
		||||
        this.#root = this.#parent ? this.#parent.#root : this;
 | 
			
		||||
        this.#options = this.#root === this ? options : this.#root.#options;
 | 
			
		||||
        this.#negs = this.#root === this ? [] : this.#root.#negs;
 | 
			
		||||
        if (type === '!' && !this.#root.#filledNegs)
 | 
			
		||||
            this.#negs.push(this);
 | 
			
		||||
        this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;
 | 
			
		||||
    }
 | 
			
		||||
    get hasMagic() {
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        if (this.#hasMagic !== undefined)
 | 
			
		||||
            return this.#hasMagic;
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        for (const p of this.#parts) {
 | 
			
		||||
            if (typeof p === 'string')
 | 
			
		||||
                continue;
 | 
			
		||||
            if (p.type || p.hasMagic)
 | 
			
		||||
                return (this.#hasMagic = true);
 | 
			
		||||
        }
 | 
			
		||||
        // note: will be undefined until we generate the regexp src and find out
 | 
			
		||||
        return this.#hasMagic;
 | 
			
		||||
    }
 | 
			
		||||
    // reconstructs the pattern
 | 
			
		||||
    toString() {
 | 
			
		||||
        if (this.#toString !== undefined)
 | 
			
		||||
            return this.#toString;
 | 
			
		||||
        if (!this.type) {
 | 
			
		||||
            return (this.#toString = this.#parts.map(p => String(p)).join(''));
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return (this.#toString =
 | 
			
		||||
                this.type + '(' + this.#parts.map(p => String(p)).join('|') + ')');
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    #fillNegs() {
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        if (this !== this.#root)
 | 
			
		||||
            throw new Error('should only call on root');
 | 
			
		||||
        if (this.#filledNegs)
 | 
			
		||||
            return this;
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        // call toString() once to fill this out
 | 
			
		||||
        this.toString();
 | 
			
		||||
        this.#filledNegs = true;
 | 
			
		||||
        let n;
 | 
			
		||||
        while ((n = this.#negs.pop())) {
 | 
			
		||||
            if (n.type !== '!')
 | 
			
		||||
                continue;
 | 
			
		||||
            // walk up the tree, appending everthing that comes AFTER parentIndex
 | 
			
		||||
            let p = n;
 | 
			
		||||
            let pp = p.#parent;
 | 
			
		||||
            while (pp) {
 | 
			
		||||
                for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {
 | 
			
		||||
                    for (const part of n.#parts) {
 | 
			
		||||
                        /* c8 ignore start */
 | 
			
		||||
                        if (typeof part === 'string') {
 | 
			
		||||
                            throw new Error('string part in extglob AST??');
 | 
			
		||||
                        }
 | 
			
		||||
                        /* c8 ignore stop */
 | 
			
		||||
                        part.copyIn(pp.#parts[i]);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                p = pp;
 | 
			
		||||
                pp = p.#parent;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
    push(...parts) {
 | 
			
		||||
        for (const p of parts) {
 | 
			
		||||
            if (p === '')
 | 
			
		||||
                continue;
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
            if (typeof p !== 'string' && !(p instanceof AST && p.#parent === this)) {
 | 
			
		||||
                throw new Error('invalid part: ' + p);
 | 
			
		||||
            }
 | 
			
		||||
            /* c8 ignore stop */
 | 
			
		||||
            this.#parts.push(p);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    toJSON() {
 | 
			
		||||
        const ret = this.type === null
 | 
			
		||||
            ? this.#parts.slice().map(p => (typeof p === 'string' ? p : p.toJSON()))
 | 
			
		||||
            : [this.type, ...this.#parts.map(p => p.toJSON())];
 | 
			
		||||
        if (this.isStart() && !this.type)
 | 
			
		||||
            ret.unshift([]);
 | 
			
		||||
        if (this.isEnd() &&
 | 
			
		||||
            (this === this.#root ||
 | 
			
		||||
                (this.#root.#filledNegs && this.#parent?.type === '!'))) {
 | 
			
		||||
            ret.push({});
 | 
			
		||||
        }
 | 
			
		||||
        return ret;
 | 
			
		||||
    }
 | 
			
		||||
    isStart() {
 | 
			
		||||
        if (this.#root === this)
 | 
			
		||||
            return true;
 | 
			
		||||
        // if (this.type) return !!this.#parent?.isStart()
 | 
			
		||||
        if (!this.#parent?.isStart())
 | 
			
		||||
            return false;
 | 
			
		||||
        if (this.#parentIndex === 0)
 | 
			
		||||
            return true;
 | 
			
		||||
        // if everything AHEAD of this is a negation, then it's still the "start"
 | 
			
		||||
        const p = this.#parent;
 | 
			
		||||
        for (let i = 0; i < this.#parentIndex; i++) {
 | 
			
		||||
            const pp = p.#parts[i];
 | 
			
		||||
            if (!(pp instanceof AST && pp.type === '!')) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    isEnd() {
 | 
			
		||||
        if (this.#root === this)
 | 
			
		||||
            return true;
 | 
			
		||||
        if (this.#parent?.type === '!')
 | 
			
		||||
            return true;
 | 
			
		||||
        if (!this.#parent?.isEnd())
 | 
			
		||||
            return false;
 | 
			
		||||
        if (!this.type)
 | 
			
		||||
            return this.#parent?.isEnd();
 | 
			
		||||
        // if not root, it'll always have a parent
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        const pl = this.#parent ? this.#parent.#parts.length : 0;
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        return this.#parentIndex === pl - 1;
 | 
			
		||||
    }
 | 
			
		||||
    copyIn(part) {
 | 
			
		||||
        if (typeof part === 'string')
 | 
			
		||||
            this.push(part);
 | 
			
		||||
        else
 | 
			
		||||
            this.push(part.clone(this));
 | 
			
		||||
    }
 | 
			
		||||
    clone(parent) {
 | 
			
		||||
        const c = new AST(this.type, parent);
 | 
			
		||||
        for (const p of this.#parts) {
 | 
			
		||||
            c.copyIn(p);
 | 
			
		||||
        }
 | 
			
		||||
        return c;
 | 
			
		||||
    }
 | 
			
		||||
    static #parseAST(str, ast, pos, opt) {
 | 
			
		||||
        let escaping = false;
 | 
			
		||||
        let inBrace = false;
 | 
			
		||||
        let braceStart = -1;
 | 
			
		||||
        let braceNeg = false;
 | 
			
		||||
        if (ast.type === null) {
 | 
			
		||||
            // outside of a extglob, append until we find a start
 | 
			
		||||
            let i = pos;
 | 
			
		||||
            let acc = '';
 | 
			
		||||
            while (i < str.length) {
 | 
			
		||||
                const c = str.charAt(i++);
 | 
			
		||||
                // still accumulate escapes at this point, but we do ignore
 | 
			
		||||
                // starts that are escaped
 | 
			
		||||
                if (escaping || c === '\\') {
 | 
			
		||||
                    escaping = !escaping;
 | 
			
		||||
                    acc += c;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (inBrace) {
 | 
			
		||||
                    if (i === braceStart + 1) {
 | 
			
		||||
                        if (c === '^' || c === '!') {
 | 
			
		||||
                            braceNeg = true;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
 | 
			
		||||
                        inBrace = false;
 | 
			
		||||
                    }
 | 
			
		||||
                    acc += c;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                else if (c === '[') {
 | 
			
		||||
                    inBrace = true;
 | 
			
		||||
                    braceStart = i;
 | 
			
		||||
                    braceNeg = false;
 | 
			
		||||
                    acc += c;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                if (!opt.noext && isExtglobType(c) && str.charAt(i) === '(') {
 | 
			
		||||
                    ast.push(acc);
 | 
			
		||||
                    acc = '';
 | 
			
		||||
                    const ext = new AST(c, ast);
 | 
			
		||||
                    i = AST.#parseAST(str, ext, i, opt);
 | 
			
		||||
                    ast.push(ext);
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
                acc += c;
 | 
			
		||||
            }
 | 
			
		||||
            ast.push(acc);
 | 
			
		||||
            return i;
 | 
			
		||||
        }
 | 
			
		||||
        // some kind of extglob, pos is at the (
 | 
			
		||||
        // find the next | or )
 | 
			
		||||
        let i = pos + 1;
 | 
			
		||||
        let part = new AST(null, ast);
 | 
			
		||||
        const parts = [];
 | 
			
		||||
        let acc = '';
 | 
			
		||||
        while (i < str.length) {
 | 
			
		||||
            const c = str.charAt(i++);
 | 
			
		||||
            // still accumulate escapes at this point, but we do ignore
 | 
			
		||||
            // starts that are escaped
 | 
			
		||||
            if (escaping || c === '\\') {
 | 
			
		||||
                escaping = !escaping;
 | 
			
		||||
                acc += c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (inBrace) {
 | 
			
		||||
                if (i === braceStart + 1) {
 | 
			
		||||
                    if (c === '^' || c === '!') {
 | 
			
		||||
                        braceNeg = true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {
 | 
			
		||||
                    inBrace = false;
 | 
			
		||||
                }
 | 
			
		||||
                acc += c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            else if (c === '[') {
 | 
			
		||||
                inBrace = true;
 | 
			
		||||
                braceStart = i;
 | 
			
		||||
                braceNeg = false;
 | 
			
		||||
                acc += c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (isExtglobType(c) && str.charAt(i) === '(') {
 | 
			
		||||
                part.push(acc);
 | 
			
		||||
                acc = '';
 | 
			
		||||
                const ext = new AST(c, part);
 | 
			
		||||
                part.push(ext);
 | 
			
		||||
                i = AST.#parseAST(str, ext, i, opt);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '|') {
 | 
			
		||||
                part.push(acc);
 | 
			
		||||
                acc = '';
 | 
			
		||||
                parts.push(part);
 | 
			
		||||
                part = new AST(null, ast);
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === ')') {
 | 
			
		||||
                if (acc === '' && ast.#parts.length === 0) {
 | 
			
		||||
                    ast.#emptyExt = true;
 | 
			
		||||
                }
 | 
			
		||||
                part.push(acc);
 | 
			
		||||
                acc = '';
 | 
			
		||||
                ast.push(...parts, part);
 | 
			
		||||
                return i;
 | 
			
		||||
            }
 | 
			
		||||
            acc += c;
 | 
			
		||||
        }
 | 
			
		||||
        // unfinished extglob
 | 
			
		||||
        // if we got here, it was a malformed extglob! not an extglob, but
 | 
			
		||||
        // maybe something else in there.
 | 
			
		||||
        ast.type = null;
 | 
			
		||||
        ast.#hasMagic = undefined;
 | 
			
		||||
        ast.#parts = [str.substring(pos - 1)];
 | 
			
		||||
        return i;
 | 
			
		||||
    }
 | 
			
		||||
    static fromGlob(pattern, options = {}) {
 | 
			
		||||
        const ast = new AST(null, undefined, options);
 | 
			
		||||
        AST.#parseAST(pattern, ast, 0, options);
 | 
			
		||||
        return ast;
 | 
			
		||||
    }
 | 
			
		||||
    // returns the regular expression if there's magic, or the unescaped
 | 
			
		||||
    // string if not.
 | 
			
		||||
    toMMPattern() {
 | 
			
		||||
        // should only be called on root
 | 
			
		||||
        /* c8 ignore start */
 | 
			
		||||
        if (this !== this.#root)
 | 
			
		||||
            return this.#root.toMMPattern();
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        const glob = this.toString();
 | 
			
		||||
        const [re, body, hasMagic, uflag] = this.toRegExpSource();
 | 
			
		||||
        // if we're in nocase mode, and not nocaseMagicOnly, then we do
 | 
			
		||||
        // still need a regular expression if we have to case-insensitively
 | 
			
		||||
        // match capital/lowercase characters.
 | 
			
		||||
        const anyMagic = hasMagic ||
 | 
			
		||||
            this.#hasMagic ||
 | 
			
		||||
            (this.#options.nocase &&
 | 
			
		||||
                !this.#options.nocaseMagicOnly &&
 | 
			
		||||
                glob.toUpperCase() !== glob.toLowerCase());
 | 
			
		||||
        if (!anyMagic) {
 | 
			
		||||
            return body;
 | 
			
		||||
        }
 | 
			
		||||
        const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');
 | 
			
		||||
        return Object.assign(new RegExp(`^${re}$`, flags), {
 | 
			
		||||
            _src: re,
 | 
			
		||||
            _glob: glob,
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    // returns the string match, the regexp source, whether there's magic
 | 
			
		||||
    // in the regexp (so a regular expression is required) and whether or
 | 
			
		||||
    // not the uflag is needed for the regular expression (for posix classes)
 | 
			
		||||
    // TODO: instead of injecting the start/end at this point, just return
 | 
			
		||||
    // the BODY of the regexp, along with the start/end portions suitable
 | 
			
		||||
    // for binding the start/end in either a joined full-path makeRe context
 | 
			
		||||
    // (where we bind to (^|/), or a standalone matchPart context (where
 | 
			
		||||
    // we bind to ^, and not /).  Otherwise slashes get duped!
 | 
			
		||||
    //
 | 
			
		||||
    // In part-matching mode, the start is:
 | 
			
		||||
    // - if not isStart: nothing
 | 
			
		||||
    // - if traversal possible, but not allowed: ^(?!\.\.?$)
 | 
			
		||||
    // - if dots allowed or not possible: ^
 | 
			
		||||
    // - if dots possible and not allowed: ^(?!\.)
 | 
			
		||||
    // end is:
 | 
			
		||||
    // - if not isEnd(): nothing
 | 
			
		||||
    // - else: $
 | 
			
		||||
    //
 | 
			
		||||
    // In full-path matching mode, we put the slash at the START of the
 | 
			
		||||
    // pattern, so start is:
 | 
			
		||||
    // - if first pattern: same as part-matching mode
 | 
			
		||||
    // - if not isStart(): nothing
 | 
			
		||||
    // - if traversal possible, but not allowed: /(?!\.\.?(?:$|/))
 | 
			
		||||
    // - if dots allowed or not possible: /
 | 
			
		||||
    // - if dots possible and not allowed: /(?!\.)
 | 
			
		||||
    // end is:
 | 
			
		||||
    // - if last pattern, same as part-matching mode
 | 
			
		||||
    // - else nothing
 | 
			
		||||
    //
 | 
			
		||||
    // Always put the (?:$|/) on negated tails, though, because that has to be
 | 
			
		||||
    // there to bind the end of the negated pattern portion, and it's easier to
 | 
			
		||||
    // just stick it in now rather than try to inject it later in the middle of
 | 
			
		||||
    // the pattern.
 | 
			
		||||
    //
 | 
			
		||||
    // We can just always return the same end, and leave it up to the caller
 | 
			
		||||
    // to know whether it's going to be used joined or in parts.
 | 
			
		||||
    // And, if the start is adjusted slightly, can do the same there:
 | 
			
		||||
    // - if not isStart: nothing
 | 
			
		||||
    // - if traversal possible, but not allowed: (?:/|^)(?!\.\.?$)
 | 
			
		||||
    // - if dots allowed or not possible: (?:/|^)
 | 
			
		||||
    // - if dots possible and not allowed: (?:/|^)(?!\.)
 | 
			
		||||
    //
 | 
			
		||||
    // But it's better to have a simpler binding without a conditional, for
 | 
			
		||||
    // performance, so probably better to return both start options.
 | 
			
		||||
    //
 | 
			
		||||
    // Then the caller just ignores the end if it's not the first pattern,
 | 
			
		||||
    // and the start always gets applied.
 | 
			
		||||
    //
 | 
			
		||||
    // But that's always going to be $ if it's the ending pattern, or nothing,
 | 
			
		||||
    // so the caller can just attach $ at the end of the pattern when building.
 | 
			
		||||
    //
 | 
			
		||||
    // So the todo is:
 | 
			
		||||
    // - better detect what kind of start is needed
 | 
			
		||||
    // - return both flavors of starting pattern
 | 
			
		||||
    // - attach $ at the end of the pattern when creating the actual RegExp
 | 
			
		||||
    //
 | 
			
		||||
    // Ah, but wait, no, that all only applies to the root when the first pattern
 | 
			
		||||
    // is not an extglob. If the first pattern IS an extglob, then we need all
 | 
			
		||||
    // that dot prevention biz to live in the extglob portions, because eg
 | 
			
		||||
    // +(*|.x*) can match .xy but not .yx.
 | 
			
		||||
    //
 | 
			
		||||
    // So, return the two flavors if it's #root and the first child is not an
 | 
			
		||||
    // AST, otherwise leave it to the child AST to handle it, and there,
 | 
			
		||||
    // use the (?:^|/) style of start binding.
 | 
			
		||||
    //
 | 
			
		||||
    // Even simplified further:
 | 
			
		||||
    // - Since the start for a join is eg /(?!\.) and the start for a part
 | 
			
		||||
    // is ^(?!\.), we can just prepend (?!\.) to the pattern (either root
 | 
			
		||||
    // or start or whatever) and prepend ^ or / at the Regexp construction.
 | 
			
		||||
    toRegExpSource(allowDot) {
 | 
			
		||||
        const dot = allowDot ?? !!this.#options.dot;
 | 
			
		||||
        if (this.#root === this)
 | 
			
		||||
            this.#fillNegs();
 | 
			
		||||
        if (!this.type) {
 | 
			
		||||
            const noEmpty = this.isStart() && this.isEnd();
 | 
			
		||||
            const src = this.#parts
 | 
			
		||||
                .map(p => {
 | 
			
		||||
                const [re, _, hasMagic, uflag] = typeof p === 'string'
 | 
			
		||||
                    ? AST.#parseGlob(p, this.#hasMagic, noEmpty)
 | 
			
		||||
                    : p.toRegExpSource(allowDot);
 | 
			
		||||
                this.#hasMagic = this.#hasMagic || hasMagic;
 | 
			
		||||
                this.#uflag = this.#uflag || uflag;
 | 
			
		||||
                return re;
 | 
			
		||||
            })
 | 
			
		||||
                .join('');
 | 
			
		||||
            let start = '';
 | 
			
		||||
            if (this.isStart()) {
 | 
			
		||||
                if (typeof this.#parts[0] === 'string') {
 | 
			
		||||
                    // this is the string that will match the start of the pattern,
 | 
			
		||||
                    // so we need to protect against dots and such.
 | 
			
		||||
                    // '.' and '..' cannot match unless the pattern is that exactly,
 | 
			
		||||
                    // even if it starts with . or dot:true is set.
 | 
			
		||||
                    const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);
 | 
			
		||||
                    if (!dotTravAllowed) {
 | 
			
		||||
                        const aps = addPatternStart;
 | 
			
		||||
                        // check if we have a possibility of matching . or ..,
 | 
			
		||||
                        // and prevent that.
 | 
			
		||||
                        const needNoTrav = 
 | 
			
		||||
                        // dots are allowed, and the pattern starts with [ or .
 | 
			
		||||
                        (dot && aps.has(src.charAt(0))) ||
 | 
			
		||||
                            // the pattern starts with \., and then [ or .
 | 
			
		||||
                            (src.startsWith('\\.') && aps.has(src.charAt(2))) ||
 | 
			
		||||
                            // the pattern starts with \.\., and then [ or .
 | 
			
		||||
                            (src.startsWith('\\.\\.') && aps.has(src.charAt(4)));
 | 
			
		||||
                        // no need to prevent dots if it can't match a dot, or if a
 | 
			
		||||
                        // sub-pattern will be preventing it anyway.
 | 
			
		||||
                        const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));
 | 
			
		||||
                        start = needNoTrav ? startNoTraversal : needNoDot ? startNoDot : '';
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // append the "end of path portion" pattern to negation tails
 | 
			
		||||
            let end = '';
 | 
			
		||||
            if (this.isEnd() &&
 | 
			
		||||
                this.#root.#filledNegs &&
 | 
			
		||||
                this.#parent?.type === '!') {
 | 
			
		||||
                end = '(?:$|\\/)';
 | 
			
		||||
            }
 | 
			
		||||
            const final = start + src + end;
 | 
			
		||||
            return [
 | 
			
		||||
                final,
 | 
			
		||||
                unescape(src),
 | 
			
		||||
                (this.#hasMagic = !!this.#hasMagic),
 | 
			
		||||
                this.#uflag,
 | 
			
		||||
            ];
 | 
			
		||||
        }
 | 
			
		||||
        // We need to calculate the body *twice* if it's a repeat pattern
 | 
			
		||||
        // at the start, once in nodot mode, then again in dot mode, so a
 | 
			
		||||
        // pattern like *(?) can match 'x.y'
 | 
			
		||||
        const repeated = this.type === '*' || this.type === '+';
 | 
			
		||||
        // some kind of extglob
 | 
			
		||||
        const start = this.type === '!' ? '(?:(?!(?:' : '(?:';
 | 
			
		||||
        let body = this.#partsToRegExp(dot);
 | 
			
		||||
        if (this.isStart() && this.isEnd() && !body && this.type !== '!') {
 | 
			
		||||
            // invalid extglob, has to at least be *something* present, if it's
 | 
			
		||||
            // the entire path portion.
 | 
			
		||||
            const s = this.toString();
 | 
			
		||||
            this.#parts = [s];
 | 
			
		||||
            this.type = null;
 | 
			
		||||
            this.#hasMagic = undefined;
 | 
			
		||||
            return [s, unescape(this.toString()), false, false];
 | 
			
		||||
        }
 | 
			
		||||
        // XXX abstract out this map method
 | 
			
		||||
        let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot
 | 
			
		||||
            ? ''
 | 
			
		||||
            : this.#partsToRegExp(true);
 | 
			
		||||
        if (bodyDotAllowed === body) {
 | 
			
		||||
            bodyDotAllowed = '';
 | 
			
		||||
        }
 | 
			
		||||
        if (bodyDotAllowed) {
 | 
			
		||||
            body = `(?:${body})(?:${bodyDotAllowed})*?`;
 | 
			
		||||
        }
 | 
			
		||||
        // an empty !() is exactly equivalent to a starNoEmpty
 | 
			
		||||
        let final = '';
 | 
			
		||||
        if (this.type === '!' && this.#emptyExt) {
 | 
			
		||||
            final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            const close = this.type === '!'
 | 
			
		||||
                ? // !() must match something,but !(x) can match ''
 | 
			
		||||
                    '))' +
 | 
			
		||||
                        (this.isStart() && !dot && !allowDot ? startNoDot : '') +
 | 
			
		||||
                        star +
 | 
			
		||||
                        ')'
 | 
			
		||||
                : this.type === '@'
 | 
			
		||||
                    ? ')'
 | 
			
		||||
                    : this.type === '?'
 | 
			
		||||
                        ? ')?'
 | 
			
		||||
                        : this.type === '+' && bodyDotAllowed
 | 
			
		||||
                            ? ')'
 | 
			
		||||
                            : this.type === '*' && bodyDotAllowed
 | 
			
		||||
                                ? `)?`
 | 
			
		||||
                                : `)${this.type}`;
 | 
			
		||||
            final = start + body + close;
 | 
			
		||||
        }
 | 
			
		||||
        return [
 | 
			
		||||
            final,
 | 
			
		||||
            unescape(body),
 | 
			
		||||
            (this.#hasMagic = !!this.#hasMagic),
 | 
			
		||||
            this.#uflag,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
    #partsToRegExp(dot) {
 | 
			
		||||
        return this.#parts
 | 
			
		||||
            .map(p => {
 | 
			
		||||
            // extglob ASTs should only contain parent ASTs
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
            if (typeof p === 'string') {
 | 
			
		||||
                throw new Error('string type in extglob ast??');
 | 
			
		||||
            }
 | 
			
		||||
            /* c8 ignore stop */
 | 
			
		||||
            // can ignore hasMagic, because extglobs are already always magic
 | 
			
		||||
            const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);
 | 
			
		||||
            this.#uflag = this.#uflag || uflag;
 | 
			
		||||
            return re;
 | 
			
		||||
        })
 | 
			
		||||
            .filter(p => !(this.isStart() && this.isEnd()) || !!p)
 | 
			
		||||
            .join('|');
 | 
			
		||||
    }
 | 
			
		||||
    static #parseGlob(glob, hasMagic, noEmpty = false) {
 | 
			
		||||
        let escaping = false;
 | 
			
		||||
        let re = '';
 | 
			
		||||
        let uflag = false;
 | 
			
		||||
        for (let i = 0; i < glob.length; i++) {
 | 
			
		||||
            const c = glob.charAt(i);
 | 
			
		||||
            if (escaping) {
 | 
			
		||||
                escaping = false;
 | 
			
		||||
                re += (reSpecials.has(c) ? '\\' : '') + c;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '\\') {
 | 
			
		||||
                if (i === glob.length - 1) {
 | 
			
		||||
                    re += '\\\\';
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    escaping = true;
 | 
			
		||||
                }
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '[') {
 | 
			
		||||
                const [src, needUflag, consumed, magic] = parseClass(glob, i);
 | 
			
		||||
                if (consumed) {
 | 
			
		||||
                    re += src;
 | 
			
		||||
                    uflag = uflag || needUflag;
 | 
			
		||||
                    i += consumed - 1;
 | 
			
		||||
                    hasMagic = hasMagic || magic;
 | 
			
		||||
                    continue;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '*') {
 | 
			
		||||
                if (noEmpty && glob === '*')
 | 
			
		||||
                    re += starNoEmpty;
 | 
			
		||||
                else
 | 
			
		||||
                    re += star;
 | 
			
		||||
                hasMagic = true;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            if (c === '?') {
 | 
			
		||||
                re += qmark;
 | 
			
		||||
                hasMagic = true;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            re += regExpEscape(c);
 | 
			
		||||
        }
 | 
			
		||||
        return [re, unescape(glob), !!hasMagic, uflag];
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
//# sourceMappingURL=ast.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/ast.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/ast.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										8
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
export type ParseClassResult = [
 | 
			
		||||
    src: string,
 | 
			
		||||
    uFlag: boolean,
 | 
			
		||||
    consumed: number,
 | 
			
		||||
    hasMagic: boolean
 | 
			
		||||
];
 | 
			
		||||
export declare const parseClass: (glob: string, position: number) => ParseClassResult;
 | 
			
		||||
//# sourceMappingURL=brace-expressions.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"brace-expressions.d.ts","sourceRoot":"","sources":["../../src/brace-expressions.ts"],"names":[],"mappings":"AA+BA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM;IACX,KAAK,EAAE,OAAO;IACd,QAAQ,EAAE,MAAM;IAChB,QAAQ,EAAE,OAAO;CAClB,CAAA;AAQD,eAAO,MAAM,UAAU,SACf,MAAM,YACF,MAAM,qBA8HjB,CAAA"}
 | 
			
		||||
							
								
								
									
										148
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
			
		||||
// translate the various posix character classes into unicode properties
 | 
			
		||||
// this works across all unicode locales
 | 
			
		||||
// { <posix class>: [<translation>, /u flag required, negated]
 | 
			
		||||
const posixClasses = {
 | 
			
		||||
    '[:alnum:]': ['\\p{L}\\p{Nl}\\p{Nd}', true],
 | 
			
		||||
    '[:alpha:]': ['\\p{L}\\p{Nl}', true],
 | 
			
		||||
    '[:ascii:]': ['\\x' + '00-\\x' + '7f', false],
 | 
			
		||||
    '[:blank:]': ['\\p{Zs}\\t', true],
 | 
			
		||||
    '[:cntrl:]': ['\\p{Cc}', true],
 | 
			
		||||
    '[:digit:]': ['\\p{Nd}', true],
 | 
			
		||||
    '[:graph:]': ['\\p{Z}\\p{C}', true, true],
 | 
			
		||||
    '[:lower:]': ['\\p{Ll}', true],
 | 
			
		||||
    '[:print:]': ['\\p{C}', true],
 | 
			
		||||
    '[:punct:]': ['\\p{P}', true],
 | 
			
		||||
    '[:space:]': ['\\p{Z}\\t\\r\\n\\v\\f', true],
 | 
			
		||||
    '[:upper:]': ['\\p{Lu}', true],
 | 
			
		||||
    '[:word:]': ['\\p{L}\\p{Nl}\\p{Nd}\\p{Pc}', true],
 | 
			
		||||
    '[:xdigit:]': ['A-Fa-f0-9', false],
 | 
			
		||||
};
 | 
			
		||||
// only need to escape a few things inside of brace expressions
 | 
			
		||||
// escapes: [ \ ] -
 | 
			
		||||
const braceEscape = (s) => s.replace(/[[\]\\-]/g, '\\$&');
 | 
			
		||||
// escape all regexp magic characters
 | 
			
		||||
const regexpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
 | 
			
		||||
// everything has already been escaped, we just have to join
 | 
			
		||||
const rangesToString = (ranges) => ranges.join('');
 | 
			
		||||
// takes a glob string at a posix brace expression, and returns
 | 
			
		||||
// an equivalent regular expression source, and boolean indicating
 | 
			
		||||
// whether the /u flag needs to be applied, and the number of chars
 | 
			
		||||
// consumed to parse the character class.
 | 
			
		||||
// This also removes out of order ranges, and returns ($.) if the
 | 
			
		||||
// entire class just no good.
 | 
			
		||||
export const parseClass = (glob, position) => {
 | 
			
		||||
    const pos = position;
 | 
			
		||||
    /* c8 ignore start */
 | 
			
		||||
    if (glob.charAt(pos) !== '[') {
 | 
			
		||||
        throw new Error('not in a brace expression');
 | 
			
		||||
    }
 | 
			
		||||
    /* c8 ignore stop */
 | 
			
		||||
    const ranges = [];
 | 
			
		||||
    const negs = [];
 | 
			
		||||
    let i = pos + 1;
 | 
			
		||||
    let sawStart = false;
 | 
			
		||||
    let uflag = false;
 | 
			
		||||
    let escaping = false;
 | 
			
		||||
    let negate = false;
 | 
			
		||||
    let endPos = pos;
 | 
			
		||||
    let rangeStart = '';
 | 
			
		||||
    WHILE: while (i < glob.length) {
 | 
			
		||||
        const c = glob.charAt(i);
 | 
			
		||||
        if ((c === '!' || c === '^') && i === pos + 1) {
 | 
			
		||||
            negate = true;
 | 
			
		||||
            i++;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (c === ']' && sawStart && !escaping) {
 | 
			
		||||
            endPos = i + 1;
 | 
			
		||||
            break;
 | 
			
		||||
        }
 | 
			
		||||
        sawStart = true;
 | 
			
		||||
        if (c === '\\') {
 | 
			
		||||
            if (!escaping) {
 | 
			
		||||
                escaping = true;
 | 
			
		||||
                i++;
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            // escaped \ char, fall through and treat like normal char
 | 
			
		||||
        }
 | 
			
		||||
        if (c === '[' && !escaping) {
 | 
			
		||||
            // either a posix class, a collation equivalent, or just a [
 | 
			
		||||
            for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {
 | 
			
		||||
                if (glob.startsWith(cls, i)) {
 | 
			
		||||
                    // invalid, [a-[] is fine, but not [a-[:alpha]]
 | 
			
		||||
                    if (rangeStart) {
 | 
			
		||||
                        return ['$.', false, glob.length - pos, true];
 | 
			
		||||
                    }
 | 
			
		||||
                    i += cls.length;
 | 
			
		||||
                    if (neg)
 | 
			
		||||
                        negs.push(unip);
 | 
			
		||||
                    else
 | 
			
		||||
                        ranges.push(unip);
 | 
			
		||||
                    uflag = uflag || u;
 | 
			
		||||
                    continue WHILE;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // now it's just a normal character, effectively
 | 
			
		||||
        escaping = false;
 | 
			
		||||
        if (rangeStart) {
 | 
			
		||||
            // throw this range away if it's not valid, but others
 | 
			
		||||
            // can still match.
 | 
			
		||||
            if (c > rangeStart) {
 | 
			
		||||
                ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));
 | 
			
		||||
            }
 | 
			
		||||
            else if (c === rangeStart) {
 | 
			
		||||
                ranges.push(braceEscape(c));
 | 
			
		||||
            }
 | 
			
		||||
            rangeStart = '';
 | 
			
		||||
            i++;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        // now might be the start of a range.
 | 
			
		||||
        // can be either c-d or c-] or c<more...>] or c] at this point
 | 
			
		||||
        if (glob.startsWith('-]', i + 1)) {
 | 
			
		||||
            ranges.push(braceEscape(c + '-'));
 | 
			
		||||
            i += 2;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        if (glob.startsWith('-', i + 1)) {
 | 
			
		||||
            rangeStart = c;
 | 
			
		||||
            i += 2;
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        // not the start of a range, just a single character
 | 
			
		||||
        ranges.push(braceEscape(c));
 | 
			
		||||
        i++;
 | 
			
		||||
    }
 | 
			
		||||
    if (endPos < i) {
 | 
			
		||||
        // didn't see the end of the class, not a valid class,
 | 
			
		||||
        // but might still be valid as a literal match.
 | 
			
		||||
        return ['', false, 0, false];
 | 
			
		||||
    }
 | 
			
		||||
    // if we got no ranges and no negates, then we have a range that
 | 
			
		||||
    // cannot possibly match anything, and that poisons the whole glob
 | 
			
		||||
    if (!ranges.length && !negs.length) {
 | 
			
		||||
        return ['$.', false, glob.length - pos, true];
 | 
			
		||||
    }
 | 
			
		||||
    // if we got one positive range, and it's a single character, then that's
 | 
			
		||||
    // not actually a magic pattern, it's just that one literal character.
 | 
			
		||||
    // we should not treat that as "magic", we should just return the literal
 | 
			
		||||
    // character. [_] is a perfectly valid way to escape glob magic chars.
 | 
			
		||||
    if (negs.length === 0 &&
 | 
			
		||||
        ranges.length === 1 &&
 | 
			
		||||
        /^\\?.$/.test(ranges[0]) &&
 | 
			
		||||
        !negate) {
 | 
			
		||||
        const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];
 | 
			
		||||
        return [regexpEscape(r), false, endPos - pos, false];
 | 
			
		||||
    }
 | 
			
		||||
    const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';
 | 
			
		||||
    const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';
 | 
			
		||||
    const comb = ranges.length && negs.length
 | 
			
		||||
        ? '(' + sranges + '|' + snegs + ')'
 | 
			
		||||
        : ranges.length
 | 
			
		||||
            ? sranges
 | 
			
		||||
            : snegs;
 | 
			
		||||
    return [comb, uflag, endPos - pos, true];
 | 
			
		||||
};
 | 
			
		||||
//# sourceMappingURL=brace-expressions.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/brace-expressions.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										12
									
								
								node_modules/minimatch/dist/mjs/escape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								node_modules/minimatch/dist/mjs/escape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
import { MinimatchOptions } from './index.js';
 | 
			
		||||
/**
 | 
			
		||||
 * Escape all magic characters in a glob pattern.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}
 | 
			
		||||
 * option is used, then characters are escaped by wrapping in `[]`, because
 | 
			
		||||
 * a magic character wrapped in a character class can only be satisfied by
 | 
			
		||||
 * that exact character.  In this mode, `\` is _not_ escaped, because it is
 | 
			
		||||
 * not interpreted as a magic character, but instead as a path separator.
 | 
			
		||||
 */
 | 
			
		||||
export declare const escape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, 'windowsPathsNoEscape'>) => string;
 | 
			
		||||
//# sourceMappingURL=escape.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/escape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/escape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,MACd,MAAM,8BAGN,KAAK,gBAAgB,EAAE,sBAAsB,CAAC,WAQlD,CAAA"}
 | 
			
		||||
							
								
								
									
										18
									
								
								node_modules/minimatch/dist/mjs/escape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								node_modules/minimatch/dist/mjs/escape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,18 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Escape all magic characters in a glob pattern.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}
 | 
			
		||||
 * option is used, then characters are escaped by wrapping in `[]`, because
 | 
			
		||||
 * a magic character wrapped in a character class can only be satisfied by
 | 
			
		||||
 * that exact character.  In this mode, `\` is _not_ escaped, because it is
 | 
			
		||||
 * not interpreted as a magic character, but instead as a path separator.
 | 
			
		||||
 */
 | 
			
		||||
export const escape = (s, { windowsPathsNoEscape = false, } = {}) => {
 | 
			
		||||
    // don't need to escape +@! because we escape the parens
 | 
			
		||||
    // that make those magic, and escaping ! as [!] isn't valid,
 | 
			
		||||
    // because [!]] is a valid glob class meaning not ']'.
 | 
			
		||||
    return windowsPathsNoEscape
 | 
			
		||||
        ? s.replace(/[?*()[\]]/g, '[$&]')
 | 
			
		||||
        : s.replace(/[?*()[\]\\]/g, '\\$&');
 | 
			
		||||
};
 | 
			
		||||
//# sourceMappingURL=escape.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/escape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/escape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/escape.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,wDAAwD;IACxD,4DAA4D;IAC5D,sDAAsD;IACtD,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC;QACjC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA;AACvC,CAAC,CAAA","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link windowsPathsNoEscape | GlobOptions.windowsPathsNoEscape}\n * option is used, then characters are escaped by wrapping in `[]`, because\n * a magic character wrapped in a character class can only be satisfied by\n * that exact character.  In this mode, `\\` is _not_ escaped, because it is\n * not interpreted as a magic character, but instead as a path separator.\n */\nexport const escape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  // don't need to escape +@! because we escape the parens\n  // that make those magic, and escaping ! as [!] isn't valid,\n  // because [!]] is a valid glob class meaning not ']'.\n  return windowsPathsNoEscape\n    ? s.replace(/[?*()[\\]]/g, '[$&]')\n    : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&')\n}\n"]}
 | 
			
		||||
							
								
								
									
										94
									
								
								node_modules/minimatch/dist/mjs/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								node_modules/minimatch/dist/mjs/index.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,94 @@
 | 
			
		||||
import { AST } from './ast.js';
 | 
			
		||||
type Platform = 'aix' | 'android' | 'darwin' | 'freebsd' | 'haiku' | 'linux' | 'openbsd' | 'sunos' | 'win32' | 'cygwin' | 'netbsd';
 | 
			
		||||
export interface MinimatchOptions {
 | 
			
		||||
    nobrace?: boolean;
 | 
			
		||||
    nocomment?: boolean;
 | 
			
		||||
    nonegate?: boolean;
 | 
			
		||||
    debug?: boolean;
 | 
			
		||||
    noglobstar?: boolean;
 | 
			
		||||
    noext?: boolean;
 | 
			
		||||
    nonull?: boolean;
 | 
			
		||||
    windowsPathsNoEscape?: boolean;
 | 
			
		||||
    allowWindowsEscape?: boolean;
 | 
			
		||||
    partial?: boolean;
 | 
			
		||||
    dot?: boolean;
 | 
			
		||||
    nocase?: boolean;
 | 
			
		||||
    nocaseMagicOnly?: boolean;
 | 
			
		||||
    magicalBraces?: boolean;
 | 
			
		||||
    matchBase?: boolean;
 | 
			
		||||
    flipNegate?: boolean;
 | 
			
		||||
    preserveMultipleSlashes?: boolean;
 | 
			
		||||
    optimizationLevel?: number;
 | 
			
		||||
    platform?: Platform;
 | 
			
		||||
    windowsNoMagicRoot?: boolean;
 | 
			
		||||
}
 | 
			
		||||
export declare const minimatch: {
 | 
			
		||||
    (p: string, pattern: string, options?: MinimatchOptions): boolean;
 | 
			
		||||
    sep: Sep;
 | 
			
		||||
    GLOBSTAR: typeof GLOBSTAR;
 | 
			
		||||
    filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean;
 | 
			
		||||
    defaults: (def: MinimatchOptions) => typeof minimatch;
 | 
			
		||||
    braceExpand: (pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
    makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp;
 | 
			
		||||
    match: (list: string[], pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
    AST: typeof AST;
 | 
			
		||||
    Minimatch: typeof Minimatch;
 | 
			
		||||
    escape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, "windowsPathsNoEscape">) => string;
 | 
			
		||||
    unescape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, "windowsPathsNoEscape">) => string;
 | 
			
		||||
};
 | 
			
		||||
type Sep = '\\' | '/';
 | 
			
		||||
export declare const sep: Sep;
 | 
			
		||||
export declare const GLOBSTAR: unique symbol;
 | 
			
		||||
export declare const filter: (pattern: string, options?: MinimatchOptions) => (p: string) => boolean;
 | 
			
		||||
export declare const defaults: (def: MinimatchOptions) => typeof minimatch;
 | 
			
		||||
export declare const braceExpand: (pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
export declare const makeRe: (pattern: string, options?: MinimatchOptions) => false | MMRegExp;
 | 
			
		||||
export declare const match: (list: string[], pattern: string, options?: MinimatchOptions) => string[];
 | 
			
		||||
export type MMRegExp = RegExp & {
 | 
			
		||||
    _src?: string;
 | 
			
		||||
    _glob?: string;
 | 
			
		||||
};
 | 
			
		||||
export type ParseReturnFiltered = string | MMRegExp | typeof GLOBSTAR;
 | 
			
		||||
export type ParseReturn = ParseReturnFiltered | false;
 | 
			
		||||
export declare class Minimatch {
 | 
			
		||||
    options: MinimatchOptions;
 | 
			
		||||
    set: ParseReturnFiltered[][];
 | 
			
		||||
    pattern: string;
 | 
			
		||||
    windowsPathsNoEscape: boolean;
 | 
			
		||||
    nonegate: boolean;
 | 
			
		||||
    negate: boolean;
 | 
			
		||||
    comment: boolean;
 | 
			
		||||
    empty: boolean;
 | 
			
		||||
    preserveMultipleSlashes: boolean;
 | 
			
		||||
    partial: boolean;
 | 
			
		||||
    globSet: string[];
 | 
			
		||||
    globParts: string[][];
 | 
			
		||||
    nocase: boolean;
 | 
			
		||||
    isWindows: boolean;
 | 
			
		||||
    platform: Platform;
 | 
			
		||||
    windowsNoMagicRoot: boolean;
 | 
			
		||||
    regexp: false | null | MMRegExp;
 | 
			
		||||
    constructor(pattern: string, options?: MinimatchOptions);
 | 
			
		||||
    hasMagic(): boolean;
 | 
			
		||||
    debug(..._: any[]): void;
 | 
			
		||||
    make(): void;
 | 
			
		||||
    preprocess(globParts: string[][]): string[][];
 | 
			
		||||
    adjascentGlobstarOptimize(globParts: string[][]): string[][];
 | 
			
		||||
    levelOneOptimize(globParts: string[][]): string[][];
 | 
			
		||||
    levelTwoFileOptimize(parts: string | string[]): string[];
 | 
			
		||||
    firstPhasePreProcess(globParts: string[][]): string[][];
 | 
			
		||||
    secondPhasePreProcess(globParts: string[][]): string[][];
 | 
			
		||||
    partsMatch(a: string[], b: string[], emptyGSMatch?: boolean): false | string[];
 | 
			
		||||
    parseNegate(): void;
 | 
			
		||||
    matchOne(file: string[], pattern: ParseReturn[], partial?: boolean): boolean;
 | 
			
		||||
    braceExpand(): string[];
 | 
			
		||||
    parse(pattern: string): ParseReturn;
 | 
			
		||||
    makeRe(): false | MMRegExp;
 | 
			
		||||
    slashSplit(p: string): string[];
 | 
			
		||||
    match(f: string, partial?: boolean): boolean;
 | 
			
		||||
    static defaults(def: MinimatchOptions): typeof Minimatch;
 | 
			
		||||
}
 | 
			
		||||
export { AST } from './ast.js';
 | 
			
		||||
export { escape } from './escape.js';
 | 
			
		||||
export { unescape } from './unescape.js';
 | 
			
		||||
//# sourceMappingURL=index.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/index.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/index.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAe,MAAM,UAAU,CAAA;AAI3C,KAAK,QAAQ,GACT,KAAK,GACL,SAAS,GACT,QAAQ,GACR,SAAS,GACT,OAAO,GACP,OAAO,GACP,SAAS,GACT,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,CAAA;AAEZ,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAA;IACnB,kBAAkB,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,eAAO,MAAM,SAAS;QACjB,MAAM,WACA,MAAM,YACN,gBAAgB;;;sBAuGf,MAAM,YAAW,gBAAgB,SACvC,MAAM;oBAOkB,gBAAgB,KAAG,gBAAgB;2BA6EtD,MAAM,YACN,gBAAgB;sBA2BK,MAAM,YAAW,gBAAgB;kBAKzD,MAAM,EAAE,WACL,MAAM,YACN,gBAAgB;;;;;CArN1B,CAAA;AA+DD,KAAK,GAAG,GAAG,IAAI,GAAG,GAAG,CAAA;AAOrB,eAAO,MAAM,GAAG,KAAgE,CAAA;AAGhF,eAAO,MAAM,QAAQ,eAAwB,CAAA;AAmB7C,eAAO,MAAM,MAAM,YACP,MAAM,YAAW,gBAAgB,SACvC,MAAM,YACsB,CAAA;AAMlC,eAAO,MAAM,QAAQ,QAAS,gBAAgB,KAAG,gBA+DhD,CAAA;AAaD,eAAO,MAAM,WAAW,YACb,MAAM,YACN,gBAAgB,aAY1B,CAAA;AAeD,eAAO,MAAM,MAAM,YAAa,MAAM,YAAW,gBAAgB,qBACvB,CAAA;AAG1C,eAAO,MAAM,KAAK,SACV,MAAM,EAAE,WACL,MAAM,YACN,gBAAgB,aAQ1B,CAAA;AAQD,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,QAAQ,CAAA;AACrE,MAAM,MAAM,WAAW,GAAG,mBAAmB,GAAG,KAAK,CAAA;AAErD,qBAAa,SAAS;IACpB,OAAO,EAAE,gBAAgB,CAAA;IACzB,GAAG,EAAE,mBAAmB,EAAE,EAAE,CAAA;IAC5B,OAAO,EAAE,MAAM,CAAA;IAEf,oBAAoB,EAAE,OAAO,CAAA;IAC7B,QAAQ,EAAE,OAAO,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,OAAO,CAAA;IACd,uBAAuB,EAAE,OAAO,CAAA;IAChC,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,EAAE,CAAA;IACrB,MAAM,EAAE,OAAO,CAAA;IAEf,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,QAAQ,CAAA;IAClB,kBAAkB,EAAE,OAAO,CAAA;IAE3B,MAAM,EAAE,KAAK,GAAG,IAAI,GAAG,QAAQ,CAAA;gBACnB,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,gBAAqB;IAkC3D,QAAQ,IAAI,OAAO;IAYnB,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE;IAEjB,IAAI;IA0FJ,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IA6BhC,yBAAyB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IAiB/C,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IAoBtC,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IA6D7C,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;IA0F1C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE;IAgBxD,UAAU,CACR,CAAC,EAAE,MAAM,EAAE,EACX,CAAC,EAAE,MAAM,EAAE,EACX,YAAY,GAAE,OAAe,GAC5B,KAAK,GAAG,MAAM,EAAE;IA+CnB,WAAW;IAqBX,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,OAAO,GAAE,OAAe;IAiNzE,WAAW;IAIX,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;IA6CnC,MAAM;IAsFN,UAAU,CAAC,CAAC,EAAE,MAAM;IAepB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,UAAe;IAiEvC,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,gBAAgB;CAGtC;AAED,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA"}
 | 
			
		||||
							
								
								
									
										995
									
								
								node_modules/minimatch/dist/mjs/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										995
									
								
								node_modules/minimatch/dist/mjs/index.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,995 @@
 | 
			
		||||
import expand from 'brace-expansion';
 | 
			
		||||
import { assertValidPattern } from './assert-valid-pattern.js';
 | 
			
		||||
import { AST } from './ast.js';
 | 
			
		||||
import { escape } from './escape.js';
 | 
			
		||||
import { unescape } from './unescape.js';
 | 
			
		||||
export const minimatch = (p, pattern, options = {}) => {
 | 
			
		||||
    assertValidPattern(pattern);
 | 
			
		||||
    // shortcut: comments match nothing.
 | 
			
		||||
    if (!options.nocomment && pattern.charAt(0) === '#') {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    return new Minimatch(pattern, options).match(p);
 | 
			
		||||
};
 | 
			
		||||
// Optimized checking for the most common glob patterns.
 | 
			
		||||
const starDotExtRE = /^\*+([^+@!?\*\[\(]*)$/;
 | 
			
		||||
const starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);
 | 
			
		||||
const starDotExtTestDot = (ext) => (f) => f.endsWith(ext);
 | 
			
		||||
const starDotExtTestNocase = (ext) => {
 | 
			
		||||
    ext = ext.toLowerCase();
 | 
			
		||||
    return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);
 | 
			
		||||
};
 | 
			
		||||
const starDotExtTestNocaseDot = (ext) => {
 | 
			
		||||
    ext = ext.toLowerCase();
 | 
			
		||||
    return (f) => f.toLowerCase().endsWith(ext);
 | 
			
		||||
};
 | 
			
		||||
const starDotStarRE = /^\*+\.\*+$/;
 | 
			
		||||
const starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');
 | 
			
		||||
const starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');
 | 
			
		||||
const dotStarRE = /^\.\*+$/;
 | 
			
		||||
const dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');
 | 
			
		||||
const starRE = /^\*+$/;
 | 
			
		||||
const starTest = (f) => f.length !== 0 && !f.startsWith('.');
 | 
			
		||||
const starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';
 | 
			
		||||
const qmarksRE = /^\?+([^+@!?\*\[\(]*)?$/;
 | 
			
		||||
const qmarksTestNocase = ([$0, ext = '']) => {
 | 
			
		||||
    const noext = qmarksTestNoExt([$0]);
 | 
			
		||||
    if (!ext)
 | 
			
		||||
        return noext;
 | 
			
		||||
    ext = ext.toLowerCase();
 | 
			
		||||
    return (f) => noext(f) && f.toLowerCase().endsWith(ext);
 | 
			
		||||
};
 | 
			
		||||
const qmarksTestNocaseDot = ([$0, ext = '']) => {
 | 
			
		||||
    const noext = qmarksTestNoExtDot([$0]);
 | 
			
		||||
    if (!ext)
 | 
			
		||||
        return noext;
 | 
			
		||||
    ext = ext.toLowerCase();
 | 
			
		||||
    return (f) => noext(f) && f.toLowerCase().endsWith(ext);
 | 
			
		||||
};
 | 
			
		||||
const qmarksTestDot = ([$0, ext = '']) => {
 | 
			
		||||
    const noext = qmarksTestNoExtDot([$0]);
 | 
			
		||||
    return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
 | 
			
		||||
};
 | 
			
		||||
const qmarksTest = ([$0, ext = '']) => {
 | 
			
		||||
    const noext = qmarksTestNoExt([$0]);
 | 
			
		||||
    return !ext ? noext : (f) => noext(f) && f.endsWith(ext);
 | 
			
		||||
};
 | 
			
		||||
const qmarksTestNoExt = ([$0]) => {
 | 
			
		||||
    const len = $0.length;
 | 
			
		||||
    return (f) => f.length === len && !f.startsWith('.');
 | 
			
		||||
};
 | 
			
		||||
const qmarksTestNoExtDot = ([$0]) => {
 | 
			
		||||
    const len = $0.length;
 | 
			
		||||
    return (f) => f.length === len && f !== '.' && f !== '..';
 | 
			
		||||
};
 | 
			
		||||
/* c8 ignore start */
 | 
			
		||||
const defaultPlatform = (typeof process === 'object' && process
 | 
			
		||||
    ? (typeof process.env === 'object' &&
 | 
			
		||||
        process.env &&
 | 
			
		||||
        process.env.__MINIMATCH_TESTING_PLATFORM__) ||
 | 
			
		||||
        process.platform
 | 
			
		||||
    : 'posix');
 | 
			
		||||
const path = {
 | 
			
		||||
    win32: { sep: '\\' },
 | 
			
		||||
    posix: { sep: '/' },
 | 
			
		||||
};
 | 
			
		||||
/* c8 ignore stop */
 | 
			
		||||
export const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;
 | 
			
		||||
minimatch.sep = sep;
 | 
			
		||||
export const GLOBSTAR = Symbol('globstar **');
 | 
			
		||||
minimatch.GLOBSTAR = GLOBSTAR;
 | 
			
		||||
// any single thing other than /
 | 
			
		||||
// don't need to escape / when using new RegExp()
 | 
			
		||||
const qmark = '[^/]';
 | 
			
		||||
// * => any number of characters
 | 
			
		||||
const star = qmark + '*?';
 | 
			
		||||
// ** when dots are allowed.  Anything goes, except .. and .
 | 
			
		||||
// not (^ or / followed by one or two dots followed by $ or /),
 | 
			
		||||
// followed by anything, any number of times.
 | 
			
		||||
const twoStarDot = '(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?';
 | 
			
		||||
// not a ^ or / followed by a dot,
 | 
			
		||||
// followed by anything, any number of times.
 | 
			
		||||
const twoStarNoDot = '(?:(?!(?:\\/|^)\\.).)*?';
 | 
			
		||||
export const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);
 | 
			
		||||
minimatch.filter = filter;
 | 
			
		||||
const ext = (a, b = {}) => Object.assign({}, a, b);
 | 
			
		||||
export const defaults = (def) => {
 | 
			
		||||
    if (!def || typeof def !== 'object' || !Object.keys(def).length) {
 | 
			
		||||
        return minimatch;
 | 
			
		||||
    }
 | 
			
		||||
    const orig = minimatch;
 | 
			
		||||
    const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));
 | 
			
		||||
    return Object.assign(m, {
 | 
			
		||||
        Minimatch: class Minimatch extends orig.Minimatch {
 | 
			
		||||
            constructor(pattern, options = {}) {
 | 
			
		||||
                super(pattern, ext(def, options));
 | 
			
		||||
            }
 | 
			
		||||
            static defaults(options) {
 | 
			
		||||
                return orig.defaults(ext(def, options)).Minimatch;
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        AST: class AST extends orig.AST {
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
            constructor(type, parent, options = {}) {
 | 
			
		||||
                super(type, parent, ext(def, options));
 | 
			
		||||
            }
 | 
			
		||||
            /* c8 ignore stop */
 | 
			
		||||
            static fromGlob(pattern, options = {}) {
 | 
			
		||||
                return orig.AST.fromGlob(pattern, ext(def, options));
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),
 | 
			
		||||
        escape: (s, options = {}) => orig.escape(s, ext(def, options)),
 | 
			
		||||
        filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),
 | 
			
		||||
        defaults: (options) => orig.defaults(ext(def, options)),
 | 
			
		||||
        makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),
 | 
			
		||||
        braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),
 | 
			
		||||
        match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),
 | 
			
		||||
        sep: orig.sep,
 | 
			
		||||
        GLOBSTAR: GLOBSTAR,
 | 
			
		||||
    });
 | 
			
		||||
};
 | 
			
		||||
minimatch.defaults = defaults;
 | 
			
		||||
// Brace expansion:
 | 
			
		||||
// a{b,c}d -> abd acd
 | 
			
		||||
// a{b,}c -> abc ac
 | 
			
		||||
// a{0..3}d -> a0d a1d a2d a3d
 | 
			
		||||
// a{b,c{d,e}f}g -> abg acdfg acefg
 | 
			
		||||
// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg
 | 
			
		||||
//
 | 
			
		||||
// Invalid sets are not expanded.
 | 
			
		||||
// a{2..}b -> a{2..}b
 | 
			
		||||
// a{b}c -> a{b}c
 | 
			
		||||
export const braceExpand = (pattern, options = {}) => {
 | 
			
		||||
    assertValidPattern(pattern);
 | 
			
		||||
    // Thanks to Yeting Li <https://github.com/yetingli> for
 | 
			
		||||
    // improving this regexp to avoid a ReDOS vulnerability.
 | 
			
		||||
    if (options.nobrace || !/\{(?:(?!\{).)*\}/.test(pattern)) {
 | 
			
		||||
        // shortcut. no need to expand.
 | 
			
		||||
        return [pattern];
 | 
			
		||||
    }
 | 
			
		||||
    return expand(pattern);
 | 
			
		||||
};
 | 
			
		||||
minimatch.braceExpand = braceExpand;
 | 
			
		||||
// parse a component of the expanded set.
 | 
			
		||||
// At this point, no pattern may contain "/" in it
 | 
			
		||||
// so we're going to return a 2d array, where each entry is the full
 | 
			
		||||
// pattern, split on '/', and then turned into a regular expression.
 | 
			
		||||
// A regexp is made at the end which joins each array with an
 | 
			
		||||
// escaped /, and another full one which joins each regexp with |.
 | 
			
		||||
//
 | 
			
		||||
// Following the lead of Bash 4.1, note that "**" only has special meaning
 | 
			
		||||
// when it is the *only* thing in a path portion.  Otherwise, any series
 | 
			
		||||
// of * is equivalent to a single *.  Globstar behavior is enabled by
 | 
			
		||||
// default, and can be disabled by setting options.noglobstar.
 | 
			
		||||
export const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();
 | 
			
		||||
minimatch.makeRe = makeRe;
 | 
			
		||||
export const match = (list, pattern, options = {}) => {
 | 
			
		||||
    const mm = new Minimatch(pattern, options);
 | 
			
		||||
    list = list.filter(f => mm.match(f));
 | 
			
		||||
    if (mm.options.nonull && !list.length) {
 | 
			
		||||
        list.push(pattern);
 | 
			
		||||
    }
 | 
			
		||||
    return list;
 | 
			
		||||
};
 | 
			
		||||
minimatch.match = match;
 | 
			
		||||
// replace stuff like \* with *
 | 
			
		||||
const globMagic = /[?*]|[+@!]\(.*?\)|\[|\]/;
 | 
			
		||||
const regExpEscape = (s) => s.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
 | 
			
		||||
export class Minimatch {
 | 
			
		||||
    options;
 | 
			
		||||
    set;
 | 
			
		||||
    pattern;
 | 
			
		||||
    windowsPathsNoEscape;
 | 
			
		||||
    nonegate;
 | 
			
		||||
    negate;
 | 
			
		||||
    comment;
 | 
			
		||||
    empty;
 | 
			
		||||
    preserveMultipleSlashes;
 | 
			
		||||
    partial;
 | 
			
		||||
    globSet;
 | 
			
		||||
    globParts;
 | 
			
		||||
    nocase;
 | 
			
		||||
    isWindows;
 | 
			
		||||
    platform;
 | 
			
		||||
    windowsNoMagicRoot;
 | 
			
		||||
    regexp;
 | 
			
		||||
    constructor(pattern, options = {}) {
 | 
			
		||||
        assertValidPattern(pattern);
 | 
			
		||||
        options = options || {};
 | 
			
		||||
        this.options = options;
 | 
			
		||||
        this.pattern = pattern;
 | 
			
		||||
        this.platform = options.platform || defaultPlatform;
 | 
			
		||||
        this.isWindows = this.platform === 'win32';
 | 
			
		||||
        this.windowsPathsNoEscape =
 | 
			
		||||
            !!options.windowsPathsNoEscape || options.allowWindowsEscape === false;
 | 
			
		||||
        if (this.windowsPathsNoEscape) {
 | 
			
		||||
            this.pattern = this.pattern.replace(/\\/g, '/');
 | 
			
		||||
        }
 | 
			
		||||
        this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;
 | 
			
		||||
        this.regexp = null;
 | 
			
		||||
        this.negate = false;
 | 
			
		||||
        this.nonegate = !!options.nonegate;
 | 
			
		||||
        this.comment = false;
 | 
			
		||||
        this.empty = false;
 | 
			
		||||
        this.partial = !!options.partial;
 | 
			
		||||
        this.nocase = !!this.options.nocase;
 | 
			
		||||
        this.windowsNoMagicRoot =
 | 
			
		||||
            options.windowsNoMagicRoot !== undefined
 | 
			
		||||
                ? options.windowsNoMagicRoot
 | 
			
		||||
                : !!(this.isWindows && this.nocase);
 | 
			
		||||
        this.globSet = [];
 | 
			
		||||
        this.globParts = [];
 | 
			
		||||
        this.set = [];
 | 
			
		||||
        // make the set of regexps etc.
 | 
			
		||||
        this.make();
 | 
			
		||||
    }
 | 
			
		||||
    hasMagic() {
 | 
			
		||||
        if (this.options.magicalBraces && this.set.length > 1) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        for (const pattern of this.set) {
 | 
			
		||||
            for (const part of pattern) {
 | 
			
		||||
                if (typeof part !== 'string')
 | 
			
		||||
                    return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    debug(..._) { }
 | 
			
		||||
    make() {
 | 
			
		||||
        const pattern = this.pattern;
 | 
			
		||||
        const options = this.options;
 | 
			
		||||
        // empty patterns and comments match nothing.
 | 
			
		||||
        if (!options.nocomment && pattern.charAt(0) === '#') {
 | 
			
		||||
            this.comment = true;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        if (!pattern) {
 | 
			
		||||
            this.empty = true;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        // step 1: figure out negation, etc.
 | 
			
		||||
        this.parseNegate();
 | 
			
		||||
        // step 2: expand braces
 | 
			
		||||
        this.globSet = [...new Set(this.braceExpand())];
 | 
			
		||||
        if (options.debug) {
 | 
			
		||||
            this.debug = (...args) => console.error(...args);
 | 
			
		||||
        }
 | 
			
		||||
        this.debug(this.pattern, this.globSet);
 | 
			
		||||
        // step 3: now we have a set, so turn each one into a series of
 | 
			
		||||
        // path-portion matching patterns.
 | 
			
		||||
        // These will be regexps, except in the case of "**", which is
 | 
			
		||||
        // set to the GLOBSTAR object for globstar behavior,
 | 
			
		||||
        // and will not contain any / characters
 | 
			
		||||
        //
 | 
			
		||||
        // First, we preprocess to make the glob pattern sets a bit simpler
 | 
			
		||||
        // and deduped.  There are some perf-killing patterns that can cause
 | 
			
		||||
        // problems with a glob walk, but we can simplify them down a bit.
 | 
			
		||||
        const rawGlobParts = this.globSet.map(s => this.slashSplit(s));
 | 
			
		||||
        this.globParts = this.preprocess(rawGlobParts);
 | 
			
		||||
        this.debug(this.pattern, this.globParts);
 | 
			
		||||
        // glob --> regexps
 | 
			
		||||
        let set = this.globParts.map((s, _, __) => {
 | 
			
		||||
            if (this.isWindows && this.windowsNoMagicRoot) {
 | 
			
		||||
                // check if it's a drive or unc path.
 | 
			
		||||
                const isUNC = s[0] === '' &&
 | 
			
		||||
                    s[1] === '' &&
 | 
			
		||||
                    (s[2] === '?' || !globMagic.test(s[2])) &&
 | 
			
		||||
                    !globMagic.test(s[3]);
 | 
			
		||||
                const isDrive = /^[a-z]:/i.test(s[0]);
 | 
			
		||||
                if (isUNC) {
 | 
			
		||||
                    return [...s.slice(0, 4), ...s.slice(4).map(ss => this.parse(ss))];
 | 
			
		||||
                }
 | 
			
		||||
                else if (isDrive) {
 | 
			
		||||
                    return [s[0], ...s.slice(1).map(ss => this.parse(ss))];
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return s.map(ss => this.parse(ss));
 | 
			
		||||
        });
 | 
			
		||||
        this.debug(this.pattern, set);
 | 
			
		||||
        // filter out everything that didn't compile properly.
 | 
			
		||||
        this.set = set.filter(s => s.indexOf(false) === -1);
 | 
			
		||||
        // do not treat the ? in UNC paths as magic
 | 
			
		||||
        if (this.isWindows) {
 | 
			
		||||
            for (let i = 0; i < this.set.length; i++) {
 | 
			
		||||
                const p = this.set[i];
 | 
			
		||||
                if (p[0] === '' &&
 | 
			
		||||
                    p[1] === '' &&
 | 
			
		||||
                    this.globParts[i][2] === '?' &&
 | 
			
		||||
                    typeof p[3] === 'string' &&
 | 
			
		||||
                    /^[a-z]:$/i.test(p[3])) {
 | 
			
		||||
                    p[2] = '?';
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        this.debug(this.pattern, this.set);
 | 
			
		||||
    }
 | 
			
		||||
    // various transforms to equivalent pattern sets that are
 | 
			
		||||
    // faster to process in a filesystem walk.  The goal is to
 | 
			
		||||
    // eliminate what we can, and push all ** patterns as far
 | 
			
		||||
    // to the right as possible, even if it increases the number
 | 
			
		||||
    // of patterns that we have to process.
 | 
			
		||||
    preprocess(globParts) {
 | 
			
		||||
        // if we're not in globstar mode, then turn all ** into *
 | 
			
		||||
        if (this.options.noglobstar) {
 | 
			
		||||
            for (let i = 0; i < globParts.length; i++) {
 | 
			
		||||
                for (let j = 0; j < globParts[i].length; j++) {
 | 
			
		||||
                    if (globParts[i][j] === '**') {
 | 
			
		||||
                        globParts[i][j] = '*';
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        const { optimizationLevel = 1 } = this.options;
 | 
			
		||||
        if (optimizationLevel >= 2) {
 | 
			
		||||
            // aggressive optimization for the purpose of fs walking
 | 
			
		||||
            globParts = this.firstPhasePreProcess(globParts);
 | 
			
		||||
            globParts = this.secondPhasePreProcess(globParts);
 | 
			
		||||
        }
 | 
			
		||||
        else if (optimizationLevel >= 1) {
 | 
			
		||||
            // just basic optimizations to remove some .. parts
 | 
			
		||||
            globParts = this.levelOneOptimize(globParts);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            globParts = this.adjascentGlobstarOptimize(globParts);
 | 
			
		||||
        }
 | 
			
		||||
        return globParts;
 | 
			
		||||
    }
 | 
			
		||||
    // just get rid of adjascent ** portions
 | 
			
		||||
    adjascentGlobstarOptimize(globParts) {
 | 
			
		||||
        return globParts.map(parts => {
 | 
			
		||||
            let gs = -1;
 | 
			
		||||
            while (-1 !== (gs = parts.indexOf('**', gs + 1))) {
 | 
			
		||||
                let i = gs;
 | 
			
		||||
                while (parts[i + 1] === '**') {
 | 
			
		||||
                    i++;
 | 
			
		||||
                }
 | 
			
		||||
                if (i !== gs) {
 | 
			
		||||
                    parts.splice(gs, i - gs);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            return parts;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    // get rid of adjascent ** and resolve .. portions
 | 
			
		||||
    levelOneOptimize(globParts) {
 | 
			
		||||
        return globParts.map(parts => {
 | 
			
		||||
            parts = parts.reduce((set, part) => {
 | 
			
		||||
                const prev = set[set.length - 1];
 | 
			
		||||
                if (part === '**' && prev === '**') {
 | 
			
		||||
                    return set;
 | 
			
		||||
                }
 | 
			
		||||
                if (part === '..') {
 | 
			
		||||
                    if (prev && prev !== '..' && prev !== '.' && prev !== '**') {
 | 
			
		||||
                        set.pop();
 | 
			
		||||
                        return set;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                set.push(part);
 | 
			
		||||
                return set;
 | 
			
		||||
            }, []);
 | 
			
		||||
            return parts.length === 0 ? [''] : parts;
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
    levelTwoFileOptimize(parts) {
 | 
			
		||||
        if (!Array.isArray(parts)) {
 | 
			
		||||
            parts = this.slashSplit(parts);
 | 
			
		||||
        }
 | 
			
		||||
        let didSomething = false;
 | 
			
		||||
        do {
 | 
			
		||||
            didSomething = false;
 | 
			
		||||
            // <pre>/<e>/<rest> -> <pre>/<rest>
 | 
			
		||||
            if (!this.preserveMultipleSlashes) {
 | 
			
		||||
                for (let i = 1; i < parts.length - 1; i++) {
 | 
			
		||||
                    const p = parts[i];
 | 
			
		||||
                    // don't squeeze out UNC patterns
 | 
			
		||||
                    if (i === 1 && p === '' && parts[0] === '')
 | 
			
		||||
                        continue;
 | 
			
		||||
                    if (p === '.' || p === '') {
 | 
			
		||||
                        didSomething = true;
 | 
			
		||||
                        parts.splice(i, 1);
 | 
			
		||||
                        i--;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                if (parts[0] === '.' &&
 | 
			
		||||
                    parts.length === 2 &&
 | 
			
		||||
                    (parts[1] === '.' || parts[1] === '')) {
 | 
			
		||||
                    didSomething = true;
 | 
			
		||||
                    parts.pop();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            // <pre>/<p>/../<rest> -> <pre>/<rest>
 | 
			
		||||
            let dd = 0;
 | 
			
		||||
            while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
 | 
			
		||||
                const p = parts[dd - 1];
 | 
			
		||||
                if (p && p !== '.' && p !== '..' && p !== '**') {
 | 
			
		||||
                    didSomething = true;
 | 
			
		||||
                    parts.splice(dd - 1, 2);
 | 
			
		||||
                    dd -= 2;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } while (didSomething);
 | 
			
		||||
        return parts.length === 0 ? [''] : parts;
 | 
			
		||||
    }
 | 
			
		||||
    // First phase: single-pattern processing
 | 
			
		||||
    // <pre> is 1 or more portions
 | 
			
		||||
    // <rest> is 1 or more portions
 | 
			
		||||
    // <p> is any portion other than ., .., '', or **
 | 
			
		||||
    // <e> is . or ''
 | 
			
		||||
    //
 | 
			
		||||
    // **/.. is *brutal* for filesystem walking performance, because
 | 
			
		||||
    // it effectively resets the recursive walk each time it occurs,
 | 
			
		||||
    // and ** cannot be reduced out by a .. pattern part like a regexp
 | 
			
		||||
    // or most strings (other than .., ., and '') can be.
 | 
			
		||||
    //
 | 
			
		||||
    // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}
 | 
			
		||||
    // <pre>/<e>/<rest> -> <pre>/<rest>
 | 
			
		||||
    // <pre>/<p>/../<rest> -> <pre>/<rest>
 | 
			
		||||
    // **/**/<rest> -> **/<rest>
 | 
			
		||||
    //
 | 
			
		||||
    // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow
 | 
			
		||||
    // this WOULD be allowed if ** did follow symlinks, or * didn't
 | 
			
		||||
    firstPhasePreProcess(globParts) {
 | 
			
		||||
        let didSomething = false;
 | 
			
		||||
        do {
 | 
			
		||||
            didSomething = false;
 | 
			
		||||
            // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}
 | 
			
		||||
            for (let parts of globParts) {
 | 
			
		||||
                let gs = -1;
 | 
			
		||||
                while (-1 !== (gs = parts.indexOf('**', gs + 1))) {
 | 
			
		||||
                    let gss = gs;
 | 
			
		||||
                    while (parts[gss + 1] === '**') {
 | 
			
		||||
                        // <pre>/**/**/<rest> -> <pre>/**/<rest>
 | 
			
		||||
                        gss++;
 | 
			
		||||
                    }
 | 
			
		||||
                    // eg, if gs is 2 and gss is 4, that means we have 3 **
 | 
			
		||||
                    // parts, and can remove 2 of them.
 | 
			
		||||
                    if (gss > gs) {
 | 
			
		||||
                        parts.splice(gs + 1, gss - gs);
 | 
			
		||||
                    }
 | 
			
		||||
                    let next = parts[gs + 1];
 | 
			
		||||
                    const p = parts[gs + 2];
 | 
			
		||||
                    const p2 = parts[gs + 3];
 | 
			
		||||
                    if (next !== '..')
 | 
			
		||||
                        continue;
 | 
			
		||||
                    if (!p ||
 | 
			
		||||
                        p === '.' ||
 | 
			
		||||
                        p === '..' ||
 | 
			
		||||
                        !p2 ||
 | 
			
		||||
                        p2 === '.' ||
 | 
			
		||||
                        p2 === '..') {
 | 
			
		||||
                        continue;
 | 
			
		||||
                    }
 | 
			
		||||
                    didSomething = true;
 | 
			
		||||
                    // edit parts in place, and push the new one
 | 
			
		||||
                    parts.splice(gs, 1);
 | 
			
		||||
                    const other = parts.slice(0);
 | 
			
		||||
                    other[gs] = '**';
 | 
			
		||||
                    globParts.push(other);
 | 
			
		||||
                    gs--;
 | 
			
		||||
                }
 | 
			
		||||
                // <pre>/<e>/<rest> -> <pre>/<rest>
 | 
			
		||||
                if (!this.preserveMultipleSlashes) {
 | 
			
		||||
                    for (let i = 1; i < parts.length - 1; i++) {
 | 
			
		||||
                        const p = parts[i];
 | 
			
		||||
                        // don't squeeze out UNC patterns
 | 
			
		||||
                        if (i === 1 && p === '' && parts[0] === '')
 | 
			
		||||
                            continue;
 | 
			
		||||
                        if (p === '.' || p === '') {
 | 
			
		||||
                            didSomething = true;
 | 
			
		||||
                            parts.splice(i, 1);
 | 
			
		||||
                            i--;
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                    if (parts[0] === '.' &&
 | 
			
		||||
                        parts.length === 2 &&
 | 
			
		||||
                        (parts[1] === '.' || parts[1] === '')) {
 | 
			
		||||
                        didSomething = true;
 | 
			
		||||
                        parts.pop();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                // <pre>/<p>/../<rest> -> <pre>/<rest>
 | 
			
		||||
                let dd = 0;
 | 
			
		||||
                while (-1 !== (dd = parts.indexOf('..', dd + 1))) {
 | 
			
		||||
                    const p = parts[dd - 1];
 | 
			
		||||
                    if (p && p !== '.' && p !== '..' && p !== '**') {
 | 
			
		||||
                        didSomething = true;
 | 
			
		||||
                        const needDot = dd === 1 && parts[dd + 1] === '**';
 | 
			
		||||
                        const splin = needDot ? ['.'] : [];
 | 
			
		||||
                        parts.splice(dd - 1, 2, ...splin);
 | 
			
		||||
                        if (parts.length === 0)
 | 
			
		||||
                            parts.push('');
 | 
			
		||||
                        dd -= 2;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        } while (didSomething);
 | 
			
		||||
        return globParts;
 | 
			
		||||
    }
 | 
			
		||||
    // second phase: multi-pattern dedupes
 | 
			
		||||
    // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>
 | 
			
		||||
    // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>
 | 
			
		||||
    // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>
 | 
			
		||||
    //
 | 
			
		||||
    // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>
 | 
			
		||||
    // ^-- not valid because ** doens't follow symlinks
 | 
			
		||||
    secondPhasePreProcess(globParts) {
 | 
			
		||||
        for (let i = 0; i < globParts.length - 1; i++) {
 | 
			
		||||
            for (let j = i + 1; j < globParts.length; j++) {
 | 
			
		||||
                const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);
 | 
			
		||||
                if (!matched)
 | 
			
		||||
                    continue;
 | 
			
		||||
                globParts[i] = matched;
 | 
			
		||||
                globParts[j] = [];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return globParts.filter(gs => gs.length);
 | 
			
		||||
    }
 | 
			
		||||
    partsMatch(a, b, emptyGSMatch = false) {
 | 
			
		||||
        let ai = 0;
 | 
			
		||||
        let bi = 0;
 | 
			
		||||
        let result = [];
 | 
			
		||||
        let which = '';
 | 
			
		||||
        while (ai < a.length && bi < b.length) {
 | 
			
		||||
            if (a[ai] === b[bi]) {
 | 
			
		||||
                result.push(which === 'b' ? b[bi] : a[ai]);
 | 
			
		||||
                ai++;
 | 
			
		||||
                bi++;
 | 
			
		||||
            }
 | 
			
		||||
            else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {
 | 
			
		||||
                result.push(a[ai]);
 | 
			
		||||
                ai++;
 | 
			
		||||
            }
 | 
			
		||||
            else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {
 | 
			
		||||
                result.push(b[bi]);
 | 
			
		||||
                bi++;
 | 
			
		||||
            }
 | 
			
		||||
            else if (a[ai] === '*' &&
 | 
			
		||||
                b[bi] &&
 | 
			
		||||
                (this.options.dot || !b[bi].startsWith('.')) &&
 | 
			
		||||
                b[bi] !== '**') {
 | 
			
		||||
                if (which === 'b')
 | 
			
		||||
                    return false;
 | 
			
		||||
                which = 'a';
 | 
			
		||||
                result.push(a[ai]);
 | 
			
		||||
                ai++;
 | 
			
		||||
                bi++;
 | 
			
		||||
            }
 | 
			
		||||
            else if (b[bi] === '*' &&
 | 
			
		||||
                a[ai] &&
 | 
			
		||||
                (this.options.dot || !a[ai].startsWith('.')) &&
 | 
			
		||||
                a[ai] !== '**') {
 | 
			
		||||
                if (which === 'a')
 | 
			
		||||
                    return false;
 | 
			
		||||
                which = 'b';
 | 
			
		||||
                result.push(b[bi]);
 | 
			
		||||
                ai++;
 | 
			
		||||
                bi++;
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // if we fall out of the loop, it means they two are identical
 | 
			
		||||
        // as long as their lengths match
 | 
			
		||||
        return a.length === b.length && result;
 | 
			
		||||
    }
 | 
			
		||||
    parseNegate() {
 | 
			
		||||
        if (this.nonegate)
 | 
			
		||||
            return;
 | 
			
		||||
        const pattern = this.pattern;
 | 
			
		||||
        let negate = false;
 | 
			
		||||
        let negateOffset = 0;
 | 
			
		||||
        for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {
 | 
			
		||||
            negate = !negate;
 | 
			
		||||
            negateOffset++;
 | 
			
		||||
        }
 | 
			
		||||
        if (negateOffset)
 | 
			
		||||
            this.pattern = pattern.slice(negateOffset);
 | 
			
		||||
        this.negate = negate;
 | 
			
		||||
    }
 | 
			
		||||
    // set partial to true to test if, for example,
 | 
			
		||||
    // "/a/b" matches the start of "/*/b/*/d"
 | 
			
		||||
    // Partial means, if you run out of file before you run
 | 
			
		||||
    // out of pattern, then that's fine, as long as all
 | 
			
		||||
    // the parts match.
 | 
			
		||||
    matchOne(file, pattern, partial = false) {
 | 
			
		||||
        const options = this.options;
 | 
			
		||||
        // UNC paths like //?/X:/... can match X:/... and vice versa
 | 
			
		||||
        // Drive letters in absolute drive or unc paths are always compared
 | 
			
		||||
        // case-insensitively.
 | 
			
		||||
        if (this.isWindows) {
 | 
			
		||||
            const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);
 | 
			
		||||
            const fileUNC = !fileDrive &&
 | 
			
		||||
                file[0] === '' &&
 | 
			
		||||
                file[1] === '' &&
 | 
			
		||||
                file[2] === '?' &&
 | 
			
		||||
                /^[a-z]:$/i.test(file[3]);
 | 
			
		||||
            const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);
 | 
			
		||||
            const patternUNC = !patternDrive &&
 | 
			
		||||
                pattern[0] === '' &&
 | 
			
		||||
                pattern[1] === '' &&
 | 
			
		||||
                pattern[2] === '?' &&
 | 
			
		||||
                typeof pattern[3] === 'string' &&
 | 
			
		||||
                /^[a-z]:$/i.test(pattern[3]);
 | 
			
		||||
            const fdi = fileUNC ? 3 : fileDrive ? 0 : undefined;
 | 
			
		||||
            const pdi = patternUNC ? 3 : patternDrive ? 0 : undefined;
 | 
			
		||||
            if (typeof fdi === 'number' && typeof pdi === 'number') {
 | 
			
		||||
                const [fd, pd] = [file[fdi], pattern[pdi]];
 | 
			
		||||
                if (fd.toLowerCase() === pd.toLowerCase()) {
 | 
			
		||||
                    pattern[pdi] = fd;
 | 
			
		||||
                    if (pdi > fdi) {
 | 
			
		||||
                        pattern = pattern.slice(pdi);
 | 
			
		||||
                    }
 | 
			
		||||
                    else if (fdi > pdi) {
 | 
			
		||||
                        file = file.slice(fdi);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // resolve and reduce . and .. portions in the file as well.
 | 
			
		||||
        // dont' need to do the second phase, because it's only one string[]
 | 
			
		||||
        const { optimizationLevel = 1 } = this.options;
 | 
			
		||||
        if (optimizationLevel >= 2) {
 | 
			
		||||
            file = this.levelTwoFileOptimize(file);
 | 
			
		||||
        }
 | 
			
		||||
        this.debug('matchOne', this, { file, pattern });
 | 
			
		||||
        this.debug('matchOne', file.length, pattern.length);
 | 
			
		||||
        for (var fi = 0, pi = 0, fl = file.length, pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {
 | 
			
		||||
            this.debug('matchOne loop');
 | 
			
		||||
            var p = pattern[pi];
 | 
			
		||||
            var f = file[fi];
 | 
			
		||||
            this.debug(pattern, p, f);
 | 
			
		||||
            // should be impossible.
 | 
			
		||||
            // some invalid regexp stuff in the set.
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
            if (p === false) {
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            /* c8 ignore stop */
 | 
			
		||||
            if (p === GLOBSTAR) {
 | 
			
		||||
                this.debug('GLOBSTAR', [pattern, p, f]);
 | 
			
		||||
                // "**"
 | 
			
		||||
                // a/**/b/**/c would match the following:
 | 
			
		||||
                // a/b/x/y/z/c
 | 
			
		||||
                // a/x/y/z/b/c
 | 
			
		||||
                // a/b/x/b/x/c
 | 
			
		||||
                // a/b/c
 | 
			
		||||
                // To do this, take the rest of the pattern after
 | 
			
		||||
                // the **, and see if it would match the file remainder.
 | 
			
		||||
                // If so, return success.
 | 
			
		||||
                // If not, the ** "swallows" a segment, and try again.
 | 
			
		||||
                // This is recursively awful.
 | 
			
		||||
                //
 | 
			
		||||
                // a/**/b/**/c matching a/b/x/y/z/c
 | 
			
		||||
                // - a matches a
 | 
			
		||||
                // - doublestar
 | 
			
		||||
                //   - matchOne(b/x/y/z/c, b/**/c)
 | 
			
		||||
                //     - b matches b
 | 
			
		||||
                //     - doublestar
 | 
			
		||||
                //       - matchOne(x/y/z/c, c) -> no
 | 
			
		||||
                //       - matchOne(y/z/c, c) -> no
 | 
			
		||||
                //       - matchOne(z/c, c) -> no
 | 
			
		||||
                //       - matchOne(c, c) yes, hit
 | 
			
		||||
                var fr = fi;
 | 
			
		||||
                var pr = pi + 1;
 | 
			
		||||
                if (pr === pl) {
 | 
			
		||||
                    this.debug('** at the end');
 | 
			
		||||
                    // a ** at the end will just swallow the rest.
 | 
			
		||||
                    // We have found a match.
 | 
			
		||||
                    // however, it will not swallow /.x, unless
 | 
			
		||||
                    // options.dot is set.
 | 
			
		||||
                    // . and .. are *never* matched by **, for explosively
 | 
			
		||||
                    // exponential reasons.
 | 
			
		||||
                    for (; fi < fl; fi++) {
 | 
			
		||||
                        if (file[fi] === '.' ||
 | 
			
		||||
                            file[fi] === '..' ||
 | 
			
		||||
                            (!options.dot && file[fi].charAt(0) === '.'))
 | 
			
		||||
                            return false;
 | 
			
		||||
                    }
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                // ok, let's see if we can swallow whatever we can.
 | 
			
		||||
                while (fr < fl) {
 | 
			
		||||
                    var swallowee = file[fr];
 | 
			
		||||
                    this.debug('\nglobstar while', file, fr, pattern, pr, swallowee);
 | 
			
		||||
                    // XXX remove this slice.  Just pass the start index.
 | 
			
		||||
                    if (this.matchOne(file.slice(fr), pattern.slice(pr), partial)) {
 | 
			
		||||
                        this.debug('globstar found match!', fr, fl, swallowee);
 | 
			
		||||
                        // found a match.
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        // can't swallow "." or ".." ever.
 | 
			
		||||
                        // can only swallow ".foo" when explicitly asked.
 | 
			
		||||
                        if (swallowee === '.' ||
 | 
			
		||||
                            swallowee === '..' ||
 | 
			
		||||
                            (!options.dot && swallowee.charAt(0) === '.')) {
 | 
			
		||||
                            this.debug('dot detected!', file, fr, pattern, pr);
 | 
			
		||||
                            break;
 | 
			
		||||
                        }
 | 
			
		||||
                        // ** swallows a segment, and continue.
 | 
			
		||||
                        this.debug('globstar swallow a segment, and continue');
 | 
			
		||||
                        fr++;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                // no match was found.
 | 
			
		||||
                // However, in partial mode, we can't say this is necessarily over.
 | 
			
		||||
                /* c8 ignore start */
 | 
			
		||||
                if (partial) {
 | 
			
		||||
                    // ran out of file
 | 
			
		||||
                    this.debug('\n>>> no match, partial?', file, fr, pattern, pr);
 | 
			
		||||
                    if (fr === fl) {
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                /* c8 ignore stop */
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
            // something other than **
 | 
			
		||||
            // non-magic patterns just have to match exactly
 | 
			
		||||
            // patterns with magic have been turned into regexps.
 | 
			
		||||
            let hit;
 | 
			
		||||
            if (typeof p === 'string') {
 | 
			
		||||
                hit = f === p;
 | 
			
		||||
                this.debug('string match', p, f, hit);
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                hit = p.test(f);
 | 
			
		||||
                this.debug('pattern match', p, f, hit);
 | 
			
		||||
            }
 | 
			
		||||
            if (!hit)
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        // Note: ending in / means that we'll get a final ""
 | 
			
		||||
        // at the end of the pattern.  This can only match a
 | 
			
		||||
        // corresponding "" at the end of the file.
 | 
			
		||||
        // If the file ends in /, then it can only match a
 | 
			
		||||
        // a pattern that ends in /, unless the pattern just
 | 
			
		||||
        // doesn't have any more for it. But, a/b/ should *not*
 | 
			
		||||
        // match "a/b/*", even though "" matches against the
 | 
			
		||||
        // [^/]*? pattern, except in partial mode, where it might
 | 
			
		||||
        // simply not be reached yet.
 | 
			
		||||
        // However, a/b/ should still satisfy a/*
 | 
			
		||||
        // now either we fell off the end of the pattern, or we're done.
 | 
			
		||||
        if (fi === fl && pi === pl) {
 | 
			
		||||
            // ran out of pattern and filename at the same time.
 | 
			
		||||
            // an exact hit!
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        else if (fi === fl) {
 | 
			
		||||
            // ran out of file, but still had pattern left.
 | 
			
		||||
            // this is ok if we're doing the match as part of
 | 
			
		||||
            // a glob fs traversal.
 | 
			
		||||
            return partial;
 | 
			
		||||
        }
 | 
			
		||||
        else if (pi === pl) {
 | 
			
		||||
            // ran out of pattern, still have file left.
 | 
			
		||||
            // this is only acceptable if we're on the very last
 | 
			
		||||
            // empty segment of a file with a trailing slash.
 | 
			
		||||
            // a/* should match a/b/
 | 
			
		||||
            return fi === fl - 1 && file[fi] === '';
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            // should be unreachable.
 | 
			
		||||
            throw new Error('wtf?');
 | 
			
		||||
        }
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
    }
 | 
			
		||||
    braceExpand() {
 | 
			
		||||
        return braceExpand(this.pattern, this.options);
 | 
			
		||||
    }
 | 
			
		||||
    parse(pattern) {
 | 
			
		||||
        assertValidPattern(pattern);
 | 
			
		||||
        const options = this.options;
 | 
			
		||||
        // shortcuts
 | 
			
		||||
        if (pattern === '**')
 | 
			
		||||
            return GLOBSTAR;
 | 
			
		||||
        if (pattern === '')
 | 
			
		||||
            return '';
 | 
			
		||||
        // far and away, the most common glob pattern parts are
 | 
			
		||||
        // *, *.*, and *.<ext>  Add a fast check method for those.
 | 
			
		||||
        let m;
 | 
			
		||||
        let fastTest = null;
 | 
			
		||||
        if ((m = pattern.match(starRE))) {
 | 
			
		||||
            fastTest = options.dot ? starTestDot : starTest;
 | 
			
		||||
        }
 | 
			
		||||
        else if ((m = pattern.match(starDotExtRE))) {
 | 
			
		||||
            fastTest = (options.nocase
 | 
			
		||||
                ? options.dot
 | 
			
		||||
                    ? starDotExtTestNocaseDot
 | 
			
		||||
                    : starDotExtTestNocase
 | 
			
		||||
                : options.dot
 | 
			
		||||
                    ? starDotExtTestDot
 | 
			
		||||
                    : starDotExtTest)(m[1]);
 | 
			
		||||
        }
 | 
			
		||||
        else if ((m = pattern.match(qmarksRE))) {
 | 
			
		||||
            fastTest = (options.nocase
 | 
			
		||||
                ? options.dot
 | 
			
		||||
                    ? qmarksTestNocaseDot
 | 
			
		||||
                    : qmarksTestNocase
 | 
			
		||||
                : options.dot
 | 
			
		||||
                    ? qmarksTestDot
 | 
			
		||||
                    : qmarksTest)(m);
 | 
			
		||||
        }
 | 
			
		||||
        else if ((m = pattern.match(starDotStarRE))) {
 | 
			
		||||
            fastTest = options.dot ? starDotStarTestDot : starDotStarTest;
 | 
			
		||||
        }
 | 
			
		||||
        else if ((m = pattern.match(dotStarRE))) {
 | 
			
		||||
            fastTest = dotStarTest;
 | 
			
		||||
        }
 | 
			
		||||
        const re = AST.fromGlob(pattern, this.options).toMMPattern();
 | 
			
		||||
        return fastTest ? Object.assign(re, { test: fastTest }) : re;
 | 
			
		||||
    }
 | 
			
		||||
    makeRe() {
 | 
			
		||||
        if (this.regexp || this.regexp === false)
 | 
			
		||||
            return this.regexp;
 | 
			
		||||
        // at this point, this.set is a 2d array of partial
 | 
			
		||||
        // pattern strings, or "**".
 | 
			
		||||
        //
 | 
			
		||||
        // It's better to use .match().  This function shouldn't
 | 
			
		||||
        // be used, really, but it's pretty convenient sometimes,
 | 
			
		||||
        // when you just want to work with a regex.
 | 
			
		||||
        const set = this.set;
 | 
			
		||||
        if (!set.length) {
 | 
			
		||||
            this.regexp = false;
 | 
			
		||||
            return this.regexp;
 | 
			
		||||
        }
 | 
			
		||||
        const options = this.options;
 | 
			
		||||
        const twoStar = options.noglobstar
 | 
			
		||||
            ? star
 | 
			
		||||
            : options.dot
 | 
			
		||||
                ? twoStarDot
 | 
			
		||||
                : twoStarNoDot;
 | 
			
		||||
        const flags = new Set(options.nocase ? ['i'] : []);
 | 
			
		||||
        // regexpify non-globstar patterns
 | 
			
		||||
        // if ** is only item, then we just do one twoStar
 | 
			
		||||
        // if ** is first, and there are more, prepend (\/|twoStar\/)? to next
 | 
			
		||||
        // if ** is last, append (\/twoStar|) to previous
 | 
			
		||||
        // if ** is in the middle, append (\/|\/twoStar\/) to previous
 | 
			
		||||
        // then filter out GLOBSTAR symbols
 | 
			
		||||
        let re = set
 | 
			
		||||
            .map(pattern => {
 | 
			
		||||
            const pp = pattern.map(p => {
 | 
			
		||||
                if (p instanceof RegExp) {
 | 
			
		||||
                    for (const f of p.flags.split(''))
 | 
			
		||||
                        flags.add(f);
 | 
			
		||||
                }
 | 
			
		||||
                return typeof p === 'string'
 | 
			
		||||
                    ? regExpEscape(p)
 | 
			
		||||
                    : p === GLOBSTAR
 | 
			
		||||
                        ? GLOBSTAR
 | 
			
		||||
                        : p._src;
 | 
			
		||||
            });
 | 
			
		||||
            pp.forEach((p, i) => {
 | 
			
		||||
                const next = pp[i + 1];
 | 
			
		||||
                const prev = pp[i - 1];
 | 
			
		||||
                if (p !== GLOBSTAR || prev === GLOBSTAR) {
 | 
			
		||||
                    return;
 | 
			
		||||
                }
 | 
			
		||||
                if (prev === undefined) {
 | 
			
		||||
                    if (next !== undefined && next !== GLOBSTAR) {
 | 
			
		||||
                        pp[i + 1] = '(?:\\/|' + twoStar + '\\/)?' + next;
 | 
			
		||||
                    }
 | 
			
		||||
                    else {
 | 
			
		||||
                        pp[i] = twoStar;
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                else if (next === undefined) {
 | 
			
		||||
                    pp[i - 1] = prev + '(?:\\/|' + twoStar + ')?';
 | 
			
		||||
                }
 | 
			
		||||
                else if (next !== GLOBSTAR) {
 | 
			
		||||
                    pp[i - 1] = prev + '(?:\\/|\\/' + twoStar + '\\/)' + next;
 | 
			
		||||
                    pp[i + 1] = GLOBSTAR;
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
            return pp.filter(p => p !== GLOBSTAR).join('/');
 | 
			
		||||
        })
 | 
			
		||||
            .join('|');
 | 
			
		||||
        // need to wrap in parens if we had more than one thing with |,
 | 
			
		||||
        // otherwise only the first will be anchored to ^ and the last to $
 | 
			
		||||
        const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];
 | 
			
		||||
        // must match entire pattern
 | 
			
		||||
        // ending in a * or ** will make it less strict.
 | 
			
		||||
        re = '^' + open + re + close + '$';
 | 
			
		||||
        // can match anything, as long as it's not this.
 | 
			
		||||
        if (this.negate)
 | 
			
		||||
            re = '^(?!' + re + ').+$';
 | 
			
		||||
        try {
 | 
			
		||||
            this.regexp = new RegExp(re, [...flags].join(''));
 | 
			
		||||
            /* c8 ignore start */
 | 
			
		||||
        }
 | 
			
		||||
        catch (ex) {
 | 
			
		||||
            // should be impossible
 | 
			
		||||
            this.regexp = false;
 | 
			
		||||
        }
 | 
			
		||||
        /* c8 ignore stop */
 | 
			
		||||
        return this.regexp;
 | 
			
		||||
    }
 | 
			
		||||
    slashSplit(p) {
 | 
			
		||||
        // if p starts with // on windows, we preserve that
 | 
			
		||||
        // so that UNC paths aren't broken.  Otherwise, any number of
 | 
			
		||||
        // / characters are coalesced into one, unless
 | 
			
		||||
        // preserveMultipleSlashes is set to true.
 | 
			
		||||
        if (this.preserveMultipleSlashes) {
 | 
			
		||||
            return p.split('/');
 | 
			
		||||
        }
 | 
			
		||||
        else if (this.isWindows && /^\/\/[^\/]+/.test(p)) {
 | 
			
		||||
            // add an extra '' for the one we lose
 | 
			
		||||
            return ['', ...p.split(/\/+/)];
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return p.split(/\/+/);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    match(f, partial = this.partial) {
 | 
			
		||||
        this.debug('match', f, this.pattern);
 | 
			
		||||
        // short-circuit in the case of busted things.
 | 
			
		||||
        // comments, etc.
 | 
			
		||||
        if (this.comment) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        if (this.empty) {
 | 
			
		||||
            return f === '';
 | 
			
		||||
        }
 | 
			
		||||
        if (f === '/' && partial) {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        const options = this.options;
 | 
			
		||||
        // windows: need to use /, not \
 | 
			
		||||
        if (this.isWindows) {
 | 
			
		||||
            f = f.split('\\').join('/');
 | 
			
		||||
        }
 | 
			
		||||
        // treat the test path as a set of pathparts.
 | 
			
		||||
        const ff = this.slashSplit(f);
 | 
			
		||||
        this.debug(this.pattern, 'split', ff);
 | 
			
		||||
        // just ONE of the pattern sets in this.set needs to match
 | 
			
		||||
        // in order for it to be valid.  If negating, then just one
 | 
			
		||||
        // match means that we have failed.
 | 
			
		||||
        // Either way, return on the first hit.
 | 
			
		||||
        const set = this.set;
 | 
			
		||||
        this.debug(this.pattern, 'set', set);
 | 
			
		||||
        // Find the basename of the path by looking for the last non-empty segment
 | 
			
		||||
        let filename = ff[ff.length - 1];
 | 
			
		||||
        if (!filename) {
 | 
			
		||||
            for (let i = ff.length - 2; !filename && i >= 0; i--) {
 | 
			
		||||
                filename = ff[i];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        for (let i = 0; i < set.length; i++) {
 | 
			
		||||
            const pattern = set[i];
 | 
			
		||||
            let file = ff;
 | 
			
		||||
            if (options.matchBase && pattern.length === 1) {
 | 
			
		||||
                file = [filename];
 | 
			
		||||
            }
 | 
			
		||||
            const hit = this.matchOne(file, pattern, partial);
 | 
			
		||||
            if (hit) {
 | 
			
		||||
                if (options.flipNegate) {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
                return !this.negate;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        // didn't get any hits.  this is success if it's a negative
 | 
			
		||||
        // pattern, failure otherwise.
 | 
			
		||||
        if (options.flipNegate) {
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
        return this.negate;
 | 
			
		||||
    }
 | 
			
		||||
    static defaults(def) {
 | 
			
		||||
        return minimatch.defaults(def).Minimatch;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
/* c8 ignore start */
 | 
			
		||||
export { AST } from './ast.js';
 | 
			
		||||
export { escape } from './escape.js';
 | 
			
		||||
export { unescape } from './unescape.js';
 | 
			
		||||
/* c8 ignore stop */
 | 
			
		||||
minimatch.AST = AST;
 | 
			
		||||
minimatch.Minimatch = Minimatch;
 | 
			
		||||
minimatch.escape = escape;
 | 
			
		||||
minimatch.unescape = unescape;
 | 
			
		||||
//# sourceMappingURL=index.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/index.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										3
									
								
								node_modules/minimatch/dist/mjs/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								node_modules/minimatch/dist/mjs/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
{
 | 
			
		||||
  "type": "module"
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								node_modules/minimatch/dist/mjs/unescape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								node_modules/minimatch/dist/mjs/unescape.d.ts
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import { MinimatchOptions } from './index.js';
 | 
			
		||||
/**
 | 
			
		||||
 * Un-escape a string that has been escaped with {@link escape}.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape} option is used, then square-brace
 | 
			
		||||
 * escapes are removed, but not backslash escapes.  For example, it will turn
 | 
			
		||||
 * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
 | 
			
		||||
 * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
 | 
			
		||||
 *
 | 
			
		||||
 * When `windowsPathsNoEscape` is not set, then both brace escapes and
 | 
			
		||||
 * backslash escapes are removed.
 | 
			
		||||
 *
 | 
			
		||||
 * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
 | 
			
		||||
 * or unescaped.
 | 
			
		||||
 */
 | 
			
		||||
export declare const unescape: (s: string, { windowsPathsNoEscape, }?: Pick<MinimatchOptions, 'windowsPathsNoEscape'>) => string;
 | 
			
		||||
//# sourceMappingURL=unescape.d.ts.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/unescape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/unescape.d.ts.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"unescape.d.ts","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAC7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,QAAQ,MAChB,MAAM,8BAGN,KAAK,gBAAgB,EAAE,sBAAsB,CAAC,WAKlD,CAAA"}
 | 
			
		||||
							
								
								
									
										20
									
								
								node_modules/minimatch/dist/mjs/unescape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								node_modules/minimatch/dist/mjs/unescape.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Un-escape a string that has been escaped with {@link escape}.
 | 
			
		||||
 *
 | 
			
		||||
 * If the {@link windowsPathsNoEscape} option is used, then square-brace
 | 
			
		||||
 * escapes are removed, but not backslash escapes.  For example, it will turn
 | 
			
		||||
 * the string `'[*]'` into `*`, but it will not turn `'\\*'` into `'*'`,
 | 
			
		||||
 * becuase `\` is a path separator in `windowsPathsNoEscape` mode.
 | 
			
		||||
 *
 | 
			
		||||
 * When `windowsPathsNoEscape` is not set, then both brace escapes and
 | 
			
		||||
 * backslash escapes are removed.
 | 
			
		||||
 *
 | 
			
		||||
 * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped
 | 
			
		||||
 * or unescaped.
 | 
			
		||||
 */
 | 
			
		||||
export const unescape = (s, { windowsPathsNoEscape = false, } = {}) => {
 | 
			
		||||
    return windowsPathsNoEscape
 | 
			
		||||
        ? s.replace(/\[([^\/\\])\]/g, '$1')
 | 
			
		||||
        : s.replace(/((?!\\).|^)\[([^\/\\])\]/g, '$1$2').replace(/\\([^\/])/g, '$1');
 | 
			
		||||
};
 | 
			
		||||
//# sourceMappingURL=unescape.js.map
 | 
			
		||||
							
								
								
									
										1
									
								
								node_modules/minimatch/dist/mjs/unescape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								node_modules/minimatch/dist/mjs/unescape.js.map
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
{"version":3,"file":"unescape.js","sourceRoot":"","sources":["../../src/unescape.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,CAAS,EACT,EACE,oBAAoB,GAAG,KAAK,MACsB,EAAE,EACtD,EAAE;IACF,OAAO,oBAAoB;QACzB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,IAAI,CAAC;QACnC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;AAChF,CAAC,CAAA","sourcesContent":["import { MinimatchOptions } from './index.js'\n/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link windowsPathsNoEscape} option is used, then square-brace\n * escapes are removed, but not backslash escapes.  For example, it will turn\n * the string `'[*]'` into `*`, but it will not turn `'\\\\*'` into `'*'`,\n * becuase `\\` is a path separator in `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both brace escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n */\nexport const unescape = (\n  s: string,\n  {\n    windowsPathsNoEscape = false,\n  }: Pick<MinimatchOptions, 'windowsPathsNoEscape'> = {}\n) => {\n  return windowsPathsNoEscape\n    ? s.replace(/\\[([^\\/\\\\])\\]/g, '$1')\n    : s.replace(/((?!\\\\).|^)\\[([^\\/\\\\])\\]/g, '$1$2').replace(/\\\\([^\\/])/g, '$1')\n}\n"]}
 | 
			
		||||
							
								
								
									
										86
									
								
								node_modules/minimatch/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								node_modules/minimatch/package.json
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
{
 | 
			
		||||
  "author": "Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me)",
 | 
			
		||||
  "name": "minimatch",
 | 
			
		||||
  "description": "a glob matcher in javascript",
 | 
			
		||||
  "version": "9.0.3",
 | 
			
		||||
  "repository": {
 | 
			
		||||
    "type": "git",
 | 
			
		||||
    "url": "git://github.com/isaacs/minimatch.git"
 | 
			
		||||
  },
 | 
			
		||||
  "main": "./dist/cjs/index.js",
 | 
			
		||||
  "module": "./dist/mjs/index.js",
 | 
			
		||||
  "types": "./dist/cjs/index.d.ts",
 | 
			
		||||
  "exports": {
 | 
			
		||||
    ".": {
 | 
			
		||||
      "import": {
 | 
			
		||||
        "types": "./dist/mjs/index.d.ts",
 | 
			
		||||
        "default": "./dist/mjs/index.js"
 | 
			
		||||
      },
 | 
			
		||||
      "require": {
 | 
			
		||||
        "types": "./dist/cjs/index.d.ts",
 | 
			
		||||
        "default": "./dist/cjs/index.js"
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  "files": [
 | 
			
		||||
    "dist"
 | 
			
		||||
  ],
 | 
			
		||||
  "scripts": {
 | 
			
		||||
    "preversion": "npm test",
 | 
			
		||||
    "postversion": "npm publish",
 | 
			
		||||
    "prepublishOnly": "git push origin --follow-tags",
 | 
			
		||||
    "preprepare": "rm -rf dist",
 | 
			
		||||
    "prepare": "tsc -p tsconfig.json && tsc -p tsconfig-esm.json",
 | 
			
		||||
    "postprepare": "bash fixup.sh",
 | 
			
		||||
    "pretest": "npm run prepare",
 | 
			
		||||
    "presnap": "npm run prepare",
 | 
			
		||||
    "test": "c8 tap",
 | 
			
		||||
    "snap": "c8 tap",
 | 
			
		||||
    "format": "prettier --write . --loglevel warn",
 | 
			
		||||
    "benchmark": "node benchmark/index.js",
 | 
			
		||||
    "typedoc": "typedoc --tsconfig tsconfig-esm.json ./src/*.ts"
 | 
			
		||||
  },
 | 
			
		||||
  "prettier": {
 | 
			
		||||
    "semi": false,
 | 
			
		||||
    "printWidth": 80,
 | 
			
		||||
    "tabWidth": 2,
 | 
			
		||||
    "useTabs": false,
 | 
			
		||||
    "singleQuote": true,
 | 
			
		||||
    "jsxSingleQuote": false,
 | 
			
		||||
    "bracketSameLine": true,
 | 
			
		||||
    "arrowParens": "avoid",
 | 
			
		||||
    "endOfLine": "lf"
 | 
			
		||||
  },
 | 
			
		||||
  "engines": {
 | 
			
		||||
    "node": ">=16 || 14 >=14.17"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "brace-expansion": "^2.0.1"
 | 
			
		||||
  },
 | 
			
		||||
  "devDependencies": {
 | 
			
		||||
    "@types/brace-expansion": "^1.1.0",
 | 
			
		||||
    "@types/node": "^18.15.11",
 | 
			
		||||
    "@types/tap": "^15.0.8",
 | 
			
		||||
    "c8": "^7.12.0",
 | 
			
		||||
    "eslint-config-prettier": "^8.6.0",
 | 
			
		||||
    "mkdirp": "1",
 | 
			
		||||
    "prettier": "^2.8.2",
 | 
			
		||||
    "tap": "^16.3.7",
 | 
			
		||||
    "ts-node": "^10.9.1",
 | 
			
		||||
    "typedoc": "^0.23.21",
 | 
			
		||||
    "typescript": "^4.9.3"
 | 
			
		||||
  },
 | 
			
		||||
  "tap": {
 | 
			
		||||
    "coverage": false,
 | 
			
		||||
    "node-arg": [
 | 
			
		||||
      "--no-warnings",
 | 
			
		||||
      "--loader",
 | 
			
		||||
      "ts-node/esm"
 | 
			
		||||
    ],
 | 
			
		||||
    "ts": false
 | 
			
		||||
  },
 | 
			
		||||
  "funding": {
 | 
			
		||||
    "url": "https://github.com/sponsors/isaacs"
 | 
			
		||||
  },
 | 
			
		||||
  "license": "ISC"
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user