@h3ravel/hashing 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["info: Info['options']","algo: number","argon","RuntimeException","info: Record<string, number | undefined>","argon","RuntimeException","info: Record<string, number | undefined>","nodeCrypto","salt","callback","diff","hash","compare","string","minor","err","InvalidArgumentException","bcrypt","RuntimeException","Reflect","metadataRegistry","metadata","OrdinaryDefineOwnMetadata","OrdinaryHasOwnMetadata","OrdinaryGetOwnMetadata","OrdinaryOwnMetadataKeys","defineMetadata","hasOwnMetadata","getOwnMetadata","getOwnMetadataKeys","deleteMetadata","MapIterator","Map","Set","WeakMap","array","DirentFromStats","createDirentFromStats","os","path","pattern","isExtglob","str","str","isGlob","globParent","str","node","utils","stringify","isNumber","toRegexRange","zeros","compare","pattern","max","string","str","diff","util","isObject","stringify","fill","fill","utils","compile","walk","stringify","utils","expand","walk","stringify","parse","MAX_LENGTH","depth","CHAR_RIGHT_SQUARE_BRACKET","CHAR_LEFT_SQUARE_BRACKET","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_LEFT_CURLY_BRACE","CHAR_RIGHT_CURLY_BRACE","CHAR_COMMA","CHAR_DOT","index","expand","parse","braces","pattern","path","POSIX_REGEX_SOURCE","chars","win32","path","str","utils","scan","str","isGlob","isExtglob","braces","constants","utils","parse","MAX_LENGTH","win32","START_ANCHOR","opts","DOTS_SLASH","DOT_LITERAL","QMARK","braces","value","append","isExtglob","ONE_CHAR","chars","escaped","t","SLASH_LITERAL","PLUS_LITERAL","str","source","path","parse","utils","constants","picomatch","state","str","pattern","append","utils","micromatch","pattern","str","path","pattern","getPositivePatterns","merge2","stream","stream","fs","path","utils","pattern","read","path","stat","callFailureCallback","callSuccessCallback","read","path","stat","fs","createFileSystemAdapter","fs","Settings","async","sync","settings_1","path","getSettings","queueMicrotask","fs","joinPathSegments","fsStat","constants_1","utils","common","read","readdirWithFileTypes","readdir","path","callFailureCallback","callSuccessCallback","fsStat","utils","common","fs","path","fsStat","fs","Settings","settings_1","path","getSettings","reusify","cache","self","common","Reader","fsScandir","common","reader_1","async_1","stream_1","async_1","fsScandir","reader_1","sync_1","path","Settings","async_1","stream_1","sync_1","settings_1","path","fsStat","utils","pattern","stream_1","fsStat","fsWalk","reader_1","stream","pattern","fsWalk","reader_1","stream_1","stream","utils","pattern","pattern","utils","utils","utils","utils","path","async_1","provider_1","stream_1","provider_1","pattern","sync_1","fs","os","FastGlob","sync","stream","isDynamicPattern","escapePath","convertPathToPattern","debug","debug","env","value","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","debug","debug","re","t","MAX_LENGTH","parseOptions","compareIdentifiers","debug","re","parseOptions","SemVer","t","prerelease","SemVer","parse","parse","valid","parse","clean","SemVer","inc","parse","diff","SemVer","major","SemVer","minor","SemVer","patch","parse","prerelease","SemVer","compare","compare","rcompare","compare","compareLoose","SemVer","compareBuild","compareBuild","sort","compareBuild","rsort","compare","gt","compare","lt","compare","eq","compare","neq","compare","gte","compare","lte","eq","neq","gt","gte","lt","lte","cmp","SemVer","parse","re","coerce","t","major","Range","parseOptions","Comparator","re","t","SemVer","debug","ANY","Comparator","SemVer","cmp","Range","Range","satisfies","Range","toComparators","SemVer","Range","maxSatisfying","SemVer","Range","minSatisfying","SemVer","Range","gt","minVersion","Range","validRange","SemVer","Comparator","Range","satisfies","gt","lt","lte","gte","outside","ANY","outside","gtr","outside","ltr","Range","intersects","satisfies","compare","Range","Comparator","satisfies","compare","subset","gt","lt","eq","Logger","Str","InvalidArgumentException","path","InvalidArgumentException","RuntimeException","app: any"],"sources":["../src/Utils/ParseInfo.ts","../src/Drivers/AbstractHasher.ts","../src/Drivers/Argon2idHasher.ts","../src/Drivers/ArgonHasher.ts","../../../node_modules/.pnpm/bcryptjs@3.0.2/node_modules/bcryptjs/index.js","../src/Drivers/BcryptHasher.ts","../../../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/Reflect.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/array.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/errno.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/fs.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/path.js","../../../node_modules/.pnpm/is-extglob@2.1.1/node_modules/is-extglob/index.js","../../../node_modules/.pnpm/is-glob@4.0.3/node_modules/is-glob/index.js","../../../node_modules/.pnpm/glob-parent@5.1.2/node_modules/glob-parent/index.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js","../../../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js","../../../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js","../../../node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js","../../../node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js","../../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/constants.js","../../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/utils.js","../../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/scan.js","../../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/parse.js","../../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js","../../../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/index.js","../../../node_modules/.pnpm/micromatch@4.0.8/node_modules/micromatch/index.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/pattern.js","../../../node_modules/.pnpm/merge2@1.4.1/node_modules/merge2/index.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/stream.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/string.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/utils/index.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/managers/tasks.js","../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/async.js","../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/providers/sync.js","../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/adapters/fs.js","../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/settings.js","../../../node_modules/.pnpm/@nodelib+fs.stat@2.0.5/node_modules/@nodelib/fs.stat/out/index.js","../../../node_modules/.pnpm/queue-microtask@1.2.3/node_modules/queue-microtask/index.js","../../../node_modules/.pnpm/run-parallel@1.2.0/node_modules/run-parallel/index.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/constants.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/fs.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/utils/index.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/common.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/async.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/providers/sync.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/settings.js","../../../node_modules/.pnpm/@nodelib+fs.scandir@2.1.5/node_modules/@nodelib/fs.scandir/out/index.js","../../../node_modules/.pnpm/reusify@1.1.0/node_modules/reusify/reusify.js","../../../node_modules/.pnpm/fastq@1.19.1/node_modules/fastq/queue.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/common.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/reader.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/async.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/async.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/stream.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/readers/sync.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/providers/sync.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/settings.js","../../../node_modules/.pnpm/@nodelib+fs.walk@1.2.8/node_modules/@nodelib/fs.walk/out/index.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/reader.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/stream.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/async.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/matcher.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/matchers/partial.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/deep.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/entry.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/filters/error.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/transformers/entry.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/provider.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/async.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/stream.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/readers/sync.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/providers/sync.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/settings.js","../../../node_modules/.pnpm/fast-glob@3.3.3/node_modules/fast-glob/out/index.js","../../../node_modules/.pnpm/address@2.0.3/node_modules/address/dist/esm/address.js","../../../node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/dist/esm/detect-port.js","../../../node_modules/.pnpm/detect-port@2.1.0/node_modules/detect-port/dist/esm/wait-port.js","../../../node_modules/.pnpm/dotenv-expand@12.0.3/node_modules/dotenv-expand/lib/main.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js","../../../node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js","../../core/dist/index.js","../src/Utils/Manager.ts","../src/HashManager.ts","../src/Helpers.ts","../src/Providers/HashingServiceProvider.ts"],"sourcesContent":["import { HashAlgorithm, Info } from '../Contracts/ManagerContract'\n\nexport class ParseInfo {\n\n public static getInfo (hashed: string, algo: HashAlgorithm = 'bcrypt') {\n if (algo === 'bcrypt') {\n return this.bcrypt(hashed)\n }\n\n return this.argon2(hashed)\n }\n\n public static argon2 (hashed: string) {\n const info: Info['options'] = {}\n // Example: $argon2id$v=19$m=65536,t=4,p=1$...\n const parts = hashed.split('$')\n const params = parts[3] // \"m=65536,t=4,p=1\"\n const versionPart = parts[2] // e.g. v=19\n\n if (versionPart && versionPart.startsWith('v=')) {\n const version = parseInt(versionPart.split('=')[1], 10)\n if (!isNaN(version)) info.algo = version\n }\n\n if (!params) return info\n\n for (const part of params.split(',')) {\n const [key, value] = part.split('=')\n info[key === 'm' ? 'memoryCost' : key === 't' ? 'timeCost' : key === 'p' ? 'threads' : key] = parseInt(value, 10)\n }\n\n return info\n }\n\n public static bcrypt (hashed: string): Info['options'] {\n const match = hashed.match(/^\\$2[aby]?\\$(\\d+)\\$/)\n return {\n cost: match ? parseInt(match[1], 10) : undefined,\n }\n }\n}\n","import { Info } from '../Contracts/ManagerContract'\nimport { ParseInfo } from '../Utils/ParseInfo'\n\nexport abstract class AbstractHasher {\n /**\n * Get information about the given hashed value.\n *\n * @param hashedValue\n * @returns\n */\n public info (hashedValue: string): Info {\n let algoName = 'unknown' as Info['algoName']\n\n if (hashedValue.startsWith('$2')) algoName = 'bcrypt'\n if (hashedValue.startsWith('$argon2id$')) algoName = 'argon2id'\n if (hashedValue.startsWith('$argon2i$')) algoName = 'argon'\n\n const options = ParseInfo.getInfo(hashedValue, algoName)\n const algo: number = options.algo!\n delete options.algo\n\n return {\n algo,\n algoName,\n options,\n }\n }\n}\n","import { Configuration, Info } from '../Contracts/ManagerContract'\n\nimport { AbstractHasher } from './AbstractHasher'\nimport { RuntimeException } from '@h3ravel/support'\nimport argon from 'argon2'\n\nexport class Argon2idHasher extends AbstractHasher {\n private memory: number = 65536\n private verifyAlgorithm: boolean = true\n private threads: number = 1\n private time: number = 4\n\n constructor(options = {} as Configuration['argon']) {\n super()\n this.memory = options.memory ?? this.memory\n this.verifyAlgorithm = options.verify ?? this.verifyAlgorithm\n this.threads = options.threads ?? this.threads\n this.time = options.time ?? this.time\n }\n\n /**\n * Hash the given value using Argon2id.\n */\n public async make (value: string, options = {} as Configuration['argon']): Promise<string> {\n try {\n return await argon.hash(value, {\n type: argon.argon2id,\n memoryCost: options.memory ?? this.memory,\n timeCost: options.time ?? this.time,\n parallelism: options.threads ?? this.threads,\n })\n } catch {\n throw new RuntimeException('Argon2id hashing not supported.')\n }\n }\n\n /**\n * Check the given plain value against a hash.\n */\n public async check (\n value: string,\n hashedValue?: string | null,\n _options = {} as Configuration['argon']\n ): Promise<boolean> {\n if (!hashedValue || hashedValue.length === 0) {\n return false\n }\n\n if (this.verifyAlgorithm && !this.isUsingCorrectAlgorithm(hashedValue)) {\n throw new RuntimeException('This password does not use the Argon2id algorithm.')\n }\n\n try {\n return await argon.verify(hashedValue, value)\n } catch {\n return false\n }\n }\n\n /**\n * Get information about the given hashed value.\n */\n public info (hashedValue: string): Info {\n return super.info(hashedValue)\n }\n\n /**\n * Check if the given hash needs to be rehashed based on current options.\n */\n public needsRehash (hashedValue: string, options = {} as Configuration['argon']): boolean {\n const parsed = this.parseInfo(hashedValue)\n if (!parsed) return true\n\n const { memoryCost, timeCost, threads } = parsed\n\n return (\n memoryCost !== (options.memory ?? this.memory) ||\n timeCost !== (options.time ?? this.time) ||\n threads !== (options.threads ?? this.threads)\n )\n }\n\n /**\n * Verify that the hash configuration does not exceed the configured limits.\n */\n public verifyConfiguration (hashedValue: string): boolean {\n return this.isUsingCorrectAlgorithm(hashedValue) && this.isUsingValidOptions(hashedValue)\n }\n\n /**\n * Verify the hashed value's options.\n */\n protected isUsingValidOptions (hashedValue: string): boolean {\n const { options } = this.info(hashedValue)\n\n if (!options.memoryCost || !options.timeCost || !options.threads) {\n return false\n }\n\n return (\n options.memoryCost <= this.memory &&\n options.timeCost <= this.time &&\n options.threads <= this.threads\n )\n }\n\n /**\n * Verify the hashed value's algorithm.\n */\n protected isUsingCorrectAlgorithm (hashedValue: string): boolean {\n return this.info(hashedValue).algoName === 'argon2id'\n }\n\n /**\n * Extract Argon parameters from the hash.\n */\n protected parseInfo (hashedValue: string): Record<string, number | undefined> {\n // Example: $argon2id$v=19$m=65536,t=4,p=1$...\n const parts = hashedValue.split('$')\n const versionPart = parts[2] // v=19\n const paramsPart = parts[3] // m=65536,t=4,p=1\n\n const info: Record<string, number | undefined> = {}\n\n if (versionPart && versionPart.startsWith('v=')) {\n const version = parseInt(versionPart.split('=')[1], 10)\n if (!isNaN(version)) info.algo = version\n }\n\n if (paramsPart) {\n for (const param of paramsPart.split(',')) {\n const [key, value] = param.split('=')\n const val = parseInt(value, 10)\n switch (key) {\n case 'm':\n info.memoryCost = val\n break\n case 't':\n info.timeCost = val\n break\n case 'p':\n info.threads = val\n break\n default:\n info[key] = val\n }\n }\n }\n\n return info\n }\n}\n","import { Configuration, Info } from '../Contracts/ManagerContract'\n\nimport { AbstractHasher } from './AbstractHasher'\nimport { RuntimeException } from '@h3ravel/support'\nimport argon from 'argon2'\n\nexport class ArgonHasher extends AbstractHasher {\n private memory: number = 65536\n private verifyAlgorithm: boolean = true\n private threads: number = 1\n private time: number = 4\n\n constructor(options = {} as Configuration['argon']) {\n super()\n this.memory = options.memory ?? this.memory\n this.verifyAlgorithm = options.verify ?? this.verifyAlgorithm\n this.threads = options.threads ?? this.threads\n this.time = options.time ?? this.time\n }\n\n /**\n * Hash the given value using Argon2i.\n */\n public async make (value: string, options = {} as Configuration['argon']): Promise<string> {\n try {\n return await argon.hash(value, {\n type: argon.argon2i,\n memoryCost: options.memory ?? this.memory,\n timeCost: options.time ?? this.time,\n parallelism: options.threads ?? this.threads,\n })\n } catch {\n throw new RuntimeException('Argon2 hashing not supported.')\n }\n }\n\n /**\n * Check the given plain value against a hash.\n */\n public async check (\n value: string,\n hashedValue?: string | null,\n _options = {} as Configuration['argon']\n ): Promise<boolean> {\n if (!hashedValue || hashedValue.length === 0) {\n return false\n }\n\n if (this.verifyAlgorithm && !this.isUsingCorrectAlgorithm(hashedValue)) {\n throw new RuntimeException('This password does not use the Argon2 algorithm.')\n }\n\n try {\n return await argon.verify(hashedValue, value)\n } catch {\n return false\n }\n }\n\n /**\n * Get information about the given hashed value.\n */\n public info (hashedValue: string): Info {\n return super.info(hashedValue)\n }\n\n /**\n * Check if the given hash needs to be rehashed based on current options.\n */\n public needsRehash (hashedValue: string, options = {} as Configuration['argon']): boolean {\n const parsed = this.parseInfo(hashedValue)\n if (!parsed) return true\n\n const { memoryCost, timeCost, threads } = parsed\n\n return (\n memoryCost !== (options.memory ?? this.memory) ||\n timeCost !== (options.time ?? this.time) ||\n threads !== (options.threads ?? this.threads)\n )\n }\n\n /**\n * Verify that the hash configuration does not exceed the configured limits.\n */\n public verifyConfiguration (hashedValue: string): boolean {\n return this.isUsingCorrectAlgorithm(hashedValue) && this.isUsingValidOptions(hashedValue)\n }\n\n /**\n * Verify the hashed value's options.\n */\n protected isUsingValidOptions (hashedValue: string): boolean {\n const { options } = this.info(hashedValue)\n\n if (!options.memoryCost || !options.timeCost || !options.threads) {\n return false\n }\n\n return (\n options.memoryCost <= this.memory &&\n options.timeCost <= this.time &&\n options.threads <= this.threads\n )\n }\n\n /**\n * Verify the hashed value's algorithm.\n */\n protected isUsingCorrectAlgorithm (hashedValue: string): boolean {\n return this.info(hashedValue).algoName === 'argon'\n }\n\n /**\n * Extract Argon parameters from the hash.\n */\n protected parseInfo (hashedValue: string): Record<string, number | undefined> {\n // $argon2i$v=19$m=65536,t=4,p=1$...\n const parts = hashedValue.split('$')\n const versionPart = parts[2] // v=19\n const paramsPart = parts[3] // m=65536,t=4,p=1\n\n const info: Record<string, number | undefined> = {}\n\n if (versionPart && versionPart.startsWith('v=')) {\n const version = parseInt(versionPart.split('=')[1], 10)\n if (!isNaN(version)) info.algo = version\n }\n\n if (paramsPart) {\n for (const param of paramsPart.split(',')) {\n const [key, value] = param.split('=')\n const val = parseInt(value, 10)\n switch (key) {\n case 'm':\n info.memoryCost = val\n break\n case 't':\n info.timeCost = val\n break\n case 'p':\n info.threads = val\n break\n default:\n info[key] = val\n }\n }\n }\n\n return info\n }\n}\n","/*\n Copyright (c) 2012 Nevins Bartolomeo <nevins.bartolomeo@gmail.com>\n Copyright (c) 2012 Shane Girish <shaneGirish@gmail.com>\n Copyright (c) 2025 Daniel Wirtz <dcode@dcode.io>\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n 3. The name of the author may not be used to endorse or promote products\n derived from this software without specific prior written permission.\n\n THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR\n IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\n OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,\n INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n// The Node.js crypto module is used as a fallback for the Web Crypto API. When\n// building for the browser, inclusion of the crypto module should be disabled,\n// which the package hints at in its package.json for bundlers that support it.\nimport nodeCrypto from \"crypto\";\n\n/**\n * The random implementation to use as a fallback.\n * @type {?function(number):!Array.<number>}\n * @inner\n */\nvar randomFallback = null;\n\n/**\n * Generates cryptographically secure random bytes.\n * @function\n * @param {number} len Bytes length\n * @returns {!Array.<number>} Random bytes\n * @throws {Error} If no random implementation is available\n * @inner\n */\nfunction randomBytes(len) {\n // Web Crypto API. Globally available in the browser and in Node.js >=23.\n try {\n return crypto.getRandomValues(new Uint8Array(len));\n } catch {}\n // Node.js crypto module for non-browser environments.\n try {\n return nodeCrypto.randomBytes(len);\n } catch {}\n // Custom fallback specified with `setRandomFallback`.\n if (!randomFallback) {\n throw Error(\n \"Neither WebCryptoAPI nor a crypto module is available. Use bcrypt.setRandomFallback to set an alternative\",\n );\n }\n return randomFallback(len);\n}\n\n/**\n * Sets the pseudo random number generator to use as a fallback if neither node's `crypto` module nor the Web Crypto\n * API is available. Please note: It is highly important that the PRNG used is cryptographically secure and that it\n * is seeded properly!\n * @param {?function(number):!Array.<number>} random Function taking the number of bytes to generate as its\n * sole argument, returning the corresponding array of cryptographically secure random byte values.\n * @see http://nodejs.org/api/crypto.html\n * @see http://www.w3.org/TR/WebCryptoAPI/\n */\nexport function setRandomFallback(random) {\n randomFallback = random;\n}\n\n/**\n * Synchronously generates a salt.\n * @param {number=} rounds Number of rounds to use, defaults to 10 if omitted\n * @param {number=} seed_length Not supported.\n * @returns {string} Resulting salt\n * @throws {Error} If a random fallback is required but not set\n */\nexport function genSaltSync(rounds, seed_length) {\n rounds = rounds || GENSALT_DEFAULT_LOG2_ROUNDS;\n if (typeof rounds !== \"number\")\n throw Error(\n \"Illegal arguments: \" + typeof rounds + \", \" + typeof seed_length,\n );\n if (rounds < 4) rounds = 4;\n else if (rounds > 31) rounds = 31;\n var salt = [];\n salt.push(\"$2b$\");\n if (rounds < 10) salt.push(\"0\");\n salt.push(rounds.toString());\n salt.push(\"$\");\n salt.push(base64_encode(randomBytes(BCRYPT_SALT_LEN), BCRYPT_SALT_LEN)); // May throw\n return salt.join(\"\");\n}\n\n/**\n * Asynchronously generates a salt.\n * @param {(number|function(Error, string=))=} rounds Number of rounds to use, defaults to 10 if omitted\n * @param {(number|function(Error, string=))=} seed_length Not supported.\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting salt\n * @returns {!Promise} If `callback` has been omitted\n * @throws {Error} If `callback` is present but not a function\n */\nexport function genSalt(rounds, seed_length, callback) {\n if (typeof seed_length === \"function\")\n (callback = seed_length), (seed_length = undefined); // Not supported.\n if (typeof rounds === \"function\") (callback = rounds), (rounds = undefined);\n if (typeof rounds === \"undefined\") rounds = GENSALT_DEFAULT_LOG2_ROUNDS;\n else if (typeof rounds !== \"number\")\n throw Error(\"illegal arguments: \" + typeof rounds);\n\n function _async(callback) {\n nextTick(function () {\n // Pretty thin, but salting is fast enough\n try {\n callback(null, genSaltSync(rounds));\n } catch (err) {\n callback(err);\n }\n });\n }\n\n if (callback) {\n if (typeof callback !== \"function\")\n throw Error(\"Illegal callback: \" + typeof callback);\n _async(callback);\n } else\n return new Promise(function (resolve, reject) {\n _async(function (err, res) {\n if (err) {\n reject(err);\n return;\n }\n resolve(res);\n });\n });\n}\n\n/**\n * Synchronously generates a hash for the given password.\n * @param {string} password Password to hash\n * @param {(number|string)=} salt Salt length to generate or salt to use, default to 10\n * @returns {string} Resulting hash\n */\nexport function hashSync(password, salt) {\n if (typeof salt === \"undefined\") salt = GENSALT_DEFAULT_LOG2_ROUNDS;\n if (typeof salt === \"number\") salt = genSaltSync(salt);\n if (typeof password !== \"string\" || typeof salt !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof password + \", \" + typeof salt);\n return _hash(password, salt);\n}\n\n/**\n * Asynchronously generates a hash for the given password.\n * @param {string} password Password to hash\n * @param {number|string} salt Salt length to generate or salt to use\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n * @returns {!Promise} If `callback` has been omitted\n * @throws {Error} If `callback` is present but not a function\n */\nexport function hash(password, salt, callback, progressCallback) {\n function _async(callback) {\n if (typeof password === \"string\" && typeof salt === \"number\")\n genSalt(salt, function (err, salt) {\n _hash(password, salt, callback, progressCallback);\n });\n else if (typeof password === \"string\" && typeof salt === \"string\")\n _hash(password, salt, callback, progressCallback);\n else\n nextTick(\n callback.bind(\n this,\n Error(\"Illegal arguments: \" + typeof password + \", \" + typeof salt),\n ),\n );\n }\n\n if (callback) {\n if (typeof callback !== \"function\")\n throw Error(\"Illegal callback: \" + typeof callback);\n _async(callback);\n } else\n return new Promise(function (resolve, reject) {\n _async(function (err, res) {\n if (err) {\n reject(err);\n return;\n }\n resolve(res);\n });\n });\n}\n\n/**\n * Compares two strings of the same length in constant time.\n * @param {string} known Must be of the correct length\n * @param {string} unknown Must be the same length as `known`\n * @returns {boolean}\n * @inner\n */\nfunction safeStringCompare(known, unknown) {\n var diff = known.length ^ unknown.length;\n for (var i = 0; i < known.length; ++i) {\n diff |= known.charCodeAt(i) ^ unknown.charCodeAt(i);\n }\n return diff === 0;\n}\n\n/**\n * Synchronously tests a password against a hash.\n * @param {string} password Password to compare\n * @param {string} hash Hash to test against\n * @returns {boolean} true if matching, otherwise false\n * @throws {Error} If an argument is illegal\n */\nexport function compareSync(password, hash) {\n if (typeof password !== \"string\" || typeof hash !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof password + \", \" + typeof hash);\n if (hash.length !== 60) return false;\n return safeStringCompare(\n hashSync(password, hash.substring(0, hash.length - 31)),\n hash,\n );\n}\n\n/**\n * Asynchronously tests a password against a hash.\n * @param {string} password Password to compare\n * @param {string} hashValue Hash to test against\n * @param {function(Error, boolean)=} callback Callback receiving the error, if any, otherwise the result\n * @param {function(number)=} progressCallback Callback successively called with the percentage of rounds completed\n * (0.0 - 1.0), maximally once per `MAX_EXECUTION_TIME = 100` ms.\n * @returns {!Promise} If `callback` has been omitted\n * @throws {Error} If `callback` is present but not a function\n */\nexport function compare(password, hashValue, callback, progressCallback) {\n function _async(callback) {\n if (typeof password !== \"string\" || typeof hashValue !== \"string\") {\n nextTick(\n callback.bind(\n this,\n Error(\n \"Illegal arguments: \" + typeof password + \", \" + typeof hashValue,\n ),\n ),\n );\n return;\n }\n if (hashValue.length !== 60) {\n nextTick(callback.bind(this, null, false));\n return;\n }\n hash(\n password,\n hashValue.substring(0, 29),\n function (err, comp) {\n if (err) callback(err);\n else callback(null, safeStringCompare(comp, hashValue));\n },\n progressCallback,\n );\n }\n\n if (callback) {\n if (typeof callback !== \"function\")\n throw Error(\"Illegal callback: \" + typeof callback);\n _async(callback);\n } else\n return new Promise(function (resolve, reject) {\n _async(function (err, res) {\n if (err) {\n reject(err);\n return;\n }\n resolve(res);\n });\n });\n}\n\n/**\n * Gets the number of rounds used to encrypt the specified hash.\n * @param {string} hash Hash to extract the used number of rounds from\n * @returns {number} Number of rounds used\n * @throws {Error} If `hash` is not a string\n */\nexport function getRounds(hash) {\n if (typeof hash !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof hash);\n return parseInt(hash.split(\"$\")[2], 10);\n}\n\n/**\n * Gets the salt portion from a hash. Does not validate the hash.\n * @param {string} hash Hash to extract the salt from\n * @returns {string} Extracted salt part\n * @throws {Error} If `hash` is not a string or otherwise invalid\n */\nexport function getSalt(hash) {\n if (typeof hash !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof hash);\n if (hash.length !== 60)\n throw Error(\"Illegal hash length: \" + hash.length + \" != 60\");\n return hash.substring(0, 29);\n}\n\n/**\n * Tests if a password will be truncated when hashed, that is its length is\n * greater than 72 bytes when converted to UTF-8.\n * @param {string} password The password to test\n * @returns {boolean} `true` if truncated, otherwise `false`\n */\nexport function truncates(password) {\n if (typeof password !== \"string\")\n throw Error(\"Illegal arguments: \" + typeof password);\n return utf8Length(password) > 72;\n}\n\n/**\n * Continues with the callback on the next tick.\n * @function\n * @param {function(...[*])} callback Callback to execute\n * @inner\n */\nvar nextTick =\n typeof process !== \"undefined\" &&\n process &&\n typeof process.nextTick === \"function\"\n ? typeof setImmediate === \"function\"\n ? setImmediate\n : process.nextTick\n : setTimeout;\n\n/** Calculates the byte length of a string encoded as UTF8. */\nfunction utf8Length(string) {\n var len = 0,\n c = 0;\n for (var i = 0; i < string.length; ++i) {\n c = string.charCodeAt(i);\n if (c < 128) len += 1;\n else if (c < 2048) len += 2;\n else if (\n (c & 0xfc00) === 0xd800 &&\n (string.charCodeAt(i + 1) & 0xfc00) === 0xdc00\n ) {\n ++i;\n len += 4;\n } else len += 3;\n }\n return len;\n}\n\n/** Converts a string to an array of UTF8 bytes. */\nfunction utf8Array(string) {\n var offset = 0,\n c1,\n c2;\n var buffer = new Array(utf8Length(string));\n for (var i = 0, k = string.length; i < k; ++i) {\n c1 = string.charCodeAt(i);\n if (c1 < 128) {\n buffer[offset++] = c1;\n } else if (c1 < 2048) {\n buffer[offset++] = (c1 >> 6) | 192;\n buffer[offset++] = (c1 & 63) | 128;\n } else if (\n (c1 & 0xfc00) === 0xd800 &&\n ((c2 = string.charCodeAt(i + 1)) & 0xfc00) === 0xdc00\n ) {\n c1 = 0x10000 + ((c1 & 0x03ff) << 10) + (c2 & 0x03ff);\n ++i;\n buffer[offset++] = (c1 >> 18) | 240;\n buffer[offset++] = ((c1 >> 12) & 63) | 128;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n } else {\n buffer[offset++] = (c1 >> 12) | 224;\n buffer[offset++] = ((c1 >> 6) & 63) | 128;\n buffer[offset++] = (c1 & 63) | 128;\n }\n }\n return buffer;\n}\n\n// A base64 implementation for the bcrypt algorithm. This is partly non-standard.\n\n/**\n * bcrypt's own non-standard base64 dictionary.\n * @type {!Array.<string>}\n * @const\n * @inner\n **/\nvar BASE64_CODE =\n \"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\".split(\"\");\n\n/**\n * @type {!Array.<number>}\n * @const\n * @inner\n **/\nvar BASE64_INDEX = [\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, -1, -1, 28,\n 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1,\n];\n\n/**\n * Encodes a byte array to base64 with up to len bytes of input.\n * @param {!Array.<number>} b Byte array\n * @param {number} len Maximum input length\n * @returns {string}\n * @inner\n */\nfunction base64_encode(b, len) {\n var off = 0,\n rs = [],\n c1,\n c2;\n if (len <= 0 || len > b.length) throw Error(\"Illegal len: \" + len);\n while (off < len) {\n c1 = b[off++] & 0xff;\n rs.push(BASE64_CODE[(c1 >> 2) & 0x3f]);\n c1 = (c1 & 0x03) << 4;\n if (off >= len) {\n rs.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = b[off++] & 0xff;\n c1 |= (c2 >> 4) & 0x0f;\n rs.push(BASE64_CODE[c1 & 0x3f]);\n c1 = (c2 & 0x0f) << 2;\n if (off >= len) {\n rs.push(BASE64_CODE[c1 & 0x3f]);\n break;\n }\n c2 = b[off++] & 0xff;\n c1 |= (c2 >> 6) & 0x03;\n rs.push(BASE64_CODE[c1 & 0x3f]);\n rs.push(BASE64_CODE[c2 & 0x3f]);\n }\n return rs.join(\"\");\n}\n\n/**\n * Decodes a base64 encoded string to up to len bytes of output.\n * @param {string} s String to decode\n * @param {number} len Maximum output length\n * @returns {!Array.<number>}\n * @inner\n */\nfunction base64_decode(s, len) {\n var off = 0,\n slen = s.length,\n olen = 0,\n rs = [],\n c1,\n c2,\n c3,\n c4,\n o,\n code;\n if (len <= 0) throw Error(\"Illegal len: \" + len);\n while (off < slen - 1 && olen < len) {\n code = s.charCodeAt(off++);\n c1 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n code = s.charCodeAt(off++);\n c2 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n if (c1 == -1 || c2 == -1) break;\n o = (c1 << 2) >>> 0;\n o |= (c2 & 0x30) >> 4;\n rs.push(String.fromCharCode(o));\n if (++olen >= len || off >= slen) break;\n code = s.charCodeAt(off++);\n c3 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n if (c3 == -1) break;\n o = ((c2 & 0x0f) << 4) >>> 0;\n o |= (c3 & 0x3c) >> 2;\n rs.push(String.fromCharCode(o));\n if (++olen >= len || off >= slen) break;\n code = s.charCodeAt(off++);\n c4 = code < BASE64_INDEX.length ? BASE64_INDEX[code] : -1;\n o = ((c3 & 0x03) << 6) >>> 0;\n o |= c4;\n rs.push(String.fromCharCode(o));\n ++olen;\n }\n var res = [];\n for (off = 0; off < olen; off++) res.push(rs[off].charCodeAt(0));\n return res;\n}\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar BCRYPT_SALT_LEN = 16;\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar GENSALT_DEFAULT_LOG2_ROUNDS = 10;\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar BLOWFISH_NUM_ROUNDS = 16;\n\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar MAX_EXECUTION_TIME = 100;\n\n/**\n * @type {Array.<number>}\n * @const\n * @inner\n */\nvar P_ORIG = [\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,\n 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,\n 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b,\n];\n\n/**\n * @type {Array.<number>}\n * @const\n * @inner\n */\nvar S_ORIG = [\n 0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96,\n 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16,\n 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, 0x0d95748f, 0x728eb658,\n 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,\n 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e,\n 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60,\n 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, 0x55ca396a, 0x2aab10b6,\n 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,\n 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c,\n 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193,\n 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, 0xef845d5d, 0xe98575b1,\n 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,\n 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a,\n 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3,\n 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, 0xa1f1651d, 0x39af0176,\n 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,\n 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706,\n 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b,\n 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, 0xe3fe501a, 0xb6794c3b,\n 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,\n 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c,\n 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3,\n 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, 0x5579c0bd, 0x1a60320a,\n 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,\n 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760,\n 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db,\n 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, 0x695b27b0, 0xbbca58c8,\n 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,\n 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33,\n 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4,\n 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, 0xd08ed1d0, 0xafc725e0,\n 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,\n 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777,\n 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299,\n 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, 0x165fa266, 0x80957705,\n 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,\n 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e,\n 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa,\n 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, 0x83260376, 0x6295cfa9,\n 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,\n 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f,\n 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664,\n 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, 0x4b7a70e9, 0xb5b32944,\n 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,\n 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29,\n 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6,\n 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, 0x4cdd2086, 0x8470eb26,\n 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,\n 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c,\n 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff,\n 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, 0xd19113f9, 0x7ca92ff6,\n 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,\n 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f,\n 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf,\n 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, 0xde9a771f, 0xd9930810,\n 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,\n 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa,\n 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16,\n 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, 0x71dff89e, 0x10314e55,\n 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,\n 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1,\n 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f,\n 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, 0xc6150eba, 0x94e2ea78,\n 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,\n 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883,\n 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802,\n 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, 0x1521b628, 0x29076170,\n 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,\n 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7,\n 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50,\n 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, 0x9b540b19, 0x875fa099,\n 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,\n 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263,\n 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128,\n 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, 0x5d4a14d9, 0xe864b7e3,\n 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,\n 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7,\n 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3,\n 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, 0x095bbf00, 0xad19489d,\n 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,\n 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460,\n 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735,\n 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, 0x9e447a2e, 0xc3453484,\n 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,\n 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a,\n 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934,\n 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, 0xd4082471, 0x3320f46a,\n 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,\n 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785,\n 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a,\n 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, 0x68dc1462, 0xd7486900,\n 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,\n 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9,\n 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2,\n 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, 0xfb0af54e, 0xd8feb397,\n 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,\n 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9,\n 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3,\n 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, 0x07f9c9ee, 0x41041f0f,\n 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,\n 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e,\n 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922,\n 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, 0xd0127845, 0x95b794fd,\n 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,\n 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8,\n 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804,\n 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, 0x667b9ffb, 0xcedb7d9c,\n 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,\n 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b,\n 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350,\n 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, 0x44421659, 0x0a121386,\n 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,\n 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0,\n 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f,\n 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, 0x4e58f48f, 0xf2ddfda2,\n 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,\n 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770,\n 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e,\n 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, 0xe85a1f02, 0x09f0be8c,\n 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,\n 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa,\n 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5,\n 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, 0x11e69ed7, 0x2338ea63,\n 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,\n 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9,\n 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4,\n 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, 0x6fd5c7e7, 0x56e14ec4,\n 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0,\n 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742,\n 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b,\n 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, 0x5748ab2f, 0xbc946e79,\n 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,\n 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a,\n 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4,\n 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, 0x2826a2f9, 0xa73a3ae1,\n 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,\n 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797,\n 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28,\n 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, 0xe029ac71, 0xe019a5e6,\n 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,\n 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba,\n 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a,\n 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, 0x7533d928, 0xb155fdf5,\n 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,\n 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce,\n 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680,\n 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, 0xb39a460a, 0x6445c0dd,\n 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,\n 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb,\n 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370,\n 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, 0x4040cb08, 0x4eb4e2cc,\n 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,\n 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc,\n 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9,\n 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, 0x1a908749, 0xd44fbd9a,\n 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,\n 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a,\n 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1,\n 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, 0xe0ec6e0e, 0x1698db3b,\n 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,\n 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e,\n 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f,\n 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, 0xf523f357, 0xa6327623,\n 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,\n 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a,\n 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6,\n 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, 0x53113ec0, 0x1640e3d3,\n 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,\n 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c,\n 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f,\n 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6,\n];\n\n/**\n * @type {Array.<number>}\n * @const\n * @inner\n */\nvar C_ORIG = [\n 0x4f727068, 0x65616e42, 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274,\n];\n\n/**\n * @param {Array.<number>} lr\n * @param {number} off\n * @param {Array.<number>} P\n * @param {Array.<number>} S\n * @returns {Array.<number>}\n * @inner\n */\nfunction _encipher(lr, off, P, S) {\n // This is our bottleneck: 1714/1905 ticks / 90% - see profile.txt\n var n,\n l = lr[off],\n r = lr[off + 1];\n\n l ^= P[0];\n\n /*\n for (var i=0, k=BLOWFISH_NUM_ROUNDS-2; i<=k;)\n // Feistel substitution on left word\n n = S[l >>> 24],\n n += S[0x100 | ((l >> 16) & 0xff)],\n n ^= S[0x200 | ((l >> 8) & 0xff)],\n n += S[0x300 | (l & 0xff)],\n r ^= n ^ P[++i],\n // Feistel substitution on right word\n n = S[r >>> 24],\n n += S[0x100 | ((r >> 16) & 0xff)],\n n ^= S[0x200 | ((r >> 8) & 0xff)],\n n += S[0x300 | (r & 0xff)],\n l ^= n ^ P[++i];\n */\n\n //The following is an unrolled version of the above loop.\n //Iteration 0\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[1];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[2];\n //Iteration 1\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[3];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[4];\n //Iteration 2\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[5];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[6];\n //Iteration 3\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[7];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[8];\n //Iteration 4\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[9];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[10];\n //Iteration 5\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[11];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[12];\n //Iteration 6\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[13];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[14];\n //Iteration 7\n n = S[l >>> 24];\n n += S[0x100 | ((l >> 16) & 0xff)];\n n ^= S[0x200 | ((l >> 8) & 0xff)];\n n += S[0x300 | (l & 0xff)];\n r ^= n ^ P[15];\n n = S[r >>> 24];\n n += S[0x100 | ((r >> 16) & 0xff)];\n n ^= S[0x200 | ((r >> 8) & 0xff)];\n n += S[0x300 | (r & 0xff)];\n l ^= n ^ P[16];\n\n lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1];\n lr[off + 1] = l;\n return lr;\n}\n\n/**\n * @param {Array.<number>} data\n * @param {number} offp\n * @returns {{key: number, offp: number}}\n * @inner\n */\nfunction _streamtoword(data, offp) {\n for (var i = 0, word = 0; i < 4; ++i)\n (word = (word << 8) | (data[offp] & 0xff)),\n (offp = (offp + 1) % data.length);\n return { key: word, offp: offp };\n}\n\n/**\n * @param {Array.<number>} key\n * @param {Array.<number>} P\n * @param {Array.<number>} S\n * @inner\n */\nfunction _key(key, P, S) {\n var offset = 0,\n lr = [0, 0],\n plen = P.length,\n slen = S.length,\n sw;\n for (var i = 0; i < plen; i++)\n (sw = _streamtoword(key, offset)),\n (offset = sw.offp),\n (P[i] = P[i] ^ sw.key);\n for (i = 0; i < plen; i += 2)\n (lr = _encipher(lr, 0, P, S)), (P[i] = lr[0]), (P[i + 1] = lr[1]);\n for (i = 0; i < slen; i += 2)\n (lr = _encipher(lr, 0, P, S)), (S[i] = lr[0]), (S[i + 1] = lr[1]);\n}\n\n/**\n * Expensive key schedule Blowfish.\n * @param {Array.<number>} data\n * @param {Array.<number>} key\n * @param {Array.<number>} P\n * @param {Array.<number>} S\n * @inner\n */\nfunction _ekskey(data, key, P, S) {\n var offp = 0,\n lr = [0, 0],\n plen = P.length,\n slen = S.length,\n sw;\n for (var i = 0; i < plen; i++)\n (sw = _streamtoword(key, offp)), (offp = sw.offp), (P[i] = P[i] ^ sw.key);\n offp = 0;\n for (i = 0; i < plen; i += 2)\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[0] ^= sw.key),\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[1] ^= sw.key),\n (lr = _encipher(lr, 0, P, S)),\n (P[i] = lr[0]),\n (P[i + 1] = lr[1]);\n for (i = 0; i < slen; i += 2)\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[0] ^= sw.key),\n (sw = _streamtoword(data, offp)),\n (offp = sw.offp),\n (lr[1] ^= sw.key),\n (lr = _encipher(lr, 0, P, S)),\n (S[i] = lr[0]),\n (S[i + 1] = lr[1]);\n}\n\n/**\n * Internaly crypts a string.\n * @param {Array.<number>} b Bytes to crypt\n * @param {Array.<number>} salt Salt bytes to use\n * @param {number} rounds Number of rounds\n * @param {function(Error, Array.<number>=)=} callback Callback receiving the error, if any, and the resulting bytes. If\n * omitted, the operation will be performed synchronously.\n * @param {function(number)=} progressCallback Callback called with the current progress\n * @returns {!Array.<number>|undefined} Resulting bytes if callback has been omitted, otherwise `undefined`\n * @inner\n */\nfunction _crypt(b, salt, rounds, callback, progressCallback) {\n var cdata = C_ORIG.slice(),\n clen = cdata.length,\n err;\n\n // Validate\n if (rounds < 4 || rounds > 31) {\n err = Error(\"Illegal number of rounds (4-31): \" + rounds);\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n if (salt.length !== BCRYPT_SALT_LEN) {\n err = Error(\n \"Illegal salt length: \" + salt.length + \" != \" + BCRYPT_SALT_LEN,\n );\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n rounds = (1 << rounds) >>> 0;\n\n var P,\n S,\n i = 0,\n j;\n\n //Use typed arrays when available - huge speedup!\n if (typeof Int32Array === \"function\") {\n P = new Int32Array(P_ORIG);\n S = new Int32Array(S_ORIG);\n } else {\n P = P_ORIG.slice();\n S = S_ORIG.slice();\n }\n\n _ekskey(salt, b, P, S);\n\n /**\n * Calcualtes the next round.\n * @returns {Array.<number>|undefined} Resulting array if callback has been omitted, otherwise `undefined`\n * @inner\n */\n function next() {\n if (progressCallback) progressCallback(i / rounds);\n if (i < rounds) {\n var start = Date.now();\n for (; i < rounds; ) {\n i = i + 1;\n _key(b, P, S);\n _key(salt, P, S);\n if (Date.now() - start > MAX_EXECUTION_TIME) break;\n }\n } else {\n for (i = 0; i < 64; i++)\n for (j = 0; j < clen >> 1; j++) _encipher(cdata, j << 1, P, S);\n var ret = [];\n for (i = 0; i < clen; i++)\n ret.push(((cdata[i] >> 24) & 0xff) >>> 0),\n ret.push(((cdata[i] >> 16) & 0xff) >>> 0),\n ret.push(((cdata[i] >> 8) & 0xff) >>> 0),\n ret.push((cdata[i] & 0xff) >>> 0);\n if (callback) {\n callback(null, ret);\n return;\n } else return ret;\n }\n if (callback) nextTick(next);\n }\n\n // Async\n if (typeof callback !== \"undefined\") {\n next();\n\n // Sync\n } else {\n var res;\n while (true) if (typeof (res = next()) !== \"undefined\") return res || [];\n }\n}\n\n/**\n * Internally hashes a password.\n * @param {string} password Password to hash\n * @param {?string} salt Salt to use, actually never null\n * @param {function(Error, string=)=} callback Callback receiving the error, if any, and the resulting hash. If omitted,\n * hashing is performed synchronously.\n * @param {function(number)=} progressCallback Callback called with the current progress\n * @returns {string|undefined} Resulting hash if callback has been omitted, otherwise `undefined`\n * @inner\n */\nfunction _hash(password, salt, callback, progressCallback) {\n var err;\n if (typeof password !== \"string\" || typeof salt !== \"string\") {\n err = Error(\"Invalid string / salt: Not a string\");\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n\n // Validate the salt\n var minor, offset;\n if (salt.charAt(0) !== \"$\" || salt.charAt(1) !== \"2\") {\n err = Error(\"Invalid salt version: \" + salt.substring(0, 2));\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n if (salt.charAt(2) === \"$\") (minor = String.fromCharCode(0)), (offset = 3);\n else {\n minor = salt.charAt(2);\n if (\n (minor !== \"a\" && minor !== \"b\" && minor !== \"y\") ||\n salt.charAt(3) !== \"$\"\n ) {\n err = Error(\"Invalid salt revision: \" + salt.substring(2, 4));\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n offset = 4;\n }\n\n // Extract number of rounds\n if (salt.charAt(offset + 2) > \"$\") {\n err = Error(\"Missing salt rounds\");\n if (callback) {\n nextTick(callback.bind(this, err));\n return;\n } else throw err;\n }\n var r1 = parseInt(salt.substring(offset, offset + 1), 10) * 10,\n r2 = parseInt(salt.substring(offset + 1, offset + 2), 10),\n rounds = r1 + r2,\n real_salt = salt.substring(offset + 3, offset + 25);\n password += minor >= \"a\" ? \"\\x00\" : \"\";\n\n var passwordb = utf8Array(password),\n saltb = base64_decode(real_salt, BCRYPT_SALT_LEN);\n\n /**\n * Finishes hashing.\n * @param {Array.<number>} bytes Byte array\n * @returns {string}\n * @inner\n */\n function finish(bytes) {\n var res = [];\n res.push(\"$2\");\n if (minor >= \"a\") res.push(minor);\n res.push(\"$\");\n if (rounds < 10) res.push(\"0\");\n res.push(rounds.toString());\n res.push(\"$\");\n res.push(base64_encode(saltb, saltb.length));\n res.push(base64_encode(bytes, C_ORIG.length * 4 - 1));\n return res.join(\"\");\n }\n\n // Sync\n if (typeof callback == \"undefined\")\n return finish(_crypt(passwordb, saltb, rounds));\n // Async\n else {\n _crypt(\n passwordb,\n saltb,\n rounds,\n function (err, bytes) {\n if (err) callback(err, null);\n else callback(null, finish(bytes));\n },\n progressCallback,\n );\n }\n}\n\n/**\n * Encodes a byte array to base64 with up to len bytes of input, using the custom bcrypt alphabet.\n * @function\n * @param {!Array.<number>} bytes Byte array\n * @param {number} length Maximum input length\n * @returns {string}\n */\nexport function encodeBase64(bytes, length) {\n return base64_encode(bytes, length);\n}\n\n/**\n * Decodes a base64 encoded string to up to len bytes of output, using the custom bcrypt alphabet.\n * @function\n * @param {string} string String to decode\n * @param {number} length Maximum output length\n * @returns {!Array.<number>}\n */\nexport function decodeBase64(string, length) {\n return base64_decode(string, length);\n}\n\nexport default {\n setRandomFallback,\n genSaltSync,\n genSalt,\n hashSync,\n hash,\n compareSync,\n compare,\n getRounds,\n getSalt,\n truncates,\n encodeBase64,\n decodeBase64,\n};\n","import { Configuration, Info } from '../Contracts/ManagerContract'\nimport { InvalidArgumentException, RuntimeException } from '@h3ravel/support'\n\nimport { AbstractHasher } from './AbstractHasher'\nimport bcrypt from 'bcryptjs'\n\nexport class BcryptHasher extends AbstractHasher {\n private rounds: number = 12\n private verifyAlgorithm: boolean = true\n private limit: number | null = null\n\n constructor(options = {} as Configuration['bcrypt']) {\n super()\n this.rounds = options.rounds ?? this.rounds\n this.verifyAlgorithm = options.verify ?? this.verifyAlgorithm\n this.limit = options.limit ?? this.limit\n }\n\n /**\n * Hash the given value.\n *\n * @param value\n * @param options\n * \n * @return {String}\n */\n public async make (value: string, options = {} as Configuration['bcrypt']): Promise<string> {\n if (this.limit && value.length > this.limit) {\n throw new InvalidArgumentException(`Value is too long to hash. Value must be less than ${this.limit} bytes`)\n }\n\n try {\n const salt = await bcrypt.genSalt(this.cost(options))\n return await bcrypt.hash(value, salt)\n } catch {\n throw new RuntimeException('Bcrypt hashing not supported.')\n }\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param value\n * @param hashedValue\n * @param options\n * @returns\n */\n public async check (value: string, hashedValue?: string | null, _options = {} as Configuration['bcrypt']) {\n if (!hashedValue || hashedValue.length === 0) {\n return false\n }\n\n if (this.verifyAlgorithm && !this.isUsingCorrectAlgorithm(hashedValue)) {\n throw new RuntimeException('This password does not use the Bcrypt algorithm.')\n }\n\n return bcrypt.compare(value, hashedValue)\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param hashedValue\n * \n * @return {Object}\n */\n public info (hashedValue: string): Info {\n return super.info(hashedValue)\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param hashedValue\n * @param options\n * \n * @return {Boolean}\n */\n public needsRehash (hashedValue: string, options = {} as Configuration['bcrypt']): boolean {\n const match = hashedValue.match(/^\\$2[aby]?\\$(\\d+)\\$/)\n if (!match) return true\n\n const currentRounds = parseInt(match[1], 10)\n return currentRounds !== this.cost(options)\n }\n\n /**\n * Verify the hashed value's options.\n *\n * @param hashedValue\n * @return\n */\n protected isUsingValidOptions (hashedValue: string) {\n const { options } = this.info(hashedValue)\n\n if (!options.cost || !Number.isInteger(options.cost ?? null)) {\n return false\n }\n\n if (options.cost > this.rounds) {\n return false\n }\n\n return true\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @private\n */\n public verifyConfiguration (value: string) {\n return this.isUsingCorrectAlgorithm(value) && this.isUsingValidOptions(value)\n }\n\n /**\n * Verify the hashed value's algorithm.\n *\n * @param hashedValue\n * \n * @returns\n */\n protected isUsingCorrectAlgorithm (hashedValue: string) {\n return this.info(hashedValue)['algoName'] === 'bcrypt'\n }\n\n /**\n * Extract the cost value from the options object.\n *\n * @param options\n * @return int\n */\n protected cost (options = {} as Configuration['bcrypt']) {\n return options.rounds ?? this.rounds\n }\n}\n","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\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\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 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 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 '***': '*',\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\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 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 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 }\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 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 os from 'node:os';\nimport fs from 'node:fs/promises';\nimport childProcess from 'node:child_process';\nconst DEFAULT_RESOLV_FILE = '/etc/resolv.conf';\n// osx start line 'en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500'\n// linux start line 'eth0 Link encap:Ethernet HWaddr 00:16:3E:00:0A:29 '\nconst MAC_OSX_START_LINE = /^(\\w+)\\:\\s+flags=/;\nconst MAC_LINUX_START_LINE = /^(\\w+)\\s{2,}link encap:\\w+/i;\n// ether 78:ca:39:b0:e6:7d\n// HWaddr 00:16:3E:00:0A:29\nexport const MAC_RE = /(?:ether|HWaddr)\\s+((?:[a-z0-9]{2}\\:){5}[a-z0-9]{2})/i;\n// osx: inet 192.168.2.104 netmask 0xffffff00 broadcast 192.168.2.255\n// linux: inet addr:10.125.5.202 Bcast:10.125.15.255 Mask:255.255.240.0\nexport const MAC_IP_RE = /inet\\s(?:addr\\:)?(\\d+\\.\\d+\\.\\d+\\.\\d+)/;\nfunction getDefaultInterfaceName() {\n let val = 'eth';\n const platform = os.platform();\n if (platform === 'darwin') {\n val = 'en';\n }\n else if (platform === 'win32') {\n val = undefined;\n }\n return val;\n}\nfunction getIfconfigCMD() {\n if (os.platform() === 'win32') {\n return 'ipconfig/all';\n }\n return '/sbin/ifconfig';\n}\n// typeof os.networkInterfaces family is a number (v18.0.0)\n// types: 'IPv4' | 'IPv6' => 4 | 6\n// @see https://github.com/nodejs/node/issues/42861\nfunction matchName(actualFamily, expectedFamily) {\n if (expectedFamily === 'IPv4') {\n return actualFamily === 'IPv4' || actualFamily === 4;\n }\n if (expectedFamily === 'IPv6') {\n return actualFamily === 'IPv6' || actualFamily === 6;\n }\n return actualFamily === expectedFamily;\n}\nfunction findAddressFromInterface(items, expectedFamily, ignoreLoAddress = false) {\n let firstMatchItem;\n for (const item of items) {\n if (matchName(item.family, expectedFamily)) {\n if (ignoreLoAddress && item.address.startsWith('127.')) {\n continue;\n }\n if (expectedFamily === 'IPv6') {\n // find the scopeid = 0 item\n if (item.scopeid === 0)\n return item;\n if (!firstMatchItem) {\n firstMatchItem = item;\n }\n }\n else {\n return item;\n }\n }\n }\n return firstMatchItem;\n}\nexport function getInterfaceAddress(family, name) {\n const interfaces = os.networkInterfaces();\n const noName = !name;\n name = name || getDefaultInterfaceName();\n family = family || 'IPv4';\n if (name) {\n for (let i = -1; i < 8; i++) {\n const interfaceName = name + (i >= 0 ? i : ''); // support 'lo' and 'lo0'\n const items = interfaces[interfaceName];\n if (items) {\n const item = findAddressFromInterface(items, family);\n if (item) {\n return item;\n }\n }\n }\n }\n if (noName) {\n // filter all loopback or local addresses\n for (const k in interfaces) {\n const items = interfaces[k];\n if (items) {\n // all 127 addresses are local and should be ignored\n const item = findAddressFromInterface(items, family, true);\n if (item) {\n return item;\n }\n }\n }\n }\n return;\n}\n/**\n * Get current machine IPv4\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function ip(interfaceName) {\n const item = getInterfaceAddress('IPv4', interfaceName);\n return item?.address;\n}\n/**\n * Get current machine IPv6\n *\n * interfaceName: interface name, default is 'eth' on linux, 'en' on mac os.\n */\nexport function ipv6(interfaceName) {\n const item = getInterfaceAddress('IPv6', interfaceName);\n return item?.address;\n}\nfunction getMAC(content, interfaceName, matchIP) {\n const lines = content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i].trimEnd();\n const m = MAC_OSX_START_LINE.exec(line) || MAC_LINUX_START_LINE.exec(line);\n if (!m) {\n continue;\n }\n // check interface name\n const name = m[1];\n if (name.indexOf(interfaceName) !== 0) {\n continue;\n }\n let ip = null;\n let mac = null;\n let match = MAC_RE.exec(line);\n if (match) {\n mac = match[1];\n }\n i++;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n line = lines[i];\n if (!line || MAC_OSX_START_LINE.exec(line) || MAC_LINUX_START_LINE.exec(line)) {\n i--;\n break; // hit next interface, handle next interface\n }\n if (!mac) {\n match = MAC_RE.exec(line);\n if (match) {\n mac = match[1];\n }\n }\n if (!ip) {\n match = MAC_IP_RE.exec(line);\n if (match) {\n ip = match[1];\n }\n }\n i++;\n }\n if (ip === matchIP) {\n return mac;\n }\n }\n return null;\n}\nexport function mac(interfaceNameOrCallback, callback) {\n let interfaceName;\n if (typeof interfaceNameOrCallback === 'function') {\n callback = interfaceNameOrCallback;\n }\n else {\n interfaceName = interfaceNameOrCallback;\n }\n interfaceName = interfaceName || getDefaultInterfaceName();\n const item = getInterfaceAddress('IPv4', interfaceName);\n if (!item) {\n return callback();\n }\n // https://github.com/nodejs/node/issues/13581\n // bug in node 7.x and <= 8.4.0\n if (!process.env.CI && (item.mac === 'ff:00:00:00:00:00' || item.mac === '00:00:00:00:00:00')) {\n // wrong address, ignore it\n item.mac = '';\n }\n if (item.mac) {\n return callback(null, item.mac);\n }\n childProcess.exec(getIfconfigCMD(), { timeout: 5000 }, (err, stdout) => {\n if (err || !stdout) {\n return callback(err);\n }\n if (!interfaceName) {\n return callback();\n }\n const mac = getMAC(stdout || '', interfaceName, item.address);\n callback(null, mac);\n });\n}\n// nameserver 172.24.102.254\nconst DNS_SERVER_RE = /^nameserver\\s+(\\d+\\.\\d+\\.\\d+\\.\\d+)$/i;\nexport function dns(filepathOrCallback, callback) {\n let filepath;\n if (typeof filepathOrCallback === 'function') {\n callback = filepathOrCallback;\n }\n else {\n filepath = filepathOrCallback;\n }\n filepath = filepath || DEFAULT_RESOLV_FILE;\n fs.readFile(filepath, 'utf8')\n .then(content => {\n const servers = [];\n content = content || '';\n const lines = content.split('\\n');\n for (const line of lines) {\n const m = DNS_SERVER_RE.exec(line.trim());\n if (m) {\n servers.push(m[1]);\n }\n }\n callback(null, servers);\n })\n .catch(err => {\n callback(err);\n });\n}\nexport function address(interfaceNameOrCallback, callback) {\n let interfaceName;\n if (typeof interfaceNameOrCallback === 'function') {\n callback = interfaceNameOrCallback;\n }\n else {\n interfaceName = interfaceNameOrCallback;\n }\n const addr = {\n ip: ip(interfaceName),\n ipv6: ipv6(interfaceName),\n mac: undefined,\n };\n mac(interfaceName || '', (err, mac) => {\n if (mac) {\n addr.mac = mac;\n }\n callback(err || null, addr);\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkcmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGRyZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN6QixPQUFPLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsQyxPQUFPLFlBQVksTUFBTSxvQkFBb0IsQ0FBQztBQUU5QyxNQUFNLG1CQUFtQixHQUFHLGtCQUFrQixDQUFDO0FBRS9DLDBGQUEwRjtBQUMxRiwrRUFBK0U7QUFDL0UsTUFBTSxrQkFBa0IsR0FBRyxtQkFBbUIsQ0FBQztBQUMvQyxNQUFNLG9CQUFvQixHQUFHLDZCQUE2QixDQUFDO0FBRTNELDBCQUEwQjtBQUMxQiwyQkFBMkI7QUFDM0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLHVEQUF1RCxDQUFDO0FBRTlFLHFFQUFxRTtBQUNyRSx5RUFBeUU7QUFDekUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLHVDQUF1QyxDQUFDO0FBWWpFLFNBQVMsdUJBQXVCO0lBQzlCLElBQUksR0FBRyxHQUF1QixLQUFLLENBQUM7SUFDcEMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQy9CLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzFCLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDYixDQUFDO1NBQU0sSUFBSSxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDaEMsR0FBRyxHQUFHLFNBQVMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsU0FBUyxjQUFjO0lBQ3JCLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDO1FBQzlCLE9BQU8sY0FBYyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxPQUFPLGdCQUFnQixDQUFDO0FBQzFCLENBQUM7QUFFRCwyREFBMkQ7QUFDM0Qsa0NBQWtDO0FB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","import { createServer } from 'node:net';\nimport { debuglog } from 'node:util';\nimport { ip } from 'address';\nconst debug = debuglog('detect-port');\nexport class IPAddressNotAvailableError extends Error {\n constructor(options) {\n super('The IP address is not available on this machine', options);\n this.name = this.constructor.name;\n Error.captureStackTrace(this, this.constructor);\n }\n}\nexport function detectPort(port, callback) {\n let hostname = '';\n if (port && typeof port === 'object') {\n hostname = port.hostname;\n callback = port.callback;\n port = port.port;\n }\n else {\n if (typeof port === 'function') {\n callback = port;\n port = void 0;\n }\n }\n port = parseInt(port) || 0;\n let maxPort = port + 10;\n if (maxPort > 65535) {\n maxPort = 65535;\n }\n debug('detect free port between [%s, %s)', port, maxPort);\n if (typeof callback === 'function') {\n return tryListen(port, maxPort, hostname)\n .then(port => callback(null, port))\n .catch(callback);\n }\n // promise\n return tryListen(port, maxPort, hostname);\n}\nasync function handleError(port, maxPort, hostname) {\n if (port >= maxPort) {\n debug('port: %s >= maxPort: %s, give up and use random port', port, maxPort);\n port = 0;\n maxPort = 0;\n }\n return await tryListen(port, maxPort, hostname);\n}\nasync function tryListen(port, maxPort, hostname) {\n // use user hostname\n if (hostname) {\n try {\n return await listen(port, hostname);\n }\n catch (err) {\n if (err.code === 'EADDRNOTAVAIL') {\n throw new IPAddressNotAvailableError({ cause: err });\n }\n return await handleError(++port, maxPort, hostname);\n }\n }\n // 1. check null / undefined\n try {\n await listen(port);\n }\n catch (err) {\n // ignore random listening\n if (port === 0) {\n throw err;\n }\n return await handleError(++port, maxPort, hostname);\n }\n // 2. check 0.0.0.0\n try {\n await listen(port, '0.0.0.0');\n }\n catch (err) {\n return await handleError(++port, maxPort, hostname);\n }\n // 3. check 127.0.0.1\n try {\n await listen(port, '127.0.0.1');\n }\n catch (err) {\n return await handleError(++port, maxPort, hostname);\n }\n // 4. check localhost\n try {\n await listen(port, 'localhost');\n }\n catch (err) {\n // if localhost refer to the ip that is not unknown on the machine, you will see the error EADDRNOTAVAIL\n // https://stackoverflow.com/questions/10809740/listen-eaddrnotavail-error-in-node-js\n if (err.code !== 'EADDRNOTAVAIL') {\n return await handleError(++port, maxPort, hostname);\n }\n }\n // 5. check current ip\n try {\n return await listen(port, ip());\n }\n catch (err) {\n return await handleError(++port, maxPort, hostname);\n }\n}\nfunction listen(port, hostname) {\n const server = createServer();\n return new Promise((resolve, reject) => {\n server.once('error', err => {\n debug('listen %s:%s error: %s', hostname, port, err);\n server.close();\n if (err.code === 'ENOTFOUND') {\n debug('ignore dns ENOTFOUND error, get free %s:%s', hostname, port);\n return resolve(port);\n }\n return reject(err);\n });\n debug('try listen %d on %s', port, hostname);\n server.listen(port, hostname, () => {\n port = server.address().port;\n debug('get free %s:%s', hostname, port);\n server.close();\n return resolve(port);\n });\n });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LXBvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGV0ZWN0LXBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLFVBQVUsQ0FBQztBQUNyRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFN0IsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBVXRDLE1BQU0sT0FBTywwQkFBMkIsU0FBUSxLQUFLO0lBQ25ELFlBQVksT0FBc0I7UUFDaEMsS0FBSyxDQUFDLGlEQUFpRCxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBS0QsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUF3RCxFQUFFLFFBQTZCO0lBQ2hILElBQUksUUFBUSxHQUF1QixFQUFFLENBQUM7SUFFdEMsSUFBSSxJQUFJLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDckMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekIsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDekIsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztTQUFNLENBQUM7UUFDTixJQUFJLE9BQU8sSUFBSSxLQUFLLFVBQVUsRUFBRSxDQUFDO1lBQy9CLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDaEIsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBSSxHQUFHLFFB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","import { debuglog } from 'node:util';\nimport { detectPort } from './detect-port.js';\nconst debug = debuglog('detect-port:wait-port');\nfunction sleep(ms) {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\nexport class WaitPortRetryError extends Error {\n retries;\n count;\n constructor(message, retries, count, options) {\n super(message, options);\n this.name = this.constructor.name;\n this.retries = retries;\n this.count = count;\n Error.captureStackTrace(this, this.constructor);\n }\n}\nexport async function waitPort(port, options = {}) {\n const { retryInterval = 1000, retries = Infinity } = options;\n let count = 1;\n async function loop() {\n debug('wait port %d, retries %d, count %d', port, retries, count);\n if (count > retries) {\n const err = new WaitPortRetryError('retries exceeded', retries, count);\n throw err;\n }\n count++;\n const freePort = await detectPort(port);\n if (freePort === port) {\n await sleep(retryInterval);\n return loop();\n }\n return true;\n }\n return await loop();\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FpdC1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3dhaXQtcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUU5QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsdUJBQXVCLENBQUMsQ0FBQztBQUVoRCxTQUFTLEtBQUssQ0FBQyxFQUFVO0lBQ3ZCLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsVUFBVSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsS0FBSztJQUMzQyxPQUFPLENBQVM7SUFDaEIsS0FBSyxDQUFTO0lBRWQsWUFBWSxPQUFlLEVBQUUsT0FBZSxFQUFFLEtBQWEsRUFBRSxPQUFzQjtRQUNqRixLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBT0QsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQUMsSUFBWSxFQUFFLFVBQTJCLEVBQUU7SUFDeEUsTUFBTSxFQUFFLGFBQWEsR0FBRyxJQUFJLEVBQUUsT0FBTyxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUM3RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFFZCxLQUFLLFVBQVUsSUFBSTtRQUNqQixLQUFLLENBQUMsb0NBQW9DLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNsRSxJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLEdBQUcsR0FBRyxJQUFJLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN2RSxNQUFNLEdBQUcsQ0FBQztRQUNaLENBQUM7UUFDRCxLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sUUFBUSxHQUFHLE1BQU0sVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3RCLE1BQU0sS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzNCLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDaEIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE9BQU8sTUFBTSxJQUFJLEVBQUUsQ0FBQztBQUN0QixDQUFDIn0=","'use strict'\n\nfunction _resolveEscapeSequences (value) {\n return value.replace(/\\\\\\$/g, '$')\n}\n\nfunction expandValue (value, processEnv, runningParsed) {\n const env = { ...runningParsed, ...processEnv } // process.env wins\n\n const regex = /(?<!\\\\)\\${([^{}]+)}|(?<!\\\\)\\$([A-Za-z_][A-Za-z0-9_]*)/g\n\n let result = value\n let match\n const seen = new Set() // self-referential checker\n\n while ((match = regex.exec(result)) !== null) {\n seen.add(result)\n\n const [template, bracedExpression, unbracedExpression] = match\n const expression = bracedExpression || unbracedExpression\n\n // match the operators `:+`, `+`, `:-`, and `-`\n const opRegex = /(:\\+|\\+|:-|-)/\n // find first match\n const opMatch = expression.match(opRegex)\n const splitter = opMatch ? opMatch[0] : null\n\n const r = expression.split(splitter)\n\n let defaultValue\n let value\n\n const key = r.shift()\n\n if ([':+', '+'].includes(splitter)) {\n defaultValue = env[key] ? r.join(splitter) : ''\n value = null\n } else {\n defaultValue = r.join(splitter)\n value = env[key]\n }\n\n if (value) {\n // self-referential check\n if (seen.has(value)) {\n result = result.replace(template, defaultValue)\n } else {\n result = result.replace(template, value)\n }\n } else {\n result = result.replace(template, defaultValue)\n }\n\n // if the result equaled what was in process.env and runningParsed then stop expanding\n if (result === runningParsed[key]) {\n break\n }\n\n regex.lastIndex = 0 // reset regex search position to re-evaluate after each replacement\n }\n\n return result\n}\n\nfunction expand (options) {\n // for use with progressive expansion\n const runningParsed = {}\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n // dotenv.config() ran before this so the assumption is process.env has already been set\n for (const key in options.parsed) {\n let value = options.parsed[key]\n\n // short-circuit scenario: process.env was already set prior to the file value\n if (processEnv[key] && processEnv[key] !== value) {\n value = processEnv[key]\n } else {\n value = expandValue(value, processEnv, runningParsed)\n }\n\n options.parsed[key] = _resolveEscapeSequences(value)\n\n // for use with progressive expansion\n runningParsed[key] = _resolveEscapeSequences(value)\n }\n\n for (const processKey in options.parsed) {\n processEnv[processKey] = options.parsed[processKey]\n }\n\n return options\n}\n\nmodule.exports.expand = expand\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","import \"reflect-metadata\";\nimport { FileSystem, Logger, PathLoader } from \"@h3ravel/shared\";\nimport fg from \"fast-glob\";\nimport path from \"node:path\";\nimport { Str, dd, dump, str } from \"@h3ravel/support\";\nimport { detect } from \"detect-port\";\nimport dotenv from \"dotenv\";\nimport dotenvExpand from \"dotenv-expand\";\nimport { mkdir, readFile } from \"node:fs/promises\";\nimport semver from \"semver\";\n\n//#region src/Container.ts\nvar Container = class {\n\tbindings = /* @__PURE__ */ new Map();\n\tsingletons = /* @__PURE__ */ new Map();\n\tstatic hasAnyDecorator(target) {\n\t\tif (Reflect.getMetadataKeys(target).length > 0) return true;\n\t\tconst paramLength = target.length;\n\t\tfor (let i = 0; i < paramLength; i++) if (Reflect.getMetadataKeys(target, `__param_${i}`).length > 0) return true;\n\t\treturn false;\n\t}\n\tbind(key, factory) {\n\t\tthis.bindings.set(key, factory);\n\t}\n\t/**\n\t* Bind a singleton service to the container\n\t*/\n\tsingleton(key, factory) {\n\t\tthis.bindings.set(key, () => {\n\t\t\tif (!this.singletons.has(key)) this.singletons.set(key, factory(this));\n\t\t\treturn this.singletons.get(key);\n\t\t});\n\t}\n\tmake(key) {\n\t\t/**\n\t\t* Direct factory binding\n\t\t*/\n\t\tif (this.bindings.has(key)) return this.bindings.get(key)();\n\t\t/**\n\t\t* If this is a class constructor, auto-resolve via reflection\n\t\t*/\n\t\tif (typeof key === \"function\") return this.build(key);\n\t\tthrow new Error(`No binding found for key: ${typeof key === \"string\" ? key : key?.name}`);\n\t}\n\t/**\n\t* Automatically build a class with constructor dependency injection\n\t*/\n\tbuild(ClassType) {\n\t\tlet dependencies = [];\n\t\tif (Array.isArray(ClassType.__inject__)) dependencies = ClassType.__inject__.map((alias) => {\n\t\t\treturn this.make(alias);\n\t\t});\n\t\telse dependencies = (Reflect.getMetadata(\"design:paramtypes\", ClassType) || []).map((dep) => this.make(dep));\n\t\treturn new ClassType(...dependencies);\n\t}\n\t/**\n\t* Check if a service is registered\n\t*/\n\thas(key) {\n\t\treturn this.bindings.has(key);\n\t}\n};\n\n//#endregion\n//#region src/Di/ContainerResolver.ts\nvar ContainerResolver = class ContainerResolver {\n\tconstructor(app) {\n\t\tthis.app = app;\n\t}\n\tasync resolveMethodParams(instance, method, _default) {\n\t\t/**\n\t\t* Get param types for instance method\n\t\t*/\n\t\tlet params = Reflect.getMetadata(\"design:paramtypes\", instance, String(method)) || [];\n\t\t/**\n\t\t* Ensure that the Application class is always available\n\t\t*/\n\t\tif (params.length < 1 && _default) params = [_default];\n\t\t/**\n\t\t* Resolve the bound dependencies\n\t\t*/\n\t\tconst args = params.filter((e) => ContainerResolver.isClass(e)).map((type) => {\n\t\t\treturn this.app.make(type);\n\t\t});\n\t\treturn new Promise((resolve) => {\n\t\t\tresolve(instance[method](...args));\n\t\t});\n\t}\n\tstatic isClass(C) {\n\t\treturn typeof C === \"function\" && C.prototype !== void 0 && Object.toString.call(C).substring(0, 5) === \"class\";\n\t}\n};\n\n//#endregion\n//#region src/ProviderRegistry.ts\nvar ProviderRegistry = class {\n\tstatic providers = /* @__PURE__ */ new Map();\n\tstatic priorityMap = /* @__PURE__ */ new Map();\n\tstatic filteredProviders = [];\n\tstatic sortable = true;\n\t/**\n\t* Set wether providers should be sorted or not.\n\t* \n\t* @returns \n\t*/\n\tstatic setSortable(sort = true) {\n\t\tthis.sortable = sort;\n\t}\n\t/**\n\t* Get a unique identifier for the Provider.\n\t* \n\t* @param provider \n\t* @returns \n\t*/\n\tstatic getKey(provider) {\n\t\tconst anyProvider = provider;\n\t\tif (typeof anyProvider.uid === \"string\") return anyProvider.uid;\n\t\tif (typeof anyProvider.id === \"string\") return anyProvider.id;\n\t\treturn provider.name || \"AnonymousProvider\";\n\t}\n\t/**\n\t* Register one or more providers.\n\t* Duplicate constructors will be ignored.\n\t* \n\t* @param providers \n\t* @returns \n\t*/\n\tstatic register(...providers) {\n\t\tconst list = this.sortable ? this.sort(providers.concat(...this.providers.values())) : providers.concat(...this.providers.values());\n\t\tfor (const provider of list) {\n\t\t\tconst key = this.getKey(provider);\n\t\t\tthis.providers.set(key, provider);\n\t\t}\n\t}\n\t/**\n\t* Bulk register providers from an array.\n\t* \n\t* @param providers \n\t* @returns \n\t*/\n\tstatic registerMany(providers) {\n\t\tconst list = this.sortable ? this.sort(providers.concat(...this.providers.values())) : providers.concat(...this.providers.values());\n\t\tfor (const provider of list) {\n\t\t\tconst key = this.getKey(provider);\n\t\t\tthis.providers.set(key, provider);\n\t\t}\n\t}\n\t/**\n\t* Get all registered providers as an array.\n\t* \n\t* @returns \n\t*/\n\tstatic setFiltered(filtered) {\n\t\tthis.filteredProviders = filtered;\n\t}\n\t/**\n\t* Resolve (instantiate) all providers with the given application or Service Container.\n\t* \n\t* @param app \n\t* @returns \n\t*/\n\tstatic async resolve(app, useServiceContainer = false) {\n\t\tconst providers = Array.from(this.providers.values()).filter((e) => {\n\t\t\treturn !!e && (this.filteredProviders.length < 1 || !this.filteredProviders.includes(e.name));\n\t\t});\n\t\treturn await Promise.all(providers.map(async (ProviderClass) => {\n\t\t\tconst provider = new ProviderClass(app);\n\t\t\tif (!useServiceContainer) return Promise.resolve(provider);\n\t\t\tawait new ContainerResolver(app).resolveMethodParams(provider, \"register\", app);\n\t\t\treturn provider;\n\t\t}));\n\t}\n\t/**\n\t* Sort the service providers\n\t* \n\t* @param providers \n\t* @returns \n\t*/\n\tstatic sort(providers) {\n\t\t/**\n\t\t* Base priority (default 0)\n\t\t*/\n\t\tproviders.forEach((Provider) => {\n\t\t\tconst key = this.getKey(Provider);\n\t\t\tthis.priorityMap.set(`${Provider.name}::${key}`, Provider.priority ?? 0);\n\t\t});\n\t\t/**\n\t\t* Handle before/after adjustments\n\t\t*/\n\t\tproviders.forEach((Provider) => {\n\t\t\tconst order = Provider.order;\n\t\t\tif (!order) return;\n\t\t\tconst [direction, target] = order.split(\":\");\n\t\t\tconst targetPriority = this.priorityMap.get(target) ?? 0;\n\t\t\tconst key = this.getKey(Provider);\n\t\t\tif (direction === \"before\") this.priorityMap.set(`${Provider.name}::${key}`, targetPriority - 1);\n\t\t\telse if (direction === \"after\") this.priorityMap.set(`${Provider.name}::${key}`, targetPriority + 1);\n\t\t});\n\t\t/**\n\t\t* Return service providers sorted based on thier name and priority\n\t\t*/\n\t\treturn providers.sort((A, B) => {\n\t\t\tconst keyA = this.getKey(A);\n\t\t\tconst keyB = this.getKey(B);\n\t\t\treturn (this.priorityMap.get(`${B.name}::${keyB}`) ?? 0) - (this.priorityMap.get(`${A.name}::${keyA}`) ?? 0);\n\t\t});\n\t}\n\t/**\n\t* Sort service providers\n\t*/\n\tstatic doSort() {\n\t\tconst raw = this.sort(Array.from(this.providers.values()));\n\t\tconst providers = /* @__PURE__ */ new Map();\n\t\tfor (const provider of raw) {\n\t\t\tconst key = this.getKey(provider);\n\t\t\tproviders.set(key, provider);\n\t\t}\n\t\tthis.providers = providers;\n\t}\n\t/**\n\t* Log the service providers in a table\n\t* \n\t* @param priorityMap \n\t*/\n\tstatic log(providers) {\n\t\tconst sorted = Array.from((providers ?? this.providers).values());\n\t\tconsole.table(sorted.map((P) => ({\n\t\t\tName: P.constructor.name,\n\t\t\tOrder: P.constructor.order ?? \"N/A\",\n\t\t\tPriority: P.constructor.priority\n\t\t})));\n\t\tconsole.info(\"\");\n\t}\n\t/**\n\t* Get all registered providers as an array.\n\t* \n\t* @returns \n\t*/\n\tstatic all() {\n\t\treturn Array.from(this.providers.values());\n\t}\n\t/**\n\t* Check if a provider is already registered.\n\t* \n\t* @param provider \n\t* @returns \n\t*/\n\tstatic has(provider) {\n\t\treturn this.providers.has(this.getKey(provider));\n\t}\n\t/**\n\t* Automatically search for and discover service providers in packages.\n\t* \n\t* @param autoRegister \n\t* @returns \n\t*/\n\tstatic async discoverProviders(autoRegister = true) {\n\t\tconst manifests = await fg([\n\t\t\t\"node_modules/@h3ravel/*/package.json\",\n\t\t\t\"node_modules/@h3ravel-community/*/package.json\",\n\t\t\t\"node_modules/h3ravel-*/package.json\"\n\t\t]);\n\t\tconst providers = [];\n\t\tfor (const manifestPath of manifests) {\n\t\t\tconst pkg = await this.getManifest(path.resolve(manifestPath));\n\t\t\tif (pkg.h3ravel?.providers) providers.push(...await Promise.all(pkg.h3ravel.providers.map(async (name) => (await import(path.resolve(path.dirname(manifestPath), \"dist/index.js\")))[name])));\n\t\t}\n\t\tif (autoRegister) for (const provider of providers) {\n\t\t\tconst key = this.getKey(provider);\n\t\t\tthis.providers.set(key, provider);\n\t\t}\n\t\treturn providers;\n\t}\n\t/**\n\t* Get the content of the package.json file\n\t* \n\t* @param manifestPath \n\t* @returns \n\t*/\n\tstatic async getManifest(manifestPath) {\n\t\tlet pkg;\n\t\ttry {\n\t\t\tpkg = (await import(manifestPath)).default;\n\t\t} catch {\n\t\t\tconst { createRequire } = await import(\"module\");\n\t\t\tpkg = createRequire(import.meta.url)(manifestPath);\n\t\t}\n\t\treturn pkg;\n\t}\n};\n\n//#endregion\n//#region src/Registerer.ts\nvar Registerer = class Registerer {\n\tconstructor(app) {\n\t\tthis.app = app;\n\t}\n\tstatic register(app) {\n\t\tnew Registerer(app).bootRegister();\n\t}\n\tbootRegister() {\n\t\tglobalThis.dd = dd;\n\t\tglobalThis.dump = dump;\n\t\tglobalThis.app_path = (path$1) => this.appPath(path$1);\n\t\tglobalThis.base_path = (path$1) => this.basePath(path$1);\n\t\tglobalThis.public_path = (path$1) => this.publicPath(path$1);\n\t\tglobalThis.storage_path = (path$1) => this.storagePath(path$1);\n\t\tglobalThis.database_path = (path$1) => this.databasePath(path$1);\n\t}\n\tappPath(path$1) {\n\t\treturn this.app.getPath(\"base\", path.join(`/${process.env.DIST_DIR ?? \"src\"}/`.replace(/([^:]\\/)\\/+/g, \"$1\"), \"app\", path$1 ?? \"\"));\n\t}\n\tbasePath(path$1) {\n\t\treturn this.app.getPath(\"base\", path$1);\n\t}\n\tpublicPath(path$1) {\n\t\treturn this.app.getPath(\"public\", path$1);\n\t}\n\tstoragePath(path$1) {\n\t\treturn this.app.getPath(\"base\", path.join(\"storage\", path$1 ?? \"\"));\n\t}\n\tdatabasePath(path$1) {\n\t\treturn this.app.getPath(\"database\", path$1);\n\t}\n};\n\n//#endregion\n//#region src/Application.ts\nvar Application = class Application extends Container {\n\tpaths = new PathLoader();\n\ttries = 0;\n\tbooted = false;\n\tversions = {\n\t\tapp: \"0.0.0\",\n\t\tts: \"0.0.0\"\n\t};\n\tstatic versions = {\n\t\tapp: \"0.0.0\",\n\t\tts: \"0.0.0\"\n\t};\n\tbasePath;\n\tproviders = [];\n\texternalProviders = [];\n\tfilteredProviders = [];\n\t/**\n\t* List of registered console commands\n\t*/\n\tregisteredCommands = [];\n\tconstructor(basePath) {\n\t\tsuper();\n\t\tdotenvExpand.expand(dotenv.config({ quiet: true }));\n\t\tthis.basePath = basePath;\n\t\tthis.setPath(\"base\", basePath);\n\t\tthis.loadOptions();\n\t\tthis.registerBaseBindings();\n\t\tRegisterer.register(this);\n\t}\n\t/**\n\t* Register core bindings into the container\n\t*/\n\tregisterBaseBindings() {\n\t\tthis.bind(Application, () => this);\n\t\tthis.bind(\"path.base\", () => this.basePath);\n\t\tthis.bind(\"load.paths\", () => this.paths);\n\t}\n\tasync loadOptions() {\n\t\ttry {\n\t\t\tconst corePath = FileSystem.findModulePkg(\"@h3ravel/core\", process.cwd()) ?? \"\";\n\t\t\tconst app = JSON.parse(await readFile(path.join(process.cwd(), \"/package.json\"), { encoding: \"utf8\" }));\n\t\t\tconst core = JSON.parse(await readFile(path.join(corePath, \"package.json\"), { encoding: \"utf8\" }));\n\t\t\tif (core) {\n\t\t\t\tthis.versions.app = semver.minVersion(core.version)?.version ?? this.versions.app;\n\t\t\t\tApplication.versions.app = this.versions.app;\n\t\t\t}\n\t\t\tif (app && app.devDependencies) {\n\t\t\t\tthis.versions.ts = semver.minVersion(app.devDependencies.typescript)?.version ?? this.versions.ts;\n\t\t\t\tApplication.versions.ts = this.versions.ts;\n\t\t\t}\n\t\t\tif (app && app.dependencies) {\n\t\t\t\tconst versions = Object.fromEntries(Object.entries(app.dependencies).filter(([e]) => e.includes(\"@h3ravel\")).map(([name, ver]) => [Str.afterLast(name, \"/\"), semver.minVersion(ver.includes(\"work\") ? this.versions.app : ver)?.version]));\n\t\t\t\tObject.assign(this.versions, versions);\n\t\t\t\tObject.assign(Application.versions, versions);\n\t\t\t}\n\t\t} catch {}\n\t}\n\t/**\n\t* Get all registered providers\n\t*/\n\tgetRegisteredProviders() {\n\t\treturn this.providers;\n\t}\n\t/**\n\t* Load default and optional providers dynamically\n\t* \n\t* Auto-Registration Behavior\n\t* \n\t* Minimal App: Loads only core, config, http, router by default.\n\t* Full-Stack App: Installs database, mail, queue, cache → they self-register via their providers.\n\t*/\n\tasync getConfiguredProviders() {\n\t\treturn [(await import(\"@h3ravel/core\")).CoreServiceProvider];\n\t}\n\tasync getAllProviders() {\n\t\treturn [...await this.getConfiguredProviders(), ...this.externalProviders];\n\t}\n\t/**\n\t* Configure and Dynamically register all configured service providers, then boot the app.\n\t* \n\t* @param providers All regitererable service providers\n\t* @param filtered A list of service provider name strings we do not want to register at all cost\n\t* @param autoRegisterProviders If set to false, service providers will not be auto discovered and registered.\n\t* \n\t* @returns \n\t*/\n\tasync quickStartup(providers, filtered = [], autoRegisterProviders = true) {\n\t\tthis.registerProviders(providers, filtered);\n\t\tawait this.registerConfiguredProviders(autoRegisterProviders);\n\t\treturn this.boot();\n\t}\n\t/**\n\t* Dynamically register all configured providers\n\t* \n\t* @param autoRegister If set to false, service providers will not be auto discovered and registered.\n\t*/\n\tasync registerConfiguredProviders(autoRegister = true) {\n\t\tconst providers = await this.getAllProviders();\n\t\tProviderRegistry.setSortable(false);\n\t\tProviderRegistry.setFiltered(this.filteredProviders);\n\t\tProviderRegistry.registerMany(providers);\n\t\tif (autoRegister) await ProviderRegistry.discoverProviders();\n\t\tProviderRegistry.doSort();\n\t\tfor (const ProviderClass of ProviderRegistry.all()) {\n\t\t\tif (!ProviderClass) continue;\n\t\t\tconst provider = new ProviderClass(this);\n\t\t\tawait this.register(provider);\n\t\t}\n\t}\n\t/**\n\t* Register service providers\n\t* \n\t* @param providers \n\t* @param filtered \n\t*/\n\tregisterProviders(providers, filtered = []) {\n\t\tthis.externalProviders.push(...providers);\n\t\tthis.filteredProviders = filtered;\n\t}\n\t/**\n\t* Register a provider\n\t*/\n\tasync register(provider) {\n\t\tawait new ContainerResolver(this).resolveMethodParams(provider, \"register\", this);\n\t\tif (provider.registeredCommands && provider.registeredCommands.length > 0) this.registeredCommands.push(...provider.registeredCommands);\n\t\tthis.providers.push(provider);\n\t}\n\t/**\n\t* checks if the application is running in CLI\n\t*/\n\trunningInConsole() {\n\t\treturn typeof process !== \"undefined\" && !!process.stdout && !!process.stdin;\n\t}\n\tgetRuntimeEnv() {\n\t\tif (typeof window !== \"undefined\" && typeof document !== \"undefined\") return \"browser\";\n\t\tif (typeof process !== \"undefined\" && process.versions?.node) return \"node\";\n\t\treturn \"unknown\";\n\t}\n\t/**\n\t* Boot all service providers after registration\n\t*/\n\tasync boot() {\n\t\tif (this.booted) return;\n\t\t/**\n\t\t* If debug is enabled, let's show the loaded service provider info\n\t\t*/\n\t\tif (process.env.APP_DEBUG === \"true\" && process.env.EXTENDED_DEBUG !== \"false\" && !this.providers.some((e) => e.runsInConsole)) ProviderRegistry.log(this.providers);\n\t\tfor (const provider of this.providers) if (provider.boot) if (Container.hasAnyDecorator(provider.boot))\n /**\n\t\t* If the service provider is decorated use the IoC container\n\t\t*/\n\t\tawait this.make(provider.boot);\n\t\telse\n /**\n\t\t* Otherwise instantiate manually so that we can at least\n\t\t* pass the app instance\n\t\t*/\n\t\tawait provider.boot(this);\n\t\tthis.booted = true;\n\t}\n\t/**\n\t* Fire up the developement server using the user provided arguments\n\t* \n\t* Port will be auto assigned if provided one is not available\n\t* \n\t* @param h3App The current H3 app instance\n\t* @param preferedPort If provided, this will overide the port set in the evironment\n\t*/\n\tasync fire(h3App, preferedPort) {\n\t\tconst serve = this.make(\"http.serve\");\n\t\tconst port = preferedPort ?? env(\"PORT\", 3e3);\n\t\tconst tries = env(\"RETRIES\", 1);\n\t\tconst hostname = env(\"HOSTNAME\", \"localhost\");\n\t\ttry {\n\t\t\tconst realPort = await detect(port);\n\t\t\tif (port == realPort) {\n\t\t\t\tconst server = serve(h3App, {\n\t\t\t\t\tport,\n\t\t\t\t\thostname,\n\t\t\t\t\tsilent: true\n\t\t\t\t});\n\t\t\t\tLogger.parse([[\"🚀 H3ravel running at:\", \"green\"], [`${server.options.protocol ?? \"http\"}://${server.options.hostname}:${server.options.port}`, \"cyan\"]]);\n\t\t\t} else if (this.tries <= tries) {\n\t\t\t\tawait this.fire(h3App, realPort);\n\t\t\t\tthis.tries++;\n\t\t\t} else Logger.parse([[\"ERROR:\", \"bgRed\"], [\"No free port available\", \"red\"]]);\n\t\t} catch (e) {\n\t\t\tLogger.parse([\n\t\t\t\t[\"An error occured\", \"bgRed\"],\n\t\t\t\t[e.message, \"red\"],\n\t\t\t\t[e.stack, \"red\"]\n\t\t\t], \"\\n\");\n\t\t}\n\t}\n\t/**\n\t* Get the base path of the app\n\t* \n\t* @returns \n\t*/\n\tgetBasePath() {\n\t\treturn this.basePath;\n\t}\n\t/**\n\t* Dynamically retrieves a path property from the class.\n\t* Any property ending with \"Path\" is accessible automatically.\n\t*\n\t* @param name - The base name of the path property\n\t* @returns \n\t*/\n\tgetPath(name, suffix) {\n\t\treturn path.join(this.paths.getPath(name, this.basePath), suffix ?? \"\");\n\t}\n\t/**\n\t* Programatically set the paths.\n\t*\n\t* @param name - The base name of the path property\n\t* @param path - The new path\n\t* @returns \n\t*/\n\tsetPath(name, path$1) {\n\t\treturn this.paths.setPath(name, path$1, this.basePath);\n\t}\n\t/**\n\t* Returns the installed version of the system core and typescript.\n\t*\n\t* @returns \n\t*/\n\tgetVersion(key) {\n\t\treturn this.versions[key]?.replaceAll(/\\^|~/g, \"\");\n\t}\n\t/**\n\t* Returns the installed version of the system core and typescript.\n\t*\n\t* @returns \n\t*/\n\tstatic getVersion(key) {\n\t\treturn this.versions[key]?.replaceAll(/\\^|~/g, \"\");\n\t}\n};\n\n//#endregion\n//#region src/Console/ConsoleCommand.ts\nvar ConsoleCommand = class {\n\tconstructor(app, kernel) {\n\t\tthis.app = app;\n\t\tthis.kernel = kernel;\n\t}\n\t/**\n\t* The underlying commander instance.\n\t*\n\t* @var Command\n\t*/\n\tprogram;\n\t/**\n\t* The name and signature of the console command.\n\t*\n\t* @var string\n\t*/\n\tsignature;\n\t/**\n\t* A dictionary of signatures or what not.\n\t*\n\t* @var object\n\t*/\n\tdictionary = {};\n\t/**\n\t* The console command description.\n\t*\n\t* @var string\n\t*/\n\tdescription;\n\t/**\n\t* The console command input.\n\t*\n\t* @var object\n\t*/\n\tinput = {\n\t\toptions: {},\n\t\targuments: {}\n\t};\n\t/**\n\t* Execute the console command.\n\t*/\n\tasync handle(..._args) {}\n\tsetApplication(app) {\n\t\tthis.app = app;\n\t}\n\tsetInput(options, args, regArgs, dictionary, program) {\n\t\tthis.program = program;\n\t\tthis.dictionary = dictionary;\n\t\tthis.input.options = options;\n\t\tthis.input.arguments = regArgs.map((e, i) => ({ [e.name()]: args[i] })).reduce((e, x) => Object.assign(e, x), {});\n\t\tthis.loadBaseFlags();\n\t\tLogger.configure({\n\t\t\tverbosity: this.option(\"verbose\"),\n\t\t\tsilent: this.option(\"silent\"),\n\t\t\tquiet: this.option(\"quiet\")\n\t\t});\n\t}\n\tgetSignature() {\n\t\treturn this.signature;\n\t}\n\tgetDescription() {\n\t\treturn this.description;\n\t}\n\toption(key, def) {\n\t\tconst option = this.input.options[key] ?? def;\n\t\treturn option === \"null\" || option === \"undefined\" ? void 0 : option;\n\t}\n\toptions(key) {\n\t\tif (key) return this.input.options[key];\n\t\treturn this.input.options;\n\t}\n\targument(key, def) {\n\t\treturn this.input.arguments[key] ?? def;\n\t}\n\targuments() {\n\t\treturn this.input.arguments;\n\t}\n\tloadBaseFlags() {\n\t\tthis.input.options.quiet = this.program.getOptionValue(\"quiet\") ?? false;\n\t\tthis.input.options.silent = this.program.getOptionValue(\"silent\") ?? false;\n\t\tthis.input.options.verbose = Number(this.program.getOptionValue(\"verbose\") ?? 0);\n\t\tthis.input.options.interaction = this.program.getOptionValue(\"interaction\") ?? false;\n\t}\n\t/**\n\t* Check if the command is quiet\n\t* \n\t* @returns \n\t*/\n\tisQuiet() {\n\t\treturn this.option(\"quiet\");\n\t}\n\t/**\n\t* Check if the command is silent\n\t* \n\t* @returns \n\t*/\n\tisSilent() {\n\t\treturn this.option(\"silent\");\n\t}\n\t/**\n\t* Check if the command is non interactive\n\t* \n\t* @returns \n\t*/\n\tisNonInteractive() {\n\t\treturn this.option(\"interaction\") === false;\n\t}\n\t/**\n\t* Get the verbosity of the command\n\t* \n\t* @returns \n\t*/\n\tgetVerbosity() {\n\t\treturn Number(this.option(\"verbose\"));\n\t}\n\t/**\n\t* Log an info message\n\t*/\n\tinfo(message) {\n\t\tLogger.info(message);\n\t\treturn this;\n\t}\n\t/**\n\t* Log a warning message\n\t*/\n\twarn(message) {\n\t\tLogger.warn(message);\n\t\treturn this;\n\t}\n\t/**\n\t* Log a line message\n\t*/\n\tline(message) {\n\t\tLogger.log(message, \"white\");\n\t\treturn this;\n\t}\n\t/**\n\t* Log a new line\n\t*/\n\tnewLine(count = 1) {\n\t\tif (Number(this.getVerbosity()) >= 3 || !this.isSilent() && !this.isQuiet()) for (let i = 0; i < count; i++) console.log(\"\");\n\t\treturn this;\n\t}\n\t/**\n\t* Log a success message\n\t*/\n\tsuccess(message) {\n\t\tLogger.success(message);\n\t\treturn this;\n\t}\n\t/**\n\t* Log an error message\n\t*/\n\terror(message) {\n\t\tLogger.error(message);\n\t\treturn this;\n\t}\n\t/**\n\t* Log a debug message\n\t*/\n\tdebug(message) {\n\t\tLogger.debug(message);\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/Console/ConsoleKernel.ts\nvar ConsoleKernel = class {\n\tcwd;\n\toutput = typeof Logger;\n\tbasePath = \"\";\n\tmodulePath;\n\tconsolePath;\n\tmodulePackage;\n\tconsolePackage;\n\tconstructor(app) {\n\t\tthis.app = app;\n\t}\n\tasync ensureDirectoryExists(dir) {\n\t\tawait mkdir(dir, { recursive: true });\n\t}\n};\n\n//#endregion\n//#region src/Controller.ts\n/**\n* Base controller class\n*/\nvar Controller = class {\n\tapp;\n\tconstructor(app) {\n\t\tthis.app = app;\n\t}\n};\n\n//#endregion\n//#region src/Di/Inject.ts\nfunction Inject(...dependencies) {\n\treturn function(target) {\n\t\ttarget.__inject__ = dependencies;\n\t};\n}\n/**\n* Allows binding dependencies to both class and class methods \n* \n* @returns \n*/\nfunction Injectable() {\n\treturn (...args) => {\n\t\tif (args.length === 1) args[0];\n\t\tif (args.length === 3) {\n\t\t\targs[0];\n\t\t\targs[1];\n\t\t\targs[2];\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/Exceptions/ConfigException.ts\nvar ConfigException = class extends Error {\n\tkey;\n\tconstructor(key, type = \"config\", cause) {\n\t\tconst info = {\n\t\t\tany: `${key} not configured`,\n\t\t\tenv: `${key} environment variable not configured`,\n\t\t\tconfig: `${key} config not set`\n\t\t};\n\t\tconst message = Logger.log([[\"ERROR:\", \"bgRed\"], [info[type], \"white\"]], \" \", false);\n\t\tsuper(message, { cause });\n\t\tthis.key = key;\n\t}\n};\n\n//#endregion\n//#region src/Http/Kernel.ts\n/**\n* Kernel class handles middleware execution and response transformations.\n* It acts as the core middleware pipeline for HTTP requests.\n*/\nvar Kernel = class {\n\t/**\n\t* @param context - A factory function that converts an H3Event into an HttpContext.\n\t* @param middleware - An array of middleware classes that will be executed in sequence.\n\t*/\n\tconstructor(context, middleware = []) {\n\t\tthis.context = context;\n\t\tthis.middleware = middleware;\n\t}\n\t/**\n\t* Handles an incoming request and passes it through middleware before invoking the next handler.\n\t* \n\t* @param event - The raw H3 event object.\n\t* @param next - A callback function that represents the next layer (usually the controller or final handler).\n\t* @returns A promise resolving to the result of the request pipeline.\n\t*/\n\tasync handle(event, next) {\n\t\t/**\n\t\t* Convert the raw event into a standardized HttpContext\n\t\t*/\n\t\tconst ctx = this.context(event);\n\t\tconst { app } = ctx.request;\n\t\t/** \n\t\t* Bind HTTP Response instance to the service container\n\t\t*/\n\t\tapp.bind(\"http.response\", () => {\n\t\t\treturn ctx.response;\n\t\t});\n\t\t/** \n\t\t* Bind HTTP Request instance to the service container\n\t\t*/\n\t\tapp.bind(\"http.request\", () => {\n\t\t\treturn ctx.request;\n\t\t});\n\t\t/**\n\t\t* Run middleware stack and obtain result\n\t\t*/\n\t\tconst result = await this.runMiddleware(ctx, () => next(ctx));\n\t\t/**\n\t\t* If a plain object is returned from a controller or middleware,\n\t\t* automatically set the JSON Content-Type header for the response.\n\t\t*/\n\t\tif (result !== void 0 && this.isPlainObject(result)) event.res.headers.set(\"Content-Type\", \"application/json; charset=UTF-8\");\n\t\treturn result;\n\t}\n\t/**\n\t* Sequentially runs middleware in the order they were registered.\n\t* \n\t* @param context - The standardized HttpContext.\n\t* @param next - Callback to execute when middleware completes.\n\t* @returns A promise resolving to the final handler's result.\n\t*/\n\tasync runMiddleware(context, next) {\n\t\tlet index = -1;\n\t\tconst runner = async (i) => {\n\t\t\tif (i <= index) throw new Error(\"next() called multiple times\");\n\t\t\tindex = i;\n\t\t\tconst middleware = this.middleware[i];\n\t\t\tif (middleware)\n /**\n\t\t\t* Execute the current middleware and proceed to the next one\n\t\t\t*/\n\t\t\treturn middleware.handle(context, () => runner(i + 1));\n\t\t\telse\n /**\n\t\t\t* If no more middleware, call the final handler\n\t\t\t*/\n\t\t\treturn next(context);\n\t\t};\n\t\treturn runner(0);\n\t}\n\t/**\n\t* Utility function to determine if a value is a plain object or array.\n\t* \n\t* @param value - The value to check.\n\t* @returns True if the value is a plain object or array, otherwise false.\n\t*/\n\tisPlainObject(value) {\n\t\treturn typeof value === \"object\" && value !== null && (value.constructor === Object || value.constructor === Array);\n\t}\n};\n\n//#endregion\n//#region src/ServiceProvider.ts\nconst Inference = class {};\nvar ServiceProvider = class extends Inference {\n\t/**\n\t* The current app instance\n\t*/\n\tapp;\n\t/**\n\t* Unique Identifier for the service providers\n\t*/\n\tstatic uid;\n\t/**\n\t* Sort order\n\t*/\n\tstatic order;\n\t/**\n\t* Sort priority\n\t*/\n\tstatic priority = 0;\n\t/**\n\t* Indicate that this service provider only runs in console\n\t*/\n\tstatic console = false;\n\t/**\n\t* List of registered console commands\n\t*/\n\tregisteredCommands;\n\tconstructor(app) {\n\t\tsuper();\n\t\tthis.app = app;\n\t}\n\t/**\n\t* An array of console commands to register.\n\t*/\n\tcommands(commands) {\n\t\tthis.registeredCommands = commands;\n\t}\n};\n\n//#endregion\n//#region src/Providers/CoreServiceProvider.ts\n/**\n* Bootstraps core services and bindings.\n* \n* Bind essential services to the container (logger, config repository).\n* Register app-level singletons.\n* Set up exception handling.\n* \n* Auto-Registered\n*/\nvar CoreServiceProvider = class extends ServiceProvider {\n\tstatic priority = 999;\n\tregister() {\n\t\tObject.assign(globalThis, { str });\n\t}\n\tboot() {\n\t\ttry {\n\t\t\tObject.assign(globalThis, { asset: this.app.make(\"asset\") });\n\t\t} catch {}\n\t}\n};\n\n//#endregion\nexport { Application, ConfigException, ConsoleCommand, ConsoleKernel, Container, ContainerResolver, Controller, CoreServiceProvider, Inject, Injectable, Kernel, ProviderRegistry, Registerer, ServiceProvider };\n//# sourceMappingURL=index.js.map","import { InvalidArgumentException, type SnakeToTitleCase, Str } from '@h3ravel/support'\n\nimport type { Configuration, HashAlgorithm } from '../Contracts/ManagerContract'\nimport { BcryptHasher } from '../Drivers/BcryptHasher'\nimport { ArgonHasher } from '../Drivers/ArgonHasher'\nimport { Argon2idHasher } from '../Drivers/Argon2idHasher'\nimport path from 'node:path'\nimport { existsSync } from 'node:fs'\nimport { ConfigException } from 'packages/core/dist'\nimport { FileSystem } from '@h3ravel/shared'\n\ntype CreateMethodName = `create${SnakeToTitleCase<HashAlgorithm>}Driver`\n\nexport abstract class Manager {\n constructor(public config = {} as Configuration) { }\n\n public abstract driver (): BcryptHasher | ArgonHasher | Argon2idHasher\n public createBcryptDriver?(): BcryptHasher\n public createArgonDriver?(): ArgonHasher\n public createArgon2idDriver?(): Argon2idHasher\n\n /**\n * Get the default driver name.\n *\n * @return string\n */\n public getDefaultDriver () {\n return this.config.driver ?? 'bcrypt'\n }\n\n protected createDriver (driver: HashAlgorithm) {\n const method = 'create' + Str.studly(driver) + 'Driver' as CreateMethodName\n\n if (typeof this[method] !== 'undefined') {\n return this[method]()\n }\n\n throw new InvalidArgumentException(`Driver [${driver}] not supported.`)\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param value\n * @returns\n */\n public isHashed (value: string) {\n return this.driver().info(value).algo !== null\n }\n\n /**\n * Autoload config and initialize library\n *\n * @returns\n */\n public async init (basePath: string = process.cwd()): Promise<this> {\n const jsPath = path.resolve(basePath, 'hashing.config.js')\n const tsPath = path.resolve(basePath, 'hashing.config.ts')\n\n if (existsSync(jsPath)) {\n this.config = (await import(jsPath)).default\n return this\n }\n\n if (existsSync(tsPath)) {\n if (process.env.NODE_ENV !== 'production') {\n this.config = (await import(tsPath)).default\n return this\n } else {\n throw new ConfigException(\n 'hashing.config.ts found in production without build step',\n )\n }\n }\n\n return this\n }\n}\n","import { Configuration, HashAlgorithm, Options } from './Contracts/ManagerContract'\n\nimport { Argon2idHasher } from './Drivers/Argon2idHasher'\nimport { ArgonHasher } from './Drivers/ArgonHasher'\nimport { BcryptHasher } from './Drivers/BcryptHasher'\nimport { InvalidArgumentException } from '@h3ravel/support'\nimport { Manager } from './Utils/Manager'\n\nexport class HashManager extends Manager {\n private drivers: { [name: string]: BcryptHasher | ArgonHasher | Argon2idHasher } = {}\n\n /**\n * Create an instance of the Bcrypt hash Driver.\n *\n * @return BcryptHasher\n */\n public createBcryptDriver () {\n return new BcryptHasher(this.config[this.config.driver])\n }\n\n /**\n * Create an instance of the Argon hash Driver.\n *\n * @return ArgonHasher\n */\n public createArgonDriver () {\n return new ArgonHasher(this.config[this.config.driver])\n }\n\n /**\n * Create an instance of the Argon2id hash Driver.\n *\n * @return Argon2idHasher\n */\n public createArgon2idDriver () {\n return new Argon2idHasher(this.config[this.config.driver])\n }\n\n /**\n * Hash the given value.\n *\n * @param value\n * @param options\n * \n * @returns\n */\n public make (value: string, options: Options = {}) {\n return this.driver().make(value, options as never)\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param hashedValue\n * @returns\n */\n public info (hashedValue: string) {\n return this.driver().info(hashedValue)\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param value\n * @param hashedValue\n * @param options\n * @returns\n */\n public check (value: string, hashedValue?: string, options: Options = {}) {\n return this.driver().check(value, hashedValue, options as never)\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param hashedValue\n * @param options\n * @returns\n */\n public needsRehash (hashedValue: string, options: Options = {}) {\n return this.driver().needsRehash(hashedValue, options as never)\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param string value\n * @returns\n */\n public isHashed (value: string) {\n return this.driver().info(value)['algo'] !== null\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @param value\n * @return bool\n *\n * @internal\n */\n public verifyConfiguration (value: string) {\n const driver = this.driver()\n\n if (typeof driver.verifyConfiguration !== 'undefined') {\n return driver.verifyConfiguration(value)\n }\n\n return true\n }\n\n /**\n * Get a driver instance.\n *\n * @param driver\n * \n * @returns\n *\n * @throws InvalidArgumentException\n */\n public driver (driver?: HashAlgorithm) {\n driver = driver ?? this.getDefaultDriver()\n\n if (!driver) {\n throw new InvalidArgumentException(`Unable to resolve NULL driver for ${this.constructor.name}.'`)\n }\n\n // If the given driver has not been created before, we will create the instances\n // here and cache it so we can return it next time very quickly. If there is\n // already a driver created by this name, we'll just return that instance.\n return this.drivers[driver] ??= this.createDriver(driver)\n }\n}\n\nexport const defineConfig = (config: Configuration) => {\n return config\n}\n","import { Options } from './Contracts/ManagerContract'\nimport { RuntimeException } from '@h3ravel/support'\n\nexport class Hash {\n /**\n * Hash the given value.\n *\n * @param value\n * @param options\n * \n * @returns\n */\n public static make (value: string, options: Options = {}) {\n return this.driver().make(value, options)\n }\n\n /**\n * Get information about the given hashed value.\n *\n * @param hashedValue\n * @returns\n */\n public static info (hashedValue: string) {\n return this.driver().info(hashedValue)\n }\n\n /**\n * Check the given plain value against a hash.\n *\n * @param value\n * @param hashedValue\n * @param options\n * @returns\n */\n public static check (value: string, hashedValue?: string, options: Options = {}) {\n return this.driver().check(value, hashedValue, options)\n }\n\n /**\n * Check if the given hash has been hashed using the given options.\n *\n * @param hashedValue\n * @param options\n * @returns\n */\n public static needsRehash (hashedValue: string, options: Options = {}) {\n return this.driver().needsRehash(hashedValue, options)\n }\n\n /**\n * Determine if a given string is already hashed.\n *\n * @param string value\n * @returns\n */\n public static isHashed (value: string) {\n return this.driver().isHashed(value)\n }\n\n /**\n * Verifies that the configuration is less than or equal to what is configured.\n *\n * @param value\n * @return bool\n *\n * @internal\n */\n public static verifyConfiguration (value: string) {\n return this.driver().verifyConfiguration(value)\n }\n\n /**\n * Get a driver instance.\n *\n * @param driver\n * \n * @returns\n *\n * @throws InvalidArgumentException\n */\n public static driver () {\n if (typeof globalThis.Hash === 'undefined') {\n throw new RuntimeException('The Hash helper is only available on H3ravel, use the HashManager class instead.')\n }\n return globalThis.Hash\n }\n}\n","import { HashManager } from '../HashManager'\n\n/**\n * Register HashManager. \n */\nexport class HashingServiceProvider {\n public static priority = 991\n\n constructor(private app: any) { }\n\n register () {\n const manager = new HashManager(this.app.make('config').get('hashing'))\n\n globalThis.Hash = manager\n\n this.app.singleton('hash', () => {\n return manager\n })\n\n this.app.singleton('hash.driver', () => {\n return manager.driver()\n })\n }\n}\n"],"x_google_ignoreList":[4,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,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128],"mappings":"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AAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;CAAY;CAAY;CAAY;CAAY;CAC5D;CAAY;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"}