@cmflow/atlas 3.4.0-beta.2 → 3.4.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +231 -5
- package/dist/bin/atlas.d.mts +2 -0
- package/dist/bin/atlas.mjs +29100 -3106
- package/dist/bin/atlas.mjs.map +1 -0
- package/dist/defineExpressionRule-GhkeHHT8.mjs +10 -0
- package/dist/defineExpressionRule-GhkeHHT8.mjs.map +1 -0
- package/dist/index.d.mts +36 -0
- package/dist/index.mjs +1297 -0
- package/dist/index.mjs.map +1 -0
- package/dist/propertyExtractionService-8BjqpPFa.mjs +172 -0
- package/dist/propertyExtractionService-8BjqpPFa.mjs.map +1 -0
- package/dist/rolldown-runtime-CGR6nZuH.mjs +34 -0
- package/dist/routeBackendTopologyService-CkOLUfcj.mjs +8728 -0
- package/dist/routeBackendTopologyService-CkOLUfcj.mjs.map +1 -0
- package/dist/rules/lodashGetRule.d.mts +7 -0
- package/dist/rules/lodashGetRule.mjs +24 -0
- package/dist/rules/lodashGetRule.mjs.map +1 -0
- package/dist/rules/mappingUtilityRule.d.mts +7 -0
- package/dist/rules/mappingUtilityRule.mjs +38 -0
- package/dist/rules/mappingUtilityRule.mjs.map +1 -0
- package/dist/rules/memberGetFieldRule.d.mts +7 -0
- package/dist/rules/memberGetFieldRule.mjs +27 -0
- package/dist/rules/memberGetFieldRule.mjs.map +1 -0
- package/dist/taskProgressService-CAC_RIoa.mjs +1229 -0
- package/dist/taskProgressService-CAC_RIoa.mjs.map +1 -0
- package/dist/token-CiiblKFL.mjs +62 -0
- package/dist/token-CiiblKFL.mjs.map +1 -0
- package/dist/token-util-Br4-y5kE.mjs +7 -0
- package/dist/token-util-Dnzm6rU4.mjs +471 -0
- package/dist/token-util-Dnzm6rU4.mjs.map +1 -0
- package/dist/types-Af0_VOnh.d.mts +122 -0
- package/dist/workers/routeBackendTopologyWorker.d.mts +2 -0
- package/dist/workers/routeBackendTopologyWorker.mjs +34 -0
- package/dist/workers/routeBackendTopologyWorker.mjs.map +1 -0
- package/knowledges/cms-and-directus-indirect-routes.md +5 -3
- package/package.json +22 -13
- package/dist/defineRule-Dfvzj6n2.mjs +0 -2
- package/dist/defineRule-Dfvzj6n2.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routeBackendTopologyService-CkOLUfcj.mjs","names":["PassThroughStream","#streams","#onFinished","#ended","#aborted","os","path","util","path","path","path","path","PassThrough","fs","fs","path","stream_1","path","path","stream_1","path","fs","execFileCallback","gitIgnore","normalizeOptions","process","fastGlob","path","nodePath","process","fastGlob","regExpEscape","star","#parent","#root","#parts","#hasMagic","#options","#negs","#filledNegs","#parentIndex","#toString","#parseAST","#canAdoptType","#emptyExt","#canAdopt","#adopt","#canUsurpType","#flatten","#fillNegs","#parseGlob","#uflag","#partsToRegExp","#canAdoptWithSpace","#adoptWithSpace","#canUsurp","#usurp","path","#matchGlobstar","#matchOne","#matchGlobStarBodySections"],"sources":["../../../node_modules/@sindresorhus/merge-streams/index.js","../../../node_modules/fast-glob/out/utils/array.js","../../../node_modules/fast-glob/out/utils/errno.js","../../../node_modules/fast-glob/out/utils/fs.js","../../../node_modules/fast-glob/out/utils/path.js","../../../node_modules/is-extglob/index.js","../../../node_modules/is-glob/index.js","../../../node_modules/glob-parent/index.js","../../../node_modules/braces/lib/utils.js","../../../node_modules/braces/lib/stringify.js","../../../node_modules/is-number/index.js","../../../node_modules/to-regex-range/index.js","../../../node_modules/fill-range/index.js","../../../node_modules/braces/lib/compile.js","../../../node_modules/braces/lib/expand.js","../../../node_modules/braces/lib/constants.js","../../../node_modules/braces/lib/parse.js","../../../node_modules/braces/index.js","../../../node_modules/micromatch/node_modules/picomatch/lib/constants.js","../../../node_modules/micromatch/node_modules/picomatch/lib/utils.js","../../../node_modules/micromatch/node_modules/picomatch/lib/scan.js","../../../node_modules/micromatch/node_modules/picomatch/lib/parse.js","../../../node_modules/micromatch/node_modules/picomatch/lib/picomatch.js","../../../node_modules/micromatch/node_modules/picomatch/index.js","../../../node_modules/micromatch/index.js","../../../node_modules/fast-glob/out/utils/pattern.js","../../../node_modules/merge2/index.js","../../../node_modules/fast-glob/out/utils/stream.js","../../../node_modules/fast-glob/out/utils/string.js","../../../node_modules/fast-glob/out/utils/index.js","../../../node_modules/fast-glob/out/managers/tasks.js","../../../node_modules/@nodelib/fs.stat/out/providers/async.js","../../../node_modules/@nodelib/fs.stat/out/providers/sync.js","../../../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../../../node_modules/@nodelib/fs.stat/out/settings.js","../../../node_modules/@nodelib/fs.stat/out/index.js","../../../node_modules/queue-microtask/index.js","../../../node_modules/run-parallel/index.js","../../../node_modules/@nodelib/fs.scandir/out/constants.js","../../../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../../../node_modules/@nodelib/fs.scandir/out/utils/index.js","../../../node_modules/@nodelib/fs.scandir/out/providers/common.js","../../../node_modules/@nodelib/fs.scandir/out/providers/async.js","../../../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../../../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../../../node_modules/@nodelib/fs.scandir/out/settings.js","../../../node_modules/@nodelib/fs.scandir/out/index.js","../../../node_modules/reusify/reusify.js","../../../node_modules/fastq/queue.js","../../../node_modules/@nodelib/fs.walk/out/readers/common.js","../../../node_modules/@nodelib/fs.walk/out/readers/reader.js","../../../node_modules/@nodelib/fs.walk/out/readers/async.js","../../../node_modules/@nodelib/fs.walk/out/providers/async.js","../../../node_modules/@nodelib/fs.walk/out/providers/stream.js","../../../node_modules/@nodelib/fs.walk/out/readers/sync.js","../../../node_modules/@nodelib/fs.walk/out/providers/sync.js","../../../node_modules/@nodelib/fs.walk/out/settings.js","../../../node_modules/@nodelib/fs.walk/out/index.js","../../../node_modules/fast-glob/out/readers/reader.js","../../../node_modules/fast-glob/out/readers/stream.js","../../../node_modules/fast-glob/out/readers/async.js","../../../node_modules/fast-glob/out/providers/matchers/matcher.js","../../../node_modules/fast-glob/out/providers/matchers/partial.js","../../../node_modules/fast-glob/out/providers/filters/deep.js","../../../node_modules/fast-glob/out/providers/filters/entry.js","../../../node_modules/fast-glob/out/providers/filters/error.js","../../../node_modules/fast-glob/out/providers/transformers/entry.js","../../../node_modules/fast-glob/out/providers/provider.js","../../../node_modules/fast-glob/out/providers/async.js","../../../node_modules/fast-glob/out/providers/stream.js","../../../node_modules/fast-glob/out/readers/sync.js","../../../node_modules/fast-glob/out/providers/sync.js","../../../node_modules/fast-glob/out/settings.js","../../../node_modules/fast-glob/out/index.js","../../../node_modules/path-type/index.js","../../../node_modules/unicorn-magic/node.js","../../../node_modules/ignore/index.js","../../../node_modules/slash/index.js","../../../node_modules/globby/utilities.js","../../../node_modules/globby/ignore.js","../../../node_modules/globby/index.js","../../../node_modules/balanced-match/dist/esm/index.js","../../../node_modules/brace-expansion/dist/esm/index.js","../../../node_modules/minimatch/dist/esm/assert-valid-pattern.js","../../../node_modules/minimatch/dist/esm/brace-expressions.js","../../../node_modules/minimatch/dist/esm/unescape.js","../../../node_modules/minimatch/dist/esm/ast.js","../../../node_modules/minimatch/dist/esm/escape.js","../../../node_modules/minimatch/dist/esm/index.js","../src/services/analysisFileService.ts","../src/config/utils/isKnowBackendType.ts","../src/services/backendSourceService.ts","../src/utils/resolveAliasPath.ts","../src/utils/tryResolveWithExtensions.ts","../src/utils/resolveModulePath.ts","../src/services/routeBackendTopologyService.ts"],"sourcesContent":["import {on, once} from 'node:events';\nimport {PassThrough as PassThroughStream} from 'node:stream';\nimport {finished} from 'node:stream/promises';\n\nexport default function mergeStreams(streams) {\n\tif (!Array.isArray(streams)) {\n\t\tthrow new TypeError(`Expected an array, got \\`${typeof streams}\\`.`);\n\t}\n\n\tfor (const stream of streams) {\n\t\tvalidateStream(stream);\n\t}\n\n\tconst objectMode = streams.some(({readableObjectMode}) => readableObjectMode);\n\tconst highWaterMark = getHighWaterMark(streams, objectMode);\n\tconst passThroughStream = new MergedStream({\n\t\tobjectMode,\n\t\twritableHighWaterMark: highWaterMark,\n\t\treadableHighWaterMark: highWaterMark,\n\t});\n\n\tfor (const stream of streams) {\n\t\tpassThroughStream.add(stream);\n\t}\n\n\tif (streams.length === 0) {\n\t\tendStream(passThroughStream);\n\t}\n\n\treturn passThroughStream;\n}\n\nconst getHighWaterMark = (streams, objectMode) => {\n\tif (streams.length === 0) {\n\t\t// @todo Use `node:stream` `getDefaultHighWaterMark(objectMode)` in next major release\n\t\treturn 16_384;\n\t}\n\n\tconst highWaterMarks = streams\n\t\t.filter(({readableObjectMode}) => readableObjectMode === objectMode)\n\t\t.map(({readableHighWaterMark}) => readableHighWaterMark);\n\treturn Math.max(...highWaterMarks);\n};\n\nclass MergedStream extends PassThroughStream {\n\t#streams = new Set([]);\n\t#ended = new Set([]);\n\t#aborted = new Set([]);\n\t#onFinished;\n\n\tadd(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (this.#streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#streams.add(stream);\n\n\t\tthis.#onFinished ??= onMergedStreamFinished(this, this.#streams);\n\t\tendWhenStreamsDone({\n\t\t\tpassThroughStream: this,\n\t\t\tstream,\n\t\t\tstreams: this.#streams,\n\t\t\tended: this.#ended,\n\t\t\taborted: this.#aborted,\n\t\t\tonFinished: this.#onFinished,\n\t\t});\n\n\t\tstream.pipe(this, {end: false});\n\t}\n\n\tremove(stream) {\n\t\tvalidateStream(stream);\n\n\t\tif (!this.#streams.has(stream)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tstream.unpipe(this);\n\t\treturn true;\n\t}\n}\n\nconst onMergedStreamFinished = async (passThroughStream, streams) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_COUNT);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tonMergedStreamEnd(passThroughStream, controller),\n\t\t\tonInputStreamsUnpipe(passThroughStream, streams, controller),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_COUNT);\n\t}\n};\n\nconst onMergedStreamEnd = async (passThroughStream, {signal}) => {\n\tawait finished(passThroughStream, {signal, cleanup: true});\n};\n\nconst onInputStreamsUnpipe = async (passThroughStream, streams, {signal}) => {\n\tfor await (const [unpipedStream] of on(passThroughStream, 'unpipe', {signal})) {\n\t\tif (streams.has(unpipedStream)) {\n\t\t\tunpipedStream.emit(unpipeEvent);\n\t\t}\n\t}\n};\n\nconst validateStream = stream => {\n\tif (typeof stream?.pipe !== 'function') {\n\t\tthrow new TypeError(`Expected a readable stream, got: \\`${typeof stream}\\`.`);\n\t}\n};\n\nconst endWhenStreamsDone = async ({passThroughStream, stream, streams, ended, aborted, onFinished}) => {\n\tupdateMaxListeners(passThroughStream, PASSTHROUGH_LISTENERS_PER_STREAM);\n\tconst controller = new AbortController();\n\n\ttry {\n\t\tawait Promise.race([\n\t\t\tafterMergedStreamFinished(onFinished, stream),\n\t\t\tonInputStreamEnd({passThroughStream, stream, streams, ended, aborted, controller}),\n\t\t\tonInputStreamUnpipe({stream, streams, ended, aborted, controller}),\n\t\t]);\n\t} finally {\n\t\tcontroller.abort();\n\t\tupdateMaxListeners(passThroughStream, -PASSTHROUGH_LISTENERS_PER_STREAM);\n\t}\n\n\tif (streams.size === ended.size + aborted.size) {\n\t\tif (ended.size === 0 && aborted.size > 0) {\n\t\t\tabortStream(passThroughStream);\n\t\t} else {\n\t\t\tendStream(passThroughStream);\n\t\t}\n\t}\n};\n\n// This is the error thrown by `finished()` on `stream.destroy()`\nconst isAbortError = error => error?.code === 'ERR_STREAM_PREMATURE_CLOSE';\n\nconst afterMergedStreamFinished = async (onFinished, stream) => {\n\ttry {\n\t\tawait onFinished;\n\t\tabortStream(stream);\n\t} catch (error) {\n\t\tif (isAbortError(error)) {\n\t\t\tabortStream(stream);\n\t\t} else {\n\t\t\terrorStream(stream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamEnd = async ({passThroughStream, stream, streams, ended, aborted, controller: {signal}}) => {\n\ttry {\n\t\tawait finished(stream, {signal, cleanup: true, readable: true, writable: false});\n\t\tif (streams.has(stream)) {\n\t\t\tended.add(stream);\n\t\t}\n\t} catch (error) {\n\t\tif (signal.aborted || !streams.has(stream)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (isAbortError(error)) {\n\t\t\taborted.add(stream);\n\t\t} else {\n\t\t\terrorStream(passThroughStream, error);\n\t\t}\n\t}\n};\n\nconst onInputStreamUnpipe = async ({stream, streams, ended, aborted, controller: {signal}}) => {\n\tawait once(stream, unpipeEvent, {signal});\n\tstreams.delete(stream);\n\tended.delete(stream);\n\taborted.delete(stream);\n};\n\nconst unpipeEvent = Symbol('unpipe');\n\nconst endStream = stream => {\n\tif (stream.writable) {\n\t\tstream.end();\n\t}\n};\n\nconst abortStream = stream => {\n\tif (stream.readable || stream.writable) {\n\t\tstream.destroy();\n\t}\n};\n\n// `stream.destroy(error)` crashes the process with `uncaughtException` if no `error` event listener exists on `stream`.\n// We take care of error handling on user behalf, so we do not want this to happen.\nconst errorStream = (stream, error) => {\n\tif (!stream.destroyed) {\n\t\tstream.once('error', noop);\n\t\tstream.destroy(error);\n\t}\n};\n\nconst noop = () => {};\n\nconst updateMaxListeners = (passThroughStream, increment) => {\n\tconst maxListeners = passThroughStream.getMaxListeners();\n\tif (maxListeners !== 0 && maxListeners !== Number.POSITIVE_INFINITY) {\n\t\tpassThroughStream.setMaxListeners(maxListeners + increment);\n\t}\n};\n\n// Number of times `passThroughStream.on()` is called regardless of streams:\n// - once due to `finished(passThroughStream)`\n// - once due to `on(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_COUNT = 2;\n\n// Number of times `passThroughStream.on()` is called per stream:\n// - once due to `stream.pipe(passThroughStream)`\nconst PASSTHROUGH_LISTENERS_PER_STREAM = 1;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n const result = [[]];\n let groupIndex = 0;\n for (const item of items) {\n if (predicate(item)) {\n groupIndex++;\n result[groupIndex] = [];\n }\n else {\n result[groupIndex].push(item);\n }\n }\n return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entry.charAt(0) === '.') {\n const secondCharactery = entry.charAt(1);\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n }\n }\n return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n return escapeWindowsPath(filepath)\n .replace(DOS_DEVICE_PATH_RE, '//$1')\n .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\nconst DEFAULT_MAX_EXTGLOB_RECURSION = 0;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n __proto__: null,\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n DEFAULT_MAX_EXTGLOB_RECURSION,\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n __proto__: null,\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\nconst splitTopLevel = input => {\n const parts = [];\n let bracket = 0;\n let paren = 0;\n let quote = 0;\n let value = '';\n let escaped = false;\n\n for (const ch of input) {\n if (escaped === true) {\n value += ch;\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n value += ch;\n escaped = true;\n continue;\n }\n\n if (ch === '\"') {\n quote = quote === 1 ? 0 : 1;\n value += ch;\n continue;\n }\n\n if (quote === 0) {\n if (ch === '[') {\n bracket++;\n } else if (ch === ']' && bracket > 0) {\n bracket--;\n } else if (bracket === 0) {\n if (ch === '(') {\n paren++;\n } else if (ch === ')' && paren > 0) {\n paren--;\n } else if (ch === '|' && paren === 0) {\n parts.push(value);\n value = '';\n continue;\n }\n }\n }\n\n value += ch;\n }\n\n parts.push(value);\n return parts;\n};\n\nconst isPlainBranch = branch => {\n let escaped = false;\n\n for (const ch of branch) {\n if (escaped === true) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n escaped = true;\n continue;\n }\n\n if (/[?*+@!()[\\]{}]/.test(ch)) {\n return false;\n }\n }\n\n return true;\n};\n\nconst normalizeSimpleBranch = branch => {\n let value = branch.trim();\n let changed = true;\n\n while (changed === true) {\n changed = false;\n\n if (/^@\\([^\\\\()[\\]{}|]+\\)$/.test(value)) {\n value = value.slice(2, -1);\n changed = true;\n }\n }\n\n if (!isPlainBranch(value)) {\n return;\n }\n\n return value.replace(/\\\\(.)/g, '$1');\n};\n\nconst hasRepeatedCharPrefixOverlap = branches => {\n const values = branches.map(normalizeSimpleBranch).filter(Boolean);\n\n for (let i = 0; i < values.length; i++) {\n for (let j = i + 1; j < values.length; j++) {\n const a = values[i];\n const b = values[j];\n const char = a[0];\n\n if (!char || a !== char.repeat(a.length) || b !== char.repeat(b.length)) {\n continue;\n }\n\n if (a === b || a.startsWith(b) || b.startsWith(a)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\nconst parseRepeatedExtglob = (pattern, requireEnd = true) => {\n if ((pattern[0] !== '+' && pattern[0] !== '*') || pattern[1] !== '(') {\n return;\n }\n\n let bracket = 0;\n let paren = 0;\n let quote = 0;\n let escaped = false;\n\n for (let i = 1; i < pattern.length; i++) {\n const ch = pattern[i];\n\n if (escaped === true) {\n escaped = false;\n continue;\n }\n\n if (ch === '\\\\') {\n escaped = true;\n continue;\n }\n\n if (ch === '\"') {\n quote = quote === 1 ? 0 : 1;\n continue;\n }\n\n if (quote === 1) {\n continue;\n }\n\n if (ch === '[') {\n bracket++;\n continue;\n }\n\n if (ch === ']' && bracket > 0) {\n bracket--;\n continue;\n }\n\n if (bracket > 0) {\n continue;\n }\n\n if (ch === '(') {\n paren++;\n continue;\n }\n\n if (ch === ')') {\n paren--;\n\n if (paren === 0) {\n if (requireEnd === true && i !== pattern.length - 1) {\n return;\n }\n\n return {\n type: pattern[0],\n body: pattern.slice(2, i),\n end: i\n };\n }\n }\n }\n};\n\nconst getStarExtglobSequenceOutput = pattern => {\n let index = 0;\n const chars = [];\n\n while (index < pattern.length) {\n const match = parseRepeatedExtglob(pattern.slice(index), false);\n\n if (!match || match.type !== '*') {\n return;\n }\n\n const branches = splitTopLevel(match.body).map(branch => branch.trim());\n if (branches.length !== 1) {\n return;\n }\n\n const branch = normalizeSimpleBranch(branches[0]);\n if (!branch || branch.length !== 1) {\n return;\n }\n\n chars.push(branch);\n index += match.end + 1;\n }\n\n if (chars.length < 1) {\n return;\n }\n\n const source = chars.length === 1\n ? utils.escapeRegex(chars[0])\n : `[${chars.map(ch => utils.escapeRegex(ch)).join('')}]`;\n\n return `${source}*`;\n};\n\nconst repeatedExtglobRecursion = pattern => {\n let depth = 0;\n let value = pattern.trim();\n let match = parseRepeatedExtglob(value);\n\n while (match) {\n depth++;\n value = match.body.trim();\n match = parseRepeatedExtglob(value);\n }\n\n return depth;\n};\n\nconst analyzeRepeatedExtglob = (body, options) => {\n if (options.maxExtglobRecursion === false) {\n return { risky: false };\n }\n\n const max =\n typeof options.maxExtglobRecursion === 'number'\n ? options.maxExtglobRecursion\n : constants.DEFAULT_MAX_EXTGLOB_RECURSION;\n\n const branches = splitTopLevel(body).map(branch => branch.trim());\n\n if (branches.length > 1) {\n if (\n branches.some(branch => branch === '') ||\n branches.some(branch => /^[*?]+$/.test(branch)) ||\n hasRepeatedCharPrefixOverlap(branches)\n ) {\n return { risky: true };\n }\n }\n\n for (const branch of branches) {\n const safeOutput = getStarExtglobSequenceOutput(branch);\n if (safeOutput) {\n return { risky: true, safeOutput };\n }\n\n if (repeatedExtglobRecursion(branch) > max) {\n return { risky: true };\n }\n }\n\n return { risky: false };\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n token.startIndex = state.index;\n token.tokensIndex = tokens.length;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n const literal = input.slice(token.startIndex, state.index + 1);\n const body = input.slice(token.startIndex + 2, state.index);\n const analysis = analyzeRepeatedExtglob(body, opts);\n\n if ((token.type === 'plus' || token.type === 'star') && analysis.risky) {\n const safeOutput = analysis.safeOutput\n ? (token.output ? '' : ONE_CHAR) + (opts.capture ? `(${analysis.safeOutput})` : analysis.safeOutput)\n : undefined;\n const open = tokens[token.tokensIndex];\n\n open.type = 'text';\n open.value = literal;\n open.output = safeOutput || utils.escapeRegex(literal);\n\n for (let i = token.tokensIndex + 1; i < tokens.length; i++) {\n tokens[i].value = '';\n tokens[i].output = '';\n delete tokens[i].suffix;\n }\n\n state.output = token.output + open.output;\n state.backtrack = true;\n\n push({ type: 'paren', extglob: true, value, output: '' });\n decrement('parens');\n return;\n }\n\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n /**\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n * An empty string cannot be a dynamic pattern.\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n */\n if (pattern === '') {\n return false;\n }\n /**\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n * filepath directly (without read directory).\n */\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n return true;\n }\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n return true;\n }\n return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n const openingBraceIndex = pattern.indexOf('{');\n if (openingBraceIndex === -1) {\n return false;\n }\n const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n if (closingBraceIndex === -1) {\n return false;\n }\n const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n const basename = path.basename(pattern);\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n return patterns.reduce((collection, pattern) => {\n return collection.concat(expandBraceExpansion(pattern));\n }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n /**\n * Sort the patterns by length so that the same depth patterns are processed side by side.\n * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n */\n patterns.sort((a, b) => a.length - b.length);\n /**\n * Micromatch can return an empty string in the case of patterns like `{a,}`.\n */\n return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n /**\n * The scan method returns an empty array in some cases.\n * See micromatch/picomatch#58 for more details.\n */\n if (parts.length === 0) {\n parts = [pattern];\n }\n /**\n * The scan method does not return an empty part for the pattern with a forward slash.\n * This is another part of micromatch/picomatch#58.\n */\n if (parts[0].startsWith('/')) {\n parts[0] = parts[0].slice(1);\n parts.unshift('');\n }\n return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n const absolute = [];\n const relative = [];\n for (const pattern of patterns) {\n if (isAbsolute(pattern)) {\n absolute.push(pattern);\n }\n else {\n relative.push(pattern);\n }\n }\n return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n const mergedStream = merge2(streams);\n streams.forEach((stream) => {\n stream.once('error', (error) => mergedStream.emit('error', error));\n });\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\n return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n const patterns = processPatterns(input, settings);\n const ignore = processPatterns(settings.ignore, settings);\n const positivePatterns = getPositivePatterns(patterns);\n const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n let patterns = input;\n /**\n * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n *\n * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n * in matching in the case of a large set of patterns after expansion.\n */\n if (settings.braceExpansion) {\n patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n }\n /**\n * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n * at any nesting level.\n *\n * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n * in the application. Only on the input.\n */\n if (settings.baseNameMatch) {\n patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n }\n /**\n * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n */\n return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n const tasks = [];\n const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n /*\n * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n */\n if ('.' in insideCurrentDirectoryGroup) {\n tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n }\n else {\n tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n }\n return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n const positive = negative.map(utils.pattern.convertToPositivePattern);\n return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n const group = {};\n return patterns.reduce((collection, pattern) => {\n const base = utils.pattern.getBaseDirectory(pattern);\n if (base in collection) {\n collection[base].push(pattern);\n }\n else {\n collection[base] = [pattern];\n }\n return collection;\n }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n return Object.keys(positive).map((base) => {\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n return {\n dynamic,\n positive,\n negative,\n base,\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n settings.fs.lstat(path, (lstatError, lstat) => {\n if (lstatError !== null) {\n callFailureCallback(callback, lstatError);\n return;\n }\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n callSuccessCallback(callback, lstat);\n return;\n }\n settings.fs.stat(path, (statError, stat) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n callFailureCallback(callback, statError);\n return;\n }\n callSuccessCallback(callback, lstat);\n return;\n }\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n callSuccessCallback(callback, stat);\n });\n });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n const lstat = settings.fs.lstatSync(path);\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n return lstat;\n }\n try {\n const stat = settings.fs.statSync(path);\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n return stat;\n }\n catch (error) {\n if (!settings.throwErrorOnBrokenSymbolicLink) {\n return lstat;\n }\n throw error;\n }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n let results, pending, keys\n let isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) queueMicrotask(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n readdirWithFileTypes(directory, settings, callback);\n return;\n }\n readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const entries = dirents.map((dirent) => ({\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n }));\n if (!settings.followSymbolicLinks) {\n callSuccessCallback(callback, entries);\n return;\n }\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n rpl(tasks, (rplError, rplEntries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, rplEntries);\n });\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n return (done) => {\n if (!entry.dirent.isSymbolicLink()) {\n done(null, entry);\n return;\n }\n settings.fs.stat(entry.path, (statError, stats) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n done(statError);\n return;\n }\n done(null, entry);\n return;\n }\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n done(null, entry);\n });\n };\n}\nfunction readdir(directory, settings, callback) {\n settings.fs.readdir(directory, (readdirError, names) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const tasks = names.map((name) => {\n const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n return (done) => {\n fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n if (error !== null) {\n done(error);\n return;\n }\n const entry = {\n name,\n path,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n done(null, entry);\n });\n };\n });\n rpl(tasks, (rplError, entries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, entries);\n });\n });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n return readdirWithFileTypes(directory, settings);\n }\n return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n return dirents.map((dirent) => {\n const entry = {\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n };\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n try {\n const stats = settings.fs.statSync(entry.path);\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n }\n catch (error) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n throw error;\n }\n }\n }\n return entry;\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n const names = settings.fs.readdirSync(directory);\n return names.map((name) => {\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n const entry = {\n name,\n path: entryPath,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n return entry;\n });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.stats = this._getValue(this._options.stats, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n this.fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this.followSymbolicLinks,\n fs: this.fs,\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n if (!(_concurrency >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n\n get concurrency () {\n return _concurrency\n },\n set concurrency (value) {\n if (!(value >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n _concurrency = value\n\n if (self.paused) return\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n },\n\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error,\n abort: abort\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n if (queueHead === null) {\n _running++\n release()\n return\n }\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next && _running <= _concurrency) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function abort () {\n var current = queueHead\n queueHead = null\n queueTail = null\n\n while (current) {\n var next = current.next\n var callback = current.callback\n var errorHandler = current.errorHandler\n var val = current.value\n var context = current.context\n\n // Reset the task state\n current.value = null\n current.callback = noop\n current.errorHandler = null\n\n // Call error handler if present\n if (errorHandler) {\n errorHandler(new Error('abort'), val)\n }\n\n // Call callback with error\n callback.call(context, new Error('abort'))\n\n // Release the task back to the pool\n current.release(current)\n\n current = next\n }\n\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n function asyncWrapper (arg, cb) {\n worker.call(this, arg)\n .then(function (res) {\n cb(null, res)\n }, cb)\n }\n\n var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n var pushCb = queue.push\n var unshiftCb = queue.unshift\n\n queue.push = push\n queue.unshift = unshift\n queue.drained = drained\n\n return queue\n\n function push (value) {\n var p = new Promise(function (resolve, reject) {\n pushCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function unshift (value) {\n var p = new Promise(function (resolve, reject) {\n unshiftCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function drained () {\n var p = new Promise(function (resolve) {\n process.nextTick(function () {\n if (queue.idle()) {\n resolve()\n } else {\n var previousDrain = queue.drain\n queue.drain = function () {\n if (typeof previousDrain === 'function') previousDrain()\n resolve()\n queue.drain = previousDrain\n }\n }\n })\n })\n\n return p\n }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n if (settings.errorFilter === null) {\n return true;\n }\n return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n if (a === '') {\n return b;\n }\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n constructor(_root, _settings) {\n super(_root, _settings);\n this._settings = _settings;\n this._scandir = fsScandir.scandir;\n this._emitter = new events_1.EventEmitter();\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n this._isFatalError = false;\n this._isDestroyed = false;\n this._queue.drain = () => {\n if (!this._isFatalError) {\n this._emitter.emit('end');\n }\n };\n }\n read() {\n this._isFatalError = false;\n this._isDestroyed = false;\n setImmediate(() => {\n this._pushToQueue(this._root, this._settings.basePath);\n });\n return this._emitter;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n destroy() {\n if (this._isDestroyed) {\n throw new Error('The reader is already destroyed');\n }\n this._isDestroyed = true;\n this._queue.killAndDrain();\n }\n onEntry(callback) {\n this._emitter.on('entry', callback);\n }\n onError(callback) {\n this._emitter.once('error', callback);\n }\n onEnd(callback) {\n this._emitter.once('end', callback);\n }\n _pushToQueue(directory, base) {\n const queueItem = { directory, base };\n this._queue.push(queueItem, (error) => {\n if (error !== null) {\n this._handleError(error);\n }\n });\n }\n _worker(item, done) {\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n if (error !== null) {\n done(error, undefined);\n return;\n }\n for (const entry of entries) {\n this._handleEntry(entry, item.base);\n }\n done(null, undefined);\n });\n }\n _handleError(error) {\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n return;\n }\n this._isFatalError = true;\n this._isDestroyed = true;\n this._emitter.emit('error', error);\n }\n _handleEntry(entry, base) {\n if (this._isDestroyed || this._isFatalError) {\n return;\n }\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._emitEntry(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _emitEntry(entry) {\n this._emitter.emit('entry', entry);\n }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._storage = [];\n }\n read(callback) {\n this._reader.onError((error) => {\n callFailureCallback(callback, error);\n });\n this._reader.onEntry((entry) => {\n this._storage.push(entry);\n });\n this._reader.onEnd(() => {\n callSuccessCallback(callback, this._storage);\n });\n this._reader.read();\n }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._stream = new stream_1.Readable({\n objectMode: true,\n read: () => { },\n destroy: () => {\n if (!this._reader.isDestroyed) {\n this._reader.destroy();\n }\n }\n });\n }\n read() {\n this._reader.onError((error) => {\n this._stream.emit('error', error);\n });\n this._reader.onEntry((entry) => {\n this._stream.push(entry);\n });\n this._reader.onEnd(() => {\n this._stream.push(null);\n });\n this._reader.read();\n return this._stream;\n }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n constructor() {\n super(...arguments);\n this._scandir = fsScandir.scandirSync;\n this._storage = [];\n this._queue = new Set();\n }\n read() {\n this._pushToQueue(this._root, this._settings.basePath);\n this._handleQueue();\n return this._storage;\n }\n _pushToQueue(directory, base) {\n this._queue.add({ directory, base });\n }\n _handleQueue() {\n for (const item of this._queue.values()) {\n this._handleDirectory(item.directory, item.base);\n }\n }\n _handleDirectory(directory, base) {\n try {\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\n for (const entry of entries) {\n this._handleEntry(entry, base);\n }\n }\n catch (error) {\n this._handleError(error);\n }\n }\n _handleError(error) {\n if (!common.isFatalError(this._settings, error)) {\n return;\n }\n throw error;\n }\n _handleEntry(entry, base) {\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._pushToStorage(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _pushToStorage(entry) {\n this._storage.push(entry);\n }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new sync_1.default(this._root, this._settings);\n }\n read() {\n return this._reader.read();\n }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.basePath = this._getValue(this._options.basePath, undefined);\n this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n this.deepFilter = this._getValue(this._options.deepFilter, null);\n this.entryFilter = this._getValue(this._options.entryFilter, null);\n this.errorFilter = this._getValue(this._options.errorFilter, null);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.fsScandirSettings = new fsScandir.Settings({\n followSymbolicLinks: this._options.followSymbolicLinks,\n fs: this._options.fs,\n pathSegmentSeparator: this._options.pathSegmentSeparator,\n stats: this._options.stats,\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n return;\n }\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new sync_1.default(directory, settings);\n return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new stream_1.default(directory, settings);\n return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n constructor(_settings) {\n this._settings = _settings;\n this._fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n });\n }\n _getFullEntryPath(filepath) {\n return path.resolve(this._settings.cwd, filepath);\n }\n _makeEntry(stats, pattern) {\n const entry = {\n name: pattern,\n path: pattern,\n dirent: utils.fs.createDirentFromStats(pattern, stats)\n };\n if (this._settings.stats) {\n entry.stats = stats;\n }\n return entry;\n }\n _isFatalError(error) {\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkStream = fsWalk.walkStream;\n this._stat = fsStat.stat;\n }\n dynamic(root, options) {\n return this._walkStream(root, options);\n }\n static(patterns, options) {\n const filepaths = patterns.map(this._getFullEntryPath, this);\n const stream = new stream_1.PassThrough({ objectMode: true });\n stream._write = (index, _enc, done) => {\n return this._getEntry(filepaths[index], patterns[index], options)\n .then((entry) => {\n if (entry !== null && options.entryFilter(entry)) {\n stream.push(entry);\n }\n if (index === filepaths.length - 1) {\n stream.end();\n }\n done();\n })\n .catch(done);\n };\n for (let i = 0; i < filepaths.length; i++) {\n stream.write(i);\n }\n return stream;\n }\n _getEntry(filepath, pattern, options) {\n return this._getStat(filepath)\n .then((stats) => this._makeEntry(stats, pattern))\n .catch((error) => {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n });\n }\n _getStat(filepath) {\n return new Promise((resolve, reject) => {\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\n return error === null ? resolve(stats) : reject(error);\n });\n });\n }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkAsync = fsWalk.walk;\n this._readerStream = new stream_1.default(this._settings);\n }\n dynamic(root, options) {\n return new Promise((resolve, reject) => {\n this._walkAsync(root, options, (error, entries) => {\n if (error === null) {\n resolve(entries);\n }\n else {\n reject(error);\n }\n });\n });\n }\n async static(patterns, options) {\n const entries = [];\n const stream = this._readerStream.static(patterns, options);\n // After #235, replace it with an asynchronous iterator.\n return new Promise((resolve, reject) => {\n stream.once('error', reject);\n stream.on('data', (entry) => entries.push(entry));\n stream.once('end', () => resolve(entries));\n });\n }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n constructor(_patterns, _settings, _micromatchOptions) {\n this._patterns = _patterns;\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this._storage = [];\n this._fillStorage();\n }\n _fillStorage() {\n for (const pattern of this._patterns) {\n const segments = this._getPatternSegments(pattern);\n const sections = this._splitSegmentsIntoSections(segments);\n this._storage.push({\n complete: sections.length <= 1,\n pattern,\n segments,\n sections\n });\n }\n }\n _getPatternSegments(pattern) {\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n return parts.map((part) => {\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n if (!dynamic) {\n return {\n dynamic: false,\n pattern: part\n };\n }\n return {\n dynamic: true,\n pattern: part,\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n };\n });\n }\n _splitSegmentsIntoSections(segments) {\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n match(filepath) {\n const parts = filepath.split('/');\n const levels = parts.length;\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n for (const pattern of patterns) {\n const section = pattern.sections[0];\n /**\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\n * but only if the level has reached the end of the first group.\n *\n * fixtures/{a,b}/**\n * ^ true/false ^ always true\n */\n if (!pattern.complete && levels > section.length) {\n return true;\n }\n const match = parts.every((part, index) => {\n const segment = pattern.segments[index];\n if (segment.dynamic && segment.patternRe.test(part)) {\n return true;\n }\n if (!segment.dynamic && segment.pattern === part) {\n return true;\n }\n return false;\n });\n if (match) {\n return true;\n }\n }\n return false;\n }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n }\n getFilter(basePath, positive, negative) {\n const matcher = this._getMatcher(positive);\n const negativeRe = this._getNegativePatternsRe(negative);\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n }\n _getMatcher(patterns) {\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n }\n _getNegativePatternsRe(patterns) {\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n }\n _filter(basePath, entry, matcher, negativeRe) {\n if (this._isSkippedByDeep(basePath, entry.path)) {\n return false;\n }\n if (this._isSkippedSymbolicLink(entry)) {\n return false;\n }\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n return false;\n }\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\n }\n _isSkippedByDeep(basePath, entryPath) {\n /**\n * Avoid unnecessary depth calculations when it doesn't matter.\n */\n if (this._settings.deep === Infinity) {\n return false;\n }\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n }\n _getEntryLevel(basePath, entryPath) {\n const entryPathDepth = entryPath.split('/').length;\n if (basePath === '') {\n return entryPathDepth;\n }\n const basePathDepth = basePath.split('/').length;\n return entryPathDepth - basePathDepth;\n }\n _isSkippedSymbolicLink(entry) {\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n }\n _isSkippedByPositivePatterns(entryPath, matcher) {\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\n }\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\n return !utils.pattern.matchAny(entryPath, patternsRe);\n }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this.index = new Map();\n }\n getFilter(positive, negative) {\n const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n const patterns = {\n positive: {\n all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n },\n negative: {\n absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n }\n };\n return (entry) => this._filter(entry, patterns);\n }\n _filter(entry, patterns) {\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n return false;\n }\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n return false;\n }\n const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n if (this._settings.unique && isMatched) {\n this._createIndexRecord(filepath);\n }\n return isMatched;\n }\n _isDuplicateEntry(filepath) {\n return this.index.has(filepath);\n }\n _createIndexRecord(filepath) {\n this.index.set(filepath, undefined);\n }\n _onlyFileFilter(entry) {\n return this._settings.onlyFiles && !entry.dirent.isFile();\n }\n _onlyDirectoryFilter(entry) {\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n }\n _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n if (!isMatched) {\n return false;\n }\n const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n if (isMatchedByRelativeNegative) {\n return false;\n }\n const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n if (isMatchedByAbsoluteNegative) {\n return false;\n }\n return true;\n }\n _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n }\n _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n // Trying to match files and directories by patterns.\n const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n // A pattern with a trailling slash can be used for directory matching.\n // To apply such pattern, we need to add a tralling slash to the path.\n if (!isMatched && isDirectory) {\n return utils.pattern.matchAny(filepath + '/', patternsRe);\n }\n return isMatched;\n }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n constructor(_settings) {\n this._settings = _settings;\n }\n getFilter() {\n return (error) => this._isNonFatalError(error);\n }\n _isNonFatalError(error) {\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n constructor(_settings) {\n this._settings = _settings;\n }\n getTransformer() {\n return (entry) => this._transform(entry);\n }\n _transform(entry) {\n let filepath = entry.path;\n if (this._settings.absolute) {\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n filepath = utils.path.unixify(filepath);\n }\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n filepath += '/';\n }\n if (!this._settings.objectMode) {\n return filepath;\n }\n return Object.assign(Object.assign({}, entry), { path: filepath });\n }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n constructor(_settings) {\n this._settings = _settings;\n this.errorFilter = new error_1.default(this._settings);\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n this.entryTransformer = new entry_2.default(this._settings);\n }\n _getRootDirectory(task) {\n return path.resolve(this._settings.cwd, task.base);\n }\n _getReaderOptions(task) {\n const basePath = task.base === '.' ? '' : task.base;\n return {\n basePath,\n pathSegmentSeparator: '/',\n concurrency: this._settings.concurrency,\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n errorFilter: this.errorFilter.getFilter(),\n followSymbolicLinks: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n stats: this._settings.stats,\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n transform: this.entryTransformer.getTransformer()\n };\n }\n _getMicromatchOptions() {\n return {\n dot: this._settings.dot,\n matchBase: this._settings.baseNameMatch,\n nobrace: !this._settings.braceExpansion,\n nocase: !this._settings.caseSensitiveMatch,\n noext: !this._settings.extglob,\n noglobstar: !this._settings.globstar,\n posix: true,\n strictSlashes: false\n };\n }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new async_1.default(this._settings);\n }\n async read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = await this.api(root, task, options);\n return entries.map((entry) => options.transform(entry));\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_2.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const source = this.api(root, task, options);\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n source\n .once('error', (error) => destination.emit('error', error))\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\n .once('end', () => destination.emit('end'));\n destination\n .once('close', () => source.destroy());\n return destination;\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkSync = fsWalk.walkSync;\n this._statSync = fsStat.statSync;\n }\n dynamic(root, options) {\n return this._walkSync(root, options);\n }\n static(patterns, options) {\n const entries = [];\n for (const pattern of patterns) {\n const filepath = this._getFullEntryPath(pattern);\n const entry = this._getEntry(filepath, pattern, options);\n if (entry === null || !options.entryFilter(entry)) {\n continue;\n }\n entries.push(entry);\n }\n return entries;\n }\n _getEntry(filepath, pattern, options) {\n try {\n const stats = this._getStat(filepath);\n return this._makeEntry(stats, pattern);\n }\n catch (error) {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n }\n }\n _getStat(filepath) {\n return this._statSync(filepath, this._fsStatSettings);\n }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new sync_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = this.api(root, task, options);\n return entries.map(options.transform);\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n lstatSync: fs.lstatSync,\n stat: fs.stat,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.absolute = this._getValue(this._options.absolute, false);\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n this.cwd = this._getValue(this._options.cwd, process.cwd());\n this.deep = this._getValue(this._options.deep, Infinity);\n this.dot = this._getValue(this._options.dot, false);\n this.extglob = this._getValue(this._options.extglob, true);\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n this.fs = this._getFileSystemMethods(this._options.fs);\n this.globstar = this._getValue(this._options.globstar, true);\n this.ignore = this._getValue(this._options.ignore, []);\n this.markDirectories = this._getValue(this._options.markDirectories, false);\n this.objectMode = this._getValue(this._options.objectMode, false);\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n this.stats = this._getValue(this._options.stats, false);\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n this.unique = this._getValue(this._options.unique, true);\n if (this.onlyDirectories) {\n this.onlyFiles = false;\n }\n if (this.stats) {\n this.objectMode = true;\n }\n // Remove the cast to the array in the next major (#404).\n this.ignore = [].concat(this.ignore);\n }\n _getValue(option, value) {\n return option === undefined ? value : option;\n }\n _getFileSystemMethods(methods = {}) {\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, async_1.default, options);\n const result = await Promise.all(works);\n return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n FastGlob.glob = FastGlob;\n FastGlob.globSync = sync;\n FastGlob.globStream = stream;\n FastGlob.async = FastGlob;\n function sync(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, sync_1.default, options);\n return utils.array.flatten(works);\n }\n FastGlob.sync = sync;\n function stream(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, stream_1.default, options);\n /**\n * The stream returned by the provider cannot work with an asynchronous iterator.\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n * This affects performance (+25%). I don't see best solution right now.\n */\n return utils.stream.merge(works);\n }\n FastGlob.stream = stream;\n function generateTasks(source, options) {\n assertPatternsInput(source);\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n return taskManager.generate(patterns, settings);\n }\n FastGlob.generateTasks = generateTasks;\n function isDynamicPattern(source, options) {\n assertPatternsInput(source);\n const settings = new settings_1.default(options);\n return utils.pattern.isDynamicPattern(source, settings);\n }\n FastGlob.isDynamicPattern = isDynamicPattern;\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escape(source);\n }\n FastGlob.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPathToPattern(source);\n }\n FastGlob.convertPathToPattern = convertPathToPattern;\n let posix;\n (function (posix) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapePosixPath(source);\n }\n posix.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPosixPathToPattern(source);\n }\n posix.convertPathToPattern = convertPathToPattern;\n })(posix = FastGlob.posix || (FastGlob.posix = {}));\n let win32;\n (function (win32) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapeWindowsPath(source);\n }\n win32.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertWindowsPathToPattern(source);\n }\n win32.convertPathToPattern = convertPathToPattern;\n })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n const tasks = taskManager.generate(patterns, settings);\n const provider = new _Provider(settings);\n return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n const source = [].concat(input);\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n if (!isValidSource) {\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n }\n}\nmodule.exports = FastGlob;\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\n\nasync function isType(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\tconst stats = await fsPromises[fsStatType](filePath);\n\t\treturn stats[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nfunction isTypeSync(fsStatType, statsMethodName, filePath) {\n\tif (typeof filePath !== 'string') {\n\t\tthrow new TypeError(`Expected a string, got ${typeof filePath}`);\n\t}\n\n\ttry {\n\t\treturn fs[fsStatType](filePath)[statsMethodName]();\n\t} catch (error) {\n\t\tif (error.code === 'ENOENT') {\n\t\t\treturn false;\n\t\t}\n\n\t\tthrow error;\n\t}\n}\n\nexport const isFile = isType.bind(undefined, 'stat', 'isFile');\nexport const isDirectory = isType.bind(undefined, 'stat', 'isDirectory');\nexport const isSymlink = isType.bind(undefined, 'lstat', 'isSymbolicLink');\nexport const isFileSync = isTypeSync.bind(undefined, 'statSync', 'isFile');\nexport const isDirectorySync = isTypeSync.bind(undefined, 'statSync', 'isDirectory');\nexport const isSymlinkSync = isTypeSync.bind(undefined, 'lstatSync', 'isSymbolicLink');\n","import {promisify} from 'node:util';\nimport {execFile as execFileCallback, execFileSync as execFileSyncOriginal} from 'node:child_process';\nimport path from 'node:path';\nimport {fileURLToPath} from 'node:url';\n\nconst execFileOriginal = promisify(execFileCallback);\n\nexport function toPath(urlOrPath) {\n\treturn urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n}\n\nexport function rootDirectory(pathInput) {\n\treturn path.parse(toPath(pathInput)).root;\n}\n\nexport function traversePathUp(startPath) {\n\treturn {\n\t\t* [Symbol.iterator]() {\n\t\t\tlet currentPath = path.resolve(toPath(startPath));\n\t\t\tlet previousPath;\n\n\t\t\twhile (previousPath !== currentPath) {\n\t\t\t\tyield currentPath;\n\t\t\t\tpreviousPath = currentPath;\n\t\t\t\tcurrentPath = path.resolve(currentPath, '..');\n\t\t\t}\n\t\t},\n\t};\n}\n\nconst TEN_MEGABYTES_IN_BYTES = 10 * 1024 * 1024;\n\nexport async function execFile(file, arguments_, options = {}) {\n\treturn execFileOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\t...options,\n\t});\n}\n\nexport function execFileSync(file, arguments_ = [], options = {}) {\n\treturn execFileSyncOriginal(file, arguments_, {\n\t\tmaxBuffer: TEN_MEGABYTES_IN_BYTES,\n\t\tencoding: 'utf8',\n\t\tstdio: 'pipe',\n\t\t...options,\n\t});\n}\n\nexport * from './default.js';\n","// A simple implementation of make-array\nfunction makeArray (subject) {\n return Array.isArray(subject)\n ? subject\n : [subject]\n}\n\nconst UNDEFINED = undefined\nconst EMPTY = ''\nconst SPACE = ' '\nconst ESCAPE = '\\\\'\nconst REGEX_TEST_BLANK_LINE = /^\\s+$/\nconst REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\\\]|^)\\\\$/\nconst REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\\\!/\nconst REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\\\#/\nconst REGEX_SPLITALL_CRLF = /\\r?\\n/g\n\n// Invalid:\n// - /foo,\n// - ./foo,\n// - ../foo,\n// - .\n// - ..\n// Valid:\n// - .foo\nconst REGEX_TEST_INVALID_PATH = /^\\.{0,2}\\/|^\\.{1,2}$/\n\nconst REGEX_TEST_TRAILING_SLASH = /\\/$/\n\nconst SLASH = '/'\n\n// Do not use ternary expression here, since \"istanbul ignore next\" is buggy\nlet TMP_KEY_IGNORE = 'node-ignore'\n/* istanbul ignore else */\nif (typeof Symbol !== 'undefined') {\n TMP_KEY_IGNORE = Symbol.for('node-ignore')\n}\nconst KEY_IGNORE = TMP_KEY_IGNORE\n\nconst define = (object, key, value) => {\n Object.defineProperty(object, key, {value})\n return value\n}\n\nconst REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g\n\nconst RETURN_FALSE = () => false\n\n// Sanitize the range of a regular expression\n// The cases are complicated, see test cases for details\nconst sanitizeRange = range => range.replace(\n REGEX_REGEXP_RANGE,\n (match, from, to) => from.charCodeAt(0) <= to.charCodeAt(0)\n ? match\n // Invalid range (out of order) which is ok for gitignore rules but\n // fatal for JavaScript regular expression, so eliminate it.\n : EMPTY\n)\n\n// > An optional `!` or `^` at the start of a class negates it, so that it\n// > matches any character not in the set. (gitignore(5), fnmatch(3))\n// The leading `^` has already been escaped to `\\^` by the metacharacter\n// escaper, so we strip the literal `!` or escaped `^` and emit a single\n// regex `^` which is the JavaScript negation token.\nconst negateRange = range => range.startsWith('!') || range.startsWith('\\\\^')\n ? `^${range.slice(range[0] === '!' ? 1 : 2)}`\n : range\n\n// See fixtures #59\nconst cleanRangeBackSlash = slashes => {\n const {length} = slashes\n return slashes.slice(0, length - length % 2)\n}\n\n// > If the pattern ends with a slash,\n// > it is removed for the purpose of the following description,\n// > but it would only find a match with a directory.\n// > In other words, foo/ will match a directory foo and paths underneath it,\n// > but will not match a regular file or a symbolic link foo\n// > (this is consistent with the way how pathspec works in general in Git).\n// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'\n// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call\n// you could use option `mark: true` with `glob`\n\n// '`foo/`' should not continue with the '`..`'\nconst REPLACERS = [\n\n [\n // Remove BOM\n // TODO:\n // Other similar zero-width characters?\n /^\\uFEFF/,\n () => EMPTY\n ],\n\n // > Trailing spaces are ignored unless they are quoted with backslash (\"\\\")\n [\n // (a\\ ) -> (a )\n // (a ) -> (a)\n // (a ) -> (a)\n // (a \\ ) -> (a )\n /((?:\\\\\\\\)*?)(\\\\?\\s+)$/,\n (_, m1, m2) => m1 + (\n m2.indexOf('\\\\') === 0\n ? SPACE\n : EMPTY\n )\n ],\n\n // Replace (\\ ) with ' '\n // (\\ ) -> ' '\n // (\\\\ ) -> '\\\\ '\n // (\\\\\\ ) -> '\\\\ '\n [\n /(\\\\+?)\\s/g,\n (_, m1) => {\n const {length} = m1\n return m1.slice(0, length - length % 2) + SPACE\n }\n ],\n\n // Escape metacharacters\n // which is written down by users but means special for regular expressions.\n\n // > There are 12 characters with special meanings:\n // > - the backslash \\,\n // > - the caret ^,\n // > - the dollar sign $,\n // > - the period or dot .,\n // > - the vertical bar or pipe symbol |,\n // > - the question mark ?,\n // > - the asterisk or star *,\n // > - the plus sign +,\n // > - the opening parenthesis (,\n // > - the closing parenthesis ),\n // > - and the opening square bracket [,\n // > - the opening curly brace {,\n // > These special characters are often called \"metacharacters\".\n [\n /[\\\\$.|*+(){^]/g,\n match => `\\\\${match}`\n ],\n\n [\n // > a question mark (?) matches a single character\n /(?!\\\\)\\?/g,\n () => '[^/]'\n ],\n\n // leading slash\n [\n\n // > A leading slash matches the beginning of the pathname.\n // > For example, \"/*.c\" matches \"cat-file.c\" but not \"mozilla-sha1/sha1.c\".\n // A leading slash matches the beginning of the pathname\n /^\\//,\n () => '^'\n ],\n\n // replace special metacharacter slash after the leading slash\n [\n /\\//g,\n () => '\\\\/'\n ],\n\n [\n // > A leading \"**\" followed by a slash means match in all directories.\n // > For example, \"**/foo\" matches file or directory \"foo\" anywhere,\n // > the same as pattern \"foo\".\n // > \"**/foo/bar\" matches file or directory \"bar\" anywhere that is directly\n // > under directory \"foo\".\n // Notice that the '*'s have been replaced as '\\\\*'\n /^\\^*(?:\\\\\\*\\\\\\*\\\\\\/)+/,\n\n // '**/foo' <-> 'foo'\n () => '^(?:.*\\\\/)?'\n ],\n\n // starting\n [\n // there will be no leading '/'\n // (which has been replaced by section \"leading slash\")\n // If starts with '**', adding a '^' to the regular expression also works\n /^(?=[^^])/,\n function startingReplacer () {\n // If has a slash `/` at the beginning or middle\n return !/\\/(?!$)/.test(this)\n // > Prior to 2.22.1\n // > If the pattern does not contain a slash /,\n // > Git treats it as a shell glob pattern\n // Actually, if there is only a trailing slash,\n // git also treats it as a shell glob pattern\n\n // After 2.22.1 (compatible but clearer)\n // > If there is a separator at the beginning or middle (or both)\n // > of the pattern, then the pattern is relative to the directory\n // > level of the particular .gitignore file itself.\n // > Otherwise the pattern may also match at any level below\n // > the .gitignore level.\n ? '(?:^|\\\\/)'\n\n // > Otherwise, Git treats the pattern as a shell glob suitable for\n // > consumption by fnmatch(3)\n : '^'\n }\n ],\n\n // two globstars\n [\n // Use lookahead assertions so that we could match more than one `'/**'`\n /\\\\\\/\\\\\\*\\\\\\*(?=\\\\\\/|$)/g,\n\n // Zero, one or several directories\n // should not use '*', or it will be replaced by the next replacer\n\n // Check if it is not the last `'/**'`\n (_, index, str) => index + 6 < str.length\n\n // case: /**/\n // > A slash followed by two consecutive asterisks then a slash matches\n // > zero or more directories.\n // > For example, \"a/**/b\" matches \"a/b\", \"a/x/b\", \"a/x/y/b\" and so on.\n // '/**/'\n ? '(?:\\\\/[^\\\\/]+)*'\n\n // case: /**\n // > A trailing `\"/**\"` matches everything inside.\n\n // #21: everything inside but it should not include the current folder\n : '\\\\/.+'\n ],\n\n // normal intermediate wildcards\n [\n // Never replace escaped '*'\n // ignore rule '\\*' will match the path '*'\n\n // 'abc.*/' -> go\n // 'abc.*' -> skip this rule,\n // coz trailing single wildcard will be handed by [trailing wildcard]\n /(^|[^\\\\]+)(\\\\\\*)+(?=.+)/g,\n\n // '*.js' matches '.js'\n // '*.js' doesn't match 'abc'\n (_, p1, p2) => {\n // 1.\n // > An asterisk \"*\" matches anything except a slash.\n // 2.\n // > Other consecutive asterisks are considered regular asterisks\n // > and will match according to the previous rules.\n const unescaped = p2.replace(/\\\\\\*/g, '[^\\\\/]*')\n return p1 + unescaped\n }\n ],\n\n [\n // unescape, revert step 3 except for back slash\n // For example, if a user escape a '\\\\*',\n // after step 3, the result will be '\\\\\\\\\\\\*'\n /\\\\\\\\\\\\(?=[$.|*+(){^])/g,\n () => ESCAPE\n ],\n\n [\n // '\\\\\\\\' -> '\\\\'\n /\\\\\\\\/g,\n () => ESCAPE\n ],\n\n [\n // > The range notation, e.g. [a-zA-Z],\n // > can be used to match one of the characters in a range.\n\n // `\\` is escaped by step 3\n /(\\\\)?\\[([^\\]/]*?)(\\\\*)($|\\])/g,\n (match, leadEscape, range, endEscape, close) => leadEscape === ESCAPE\n // '\\\\[bar]' -> '\\\\\\\\[bar\\\\]'\n ? `\\\\[${range}${cleanRangeBackSlash(endEscape)}${close}`\n : close === ']'\n ? endEscape.length % 2 === 0\n // A normal case, and it is a range notation\n // '[bar]'\n // '[bar\\\\\\\\]'\n ? `[${negateRange(sanitizeRange(range))}${endEscape}]`\n // Invalid range notaton\n // '[bar\\\\]' -> '[bar\\\\\\\\]'\n : '[]'\n : '[]'\n ],\n\n // ending\n [\n // 'js' will not match 'js.'\n // 'ab' will not match 'abc'\n /(?:[^*])$/,\n\n // WTF!\n // https://git-scm.com/docs/gitignore\n // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)\n // which re-fixes #24, #38\n\n // > If there is a separator at the end of the pattern then the pattern\n // > will only match directories, otherwise the pattern can match both\n // > files and directories.\n\n // 'js*' will not match 'a.js'\n // 'js/' will not match 'a.js'\n // 'js' will match 'a.js' and 'a.js/'\n match => /\\/$/.test(match)\n // foo/ will not match 'foo'\n ? `${match}$`\n // foo matches 'foo' and 'foo/'\n : `${match}(?=$|\\\\/$)`\n ]\n]\n\nconst REGEX_REPLACE_TRAILING_WILDCARD = /(^|\\\\\\/)?\\\\\\*$/\nconst MODE_IGNORE = 'regex'\nconst MODE_CHECK_IGNORE = 'checkRegex'\nconst UNDERSCORE = '_'\n\nconst TRAILING_WILD_CARD_REPLACERS = {\n [MODE_IGNORE] (_, p1) {\n const prefix = p1\n // '\\^':\n // '/*' does not match EMPTY\n // '/*' does not match everything\n\n // '\\\\\\/':\n // 'abc/*' does not match 'abc/'\n ? `${p1}[^/]+`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n },\n\n [MODE_CHECK_IGNORE] (_, p1) {\n // When doing `git check-ignore`\n const prefix = p1\n // '\\\\\\/':\n // 'abc/*' DOES match 'abc/' !\n ? `${p1}[^/]*`\n\n // 'a*' matches 'a'\n // 'a*' matches 'aa'\n : '[^/]*'\n\n return `${prefix}(?=$|\\\\/$)`\n }\n}\n\n// @param {pattern}\nconst makeRegexPrefix = pattern => REPLACERS.reduce(\n (prev, [matcher, replacer]) =>\n prev.replace(matcher, replacer.bind(pattern)),\n pattern\n)\n\nconst isString = subject => typeof subject === 'string'\n\n// > A blank line matches no files, so it can serve as a separator for readability.\nconst checkPattern = pattern => pattern\n && isString(pattern)\n && !REGEX_TEST_BLANK_LINE.test(pattern)\n && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)\n\n // > A line starting with # serves as a comment.\n && pattern.indexOf('#') !== 0\n\nconst splitPattern = pattern => pattern\n.split(REGEX_SPLITALL_CRLF)\n.filter(Boolean)\n\nclass IgnoreRule {\n constructor (\n pattern,\n mark,\n body,\n ignoreCase,\n negative,\n prefix\n ) {\n this.pattern = pattern\n this.mark = mark\n this.negative = negative\n\n define(this, 'body', body)\n define(this, 'ignoreCase', ignoreCase)\n define(this, 'regexPrefix', prefix)\n }\n\n get regex () {\n const key = UNDERSCORE + MODE_IGNORE\n\n if (this[key]) {\n return this[key]\n }\n\n return this._make(MODE_IGNORE, key)\n }\n\n get checkRegex () {\n const key = UNDERSCORE + MODE_CHECK_IGNORE\n\n if (this[key]) {\n return this[key]\n }\n\n return this._make(MODE_CHECK_IGNORE, key)\n }\n\n _make (mode, key) {\n const str = this.regexPrefix.replace(\n REGEX_REPLACE_TRAILING_WILDCARD,\n\n // It does not need to bind pattern\n TRAILING_WILD_CARD_REPLACERS[mode]\n )\n\n const regex = this.ignoreCase\n ? new RegExp(str, 'i')\n : new RegExp(str)\n\n return define(this, key, regex)\n }\n}\n\nconst createRule = ({\n pattern,\n mark\n}, ignoreCase) => {\n let negative = false\n let body = pattern\n\n // > An optional prefix \"!\" which negates the pattern;\n if (body.indexOf('!') === 0) {\n negative = true\n body = body.substr(1)\n }\n\n body = body\n // > Put a backslash (\"\\\") in front of the first \"!\" for patterns that\n // > begin with a literal \"!\", for example, `\"\\!important!.txt\"`.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')\n // > Put a backslash (\"\\\") in front of the first hash for patterns that\n // > begin with a hash.\n .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#')\n\n const regexPrefix = makeRegexPrefix(body)\n\n return new IgnoreRule(\n pattern,\n mark,\n body,\n ignoreCase,\n negative,\n regexPrefix\n )\n}\n\nclass RuleManager {\n constructor (ignoreCase) {\n this._ignoreCase = ignoreCase\n this._rules = []\n }\n\n _add (pattern) {\n // #32\n if (pattern && pattern[KEY_IGNORE]) {\n this._rules = this._rules.concat(pattern._rules._rules)\n this._added = true\n return\n }\n\n if (isString(pattern)) {\n pattern = {\n pattern\n }\n }\n\n if (checkPattern(pattern.pattern)) {\n const rule = createRule(pattern, this._ignoreCase)\n this._added = true\n this._rules.push(rule)\n }\n }\n\n // @param {Array<string> | string | Ignore} pattern\n add (pattern) {\n this._added = false\n\n makeArray(\n isString(pattern)\n ? splitPattern(pattern)\n : pattern\n ).forEach(this._add, this)\n\n return this._added\n }\n\n // Test one single path without recursively checking parent directories\n //\n // - checkUnignored `boolean` whether should check if the path is unignored,\n // setting `checkUnignored` to `false` could reduce additional\n // path matching.\n // - check `string` either `MODE_IGNORE` or `MODE_CHECK_IGNORE`\n\n // @returns {TestResult} true if a file is ignored\n test (path, checkUnignored, mode) {\n let ignored = false\n let unignored = false\n let matchedRule\n\n this._rules.forEach(rule => {\n const {negative} = rule\n\n // | ignored : unignored\n // -------- | ---------------------------------------\n // negative | 0:0 | 0:1 | 1:0 | 1:1\n // -------- | ------- | ------- | ------- | --------\n // 0 | TEST | TEST | SKIP | X\n // 1 | TESTIF | SKIP | TEST | X\n\n // - SKIP: always skip\n // - TEST: always test\n // - TESTIF: only test if checkUnignored\n // - X: that never happen\n if (\n unignored === negative && ignored !== unignored\n || negative && !ignored && !unignored && !checkUnignored\n ) {\n return\n }\n\n const matched = rule[mode].test(path)\n\n if (!matched) {\n return\n }\n\n ignored = !negative\n unignored = negative\n\n matchedRule = negative\n ? UNDEFINED\n : rule\n })\n\n const ret = {\n ignored,\n unignored\n }\n\n if (matchedRule) {\n ret.rule = matchedRule\n }\n\n return ret\n }\n}\n\nconst throwError = (message, Ctor) => {\n throw new Ctor(message)\n}\n\nconst checkPath = (path, originalPath, doThrow) => {\n if (!isString(path)) {\n return doThrow(\n `path must be a string, but got \\`${originalPath}\\``,\n TypeError\n )\n }\n\n // We don't know if we should ignore EMPTY, so throw\n if (!path) {\n return doThrow(`path must not be empty`, TypeError)\n }\n\n // Check if it is a relative path\n if (checkPath.isNotRelative(path)) {\n const r = '`path.relative()`d'\n return doThrow(\n `path should be a ${r} string, but got \"${originalPath}\"`,\n RangeError\n )\n }\n\n return true\n}\n\nconst isNotRelative = path => REGEX_TEST_INVALID_PATH.test(path)\n\ncheckPath.isNotRelative = isNotRelative\n\n// On windows, the following function will be replaced\n/* istanbul ignore next */\ncheckPath.convert = p => p\n\n\nclass Ignore {\n constructor ({\n ignorecase = true,\n ignoreCase = ignorecase,\n allowRelativePaths = false\n } = {}) {\n define(this, KEY_IGNORE, true)\n\n this._rules = new RuleManager(ignoreCase)\n this._strictPathCheck = !allowRelativePaths\n this._initCache()\n }\n\n _initCache () {\n // A cache for the result of `.ignores()`\n this._ignoreCache = Object.create(null)\n\n // A cache for the result of `.test()`\n this._testCache = Object.create(null)\n }\n\n add (pattern) {\n if (this._rules.add(pattern)) {\n // Some rules have just added to the ignore,\n // making the behavior changed,\n // so we need to re-initialize the result cache\n this._initCache()\n }\n\n return this\n }\n\n // legacy\n addPattern (pattern) {\n return this.add(pattern)\n }\n\n // @returns {TestResult}\n _test (originalPath, cache, checkUnignored, slices) {\n const path = originalPath\n // Supports nullable path\n && checkPath.convert(originalPath)\n\n checkPath(\n path,\n originalPath,\n this._strictPathCheck\n ? throwError\n : RETURN_FALSE\n )\n\n return this._t(path, cache, checkUnignored, slices)\n }\n\n checkIgnore (path) {\n // If the path doest not end with a slash, `.ignores()` is much equivalent\n // to `git check-ignore`\n if (!REGEX_TEST_TRAILING_SLASH.test(path)) {\n return this.test(path)\n }\n\n const slices = path.split(SLASH).filter(Boolean)\n slices.pop()\n\n if (slices.length) {\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n this._testCache,\n true,\n slices\n )\n\n if (parent.ignored) {\n return parent\n }\n }\n\n return this._rules.test(path, false, MODE_CHECK_IGNORE)\n }\n\n _t (\n // The path to be tested\n path,\n\n // The cache for the result of a certain checking\n cache,\n\n // Whether should check if the path is unignored\n checkUnignored,\n\n // The path slices\n slices\n ) {\n if (path in cache) {\n return cache[path]\n }\n\n if (!slices) {\n // path/to/a.js\n // ['path', 'to', 'a.js']\n slices = path.split(SLASH).filter(Boolean)\n }\n\n slices.pop()\n\n // If the path has no parent directory, just test it\n if (!slices.length) {\n return cache[path] = this._rules.test(path, checkUnignored, MODE_IGNORE)\n }\n\n const parent = this._t(\n slices.join(SLASH) + SLASH,\n cache,\n checkUnignored,\n slices\n )\n\n // If the path contains a parent directory, check the parent first\n return cache[path] = parent.ignored\n // > It is not possible to re-include a file if a parent directory of\n // > that file is excluded.\n ? parent\n : this._rules.test(path, checkUnignored, MODE_IGNORE)\n }\n\n ignores (path) {\n return this._test(path, this._ignoreCache, false).ignored\n }\n\n createFilter () {\n return path => !this.ignores(path)\n }\n\n filter (paths) {\n return makeArray(paths).filter(this.createFilter())\n }\n\n // @returns {TestResult}\n test (path) {\n return this._test(path, this._testCache, true)\n }\n}\n\nconst factory = options => new Ignore(options)\n\nconst isPathValid = path =>\n checkPath(path && checkPath.convert(path), path, RETURN_FALSE)\n\n/* istanbul ignore next */\nconst setupWindows = () => {\n /* eslint no-control-regex: \"off\" */\n const makePosix = str => /^\\\\\\\\\\?\\\\/.test(str)\n || /[\"<>|\\u0000-\\u001F]+/u.test(str)\n ? str\n : str.replace(/\\\\/g, '/')\n\n checkPath.convert = makePosix\n\n // 'C:\\\\foo' <- 'C:\\\\foo' has been converted to 'C:/'\n // 'd:\\\\foo'\n const REGEX_TEST_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\\//i\n checkPath.isNotRelative = path =>\n REGEX_TEST_WINDOWS_PATH_ABSOLUTE.test(path)\n || isNotRelative(path)\n}\n\n\n// Windows\n// --------------------------------------------------------------\n/* istanbul ignore next */\nif (\n // Detect `process` so that it can run in browsers.\n typeof process !== 'undefined'\n && process.platform === 'win32'\n) {\n setupWindows()\n}\n\n// COMMONJS_EXPORTS ////////////////////////////////////////////////////////////\n\nmodule.exports = factory\n\n// Although it is an anti-pattern,\n// it is still widely misused by a lot of libraries in github\n// Ref: https://github.com/search?q=ignore.default%28%29&type=code\nfactory.default = factory\n\nmodule.exports.isPathValid = isPathValid\n\n// For testing purposes\ndefine(module.exports, Symbol.for('setupWindows'), setupWindows)\n","export default function slash(path) {\n\tconst isExtendedLengthPath = path.startsWith('\\\\\\\\?\\\\');\n\n\tif (isExtendedLengthPath) {\n\t\treturn path;\n\t}\n\n\treturn path.replace(/\\\\/g, '/');\n}\n","export const isNegativePattern = pattern => pattern[0] === '!';\n","import process from 'node:process';\nimport fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path from 'node:path';\nimport fastGlob from 'fast-glob';\nimport gitIgnore from 'ignore';\nimport slash from 'slash';\nimport {toPath} from 'unicorn-magic';\nimport {isNegativePattern} from './utilities.js';\n\nconst defaultIgnoredDirectories = [\n\t'**/node_modules',\n\t'**/flow-typed',\n\t'**/coverage',\n\t'**/.git',\n];\nconst ignoreFilesGlobOptions = {\n\tabsolute: true,\n\tdot: true,\n};\n\nexport const GITIGNORE_FILES_PATTERN = '**/.gitignore';\n\nconst applyBaseToPattern = (pattern, base) => isNegativePattern(pattern)\n\t? '!' + path.posix.join(base, pattern.slice(1))\n\t: path.posix.join(base, pattern);\n\nconst parseIgnoreFile = (file, cwd) => {\n\tconst base = slash(path.relative(cwd, path.dirname(file.filePath)));\n\n\treturn file.content\n\t\t.split(/\\r?\\n/)\n\t\t.filter(line => line && !line.startsWith('#'))\n\t\t.map(pattern => applyBaseToPattern(pattern, base));\n};\n\nconst toRelativePath = (fileOrDirectory, cwd) => {\n\tcwd = slash(cwd);\n\tif (path.isAbsolute(fileOrDirectory)) {\n\t\tif (slash(fileOrDirectory).startsWith(cwd)) {\n\t\t\treturn path.relative(cwd, fileOrDirectory);\n\t\t}\n\n\t\tthrow new Error(`Path ${fileOrDirectory} is not in cwd ${cwd}`);\n\t}\n\n\treturn fileOrDirectory;\n};\n\nconst getIsIgnoredPredicate = (files, cwd) => {\n\tconst patterns = files.flatMap(file => parseIgnoreFile(file, cwd));\n\tconst ignores = gitIgnore().add(patterns);\n\n\treturn fileOrDirectory => {\n\t\tfileOrDirectory = toPath(fileOrDirectory);\n\t\tfileOrDirectory = toRelativePath(fileOrDirectory, cwd);\n\t\treturn fileOrDirectory ? ignores.ignores(slash(fileOrDirectory)) : false;\n\t};\n};\n\nconst normalizeOptions = (options = {}) => ({\n\tcwd: toPath(options.cwd) ?? process.cwd(),\n\tsuppressErrors: Boolean(options.suppressErrors),\n\tdeep: typeof options.deep === 'number' ? options.deep : Number.POSITIVE_INFINITY,\n\tignore: [...options.ignore ?? [], ...defaultIgnoredDirectories],\n});\n\nexport const isIgnoredByIgnoreFiles = async (patterns, options) => {\n\tconst {cwd, suppressErrors, deep, ignore} = normalizeOptions(options);\n\n\tconst paths = await fastGlob(patterns, {\n\t\tcwd,\n\t\tsuppressErrors,\n\t\tdeep,\n\t\tignore,\n\t\t...ignoreFilesGlobOptions,\n\t});\n\n\tconst files = await Promise.all(\n\t\tpaths.map(async filePath => ({\n\t\t\tfilePath,\n\t\t\tcontent: await fsPromises.readFile(filePath, 'utf8'),\n\t\t})),\n\t);\n\n\treturn getIsIgnoredPredicate(files, cwd);\n};\n\nexport const isIgnoredByIgnoreFilesSync = (patterns, options) => {\n\tconst {cwd, suppressErrors, deep, ignore} = normalizeOptions(options);\n\n\tconst paths = fastGlob.sync(patterns, {\n\t\tcwd,\n\t\tsuppressErrors,\n\t\tdeep,\n\t\tignore,\n\t\t...ignoreFilesGlobOptions,\n\t});\n\n\tconst files = paths.map(filePath => ({\n\t\tfilePath,\n\t\tcontent: fs.readFileSync(filePath, 'utf8'),\n\t}));\n\n\treturn getIsIgnoredPredicate(files, cwd);\n};\n\nexport const isGitIgnored = options => isIgnoredByIgnoreFiles(GITIGNORE_FILES_PATTERN, options);\nexport const isGitIgnoredSync = options => isIgnoredByIgnoreFilesSync(GITIGNORE_FILES_PATTERN, options);\n","import process from 'node:process';\nimport fs from 'node:fs';\nimport nodePath from 'node:path';\nimport mergeStreams from '@sindresorhus/merge-streams';\nimport fastGlob from 'fast-glob';\nimport {isDirectory, isDirectorySync} from 'path-type';\nimport {toPath} from 'unicorn-magic';\nimport {\n\tGITIGNORE_FILES_PATTERN,\n\tisIgnoredByIgnoreFiles,\n\tisIgnoredByIgnoreFilesSync,\n} from './ignore.js';\nimport {isNegativePattern} from './utilities.js';\n\nconst assertPatternsInput = patterns => {\n\tif (patterns.some(pattern => typeof pattern !== 'string')) {\n\t\tthrow new TypeError('Patterns must be a string or an array of strings');\n\t}\n};\n\nconst normalizePathForDirectoryGlob = (filePath, cwd) => {\n\tconst path = isNegativePattern(filePath) ? filePath.slice(1) : filePath;\n\treturn nodePath.isAbsolute(path) ? path : nodePath.join(cwd, path);\n};\n\nconst getDirectoryGlob = ({directoryPath, files, extensions}) => {\n\tconst extensionGlob = extensions?.length > 0 ? `.${extensions.length > 1 ? `{${extensions.join(',')}}` : extensions[0]}` : '';\n\treturn files\n\t\t? files.map(file => nodePath.posix.join(directoryPath, `**/${nodePath.extname(file) ? file : `${file}${extensionGlob}`}`))\n\t\t: [nodePath.posix.join(directoryPath, `**${extensionGlob ? `/*${extensionGlob}` : ''}`)];\n};\n\nconst directoryToGlob = async (directoryPaths, {\n\tcwd = process.cwd(),\n\tfiles,\n\textensions,\n} = {}) => {\n\tconst globs = await Promise.all(directoryPaths.map(async directoryPath =>\n\t\t(await isDirectory(normalizePathForDirectoryGlob(directoryPath, cwd))) ? getDirectoryGlob({directoryPath, files, extensions}) : directoryPath),\n\t);\n\n\treturn globs.flat();\n};\n\nconst directoryToGlobSync = (directoryPaths, {\n\tcwd = process.cwd(),\n\tfiles,\n\textensions,\n} = {}) => directoryPaths.flatMap(directoryPath => isDirectorySync(normalizePathForDirectoryGlob(directoryPath, cwd)) ? getDirectoryGlob({directoryPath, files, extensions}) : directoryPath);\n\nconst toPatternsArray = patterns => {\n\tpatterns = [...new Set([patterns].flat())];\n\tassertPatternsInput(patterns);\n\treturn patterns;\n};\n\nconst checkCwdOption = cwd => {\n\tif (!cwd) {\n\t\treturn;\n\t}\n\n\tlet stat;\n\ttry {\n\t\tstat = fs.statSync(cwd);\n\t} catch {\n\t\treturn;\n\t}\n\n\tif (!stat.isDirectory()) {\n\t\tthrow new Error('The `cwd` option must be a path to a directory');\n\t}\n};\n\nconst normalizeOptions = (options = {}) => {\n\toptions = {\n\t\t...options,\n\t\tignore: options.ignore ?? [],\n\t\texpandDirectories: options.expandDirectories ?? true,\n\t\tcwd: toPath(options.cwd),\n\t};\n\n\tcheckCwdOption(options.cwd);\n\n\treturn options;\n};\n\nconst normalizeArguments = function_ => async (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions(options));\nconst normalizeArgumentsSync = function_ => (patterns, options) => function_(toPatternsArray(patterns), normalizeOptions(options));\n\nconst getIgnoreFilesPatterns = options => {\n\tconst {ignoreFiles, gitignore} = options;\n\n\tconst patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];\n\tif (gitignore) {\n\t\tpatterns.push(GITIGNORE_FILES_PATTERN);\n\t}\n\n\treturn patterns;\n};\n\nconst getFilter = async options => {\n\tconst ignoreFilesPatterns = getIgnoreFilesPatterns(options);\n\treturn createFilterFunction(\n\t\tignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, options),\n\t);\n};\n\nconst getFilterSync = options => {\n\tconst ignoreFilesPatterns = getIgnoreFilesPatterns(options);\n\treturn createFilterFunction(\n\t\tignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options),\n\t);\n};\n\nconst createFilterFunction = isIgnored => {\n\tconst seen = new Set();\n\n\treturn fastGlobResult => {\n\t\tconst pathKey = nodePath.normalize(fastGlobResult.path ?? fastGlobResult);\n\n\t\tif (seen.has(pathKey) || (isIgnored && isIgnored(pathKey))) {\n\t\t\treturn false;\n\t\t}\n\n\t\tseen.add(pathKey);\n\n\t\treturn true;\n\t};\n};\n\nconst unionFastGlobResults = (results, filter) => results.flat().filter(fastGlobResult => filter(fastGlobResult));\n\nconst convertNegativePatterns = (patterns, options) => {\n\tconst tasks = [];\n\n\twhile (patterns.length > 0) {\n\t\tconst index = patterns.findIndex(pattern => isNegativePattern(pattern));\n\n\t\tif (index === -1) {\n\t\t\ttasks.push({patterns, options});\n\t\t\tbreak;\n\t\t}\n\n\t\tconst ignorePattern = patterns[index].slice(1);\n\n\t\tfor (const task of tasks) {\n\t\t\ttask.options.ignore.push(ignorePattern);\n\t\t}\n\n\t\tif (index !== 0) {\n\t\t\ttasks.push({\n\t\t\t\tpatterns: patterns.slice(0, index),\n\t\t\t\toptions: {\n\t\t\t\t\t...options,\n\t\t\t\t\tignore: [\n\t\t\t\t\t\t...options.ignore,\n\t\t\t\t\t\tignorePattern,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\n\t\tpatterns = patterns.slice(index + 1);\n\t}\n\n\treturn tasks;\n};\n\nconst normalizeExpandDirectoriesOption = (options, cwd) => ({\n\t...(cwd ? {cwd} : {}),\n\t...(Array.isArray(options) ? {files: options} : options),\n});\n\nconst generateTasks = async (patterns, options) => {\n\tconst globTasks = convertNegativePatterns(patterns, options);\n\n\tconst {cwd, expandDirectories} = options;\n\n\tif (!expandDirectories) {\n\t\treturn globTasks;\n\t}\n\n\tconst directoryToGlobOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);\n\n\treturn Promise.all(\n\t\tglobTasks.map(async task => {\n\t\t\tlet {patterns, options} = task;\n\n\t\t\t[\n\t\t\t\tpatterns,\n\t\t\t\toptions.ignore,\n\t\t\t] = await Promise.all([\n\t\t\t\tdirectoryToGlob(patterns, directoryToGlobOptions),\n\t\t\t\tdirectoryToGlob(options.ignore, {cwd}),\n\t\t\t]);\n\n\t\t\treturn {patterns, options};\n\t\t}),\n\t);\n};\n\nconst generateTasksSync = (patterns, options) => {\n\tconst globTasks = convertNegativePatterns(patterns, options);\n\tconst {cwd, expandDirectories} = options;\n\n\tif (!expandDirectories) {\n\t\treturn globTasks;\n\t}\n\n\tconst directoryToGlobSyncOptions = normalizeExpandDirectoriesOption(expandDirectories, cwd);\n\n\treturn globTasks.map(task => {\n\t\tlet {patterns, options} = task;\n\t\tpatterns = directoryToGlobSync(patterns, directoryToGlobSyncOptions);\n\t\toptions.ignore = directoryToGlobSync(options.ignore, {cwd});\n\t\treturn {patterns, options};\n\t});\n};\n\nexport const globby = normalizeArguments(async (patterns, options) => {\n\tconst [\n\t\ttasks,\n\t\tfilter,\n\t] = await Promise.all([\n\t\tgenerateTasks(patterns, options),\n\t\tgetFilter(options),\n\t]);\n\n\tconst results = await Promise.all(tasks.map(task => fastGlob(task.patterns, task.options)));\n\treturn unionFastGlobResults(results, filter);\n});\n\nexport const globbySync = normalizeArgumentsSync((patterns, options) => {\n\tconst tasks = generateTasksSync(patterns, options);\n\tconst filter = getFilterSync(options);\n\tconst results = tasks.map(task => fastGlob.sync(task.patterns, task.options));\n\treturn unionFastGlobResults(results, filter);\n});\n\nexport const globbyStream = normalizeArgumentsSync((patterns, options) => {\n\tconst tasks = generateTasksSync(patterns, options);\n\tconst filter = getFilterSync(options);\n\tconst streams = tasks.map(task => fastGlob.stream(task.patterns, task.options));\n\tconst stream = mergeStreams(streams).filter(fastGlobResult => filter(fastGlobResult));\n\n\t// TODO: Make it return a web stream at some point.\n\t// return Readable.toWeb(stream);\n\n\treturn stream;\n});\n\nexport const isDynamicPattern = normalizeArgumentsSync(\n\t(patterns, options) => patterns.some(pattern => fastGlob.isDynamicPattern(pattern, options)),\n);\n\nexport const generateGlobTasks = normalizeArguments(generateTasks);\nexport const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);\n\nexport {\n\tisGitIgnored,\n\tisGitIgnoredSync,\n\tisIgnoredByIgnoreFiles,\n\tisIgnoredByIgnoreFilesSync,\n} from './ignore.js';\n\nexport const {convertPathToPattern} = fastGlob;\n","export const balanced = (a, b, str) => {\n const ma = a instanceof RegExp ? maybeMatch(a, str) : a;\n const mb = b instanceof RegExp ? maybeMatch(b, str) : b;\n const r = ma !== null && mb != null && range(ma, mb, str);\n return (r && {\n start: r[0],\n end: r[1],\n pre: str.slice(0, r[0]),\n body: str.slice(r[0] + ma.length, r[1]),\n post: str.slice(r[1] + mb.length),\n });\n};\nconst maybeMatch = (reg, str) => {\n const m = str.match(reg);\n return m ? m[0] : null;\n};\nexport const range = (a, b, str) => {\n let begs, beg, left, right = undefined, result;\n let ai = str.indexOf(a);\n let bi = str.indexOf(b, ai + 1);\n let i = ai;\n if (ai >= 0 && bi > 0) {\n if (a === b) {\n return [ai, bi];\n }\n begs = [];\n left = str.length;\n while (i >= 0 && !result) {\n if (i === ai) {\n begs.push(i);\n ai = str.indexOf(a, i + 1);\n }\n else if (begs.length === 1) {\n const r = begs.pop();\n if (r !== undefined)\n result = [r, bi];\n }\n else {\n beg = begs.pop();\n if (beg !== undefined && beg < left) {\n left = beg;\n right = bi;\n }\n bi = str.indexOf(b, i + 1);\n }\n i = ai < bi && ai >= 0 ? ai : bi;\n }\n if (begs.length && right !== undefined) {\n result = [left, right];\n }\n }\n return result;\n};\n//# sourceMappingURL=index.js.map","import { balanced } from 'balanced-match';\nconst escSlash = '\\0SLASH' + Math.random() + '\\0';\nconst escOpen = '\\0OPEN' + Math.random() + '\\0';\nconst escClose = '\\0CLOSE' + Math.random() + '\\0';\nconst escComma = '\\0COMMA' + Math.random() + '\\0';\nconst escPeriod = '\\0PERIOD' + Math.random() + '\\0';\nconst escSlashPattern = new RegExp(escSlash, 'g');\nconst escOpenPattern = new RegExp(escOpen, 'g');\nconst escClosePattern = new RegExp(escClose, 'g');\nconst escCommaPattern = new RegExp(escComma, 'g');\nconst escPeriodPattern = new RegExp(escPeriod, 'g');\nconst slashPattern = /\\\\\\\\/g;\nconst openPattern = /\\\\{/g;\nconst closePattern = /\\\\}/g;\nconst commaPattern = /\\\\,/g;\nconst periodPattern = /\\\\\\./g;\nexport const EXPANSION_MAX = 100_000;\n// `EXPANSION_MAX` caps the *number* of expansions, but not their length. An\n// input like `'{a,b}'.repeat(1500)` stays under that count - its output is\n// truncated to 100k results - while making every result ~1500 characters\n// long. The result set, and the intermediate arrays built while combining\n// brace sets, then grow large enough to exhaust memory and crash the process\n// (CVE-2026-14257). `EXPANSION_MAX_LENGTH` bounds the total number of\n// characters the accumulator may hold at any point, so memory stays flat no\n// matter how many brace groups are chained. The limit sits well above any\n// realistic expansion (100k results hitting `EXPANSION_MAX` measure ~1M\n// characters) so legitimate input is unaffected.\nexport const EXPANSION_MAX_LENGTH = 4_000_000;\nfunction numeric(str) {\n return !isNaN(str) ? parseInt(str, 10) : str.charCodeAt(0);\n}\nfunction escapeBraces(str) {\n return str\n .replace(slashPattern, escSlash)\n .replace(openPattern, escOpen)\n .replace(closePattern, escClose)\n .replace(commaPattern, escComma)\n .replace(periodPattern, escPeriod);\n}\nfunction unescapeBraces(str) {\n return str\n .replace(escSlashPattern, '\\\\')\n .replace(escOpenPattern, '{')\n .replace(escClosePattern, '}')\n .replace(escCommaPattern, ',')\n .replace(escPeriodPattern, '.');\n}\n/**\n * Basically just str.split(\",\"), but handling cases\n * where we have nested braced sections, which should be\n * treated as individual members, like {a,{b,c},d}\n */\nfunction parseCommaParts(str) {\n if (!str) {\n return [''];\n }\n const parts = [];\n const m = balanced('{', '}', str);\n if (!m) {\n return str.split(',');\n }\n const { pre, body, post } = m;\n const p = pre.split(',');\n p[p.length - 1] += '{' + body + '}';\n const postParts = parseCommaParts(post);\n if (post.length) {\n ;\n p[p.length - 1] += postParts.shift();\n p.push.apply(p, postParts);\n }\n parts.push.apply(parts, p);\n return parts;\n}\nexport function expand(str, options = {}) {\n if (!str) {\n return [];\n }\n const { max = EXPANSION_MAX, maxLength = EXPANSION_MAX_LENGTH } = options;\n // I don't know why Bash 4.3 does this, but it does.\n // Anything starting with {} will have the first two bytes preserved\n // but *only* at the top level, so {},a}b will not expand to anything,\n // but a{},b}c will be expanded to [a}c,abc].\n // One could argue that this is a bug in Bash, but since the goal of\n // this module is to match Bash's rules, we escape a leading {}\n if (str.slice(0, 2) === '{}') {\n str = '\\\\{\\\\}' + str.slice(2);\n }\n return expand_(escapeBraces(str), max, maxLength, true).map(unescapeBraces);\n}\nfunction embrace(str) {\n return '{' + str + '}';\n}\nfunction isPadded(el) {\n return /^-?0\\d/.test(el);\n}\nfunction lte(i, y) {\n return i <= y;\n}\nfunction gte(i, y) {\n return i >= y;\n}\n// Build `{ acc[a] + pre + values[v] }` for every combination, capping the\n// number of results at `max` and the total number of characters at `maxLength`.\n// This is the one place output grows, so bounding it here keeps the single\n// accumulator - and therefore memory - flat regardless of how many brace groups\n// are combined (CVE-2026-14257).\nfunction combine(acc, pre, values, max, maxLength, dropEmpties) {\n const out = [];\n let length = 0;\n for (let a = 0; a < acc.length; a++) {\n for (let v = 0; v < values.length; v++) {\n if (out.length >= max)\n return out;\n const expansion = acc[a] + pre + values[v];\n // Bash drops empty results at the top level. Skip them before they count\n // against `max`, so `max` bounds the number of *kept* results.\n if (dropEmpties && !expansion)\n continue;\n if (length + expansion.length > maxLength)\n return out;\n out.push(expansion);\n length += expansion.length;\n }\n }\n return out;\n}\n// The expansion values of a single numeric (`1..5`) or alphabetic (`a..e..2`)\n// sequence body.\nfunction expandSequence(body, isAlphaSequence, max, maxLength) {\n const n = body.split(/\\.\\./);\n const N = [];\n // A sequence body always splits into two or three parts, but the compiler\n // can't know that.\n /* c8 ignore start */\n if (n[0] === undefined || n[1] === undefined) {\n return N;\n }\n /* c8 ignore stop */\n const x = numeric(n[0]);\n const y = numeric(n[1]);\n const width = Math.max(n[0].length, n[1].length);\n let incr = n.length === 3 && n[2] !== undefined ?\n Math.max(Math.abs(numeric(n[2])), 1)\n : 1;\n let test = lte;\n const reverse = y < x;\n if (reverse) {\n incr *= -1;\n test = gte;\n }\n const pad = n.some(isPadded);\n let length = 0;\n for (let i = x; test(i, y) && N.length < max; i += incr) {\n let c;\n if (isAlphaSequence) {\n c = String.fromCharCode(i);\n if (c === '\\\\') {\n c = '';\n }\n }\n else {\n c = String(i);\n if (pad) {\n const need = width - c.length;\n if (need > 0) {\n const z = new Array(need + 1).join('0');\n if (i < 0) {\n c = '-' + z + c.slice(1);\n }\n else {\n c = z + c;\n }\n }\n }\n }\n if (length + c.length > maxLength)\n break;\n N.push(c);\n length += c.length;\n }\n return N;\n}\nfunction expand_(str, max, maxLength, isTop) {\n // Consume the string's top-level brace groups left to right, threading a\n // running set of combined prefixes (`acc`). Expanding the tail iteratively -\n // rather than recursing on `m.post` once per group - keeps the native stack\n // depth constant, so deeply chained input (`'{a,b}'.repeat(3000)`) can no\n // longer overflow the stack, and leaves a single accumulator whose size\n // `maxLength` bounds directly (CVE-2026-14257).\n let acc = [''];\n // Bash drops empty results, but only when the *first* top-level group is a\n // comma set - a sequence like `{a..\\}` may legitimately yield ''. The drop\n // is on the final strings, so it is applied to whichever `combine` produces\n // them (the one with no brace set left in the tail).\n let dropEmpties = false;\n let firstGroup = true;\n for (;;) {\n const m = balanced('{', '}', str);\n // No brace set left: the rest of the string is literal.\n if (!m) {\n return combine(acc, str, [''], max, maxLength, dropEmpties);\n }\n // no need to expand pre, since it is guaranteed to be free of brace-sets\n const pre = m.pre;\n if (/\\$$/.test(pre)) {\n acc = combine(acc, pre + '{' + m.body + '}', [''], max, maxLength, dropEmpties && !m.post.length);\n firstGroup = false;\n if (!m.post.length)\n break;\n str = m.post;\n continue;\n }\n const isNumericSequence = /^-?\\d+\\.\\.-?\\d+(?:\\.\\.-?\\d+)?$/.test(m.body);\n const isAlphaSequence = /^[a-zA-Z]\\.\\.[a-zA-Z](?:\\.\\.-?\\d+)?$/.test(m.body);\n const isSequence = isNumericSequence || isAlphaSequence;\n const isOptions = m.body.indexOf(',') >= 0;\n if (!isSequence && !isOptions) {\n // {a},b}\n if (m.post.match(/,(?!,).*\\}/)) {\n str = m.pre + '{' + m.body + escClose + m.post;\n isTop = true;\n continue;\n }\n // Nothing here expands, so the whole remaining string is literal.\n return combine(acc, pre + '{' + m.body + '}' + m.post, [''], max, maxLength, dropEmpties);\n }\n if (firstGroup) {\n dropEmpties = isTop && !isSequence;\n firstGroup = false;\n }\n let values;\n if (isSequence) {\n values = expandSequence(m.body, isAlphaSequence, max, maxLength);\n }\n else {\n let n = parseCommaParts(m.body);\n if (n.length === 1 && n[0] !== undefined) {\n // x{{a,b}}y ==> x{a}y x{b}y\n n = expand_(n[0], max, maxLength, false).map(embrace);\n //XXX is this necessary? Can't seem to hit it in tests.\n /* c8 ignore start */\n if (n.length === 1) {\n acc = combine(acc, pre + n[0], [''], max, maxLength, dropEmpties && !m.post.length);\n if (!m.post.length)\n break;\n str = m.post;\n continue;\n }\n /* c8 ignore stop */\n }\n // Values that `combine` is going to drop as empty produce no result, so\n // they must not count against `max` - otherwise `{a,,b}` with `max: 2`\n // would stop at `['a', '']` and yield one result instead of two. Skipping\n // them outright keeps `values` bounded while leaving `max` a bound on\n // *kept* results.\n let dropsEmpties = dropEmpties && !m.post.length && !pre;\n for (let d = 0; dropsEmpties && d < acc.length; d++) {\n if (acc[d]) {\n dropsEmpties = false;\n }\n }\n values = [];\n let valuesLength = 0;\n outer: for (let j = 0; j < n.length; j++) {\n const expanded = expand_(n[j], max, maxLength, false);\n for (let k = 0; k < expanded.length; k++) {\n const v = expanded[k];\n if (dropsEmpties && !v)\n continue;\n if (values.length >= max || valuesLength + v.length > maxLength) {\n break outer;\n }\n values.push(v);\n valuesLength += v.length;\n }\n }\n }\n acc = combine(acc, pre, values, max, maxLength, dropEmpties && !m.post.length);\n if (!m.post.length)\n break;\n str = m.post;\n }\n return acc;\n}\n//# sourceMappingURL=index.js.map","const MAX_PATTERN_LENGTH = 1024 * 64;\nexport const assertValidPattern = (pattern) => {\n if (typeof pattern !== 'string') {\n throw new TypeError('invalid pattern');\n }\n if (pattern.length > MAX_PATTERN_LENGTH) {\n throw new TypeError('pattern is too long');\n }\n};\n//# sourceMappingURL=assert-valid-pattern.js.map","// translate the various posix character classes into unicode properties\n// this works across all unicode locales\n// { <posix class>: [<translation>, /u flag required, negated]\nconst posixClasses = {\n '[:alnum:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}', true],\n '[:alpha:]': ['\\\\p{L}\\\\p{Nl}', true],\n '[:ascii:]': ['\\\\x' + '00-\\\\x' + '7f', false],\n '[:blank:]': ['\\\\p{Zs}\\\\t', true],\n '[:cntrl:]': ['\\\\p{Cc}', true],\n '[:digit:]': ['\\\\p{Nd}', true],\n '[:graph:]': ['\\\\p{Z}\\\\p{C}', true, true],\n '[:lower:]': ['\\\\p{Ll}', true],\n '[:print:]': ['\\\\p{C}', true],\n '[:punct:]': ['\\\\p{P}', true],\n '[:space:]': ['\\\\p{Z}\\\\t\\\\r\\\\n\\\\v\\\\f', true],\n '[:upper:]': ['\\\\p{Lu}', true],\n '[:word:]': ['\\\\p{L}\\\\p{Nl}\\\\p{Nd}\\\\p{Pc}', true],\n '[:xdigit:]': ['A-Fa-f0-9', false],\n};\n// only need to escape a few things inside of brace expressions\n// escapes: [ \\ ] -\nconst braceEscape = (s) => s.replace(/[[\\]\\\\-]/g, '\\\\$&');\n// escape all regexp magic characters\nconst regexpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// everything has already been escaped, we just have to join\nconst rangesToString = (ranges) => ranges.join('');\n// takes a glob string at a posix brace expression, and returns\n// an equivalent regular expression source, and boolean indicating\n// whether the /u flag needs to be applied, and the number of chars\n// consumed to parse the character class.\n// This also removes out of order ranges, and returns ($.) if the\n// entire class just no good.\nexport const parseClass = (glob, position) => {\n const pos = position;\n /* c8 ignore start */\n if (glob.charAt(pos) !== '[') {\n throw new Error('not in a brace expression');\n }\n /* c8 ignore stop */\n const ranges = [];\n const negs = [];\n let i = pos + 1;\n let sawStart = false;\n let uflag = false;\n let escaping = false;\n let negate = false;\n let endPos = pos;\n let rangeStart = '';\n WHILE: while (i < glob.length) {\n const c = glob.charAt(i);\n if ((c === '!' || c === '^') && i === pos + 1) {\n negate = true;\n i++;\n continue;\n }\n if (c === ']' && sawStart && !escaping) {\n endPos = i + 1;\n break;\n }\n sawStart = true;\n if (c === '\\\\') {\n if (!escaping) {\n escaping = true;\n i++;\n continue;\n }\n // escaped \\ char, fall through and treat like normal char\n }\n if (c === '[' && !escaping) {\n // either a posix class, a collation equivalent, or just a [\n for (const [cls, [unip, u, neg]] of Object.entries(posixClasses)) {\n if (glob.startsWith(cls, i)) {\n // invalid, [a-[] is fine, but not [a-[:alpha]]\n if (rangeStart) {\n return ['$.', false, glob.length - pos, true];\n }\n i += cls.length;\n if (neg)\n negs.push(unip);\n else\n ranges.push(unip);\n uflag = uflag || u;\n continue WHILE;\n }\n }\n }\n // now it's just a normal character, effectively\n escaping = false;\n if (rangeStart) {\n // throw this range away if it's not valid, but others\n // can still match.\n if (c > rangeStart) {\n ranges.push(braceEscape(rangeStart) + '-' + braceEscape(c));\n }\n else if (c === rangeStart) {\n ranges.push(braceEscape(c));\n }\n rangeStart = '';\n i++;\n continue;\n }\n // now might be the start of a range.\n // can be either c-d or c-] or c<more...>] or c] at this point\n if (glob.startsWith('-]', i + 1)) {\n ranges.push(braceEscape(c + '-'));\n i += 2;\n continue;\n }\n if (glob.startsWith('-', i + 1)) {\n rangeStart = c;\n i += 2;\n continue;\n }\n // not the start of a range, just a single character\n ranges.push(braceEscape(c));\n i++;\n }\n if (endPos < i) {\n // didn't see the end of the class, not a valid class,\n // but might still be valid as a literal match.\n return ['', false, 0, false];\n }\n // if we got no ranges and no negates, then we have a range that\n // cannot possibly match anything, and that poisons the whole glob\n if (!ranges.length && !negs.length) {\n return ['$.', false, glob.length - pos, true];\n }\n // if we got one positive range, and it's a single character, then that's\n // not actually a magic pattern, it's just that one literal character.\n // we should not treat that as \"magic\", we should just return the literal\n // character. [_] is a perfectly valid way to escape glob magic chars.\n if (negs.length === 0 &&\n ranges.length === 1 &&\n /^\\\\?.$/.test(ranges[0]) &&\n !negate) {\n const r = ranges[0].length === 2 ? ranges[0].slice(-1) : ranges[0];\n return [regexpEscape(r), false, endPos - pos, false];\n }\n const sranges = '[' + (negate ? '^' : '') + rangesToString(ranges) + ']';\n const snegs = '[' + (negate ? '' : '^') + rangesToString(negs) + ']';\n const comb = ranges.length && negs.length ? '(' + sranges + '|' + snegs + ')'\n : ranges.length ? sranges\n : snegs;\n return [comb, uflag, endPos - pos, true];\n};\n//# sourceMappingURL=brace-expressions.js.map","/**\n * Un-escape a string that has been escaped with {@link escape}.\n *\n * If the {@link MinimatchOptions.windowsPathsNoEscape} option is used, then\n * square-bracket escapes are removed, but not backslash escapes.\n *\n * For example, it will turn the string `'[*]'` into `*`, but it will not\n * turn `'\\\\*'` into `'*'`, because `\\` is a path separator in\n * `windowsPathsNoEscape` mode.\n *\n * When `windowsPathsNoEscape` is not set, then both square-bracket escapes and\n * backslash escapes are removed.\n *\n * Slashes (and backslashes in `windowsPathsNoEscape` mode) cannot be escaped\n * or unescaped.\n *\n * When `magicalBraces` is not set, escapes of braces (`{` and `}`) will not be\n * unescaped.\n */\nexport const unescape = (s, { windowsPathsNoEscape = false, magicalBraces = true, } = {}) => {\n if (magicalBraces) {\n return windowsPathsNoEscape ?\n s.replace(/\\[([^/\\\\])\\]/g, '$1')\n : s\n .replace(/((?!\\\\).|^)\\[([^/\\\\])\\]/g, '$1$2')\n .replace(/\\\\([^/])/g, '$1');\n }\n return windowsPathsNoEscape ?\n s.replace(/\\[([^/\\\\{}])\\]/g, '$1')\n : s\n .replace(/((?!\\\\).|^)\\[([^/\\\\{}])\\]/g, '$1$2')\n .replace(/\\\\([^/{}])/g, '$1');\n};\n//# sourceMappingURL=unescape.js.map","// parse a single path portion\nvar _a;\nimport { parseClass } from './brace-expressions.js';\nimport { unescape } from './unescape.js';\nconst types = new Set(['!', '?', '+', '*', '@']);\nconst isExtglobType = (c) => types.has(c);\nconst isExtglobAST = (c) => isExtglobType(c.type);\n// Map of which extglob types can adopt the children of a nested extglob\n//\n// anything but ! can adopt a matching type:\n// +(a|+(b|c)|d) => +(a|b|c|d)\n// *(a|*(b|c)|d) => *(a|b|c|d)\n// @(a|@(b|c)|d) => @(a|b|c|d)\n// ?(a|?(b|c)|d) => ?(a|b|c|d)\n//\n// * can adopt anything, because 0 or repetition is allowed\n// *(a|?(b|c)|d) => *(a|b|c|d)\n// *(a|+(b|c)|d) => *(a|b|c|d)\n// *(a|@(b|c)|d) => *(a|b|c|d)\n//\n// + can adopt @, because 1 or repetition is allowed\n// +(a|@(b|c)|d) => +(a|b|c|d)\n//\n// + and @ CANNOT adopt *, because 0 would be allowed\n// +(a|*(b|c)|d) => would match \"\", on *(b|c)\n// @(a|*(b|c)|d) => would match \"\", on *(b|c)\n//\n// + and @ CANNOT adopt ?, because 0 would be allowed\n// +(a|?(b|c)|d) => would match \"\", on ?(b|c)\n// @(a|?(b|c)|d) => would match \"\", on ?(b|c)\n//\n// ? can adopt @, because 0 or 1 is allowed\n// ?(a|@(b|c)|d) => ?(a|b|c|d)\n//\n// ? and @ CANNOT adopt * or +, because >1 would be allowed\n// ?(a|*(b|c)|d) => would match bbb on *(b|c)\n// @(a|*(b|c)|d) => would match bbb on *(b|c)\n// ?(a|+(b|c)|d) => would match bbb on +(b|c)\n// @(a|+(b|c)|d) => would match bbb on +(b|c)\n//\n// ! CANNOT adopt ! (nothing else can either)\n// !(a|!(b|c)|d) => !(a|b|c|d) would fail to match on b (not not b|c)\n//\n// ! can adopt @\n// !(a|@(b|c)|d) => !(a|b|c|d)\n//\n// ! CANNOT adopt *\n// !(a|*(b|c)|d) => !(a|b|c|d) would match on bbb, not allowed\n//\n// ! CANNOT adopt +\n// !(a|+(b|c)|d) => !(a|b|c|d) would match on bbb, not allowed\n//\n// ! CANNOT adopt ?\n// x!(a|?(b|c)|d) => x!(a|b|c|d) would fail to match \"x\"\nconst adoptionMap = new Map([\n ['!', ['@']],\n ['?', ['?', '@']],\n ['@', ['@']],\n ['*', ['*', '+', '?', '@']],\n ['+', ['+', '@']],\n]);\n// nested extglobs that can be adopted in, but with the addition of\n// a blank '' element.\nconst adoptionWithSpaceMap = new Map([\n ['!', ['?']],\n ['@', ['?']],\n ['+', ['?', '*']],\n]);\n// union of the previous two maps\nconst adoptionAnyMap = new Map([\n ['!', ['?', '@']],\n ['?', ['?', '@']],\n ['@', ['?', '@']],\n ['*', ['*', '+', '?', '@']],\n ['+', ['+', '@', '?', '*']],\n]);\n// Extglobs that can take over their parent if they are the only child\n// the key is parent, value maps child to resulting extglob parent type\n// '@' is omitted because it's a special case. An `@` extglob with a single\n// member can always be usurped by that subpattern.\nconst usurpMap = new Map([\n ['!', new Map([['!', '@']])],\n [\n '?',\n new Map([\n ['*', '*'],\n ['+', '*'],\n ]),\n ],\n [\n '@',\n new Map([\n ['!', '!'],\n ['?', '?'],\n ['@', '@'],\n ['*', '*'],\n ['+', '+'],\n ]),\n ],\n [\n '+',\n new Map([\n ['?', '*'],\n ['*', '*'],\n ]),\n ],\n]);\n// Patterns that get prepended to bind to the start of either the\n// entire string, or just a single path portion, to prevent dots\n// and/or traversal patterns, when needed.\n// Exts don't need the ^ or / bit, because the root binds that already.\nconst startNoTraversal = '(?!(?:^|/)\\\\.\\\\.?(?:$|/))';\nconst startNoDot = '(?!\\\\.)';\n// characters that indicate a start of pattern needs the \"no dots\" bit,\n// because a dot *might* be matched. ( is not in the list, because in\n// the case of a child extglob, it will handle the prevention itself.\nconst addPatternStart = new Set(['[', '.']);\n// cases where traversal is A-OK, no dot prevention needed\nconst justDots = new Set(['..', '.']);\nconst reSpecials = new Set('().*{}+?[]^$\\\\!');\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\n// any single thing other than /\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// use + when we need to ensure that *something* matches, because the * is\n// the only thing in the path portion.\nconst starNoEmpty = qmark + '+?';\n// remove the \\ chars that we added if we end up doing a nonmagic compare\n// const deslash = (s: string) => s.replace(/\\\\(.)/g, '$1')\nlet ID = 0;\nexport class AST {\n type;\n #root;\n #hasMagic;\n #uflag = false;\n #parts = [];\n #parent;\n #parentIndex;\n #negs;\n #filledNegs = false;\n #options;\n #toString;\n // set to true if it's an extglob with no children\n // (which really means one child of '')\n #emptyExt = false;\n id = ++ID;\n get depth() {\n return (this.#parent?.depth ?? -1) + 1;\n }\n [Symbol.for('nodejs.util.inspect.custom')]() {\n return {\n '@@type': 'AST',\n id: this.id,\n type: this.type,\n root: this.#root.id,\n parent: this.#parent?.id,\n depth: this.depth,\n partsLength: this.#parts.length,\n parts: this.#parts,\n };\n }\n constructor(type, parent, options = {}) {\n this.type = type;\n // extglobs are inherently magical\n if (type)\n this.#hasMagic = true;\n this.#parent = parent;\n this.#root = this.#parent ? this.#parent.#root : this;\n this.#options = this.#root === this ? options : this.#root.#options;\n this.#negs = this.#root === this ? [] : this.#root.#negs;\n if (type === '!' && !this.#root.#filledNegs)\n this.#negs.push(this);\n this.#parentIndex = this.#parent ? this.#parent.#parts.length : 0;\n }\n get hasMagic() {\n /* c8 ignore start */\n if (this.#hasMagic !== undefined)\n return this.#hasMagic;\n /* c8 ignore stop */\n for (const p of this.#parts) {\n if (typeof p === 'string')\n continue;\n if (p.type || p.hasMagic)\n return (this.#hasMagic = true);\n }\n // note: will be undefined until we generate the regexp src and find out\n return this.#hasMagic;\n }\n // reconstructs the pattern\n toString() {\n return (this.#toString !== undefined ? this.#toString\n : !this.type ?\n (this.#toString = this.#parts.map(p => String(p)).join(''))\n : (this.#toString =\n this.type +\n '(' +\n this.#parts.map(p => String(p)).join('|') +\n ')'));\n }\n #fillNegs() {\n /* c8 ignore start */\n if (this !== this.#root)\n throw new Error('should only call on root');\n if (this.#filledNegs)\n return this;\n /* c8 ignore stop */\n // call toString() once to fill this out\n this.toString();\n this.#filledNegs = true;\n let n;\n while ((n = this.#negs.pop())) {\n if (n.type !== '!')\n continue;\n // walk up the tree, appending everthing that comes AFTER parentIndex\n let p = n;\n let pp = p.#parent;\n while (pp) {\n for (let i = p.#parentIndex + 1; !pp.type && i < pp.#parts.length; i++) {\n for (const part of n.#parts) {\n /* c8 ignore start */\n if (typeof part === 'string') {\n throw new Error('string part in extglob AST??');\n }\n /* c8 ignore stop */\n part.copyIn(pp.#parts[i]);\n }\n }\n p = pp;\n pp = p.#parent;\n }\n }\n return this;\n }\n push(...parts) {\n for (const p of parts) {\n if (p === '')\n continue;\n /* c8 ignore start */\n if (typeof p !== 'string' &&\n !(p instanceof _a && p.#parent === this)) {\n throw new Error('invalid part: ' + p);\n }\n /* c8 ignore stop */\n this.#parts.push(p);\n }\n }\n toJSON() {\n const ret = this.type === null ?\n this.#parts\n .slice()\n .map(p => (typeof p === 'string' ? p : p.toJSON()))\n : [this.type, ...this.#parts.map(p => p.toJSON())];\n if (this.isStart() && !this.type)\n ret.unshift([]);\n if (this.isEnd() &&\n (this === this.#root ||\n (this.#root.#filledNegs && this.#parent?.type === '!'))) {\n ret.push({});\n }\n return ret;\n }\n isStart() {\n if (this.#root === this)\n return true;\n // if (this.type) return !!this.#parent?.isStart()\n if (!this.#parent?.isStart())\n return false;\n if (this.#parentIndex === 0)\n return true;\n // if everything AHEAD of this is a negation, then it's still the \"start\"\n const p = this.#parent;\n for (let i = 0; i < this.#parentIndex; i++) {\n const pp = p.#parts[i];\n if (!(pp instanceof _a && pp.type === '!')) {\n return false;\n }\n }\n return true;\n }\n isEnd() {\n if (this.#root === this)\n return true;\n if (this.#parent?.type === '!')\n return true;\n if (!this.#parent?.isEnd())\n return false;\n if (!this.type)\n return this.#parent?.isEnd();\n // if not root, it'll always have a parent\n /* c8 ignore start */\n const pl = this.#parent ? this.#parent.#parts.length : 0;\n /* c8 ignore stop */\n return this.#parentIndex === pl - 1;\n }\n copyIn(part) {\n if (typeof part === 'string')\n this.push(part);\n else\n this.push(part.clone(this));\n }\n clone(parent) {\n const c = new _a(this.type, parent);\n for (const p of this.#parts) {\n c.copyIn(p);\n }\n return c;\n }\n static #parseAST(str, ast, pos, opt, extDepth) {\n const maxDepth = opt.maxExtglobRecursion ?? 2;\n let escaping = false;\n let inBrace = false;\n let braceStart = -1;\n let braceNeg = false;\n if (ast.type === null) {\n // outside of a extglob, append until we find a start\n let i = pos;\n let acc = '';\n while (i < str.length) {\n const c = str.charAt(i++);\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping;\n acc += c;\n continue;\n }\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true;\n }\n }\n else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false;\n }\n acc += c;\n continue;\n }\n else if (c === '[') {\n inBrace = true;\n braceStart = i;\n braceNeg = false;\n acc += c;\n continue;\n }\n // we don't have to check for adoption here, because that's\n // done at the other recursion point.\n const doRecurse = !opt.noext &&\n isExtglobType(c) &&\n str.charAt(i) === '(' &&\n extDepth <= maxDepth;\n if (doRecurse) {\n ast.push(acc);\n acc = '';\n const ext = new _a(c, ast);\n i = _a.#parseAST(str, ext, i, opt, extDepth + 1);\n ast.push(ext);\n continue;\n }\n acc += c;\n }\n ast.push(acc);\n return i;\n }\n // some kind of extglob, pos is at the (\n // find the next | or )\n let i = pos + 1;\n let part = new _a(null, ast);\n const parts = [];\n let acc = '';\n while (i < str.length) {\n const c = str.charAt(i++);\n // still accumulate escapes at this point, but we do ignore\n // starts that are escaped\n if (escaping || c === '\\\\') {\n escaping = !escaping;\n acc += c;\n continue;\n }\n if (inBrace) {\n if (i === braceStart + 1) {\n if (c === '^' || c === '!') {\n braceNeg = true;\n }\n }\n else if (c === ']' && !(i === braceStart + 2 && braceNeg)) {\n inBrace = false;\n }\n acc += c;\n continue;\n }\n else if (c === '[') {\n inBrace = true;\n braceStart = i;\n braceNeg = false;\n acc += c;\n continue;\n }\n const doRecurse = !opt.noext &&\n isExtglobType(c) &&\n str.charAt(i) === '(' &&\n /* c8 ignore start - the maxDepth is sufficient here */\n (extDepth <= maxDepth || (ast && ast.#canAdoptType(c)));\n /* c8 ignore stop */\n if (doRecurse) {\n const depthAdd = ast && ast.#canAdoptType(c) ? 0 : 1;\n part.push(acc);\n acc = '';\n const ext = new _a(c, part);\n part.push(ext);\n i = _a.#parseAST(str, ext, i, opt, extDepth + depthAdd);\n continue;\n }\n if (c === '|') {\n part.push(acc);\n acc = '';\n parts.push(part);\n part = new _a(null, ast);\n continue;\n }\n if (c === ')') {\n if (acc === '' && ast.#parts.length === 0) {\n ast.#emptyExt = true;\n }\n part.push(acc);\n acc = '';\n ast.push(...parts, part);\n return i;\n }\n acc += c;\n }\n // unfinished extglob\n // if we got here, it was a malformed extglob! not an extglob, but\n // maybe something else in there.\n ast.type = null;\n ast.#hasMagic = undefined;\n ast.#parts = [str.substring(pos - 1)];\n return i;\n }\n #canAdoptWithSpace(child) {\n return this.#canAdopt(child, adoptionWithSpaceMap);\n }\n #canAdopt(child, map = adoptionMap) {\n if (!child ||\n typeof child !== 'object' ||\n child.type !== null ||\n child.#parts.length !== 1 ||\n this.type === null) {\n return false;\n }\n const gc = child.#parts[0];\n if (!gc || typeof gc !== 'object' || gc.type === null) {\n return false;\n }\n return this.#canAdoptType(gc.type, map);\n }\n #canAdoptType(c, map = adoptionAnyMap) {\n return !!map.get(this.type)?.includes(c);\n }\n #adoptWithSpace(child, index) {\n const gc = child.#parts[0];\n const blank = new _a(null, gc, this.options);\n blank.#parts.push('');\n gc.push(blank);\n this.#adopt(child, index);\n }\n #adopt(child, index) {\n const gc = child.#parts[0];\n this.#parts.splice(index, 1, ...gc.#parts);\n for (const p of gc.#parts) {\n if (typeof p === 'object')\n p.#parent = this;\n }\n this.#toString = undefined;\n }\n #canUsurpType(c) {\n const m = usurpMap.get(this.type);\n return !!m?.has(c);\n }\n #canUsurp(child) {\n if (!child ||\n typeof child !== 'object' ||\n child.type !== null ||\n child.#parts.length !== 1 ||\n this.type === null ||\n this.#parts.length !== 1) {\n return false;\n }\n const gc = child.#parts[0];\n if (!gc || typeof gc !== 'object' || gc.type === null) {\n return false;\n }\n return this.#canUsurpType(gc.type);\n }\n #usurp(child) {\n const m = usurpMap.get(this.type);\n const gc = child.#parts[0];\n const nt = m?.get(gc.type);\n /* c8 ignore start - impossible */\n if (!nt)\n return false;\n /* c8 ignore stop */\n this.#parts = gc.#parts;\n for (const p of this.#parts) {\n if (typeof p === 'object') {\n p.#parent = this;\n }\n }\n this.type = nt;\n this.#toString = undefined;\n this.#emptyExt = false;\n }\n static fromGlob(pattern, options = {}) {\n const ast = new _a(null, undefined, options);\n _a.#parseAST(pattern, ast, 0, options, 0);\n return ast;\n }\n // returns the regular expression if there's magic, or the unescaped\n // string if not.\n toMMPattern() {\n // should only be called on root\n /* c8 ignore start */\n if (this !== this.#root)\n return this.#root.toMMPattern();\n /* c8 ignore stop */\n const glob = this.toString();\n const [re, body, hasMagic, uflag] = this.toRegExpSource();\n // if we're in nocase mode, and not nocaseMagicOnly, then we do\n // still need a regular expression if we have to case-insensitively\n // match capital/lowercase characters.\n const anyMagic = hasMagic ||\n this.#hasMagic ||\n (this.#options.nocase &&\n !this.#options.nocaseMagicOnly &&\n glob.toUpperCase() !== glob.toLowerCase());\n if (!anyMagic) {\n return body;\n }\n const flags = (this.#options.nocase ? 'i' : '') + (uflag ? 'u' : '');\n return Object.assign(new RegExp(`^${re}$`, flags), {\n _src: re,\n _glob: glob,\n });\n }\n get options() {\n return this.#options;\n }\n // returns the string match, the regexp source, whether there's magic\n // in the regexp (so a regular expression is required) and whether or\n // not the uflag is needed for the regular expression (for posix classes)\n // TODO: instead of injecting the start/end at this point, just return\n // the BODY of the regexp, along with the start/end portions suitable\n // for binding the start/end in either a joined full-path makeRe context\n // (where we bind to (^|/), or a standalone matchPart context (where\n // we bind to ^, and not /). Otherwise slashes get duped!\n //\n // In part-matching mode, the start is:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: ^(?!\\.\\.?$)\n // - if dots allowed or not possible: ^\n // - if dots possible and not allowed: ^(?!\\.)\n // end is:\n // - if not isEnd(): nothing\n // - else: $\n //\n // In full-path matching mode, we put the slash at the START of the\n // pattern, so start is:\n // - if first pattern: same as part-matching mode\n // - if not isStart(): nothing\n // - if traversal possible, but not allowed: /(?!\\.\\.?(?:$|/))\n // - if dots allowed or not possible: /\n // - if dots possible and not allowed: /(?!\\.)\n // end is:\n // - if last pattern, same as part-matching mode\n // - else nothing\n //\n // Always put the (?:$|/) on negated tails, though, because that has to be\n // there to bind the end of the negated pattern portion, and it's easier to\n // just stick it in now rather than try to inject it later in the middle of\n // the pattern.\n //\n // We can just always return the same end, and leave it up to the caller\n // to know whether it's going to be used joined or in parts.\n // And, if the start is adjusted slightly, can do the same there:\n // - if not isStart: nothing\n // - if traversal possible, but not allowed: (?:/|^)(?!\\.\\.?$)\n // - if dots allowed or not possible: (?:/|^)\n // - if dots possible and not allowed: (?:/|^)(?!\\.)\n //\n // But it's better to have a simpler binding without a conditional, for\n // performance, so probably better to return both start options.\n //\n // Then the caller just ignores the end if it's not the first pattern,\n // and the start always gets applied.\n //\n // But that's always going to be $ if it's the ending pattern, or nothing,\n // so the caller can just attach $ at the end of the pattern when building.\n //\n // So the todo is:\n // - better detect what kind of start is needed\n // - return both flavors of starting pattern\n // - attach $ at the end of the pattern when creating the actual RegExp\n //\n // Ah, but wait, no, that all only applies to the root when the first pattern\n // is not an extglob. If the first pattern IS an extglob, then we need all\n // that dot prevention biz to live in the extglob portions, because eg\n // +(*|.x*) can match .xy but not .yx.\n //\n // So, return the two flavors if it's #root and the first child is not an\n // AST, otherwise leave it to the child AST to handle it, and there,\n // use the (?:^|/) style of start binding.\n //\n // Even simplified further:\n // - Since the start for a join is eg /(?!\\.) and the start for a part\n // is ^(?!\\.), we can just prepend (?!\\.) to the pattern (either root\n // or start or whatever) and prepend ^ or / at the Regexp construction.\n toRegExpSource(allowDot) {\n const dot = allowDot ?? !!this.#options.dot;\n if (this.#root === this) {\n this.#flatten();\n this.#fillNegs();\n }\n if (!isExtglobAST(this)) {\n const noEmpty = this.isStart() &&\n this.isEnd() &&\n !this.#parts.some(s => typeof s !== 'string');\n const src = this.#parts\n .map(p => {\n const [re, _, hasMagic, uflag] = typeof p === 'string' ?\n _a.#parseGlob(p, this.#hasMagic, noEmpty)\n : p.toRegExpSource(allowDot);\n this.#hasMagic = this.#hasMagic || hasMagic;\n this.#uflag = this.#uflag || uflag;\n return re;\n })\n .join('');\n let start = '';\n if (this.isStart()) {\n if (typeof this.#parts[0] === 'string') {\n // this is the string that will match the start of the pattern,\n // so we need to protect against dots and such.\n // '.' and '..' cannot match unless the pattern is that exactly,\n // even if it starts with . or dot:true is set.\n const dotTravAllowed = this.#parts.length === 1 && justDots.has(this.#parts[0]);\n if (!dotTravAllowed) {\n const aps = addPatternStart;\n // check if we have a possibility of matching . or ..,\n // and prevent that.\n const needNoTrav = \n // dots are allowed, and the pattern starts with [ or .\n (dot && aps.has(src.charAt(0))) ||\n // the pattern starts with \\., and then [ or .\n (src.startsWith('\\\\.') && aps.has(src.charAt(2))) ||\n // the pattern starts with \\.\\., and then [ or .\n (src.startsWith('\\\\.\\\\.') && aps.has(src.charAt(4)));\n // no need to prevent dots if it can't match a dot, or if a\n // sub-pattern will be preventing it anyway.\n const needNoDot = !dot && !allowDot && aps.has(src.charAt(0));\n start =\n needNoTrav ? startNoTraversal\n : needNoDot ? startNoDot\n : '';\n }\n }\n }\n // append the \"end of path portion\" pattern to negation tails\n let end = '';\n if (this.isEnd() &&\n this.#root.#filledNegs &&\n this.#parent?.type === '!') {\n end = '(?:$|\\\\/)';\n }\n const final = start + src + end;\n return [\n final,\n unescape(src),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ];\n }\n // We need to calculate the body *twice* if it's a repeat pattern\n // at the start, once in nodot mode, then again in dot mode, so a\n // pattern like *(?) can match 'x.y'\n const repeated = this.type === '*' || this.type === '+';\n // some kind of extglob\n const start = this.type === '!' ? '(?:(?!(?:' : '(?:';\n let body = this.#partsToRegExp(dot);\n if (this.isStart() && this.isEnd() && !body && this.type !== '!') {\n // invalid extglob, has to at least be *something* present, if it's\n // the entire path portion.\n const s = this.toString();\n const me = this;\n me.#parts = [s];\n me.type = null;\n me.#hasMagic = undefined;\n return [s, unescape(this.toString()), false, false];\n }\n let bodyDotAllowed = !repeated || allowDot || dot || !startNoDot ?\n ''\n : this.#partsToRegExp(true);\n if (bodyDotAllowed === body) {\n bodyDotAllowed = '';\n }\n if (bodyDotAllowed) {\n body = `(?:${body})(?:${bodyDotAllowed})*?`;\n }\n // an empty !() is exactly equivalent to a starNoEmpty\n let final = '';\n if (this.type === '!' && this.#emptyExt) {\n final = (this.isStart() && !dot ? startNoDot : '') + starNoEmpty;\n }\n else {\n const close = this.type === '!' ?\n // !() must match something,but !(x) can match ''\n '))' +\n (this.isStart() && !dot && !allowDot ? startNoDot : '') +\n star +\n ')'\n : this.type === '@' ? ')'\n : this.type === '?' ? ')?'\n : this.type === '+' && bodyDotAllowed ? ')'\n : this.type === '*' && bodyDotAllowed ? `)?`\n : `)${this.type}`;\n final = start + body + close;\n }\n return [\n final,\n unescape(body),\n (this.#hasMagic = !!this.#hasMagic),\n this.#uflag,\n ];\n }\n #flatten() {\n if (!isExtglobAST(this)) {\n for (const p of this.#parts) {\n if (typeof p === 'object') {\n p.#flatten();\n }\n }\n }\n else {\n // do up to 10 passes to flatten as much as possible\n let iterations = 0;\n let done = false;\n do {\n done = true;\n for (let i = 0; i < this.#parts.length; i++) {\n const c = this.#parts[i];\n if (typeof c === 'object') {\n c.#flatten();\n if (this.#canAdopt(c)) {\n done = false;\n this.#adopt(c, i);\n }\n else if (this.#canAdoptWithSpace(c)) {\n done = false;\n this.#adoptWithSpace(c, i);\n }\n else if (this.#canUsurp(c)) {\n done = false;\n this.#usurp(c);\n }\n }\n }\n } while (!done && ++iterations < 10);\n }\n this.#toString = undefined;\n }\n #partsToRegExp(dot) {\n return this.#parts\n .map(p => {\n // extglob ASTs should only contain parent ASTs\n /* c8 ignore start */\n if (typeof p === 'string') {\n throw new Error('string type in extglob ast??');\n }\n /* c8 ignore stop */\n // can ignore hasMagic, because extglobs are already always magic\n const [re, _, _hasMagic, uflag] = p.toRegExpSource(dot);\n this.#uflag = this.#uflag || uflag;\n return re;\n })\n .filter(p => !(this.isStart() && this.isEnd()) || !!p)\n .join('|');\n }\n static #parseGlob(glob, hasMagic, noEmpty = false) {\n let escaping = false;\n let re = '';\n let uflag = false;\n // multiple stars that aren't globstars coalesce into one *\n let inStar = false;\n for (let i = 0; i < glob.length; i++) {\n const c = glob.charAt(i);\n if (escaping) {\n escaping = false;\n re += (reSpecials.has(c) ? '\\\\' : '') + c;\n continue;\n }\n if (c === '*') {\n if (inStar)\n continue;\n inStar = true;\n re += noEmpty && /^[*]+$/.test(glob) ? starNoEmpty : star;\n hasMagic = true;\n continue;\n }\n else {\n inStar = false;\n }\n if (c === '\\\\') {\n if (i === glob.length - 1) {\n re += '\\\\\\\\';\n }\n else {\n escaping = true;\n }\n continue;\n }\n if (c === '[') {\n const [src, needUflag, consumed, magic] = parseClass(glob, i);\n if (consumed) {\n re += src;\n uflag = uflag || needUflag;\n i += consumed - 1;\n hasMagic = hasMagic || magic;\n continue;\n }\n }\n if (c === '?') {\n re += qmark;\n hasMagic = true;\n continue;\n }\n re += regExpEscape(c);\n }\n return [re, unescape(glob), !!hasMagic, uflag];\n }\n}\n_a = AST;\n//# sourceMappingURL=ast.js.map","/**\n * Escape all magic characters in a glob pattern.\n *\n * If the {@link MinimatchOptions.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 *\n * If the {@link MinimatchOptions.magicalBraces} option is used,\n * then braces (`{` and `}`) will be escaped.\n */\nexport const escape = (s, { windowsPathsNoEscape = false, magicalBraces = false, } = {}) => {\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 if (magicalBraces) {\n return windowsPathsNoEscape ?\n s.replace(/[?*()[\\]{}]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\{}]/g, '\\\\$&');\n }\n return windowsPathsNoEscape ?\n s.replace(/[?*()[\\]]/g, '[$&]')\n : s.replace(/[?*()[\\]\\\\]/g, '\\\\$&');\n};\n//# sourceMappingURL=escape.js.map","import { expand } from 'brace-expansion';\nimport { assertValidPattern } from './assert-valid-pattern.js';\nimport { AST } from './ast.js';\nimport { escape } from './escape.js';\nimport { unescape } from './unescape.js';\nexport const minimatch = (p, pattern, options = {}) => {\n assertValidPattern(pattern);\n // shortcut: comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n return false;\n }\n return new Minimatch(pattern, options).match(p);\n};\n// Optimized checking for the most common glob patterns.\nconst starDotExtRE = /^\\*+([^+@!?*[(]*)$/;\nconst starDotExtTest = (ext) => (f) => !f.startsWith('.') && f.endsWith(ext);\nconst starDotExtTestDot = (ext) => (f) => f.endsWith(ext);\nconst starDotExtTestNocase = (ext) => {\n ext = ext.toLowerCase();\n return (f) => !f.startsWith('.') && f.toLowerCase().endsWith(ext);\n};\nconst starDotExtTestNocaseDot = (ext) => {\n ext = ext.toLowerCase();\n return (f) => f.toLowerCase().endsWith(ext);\n};\nconst starDotStarRE = /^\\*+\\.\\*+$/;\nconst starDotStarTest = (f) => !f.startsWith('.') && f.includes('.');\nconst starDotStarTestDot = (f) => f !== '.' && f !== '..' && f.includes('.');\nconst dotStarRE = /^\\.\\*+$/;\nconst dotStarTest = (f) => f !== '.' && f !== '..' && f.startsWith('.');\nconst starRE = /^\\*+$/;\nconst starTest = (f) => f.length !== 0 && !f.startsWith('.');\nconst starTestDot = (f) => f.length !== 0 && f !== '.' && f !== '..';\nconst qmarksRE = /^\\?+([^+@!?*[(]*)?$/;\nconst qmarksTestNocase = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestNocaseDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n if (!ext)\n return noext;\n ext = ext.toLowerCase();\n return (f) => noext(f) && f.toLowerCase().endsWith(ext);\n};\nconst qmarksTestDot = ([$0, ext = '']) => {\n const noext = qmarksTestNoExtDot([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTest = ([$0, ext = '']) => {\n const noext = qmarksTestNoExt([$0]);\n return !ext ? noext : (f) => noext(f) && f.endsWith(ext);\n};\nconst qmarksTestNoExt = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && !f.startsWith('.');\n};\nconst qmarksTestNoExtDot = ([$0]) => {\n const len = $0.length;\n return (f) => f.length === len && f !== '.' && f !== '..';\n};\n/* c8 ignore start */\nconst defaultPlatform = (typeof process === 'object' && process ?\n (typeof process.env === 'object' &&\n process.env &&\n process.env.__MINIMATCH_TESTING_PLATFORM__) ||\n process.platform\n : 'posix');\nconst path = {\n win32: { sep: '\\\\' },\n posix: { sep: '/' },\n};\n/* c8 ignore stop */\nexport const sep = defaultPlatform === 'win32' ? path.win32.sep : path.posix.sep;\nminimatch.sep = sep;\nexport const GLOBSTAR = Symbol('globstar **');\nminimatch.GLOBSTAR = GLOBSTAR;\n// any single thing other than /\n// don't need to escape / when using new RegExp()\nconst qmark = '[^/]';\n// * => any number of characters\nconst star = qmark + '*?';\n// ** when dots are allowed. Anything goes, except .. and .\n// not (^ or / followed by one or two dots followed by $ or /),\n// followed by anything, any number of times.\nconst twoStarDot = '(?:(?!(?:\\\\/|^)(?:\\\\.{1,2})($|\\\\/)).)*?';\n// not a ^ or / followed by a dot,\n// followed by anything, any number of times.\nconst twoStarNoDot = '(?:(?!(?:\\\\/|^)\\\\.).)*?';\nexport const filter = (pattern, options = {}) => (p) => minimatch(p, pattern, options);\nminimatch.filter = filter;\nconst ext = (a, b = {}) => Object.assign({}, a, b);\nexport const defaults = (def) => {\n if (!def || typeof def !== 'object' || !Object.keys(def).length) {\n return minimatch;\n }\n const orig = minimatch;\n const m = (p, pattern, options = {}) => orig(p, pattern, ext(def, options));\n return Object.assign(m, {\n Minimatch: class Minimatch extends orig.Minimatch {\n constructor(pattern, options = {}) {\n super(pattern, ext(def, options));\n }\n static defaults(options) {\n return orig.defaults(ext(def, options)).Minimatch;\n }\n },\n AST: class AST extends orig.AST {\n /* c8 ignore start */\n constructor(type, parent, options = {}) {\n super(type, parent, ext(def, options));\n }\n /* c8 ignore stop */\n static fromGlob(pattern, options = {}) {\n return orig.AST.fromGlob(pattern, ext(def, options));\n }\n },\n unescape: (s, options = {}) => orig.unescape(s, ext(def, options)),\n escape: (s, options = {}) => orig.escape(s, ext(def, options)),\n filter: (pattern, options = {}) => orig.filter(pattern, ext(def, options)),\n defaults: (options) => orig.defaults(ext(def, options)),\n makeRe: (pattern, options = {}) => orig.makeRe(pattern, ext(def, options)),\n braceExpand: (pattern, options = {}) => orig.braceExpand(pattern, ext(def, options)),\n match: (list, pattern, options = {}) => orig.match(list, pattern, ext(def, options)),\n sep: orig.sep,\n GLOBSTAR: GLOBSTAR,\n });\n};\nminimatch.defaults = defaults;\n// Brace expansion:\n// a{b,c}d -> abd acd\n// a{b,}c -> abc ac\n// a{0..3}d -> a0d a1d a2d a3d\n// a{b,c{d,e}f}g -> abg acdfg acefg\n// a{b,c}d{e,f}g -> abdeg acdeg abdeg abdfg\n//\n// Invalid sets are not expanded.\n// a{2..}b -> a{2..}b\n// a{b}c -> a{b}c\nexport const braceExpand = (pattern, options = {}) => {\n assertValidPattern(pattern);\n // Thanks to Yeting Li <https://github.com/yetingli> for\n // improving this regexp to avoid a ReDOS vulnerability.\n if (options.nobrace || !/\\{(?:(?!\\{).)*\\}/.test(pattern)) {\n // shortcut. no need to expand.\n return [pattern];\n }\n return expand(pattern, { max: options.braceExpandMax });\n};\nminimatch.braceExpand = braceExpand;\n// parse a component of the expanded set.\n// At this point, no pattern may contain \"/\" in it\n// so we're going to return a 2d array, where each entry is the full\n// pattern, split on '/', and then turned into a regular expression.\n// A regexp is made at the end which joins each array with an\n// escaped /, and another full one which joins each regexp with |.\n//\n// Following the lead of Bash 4.1, note that \"**\" only has special meaning\n// when it is the *only* thing in a path portion. Otherwise, any series\n// of * is equivalent to a single *. Globstar behavior is enabled by\n// default, and can be disabled by setting options.noglobstar.\nexport const makeRe = (pattern, options = {}) => new Minimatch(pattern, options).makeRe();\nminimatch.makeRe = makeRe;\nexport const match = (list, pattern, options = {}) => {\n const mm = new Minimatch(pattern, options);\n list = list.filter(f => mm.match(f));\n if (mm.options.nonull && !list.length) {\n list.push(pattern);\n }\n return list;\n};\nminimatch.match = match;\n// replace stuff like \\* with *\nconst globMagic = /[?*]|[+@!]\\(.*?\\)|\\[|\\]/;\nconst regExpEscape = (s) => s.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&');\nexport class Minimatch {\n options;\n set;\n pattern;\n windowsPathsNoEscape;\n nonegate;\n negate;\n comment;\n empty;\n preserveMultipleSlashes;\n partial;\n globSet;\n globParts;\n nocase;\n isWindows;\n platform;\n windowsNoMagicRoot;\n maxGlobstarRecursion;\n regexp;\n constructor(pattern, options = {}) {\n assertValidPattern(pattern);\n options = options || {};\n this.options = options;\n this.maxGlobstarRecursion = options.maxGlobstarRecursion ?? 200;\n this.pattern = pattern;\n this.platform = options.platform || defaultPlatform;\n this.isWindows = this.platform === 'win32';\n // avoid the annoying deprecation flag lol\n const awe = ('allowWindow' + 'sEscape');\n this.windowsPathsNoEscape =\n !!options.windowsPathsNoEscape || options[awe] === false;\n if (this.windowsPathsNoEscape) {\n this.pattern = this.pattern.replace(/\\\\/g, '/');\n }\n this.preserveMultipleSlashes = !!options.preserveMultipleSlashes;\n this.regexp = null;\n this.negate = false;\n this.nonegate = !!options.nonegate;\n this.comment = false;\n this.empty = false;\n this.partial = !!options.partial;\n this.nocase = !!this.options.nocase;\n this.windowsNoMagicRoot =\n options.windowsNoMagicRoot !== undefined ?\n options.windowsNoMagicRoot\n : !!(this.isWindows && this.nocase);\n this.globSet = [];\n this.globParts = [];\n this.set = [];\n // make the set of regexps etc.\n this.make();\n }\n hasMagic() {\n if (this.options.magicalBraces && this.set.length > 1) {\n return true;\n }\n for (const pattern of this.set) {\n for (const part of pattern) {\n if (typeof part !== 'string')\n return true;\n }\n }\n return false;\n }\n debug(..._) { }\n make() {\n const pattern = this.pattern;\n const options = this.options;\n // empty patterns and comments match nothing.\n if (!options.nocomment && pattern.charAt(0) === '#') {\n this.comment = true;\n return;\n }\n if (!pattern) {\n this.empty = true;\n return;\n }\n // step 1: figure out negation, etc.\n this.parseNegate();\n // step 2: expand braces\n this.globSet = [...new Set(this.braceExpand())];\n if (options.debug) {\n //oxlint-disable-next-line no-console\n this.debug = (...args) => console.error(...args);\n }\n this.debug(this.pattern, this.globSet);\n // step 3: now we have a set, so turn each one into a series of\n // path-portion matching patterns.\n // These will be regexps, except in the case of \"**\", which is\n // set to the GLOBSTAR object for globstar behavior,\n // and will not contain any / characters\n //\n // First, we preprocess to make the glob pattern sets a bit simpler\n // and deduped. There are some perf-killing patterns that can cause\n // problems with a glob walk, but we can simplify them down a bit.\n const rawGlobParts = this.globSet.map(s => this.slashSplit(s));\n this.globParts = this.preprocess(rawGlobParts);\n this.debug(this.pattern, this.globParts);\n // glob --> regexps\n let set = this.globParts.map((s, _, __) => {\n if (this.isWindows && this.windowsNoMagicRoot) {\n // check if it's a drive or unc path.\n const isUNC = s[0] === '' &&\n s[1] === '' &&\n (s[2] === '?' || !globMagic.test(s[2])) &&\n !globMagic.test(s[3]);\n const isDrive = /^[a-z]:/i.test(s[0]);\n if (isUNC) {\n return [\n ...s.slice(0, 4),\n ...s.slice(4).map(ss => this.parse(ss)),\n ];\n }\n else if (isDrive) {\n return [s[0], ...s.slice(1).map(ss => this.parse(ss))];\n }\n }\n return s.map(ss => this.parse(ss));\n });\n this.debug(this.pattern, set);\n // filter out everything that didn't compile properly.\n this.set = set.filter(s => s.indexOf(false) === -1);\n // do not treat the ? in UNC paths as magic\n if (this.isWindows) {\n for (let i = 0; i < this.set.length; i++) {\n const p = this.set[i];\n if (p[0] === '' &&\n p[1] === '' &&\n this.globParts[i][2] === '?' &&\n typeof p[3] === 'string' &&\n /^[a-z]:$/i.test(p[3])) {\n p[2] = '?';\n }\n }\n }\n this.debug(this.pattern, this.set);\n }\n // various transforms to equivalent pattern sets that are\n // faster to process in a filesystem walk. The goal is to\n // eliminate what we can, and push all ** patterns as far\n // to the right as possible, even if it increases the number\n // of patterns that we have to process.\n preprocess(globParts) {\n // if we're not in globstar mode, then turn ** into *\n if (this.options.noglobstar) {\n for (const partset of globParts) {\n for (let j = 0; j < partset.length; j++) {\n if (partset[j] === '**') {\n partset[j] = '*';\n }\n }\n }\n }\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n // aggressive optimization for the purpose of fs walking\n globParts = this.firstPhasePreProcess(globParts);\n globParts = this.secondPhasePreProcess(globParts);\n }\n else if (optimizationLevel >= 1) {\n // just basic optimizations to remove some .. parts\n globParts = this.levelOneOptimize(globParts);\n }\n else {\n // just collapse multiple ** portions into one\n globParts = this.adjascentGlobstarOptimize(globParts);\n }\n return globParts;\n }\n // just get rid of adjascent ** portions\n adjascentGlobstarOptimize(globParts) {\n return globParts.map(parts => {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let i = gs;\n while (parts[i + 1] === '**') {\n i++;\n }\n if (i !== gs) {\n parts.splice(gs, i - gs);\n }\n }\n return parts;\n });\n }\n // get rid of adjascent ** and resolve .. portions\n levelOneOptimize(globParts) {\n return globParts.map(parts => {\n parts = parts.reduce((set, part) => {\n const prev = set[set.length - 1];\n if (part === '**' && prev === '**') {\n return set;\n }\n if (part === '..') {\n if (prev && prev !== '..' && prev !== '.' && prev !== '**') {\n set.pop();\n return set;\n }\n }\n set.push(part);\n return set;\n }, []);\n return parts.length === 0 ? [''] : parts;\n });\n }\n levelTwoFileOptimize(parts) {\n if (!Array.isArray(parts)) {\n parts = this.slashSplit(parts);\n }\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p &&\n p !== '.' &&\n p !== '..' &&\n p !== '**' &&\n !(this.isWindows && /^[a-z]:$/i.test(p))) {\n didSomething = true;\n parts.splice(dd - 1, 2);\n dd -= 2;\n }\n }\n } while (didSomething);\n return parts.length === 0 ? [''] : parts;\n }\n // First phase: single-pattern processing\n // <pre> is 1 or more portions\n // <rest> is 1 or more portions\n // <p> is any portion other than ., .., '', or **\n // <e> is . or ''\n //\n // **/.. is *brutal* for filesystem walking performance, because\n // it effectively resets the recursive walk each time it occurs,\n // and ** cannot be reduced out by a .. pattern part like a regexp\n // or most strings (other than .., ., and '') can be.\n //\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n // <pre>/<e>/<rest> -> <pre>/<rest>\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n // **/**/<rest> -> **/<rest>\n //\n // **/*/<rest> -> */**/<rest> <== not valid because ** doesn't follow\n // this WOULD be allowed if ** did follow symlinks, or * didn't\n firstPhasePreProcess(globParts) {\n let didSomething = false;\n do {\n didSomething = false;\n // <pre>/**/../<p>/<p>/<rest> -> {<pre>/../<p>/<p>/<rest>,<pre>/**/<p>/<p>/<rest>}\n for (let parts of globParts) {\n let gs = -1;\n while (-1 !== (gs = parts.indexOf('**', gs + 1))) {\n let gss = gs;\n while (parts[gss + 1] === '**') {\n // <pre>/**/**/<rest> -> <pre>/**/<rest>\n gss++;\n }\n // eg, if gs is 2 and gss is 4, that means we have 3 **\n // parts, and can remove 2 of them.\n if (gss > gs) {\n parts.splice(gs + 1, gss - gs);\n }\n let next = parts[gs + 1];\n const p = parts[gs + 2];\n const p2 = parts[gs + 3];\n if (next !== '..')\n continue;\n if (!p ||\n p === '.' ||\n p === '..' ||\n !p2 ||\n p2 === '.' ||\n p2 === '..') {\n continue;\n }\n didSomething = true;\n // edit parts in place, and push the new one\n parts.splice(gs, 1);\n const other = parts.slice(0);\n other[gs] = '**';\n globParts.push(other);\n gs--;\n }\n // <pre>/<e>/<rest> -> <pre>/<rest>\n if (!this.preserveMultipleSlashes) {\n for (let i = 1; i < parts.length - 1; i++) {\n const p = parts[i];\n // don't squeeze out UNC patterns\n if (i === 1 && p === '' && parts[0] === '')\n continue;\n if (p === '.' || p === '') {\n didSomething = true;\n parts.splice(i, 1);\n i--;\n }\n }\n if (parts[0] === '.' &&\n parts.length === 2 &&\n (parts[1] === '.' || parts[1] === '')) {\n didSomething = true;\n parts.pop();\n }\n }\n // <pre>/<p>/../<rest> -> <pre>/<rest>\n let dd = 0;\n while (-1 !== (dd = parts.indexOf('..', dd + 1))) {\n const p = parts[dd - 1];\n if (p && p !== '.' && p !== '..' && p !== '**') {\n didSomething = true;\n const needDot = dd === 1 && parts[dd + 1] === '**';\n const splin = needDot ? ['.'] : [];\n parts.splice(dd - 1, 2, ...splin);\n if (parts.length === 0)\n parts.push('');\n dd -= 2;\n }\n }\n }\n } while (didSomething);\n return globParts;\n }\n // second phase: multi-pattern dedupes\n // {<pre>/*/<rest>,<pre>/<p>/<rest>} -> <pre>/*/<rest>\n // {<pre>/<rest>,<pre>/<rest>} -> <pre>/<rest>\n // {<pre>/**/<rest>,<pre>/<rest>} -> <pre>/**/<rest>\n //\n // {<pre>/**/<rest>,<pre>/**/<p>/<rest>} -> <pre>/**/<rest>\n // ^-- not valid because ** doens't follow symlinks\n secondPhasePreProcess(globParts) {\n for (let i = 0; i < globParts.length - 1; i++) {\n for (let j = i + 1; j < globParts.length; j++) {\n const matched = this.partsMatch(globParts[i], globParts[j], !this.preserveMultipleSlashes);\n if (matched) {\n globParts[i] = [];\n globParts[j] = matched;\n break;\n }\n }\n }\n return globParts.filter(gs => gs.length);\n }\n partsMatch(a, b, emptyGSMatch = false) {\n let ai = 0;\n let bi = 0;\n let result = [];\n let which = '';\n while (ai < a.length && bi < b.length) {\n if (a[ai] === b[bi]) {\n result.push(which === 'b' ? b[bi] : a[ai]);\n ai++;\n bi++;\n }\n else if (emptyGSMatch && a[ai] === '**' && b[bi] === a[ai + 1]) {\n result.push(a[ai]);\n ai++;\n }\n else if (emptyGSMatch && b[bi] === '**' && a[ai] === b[bi + 1]) {\n result.push(b[bi]);\n bi++;\n }\n else if (a[ai] === '*' &&\n b[bi] &&\n (this.options.dot || !b[bi].startsWith('.')) &&\n b[bi] !== '**') {\n if (which === 'b')\n return false;\n which = 'a';\n result.push(a[ai]);\n ai++;\n bi++;\n }\n else if (b[bi] === '*' &&\n a[ai] &&\n (this.options.dot || !a[ai].startsWith('.')) &&\n a[ai] !== '**') {\n if (which === 'a')\n return false;\n which = 'b';\n result.push(b[bi]);\n ai++;\n bi++;\n }\n else {\n return false;\n }\n }\n // if we fall out of the loop, it means they two are identical\n // as long as their lengths match\n return a.length === b.length && result;\n }\n parseNegate() {\n if (this.nonegate)\n return;\n const pattern = this.pattern;\n let negate = false;\n let negateOffset = 0;\n for (let i = 0; i < pattern.length && pattern.charAt(i) === '!'; i++) {\n negate = !negate;\n negateOffset++;\n }\n if (negateOffset)\n this.pattern = pattern.slice(negateOffset);\n this.negate = negate;\n }\n // set partial to true to test if, for example,\n // \"/a/b\" matches the start of \"/*/b/*/d\"\n // Partial means, if you run out of file before you run\n // out of pattern, then that's fine, as long as all\n // the parts match.\n matchOne(file, pattern, partial = false) {\n let fileStartIndex = 0;\n let patternStartIndex = 0;\n // UNC paths like //?/X:/... can match X:/... and vice versa\n // Drive letters in absolute drive or unc paths are always compared\n // case-insensitively.\n if (this.isWindows) {\n const fileDrive = typeof file[0] === 'string' && /^[a-z]:$/i.test(file[0]);\n const fileUNC = !fileDrive &&\n file[0] === '' &&\n file[1] === '' &&\n file[2] === '?' &&\n /^[a-z]:$/i.test(file[3]);\n const patternDrive = typeof pattern[0] === 'string' && /^[a-z]:$/i.test(pattern[0]);\n const patternUNC = !patternDrive &&\n pattern[0] === '' &&\n pattern[1] === '' &&\n pattern[2] === '?' &&\n typeof pattern[3] === 'string' &&\n /^[a-z]:$/i.test(pattern[3]);\n const fdi = fileUNC ? 3\n : fileDrive ? 0\n : undefined;\n const pdi = patternUNC ? 3\n : patternDrive ? 0\n : undefined;\n if (typeof fdi === 'number' && typeof pdi === 'number') {\n const [fd, pd] = [\n file[fdi],\n pattern[pdi],\n ];\n // start matching at the drive letter index of each\n if (fd.toLowerCase() === pd.toLowerCase()) {\n pattern[pdi] = fd;\n patternStartIndex = pdi;\n fileStartIndex = fdi;\n }\n }\n }\n // resolve and reduce . and .. portions in the file as well.\n // don't need to do the second phase, because it's only one string[]\n const { optimizationLevel = 1 } = this.options;\n if (optimizationLevel >= 2) {\n file = this.levelTwoFileOptimize(file);\n }\n if (pattern.includes(GLOBSTAR)) {\n return this.#matchGlobstar(file, pattern, partial, fileStartIndex, patternStartIndex);\n }\n return this.#matchOne(file, pattern, partial, fileStartIndex, patternStartIndex);\n }\n #matchGlobstar(file, pattern, partial, fileIndex, patternIndex) {\n // split the pattern into head, tail, and middle of ** delimited parts\n const firstgs = pattern.indexOf(GLOBSTAR, patternIndex);\n const lastgs = pattern.lastIndexOf(GLOBSTAR);\n // split the pattern up into globstar-delimited sections\n // the tail has to be at the end, and the others just have\n // to be found in order from the head.\n const [head, body, tail] = partial ?\n [\n pattern.slice(patternIndex, firstgs),\n pattern.slice(firstgs + 1),\n [],\n ]\n : [\n pattern.slice(patternIndex, firstgs),\n pattern.slice(firstgs + 1, lastgs),\n pattern.slice(lastgs + 1),\n ];\n // check the head, from the current file/pattern index.\n if (head.length) {\n const fileHead = file.slice(fileIndex, fileIndex + head.length);\n if (!this.#matchOne(fileHead, head, partial, 0, 0)) {\n return false;\n }\n fileIndex += head.length;\n patternIndex += head.length;\n }\n // now we know the head matches!\n // if the last portion is not empty, it MUST match the end\n // check the tail\n let fileTailMatch = 0;\n if (tail.length) {\n // if head + tail > file, then we cannot possibly match\n if (tail.length + fileIndex > file.length)\n return false;\n // try to match the tail\n let tailStart = file.length - tail.length;\n if (this.#matchOne(file, tail, partial, tailStart, 0)) {\n fileTailMatch = tail.length;\n }\n else {\n // affordance for stuff like a/**/* matching a/b/\n // if the last file portion is '', and there's more to the pattern\n // then try without the '' bit.\n if (file[file.length - 1] !== '' ||\n fileIndex + tail.length === file.length) {\n return false;\n }\n tailStart--;\n if (!this.#matchOne(file, tail, partial, tailStart, 0)) {\n return false;\n }\n fileTailMatch = tail.length + 1;\n }\n }\n // now we know the tail matches!\n // the middle is zero or more portions wrapped in **, possibly\n // containing more ** sections.\n // so a/**/b/**/c/**/d has become **/b/**/c/**\n // if it's empty, it means a/**/b, just verify we have no bad dots\n // if there's no tail, so it ends on /**, then we must have *something*\n // after the head, or it's not a matc\n if (!body.length) {\n let sawSome = !!fileTailMatch;\n for (let i = fileIndex; i < file.length - fileTailMatch; i++) {\n const f = String(file[i]);\n sawSome = true;\n if (f === '.' ||\n f === '..' ||\n (!this.options.dot && f.startsWith('.'))) {\n return false;\n }\n }\n // in partial mode, we just need to get past all file parts\n return partial || sawSome;\n }\n // now we know that there's one or more body sections, which can\n // be matched anywhere from the 0 index (because the head was pruned)\n // through to the length-fileTailMatch index.\n // split the body up into sections, and note the minimum index it can\n // be found at (start with the length of all previous segments)\n // [section, before, after]\n const bodySegments = [[[], 0]];\n let currentBody = bodySegments[0];\n let nonGsParts = 0;\n const nonGsPartsSums = [0];\n for (const b of body) {\n if (b === GLOBSTAR) {\n nonGsPartsSums.push(nonGsParts);\n currentBody = [[], 0];\n bodySegments.push(currentBody);\n }\n else {\n currentBody[0].push(b);\n nonGsParts++;\n }\n }\n let i = bodySegments.length - 1;\n const fileLength = file.length - fileTailMatch;\n for (const b of bodySegments) {\n b[1] = fileLength - (nonGsPartsSums[i--] + b[0].length);\n }\n return !!this.#matchGlobStarBodySections(file, bodySegments, fileIndex, 0, partial, 0, !!fileTailMatch);\n }\n // return false for \"nope, not matching\"\n // return null for \"not matching, cannot keep trying\"\n #matchGlobStarBodySections(file, \n // pattern section, last possible position for it\n bodySegments, fileIndex, bodyIndex, partial, globStarDepth, sawTail) {\n // take the first body segment, and walk from fileIndex to its \"after\"\n // value at the end\n // If it doesn't match at that position, we increment, until we hit\n // that final possible position, and give up.\n // If it does match, then advance and try to rest.\n // If any of them fail we keep walking forward.\n // this is still a bit recursively painful, but it's more constrained\n // than previous implementations, because we never test something that\n // can't possibly be a valid matching condition.\n const bs = bodySegments[bodyIndex];\n if (!bs) {\n // just make sure that there's no bad dots\n for (let i = fileIndex; i < file.length; i++) {\n sawTail = true;\n const f = file[i];\n if (f === '.' ||\n f === '..' ||\n (!this.options.dot && f.startsWith('.'))) {\n return false;\n }\n }\n return sawTail;\n }\n // have a non-globstar body section to test\n const [body, after] = bs;\n while (fileIndex <= after) {\n const m = this.#matchOne(file.slice(0, fileIndex + body.length), body, partial, fileIndex, 0);\n // if limit exceeded, no match. intentional false negative,\n // acceptable break in correctness for security.\n if (m && globStarDepth < this.maxGlobstarRecursion) {\n // match! see if the rest match. if so, we're done!\n const sub = this.#matchGlobStarBodySections(file, bodySegments, fileIndex + body.length, bodyIndex + 1, partial, globStarDepth + 1, sawTail);\n if (sub !== false) {\n return sub;\n }\n }\n const f = file[fileIndex];\n if (f === '.' ||\n f === '..' ||\n (!this.options.dot && f.startsWith('.'))) {\n return false;\n }\n fileIndex++;\n }\n // walked off. no point continuing\n return partial || null;\n }\n #matchOne(file, pattern, partial, fileIndex, patternIndex) {\n let fi;\n let pi;\n let pl;\n let fl;\n for (fi = fileIndex,\n pi = patternIndex,\n fl = file.length,\n pl = pattern.length; fi < fl && pi < pl; fi++, pi++) {\n this.debug('matchOne loop');\n let p = pattern[pi];\n let f = file[fi];\n this.debug(pattern, p, f);\n // should be impossible.\n // some invalid regexp stuff in the set.\n /* c8 ignore start */\n if (p === false || p === GLOBSTAR) {\n return false;\n }\n /* c8 ignore stop */\n // something other than **\n // non-magic patterns just have to match exactly\n // patterns with magic have been turned into regexps.\n let hit;\n if (typeof p === 'string') {\n hit = f === p;\n this.debug('string match', p, f, hit);\n }\n else {\n hit = p.test(f);\n this.debug('pattern match', p, f, hit);\n }\n if (!hit)\n return false;\n }\n // Note: ending in / means that we'll get a final \"\"\n // at the end of the pattern. This can only match a\n // corresponding \"\" at the end of the file.\n // If the file ends in /, then it can only match a\n // a pattern that ends in /, unless the pattern just\n // doesn't have any more for it. But, a/b/ should *not*\n // match \"a/b/*\", even though \"\" matches against the\n // [^/]*? pattern, except in partial mode, where it might\n // simply not be reached yet.\n // However, a/b/ should still satisfy a/*\n // now either we fell off the end of the pattern, or we're done.\n if (fi === fl && pi === pl) {\n // ran out of pattern and filename at the same time.\n // an exact hit!\n return true;\n }\n else if (fi === fl) {\n // ran out of file, but still had pattern left.\n // this is ok if we're doing the match as part of\n // a glob fs traversal.\n return partial;\n }\n else if (pi === pl) {\n // ran out of pattern, still have file left.\n // this is only acceptable if we're on the very last\n // empty segment of a file with a trailing slash.\n // a/* should match a/b/\n return fi === fl - 1 && file[fi] === '';\n /* c8 ignore start */\n }\n else {\n // should be unreachable.\n throw new Error('wtf?');\n }\n /* c8 ignore stop */\n }\n braceExpand() {\n return braceExpand(this.pattern, this.options);\n }\n parse(pattern) {\n assertValidPattern(pattern);\n const options = this.options;\n // shortcuts\n if (pattern === '**')\n return GLOBSTAR;\n if (pattern === '')\n return '';\n // far and away, the most common glob pattern parts are\n // *, *.*, and *.<ext> Add a fast check method for those.\n let m;\n let fastTest = null;\n if ((m = pattern.match(starRE))) {\n fastTest = options.dot ? starTestDot : starTest;\n }\n else if ((m = pattern.match(starDotExtRE))) {\n fastTest = (options.nocase ?\n options.dot ?\n starDotExtTestNocaseDot\n : starDotExtTestNocase\n : options.dot ? starDotExtTestDot\n : starDotExtTest)(m[1]);\n }\n else if ((m = pattern.match(qmarksRE))) {\n fastTest = (options.nocase ?\n options.dot ?\n qmarksTestNocaseDot\n : qmarksTestNocase\n : options.dot ? qmarksTestDot\n : qmarksTest)(m);\n }\n else if ((m = pattern.match(starDotStarRE))) {\n fastTest = options.dot ? starDotStarTestDot : starDotStarTest;\n }\n else if ((m = pattern.match(dotStarRE))) {\n fastTest = dotStarTest;\n }\n const re = AST.fromGlob(pattern, this.options).toMMPattern();\n if (fastTest && typeof re === 'object') {\n // Avoids overriding in frozen environments\n Reflect.defineProperty(re, 'test', { value: fastTest });\n }\n return re;\n }\n makeRe() {\n if (this.regexp || this.regexp === false)\n return this.regexp;\n // at this point, this.set is a 2d array of partial\n // pattern strings, or \"**\".\n //\n // It's better to use .match(). This function shouldn't\n // be used, really, but it's pretty convenient sometimes,\n // when you just want to work with a regex.\n const set = this.set;\n if (!set.length) {\n this.regexp = false;\n return this.regexp;\n }\n const options = this.options;\n const twoStar = options.noglobstar ? star\n : options.dot ? twoStarDot\n : twoStarNoDot;\n const flags = new Set(options.nocase ? ['i'] : []);\n // regexpify non-globstar patterns\n // if ** is only item, then we just do one twoStar\n // if ** is first, and there are more, prepend (\\/|twoStar\\/)? to next\n // if ** is last, append (\\/twoStar|) to previous\n // if ** is in the middle, append (\\/|\\/twoStar\\/) to previous\n // then filter out GLOBSTAR symbols\n let re = set\n .map(pattern => {\n const pp = pattern.map(p => {\n if (p instanceof RegExp) {\n for (const f of p.flags.split(''))\n flags.add(f);\n }\n return (typeof p === 'string' ? regExpEscape(p)\n : p === GLOBSTAR ? GLOBSTAR\n : p._src);\n });\n pp.forEach((p, i) => {\n const next = pp[i + 1];\n const prev = pp[i - 1];\n if (p !== GLOBSTAR || prev === GLOBSTAR) {\n return;\n }\n if (prev === undefined) {\n if (next !== undefined && next !== GLOBSTAR) {\n pp[i + 1] = '(?:\\\\/|' + twoStar + '\\\\/)?' + next;\n }\n else {\n pp[i] = twoStar;\n }\n }\n else if (next === undefined) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + ')?';\n }\n else if (next !== GLOBSTAR) {\n pp[i - 1] = prev + '(?:\\\\/|\\\\/' + twoStar + '\\\\/)' + next;\n pp[i + 1] = GLOBSTAR;\n }\n });\n const filtered = pp.filter(p => p !== GLOBSTAR);\n // For partial matches, we need to make the pattern match\n // any prefix of the full path. We do this by generating\n // alternative patterns that match progressively longer prefixes.\n if (this.partial && filtered.length >= 1) {\n const prefixes = [];\n for (let i = 1; i <= filtered.length; i++) {\n prefixes.push(filtered.slice(0, i).join('/'));\n }\n return '(?:' + prefixes.join('|') + ')';\n }\n return filtered.join('/');\n })\n .join('|');\n // need to wrap in parens if we had more than one thing with |,\n // otherwise only the first will be anchored to ^ and the last to $\n const [open, close] = set.length > 1 ? ['(?:', ')'] : ['', ''];\n // must match entire pattern\n // ending in a * or ** will make it less strict.\n re = '^' + open + re + close + '$';\n // In partial mode, '/' should always match as it's a valid prefix for any pattern\n if (this.partial) {\n re = '^(?:\\\\/|' + open + re.slice(1, -1) + close + ')$';\n }\n // can match anything, as long as it's not this.\n if (this.negate)\n re = '^(?!' + re + ').+$';\n try {\n this.regexp = new RegExp(re, [...flags].join(''));\n /* c8 ignore start */\n }\n catch {\n // should be impossible\n this.regexp = false;\n }\n /* c8 ignore stop */\n return this.regexp;\n }\n slashSplit(p) {\n // if p starts with // on windows, we preserve that\n // so that UNC paths aren't broken. Otherwise, any number of\n // / characters are coalesced into one, unless\n // preserveMultipleSlashes is set to true.\n if (this.preserveMultipleSlashes) {\n return p.split('/');\n }\n else if (this.isWindows && /^\\/\\/[^/]+/.test(p)) {\n // add an extra '' for the one we lose\n return ['', ...p.split(/\\/+/)];\n }\n else {\n return p.split(/\\/+/);\n }\n }\n match(f, partial = this.partial) {\n this.debug('match', f, this.pattern);\n // short-circuit in the case of busted things.\n // comments, etc.\n if (this.comment) {\n return false;\n }\n if (this.empty) {\n return f === '';\n }\n if (f === '/' && partial) {\n return true;\n }\n const options = this.options;\n // windows: need to use /, not \\\n if (this.isWindows) {\n f = f.split('\\\\').join('/');\n }\n // treat the test path as a set of pathparts.\n const ff = this.slashSplit(f);\n this.debug(this.pattern, 'split', ff);\n // just ONE of the pattern sets in this.set needs to match\n // in order for it to be valid. If negating, then just one\n // match means that we have failed.\n // Either way, return on the first hit.\n const set = this.set;\n this.debug(this.pattern, 'set', set);\n // Find the basename of the path by looking for the last non-empty segment\n let filename = ff[ff.length - 1];\n if (!filename) {\n for (let i = ff.length - 2; !filename && i >= 0; i--) {\n filename = ff[i];\n }\n }\n for (const pattern of set) {\n let file = ff;\n if (options.matchBase && pattern.length === 1) {\n file = [filename];\n }\n const hit = this.matchOne(file, pattern, partial);\n if (hit) {\n if (options.flipNegate) {\n return true;\n }\n return !this.negate;\n }\n }\n // didn't get any hits. this is success if it's a negative\n // pattern, failure otherwise.\n if (options.flipNegate) {\n return false;\n }\n return this.negate;\n }\n static defaults(def) {\n return minimatch.defaults(def).Minimatch;\n }\n}\n/* c8 ignore start */\nexport { AST } from './ast.js';\nexport { escape } from './escape.js';\nexport { unescape } from './unescape.js';\n/* c8 ignore stop */\nminimatch.AST = AST;\nminimatch.Minimatch = Minimatch;\nminimatch.escape = escape;\nminimatch.unescape = unescape;\n//# sourceMappingURL=index.js.map","import path from \"node:path\";\nimport { minimatch } from \"minimatch\";\nimport { getUserConfig } from \"../config/userConfig\";\n\nexport function shouldKeepAnalysisFile(filePath: string): boolean {\n const normalizedPath = filePath.replaceAll(path.sep, \"/\");\n const normalizedProjectPath = normalizedPath.replace(/^.*?(app\\/)/, \"app/\");\n return !getUserConfig().analysis.excluded.some((pattern) => minimatch(normalizedProjectPath, pattern, { dot: true }));\n}\n\nexport function filterAnalysisFiles(filePaths: string[]): string[] {\n return filePaths.filter(shouldKeepAnalysisFile);\n}\n","import { getUserConfig } from \"../userConfig\";\n\nexport function isKnownBackendType(value: string): boolean {\n return getUserConfig().analysis.backends.some((backend) => backend.name === value);\n}\n","import path from \"node:path\";\nimport { type SourceFile } from \"ts-morph\";\nimport { isKnownBackendType } from \"../config/utils/isKnowBackendType\";\n\nexport function inferBackendNameFromFile(sourceFile: SourceFile): string | null {\n const declaredType = sourceFile.getFullText().match(/BackendTypes\\.([A-Z0-9_]+)/)?.[1];\n\n if (declaredType) {\n return isKnownBackendType(declaredType) ? declaredType : null;\n }\n\n const parts = sourceFile.getFilePath().split(path.sep);\n const backIndex = parts.lastIndexOf(\"back\");\n const infrastructureIndex = parts.lastIndexOf(\"_infra\");\n const candidate = backIndex >= 0 ? parts[backIndex + 1] : infrastructureIndex >= 0 ? parts[infrastructureIndex + 2] : undefined;\n\n return candidate && isKnownBackendType(candidate.toUpperCase()) ? candidate.toUpperCase() : null;\n}\n","import path from \"node:path\";\n\nexport function resolveAliasPath(moduleSpecifier: string, aliases: Readonly<Record<string, string>>, rootPath: string): string | null {\n for (const [alias, target] of Object.entries(aliases)) {\n if (moduleSpecifier !== alias && !moduleSpecifier.startsWith(`${alias}/`)) {\n continue;\n }\n\n const modulePath = moduleSpecifier.slice(alias.length).replace(/^\\//, \"\");\n return path.join(rootPath, target, modulePath);\n }\n\n return null;\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\n\nexport function tryResolveWithExtensions(basePath: string): string | null {\n const ext = path.extname(basePath);\n const withoutExt = ext ? basePath.slice(0, -ext.length) : basePath;\n const candidates = [\n basePath,\n ext === \".js\" ? `${withoutExt}.ts` : null,\n ext === \".ts\" ? `${withoutExt}.js` : null,\n ext === \".mjs\" ? `${withoutExt}.mts` : null,\n ext === \".mts\" ? `${withoutExt}.mjs` : null,\n `${basePath}.ts`,\n `${basePath}.js`,\n `${basePath}.mts`,\n `${basePath}.mjs`,\n path.join(withoutExt, \"index.ts\"),\n path.join(withoutExt, \"index.js\"),\n path.join(basePath, \"index.ts\"),\n path.join(basePath, \"index.js\")\n ].filter((candidate): candidate is string => Boolean(candidate));\n\n for (const candidate of candidates) {\n try {\n const normalized = path.normalize(candidate);\n if (fs.existsSync(normalized)) {\n return normalized;\n }\n } catch {\n continue;\n }\n }\n\n return null;\n}\n","import path from \"node:path\";\nimport { resolveAliasPath } from \"./resolveAliasPath\";\nimport { tryResolveWithExtensions } from \"./tryResolveWithExtensions\";\n\nexport function resolveModulePath(\n sourceFilePath: string,\n moduleSpecifier: string,\n aliases: Readonly<Record<string, string>>,\n rootPath: string\n): string | null {\n if (moduleSpecifier.startsWith(\".\")) {\n return tryResolveWithExtensions(path.resolve(path.dirname(sourceFilePath), moduleSpecifier));\n }\n\n const aliased = resolveAliasPath(moduleSpecifier, aliases, rootPath);\n return aliased ? tryResolveWithExtensions(aliased) : null;\n}\n","import path from \"node:path\";\nimport fs from \"node:fs\";\nimport { Worker } from \"node:worker_threads\";\nimport { globby } from \"globby\";\nimport {\n type CallExpression,\n type Expression,\n type FunctionDeclaration,\n type MethodDeclaration,\n Node,\n type ObjectLiteralExpression,\n type PropertyAccessExpression,\n Project,\n type SourceFile,\n SyntaxKind,\n type VariableDeclaration\n} from \"ts-morph\";\nimport { getUserConfig } from \"../config/userConfig\";\nimport type {\n BackendTopologyArtifact,\n BackendTopologyEdge,\n BackendTopologyEdgeType,\n BackendTopologyMappingContext,\n BackendTopologyNode,\n BackendTopologyPath\n} from \"../models/backendTopology\";\nimport type { RouteSelector } from \"../utils/routeSelector\";\nimport { inferBackendNameFromFile } from \"./backendSourceService\";\nimport { shouldKeepAnalysisFile } from \"./analysisFileService\";\nimport { taskProgressService } from \"./tasks/taskProgressService\";\nimport { resolveModulePath } from \"../utils/resolveModulePath\";\n\nexport const backendTopologyWeights = {\n local_call: 1,\n imported_call: 2,\n local_callback: 2,\n imported_callback: 3\n} as const;\n\nexport type BackendTopologyRouteSelector = Pick<RouteSelector, \"method\" | \"path\">;\n\ntype CallableDeclaration = FunctionDeclaration | MethodDeclaration | VariableDeclaration;\n\ntype RouteDeclaration = {\n method: string;\n path: string;\n sourceFile: SourceFile;\n handlerRef: string;\n};\n\ntype ResolvedCallable = {\n declaration?: CallableDeclaration;\n sourceFile: SourceFile;\n symbol: string;\n imported: boolean;\n};\n\ntype Resolver = (sourceFilePath: string, moduleSpecifier: string) => string | null;\n\ntype PendingPath = {\n callable: ResolvedCallable;\n weight: number;\n nodes: BackendTopologyNode[];\n edges: BackendTopologyEdge[];\n visited: Set<string>;\n};\n\nfunction normalizeSourcePath(cwd: string, filePath: string): string {\n const relative = path.relative(cwd, filePath);\n return relative.startsWith(\"..\") ? filePath : relative.replaceAll(path.sep, \"/\");\n}\n\nfunction isFilePath(filePath: string): boolean {\n try {\n return fs.statSync(filePath).isFile();\n } catch {\n return false;\n }\n}\n\nfunction callableLine(callable: ResolvedCallable): number {\n return callable.declaration?.getStartLineNumber() || 1;\n}\n\nfunction callableKey(callable: ResolvedCallable): string {\n return `${callable.sourceFile.getFilePath()}:${callable.symbol}:${callableLine(callable)}`;\n}\n\nfunction isCallableVariable(declaration: VariableDeclaration): boolean {\n const initializer = declaration.getInitializer();\n return Boolean(\n initializer &&\n (Node.isArrowFunction(initializer) ||\n Node.isFunctionExpression(initializer) ||\n Node.isCallExpression(initializer) ||\n Node.isNewExpression(initializer))\n );\n}\n\nfunction findLocalCallable(sourceFile: SourceFile, symbol: string): CallableDeclaration | undefined {\n const functionDeclaration = sourceFile.getFunctions().find((item) => item.getName() === symbol);\n if (functionDeclaration) {\n return functionDeclaration;\n }\n\n const variableDeclaration = sourceFile.getVariableDeclarations().find((item) => item.getName() === symbol && isCallableVariable(item));\n if (variableDeclaration) {\n return variableDeclaration;\n }\n\n return sourceFile.getDescendantsOfKind(SyntaxKind.MethodDeclaration).find((item) => item.getName() === symbol);\n}\n\nfunction resolveSourceFile(project: Project, owner: SourceFile, moduleSpecifier: string, resolvePath: Resolver): SourceFile | undefined {\n const resolvedPath = resolvePath(owner.getFilePath(), moduleSpecifier);\n if (!resolvedPath) {\n return undefined;\n }\n const existing = project.getSourceFile(resolvedPath);\n if (existing) {\n return existing;\n }\n return isFilePath(resolvedPath) ? project.addSourceFileAtPathIfExists(resolvedPath) : undefined;\n}\n\nfunction resolveExportedCallable(\n project: Project,\n sourceFile: SourceFile,\n symbol: string,\n resolvePath: Resolver,\n seen = new Set<string>()\n): ResolvedCallable | undefined {\n const key = `${sourceFile.getFilePath()}:${symbol}`;\n if (seen.has(key)) {\n return undefined;\n }\n seen.add(key);\n\n const local = findLocalCallable(sourceFile, symbol);\n if (local) {\n return { declaration: local, sourceFile, symbol, imported: true };\n }\n\n for (const exportDeclaration of sourceFile.getExportDeclarations()) {\n const moduleSpecifier = exportDeclaration.getModuleSpecifierValue();\n if (!moduleSpecifier) {\n continue;\n }\n const namedExport = exportDeclaration.getNamedExports().find((item) => (item.getAliasNode()?.getText() || item.getName()) === symbol);\n if (exportDeclaration.getNamedExports().length && !namedExport) {\n continue;\n }\n const targetFile = resolveSourceFile(project, sourceFile, moduleSpecifier, resolvePath);\n if (!targetFile) {\n continue;\n }\n const targetSymbol = namedExport?.getName() || symbol;\n const resolved = resolveExportedCallable(project, targetFile, targetSymbol, resolvePath, seen);\n if (resolved) {\n return resolved;\n }\n }\n\n return undefined;\n}\n\nfunction resolveConstructedMember(\n project: Project,\n sourceFile: SourceFile,\n variableName: string,\n memberName: string,\n resolvePath: Resolver\n): ResolvedCallable | undefined {\n const initializer = sourceFile.getVariableDeclaration(variableName)?.getInitializer();\n if (!initializer || !Node.isNewExpression(initializer)) {\n return undefined;\n }\n const constructorName = initializer.getExpression().getText();\n const localClass = sourceFile.getClass(constructorName);\n const localMethod = localClass?.getInstanceMethod(memberName);\n if (localMethod) {\n return {\n declaration: localMethod,\n sourceFile,\n symbol: memberName,\n imported: true\n };\n }\n\n for (const importDeclaration of sourceFile.getImportDeclarations()) {\n const namedImport = importDeclaration\n .getNamedImports()\n .find((item) => (item.getAliasNode()?.getText() || item.getName()) === constructorName);\n if (!namedImport) {\n continue;\n }\n const targetFile = resolveSourceFile(project, sourceFile, importDeclaration.getModuleSpecifierValue(), resolvePath);\n const method = targetFile?.getClass(namedImport.getName())?.getInstanceMethod(memberName);\n if (targetFile && method) {\n return {\n declaration: method,\n sourceFile: targetFile,\n symbol: memberName,\n imported: true\n };\n }\n }\n\n return undefined;\n}\n\nfunction resolveImportedReference(\n project: Project,\n sourceFile: SourceFile,\n expressionText: string,\n resolvePath: Resolver\n): ResolvedCallable | undefined {\n const [root, member] = expressionText.split(\".\");\n\n for (const importDeclaration of sourceFile.getImportDeclarations()) {\n const targetFile = resolveSourceFile(project, sourceFile, importDeclaration.getModuleSpecifierValue(), resolvePath);\n if (!targetFile) {\n continue;\n }\n\n const namespaceImport = importDeclaration.getNamespaceImport();\n if (namespaceImport?.getText() === root && member) {\n return (\n resolveExportedCallable(project, targetFile, member, resolvePath) || {\n sourceFile: targetFile,\n symbol: expressionText,\n imported: true\n }\n );\n }\n\n const namedImport = importDeclaration.getNamedImports().find((item) => (item.getAliasNode()?.getText() || item.getName()) === root);\n if (namedImport) {\n const importedSymbol = namedImport.getName();\n if (member) {\n const backend = inferBackendNameFromFile(targetFile);\n if (backend) {\n return { sourceFile: targetFile, symbol: expressionText, imported: true };\n }\n const constructedMember = resolveConstructedMember(project, targetFile, importedSymbol, member, resolvePath);\n if (constructedMember) {\n return constructedMember;\n }\n }\n return (\n resolveExportedCallable(project, targetFile, member || importedSymbol, resolvePath) || {\n sourceFile: targetFile,\n symbol: expressionText,\n imported: true\n }\n );\n }\n\n if (importDeclaration.getDefaultImport()?.getText() === root) {\n return (\n resolveExportedCallable(project, targetFile, member || \"default\", resolvePath) || {\n sourceFile: targetFile,\n symbol: expressionText,\n imported: true\n }\n );\n }\n }\n\n return undefined;\n}\n\nfunction resolveTypedPropertyMethod(\n project: Project,\n sourceFile: SourceFile,\n expression: PropertyAccessExpression,\n resolvePath: Resolver\n): ResolvedCallable | undefined {\n const receiver = expression.getExpression();\n if (!Node.isPropertyAccessExpression(receiver) || receiver.getExpression().getText() !== \"this\") {\n return undefined;\n }\n\n const ownerClass = expression.getFirstAncestorByKind(SyntaxKind.ClassDeclaration);\n const propertyType = ownerClass\n ?.getProperty(receiver.getName())\n ?.getTypeNode()\n ?.getText()\n .match(/[A-Za-z_$][A-Za-z0-9_$]*/)?.[0];\n if (!propertyType) {\n return undefined;\n }\n\n for (const importDeclaration of sourceFile.getImportDeclarations()) {\n const namedImport = importDeclaration\n .getNamedImports()\n .find((item) => (item.getAliasNode()?.getText() || item.getName()) === propertyType);\n if (!namedImport) {\n continue;\n }\n const targetFile = resolveSourceFile(project, sourceFile, importDeclaration.getModuleSpecifierValue(), resolvePath);\n if (!targetFile) {\n continue;\n }\n const importedType = namedImport.getName();\n const method = targetFile\n .getClasses()\n .find((declaration) => declaration.getName() === importedType)\n ?.getInstanceMethod(expression.getName());\n if (method) {\n return {\n declaration: method,\n sourceFile: targetFile,\n symbol: expression.getText(),\n imported: true\n };\n }\n }\n\n return undefined;\n}\n\nfunction resolveReference(\n project: Project,\n sourceFile: SourceFile,\n expression: Expression,\n resolvePath: Resolver\n): ResolvedCallable | undefined {\n const expressionText = expression.getText();\n const localSymbol = Node.isPropertyAccessExpression(expression)\n ? expression.getName()\n : Node.isIdentifier(expression)\n ? expression.getText()\n : undefined;\n\n if (Node.isPropertyAccessExpression(expression)) {\n const imported = resolveImportedReference(project, sourceFile, expressionText, resolvePath);\n if (imported) {\n return imported;\n }\n const typedPropertyMethod = resolveTypedPropertyMethod(project, sourceFile, expression, resolvePath);\n if (typedPropertyMethod) {\n return typedPropertyMethod;\n }\n }\n\n if (localSymbol) {\n const local = findLocalCallable(sourceFile, localSymbol);\n if (local) {\n return { declaration: local, sourceFile, symbol: localSymbol, imported: false };\n }\n }\n\n const imported = resolveImportedReference(project, sourceFile, expressionText, resolvePath);\n if (imported) {\n return imported;\n }\n\n const declaration = expression.getSymbol()?.getAliasedSymbol()?.getDeclarations()[0] || expression.getSymbol()?.getDeclarations()[0];\n if (!declaration) {\n return undefined;\n }\n const callable: CallableDeclaration | undefined =\n Node.isFunctionDeclaration(declaration) || Node.isMethodDeclaration(declaration) || Node.isVariableDeclaration(declaration)\n ? declaration\n : undefined;\n if (!callable) {\n return undefined;\n }\n if (Node.isVariableDeclaration(callable) && !isCallableVariable(callable)) {\n return undefined;\n }\n const targetFile = callable.getSourceFile();\n return {\n declaration: callable,\n sourceFile: targetFile,\n symbol: localSymbol || expressionText,\n imported: targetFile.getFilePath() !== sourceFile.getFilePath()\n };\n}\n\nfunction referenceExpressions(call: CallExpression): Array<{\n expression: Expression;\n type: BackendTopologyEdgeType;\n}> {\n const references: Array<{\n expression: Expression;\n type: BackendTopologyEdgeType;\n }> = [{ expression: call.getExpression(), type: \"call\" }];\n\n for (const argument of call.getArguments()) {\n if (Node.isIdentifier(argument) || Node.isPropertyAccessExpression(argument)) {\n references.push({ expression: argument, type: \"callback\" });\n }\n }\n\n return references;\n}\n\nfunction edgeWeight(type: BackendTopologyEdgeType, imported: boolean): number {\n if (type === \"callback\") {\n return imported ? backendTopologyWeights.imported_callback : backendTopologyWeights.local_callback;\n }\n return imported ? backendTopologyWeights.imported_call : backendTopologyWeights.local_call;\n}\n\nfunction callableCalls(callable: ResolvedCallable): CallExpression[] {\n return callable.declaration?.getDescendantsOfKind(SyntaxKind.CallExpression) || [];\n}\n\nfunction mappingDirection(\n symbol: string,\n layer: BackendTopologyMappingContext[\"layer\"]\n): BackendTopologyMappingContext[\"direction\"] | undefined {\n const mapperNaming = getUserConfig().analysis.mapperNaming;\n if (layer === \"api\") {\n if (mapperNaming.inputPatterns.some((pattern) => pattern.test(symbol))) {\n return \"input\";\n }\n if (mapperNaming.outputPatterns.some((pattern) => pattern.test(symbol))) {\n return \"output\";\n }\n return undefined;\n }\n\n if (mapperNaming.domainToBackendPattern.test(symbol)) {\n return \"input\";\n }\n if (mapperNaming.domainNameFromToDomainPattern.test(symbol) || /(?:From(?:Back|Backend)ToDomain|ToDomain)$/i.test(symbol)) {\n return \"output\";\n }\n return undefined;\n}\n\nfunction callableFromTopologyNode(cwd: string, project: Project, node: BackendTopologyNode): ResolvedCallable | undefined {\n const filePath = path.resolve(cwd, node.source);\n const sourceFile = project.getSourceFile(filePath) || project.addSourceFileAtPathIfExists(filePath);\n if (!sourceFile) {\n return undefined;\n }\n const declaration = [\n ...sourceFile.getFunctions(),\n ...sourceFile.getDescendantsOfKind(SyntaxKind.MethodDeclaration),\n ...sourceFile.getVariableDeclarations().filter(isCallableVariable)\n ].find((item) => item.getStartLineNumber() === node.line);\n return declaration\n ? {\n declaration,\n sourceFile,\n symbol: node.symbol,\n imported: true\n }\n : undefined;\n}\n\nexport function collectBackendTopologyMappingContext(params: {\n cwd: string;\n project: Project;\n handlerFile: SourceFile;\n handlerName: string;\n backendPaths: BackendTopologyPath[];\n resolvePath: Resolver;\n}): BackendTopologyMappingContext[] {\n const handlerDeclaration = findLocalCallable(params.handlerFile, params.handlerName);\n if (!handlerDeclaration) {\n return [];\n }\n const handler: ResolvedCallable = {\n declaration: handlerDeclaration,\n sourceFile: params.handlerFile,\n symbol: params.handlerName,\n imported: false\n };\n const contexts: BackendTopologyMappingContext[] = [];\n const visitedMapperCalls = new Set<string>();\n\n const appendMapper = (\n callable: ResolvedCallable,\n layer: BackendTopologyMappingContext[\"layer\"],\n direction: BackendTopologyMappingContext[\"direction\"],\n backendPath: number,\n backendType: string\n ) => {\n const key = [callableKey(callable), layer, direction, backendPath, backendType].join(\":\");\n if (visitedMapperCalls.has(key)) {\n return;\n }\n visitedMapperCalls.add(key);\n contexts.push({\n layer,\n direction,\n symbol: callable.declaration?.getSymbol()?.getName() || callable.symbol.split(\".\").at(-1)!,\n source: normalizeSourcePath(params.cwd, callable.sourceFile.getFilePath()),\n line: callableLine(callable),\n backend_path: backendPath,\n backend_type: backendType\n });\n\n const expectedLayerPath = layer === \"api\" ? \"app/_api/\" : \"app/_infra/back/\";\n for (const call of callableCalls(callable)) {\n const dependency = resolveReference(params.project, callable.sourceFile, call.getExpression(), params.resolvePath);\n if (!dependency?.declaration || !normalizeSourcePath(params.cwd, dependency.sourceFile.getFilePath()).includes(expectedLayerPath)) {\n continue;\n }\n appendMapper(dependency, layer, direction, backendPath, backendType);\n }\n };\n\n const appendMapperCalls = (\n callable: ResolvedCallable,\n layer: BackendTopologyMappingContext[\"layer\"],\n backendPath: number,\n backendType: string\n ) => {\n for (const call of callableCalls(callable)) {\n const resolved = resolveReference(params.project, callable.sourceFile, call.getExpression(), params.resolvePath);\n if (!resolved?.declaration) {\n continue;\n }\n const symbol = resolved.declaration.getSymbol()?.getName() || resolved.symbol.split(\".\").at(-1)!;\n const direction = mappingDirection(symbol, layer);\n if (!direction) {\n continue;\n }\n appendMapper(resolved, layer, direction, backendPath, backendType);\n }\n };\n\n for (const [backendPath, topologyPath] of params.backendPaths.entries()) {\n appendMapperCalls(handler, \"api\", backendPath, topologyPath.backend_type);\n for (const node of topologyPath.nodes) {\n if (!node.source.includes(\"app/_infra/back/\")) {\n continue;\n }\n const callable = callableFromTopologyNode(params.cwd, params.project, node);\n if (callable) {\n appendMapperCalls(callable, \"backend\", backendPath, topologyPath.backend_type);\n }\n }\n }\n\n return [\n ...new Map(\n contexts.map((context) => [\n [context.layer, context.direction, context.symbol, context.source, context.line, context.backend_path, context.backend_type].join(\n \":\"\n ),\n context\n ])\n ).values()\n ];\n}\n\nexport function traceBackendPaths(params: {\n cwd: string;\n project: Project;\n handlerFile: SourceFile;\n handlerName: string;\n resolvePath: Resolver;\n}): BackendTopologyPath[] {\n const handlerDeclaration = findLocalCallable(params.handlerFile, params.handlerName);\n if (!handlerDeclaration) {\n throw new Error(`Handler declaration not found: ${params.handlerName} in ${params.handlerFile.getFilePath()}`);\n }\n\n const handler: ResolvedCallable = {\n declaration: handlerDeclaration,\n sourceFile: params.handlerFile,\n symbol: params.handlerName,\n imported: false\n };\n const handlerNode: BackendTopologyNode = {\n symbol: handler.symbol,\n source: normalizeSourcePath(params.cwd, handler.sourceFile.getFilePath()),\n line: callableLine(handler),\n depth: 0\n };\n const queue: PendingPath[] = [\n {\n callable: handler,\n weight: 0,\n nodes: [handlerNode],\n edges: [],\n visited: new Set([callableKey(handler)])\n }\n ];\n const paths: BackendTopologyPath[] = [];\n const shortestWeightByCallable = new Map([[callableKey(handler), 0]]);\n const shortestWeightByBackendBoundary = new Map<string, number>();\n\n while (queue.length) {\n queue.sort((left, right) => left.weight - right.weight);\n const current = queue.shift()!;\n\n for (const call of callableCalls(current.callable)) {\n for (const reference of referenceExpressions(call)) {\n const resolved = resolveReference(params.project, current.callable.sourceFile, reference.expression, params.resolvePath);\n if (!resolved) {\n continue;\n }\n\n const key = callableKey(resolved);\n if (current.visited.has(key)) {\n continue;\n }\n const weight = edgeWeight(reference.type, resolved.imported);\n const totalWeight = current.weight + weight;\n const backendType = inferBackendNameFromFile(resolved.sourceFile) || undefined;\n const node: BackendTopologyNode = {\n symbol: resolved.symbol,\n source: normalizeSourcePath(params.cwd, resolved.sourceFile.getFilePath()),\n line: callableLine(resolved),\n depth: totalWeight,\n backend_type: backendType\n };\n const edge: BackendTopologyEdge = {\n type: reference.type,\n from: current.callable.symbol,\n to: resolved.symbol,\n source: normalizeSourcePath(params.cwd, current.callable.sourceFile.getFilePath()),\n line: call.getStartLineNumber(),\n weight\n };\n const nodes = [...current.nodes, node];\n const edges = [...current.edges, edge];\n\n if (backendType) {\n const boundaryKey = `${backendType}:${node.source}:${node.symbol}:${node.line}`;\n const shortestWeight = shortestWeightByBackendBoundary.get(boundaryKey);\n if (shortestWeight !== undefined && totalWeight > shortestWeight) {\n continue;\n }\n shortestWeightByBackendBoundary.set(boundaryKey, totalWeight);\n paths.push({\n backend_type: backendType,\n total_weight: totalWeight,\n status: \"resolved\",\n nodes,\n edges\n });\n continue;\n }\n\n if (!resolved.declaration) {\n continue;\n }\n const shortestWeight = shortestWeightByCallable.get(key);\n if (shortestWeight !== undefined && totalWeight >= shortestWeight) {\n continue;\n }\n shortestWeightByCallable.set(key, totalWeight);\n queue.push({\n callable: resolved,\n weight: totalWeight,\n nodes,\n edges,\n visited: new Set([...current.visited, key])\n });\n }\n }\n }\n\n const unique = new Map<string, BackendTopologyPath>();\n for (const topologyPath of paths.filter((item) => {\n const terminalNode = item.nodes.at(-1)!;\n const boundaryKey = `${item.backend_type}:${terminalNode.source}:${terminalNode.symbol}:${terminalNode.line}`;\n return item.total_weight === shortestWeightByBackendBoundary.get(boundaryKey);\n })) {\n const key = `${topologyPath.backend_type}:${topologyPath.nodes.map((node) => `${node.source}:${node.symbol}:${node.line}`).join(\"->\")}`;\n const existing = unique.get(key);\n if (!existing || topologyPath.total_weight < existing.total_weight) {\n unique.set(key, topologyPath);\n }\n }\n\n return [...unique.values()].sort(\n (left, right) => left.total_weight - right.total_weight || left.backend_type.localeCompare(right.backend_type)\n );\n}\n\nfunction stringProperty(object: ObjectLiteralExpression, name: string): string | undefined {\n const property = object.getProperty(name);\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = property.getInitializer();\n return initializer && (Node.isStringLiteral(initializer) || Node.isNoSubstitutionTemplateLiteral(initializer))\n ? initializer.getLiteralValue()\n : undefined;\n}\n\nfunction handlerProperty(object: ObjectLiteralExpression): string | undefined {\n const property = object.getProperty(\"handler\");\n if (!property || !Node.isPropertyAssignment(property)) {\n return undefined;\n }\n const initializer = property.getInitializer();\n return initializer && (Node.isIdentifier(initializer) || Node.isPropertyAccessExpression(initializer))\n ? initializer.getText()\n : undefined;\n}\n\nfunction extractRouteDeclarations(sourceFile: SourceFile): RouteDeclaration[] {\n const declaration = sourceFile.getVariableDeclaration(\"routes\");\n const initializer = declaration?.getInitializer();\n let expression = initializer;\n if (initializer && (Node.isAsExpression(initializer) || Node.isSatisfiesExpression(initializer))) {\n expression = initializer.getExpression();\n }\n if (!expression || !Node.isArrayLiteralExpression(expression)) {\n return [];\n }\n\n return expression.getElements().flatMap((element) => {\n if (!Node.isObjectLiteralExpression(element)) {\n return [];\n }\n const method = stringProperty(element, \"method\");\n const routePath = stringProperty(element, \"path\");\n const handlerRef = handlerProperty(element);\n return method && routePath && handlerRef ? [{ method: method.toUpperCase(), path: routePath, sourceFile, handlerRef }] : [];\n });\n}\n\nfunction resolveHandler(project: Project, route: RouteDeclaration, resolvePath: Resolver): ResolvedCallable | undefined {\n const resolved = resolveImportedReference(project, route.sourceFile, route.handlerRef, resolvePath);\n if (resolved) {\n return resolved;\n }\n const local = findLocalCallable(route.sourceFile, route.handlerRef);\n return local\n ? {\n declaration: local,\n sourceFile: route.sourceFile,\n symbol: route.handlerRef,\n imported: false\n }\n : undefined;\n}\n\nexport async function collectBackendTopologyDependencyFiles(\n project: Project,\n entryFilePath: string,\n resolvePath: Resolver\n): Promise<string[]> {\n const queue = [entryFilePath];\n const visited = new Set<string>();\n\n while (queue.length) {\n const current = queue.shift()!;\n if (visited.has(current)) {\n continue;\n }\n visited.add(current);\n const sourceFile = project.getSourceFile(current) || (isFilePath(current) ? project.addSourceFileAtPathIfExists(current) : undefined);\n if (!sourceFile) {\n continue;\n }\n\n const moduleSpecifiers = [\n ...sourceFile.getImportDeclarations().map((item) => item.getModuleSpecifierValue()),\n ...sourceFile\n .getExportDeclarations()\n .map((item) => item.getModuleSpecifierValue())\n .filter((value): value is string => Boolean(value))\n ];\n for (const moduleSpecifier of moduleSpecifiers) {\n const resolved = resolvePath(sourceFile.getFilePath(), moduleSpecifier);\n if (resolved && !visited.has(resolved) && shouldKeepAnalysisFile(resolved)) {\n queue.push(resolved);\n }\n }\n }\n\n return [...visited];\n}\n\nexport async function generateBackendTopologyArtifacts(params: {\n cwd: string;\n routeSelector?: RouteSelector;\n routeSelectors?: BackendTopologyRouteSelector[];\n onArtifact?: (artifact: BackendTopologyArtifact) => Promise<void>;\n onRoutesDiscovered?: (total: number) => void;\n onRouteProgress?: (update: {\n current: number;\n total: number;\n route: { method: string; path: string };\n stage: \"collecting_dependencies\" | \"tracing_paths\" | \"completed\";\n }) => void;\n}): Promise<BackendTopologyArtifact[]> {\n const resolvePath: Resolver = (sourceFilePath, moduleSpecifier) =>\n resolveModulePath(sourceFilePath, moduleSpecifier, getUserConfig().resolver.alias, params.cwd);\n const project = new Project({\n skipAddingFilesFromTsConfig: true,\n compilerOptions: { allowJs: true, checkJs: false, target: 99, module: 99 }\n });\n taskProgressService.report(\"Discovering route files\");\n const routeFiles = await globby([\"app/_api/**/routes.@(js|ts)\", \"app/legacy/**/routes.@(js|ts)\"], { cwd: params.cwd, absolute: true });\n taskProgressService.log(`${routeFiles.length} route file${routeFiles.length === 1 ? \"\" : \"s\"} discovered`);\n taskProgressService.report(\"Extracting route declarations\");\n const routes = routeFiles\n .flatMap((routeFile) => extractRouteDeclarations(project.addSourceFileAtPath(routeFile)))\n .filter((route) => {\n if (params.routeSelector) {\n return route.method === params.routeSelector.method && route.path === params.routeSelector.path;\n }\n return (\n !params.routeSelectors || params.routeSelectors.some((selector) => route.method === selector.method && route.path === selector.path)\n );\n });\n\n if (params.routeSelector && !routes.length) {\n throw new Error(`Route not found: ${params.routeSelector.method} ${params.routeSelector.path}`);\n }\n\n params.onRoutesDiscovered?.(routes.length);\n if (!params.onRoutesDiscovered) {\n taskProgressService.log(`${routes.length} API route${routes.length === 1 ? \"\" : \"s\"} selected`);\n }\n const artifacts: BackendTopologyArtifact[] = [];\n for (const [index, route] of routes.entries()) {\n const routeProgress = (stage: \"collecting_dependencies\" | \"tracing_paths\" | \"completed\") =>\n params.onRouteProgress?.({\n current: index + 1,\n total: routes.length,\n route: { method: route.method, path: route.path },\n stage\n });\n if (!params.onRouteProgress) {\n taskProgressService.report(`Tracing route ${index + 1}/${routes.length}: ${route.method} ${route.path}`);\n await new Promise<void>((resolve) => setImmediate(resolve));\n }\n const handler = resolveHandler(project, route, resolvePath);\n if (!handler?.declaration) {\n taskProgressService.log(`Warning: handler not resolved for ${route.method} ${route.path} (${route.handlerRef}); route skipped`);\n routeProgress(\"completed\");\n continue;\n }\n routeProgress(\"collecting_dependencies\");\n if (!params.onRouteProgress) {\n taskProgressService.log(`${route.method} ${route.path} ... Collecting dependencies`);\n }\n const dependencyFiles = await collectBackendTopologyDependencyFiles(project, handler.sourceFile.getFilePath(), resolvePath);\n routeProgress(\"tracing_paths\");\n if (!params.onRouteProgress) {\n taskProgressService.log(`${route.method} ${route.path} ... Tracing callable paths`);\n }\n const backendPaths = traceBackendPaths({\n cwd: params.cwd,\n project,\n handlerFile: handler.sourceFile,\n handlerName: handler.symbol,\n resolvePath\n });\n const mappingContext = collectBackendTopologyMappingContext({\n cwd: params.cwd,\n project,\n handlerFile: handler.sourceFile,\n handlerName: handler.symbol,\n backendPaths,\n resolvePath\n });\n if (!params.onRouteProgress) {\n taskProgressService.log(\n `${route.method} ${route.path} ... ${backendPaths.length} backend path${backendPaths.length === 1 ? \"\" : \"s\"}`\n );\n }\n const artifact: BackendTopologyArtifact = {\n schema_version: 3,\n generated_at: new Date().toISOString(),\n route: {\n method: route.method,\n path: route.path,\n source: normalizeSourcePath(params.cwd, route.sourceFile.getFilePath()),\n handler: {\n symbol: handler.symbol,\n source: normalizeSourcePath(params.cwd, handler.sourceFile.getFilePath()),\n line: callableLine(handler)\n }\n },\n analysis_files: [\n ...new Set([\n ...dependencyFiles.map((filePath) => normalizeSourcePath(params.cwd, filePath)),\n ...backendPaths.flatMap((backendPath) => backendPath.nodes.map((node) => node.source))\n ])\n ].sort(),\n mapping_context: mappingContext,\n weights: backendTopologyWeights,\n backend_paths: backendPaths\n };\n artifacts.push(artifact);\n await params.onArtifact?.(artifact);\n routeProgress(\"completed\");\n }\n\n return artifacts;\n}\n\nexport async function discoverBackendTopologyRouteSelectors(cwd: string): Promise<BackendTopologyRouteSelector[]> {\n const project = new Project({\n skipAddingFilesFromTsConfig: true,\n compilerOptions: { allowJs: true, checkJs: false }\n });\n const routeFiles = await globby([\"app/_api/**/routes.@(js|ts)\", \"app/legacy/**/routes.@(js|ts)\"], { cwd, absolute: true });\n return routeFiles\n .flatMap((routeFile) => extractRouteDeclarations(project.addSourceFileAtPath(routeFile)))\n .map((route) => ({ method: route.method, path: route.path }));\n}\n\ntype WorkerMessage =\n | { type: \"artifact\"; artifact: BackendTopologyArtifact }\n | { type: \"progress\"; route: { method: string; path: string } }\n | { type: \"error\"; message: string };\n\nexport async function generateBackendTopologyArtifactsInWorkers(params: {\n cwd: string;\n routeSelector?: RouteSelector;\n onRoutesDiscovered?: (total: number) => void;\n onArtifact: (artifact: BackendTopologyArtifact) => Promise<void>;\n onRouteProgress?: (update: { current: number; total: number; route: { method: string; path: string }; stage: \"completed\" }) => void;\n workers?: number;\n}): Promise<BackendTopologyArtifact[]> {\n const selectors = params.routeSelector ? [params.routeSelector] : await discoverBackendTopologyRouteSelectors(params.cwd);\n params.onRoutesDiscovered?.(selectors.length);\n const workerCount = Math.min(params.workers || 2, selectors.length);\n const chunks = Array.from({ length: workerCount }, () => [] as BackendTopologyRouteSelector[]);\n selectors.forEach((selector, index) => chunks[index % workerCount].push(selector));\n const artifacts: BackendTopologyArtifact[] = [];\n let completed = 0;\n let writeQueue = Promise.resolve();\n const workers: Worker[] = [];\n\n try {\n await Promise.all(\n chunks.map(\n (routeSelectors) =>\n new Promise<void>((resolve, reject) => {\n const workerFile = import.meta.url.endsWith(\".ts\")\n ? \"../workers/routeBackendTopologyWorker.ts\"\n : \"./workers/routeBackendTopologyWorker.mjs\";\n const worker = new Worker(new URL(workerFile, import.meta.url), {\n workerData: { cwd: params.cwd, routeSelectors },\n execArgv: process.execArgv\n });\n workers.push(worker);\n worker.on(\"message\", (message: WorkerMessage) => {\n if (message.type === \"error\") {\n reject(new Error(message.message));\n return;\n }\n writeQueue = writeQueue\n .then(async () => {\n if (message.type === \"artifact\") {\n await params.onArtifact(message.artifact);\n artifacts.push(message.artifact);\n return;\n }\n completed += 1;\n params.onRouteProgress?.({\n current: completed,\n total: selectors.length,\n route: message.route,\n stage: \"completed\"\n });\n })\n .catch(reject);\n });\n worker.once(\"error\", reject);\n worker.once(\"exit\", (code) => (code === 0 ? resolve() : reject(new Error(`Topology worker exited with code ${code}`))));\n })\n )\n );\n await writeQueue;\n return artifacts;\n } catch (error) {\n await Promise.all(workers.map((worker) => worker.terminate().catch(() => undefined)));\n throw error;\n }\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88],"mappings":"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"}
|